Started work on web-based SSH support.

Ylian Saint-Hilaire committed Apr 28, 2021 at 23:22 UTC 110195d8c6023c8d051c4b402836850e98013cef
9 files changed +2151 -1701
MeshCentralServer.njsproj
+3
@@ -178,6 +178,7 @@
178 <Compile Include="public\novnc\vendor\promise.js" />
179 <Compile Include="public\scripts\agent-redir-rtc-0.1.0.js" />
180 <Compile Include="public\serviceworker.js" />
181 + <Compile Include="ssh.js" />
182 <Compile Include="swarmserver.js" />
183 <Compile Include="multiserver.js" />
184 <Compile Include="pass.js" />
@@ -570,6 +571,8 @@
571 <Content Include="views\messenger.handlebars" />
572 <Content Include="views\mstsc.handlebars" />
573 <Content Include="views\player.handlebars" />
574 + <Content Include="views\sharing.handlebars" />
575 + <Content Include="views\ssh.handlebars" />
576 <Content Include="views\terminal.handlebars" />
577 <Content Include="views\terms-mobile.handlebars" />
578 <Content Include="views\terms.handlebars" />
meshcentral.js
+3
@@ -3092,6 +3092,7 @@ function mainStart() {
3092 var allsspi = true;
3093 var yubikey = false;
3094 var mstsc = false;
3095 + var ssh = false;
3096 var sessionRecording = false;
3097 var domainCount = 0;
3098 var wildleek = false;
@@ -3106,6 +3107,7 @@ function mainStart() {
3107 if (config.domains[i].yubikey != null) { yubikey = true; }
3108 if (config.domains[i].auth == 'ldap') { ldap = true; }
3109 if (config.domains[i].mstsc === true) { mstsc = true; }
3110 + if (config.domains[i].ssh === true) { ssh = true; }
3111 if ((typeof config.domains[i].authstrategies == 'object')) {
3112 if (passport == null) { passport = ['passport']; }
3113 if ((typeof config.domains[i].authstrategies.twitter == 'object') && (typeof config.domains[i].authstrategies.twitter.clientid == 'string') && (typeof config.domains[i].authstrategies.twitter.clientsecret == 'string') && (passport.indexOf('passport-twitter') == -1)) { passport.push('passport-twitter'); }
@@ -3124,6 +3126,7 @@ function mainStart() {
3126 if (require('os').platform() == 'win32') { modules.push('node-windows'); modules.push('loadavg-windows'); if (sspi == true) { modules.push('node-sspi'); } } // Add Windows modules
3127 if (ldap == true) { modules.push('ldapauth-fork'); }
3128 if (mstsc == true) { modules.push('node-rdpjs-2'); }
3129 + if (ssh == true) { modules.push('ssh2'); }
3130 if (passport != null) { modules.push(...passport); }
3131 if (sessionRecording == true) { modules.push('image-size'); } // Need to get the remote desktop JPEG sizes to index the recodring file.
3132 if (config.letsencrypt != null) { if (nodeVersion < 8) { addServerWarning("Let's Encrypt support requires Node v8.x or higher.", !args.launch); } else { modules.push('acme-client'); } } // Add acme-client module
public/scripts/agent-desktop-0.0.2-min.js
+1 -1
@@ -1 +1 @@
1 -Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:function(e,t){return new Uint8Array(Array.prototype.slice.call(this,e,t))}});var CreateAgentRemoteDesktop=function(e,t){var l={};"string"==typeof(l.CanvasId=e)&&(l.CanvasId=Q(e)),l.Canvas=l.CanvasId.getContext("2d"),l.scrolldiv=t,l.State=0,l.PendingOperations=[],l.tilesReceived=0,l.TilesDrawn=0,l.KillDraw=0,l.ipad=!1,l.tabletKeyboardVisible=!1,l.LastX=0,l.LastY=0,l.touchenabled=0,l.submenuoffset=0,l.touchtimer=null,l.TouchArray={},l.connectmode=0,l.connectioncount=0,l.rotation=0,l.protocol=2,l.debugmode=0,l.firstUpKeys=[],l.stopInput=!1,l.localKeyMap=!0,l.remoteKeyMap=!1,l.pressedKeys=[],l.sessionid=0,l.username,l.oldie=!1,l.CompressionLevel=50,l.ScalingLevel=1024,l.FrameRateTimer=100,l.SwapMouse=!1,l.FirstDraw=!1,l.onRemoteInputLockChanged=null,l.RemoteInputLock=null,l.ScreenWidth=960,l.ScreenHeight=701,l.width=960,l.height=960,l.displays=null,l.selectedDisplay=null,l.onScreenSizeChange=null,l.onMessage=null,l.onConnectCountChanged=null,l.onDebugMessage=null,l.onTouchEnabledChanged=null,l.onDisplayinfo=null;var h=!(l.accumulator=null),g="default";l.mouseCursorActive=function(e){h!=e&&(h=e,l.CanvasId.style.cursor=1==e?g:"default")};var p=["default","progress","crosshair","pointer","help","text","no-drop","move","nesw-resize","ns-resize","nwse-resize","w-resize","alias","wait","none","not-allowed","col-resize","row-resize","copy","zoom-in","zoom-out"];l.Start=function(){l.State=0,l.accumulator=null},l.Stop=function(){l.setRotation(0),l.UnGrabKeyInput(),l.UnGrabMouseInput(),l.touchenabled=0,null!=l.onScreenSizeChange&&l.onScreenSizeChange(l,l.ScreenWidth,l.ScreenHeight,l.CanvasId),l.Canvas.clearRect(0,0,l.CanvasId.width,l.CanvasId.height)},l.xxStateChange=function(e){l.State!=e&&(l.State=e,l.CanvasId.style.cursor="default",0===e&&l.Stop())},l.send=function(e){2<l.debugmode&&console.log("KSend("+e.length+"): "+rstr2hex(e)),null!=l.parent&&l.parent.send(e)},l.ProcessPictureMsg=function(e,t,n){var o=new Image;o.xcount=l.tilesReceived++;for(var a=l.tilesReceived,r=e.slice(4),s=0,i=[];5e4<r.byteLength-s;)i.push(String.fromCharCode.apply(null,r.slice(s,s+5e4))),s+=5e4;0<s?i.push(String.fromCharCode.apply(null,r.slice(s))):i.push(String.fromCharCode.apply(null,r)),o.src="data:image/jpeg;base64,"+btoa(i.join("")),o.onload=function(){if(null!=l.Canvas&&l.KillDraw<a&&0!=l.State)for(l.PendingOperations.push([a,2,o,t,n]);l.DoPendingOperations(););else l.PendingOperations.push([a,0])},o.error=function(){console.log("DecodeTileError")}},l.DoPendingOperations=function(){if(0==l.PendingOperations.length)return!1;for(var e=0;e<l.PendingOperations.length;e++){var t=l.PendingOperations[e];if(t[0]==l.TilesDrawn+1)return 1==t[1]?l.ProcessCopyRectMsg(t[2]):2==t[1]&&(l.Canvas.drawImage(t[2],l.rotX(t[3],t[4]),l.rotY(t[3],t[4])),delete t[2]),l.PendingOperations.splice(e,1),delete t,l.TilesDrawn++,l.TilesDrawn==l.tilesReceived&&l.KillDraw<l.TilesDrawn&&(l.KillDraw=l.TilesDrawn=l.tilesReceived=0),!0}return l.oldie&&0<l.PendingOperations.length&&l.TilesDrawn++,!1},l.ProcessCopyRectMsg=function(e){var t=((255&e.charCodeAt(0))<<8)+(255&e.charCodeAt(1)),n=((255&e.charCodeAt(2))<<8)+(255&e.charCodeAt(3)),o=((255&e.charCodeAt(4))<<8)+(255&e.charCodeAt(5)),a=((255&e.charCodeAt(6))<<8)+(255&e.charCodeAt(7)),r=((255&e.charCodeAt(8))<<8)+(255&e.charCodeAt(9)),e=((255&e.charCodeAt(10))<<8)+(255&e.charCodeAt(11));l.Canvas.drawImage(Canvas.canvas,t,n,r,e,o,a,r,e)},l.SendUnPause=function(){1<l.debugmode&&console.log("SendUnPause"),l.send(String.fromCharCode(0,8,0,5,0))},l.SendPause=function(){1<l.debugmode&&console.log("SendPause"),l.send(String.fromCharCode(0,8,0,5,1))},l.SendCompressionLevel=function(e,t,n,o){t&&(l.CompressionLevel=t),n&&(l.ScalingLevel=n),o&&(l.FrameRateTimer=o),l.send(String.fromCharCode(0,5,0,10,e,l.CompressionLevel)+l.shortToStr(l.ScalingLevel)+l.shortToStr(l.FrameRateTimer))},l.SendRefresh=function(){l.send(String.fromCharCode(0,6,0,4))},l.ProcessScreenMsg=function(e,t){if(0<l.debugmode&&console.log("ScreenSize: "+e+" x "+t),l.ScreenWidth!=e||l.ScreenHeight!=t){for(l.Canvas.setTransform(1,0,0,1,0,0),l.rotation=0,l.FirstDraw=!0,l.ScreenWidth=l.width=e,l.ScreenHeight=l.height=t,l.KillDraw=l.tilesReceived;0<l.PendingOperations.length;)l.PendingOperations.shift();l.SendCompressionLevel(1),l.SendUnPause(),l.SendRemoteInputLock(2),null!=l.onScreenSizeChange&&l.onScreenSizeChange(l,l.ScreenWidth,l.ScreenHeight,l.CanvasId)}},l.ProcessBinaryCommand=function(e,t,n){var o,a;switch(3!=e&&4!=e&&7!=e||(o=(n[4]<<8)+n[5],a=(n[6]<<8)+n[7]),2<l.debugmode&&console.log("CMD",e,t,o,a),null!=l.recordedData&&(65e3<t?l.recordedData.push(S(2,1,l.shortToStr(27)+l.shortToStr(8)+l.intToStr(t)+l.shortToStr(e)+l.shortToStr(0)+l.shortToStr(0)+l.shortToStr(0)+String.fromCharCode.apply(null,n))):l.recordedData.push(S(2,1,String.fromCharCode.apply(null,n)))),e){case 3:l.FirstDraw&&l.onResize(),l.ProcessPictureMsg(n.slice(4),o,a);break;case 7:l.ProcessScreenMsg(o,a),l.SendKeyMsgKC(l.KeyAction.UP,16),l.SendKeyMsgKC(l.KeyAction.UP,17),l.SendKeyMsgKC(l.KeyAction.UP,18),l.SendKeyMsgKC(l.KeyAction.UP,91),l.SendKeyMsgKC(l.KeyAction.UP,92),l.SendKeyMsgKC(l.KeyAction.UP,16),l.send(String.fromCharCode(0,14,0,4));break;case 11:var r=0,s={},i=(n[4]<<8)+n[5];if(0<i)for(var r=(n[6+2*i]<<8)+n[7+2*i],c=0;c<i;c++){var u=(n[6+2*c]<<8)+n[7+2*c];s[u]=65535==u?"All Displays":"Display "+u}l.displays=s,l.selectedDisplay=r,null!=l.onDisplayinfo&&l.onDisplayinfo(l,s,r);break;case 12:break;case 14:l.touchenabled=1,l.TouchArray={},null!=l.onTouchEnabledChanged&&l.onTouchEnabledChanged(l.touchenabled);break;case 15:l.TouchArray={};break;case 17:var d=String.fromCharCode.apply(null,n.slice(4));console.log("Got KVM Message: "+d),null!=l.onMessage&&l.onMessage(d,l);break;case 65:"."!=(d=String.fromCharCode.apply(null,n.slice(4)))[0]?(console.log(d),l.parent&&l.parent.setConsoleMessage&&l.parent.setConsoleMessage(d)):console.log("KVM: "+d.substring(1));break;case 87:if(5!=t)break;l.RemoteInputLock!=(0!=n[4])&&(l.RemoteInputLock=0!=n[4],l.onRemoteInputLockChanged&&l.onRemoteInputLockChanged(l,l.RemoteInputLock));break;case 88:if(5!=t||l.stopInput)break;d=n[4];g=p[d=p.length<d?0:d],h&&(l.CanvasId.style.cursor=g);break;default:console.log("Unknown command",e,t)}},l.MouseButton={NONE:0,LEFT:2,RIGHT:8,MIDDLE:32},l.KeyAction={NONE:0,DOWN:1,UP:2,SCROLL:3,EXUP:4,EXDOWN:5,DBLCLICK:6},l.InputType={KEY:1,MOUSE:2,CTRLALTDEL:10,TOUCH:15,KEYUNICODE:85},l.Alternate=0;var o={Pause:19,CapsLock:20,Space:32,Quote:222,Minus:189,NumpadMultiply:106,NumpadAdd:107,PrintScreen:44,Comma:188,NumpadSubtract:109,NumpadDecimal:110,Period:190,Slash:191,NumpadDivide:111,Semicolon:186,Equal:187,OSLeft:91,BracketLeft:219,OSRight:91,Backslash:220,BracketRight:221,ContextMenu:93,Backquote:192,NumLock:144,ScrollLock:145,Backspace:8,Tab:9,Enter:13,NumpadEnter:13,Escape:27,Delete:46,Home:36,PageUp:33,PageDown:34,ArrowLeft:37,ArrowUp:38,ArrowRight:39,ArrowDown:40,End:35,Insert:45,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,VolumeMute:181};function S(e,t,n){var o=Date.now();return"number"==typeof n?(l.recordedSize+=n,l.shortToStr(e)+l.shortToStr(t)+l.intToStr(n)+l.intToStr(o>>32)+l.intToStr(32&o)):(l.recordedSize+=n.length,l.shortToStr(e)+l.shortToStr(t)+l.intToStr(n.length)+l.intToStr(o>>32)+l.intToStr(32&o)+n)}return l.SendKeyMsg=function(e,t){var n;null!=e&&((t=t||window.event).code&&0==l.localKeyMap?null!=(n=(n=t).code.startsWith("Key")&&4==n.code.length?n.code.charCodeAt(3):n.code.startsWith("Digit")&&6==n.code.length?n.code.charCodeAt(5):n.code.startsWith("Numpad")&&7==n.code.length?n.code.charCodeAt(6)+48:o[n.code])&&l.SendKeyMsgKC(e,n):(59==(n=t.keyCode)?n=186:173==n?n=189:61==n&&(n=187),l.SendKeyMsgKC(e,n)))},l.SendRemoteInputLock=function(e){l.send(String.fromCharCode(0,l.InputType.KEYUNICODE,0,5,e))},l.SendMessage=function(e){3==l.State&&l.send(String.fromCharCode(0,17)+l.shortToStr(4+e.length)+e)},l.SendKeyMsgKC=function(e,t){if(3==l.State)if("object"==typeof e)for(var n in e)l.SendKeyMsgKC(e[n][0],e[n][1]);else 1==e?-1==l.pressedKeys.indexOf(t)&&l.pressedKeys.unshift(t):2==e&&-1!=(n=l.pressedKeys.indexOf(t))&&l.pressedKeys.splice(n,1),0<l.debugmode&&console.log("Sending Key "+t+", action "+e),l.send(String.fromCharCode(0,l.InputType.KEY,0,6,e-1,t))},l.SendStringUnicode=function(e){if(3==l.State)for(var t=0;t<e.length;t++)l.send(String.fromCharCode(0,l.InputType.KEYUNICODE,0,7,0)+ShortToStr(e.charCodeAt(t))),l.send(String.fromCharCode(0,l.InputType.KEYUNICODE,0,7,1)+ShortToStr(e.charCodeAt(t)))},l.SendKeyUnicode=function(e,t){3==l.State&&(0<l.debugmode&&console.log("Sending UnicodeKey "+t),l.send(String.fromCharCode(0,l.InputType.KEYUNICODE,0,7,e-1)+ShortToStr(t)))},l.sendcad=function(){l.SendCtrlAltDelMsg()},l.SendCtrlAltDelMsg=function(){3==l.State&&l.send(String.fromCharCode(0,l.InputType.CTRLALTDEL,0,4))},l.SendEscKey=function(){3==l.State&&l.send(String.fromCharCode(0,l.InputType.KEY,0,6,0,27,0,l.InputType.KEY,0,6,1,27))},l.SendStartMsg=function(){l.SendKeyMsgKC(l.KeyAction.EXDOWN,91),l.SendKeyMsgKC(l.KeyAction.EXUP,91)},l.SendCharmsMsg=function(){l.SendKeyMsgKC(l.KeyAction.EXDOWN,91),l.SendKeyMsgKC(l.KeyAction.DOWN,67),l.SendKeyMsgKC(l.KeyAction.UP,67),l.SendKeyMsgKC(l.KeyAction.EXUP,91)},l.SendTouchMsg1=function(e,t,n,o){3==l.State&&l.send(String.fromCharCode(0,l.InputType.TOUCH)+l.shortToStr(14)+String.fromCharCode(1,e)+l.intToStr(t)+l.shortToStr(n)+l.shortToStr(o))},l.SendTouchMsg2=function(e,t){var n,o,a="";for(o in l.TouchArray)o==e?n=t:1==l.TouchArray[o].f?(n=65542,l.TouchArray[o].f=3,0):2==l.TouchArray[o].f?(n=262144,0):n=131078,a+=String.fromCharCode(o)+l.intToStr(n)+l.shortToStr(l.TouchArray[o].x)+l.shortToStr(l.TouchArray[o].y),2==l.TouchArray[o].f&&delete l.TouchArray[o];3==l.State&&l.send(String.fromCharCode(0,l.InputType.TOUCH)+l.shortToStr(5+a.length)+String.fromCharCode(2)+a),0==Object.keys(l.TouchArray).length&&null!=l.touchtimer&&(clearInterval(l.touchtimer),l.touchtimer=null)},l.SendMouseMsg=function(e,t){var n,o,a,r,s,i;3==l.State&&null!=e&&null!=l.Canvas&&(t=t||window.event,s=l.Canvas.canvas.height/l.CanvasId.clientHeight,r=l.Canvas.canvas.width/l.CanvasId.clientWidth,i=l.GetPositionOfControl(l.Canvas.canvas),n=(t.pageX-i[0])*r,o=(t.pageY-i[1])*s,t.addx&&(n+=t.addx),t.addy&&(o+=t.addy),0<=n&&n<=l.Canvas.canvas.width&&0<=o&&o<=l.Canvas.canvas.height&&(r=a=0,e==l.KeyAction.UP||e==l.KeyAction.DOWN?t.which?a=1==t.which?l.MouseButton.LEFT:2==t.which?l.MouseButton.MIDDLE:l.MouseButton.RIGHT:t.button&&(a=0==t.button?l.MouseButton.LEFT:1==t.button?l.MouseButton.MIDDLE:l.MouseButton.RIGHT):e==l.KeyAction.SCROLL&&(t.detail?r=120*t.detail*-1:t.wheelDelta&&(r=3*t.wheelDelta)),!0===l.SwapMouse&&(a==l.MouseButton.LEFT?a=l.MouseButton.RIGHT:a==l.MouseButton.RIGHT&&(a=l.MouseButton.LEFT)),i="",i=e==l.KeyAction.DBLCLICK?String.fromCharCode(0,l.InputType.MOUSE,0,10,0,136,n/256&255,255&n,o/256&255,255&o):e==l.KeyAction.SCROLL?(t=r<(t=s=0)?(s=255-(Math.abs(r)>>8),255-(255&Math.abs(r))):(s=r>>8,255&r),String.fromCharCode(0,l.InputType.MOUSE,0,12,0,0,n/256&255,255&n,o/256&255,255&o,s,t)):String.fromCharCode(0,l.InputType.MOUSE,0,10,0,e==l.KeyAction.DOWN?a:2*a&255,n/256&255,255&n,o/256&255,255&o),l.Action==l.KeyAction.NONE?0==l.Alternate||l.ipad?(l.send(i),l.Alternate=1):l.Alternate=0:l.send(i)))},l.GetDisplayNumbers=function(){l.send(String.fromCharCode(0,11,0,4))},l.SetDisplay=function(e){l.send(String.fromCharCode(0,12,0,6,e>>8,255&e))},l.intToStr=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},l.shortToStr=function(e){return String.fromCharCode(e>>8&255,255&e)},l.onResize=function(){0!=l.ScreenWidth&&0!=l.ScreenHeight&&(l.Canvas.canvas.width==l.ScreenWidth&&l.Canvas.canvas.height==l.ScreenHeight||(l.FirstDraw&&(l.Canvas.canvas.width=l.ScreenWidth,l.Canvas.canvas.height=l.ScreenHeight,l.Canvas.fillRect(0,0,l.ScreenWidth,l.ScreenHeight),null!=l.onScreenSizeChange&&l.onScreenSizeChange(l,l.ScreenWidth,l.ScreenHeight,l.CanvasId)),l.FirstDraw=!1,1<l.debugmode&&console.log("onResize: "+l.ScreenWidth+" x "+l.ScreenHeight)))},l.xxMouseInputGrab=!1,l.xxKeyInputGrab=!1,l.xxMouseMove=function(e){return 3==l.State&&l.SendMouseMsg(l.KeyAction.NONE,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxMouseUp=function(e){return 3==l.State&&l.SendMouseMsg(l.KeyAction.UP,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxMouseDown=function(e){return 3==l.State&&l.SendMouseMsg(l.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxMouseDblClick=function(e){return 3==l.State&&l.SendMouseMsg(l.KeyAction.DBLCLICK,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxDOMMouseScroll=function(e){return 3!=l.State||(l.SendMouseMsg(l.KeyAction.SCROLL,e),!1)},l.xxMouseWheel=function(e){return 3!=l.State||(l.SendMouseMsg(l.KeyAction.SCROLL,e),!1)},l.xxKeyUp=function(e){return"Dead"!=e.key&&3==l.State&&("string"==typeof e.key&&1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&(0==l.remoteKeyMap||0<l.debugmode)?l.SendKeyUnicode(l.KeyAction.UP,e.key.charCodeAt(0)):l.SendKeyMsg(l.KeyAction.UP,e)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxKeyDown=function(e){if("Dead"!=e.key&&3==l.State&&("string"!=typeof e.key||1!=e.key.length||1==e.ctrlKey||1==e.altKey||!(0==l.remoteKeyMap||0<l.debugmode)))return l.SendKeyMsg(l.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxKeyPress=function(e){return"Dead"!=e.key&&3==l.State&&"string"==typeof e.key&&1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&(0==l.remoteKeyMap||0<l.debugmode)&&l.SendKeyUnicode(l.KeyAction.DOWN,e.key.charCodeAt(0)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.handleKeys=function(e){return 1!=l.stopInput&&3==desktop.State&&l.xxKeyPress(e)},l.handleKeyUp=function(e){return 1!=l.stopInput&&3==desktop.State&&(l.firstUpKeys.length<5&&(l.firstUpKeys.push(e.keyCode),5==l.firstUpKeys.length&&("16,17,91,91,16"!=(t=l.firstUpKeys.join(","))&&"16,17,18,91,92"!=t||(l.stopInput=!0))),l.xxKeyUp(e));var t},l.handleKeyDown=function(e){return 1!=l.stopInput&&3==desktop.State&&l.xxKeyDown(e)},l.handleReleaseKeys=function(){var e,t=JSON.parse(JSON.stringify(l.pressedKeys));for(e in t)l.SendKeyMsgKC(l.KeyAction.UP,t[e])},l.mousedblclick=function(e){return 1!=l.stopInput&&l.xxMouseDblClick(e)},l.mousedown=function(e){return 1!=l.stopInput&&l.xxMouseDown(e)},l.mouseup=function(e){return 1!=l.stopInput&&l.xxMouseUp(e)},l.mousemove=function(e){return 1!=l.stopInput&&l.xxMouseMove(e)},l.mousewheel=function(e){return 1!=l.stopInput&&l.xxMouseWheel(e)},l.xxMsTouchEvent=function(e){var t,n,o,a;if(4!=e.originalEvent.pointerType)return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),"MSPointerDown"==e.type||"MSPointerMove"==e.type||"MSPointerUp"==e.type?(t=0,n=e.originalEvent.pointerId%256,o=e.offsetX*(Canvas.canvas.width/l.CanvasId.clientWidth),a=e.offsetY*(Canvas.canvas.height/l.CanvasId.clientHeight),"MSPointerDown"==e.type?t=65542:"MSPointerMove"==e.type?t=131078:"MSPointerUp"==e.type&&(t=262144),l.TouchArray[n]||(l.TouchArray[n]={x:o,y:a}),l.SendTouchMsg2(n,t),"MSPointerUp"==e.type&&delete l.TouchArray[n]):alert(e.type),!0},l.xxTouchStart=function(e){if(3==l.State)if(e.preventDefault&&e.preventDefault(),0==l.touchenabled||1==l.touchenabled){var t;1<e.originalEvent.touches.length||(t=e.originalEvent.touches[0],e.which=1,l.LastX=e.pageX=t.pageX,l.LastY=e.pageY=t.pageY,l.SendMouseMsg(KeyAction.DOWN,e))}else{var n,o,a=l.GetPositionOfControl(Canvas.canvas);for(n in e.originalEvent.changedTouches)e.originalEvent.changedTouches[n].identifier&&(o=e.originalEvent.changedTouches[n].identifier%256,l.TouchArray[o]||(l.TouchArray[o]={x:(e.originalEvent.touches[n].pageX-a[0])*(Canvas.canvas.width/l.CanvasId.clientWidth),y:(e.originalEvent.touches[n].pageY-a[1])*(Canvas.canvas.height/l.CanvasId.clientHeight),f:1}));0<Object.keys(l.TouchArray).length&&null==touchtimer&&(l.touchtimer=setInterval(function(){l.SendTouchMsg2(256,0)},50))}},l.xxTouchMove=function(e){if(3==l.State)if(e.preventDefault&&e.preventDefault(),0==l.touchenabled||1==l.touchenabled){var t;1<e.originalEvent.touches.length||(t=e.originalEvent.touches[0],e.which=1,l.LastX=e.pageX=t.pageX,l.LastY=e.pageY=t.pageY,l.SendMouseMsg(l.KeyAction.NONE,e))}else{var n,o,a=l.GetPositionOfControl(Canvas.canvas);for(n in e.originalEvent.changedTouches)e.originalEvent.changedTouches[n].identifier&&(o=e.originalEvent.changedTouches[n].identifier%256,l.TouchArray[o]&&(l.TouchArray[o].x=(e.originalEvent.touches[n].pageX-a[0])*(l.Canvas.canvas.width/l.CanvasId.clientWidth),l.TouchArray[o].y=(e.originalEvent.touches[n].pageY-a[1])*(l.Canvas.canvas.height/l.CanvasId.clientHeight)))}},l.xxTouchEnd=function(e){if(3==l.State)if(e.preventDefault&&e.preventDefault(),0==l.touchenabled||1==l.touchenabled)1<e.originalEvent.touches.length||(e.which=1,e.pageX=LastX,e.pageY=LastY,l.SendMouseMsg(KeyAction.UP,e));else for(var t in e.originalEvent.changedTouches)e.originalEvent.changedTouches[t].identifier&&(t=e.originalEvent.changedTouches[t].identifier%256,l.TouchArray[t]&&(l.TouchArray[t].f=2))},l.GrabMouseInput=function(){var e;1!=l.xxMouseInputGrab&&((e=l.CanvasId).onmousemove=l.xxMouseMove,e.onmouseup=l.xxMouseUp,e.onmousedown=l.xxMouseDown,e.touchstart=l.xxTouchStart,e.touchmove=l.xxTouchMove,e.touchend=l.xxTouchEnd,e.MSPointerDown=l.xxMsTouchEvent,e.MSPointerMove=l.xxMsTouchEvent,e.MSPointerUp=l.xxMsTouchEvent,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=l.xxDOMMouseScroll:e.onmousewheel=l.xxMouseWheel,l.xxMouseInputGrab=!0)},l.UnGrabMouseInput=function(){var e;0!=l.xxMouseInputGrab&&((e=l.CanvasId).onmousemove=null,e.onmouseup=null,e.onmousedown=null,e.touchstart=null,e.touchmove=null,e.touchend=null,e.MSPointerDown=null,e.MSPointerMove=null,e.MSPointerUp=null,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=null:e.onmousewheel=null,l.xxMouseInputGrab=!1)},l.GrabKeyInput=function(){1!=l.xxKeyInputGrab&&(document.onkeyup=l.xxKeyUp,document.onkeydown=l.xxKeyDown,document.onkeypress=l.xxKeyPress,l.xxKeyInputGrab=!0)},l.UnGrabKeyInput=function(){0!=l.xxKeyInputGrab&&(document.onkeyup=null,document.onkeydown=null,document.onkeypress=null,l.xxKeyInputGrab=!1)},l.GetPositionOfControl=function(e){var t=Array(2);for(t[0]=t[1]=0;e;)t[0]+=e.offsetLeft,t[1]+=e.offsetTop,e=e.offsetParent;return t},l.crotX=function(e,t){return 0==l.rotation?e:1==l.rotation?t:2==l.rotation?l.Canvas.canvas.width-e:3==l.rotation?l.Canvas.canvas.height-t:void 0},l.crotY=function(e,t){return 0==l.rotation?t:1==l.rotation?l.Canvas.canvas.width-e:2==l.rotation?l.Canvas.canvas.height-t:3==l.rotation?e:void 0},l.rotX=function(e,t){return 0==l.rotation||1==l.rotation?e:2==l.rotation?e-l.Canvas.canvas.width:3==l.rotation?e-l.Canvas.canvas.height:void 0},l.rotY=function(e,t){return 0==l.rotation||3==l.rotation?t:1==l.rotation?t-l.Canvas.canvas.width:2==l.rotation?t-l.Canvas.canvas.height:void 0},l.tcanvas=null,l.setRotation=function(e){for(;e<0;)e+=4;var t=e%4;if(t==l.rotation)return!0;var n=l.Canvas.canvas.width,o=l.Canvas.canvas.height;1!=l.rotation&&3!=l.rotation||(n=l.Canvas.canvas.height,o=l.Canvas.canvas.width),null==l.tcanvas&&(l.tcanvas=document.createElement("canvas"));var a=l.tcanvas.getContext("2d");return a.setTransform(1,0,0,1,0,0),a.canvas.width=n,a.canvas.height=o,a.rotate(-90*l.rotation*Math.PI/180),0==l.rotation&&a.drawImage(l.Canvas.canvas,0,0),1==l.rotation&&a.drawImage(l.Canvas.canvas,-l.Canvas.canvas.width,0),2==l.rotation&&a.drawImage(l.Canvas.canvas,-l.Canvas.canvas.width,-l.Canvas.canvas.height),3==l.rotation&&a.drawImage(l.Canvas.canvas,0,-l.Canvas.canvas.height),0!=l.rotation&&2!=l.rotation||(l.Canvas.canvas.height=n,l.Canvas.canvas.width=o),1!=l.rotation&&3!=l.rotation||(l.Canvas.canvas.height=o,l.Canvas.canvas.width=n),l.Canvas.setTransform(1,0,0,1,0,0),l.Canvas.rotate(90*t*Math.PI/180),l.rotation=t,l.Canvas.drawImage(l.tcanvas,l.rotX(0,0),l.rotY(0,0)),l.ScreenWidth=l.Canvas.canvas.width,l.ScreenHeight=l.Canvas.canvas.height,null!=l.onScreenSizeChange&&(console.log("s4",l.ScreenWidth,l.ScreenHeight),l.onScreenSizeChange(l,l.ScreenWidth,l.ScreenHeight,l.CanvasId)),!0},l.StartRecording=function(){null==l.recordedData&&l.CanvasId.toBlob(function(e){var s=new FileReader;s.readAsArrayBuffer(e),s.onload=function(e){for(var t="",n=new Uint8Array(s.result),o=n.byteLength,a=0;a<o;a++)t+=String.fromCharCode(n[a]);l.recordedData=[],l.recordedStart=Date.now(),l.recordedSize=0,l.recordedData.push(S(1,0,JSON.stringify({magic:"MeshCentralRelaySession",ver:1,time:(new Date).toLocaleString(),protocol:2}))),l.recordedData.push(S(2,1,l.shortToStr(7)+l.shortToStr(8)+l.shortToStr(l.ScreenWidth)+l.shortToStr(l.ScreenHeight)));var r=8+t.length;65e3<r?l.recordedData.push(S(2,1,l.shortToStr(27)+l.shortToStr(8)+l.intToStr(r)+l.shortToStr(3)+l.shortToStr(0)+l.shortToStr(0)+l.shortToStr(0)+t)):l.recordedData.push(S(2,1,l.shortToStr(3)+l.shortToStr(r)+l.shortToStr(0)+l.shortToStr(0)+t))}})},l.StopRecording=function(){if(null!=l.recordedData){var e=l.recordedData;return e.push(S(3,0,"MeshCentralMCREC")),delete l.recordedData,delete l.recordedStart,delete l.recordedSize,e}},l.MuchTheSame=function(e,t){return Math.abs(e-t)<4},l.Debug=function(e){console.log(e)},l.getIEVersion=function(){var e,t=-1;return"Microsoft Internet Explorer"==navigator.appName&&(e=navigator.userAgent,null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(e)&&(t=parseFloat(RegExp.$1))),t},l.haltEvent=function(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l}
\ No newline at end of file
1 +Uint8Array.prototype.slice||Object.defineProperty(Uint8Array.prototype,"slice",{value:function(e,t){return new Uint8Array(Array.prototype.slice.call(this,e,t))}});var CreateAgentRemoteDesktop=function(e,t){var l={};"string"==typeof(l.CanvasId=e)&&(l.CanvasId=Q(e)),l.Canvas=l.CanvasId.getContext("2d"),l.scrolldiv=t,l.State=0,l.PendingOperations=[],l.tilesReceived=0,l.TilesDrawn=0,l.KillDraw=0,l.ipad=!1,l.tabletKeyboardVisible=!1,l.LastX=0,l.LastY=0,l.touchenabled=0,l.submenuoffset=0,l.touchtimer=null,l.TouchArray={},l.connectmode=0,l.connectioncount=0,l.rotation=0,l.protocol=2,l.debugmode=0,l.firstUpKeys=[],l.stopInput=!1,l.localKeyMap=!0,l.remoteKeyMap=!1,l.pressedKeys=[],l.sessionid=0,l.username,l.oldie=!1,l.CompressionLevel=50,l.ScalingLevel=1024,l.FrameRateTimer=100,l.SwapMouse=!1,l.FirstDraw=!1,l.onRemoteInputLockChanged=null,l.RemoteInputLock=null,l.ScreenWidth=960,l.ScreenHeight=701,l.width=960,l.height=960,l.displays=null,l.selectedDisplay=null,l.onScreenSizeChange=null,l.onMessage=null,l.onConnectCountChanged=null,l.onDebugMessage=null,l.onTouchEnabledChanged=null,l.onDisplayinfo=null;var h=!(l.accumulator=null),g="default";l.mouseCursorActive=function(e){h!=e&&(h=e,l.CanvasId.style.cursor=1==e?g:"default")};var p=["default","progress","crosshair","pointer","help","text","no-drop","move","nesw-resize","ns-resize","nwse-resize","w-resize","alias","wait","none","not-allowed","col-resize","row-resize","copy","zoom-in","zoom-out"];l.Start=function(){l.State=0,l.accumulator=null},l.Stop=function(){l.setRotation(0),l.UnGrabKeyInput(),l.UnGrabMouseInput(),l.touchenabled=0,null!=l.onScreenSizeChange&&l.onScreenSizeChange(l,l.ScreenWidth,l.ScreenHeight,l.CanvasId),l.Canvas.clearRect(0,0,l.CanvasId.width,l.CanvasId.height)},l.xxStateChange=function(e){l.State!=e&&(l.State=e,l.CanvasId.style.cursor="default",0===e&&l.Stop())},l.send=function(e){2<l.debugmode&&console.log("KSend("+e.length+"): "+rstr2hex(e)),null!=l.parent&&l.parent.send(e)},l.ProcessPictureMsg=function(e,t,n){var o=new Image;o.xcount=l.tilesReceived++;for(var a=l.tilesReceived,r=e.slice(4),s=0,i=[];5e4<r.byteLength-s;)i.push(String.fromCharCode.apply(null,r.slice(s,s+5e4))),s+=5e4;0<s?i.push(String.fromCharCode.apply(null,r.slice(s))):i.push(String.fromCharCode.apply(null,r)),o.src="data:image/jpeg;base64,"+btoa(i.join("")),o.onload=function(){if(null!=l.Canvas&&l.KillDraw<a&&0!=l.State)for(l.PendingOperations.push([a,2,o,t,n]);l.DoPendingOperations(););else l.PendingOperations.push([a,0])},o.error=function(){console.log("DecodeTileError")}},l.DoPendingOperations=function(){if(0==l.PendingOperations.length)return!1;for(var e=0;e<l.PendingOperations.length;e++){var t=l.PendingOperations[e];if(t[0]==l.TilesDrawn+1)return 1==t[1]?l.ProcessCopyRectMsg(t[2]):2==t[1]&&(l.Canvas.drawImage(t[2],l.rotX(t[3],t[4]),l.rotY(t[3],t[4])),delete t[2]),l.PendingOperations.splice(e,1),delete t,l.TilesDrawn++,l.TilesDrawn==l.tilesReceived&&l.KillDraw<l.TilesDrawn&&(l.KillDraw=l.TilesDrawn=l.tilesReceived=0),!0}return l.oldie&&0<l.PendingOperations.length&&l.TilesDrawn++,!1},l.ProcessCopyRectMsg=function(e){var t=((255&e.charCodeAt(0))<<8)+(255&e.charCodeAt(1)),n=((255&e.charCodeAt(2))<<8)+(255&e.charCodeAt(3)),o=((255&e.charCodeAt(4))<<8)+(255&e.charCodeAt(5)),a=((255&e.charCodeAt(6))<<8)+(255&e.charCodeAt(7)),r=((255&e.charCodeAt(8))<<8)+(255&e.charCodeAt(9)),e=((255&e.charCodeAt(10))<<8)+(255&e.charCodeAt(11));l.Canvas.drawImage(Canvas.canvas,t,n,r,e,o,a,r,e)},l.SendUnPause=function(){1<l.debugmode&&console.log("SendUnPause"),l.send(String.fromCharCode(0,8,0,5,0))},l.SendPause=function(){1<l.debugmode&&console.log("SendPause"),l.send(String.fromCharCode(0,8,0,5,1))},l.SendCompressionLevel=function(e,t,n,o){t&&(l.CompressionLevel=t),n&&(l.ScalingLevel=n),o&&(l.FrameRateTimer=o),l.send(String.fromCharCode(0,5,0,10,e,l.CompressionLevel)+l.shortToStr(l.ScalingLevel)+l.shortToStr(l.FrameRateTimer))},l.SendRefresh=function(){l.send(String.fromCharCode(0,6,0,4))},l.ProcessScreenMsg=function(e,t){if(0<l.debugmode&&console.log("ScreenSize: "+e+" x "+t),l.ScreenWidth!=e||l.ScreenHeight!=t){for(l.Canvas.setTransform(1,0,0,1,0,0),l.rotation=0,l.FirstDraw=!0,l.ScreenWidth=l.width=e,l.ScreenHeight=l.height=t,l.KillDraw=l.tilesReceived;0<l.PendingOperations.length;)l.PendingOperations.shift();l.SendCompressionLevel(1),l.SendUnPause(),l.SendRemoteInputLock(2),null!=l.onScreenSizeChange&&l.onScreenSizeChange(l,l.ScreenWidth,l.ScreenHeight,l.CanvasId)}},l.ProcessBinaryCommand=function(e,t,n){var o,a;switch(3!=e&&4!=e&&7!=e||(o=(n[4]<<8)+n[5],a=(n[6]<<8)+n[7]),2<l.debugmode&&console.log("CMD",e,t,o,a),null!=l.recordedData&&(65e3<t?l.recordedData.push(S(2,1,l.shortToStr(27)+l.shortToStr(8)+l.intToStr(t)+l.shortToStr(e)+l.shortToStr(0)+l.shortToStr(0)+l.shortToStr(0)+String.fromCharCode.apply(null,n))):l.recordedData.push(S(2,1,String.fromCharCode.apply(null,n)))),console.log("cmd",e),e){case 3:l.FirstDraw&&l.onResize(),l.ProcessPictureMsg(n.slice(4),o,a);break;case 7:l.ProcessScreenMsg(o,a),l.SendKeyMsgKC(l.KeyAction.UP,16),l.SendKeyMsgKC(l.KeyAction.UP,17),l.SendKeyMsgKC(l.KeyAction.UP,18),l.SendKeyMsgKC(l.KeyAction.UP,91),l.SendKeyMsgKC(l.KeyAction.UP,92),l.SendKeyMsgKC(l.KeyAction.UP,16),l.send(String.fromCharCode(0,14,0,4));break;case 11:var r=0,s={},i=(n[4]<<8)+n[5];if(0<i)for(var r=(n[6+2*i]<<8)+n[7+2*i],c=0;c<i;c++){var u=(n[6+2*c]<<8)+n[7+2*c];s[u]=65535==u?"All Displays":"Display "+u}l.displays=s,l.selectedDisplay=r,null!=l.onDisplayinfo&&l.onDisplayinfo(l,s,r);break;case 12:break;case 14:l.touchenabled=1,l.TouchArray={},null!=l.onTouchEnabledChanged&&l.onTouchEnabledChanged(l.touchenabled);break;case 15:l.TouchArray={};break;case 17:var d=String.fromCharCode.apply(null,n.slice(4));console.log("Got KVM Message: "+d),null!=l.onMessage&&l.onMessage(d,l);break;case 65:"."!=(d=String.fromCharCode.apply(null,n.slice(4)))[0]?(console.log(d),l.parent&&l.parent.setConsoleMessage&&l.parent.setConsoleMessage(d)):console.log("KVM: "+d.substring(1));break;case 87:if(5!=t)break;null!=l.RemoteInputLock&&l.RemoteInputLock===(0!=n[4])||(l.RemoteInputLock=0!=n[4],l.onRemoteInputLockChanged&&l.onRemoteInputLockChanged(l,l.RemoteInputLock));break;case 88:if(5!=t||l.stopInput)break;d=n[4];g=p[d=p.length<d?0:d],h&&(l.CanvasId.style.cursor=g);break;default:console.log("Unknown command",e,t)}},l.MouseButton={NONE:0,LEFT:2,RIGHT:8,MIDDLE:32},l.KeyAction={NONE:0,DOWN:1,UP:2,SCROLL:3,EXUP:4,EXDOWN:5,DBLCLICK:6},l.InputType={KEY:1,MOUSE:2,CTRLALTDEL:10,TOUCH:15,KEYUNICODE:85},l.Alternate=0;var o={Pause:19,CapsLock:20,Space:32,Quote:222,Minus:189,NumpadMultiply:106,NumpadAdd:107,PrintScreen:44,Comma:188,NumpadSubtract:109,NumpadDecimal:110,Period:190,Slash:191,NumpadDivide:111,Semicolon:186,Equal:187,OSLeft:91,BracketLeft:219,OSRight:91,Backslash:220,BracketRight:221,ContextMenu:93,Backquote:192,NumLock:144,ScrollLock:145,Backspace:8,Tab:9,Enter:13,NumpadEnter:13,Escape:27,Delete:46,Home:36,PageUp:33,PageDown:34,ArrowLeft:37,ArrowUp:38,ArrowRight:39,ArrowDown:40,End:35,Insert:45,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,ShiftLeft:16,ShiftRight:16,ControlLeft:17,ControlRight:17,AltLeft:18,AltRight:18,MetaLeft:91,MetaRight:92,VolumeMute:181};function S(e,t,n){var o=Date.now();return"number"==typeof n?(l.recordedSize+=n,l.shortToStr(e)+l.shortToStr(t)+l.intToStr(n)+l.intToStr(o>>32)+l.intToStr(32&o)):(l.recordedSize+=n.length,l.shortToStr(e)+l.shortToStr(t)+l.intToStr(n.length)+l.intToStr(o>>32)+l.intToStr(32&o)+n)}return l.SendKeyMsg=function(e,t){var n;null!=e&&((t=t||window.event).code&&0==l.localKeyMap?null!=(n=(n=t).code.startsWith("Key")&&4==n.code.length?n.code.charCodeAt(3):n.code.startsWith("Digit")&&6==n.code.length?n.code.charCodeAt(5):n.code.startsWith("Numpad")&&7==n.code.length?n.code.charCodeAt(6)+48:o[n.code])&&l.SendKeyMsgKC(e,n):(59==(n=t.keyCode)?n=186:173==n?n=189:61==n&&(n=187),l.SendKeyMsgKC(e,n)))},l.SendRemoteInputLock=function(e){l.send(String.fromCharCode(0,87,0,5,e))},l.SendMessage=function(e){3==l.State&&l.send(String.fromCharCode(0,17)+l.shortToStr(4+e.length)+e)},l.SendKeyMsgKC=function(e,t){if(3==l.State)if("object"==typeof e)for(var n in e)l.SendKeyMsgKC(e[n][0],e[n][1]);else 1==e?-1==l.pressedKeys.indexOf(t)&&l.pressedKeys.unshift(t):2==e&&-1!=(n=l.pressedKeys.indexOf(t))&&l.pressedKeys.splice(n,1),0<l.debugmode&&console.log("Sending Key "+t+", action "+e),l.send(String.fromCharCode(0,l.InputType.KEY,0,6,e-1,t))},l.SendStringUnicode=function(e){if(3==l.State)for(var t=0;t<e.length;t++)l.send(String.fromCharCode(0,l.InputType.KEYUNICODE,0,7,0)+ShortToStr(e.charCodeAt(t))),l.send(String.fromCharCode(0,l.InputType.KEYUNICODE,0,7,1)+ShortToStr(e.charCodeAt(t)))},l.SendKeyUnicode=function(e,t){3==l.State&&(0<l.debugmode&&console.log("Sending UnicodeKey "+t),l.send(String.fromCharCode(0,l.InputType.KEYUNICODE,0,7,e-1)+ShortToStr(t)))},l.sendcad=function(){l.SendCtrlAltDelMsg()},l.SendCtrlAltDelMsg=function(){3==l.State&&l.send(String.fromCharCode(0,l.InputType.CTRLALTDEL,0,4))},l.SendEscKey=function(){3==l.State&&l.send(String.fromCharCode(0,l.InputType.KEY,0,6,0,27,0,l.InputType.KEY,0,6,1,27))},l.SendStartMsg=function(){l.SendKeyMsgKC(l.KeyAction.EXDOWN,91),l.SendKeyMsgKC(l.KeyAction.EXUP,91)},l.SendCharmsMsg=function(){l.SendKeyMsgKC(l.KeyAction.EXDOWN,91),l.SendKeyMsgKC(l.KeyAction.DOWN,67),l.SendKeyMsgKC(l.KeyAction.UP,67),l.SendKeyMsgKC(l.KeyAction.EXUP,91)},l.SendTouchMsg1=function(e,t,n,o){3==l.State&&l.send(String.fromCharCode(0,l.InputType.TOUCH)+l.shortToStr(14)+String.fromCharCode(1,e)+l.intToStr(t)+l.shortToStr(n)+l.shortToStr(o))},l.SendTouchMsg2=function(e,t){var n,o,a="";for(o in l.TouchArray)o==e?n=t:1==l.TouchArray[o].f?(n=65542,l.TouchArray[o].f=3,0):2==l.TouchArray[o].f?(n=262144,0):n=131078,a+=String.fromCharCode(o)+l.intToStr(n)+l.shortToStr(l.TouchArray[o].x)+l.shortToStr(l.TouchArray[o].y),2==l.TouchArray[o].f&&delete l.TouchArray[o];3==l.State&&l.send(String.fromCharCode(0,l.InputType.TOUCH)+l.shortToStr(5+a.length)+String.fromCharCode(2)+a),0==Object.keys(l.TouchArray).length&&null!=l.touchtimer&&(clearInterval(l.touchtimer),l.touchtimer=null)},l.SendMouseMsg=function(e,t){var n,o,a,r,s,i;3==l.State&&null!=e&&null!=l.Canvas&&(t=t||window.event,s=l.Canvas.canvas.height/l.CanvasId.clientHeight,r=l.Canvas.canvas.width/l.CanvasId.clientWidth,i=l.GetPositionOfControl(l.Canvas.canvas),n=(t.pageX-i[0])*r,o=(t.pageY-i[1])*s,t.addx&&(n+=t.addx),t.addy&&(o+=t.addy),0<=n&&n<=l.Canvas.canvas.width&&0<=o&&o<=l.Canvas.canvas.height&&(r=a=0,e==l.KeyAction.UP||e==l.KeyAction.DOWN?t.which?a=1==t.which?l.MouseButton.LEFT:2==t.which?l.MouseButton.MIDDLE:l.MouseButton.RIGHT:t.button&&(a=0==t.button?l.MouseButton.LEFT:1==t.button?l.MouseButton.MIDDLE:l.MouseButton.RIGHT):e==l.KeyAction.SCROLL&&(t.detail?r=120*t.detail*-1:t.wheelDelta&&(r=3*t.wheelDelta)),!0===l.SwapMouse&&(a==l.MouseButton.LEFT?a=l.MouseButton.RIGHT:a==l.MouseButton.RIGHT&&(a=l.MouseButton.LEFT)),i="",i=e==l.KeyAction.DBLCLICK?String.fromCharCode(0,l.InputType.MOUSE,0,10,0,136,n/256&255,255&n,o/256&255,255&o):e==l.KeyAction.SCROLL?(t=r<(t=s=0)?(s=255-(Math.abs(r)>>8),255-(255&Math.abs(r))):(s=r>>8,255&r),String.fromCharCode(0,l.InputType.MOUSE,0,12,0,0,n/256&255,255&n,o/256&255,255&o,s,t)):String.fromCharCode(0,l.InputType.MOUSE,0,10,0,e==l.KeyAction.DOWN?a:2*a&255,n/256&255,255&n,o/256&255,255&o),l.Action==l.KeyAction.NONE?0==l.Alternate||l.ipad?(l.send(i),l.Alternate=1):l.Alternate=0:l.send(i)))},l.GetDisplayNumbers=function(){l.send(String.fromCharCode(0,11,0,4))},l.SetDisplay=function(e){l.send(String.fromCharCode(0,12,0,6,e>>8,255&e))},l.intToStr=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},l.shortToStr=function(e){return String.fromCharCode(e>>8&255,255&e)},l.onResize=function(){0!=l.ScreenWidth&&0!=l.ScreenHeight&&(l.Canvas.canvas.width==l.ScreenWidth&&l.Canvas.canvas.height==l.ScreenHeight||(l.FirstDraw&&(l.Canvas.canvas.width=l.ScreenWidth,l.Canvas.canvas.height=l.ScreenHeight,l.Canvas.fillRect(0,0,l.ScreenWidth,l.ScreenHeight),null!=l.onScreenSizeChange&&l.onScreenSizeChange(l,l.ScreenWidth,l.ScreenHeight,l.CanvasId)),l.FirstDraw=!1,1<l.debugmode&&console.log("onResize: "+l.ScreenWidth+" x "+l.ScreenHeight)))},l.xxMouseInputGrab=!1,l.xxKeyInputGrab=!1,l.xxMouseMove=function(e){return 3==l.State&&l.SendMouseMsg(l.KeyAction.NONE,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxMouseUp=function(e){return 3==l.State&&l.SendMouseMsg(l.KeyAction.UP,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxMouseDown=function(e){return 3==l.State&&l.SendMouseMsg(l.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxMouseDblClick=function(e){return 3==l.State&&l.SendMouseMsg(l.KeyAction.DBLCLICK,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxDOMMouseScroll=function(e){return 3!=l.State||(l.SendMouseMsg(l.KeyAction.SCROLL,e),!1)},l.xxMouseWheel=function(e){return 3!=l.State||(l.SendMouseMsg(l.KeyAction.SCROLL,e),!1)},l.xxKeyUp=function(e){return"Dead"!=e.key&&3==l.State&&("string"==typeof e.key&&1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&(0==l.remoteKeyMap||0<l.debugmode)?l.SendKeyUnicode(l.KeyAction.UP,e.key.charCodeAt(0)):l.SendKeyMsg(l.KeyAction.UP,e)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxKeyDown=function(e){if("Dead"!=e.key&&3==l.State&&("string"!=typeof e.key||1!=e.key.length||1==e.ctrlKey||1==e.altKey||!(0==l.remoteKeyMap||0<l.debugmode)))return l.SendKeyMsg(l.KeyAction.DOWN,e),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.xxKeyPress=function(e){return"Dead"!=e.key&&3==l.State&&"string"==typeof e.key&&1==e.key.length&&1!=e.ctrlKey&&1!=e.altKey&&(0==l.remoteKeyMap||0<l.debugmode)&&l.SendKeyUnicode(l.KeyAction.DOWN,e.key.charCodeAt(0)),e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l.handleKeys=function(e){return 1!=l.stopInput&&3==desktop.State&&l.xxKeyPress(e)},l.handleKeyUp=function(e){return 1!=l.stopInput&&3==desktop.State&&(l.firstUpKeys.length<5&&(l.firstUpKeys.push(e.keyCode),5==l.firstUpKeys.length&&("16,17,91,91,16"!=(t=l.firstUpKeys.join(","))&&"16,17,18,91,92"!=t||(l.stopInput=!0))),l.xxKeyUp(e));var t},l.handleKeyDown=function(e){return 1!=l.stopInput&&3==desktop.State&&l.xxKeyDown(e)},l.handleReleaseKeys=function(){var e,t=JSON.parse(JSON.stringify(l.pressedKeys));for(e in t)l.SendKeyMsgKC(l.KeyAction.UP,t[e])},l.mousedblclick=function(e){return 1!=l.stopInput&&l.xxMouseDblClick(e)},l.mousedown=function(e){return 1!=l.stopInput&&l.xxMouseDown(e)},l.mouseup=function(e){return 1!=l.stopInput&&l.xxMouseUp(e)},l.mousemove=function(e){return 1!=l.stopInput&&l.xxMouseMove(e)},l.mousewheel=function(e){return 1!=l.stopInput&&l.xxMouseWheel(e)},l.xxMsTouchEvent=function(e){var t,n,o,a;if(4!=e.originalEvent.pointerType)return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),"MSPointerDown"==e.type||"MSPointerMove"==e.type||"MSPointerUp"==e.type?(t=0,n=e.originalEvent.pointerId%256,o=e.offsetX*(Canvas.canvas.width/l.CanvasId.clientWidth),a=e.offsetY*(Canvas.canvas.height/l.CanvasId.clientHeight),"MSPointerDown"==e.type?t=65542:"MSPointerMove"==e.type?t=131078:"MSPointerUp"==e.type&&(t=262144),l.TouchArray[n]||(l.TouchArray[n]={x:o,y:a}),l.SendTouchMsg2(n,t),"MSPointerUp"==e.type&&delete l.TouchArray[n]):alert(e.type),!0},l.xxTouchStart=function(e){if(3==l.State)if(e.preventDefault&&e.preventDefault(),0==l.touchenabled||1==l.touchenabled){var t;1<e.originalEvent.touches.length||(t=e.originalEvent.touches[0],e.which=1,l.LastX=e.pageX=t.pageX,l.LastY=e.pageY=t.pageY,l.SendMouseMsg(KeyAction.DOWN,e))}else{var n,o,a=l.GetPositionOfControl(Canvas.canvas);for(n in e.originalEvent.changedTouches)e.originalEvent.changedTouches[n].identifier&&(o=e.originalEvent.changedTouches[n].identifier%256,l.TouchArray[o]||(l.TouchArray[o]={x:(e.originalEvent.touches[n].pageX-a[0])*(Canvas.canvas.width/l.CanvasId.clientWidth),y:(e.originalEvent.touches[n].pageY-a[1])*(Canvas.canvas.height/l.CanvasId.clientHeight),f:1}));0<Object.keys(l.TouchArray).length&&null==touchtimer&&(l.touchtimer=setInterval(function(){l.SendTouchMsg2(256,0)},50))}},l.xxTouchMove=function(e){if(3==l.State)if(e.preventDefault&&e.preventDefault(),0==l.touchenabled||1==l.touchenabled){var t;1<e.originalEvent.touches.length||(t=e.originalEvent.touches[0],e.which=1,l.LastX=e.pageX=t.pageX,l.LastY=e.pageY=t.pageY,l.SendMouseMsg(l.KeyAction.NONE,e))}else{var n,o,a=l.GetPositionOfControl(Canvas.canvas);for(n in e.originalEvent.changedTouches)e.originalEvent.changedTouches[n].identifier&&(o=e.originalEvent.changedTouches[n].identifier%256,l.TouchArray[o]&&(l.TouchArray[o].x=(e.originalEvent.touches[n].pageX-a[0])*(l.Canvas.canvas.width/l.CanvasId.clientWidth),l.TouchArray[o].y=(e.originalEvent.touches[n].pageY-a[1])*(l.Canvas.canvas.height/l.CanvasId.clientHeight)))}},l.xxTouchEnd=function(e){if(3==l.State)if(e.preventDefault&&e.preventDefault(),0==l.touchenabled||1==l.touchenabled)1<e.originalEvent.touches.length||(e.which=1,e.pageX=LastX,e.pageY=LastY,l.SendMouseMsg(KeyAction.UP,e));else for(var t in e.originalEvent.changedTouches)e.originalEvent.changedTouches[t].identifier&&(t=e.originalEvent.changedTouches[t].identifier%256,l.TouchArray[t]&&(l.TouchArray[t].f=2))},l.GrabMouseInput=function(){var e;1!=l.xxMouseInputGrab&&((e=l.CanvasId).onmousemove=l.xxMouseMove,e.onmouseup=l.xxMouseUp,e.onmousedown=l.xxMouseDown,e.touchstart=l.xxTouchStart,e.touchmove=l.xxTouchMove,e.touchend=l.xxTouchEnd,e.MSPointerDown=l.xxMsTouchEvent,e.MSPointerMove=l.xxMsTouchEvent,e.MSPointerUp=l.xxMsTouchEvent,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=l.xxDOMMouseScroll:e.onmousewheel=l.xxMouseWheel,l.xxMouseInputGrab=!0)},l.UnGrabMouseInput=function(){var e;0!=l.xxMouseInputGrab&&((e=l.CanvasId).onmousemove=null,e.onmouseup=null,e.onmousedown=null,e.touchstart=null,e.touchmove=null,e.touchend=null,e.MSPointerDown=null,e.MSPointerMove=null,e.MSPointerUp=null,navigator.userAgent.match(/mozilla/i)?e.DOMMouseScroll=null:e.onmousewheel=null,l.xxMouseInputGrab=!1)},l.GrabKeyInput=function(){1!=l.xxKeyInputGrab&&(document.onkeyup=l.xxKeyUp,document.onkeydown=l.xxKeyDown,document.onkeypress=l.xxKeyPress,l.xxKeyInputGrab=!0)},l.UnGrabKeyInput=function(){0!=l.xxKeyInputGrab&&(document.onkeyup=null,document.onkeydown=null,document.onkeypress=null,l.xxKeyInputGrab=!1)},l.GetPositionOfControl=function(e){var t=Array(2);for(t[0]=t[1]=0;e;)t[0]+=e.offsetLeft,t[1]+=e.offsetTop,e=e.offsetParent;return t},l.crotX=function(e,t){return 0==l.rotation?e:1==l.rotation?t:2==l.rotation?l.Canvas.canvas.width-e:3==l.rotation?l.Canvas.canvas.height-t:void 0},l.crotY=function(e,t){return 0==l.rotation?t:1==l.rotation?l.Canvas.canvas.width-e:2==l.rotation?l.Canvas.canvas.height-t:3==l.rotation?e:void 0},l.rotX=function(e,t){return 0==l.rotation||1==l.rotation?e:2==l.rotation?e-l.Canvas.canvas.width:3==l.rotation?e-l.Canvas.canvas.height:void 0},l.rotY=function(e,t){return 0==l.rotation||3==l.rotation?t:1==l.rotation?t-l.Canvas.canvas.width:2==l.rotation?t-l.Canvas.canvas.height:void 0},l.tcanvas=null,l.setRotation=function(e){for(;e<0;)e+=4;var t=e%4;if(t==l.rotation)return!0;var n=l.Canvas.canvas.width,o=l.Canvas.canvas.height;1!=l.rotation&&3!=l.rotation||(n=l.Canvas.canvas.height,o=l.Canvas.canvas.width),null==l.tcanvas&&(l.tcanvas=document.createElement("canvas"));var a=l.tcanvas.getContext("2d");return a.setTransform(1,0,0,1,0,0),a.canvas.width=n,a.canvas.height=o,a.rotate(-90*l.rotation*Math.PI/180),0==l.rotation&&a.drawImage(l.Canvas.canvas,0,0),1==l.rotation&&a.drawImage(l.Canvas.canvas,-l.Canvas.canvas.width,0),2==l.rotation&&a.drawImage(l.Canvas.canvas,-l.Canvas.canvas.width,-l.Canvas.canvas.height),3==l.rotation&&a.drawImage(l.Canvas.canvas,0,-l.Canvas.canvas.height),0!=l.rotation&&2!=l.rotation||(l.Canvas.canvas.height=n,l.Canvas.canvas.width=o),1!=l.rotation&&3!=l.rotation||(l.Canvas.canvas.height=o,l.Canvas.canvas.width=n),l.Canvas.setTransform(1,0,0,1,0,0),l.Canvas.rotate(90*t*Math.PI/180),l.rotation=t,l.Canvas.drawImage(l.tcanvas,l.rotX(0,0),l.rotY(0,0)),l.ScreenWidth=l.Canvas.canvas.width,l.ScreenHeight=l.Canvas.canvas.height,null!=l.onScreenSizeChange&&(console.log("s4",l.ScreenWidth,l.ScreenHeight),l.onScreenSizeChange(l,l.ScreenWidth,l.ScreenHeight,l.CanvasId)),!0},l.StartRecording=function(){null==l.recordedData&&l.CanvasId.toBlob(function(e){var s=new FileReader;s.readAsArrayBuffer(e),s.onload=function(e){for(var t="",n=new Uint8Array(s.result),o=n.byteLength,a=0;a<o;a++)t+=String.fromCharCode(n[a]);l.recordedData=[],l.recordedStart=Date.now(),l.recordedSize=0,l.recordedData.push(S(1,0,JSON.stringify({magic:"MeshCentralRelaySession",ver:1,time:(new Date).toLocaleString(),protocol:2}))),l.recordedData.push(S(2,1,l.shortToStr(7)+l.shortToStr(8)+l.shortToStr(l.ScreenWidth)+l.shortToStr(l.ScreenHeight)));var r=8+t.length;65e3<r?l.recordedData.push(S(2,1,l.shortToStr(27)+l.shortToStr(8)+l.intToStr(r)+l.shortToStr(3)+l.shortToStr(0)+l.shortToStr(0)+l.shortToStr(0)+t)):l.recordedData.push(S(2,1,l.shortToStr(3)+l.shortToStr(r)+l.shortToStr(0)+l.shortToStr(0)+t))}})},l.StopRecording=function(){if(null!=l.recordedData){var e=l.recordedData;return e.push(S(3,0,"MeshCentralMCREC")),delete l.recordedData,delete l.recordedStart,delete l.recordedSize,e}},l.MuchTheSame=function(e,t){return Math.abs(e-t)<4},l.Debug=function(e){console.log(e)},l.getIEVersion=function(){var e,t=-1;return"Microsoft Internet Explorer"==navigator.appName&&(e=navigator.userAgent,null!=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})").exec(e)&&(t=parseFloat(RegExp.$1))),t},l.haltEvent=function(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1},l}
\ No newline at end of file
ssh.js new
+157
@@ -0,0 +1,157 @@
1 +/**
2 +* @description MeshCentral SSH relay
3 +* @author Ylian Saint-Hilaire
4 +* @copyright Intel Corporation 2018-2021
5 +* @license Apache-2.0
6 +* @version v0.0.1
7 +*/
8 +
9 +/*jslint node: true */
10 +/*jshint node: true */
11 +/*jshint strict:false */
12 +/*jshint -W097 */
13 +/*jshint esversion: 6 */
14 +"use strict";
15 +
16 +// Construct a SSH Relay object, called upon connection
17 +module.exports.CreateSshRelay = function (parent, db, ws, req, args, domain) {
18 + const Net = require('net');
19 + const WebSocket = require('ws');
20 +
21 + var obj = {};
22 + obj.domain = domain;
23 + obj.ws = ws;
24 + obj.wsClient = null;
25 + obj.tcpServer = null;
26 + obj.tcpServerPort = 0;
27 + obj.relaySocket = null;
28 + obj.relayActive = false;
29 + obj.infos = null;
30 + var sshClient = null;
31 +
32 + parent.parent.debug('relay', 'SSH: Request for SSH relay (' + req.clientIp + ')');
33 +
34 + // Disconnect
35 + obj.close = function (arg) {
36 + if ((arg == 1) || (arg == null)) { try { ws.close(); } catch (e) { console.log(e); } } // Soft close, close the websocket
37 + if (arg == 2) { try { ws._socket._parent.end(); } catch (e) { console.log(e); } } // Hard close, close the TCP socket
38 + if (obj.wsClient) { obj.wsClient.close(); obj.wsClient = null; }
39 + if (obj.tcpServer) { obj.tcpServer.close(); obj.tcpServer = null; }
40 + if (sshClient) { sshClient.close(); sshClient = null; }
41 + delete obj.domain;
42 + delete obj.ws;
43 + };
44 +
45 + // Start the looppback server
46 + function startTcpServer() {
47 + obj.tcpServer = new Net.Server();
48 + obj.tcpServer.listen(0, '127.0.0.1', function () { obj.tcpServerPort = obj.tcpServer.address().port; startSSH(obj.tcpServerPort); });
49 + obj.tcpServer.on('connection', function (socket) {
50 + if (obj.relaySocket != null) {
51 + socket.close();
52 + } else {
53 + obj.relaySocket = socket;
54 + obj.relaySocket.pause();
55 + obj.relaySocket.on('data', function (chunk) { // Make sure to handle flow control.
56 + if (obj.relayActive == true) { obj.relaySocket.pause(); obj.wsClient.send(chunk, function () { obj.relaySocket.resume(); }); }
57 + });
58 + obj.relaySocket.on('end', function () { obj.close(); });
59 + obj.relaySocket.on('error', function (err) { obj.close(); });
60 +
61 + // Decode the authentication cookie
62 + var cookie = parent.parent.decodeCookie(obj.infos.ip, parent.parent.loginCookieEncryptionKey);
63 + if (cookie == null) return;
64 +
65 + // Setup the correct URL with domain and use TLS only if needed.
66 + var options = { rejectUnauthorized: false };
67 + if (domain.dns != null) { options.servername = domain.dns; }
68 + var protocol = 'wss';
69 + if (args.tlsoffload) { protocol = 'ws'; }
70 + var domainadd = '';
71 + if ((domain.dns == null) && (domain.id != '')) { domainadd = domain.id + '/' }
72 + var url = protocol + '://127.0.0.1:' + args.port + '/' + domainadd + ((cookie.lc == 1)?'local':'mesh') + 'relay.ashx?noping=1&auth=' + obj.infos.ip;
73 + parent.parent.debug('relay', 'SSH: Connection websocket to ' + url);
74 + obj.wsClient = new WebSocket(url, options);
75 + obj.wsClient.on('open', function () { parent.parent.debug('relay', 'SSH: Relay websocket open'); });
76 + obj.wsClient.on('message', function (data) { // Make sure to handle flow control.
77 + if ((obj.relayActive == false) && (data == 'c')) {
78 + obj.relayActive = true; obj.relaySocket.resume();
79 + } else {
80 + obj.wsClient._socket.pause();
81 + obj.relaySocket.write(data, function () { obj.wsClient._socket.resume(); });
82 + }
83 + });
84 + obj.wsClient.on('close', function () { parent.parent.debug('relay', 'SSH: Relay websocket closed'); obj.close(); });
85 + obj.wsClient.on('error', function (err) { parent.parent.debug('relay', 'SSH: Relay websocket error: ' + err); obj.close(); });
86 + obj.tcpServer.close();
87 + obj.tcpServer = null;
88 + }
89 + });
90 + }
91 +
92 + // Start the SSH client
93 + function startSSH(port) {
94 + parent.parent.debug('relay', 'SSH: Starting SSH client on loopback port ' + port);
95 + try {
96 + sshClient = require('node-rdpjs-2').createClient({
97 + logLevel: 'ERROR',
98 + domain: obj.infos.domain,
99 + userName: obj.infos.username,
100 + password: obj.infos.password,
101 + enablePerf: true,
102 + autoLogin: true,
103 + screen: obj.infos.screen,
104 + locale: obj.infos.locale
105 + }).on('connect', function () {
106 + send(['rdp-connect']);
107 + }).on('bitmap', function (bitmap) {
108 + try { ws.send(bitmap.data); } catch (ex) { } // Send the bitmap data as binary
109 + delete bitmap.data;
110 + send(['rdp-bitmap', bitmap]); // Send the bitmap metadata seperately, without bitmap data.
111 + }).on('close', function () {
112 + send(['rdp-close']);
113 + }).on('error', function (err) {
114 + send(['rdp-error', err]);
115 + }).connect('127.0.0.1', obj.tcpServerPort);
116 + } catch (ex) {
117 + console.log('startSshException', ex);
118 + obj.close();
119 + }
120 + }
121 +
122 + // When data is received from the web socket
123 + // SSH default port is 22
124 + ws.on('message', function (msg) {
125 + try {
126 + msg = JSON.parse(msg);
127 + switch (msg[0]) {
128 + case 'infos': { obj.infos = msg[1]; startTcpServer(); break; }
129 + case 'mouse': { if (sshClient) { sshClient.sendPointerEvent(msg[1], msg[2], msg[3], msg[4]); } break; }
130 + case 'wheel': { if (sshClient) { sshClient.sendWheelEvent(msg[1], msg[2], msg[3], msg[4]); } break; }
131 + case 'scancode': { if (sshClient) { sshClient.sendKeyEventScancode(msg[1], msg[2]); } break; }
132 + case 'unicode': { if (sshClient) { sshClient.sendKeyEventUnicode(msg[1], msg[2]); } break; }
133 + case 'disconnect': { obj.close(); break; }
134 + }
135 + } catch (ex) {
136 + console.log('SSHMessageException', msg, ex);
137 + obj.close();
138 + }
139 + });
140 +
141 + // If error, do nothing
142 + ws.on('error', function (err) { parent.parent.debug('relay', 'SSH: Browser websocket error: ' + err); obj.close(); });
143 +
144 + // If the web socket is closed
145 + ws.on('close', function (req) { parent.parent.debug('relay', 'SSH: Browser websocket closed'); obj.close(); });
146 +
147 + // Send an object with flow control
148 + function send(obj) {
149 + try { sshClient.bufferLayer.socket.pause(); } catch (ex) { }
150 + try { ws.send(JSON.stringify(obj), function () { try { sshClient.bufferLayer.socket.resume(); } catch (ex) { } }); } catch (ex) { }
151 + }
152 +
153 + // We are all set, start receiving data
154 + ws._socket.resume();
155 +
156 + return obj;
157 +};
\ No newline at end of file
translate/translate.js
+2
@@ -40,6 +40,7 @@ var meshCentralSourceFiles = [
40 "../views/terminal.handlebars",
41 "../views/sharing.handlebars",
42 "../views/mstsc.handlebars",
43 + "../views/ssh.handlebars",
44 "../emails/account-check.html",
45 "../emails/account-invite.html",
46 "../emails/account-login.html",
@@ -78,6 +79,7 @@ var minifyMeshCentralSourceFiles = [
79 "../views/terminal.handlebars",
80 "../views/sharing.handlebars",
81 "../views/mstsc.handlebars",
82 + "../views/ssh.handlebars",
83 "../public/scripts/agent-desktop-0.0.2.js",
84 "../public/scripts/agent-redir-rtc-0.1.0.js",
85 "../public/scripts/agent-redir-ws-0.1.1.js",
translate/translate.json
+1731 -1691
@@ -17,8 +17,8 @@
17 "zh-chs": " + CIRA",
18 "zh-cht": " + CIRA",
19 "xloc": [
20 - "default.handlebars->31->1596",
21 - "default.handlebars->31->1598"
20 + "default.handlebars->31->1598",
21 + "default.handlebars->31->1600"
22 ]
23 },
24 {
@@ -204,7 +204,7 @@
204 "zh-chs": " 可以使用密码提示,但不建议使用。",
205 "zh-cht": " 可以使用密碼提示,但不建議使用。",
206 "xloc": [
207 - "default.handlebars->31->1497"
207 + "default.handlebars->31->1499"
208 ]
209 },
210 {
@@ -224,8 +224,8 @@
224 "zh-chs": " 用户需要先登录到该服务器一次,然后才能将其添加到设备组。",
225 "zh-cht": " 用戶需要先登入到該伺服器一次,然後才能將其新增到裝置群。",
226 "xloc": [
227 - "default.handlebars->31->1673",
228 - "default.handlebars->31->2161"
227 + "default.handlebars->31->1675",
228 + "default.handlebars->31->2163"
229 ]
230 },
231 {
@@ -430,7 +430,7 @@
430 "zh-chs": "* 8个字符,1个大写,1个小写,1个数字,1个非字母数字。",
431 "zh-cht": "* 8個字符,1個大寫,1個小寫,1個數字,1個非字母數字。",
432 "xloc": [
433 - "default.handlebars->31->1642",
433 + "default.handlebars->31->1644",
434 "default.handlebars->31->374"
435 ]
436 },
@@ -506,7 +506,7 @@
506 "zh-cht": ",",
507 "xloc": [
508 "default-mobile.handlebars->11->599",
509 - "default.handlebars->31->1744"
509 + "default.handlebars->31->1746"
510 ]
511 },
512 {
@@ -554,7 +554,7 @@
554 "zh-cht": ",MQTT在線",
555 "xloc": [
556 "default-mobile.handlebars->11->516",
557 - "default.handlebars->31->1207"
557 + "default.handlebars->31->1209"
558 ]
559 },
560 {
@@ -563,7 +563,7 @@
563 "nl": ", Geen toestemming",
564 "de": ", keine Zustimmung",
565 "xloc": [
566 - "default.handlebars->31->787"
566 + "default.handlebars->31->789"
567 ]
568 },
569 {
@@ -583,7 +583,7 @@
583 "zh-chs": ",提示同意",
584 "zh-cht": ",提示同意",
585 "xloc": [
586 - "default.handlebars->31->788"
586 + "default.handlebars->31->790"
587 ]
588 },
589 {
@@ -603,7 +603,7 @@
603 "zh-chs": ",软体KVM",
604 "zh-cht": ",軟體KVM",
605 "xloc": [
606 - "default.handlebars->31->989",
606 + "default.handlebars->31->991",
607 "desktop.handlebars->3->12",
608 "sharing.handlebars->11->12"
609 ]
@@ -613,7 +613,7 @@
613 "fr": ", barre d'outils",
614 "nl": ", Werkbalk",
615 "xloc": [
616 - "default.handlebars->31->789"
616 + "default.handlebars->31->791"
617 ]
618 },
619 {
@@ -622,7 +622,7 @@
622 "fr": ", Visualisation seulement",
623 "de": ", nur ansehen",
624 "xloc": [
625 - "default.handlebars->31->786"
625 + "default.handlebars->31->788"
626 ]
627 },
628 {
@@ -645,13 +645,14 @@
645 "default-mobile.handlebars->11->354",
646 "default-mobile.handlebars->11->386",
647 "default-mobile.handlebars->11->390",
648 - "default.handlebars->31->1058",
649 - "default.handlebars->31->1070",
650 - "default.handlebars->31->996",
648 + "default.handlebars->31->1060",
649 + "default.handlebars->31->1072",
650 + "default.handlebars->31->998",
651 "desktop.handlebars->3->19",
652 "sharing.handlebars->11->19",
653 "sharing.handlebars->11->27",
654 "sharing.handlebars->11->44",
655 + "ssh.handlebars->9->6",
656 "terminal.handlebars->3->9",
657 "xterm.handlebars->9->6"
658 ]
@@ -774,7 +775,7 @@
775 "zh-chs": ",{0}观看",
776 "zh-cht": ",{0}觀看",
777 "xloc": [
777 - "default.handlebars->31->990",
778 + "default.handlebars->31->992",
779 "desktop.handlebars->3->13",
780 "sharing.handlebars->11->13"
781 ]
@@ -793,6 +794,7 @@
794 "ru": "-",
795 "xloc": [
796 "default.handlebars->container->column_l->p2->p2info->p2createMeshLink1",
797 + "ssh.handlebars->p11->deskarea0->deskarea1->3",
798 "xterm.handlebars->p11->deskarea0->deskarea1->3"
799 ]
800 },
@@ -841,9 +843,9 @@
843 "xloc": [
844 "default-mobile.handlebars->11->132",
845 "default-mobile.handlebars->11->392",
844 - "default.handlebars->31->1076",
845 - "default.handlebars->31->1796",
846 - "default.handlebars->31->2330",
846 + "default.handlebars->31->1078",
847 + "default.handlebars->31->1798",
848 + "default.handlebars->31->2332",
849 "sharing.handlebars->11->50"
850 ]
851 },
@@ -901,7 +903,7 @@
903 "zh-chs": "1个活跃时段",
904 "zh-cht": "1個活躍時段",
905 "xloc": [
904 - "default.handlebars->31->2234"
906 + "default.handlebars->31->2236"
907 ]
908 },
909 {
@@ -923,7 +925,7 @@
925 "xloc": [
926 "default-mobile.handlebars->11->142",
927 "default-mobile.handlebars->11->642",
926 - "default.handlebars->31->1820",
928 + "default.handlebars->31->1822",
929 "download.handlebars->3->1",
930 "download2.handlebars->5->1",
931 "sharing.handlebars->11->96"
@@ -946,7 +948,7 @@
948 "zh-chs": "1条连接",
949 "zh-cht": "1位聯絡文",
950 "xloc": [
949 - "default.handlebars->31->992",
951 + "default.handlebars->31->994",
952 "desktop.handlebars->3->15",
953 "sharing.handlebars->11->15"
954 ]
@@ -990,7 +992,7 @@
992 "zh-chs": "1组",
993 "zh-cht": "1群",
994 "xloc": [
993 - "default.handlebars->31->2195"
995 + "default.handlebars->31->2197"
996 ]
997 },
998 {
@@ -1032,8 +1034,8 @@
1034 "zh-chs": "1分钟",
1035 "zh-cht": "1分鐘",
1036 "xloc": [
1035 - "default.handlebars->31->1463",
1036 - "default.handlebars->31->854"
1037 + "default.handlebars->31->1465",
1038 + "default.handlebars->31->856"
1039 ]
1040 },
1041 {
@@ -1095,7 +1097,7 @@
1097 "zh-chs": "有1个用户没有显示,请使用搜索框查找用户...",
1098 "zh-cht": "有1個用戶沒有顯示,請使用搜尋框搜尋用戶...",
1099 "xloc": [
1098 - "default.handlebars->31->1985"
1100 + "default.handlebars->31->1987"
1101 ]
1102 },
1103 {
@@ -1123,7 +1125,7 @@
1125 "nl": "1 seconde",
1126 "xloc": [
1127 "default-mobile.handlebars->11->308",
1126 - "default.handlebars->31->882"
1128 + "default.handlebars->31->884"
1129 ]
1130 },
1131 {
@@ -1169,7 +1171,7 @@
1171 "default-mobile.handlebars->11->204",
1172 "default-mobile.handlebars->11->207",
1173 "default-mobile.handlebars->11->210",
1172 - "default.handlebars->31->1989",
1174 + "default.handlebars->31->1991",
1175 "default.handlebars->31->307",
1176 "default.handlebars->31->310",
1177 "default.handlebars->31->313",
@@ -1301,8 +1303,8 @@
1303 "zh-chs": "10分钟",
1304 "zh-cht": "10分鐘",
1305 "xloc": [
1304 - "default.handlebars->31->1465",
1305 - "default.handlebars->31->856"
1306 + "default.handlebars->31->1467",
1307 + "default.handlebars->31->858"
1308 ]
1309 },
1310 {
@@ -1310,7 +1312,7 @@
1312 "nl": "10 seconden",
1313 "xloc": [
1314 "default-mobile.handlebars->11->310",
1313 - "default.handlebars->31->884"
1315 + "default.handlebars->31->886"
1316 ]
1317 },
1318 {
@@ -1395,8 +1397,8 @@
1397 "zh-chs": "12小时",
1398 "zh-cht": "12小時",
1399 "xloc": [
1398 - "default.handlebars->31->1473",
1399 - "default.handlebars->31->864"
1400 + "default.handlebars->31->1475",
1401 + "default.handlebars->31->866"
1402 ]
1403 },
1404 {
@@ -1439,8 +1441,8 @@
1441 "zh-chs": "15分钟",
1442 "zh-cht": "15分鐘",
1443 "xloc": [
1442 - "default.handlebars->31->1466",
1443 - "default.handlebars->31->857"
1444 + "default.handlebars->31->1468",
1445 + "default.handlebars->31->859"
1446 ]
1447 },
1448 {
@@ -1460,8 +1462,8 @@
1462 "zh-chs": "16小时",
1463 "zh-cht": "16小時",
1464 "xloc": [
1463 - "default.handlebars->31->1474",
1464 - "default.handlebars->31->865"
1465 + "default.handlebars->31->1476",
1466 + "default.handlebars->31->867"
1467 ]
1468 },
1469 {
@@ -1481,8 +1483,8 @@
1483 "zh-chs": "2天",
1484 "zh-cht": "2天",
1485 "xloc": [
1484 - "default.handlebars->31->1476",
1485 - "default.handlebars->31->867"
1486 + "default.handlebars->31->1478",
1487 + "default.handlebars->31->869"
1488 ]
1489 },
1490 {
@@ -1502,8 +1504,8 @@
1504 "zh-chs": "2小时",
1505 "zh-cht": "2小時",
1506 "xloc": [
1505 - "default.handlebars->31->1470",
1506 - "default.handlebars->31->861"
1507 + "default.handlebars->31->1472",
1508 + "default.handlebars->31->863"
1509 ]
1510 },
1511 {
@@ -1607,8 +1609,8 @@
1609 "zh-chs": "24小时",
1610 "zh-cht": "24小時",
1611 "xloc": [
1610 - "default.handlebars->31->1475",
1611 - "default.handlebars->31->866"
1612 + "default.handlebars->31->1477",
1613 + "default.handlebars->31->868"
1614 ]
1615 },
1616 {
@@ -1671,7 +1673,7 @@
1673 "zh-chs": "2FA备份代码已清除",
1674 "zh-cht": "2FA備份代碼已清除",
1675 "xloc": [
1674 - "default.handlebars->31->1931"
1676 + "default.handlebars->31->1933"
1677 ]
1678 },
1679 {
@@ -1691,8 +1693,8 @@
1693 "zh-chs": "启用第二因素身份验证",
1694 "zh-cht": "啟用第二因素身份驗證",
1695 "xloc": [
1694 - "default.handlebars->31->2002",
1695 - "default.handlebars->31->2217"
1696 + "default.handlebars->31->2004",
1697 + "default.handlebars->31->2219"
1698 ]
1699 },
1700 {
@@ -1811,8 +1813,8 @@
1813 "zh-chs": "30分钟",
1814 "zh-cht": "30分鐘",
1815 "xloc": [
1814 - "default.handlebars->31->1467",
1815 - "default.handlebars->31->858"
1816 + "default.handlebars->31->1469",
1817 + "default.handlebars->31->860"
1818 ]
1819 },
1820 {
@@ -1876,8 +1878,8 @@
1878 "zh-chs": "4天",
1879 "zh-cht": "4天",
1880 "xloc": [
1879 - "default.handlebars->31->1477",
1880 - "default.handlebars->31->868"
1881 + "default.handlebars->31->1479",
1882 + "default.handlebars->31->870"
1883 ]
1884 },
1885 {
@@ -1897,8 +1899,8 @@
1899 "zh-chs": "4个小时",
1900 "zh-cht": "4個小時",
1901 "xloc": [
1900 - "default.handlebars->31->1471",
1901 - "default.handlebars->31->862"
1902 + "default.handlebars->31->1473",
1903 + "default.handlebars->31->864"
1904 ]
1905 },
1906 {
@@ -1981,8 +1983,8 @@
1983 "zh-chs": "45分钟",
1984 "zh-cht": "45分鐘",
1985 "xloc": [
1984 - "default.handlebars->31->1468",
1985 - "default.handlebars->31->859"
1986 + "default.handlebars->31->1470",
1987 + "default.handlebars->31->861"
1988 ]
1989 },
1990 {
@@ -2022,8 +2024,8 @@
2024 "zh-chs": "5分钟",
2025 "zh-cht": "5分鐘",
2026 "xloc": [
2025 - "default.handlebars->31->1464",
2026 - "default.handlebars->31->855"
2027 + "default.handlebars->31->1466",
2028 + "default.handlebars->31->857"
2029 ]
2030 },
2031 {
@@ -2031,7 +2033,7 @@
2033 "nl": "5 seconden",
2034 "xloc": [
2035 "default-mobile.handlebars->11->309",
2034 - "default.handlebars->31->883"
2036 + "default.handlebars->31->885"
2037 ]
2038 },
2039 {
@@ -2158,8 +2160,8 @@
2160 "zh-chs": "60分钟",
2161 "zh-cht": "60分鐘",
2162 "xloc": [
2161 - "default.handlebars->31->1469",
2162 - "default.handlebars->31->860"
2163 + "default.handlebars->31->1471",
2164 + "default.handlebars->31->862"
2165 ]
2166 },
2167 {
@@ -2280,7 +2282,7 @@
2282 "zh-chs": "7天电源状态",
2283 "zh-cht": "7天電源狀態",
2284 "xloc": [
2283 - "default.handlebars->31->917"
2285 + "default.handlebars->31->919"
2286 ]
2287 },
2288 {
@@ -2344,10 +2346,10 @@
2346 "zh-chs": "8小時",
2347 "zh-cht": "8小時",
2348 "xloc": [
2347 - "default.handlebars->31->1472",
2349 + "default.handlebars->31->1474",
2350 "default.handlebars->31->398",
2351 "default.handlebars->31->412",
2350 - "default.handlebars->31->863"
2352 + "default.handlebars->31->865"
2353 ]
2354 },
2355 {
@@ -2581,7 +2583,7 @@
2583 "zh-cht": "ACM",
2584 "xloc": [
2585 "default-mobile.handlebars->11->268",
2584 - "default.handlebars->31->1612",
2586 + "default.handlebars->31->1614",
2587 "default.handlebars->31->657"
2588 ]
2589 },
@@ -2774,7 +2776,7 @@
2776 "zh-cht": "拒絕存取",
2777 "xloc": [
2778 "default-mobile.handlebars->11->517",
2777 - "default.handlebars->31->1208"
2779 + "default.handlebars->31->1210"
2780 ]
2781 },
2782 {
@@ -2822,7 +2824,7 @@
2824 "zh-chs": "访问服务器档案",
2825 "zh-cht": "存取伺服器檔案",
2826 "xloc": [
2825 - "default.handlebars->31->2167"
2827 + "default.handlebars->31->2169"
2828 ]
2829 },
2830 {
@@ -2911,9 +2913,9 @@
2913 "default-mobile.handlebars->11->243",
2914 "default-mobile.handlebars->11->245",
2915 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->3->p3AccountActions->p2AccountSecurity->1->0",
2914 - "default.handlebars->31->1506",
2916 "default.handlebars->31->1508",
2916 - "default.handlebars->31->2446",
2917 + "default.handlebars->31->1510",
2918 + "default.handlebars->31->2448",
2919 "default.handlebars->31->626",
2920 "default.handlebars->31->628"
2921 ]
@@ -2925,7 +2927,7 @@
2927 "de": "Konto Einstellungen",
2928 "xloc": [
2929 "default-mobile.handlebars->11->610",
2928 - "default.handlebars->31->2338"
2930 + "default.handlebars->31->2340"
2931 ]
2932 },
2933 {
@@ -2986,7 +2988,7 @@
2988 "zh-chs": "帐户已更改:{0}",
2989 "zh-cht": "帳戶已更改:{0}",
2990 "xloc": [
2989 - "default.handlebars->31->1904"
2991 + "default.handlebars->31->1906"
2992 ]
2993 },
2994 {
@@ -3006,7 +3008,7 @@
3008 "zh-chs": "创建帐户,电子邮件为{0}",
3009 "zh-cht": "創建帳戶,電子郵件為{0}",
3010 "xloc": [
3009 - "default.handlebars->31->1903"
3011 + "default.handlebars->31->1905"
3012 ]
3013 },
3014 {
@@ -3026,7 +3028,7 @@
3028 "zh-chs": "创建帐户,用户名是{0}",
3029 "zh-cht": "帳戶已創建,用戶名是{0}",
3030 "xloc": [
3029 - "default.handlebars->31->1902"
3031 + "default.handlebars->31->1904"
3032 ]
3033 },
3034 {
@@ -3046,8 +3048,8 @@
3048 "zh-chs": "帐户已被锁定",
3049 "zh-cht": "帳戶已被鎖定",
3050 "xloc": [
3049 - "default.handlebars->31->2004",
3050 - "default.handlebars->31->2164"
3051 + "default.handlebars->31->2006",
3052 + "default.handlebars->31->2166"
3053 ]
3054 },
3055 {
@@ -3068,7 +3070,7 @@
3070 "zh-cht": "達到帳戶限制。",
3071 "xloc": [
3072 "default-mobile.handlebars->11->622",
3071 - "default.handlebars->31->2350",
3073 + "default.handlebars->31->2352",
3074 "login-mobile.handlebars->5->6",
3075 "login.handlebars->5->6",
3076 "login2.handlebars->7->8"
@@ -3113,7 +3115,7 @@
3115 "zh-chs": "帐号登录",
3116 "zh-cht": "帳號登錄",
3117 "xloc": [
3116 - "default.handlebars->31->1839"
3118 + "default.handlebars->31->1841"
3119 ]
3120 },
3121 {
@@ -3122,7 +3124,7 @@
3124 "fr": "Connexion de {0}, {1}, {2}",
3125 "de": "Konto Login von {0}, {1}, {2}",
3126 "xloc": [
3125 - "default.handlebars->31->1945"
3127 + "default.handlebars->31->1947"
3128 ]
3129 },
3130 {
@@ -3142,7 +3144,7 @@
3144 "zh-chs": "帐户登出",
3145 "zh-cht": "帳戶登出",
3146 "xloc": [
3145 - "default.handlebars->31->1840"
3147 + "default.handlebars->31->1842"
3148 ]
3149 },
3150 {
@@ -3184,7 +3186,7 @@
3186 "zh-chs": "帐户密码已更改:{0}",
3187 "zh-cht": "帳戶密碼已更改:{0}",
3188 "xloc": [
3187 - "default.handlebars->31->1912"
3189 + "default.handlebars->31->1914"
3190 ]
3191 },
3192 {
@@ -3204,7 +3206,7 @@
3206 "zh-chs": "帐户已删除",
3207 "zh-cht": "帳戶已刪除",
3208 "xloc": [
3207 - "default.handlebars->31->1901"
3209 + "default.handlebars->31->1903"
3210 ]
3211 },
3212 {
@@ -3245,7 +3247,7 @@
3247 "zh-cht": "指令",
3248 "xloc": [
3249 "default-mobile.handlebars->11->523",
3248 - "default.handlebars->31->1214",
3250 + "default.handlebars->31->1216",
3251 "default.handlebars->container->column_l->p42->p42tbl->1->0->8"
3252 ]
3253 },
@@ -3266,8 +3268,8 @@
3268 "zh-chs": "动作档案",
3269 "zh-cht": "動作檔案",
3270 "xloc": [
3269 - "default.handlebars->31->963",
3270 - "default.handlebars->31->965"
3271 + "default.handlebars->31->965",
3272 + "default.handlebars->31->967"
3273 ]
3274 },
3275 {
@@ -3374,7 +3376,7 @@
3376 "zh-chs": "如果ACM失败,则激活到CCM",
3377 "zh-cht": "如果ACM失敗,則激活到CCM",
3378 "xloc": [
3377 - "default.handlebars->31->1633"
3379 + "default.handlebars->31->1635"
3380 ]
3381 },
3382 {
@@ -3397,7 +3399,7 @@
3399 "default-mobile.handlebars->11->263",
3400 "default-mobile.handlebars->11->265",
3401 "default-mobile.handlebars->11->479",
3400 - "default.handlebars->31->1169",
3402 + "default.handlebars->31->1171",
3403 "default.handlebars->31->650",
3404 "default.handlebars->31->652"
3405 ]
@@ -3439,13 +3441,13 @@
3441 "zh-chs": "主动设备共享",
3442 "zh-cht": "主動設備共享",
3443 "xloc": [
3442 - "default.handlebars->31->775"
3444 + "default.handlebars->31->777"
3445 ]
3446 },
3447 {
3448 "en": "Active Login Tokens",
3449 "xloc": [
3448 - "default.handlebars->31->1527"
3450 + "default.handlebars->31->1529"
3451 ]
3452 },
3453 {
@@ -3472,7 +3474,7 @@
3474 "de": "hinzufügen",
3475 "xloc": [
3476 "default-mobile.handlebars->11->381",
3475 - "default.handlebars->31->1027"
3477 + "default.handlebars->31->1029"
3478 ]
3479 },
3480 {
@@ -3492,7 +3494,7 @@
3494 "zh-chs": "添加代理",
3495 "zh-cht": "新增代理",
3496 "xloc": [
3495 - "default.handlebars->31->1608",
3497 + "default.handlebars->31->1610",
3498 "default.handlebars->31->340"
3499 ]
3500 },
@@ -3530,8 +3532,8 @@
3532 "zh-chs": "添加设备",
3533 "zh-cht": "新增裝置",
3534 "xloc": [
3533 - "default.handlebars->31->2141",
3534 - "default.handlebars->31->2271",
3535 + "default.handlebars->31->2143",
3536 + "default.handlebars->31->2273",
3537 "default.handlebars->31->344"
3538 ]
3539 },
@@ -3552,7 +3554,7 @@
3554 "zh-chs": "添加设备日志",
3555 "zh-cht": "新增裝置日誌",
3556 "xloc": [
3555 - "default.handlebars->31->831"
3557 + "default.handlebars->31->833"
3558 ]
3559 },
3560 {
@@ -3572,9 +3574,9 @@
3574 "zh-chs": "添加设备组",
3575 "zh-cht": "新增裝置群",
3576 "xloc": [
3575 - "default.handlebars->31->1708",
3576 - "default.handlebars->31->2135",
3577 - "default.handlebars->31->2259",
3577 + "default.handlebars->31->1710",
3578 + "default.handlebars->31->2137",
3579 + "default.handlebars->31->2261",
3580 "default.handlebars->31->274"
3581 ]
3582 },
@@ -3595,7 +3597,7 @@
3597 "zh-chs": "添加设备组权限",
3598 "zh-cht": "新增裝置群權限",
3599 "xloc": [
3598 - "default.handlebars->31->1705"
3600 + "default.handlebars->31->1707"
3601 ]
3602 },
3603 {
@@ -3615,8 +3617,8 @@
3617 "zh-chs": "添加设备权限",
3618 "zh-cht": "新增裝置權限",
3619 "xloc": [
3618 - "default.handlebars->31->1710",
3619 - "default.handlebars->31->1712"
3620 + "default.handlebars->31->1712",
3621 + "default.handlebars->31->1714"
3622 ]
3623 },
3624 {
@@ -3713,7 +3715,7 @@
3715 "zh-chs": "添加成员身份",
3716 "zh-cht": "新增成員身份",
3717 "xloc": [
3716 - "default.handlebars->31->2291"
3718 + "default.handlebars->31->2293"
3719 ]
3720 },
3721 {
@@ -3753,8 +3755,8 @@
3755 "zh-chs": "添加安全密钥",
3756 "zh-cht": "新增安全密鑰",
3757 "xloc": [
3756 - "default.handlebars->31->1253",
3757 - "default.handlebars->31->1254",
3758 + "default.handlebars->31->1255",
3759 + "default.handlebars->31->1256",
3760 "default.handlebars->31->167",
3761 "default.handlebars->31->169",
3762 "default.handlebars->31->172",
@@ -3779,7 +3781,7 @@
3781 "zh-cht": "新增用戶",
3782 "xloc": [
3783 "default-mobile.handlebars->11->539",
3782 - "default.handlebars->31->767"
3784 + "default.handlebars->31->769"
3785 ]
3786 },
3787 {
@@ -3799,7 +3801,7 @@
3801 "zh-chs": "添加用户设备权限",
3802 "zh-cht": "新增用戶裝置權限",
3803 "xloc": [
3802 - "default.handlebars->31->1715"
3804 + "default.handlebars->31->1717"
3805 ]
3806 },
3807 {
@@ -3819,10 +3821,10 @@
3821 "zh-chs": "添加用户组",
3822 "zh-cht": "新增用戶群",
3823 "xloc": [
3822 - "default.handlebars->31->1604",
3823 - "default.handlebars->31->1707",
3824 - "default.handlebars->31->2265",
3825 - "default.handlebars->31->768"
3824 + "default.handlebars->31->1606",
3825 + "default.handlebars->31->1709",
3826 + "default.handlebars->31->2267",
3827 + "default.handlebars->31->770"
3828 ]
3829 },
3830 {
@@ -3842,7 +3844,7 @@
3844 "zh-chs": "添加用户组设备权限",
3845 "zh-cht": "新增用戶群裝置權限",
3846 "xloc": [
3845 - "default.handlebars->31->1717"
3847 + "default.handlebars->31->1719"
3848 ]
3849 },
3850 {
@@ -3899,8 +3901,8 @@
3901 "zh-chs": "添加用户",
3902 "zh-cht": "新增用戶",
3903 "xloc": [
3902 - "default.handlebars->31->1603",
3903 - "default.handlebars->31->2130"
3904 + "default.handlebars->31->1605",
3905 + "default.handlebars->31->2132"
3906 ]
3907 },
3908 {
@@ -3920,7 +3922,7 @@
3922 "zh-chs": "将用户添加到设备组",
3923 "zh-cht": "將用戶新增到裝置群",
3924 "xloc": [
3923 - "default.handlebars->31->1704"
3925 + "default.handlebars->31->1706"
3926 ]
3927 },
3928 {
@@ -3940,7 +3942,7 @@
3942 "zh-chs": "将用户添加到用户组",
3943 "zh-cht": "將用戶新增到用戶群",
3944 "xloc": [
3943 - "default.handlebars->31->2163"
3945 + "default.handlebars->31->2165"
3946 ]
3947 },
3948 {
@@ -4063,7 +4065,7 @@
4065 "zh-chs": "通过安装Mesh Agent将新计算机添加到该设备组。",
4066 "zh-cht": "通過安裝Mesh Agent將新電腦新增到該裝置群。",
4067 "xloc": [
4066 - "default.handlebars->31->1607",
4068 + "default.handlebars->31->1609",
4069 "default.handlebars->31->339"
4070 ]
4071 },
@@ -4136,7 +4138,7 @@
4138 "zh-chs": "添加了身份验证应用程序",
4139 "zh-cht": "添加了身份驗證應用程序",
4140 "xloc": [
4139 - "default.handlebars->31->1928"
4141 + "default.handlebars->31->1930"
4142 ]
4143 },
4144 {
@@ -4156,7 +4158,7 @@
4158 "zh-chs": "已将设备共享{0}从{1}添加到{2}",
4159 "zh-cht": "已將設備共享{0}從{1}添加到{2}",
4160 "xloc": [
4159 - "default.handlebars->31->1939"
4161 + "default.handlebars->31->1941"
4162 ]
4163 },
4164 {
@@ -4176,21 +4178,21 @@
4178 "zh-chs": "已将设备{0}添加到设备组{1}",
4179 "zh-cht": "已將設備{0}添加到設備組{1}",
4180 "xloc": [
4179 - "default.handlebars->31->1895",
4180 - "default.handlebars->31->1922"
4181 + "default.handlebars->31->1897",
4182 + "default.handlebars->31->1924"
4183 ]
4184 },
4185 {
4186 "en": "Added login token",
4187 "xloc": [
4186 - "default.handlebars->31->1953"
4188 + "default.handlebars->31->1955"
4189 ]
4190 },
4191 {
4192 "en": "Added push notification authentication device",
4193 "nl": "Verificatie apparaat voor pushmeldingen toegevoegd",
4194 "xloc": [
4193 - "default.handlebars->31->1951"
4195 + "default.handlebars->31->1953"
4196 ]
4197 },
4198 {
@@ -4210,7 +4212,7 @@
4212 "zh-chs": "添加了安全密钥",
4213 "zh-cht": "添加了安全密鑰",
4214 "xloc": [
4213 - "default.handlebars->31->1933"
4215 + "default.handlebars->31->1935"
4216 ]
4217 },
4218 {
@@ -4230,7 +4232,7 @@
4232 "zh-chs": "已将用户组{0}添加到设备组{1}",
4233 "zh-cht": "已將用戶組{0}添加到設備組{1}",
4234 "xloc": [
4233 - "default.handlebars->31->1906"
4235 + "default.handlebars->31->1908"
4236 ]
4237 },
4238 {
@@ -4250,8 +4252,8 @@
4252 "zh-chs": "已将用户{0}添加到用户组{1}",
4253 "zh-cht": "已將用戶{0}添加到用戶組{1}",
4254 "xloc": [
4253 - "default.handlebars->31->1909",
4254 - "default.handlebars->31->1918"
4255 + "default.handlebars->31->1911",
4256 + "default.handlebars->31->1920"
4257 ]
4258 },
4259 {
@@ -4312,7 +4314,7 @@
4314 "zh-cht": "管理員控制模式(ACM)",
4315 "xloc": [
4316 "default-mobile.handlebars->11->481",
4315 - "default.handlebars->31->1171"
4317 + "default.handlebars->31->1173"
4318 ]
4319 },
4320 {
@@ -4333,7 +4335,7 @@
4335 "zh-cht": "管理員憑證",
4336 "xloc": [
4337 "default-mobile.handlebars->11->487",
4336 - "default.handlebars->31->1177"
4338 + "default.handlebars->31->1179"
4339 ]
4340 },
4341 {
@@ -4354,6 +4356,7 @@
4356 "zh-cht": "管理員PowerShell",
4357 "xloc": [
4358 "default.handlebars->termShellContextMenu->3",
4359 + "ssh.handlebars->termShellContextMenu->cxtermps",
4360 "xterm.handlebars->termShellContextMenu->cxtermps"
4361 ]
4362 },
@@ -4374,7 +4377,7 @@
4377 "zh-chs": "管理领域",
4378 "zh-cht": "管理領域",
4379 "xloc": [
4377 - "default.handlebars->31->2199"
4380 + "default.handlebars->31->2201"
4381 ]
4382 },
4383 {
@@ -4395,6 +4398,7 @@
4398 "zh-cht": "管理控制台",
4399 "xloc": [
4400 "default.handlebars->termShellContextMenu->1->0",
4401 + "ssh.handlebars->termShellContextMenu->cxtermnorm->0",
4402 "xterm.handlebars->termShellContextMenu->cxtermnorm->0"
4403 ]
4404 },
@@ -4415,7 +4419,7 @@
4419 "zh-chs": "管理领域",
4420 "zh-cht": "管理領域",
4421 "xloc": [
4418 - "default.handlebars->31->2067"
4422 + "default.handlebars->31->2069"
4423 ]
4424 },
4425 {
@@ -4435,7 +4439,7 @@
4439 "zh-chs": "管理员",
4440 "zh-cht": "管理員",
4441 "xloc": [
4438 - "default.handlebars->31->1996"
4442 + "default.handlebars->31->1998"
4443 ]
4444 },
4445 {
@@ -4455,7 +4459,7 @@
4459 "zh-chs": "南非文",
4460 "zh-cht": "南非文",
4461 "xloc": [
4458 - "default.handlebars->31->1256"
4462 + "default.handlebars->31->1258"
4463 ]
4464 },
4465 {
@@ -4480,8 +4484,8 @@
4484 "default-mobile.handlebars->11->260",
4485 "default-mobile.handlebars->11->282",
4486 "default-mobile.handlebars->container->page_content->column_l->p10->p10console->consoleTable->1->4->1->1->1->0->p15outputselecttd->p15outputselect->p15outputselect1",
4483 - "default.handlebars->31->1771",
4484 - "default.handlebars->31->1784",
4487 + "default.handlebars->31->1773",
4488 + "default.handlebars->31->1786",
4489 "default.handlebars->31->290",
4490 "default.handlebars->31->496",
4491 "default.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->p15outputselecttd->p15outputselect->p15outputselect1"
@@ -4504,8 +4508,8 @@
4508 "zh-chs": "代理+英特尔AMT",
4509 "zh-cht": "代理+Intel&reg; AMT",
4510 "xloc": [
4507 - "default.handlebars->31->1773",
4508 - "default.handlebars->31->1786"
4511 + "default.handlebars->31->1775",
4512 + "default.handlebars->31->1788"
4513 ]
4514 },
4515 {
@@ -4547,7 +4551,7 @@
4551 "zh-cht": "代理控制台",
4552 "xloc": [
4553 "default-mobile.handlebars->11->581",
4550 - "default.handlebars->31->1725"
4554 + "default.handlebars->31->1727"
4555 ]
4556 },
4557 {
@@ -4567,7 +4571,7 @@
4571 "zh-chs": "代理错误计数器",
4572 "zh-cht": "代理錯誤計數器",
4573 "xloc": [
4570 - "default.handlebars->31->2375"
4574 + "default.handlebars->31->2377"
4575 ]
4576 },
4577 {
@@ -4679,7 +4683,7 @@
4683 "zh-chs": "代理时段",
4684 "zh-cht": "代理時段",
4685 "xloc": [
4682 - "default.handlebars->31->2391"
4686 + "default.handlebars->31->2393"
4687 ]
4688 },
4689 {
@@ -4720,7 +4724,7 @@
4724 "zh-chs": "代理类型",
4725 "zh-cht": "代理類型",
4726 "xloc": [
4723 - "default.handlebars->31->1782",
4727 + "default.handlebars->31->1784",
4728 "default.handlebars->container->column_l->p21->p21main->1->1->meshOsChartDiv->1"
4729 ]
4730 },
@@ -4741,7 +4745,7 @@
4745 "zh-chs": "代理关闭了与服务器压缩的{0}%代理会话。已发送:{1},已压缩:{2}",
4746 "zh-cht": "代理關閉了與{0}%代理到服務器壓縮的會話。已發送:{1},已壓縮:{2}",
4747 "xloc": [
4744 - "default.handlebars->31->1892"
4748 + "default.handlebars->31->1894"
4749 ]
4750 },
4751 {
@@ -4762,8 +4766,8 @@
4766 "zh-cht": "代理已連接",
4767 "xloc": [
4768 "default.handlebars->31->181",
4765 - "default.handlebars->31->758",
4766 - "default.handlebars->31->759"
4769 + "default.handlebars->31->760",
4770 + "default.handlebars->31->761"
4771 ]
4772 },
4773 {
@@ -4804,7 +4808,7 @@
4808 "zh-cht": "代理離線",
4809 "xloc": [
4810 "default-mobile.handlebars->11->515",
4807 - "default.handlebars->31->1206"
4811 + "default.handlebars->31->1208"
4812 ]
4813 },
4814 {
@@ -4825,7 +4829,7 @@
4829 "zh-cht": "代理在線",
4830 "xloc": [
4831 "default-mobile.handlebars->11->514",
4828 - "default.handlebars->31->1205"
4832 + "default.handlebars->31->1207"
4833 ]
4834 },
4835 {
@@ -4846,7 +4850,7 @@
4850 "zh-cht": "代理在特權降低的遠程設備上運行。",
4851 "xloc": [
4852 "default.handlebars->31->179",
4849 - "default.handlebars->31->756"
4853 + "default.handlebars->31->758"
4854 ]
4855 },
4856 {
@@ -4866,7 +4870,7 @@
4870 "zh-chs": "代理",
4871 "zh-cht": "代理",
4872 "xloc": [
4869 - "default.handlebars->31->2407"
4873 + "default.handlebars->31->2409"
4874 ]
4875 },
4876 {
@@ -4886,7 +4890,7 @@
4890 "zh-chs": "阿尔巴尼亚文",
4891 "zh-cht": "阿爾巴尼亞文",
4892 "xloc": [
4889 - "default.handlebars->31->1257"
4893 + "default.handlebars->31->1259"
4894 ]
4895 },
4896 {
@@ -4929,7 +4933,7 @@
4933 "zh-chs": "全部可用",
4934 "zh-cht": "全部可用",
4935 "xloc": [
4932 - "default.handlebars->31->1959"
4936 + "default.handlebars->31->1961"
4937 ]
4938 },
4939 {
@@ -4949,7 +4953,7 @@
4953 "zh-chs": "所有显示",
4954 "zh-cht": "所有顯示",
4955 "xloc": [
4952 - "default.handlebars->31->1052"
4956 + "default.handlebars->31->1054"
4957 ]
4958 },
4959 {
@@ -4969,7 +4973,7 @@
4973 "zh-chs": "所有事件",
4974 "zh-cht": "所有事件",
4975 "xloc": [
4972 - "default.handlebars->31->1957"
4976 + "default.handlebars->31->1959"
4977 ]
4978 },
4979 {
@@ -4989,8 +4993,8 @@
4993 "zh-chs": "全部聚焦",
4994 "zh-cht": "全部聚焦",
4995 "xloc": [
4992 - "default.handlebars->31->1000",
4993 - "default.handlebars->31->997",
4996 + "default.handlebars->31->1001",
4997 + "default.handlebars->31->1002",
4998 "default.handlebars->31->999"
4999 ]
5000 },
@@ -5011,8 +5015,8 @@
5015 "zh-chs": "允许用户管理此设备组和该组中的设备。",
5016 "zh-cht": "允許用戶管理此裝置群和該群中的裝置。",
5017 "xloc": [
5014 - "default.handlebars->31->1671",
5015 - "default.handlebars->31->2160"
5018 + "default.handlebars->31->1673",
5019 + "default.handlebars->31->2162"
5020 ]
5021 },
5022 {
@@ -5032,7 +5036,7 @@
5036 "zh-chs": "允许用户管理此设备。",
5037 "zh-cht": "允許用戶管理此裝置。",
5038 "xloc": [
5035 - "default.handlebars->31->1672"
5039 + "default.handlebars->31->1674"
5040 ]
5041 },
5042 {
@@ -5072,8 +5076,8 @@
5076 "xloc": [
5077 "default-mobile.handlebars->11->374",
5078 "default-mobile.handlebars->11->378",
5075 - "default.handlebars->31->1020",
5076 - "default.handlebars->31->1024"
5079 + "default.handlebars->31->1022",
5080 + "default.handlebars->31->1026"
5081 ]
5082 },
5083 {
@@ -5137,7 +5141,7 @@
5141 "zh-chs": "备用(F10 = ESC + 0)",
5142 "zh-cht": "備用(F10 = ESC + 0)",
5143 "xloc": [
5140 - "default.handlebars->31->1063",
5144 + "default.handlebars->31->1065",
5145 "sharing.handlebars->11->37",
5146 "terminal.handlebars->3->19"
5147 ]
@@ -5180,9 +5184,9 @@
5184 "zh-chs": "一直通知",
5185 "zh-cht": "一直通知",
5186 "xloc": [
5183 - "default.handlebars->31->1583",
5184 - "default.handlebars->31->2121",
5185 - "default.handlebars->31->2208",
5187 + "default.handlebars->31->1585",
5188 + "default.handlebars->31->2123",
5189 + "default.handlebars->31->2210",
5190 "default.handlebars->31->701"
5191 ]
5192 },
@@ -5203,9 +5207,9 @@
5207 "zh-chs": "一直提示",
5208 "zh-cht": "一直提示",
5209 "xloc": [
5206 - "default.handlebars->31->1584",
5207 - "default.handlebars->31->2122",
5208 - "default.handlebars->31->2209",
5210 + "default.handlebars->31->1586",
5211 + "default.handlebars->31->2124",
5212 + "default.handlebars->31->2211",
5213 "default.handlebars->31->702"
5214 ]
5215 },
@@ -5353,8 +5357,8 @@
5357 "fr": "Antivirus désactivé",
5358 "de": "Anti-virus ist nicht aktiv",
5359 "xloc": [
5356 - "default.handlebars->31->1775",
5357 - "default.handlebars->31->1789"
5360 + "default.handlebars->31->1777",
5361 + "default.handlebars->31->1791"
5362 ]
5363 },
5364 {
@@ -5496,7 +5500,7 @@
5500 "zh-chs": "阿拉伯文(阿尔及利亚)",
5501 "zh-cht": "阿拉伯文(阿爾及利亞)",
5502 "xloc": [
5499 - "default.handlebars->31->1259"
5503 + "default.handlebars->31->1261"
5504 ]
5505 },
5506 {
@@ -5516,7 +5520,7 @@
5520 "zh-chs": "阿拉伯文(巴林)",
5521 "zh-cht": "阿拉伯文(巴林)",
5522 "xloc": [
5519 - "default.handlebars->31->1260"
5523 + "default.handlebars->31->1262"
5524 ]
5525 },
5526 {
@@ -5536,7 +5540,7 @@
5540 "zh-chs": "阿拉伯文(埃及)",
5541 "zh-cht": "阿拉伯文(埃及)",
5542 "xloc": [
5539 - "default.handlebars->31->1261"
5543 + "default.handlebars->31->1263"
5544 ]
5545 },
5546 {
@@ -5556,7 +5560,7 @@
5560 "zh-chs": "阿拉伯文(伊拉克)",
5561 "zh-cht": "阿拉伯文(伊拉克)",
5562 "xloc": [
5559 - "default.handlebars->31->1262"
5563 + "default.handlebars->31->1264"
5564 ]
5565 },
5566 {
@@ -5576,7 +5580,7 @@
5580 "zh-chs": "阿拉伯文(约旦)",
5581 "zh-cht": "阿拉伯文(約旦)",
5582 "xloc": [
5579 - "default.handlebars->31->1263"
5583 + "default.handlebars->31->1265"
5584 ]
5585 },
5586 {
@@ -5596,7 +5600,7 @@
5600 "zh-chs": "阿拉伯文(科威特)",
5601 "zh-cht": "阿拉伯文(科威特)",
5602 "xloc": [
5599 - "default.handlebars->31->1264"
5603 + "default.handlebars->31->1266"
5604 ]
5605 },
5606 {
@@ -5616,7 +5620,7 @@
5620 "zh-chs": "阿拉伯文(黎巴嫩)",
5621 "zh-cht": "阿拉伯文(黎巴嫩)",
5622 "xloc": [
5619 - "default.handlebars->31->1265"
5623 + "default.handlebars->31->1267"
5624 ]
5625 },
5626 {
@@ -5636,7 +5640,7 @@
5640 "zh-chs": "阿拉伯文(利比亚)",
5641 "zh-cht": "阿拉伯文(利比亞)",
5642 "xloc": [
5639 - "default.handlebars->31->1266"
5643 + "default.handlebars->31->1268"
5644 ]
5645 },
5646 {
@@ -5656,7 +5660,7 @@
5660 "zh-chs": "阿拉伯文(摩洛哥)",
5661 "zh-cht": "阿拉伯文(摩洛哥)",
5662 "xloc": [
5659 - "default.handlebars->31->1267"
5663 + "default.handlebars->31->1269"
5664 ]
5665 },
5666 {
@@ -5676,7 +5680,7 @@
5680 "zh-chs": "阿拉伯文(阿曼)",
5681 "zh-cht": "阿拉伯文(阿曼)",
5682 "xloc": [
5679 - "default.handlebars->31->1268"
5683 + "default.handlebars->31->1270"
5684 ]
5685 },
5686 {
@@ -5696,7 +5700,7 @@
5700 "zh-chs": "阿拉伯文(卡塔尔)",
5701 "zh-cht": "阿拉伯文(卡塔爾)",
5702 "xloc": [
5699 - "default.handlebars->31->1269"
5703 + "default.handlebars->31->1271"
5704 ]
5705 },
5706 {
@@ -5716,7 +5720,7 @@
5720 "zh-chs": "阿拉伯文(沙特阿拉伯)",
5721 "zh-cht": "阿拉伯文(沙特阿拉伯)",
5722 "xloc": [
5719 - "default.handlebars->31->1270"
5723 + "default.handlebars->31->1272"
5724 ]
5725 },
5726 {
@@ -5736,7 +5740,7 @@
5740 "zh-chs": "阿拉伯文(标准)",
5741 "zh-cht": "阿拉伯文(標準)",
5742 "xloc": [
5739 - "default.handlebars->31->1258"
5743 + "default.handlebars->31->1260"
5744 ]
5745 },
5746 {
@@ -5756,7 +5760,7 @@
5760 "zh-chs": "阿拉伯文(叙利亚)",
5761 "zh-cht": "阿拉伯文(敘利亞)",
5762 "xloc": [
5759 - "default.handlebars->31->1271"
5763 + "default.handlebars->31->1273"
5764 ]
5765 },
5766 {
@@ -5776,7 +5780,7 @@
5780 "zh-chs": "阿拉伯文(突尼斯)",
5781 "zh-cht": "阿拉伯文(突尼斯)",
5782 "xloc": [
5779 - "default.handlebars->31->1272"
5783 + "default.handlebars->31->1274"
5784 ]
5785 },
5786 {
@@ -5796,7 +5800,7 @@
5800 "zh-chs": "阿拉伯文(阿联酋)",
5801 "zh-cht": "阿拉伯文(阿聯酋)",
5802 "xloc": [
5799 - "default.handlebars->31->1273"
5803 + "default.handlebars->31->1275"
5804 ]
5805 },
5806 {
@@ -5816,7 +5820,7 @@
5820 "zh-chs": "阿拉伯文(也门)",
5821 "zh-cht": "阿拉伯文(也門)",
5822 "xloc": [
5819 - "default.handlebars->31->1274"
5823 + "default.handlebars->31->1276"
5824 ]
5825 },
5826 {
@@ -5836,7 +5840,7 @@
5840 "zh-chs": "阿拉贡文",
5841 "zh-cht": "阿拉貢文",
5842 "xloc": [
5839 - "default.handlebars->31->1275"
5843 + "default.handlebars->31->1277"
5844 ]
5845 },
5846 {
@@ -5857,7 +5861,7 @@
5861 "zh-cht": "結構",
5862 "xloc": [
5863 "default-mobile.handlebars->11->427",
5860 - "default.handlebars->31->1124"
5864 + "default.handlebars->31->1126"
5865 ]
5866 },
5867 {
@@ -5898,7 +5902,7 @@
5902 "zh-cht": "你確定要刪除群{0}嗎?刪除裝置群還將刪除該群中有關裝置的所有訊息。",
5903 "xloc": [
5904 "default-mobile.handlebars->11->546",
5901 - "default.handlebars->31->1647"
5905 + "default.handlebars->31->1649"
5906 ]
5907 },
5908 {
@@ -5918,7 +5922,7 @@
5922 "zh-chs": "您确定要删除节点{0}吗?",
5923 "zh-cht": "你確定要刪除節點{0}嗎?",
5924 "xloc": [
5921 - "default.handlebars->31->939"
5925 + "default.handlebars->31->941"
5926 ]
5927 },
5928 {
@@ -5938,7 +5942,7 @@
5942 "zh-chs": "您确定要卸载所选代理吗?",
5943 "zh-cht": "你確定要卸載所選代理嗎?",
5944 "xloc": [
5941 - "default.handlebars->31->928"
5945 + "default.handlebars->31->930"
5946 ]
5947 },
5948 {
@@ -5958,7 +5962,7 @@
5962 "zh-chs": "您确定要卸载所选的{0}代理吗?",
5963 "zh-cht": "你確定要卸載所選的{0}代理嗎?",
5964 "xloc": [
5961 - "default.handlebars->31->927"
5965 + "default.handlebars->31->929"
5966 ]
5967 },
5968 {
@@ -5978,7 +5982,7 @@
5982 "zh-chs": "您确定要{0}插件吗:{1}",
5983 "zh-cht": "你確定要{0}外掛嗎:{1}",
5984 "xloc": [
5981 - "default.handlebars->31->2455"
5985 + "default.handlebars->31->2457"
5986 ]
5987 },
5988 {
@@ -5998,7 +6002,7 @@
6002 "zh-chs": "亚美尼亚文",
6003 "zh-cht": "亞美尼亞文",
6004 "xloc": [
6001 - "default.handlebars->31->1276"
6005 + "default.handlebars->31->1278"
6006 ]
6007 },
6008 {
@@ -6058,7 +6062,7 @@
6062 "zh-chs": "阿萨姆文",
6063 "zh-cht": "阿薩姆文",
6064 "xloc": [
6061 - "default.handlebars->31->1277"
6065 + "default.handlebars->31->1279"
6066 ]
6067 },
6068 {
@@ -6078,7 +6082,7 @@
6082 "zh-chs": "阿斯图里亚斯文",
6083 "zh-cht": "阿斯圖里亞斯文",
6084 "xloc": [
6081 - "default.handlebars->31->1278"
6085 + "default.handlebars->31->1280"
6086 ]
6087 },
6088 {
@@ -6098,7 +6102,7 @@
6102 "zh-chs": "尝试激活英特尔(R)AMT ACM模式",
6103 "zh-cht": "嘗試激活英特爾(R)AMT ACM模式",
6104 "xloc": [
6101 - "default.handlebars->31->1861"
6105 + "default.handlebars->31->1863"
6106 ]
6107 },
6108 {
@@ -6118,16 +6122,16 @@
6122 "zh-chs": "认证软件",
6123 "zh-cht": "認證軟體",
6124 "xloc": [
6121 - "default.handlebars->31->2212"
6125 + "default.handlebars->31->2214"
6126 ]
6127 },
6128 {
6129 "en": "Authentication Device",
6130 "nl": "Verificatieapparaat",
6131 "xloc": [
6128 - "default.handlebars->31->1239",
6132 "default.handlebars->31->1241",
6130 - "default.handlebars->31->1245"
6133 + "default.handlebars->31->1243",
6134 + "default.handlebars->31->1247"
6135 ]
6136 },
6137 {
@@ -6151,8 +6155,8 @@
6155 "default-mobile.handlebars->11->64",
6156 "default-mobile.handlebars->11->95",
6157 "default-mobile.handlebars->11->97",
6154 - "default.handlebars->31->1235",
6158 "default.handlebars->31->1237",
6159 + "default.handlebars->31->1239",
6160 "default.handlebars->31->143",
6161 "default.handlebars->31->148"
6162 ]
@@ -6234,7 +6238,7 @@
6238 "zh-chs": "自动删除",
6239 "zh-cht": "自動刪除",
6240 "xloc": [
6237 - "default.handlebars->31->1570"
6241 + "default.handlebars->31->1572"
6242 ]
6243 },
6244 {
@@ -6279,7 +6283,7 @@
6283 "zh-chs": "自动下载代理程序核心转储文件:“{0}”",
6284 "zh-cht": "自動下載代理程序核心轉儲文件:“{0}”",
6285 "xloc": [
6282 - "default.handlebars->31->1942"
6286 + "default.handlebars->31->1944"
6287 ]
6288 },
6289 {
@@ -6319,7 +6323,7 @@
6323 "zh-chs": "可用內存",
6324 "zh-cht": "可用內存",
6325 "xloc": [
6322 - "default.handlebars->31->2400"
6326 + "default.handlebars->31->2402"
6327 ]
6328 },
6329 {
@@ -6339,7 +6343,7 @@
6343 "zh-chs": "阿塞拜疆文",
6344 "zh-cht": "阿塞拜疆文",
6345 "xloc": [
6342 - "default.handlebars->31->1279"
6346 + "default.handlebars->31->1281"
6347 ]
6348 },
6349 {
@@ -6374,7 +6378,7 @@
6378 "zh-cht": "的BIOS",
6379 "xloc": [
6380 "default-mobile.handlebars->11->493",
6377 - "default.handlebars->31->1183"
6381 + "default.handlebars->31->1185"
6382 ]
6383 },
6384 {
@@ -6460,7 +6464,7 @@
6464 "de": "Rücktaste",
6465 "xloc": [
6466 "default-mobile.handlebars->11->357",
6463 - "default.handlebars->31->1003"
6467 + "default.handlebars->31->1005"
6468 ]
6469 },
6470 {
@@ -6500,8 +6504,8 @@
6504 "zh-chs": "背景与互动",
6505 "zh-cht": "背景與互動",
6506 "xloc": [
6503 - "default.handlebars->31->1754",
6504 - "default.handlebars->31->1761",
6507 + "default.handlebars->31->1756",
6508 + "default.handlebars->31->1763",
6509 "default.handlebars->31->404",
6510 "default.handlebars->31->418"
6511 ]
@@ -6523,8 +6527,8 @@
6527 "zh-chs": "仅背景",
6528 "zh-cht": "僅背景",
6529 "xloc": [
6526 - "default.handlebars->31->1755",
6527 - "default.handlebars->31->1762",
6530 + "default.handlebars->31->1757",
6531 + "default.handlebars->31->1764",
6532 "default.handlebars->31->405",
6533 "default.handlebars->31->419",
6534 "default.handlebars->31->434"
@@ -6569,7 +6573,7 @@
6573 "zh-chs": "备用码",
6574 "zh-cht": "備用碼",
6575 "xloc": [
6572 - "default.handlebars->31->2214"
6576 + "default.handlebars->31->2216"
6577 ]
6578 },
6579 {
@@ -6589,7 +6593,7 @@
6593 "zh-chs": "错误的签名",
6594 "zh-cht": "錯誤的簽名",
6595 "xloc": [
6592 - "default.handlebars->31->2382"
6596 + "default.handlebars->31->2384"
6597 ]
6598 },
6599 {
@@ -6609,7 +6613,7 @@
6613 "zh-chs": "错误的网络证书",
6614 "zh-cht": "錯誤的網絡憑證",
6615 "xloc": [
6612 - "default.handlebars->31->2381"
6616 + "default.handlebars->31->2383"
6617 ]
6618 },
6619 {
@@ -6629,7 +6633,7 @@
6633 "zh-chs": "巴斯克",
6634 "zh-cht": "巴斯克",
6635 "xloc": [
6632 - "default.handlebars->31->1280"
6636 + "default.handlebars->31->1282"
6637 ]
6638 },
6639 {
@@ -6689,7 +6693,7 @@
6693 "zh-chs": "将{0}个文件批量上传到文件夹{1}",
6694 "zh-cht": "將{0}個文件批量上傳到文件夾{1}",
6695 "xloc": [
6692 - "default.handlebars->31->1941"
6696 + "default.handlebars->31->1943"
6697 ]
6698 },
6699 {
@@ -6709,7 +6713,7 @@
6713 "zh-chs": "白俄罗斯文",
6714 "zh-cht": "白俄羅斯文",
6715 "xloc": [
6712 - "default.handlebars->31->1282"
6716 + "default.handlebars->31->1284"
6717 ]
6718 },
6719 {
@@ -6729,7 +6733,7 @@
6733 "zh-chs": "孟加拉",
6734 "zh-cht": "孟加拉",
6735 "xloc": [
6732 - "default.handlebars->31->1283"
6736 + "default.handlebars->31->1285"
6737 ]
6738 },
6739 {
@@ -6761,7 +6765,7 @@
6765 "fr": "Chargeur de démarrage",
6766 "xloc": [
6767 "default-mobile.handlebars->11->457",
6764 - "default.handlebars->31->1137"
6768 + "default.handlebars->31->1139"
6769 ]
6770 },
6771 {
@@ -6781,7 +6785,7 @@
6785 "zh-chs": "波斯尼亚文",
6786 "zh-cht": "波斯尼亞文",
6787 "xloc": [
6784 - "default.handlebars->31->1284"
6788 + "default.handlebars->31->1286"
6789 ]
6790 },
6791 {
@@ -6801,7 +6805,7 @@
6805 "zh-chs": "布列塔尼",
6806 "zh-cht": "布列塔尼",
6807 "xloc": [
6804 - "default.handlebars->31->1285"
6808 + "default.handlebars->31->1287"
6809 ]
6810 },
6811 {
@@ -6821,7 +6825,7 @@
6825 "zh-chs": "广播",
6826 "zh-cht": "廣播",
6827 "xloc": [
6824 - "default.handlebars->31->2128",
6828 + "default.handlebars->31->2130",
6829 "default.handlebars->container->column_l->p4->3->1->0->3->1"
6830 ]
6831 },
@@ -6842,7 +6846,7 @@
6846 "zh-chs": "广播消息",
6847 "zh-cht": "廣播消息",
6848 "xloc": [
6845 - "default.handlebars->31->2049"
6849 + "default.handlebars->31->2051"
6850 ]
6851 },
6852 {
@@ -6862,7 +6866,7 @@
6866 "zh-chs": "向所有连接的用户广播消息。",
6867 "zh-cht": "向所有連接的用戶廣播消息。",
6868 "xloc": [
6865 - "default.handlebars->31->2044"
6869 + "default.handlebars->31->2046"
6870 ]
6871 },
6872 {
@@ -6892,7 +6896,7 @@
6896 "zh-chs": "保加利亚文",
6897 "zh-cht": "保加利亞文",
6898 "xloc": [
6895 - "default.handlebars->31->1281"
6899 + "default.handlebars->31->1283"
6900 ]
6901 },
6902 {
@@ -6912,7 +6916,7 @@
6916 "zh-chs": "缅甸文",
6917 "zh-cht": "緬甸文",
6918 "xloc": [
6915 - "default.handlebars->31->1286"
6919 + "default.handlebars->31->1288"
6920 ]
6921 },
6922 {
@@ -6953,7 +6957,7 @@
6957 "zh-chs": "CCM模式",
6958 "zh-cht": "CCM模式",
6959 "xloc": [
6956 - "default.handlebars->31->1630"
6960 + "default.handlebars->31->1632"
6961 ]
6962 },
6963 {
@@ -6995,7 +6999,7 @@
6999 "zh-chs": "CIRA服务器",
7000 "zh-cht": "CIRA伺服器",
7001 "xloc": [
6998 - "default.handlebars->31->2439"
7002 + "default.handlebars->31->2441"
7003 ]
7004 },
7005 {
@@ -7015,7 +7019,7 @@
7019 "zh-chs": "CIRA服务器命令",
7020 "zh-cht": "CIRA伺服器指令",
7021 "xloc": [
7018 - "default.handlebars->31->2440"
7022 + "default.handlebars->31->2442"
7023 ]
7024 },
7025 {
@@ -7035,7 +7039,7 @@
7039 "zh-chs": "CIRA设置",
7040 "zh-cht": "CIRA設置",
7041 "xloc": [
7038 - "default.handlebars->31->1638"
7042 + "default.handlebars->31->1640"
7043 ]
7044 },
7045 {
@@ -7056,7 +7060,7 @@
7060 "zh-cht": "CPU",
7061 "xloc": [
7062 "default-mobile.handlebars->11->499",
7059 - "default.handlebars->31->1189"
7063 + "default.handlebars->31->1191"
7064 ]
7065 },
7066 {
@@ -7076,7 +7080,7 @@
7080 "zh-chs": "CPU负载",
7081 "zh-cht": "CPU負載",
7082 "xloc": [
7079 - "default.handlebars->31->2396"
7083 + "default.handlebars->31->2398"
7084 ]
7085 },
7086 {
@@ -7096,7 +7100,7 @@
7100 "zh-chs": "最近15分钟的CPU负载",
7101 "zh-cht": "最近15分鐘的CPU負載",
7102 "xloc": [
7099 - "default.handlebars->31->2399"
7103 + "default.handlebars->31->2401"
7104 ]
7105 },
7106 {
@@ -7116,7 +7120,7 @@
7120 "zh-chs": "最近5分钟的CPU负载",
7121 "zh-cht": "最近5分鐘的CPU負載",
7122 "xloc": [
7119 - "default.handlebars->31->2398"
7123 + "default.handlebars->31->2400"
7124 ]
7125 },
7126 {
@@ -7136,7 +7140,7 @@
7140 "zh-chs": "最近一分钟的CPU负载",
7141 "zh-cht": "最近一分鐘的CPU負載",
7142 "xloc": [
7139 - "default.handlebars->31->2397"
7143 + "default.handlebars->31->2399"
7144 ]
7145 },
7146 {
@@ -7156,8 +7160,8 @@
7160 "zh-chs": "CR+LF",
7161 "zh-cht": "CR+LF",
7162 "xloc": [
7159 - "default.handlebars->31->1056",
7160 - "default.handlebars->31->1065",
7163 + "default.handlebars->31->1058",
7164 + "default.handlebars->31->1067",
7165 "default.handlebars->container->column_l->p12->termTable->1->1->6->1->1->terminalSettingsButtons",
7166 "sharing.handlebars->11->25",
7167 "sharing.handlebars->11->39",
@@ -7184,7 +7188,7 @@
7188 "zh-chs": "CSV",
7189 "zh-cht": "CSV",
7190 "xloc": [
7187 - "default.handlebars->31->1967"
7191 + "default.handlebars->31->1969"
7192 ]
7193 },
7194 {
@@ -7204,8 +7208,8 @@
7208 "zh-chs": "CSV格式",
7209 "zh-cht": "CSV格式",
7210 "xloc": [
7207 - "default.handlebars->31->1971",
7208 - "default.handlebars->31->2036",
7211 + "default.handlebars->31->1973",
7212 + "default.handlebars->31->2038",
7213 "default.handlebars->31->564"
7214 ]
7215 },
@@ -7243,7 +7247,7 @@
7247 "zh-chs": "呼叫错误",
7248 "zh-cht": "呼叫錯誤",
7249 "xloc": [
7246 - "default.handlebars->31->2456"
7250 + "default.handlebars->31->2458"
7251 ]
7252 },
7253 {
@@ -7266,8 +7270,8 @@
7270 "agent-translations.json",
7271 "default-mobile.handlebars->11->106",
7272 "default-mobile.handlebars->dialog->idx_dlgButtonBar",
7269 - "default.handlebars->31->1547",
7270 - "default.handlebars->31->2445",
7273 + "default.handlebars->31->1549",
7274 + "default.handlebars->31->2447",
7275 "default.handlebars->container->dialog->idx_dlgButtonBar",
7276 "desktop.handlebars->p11->dialog->idx_dlgButtonBar",
7277 "login-mobile.handlebars->dialog->idx_dlgButtonBar",
@@ -7275,6 +7279,7 @@
7279 "login2.handlebars->dialog->idx_dlgButtonBar",
7280 "player.handlebars->p11->dialog->idx_dlgButtonBar",
7281 "sharing.handlebars->dialog->idx_dlgButtonBar",
7282 + "ssh.handlebars->p11->dialog->idx_dlgButtonBar",
7283 "terminal.handlebars->p12->dialog->idx_dlgButtonBar",
7284 "xterm.handlebars->p11->dialog->idx_dlgButtonBar"
7285 ]
@@ -7299,9 +7304,9 @@
7304 "default-mobile.handlebars->11->504",
7305 "default-mobile.handlebars->11->509",
7306 "default-mobile.handlebars->11->511",
7302 - "default.handlebars->31->1194",
7303 - "default.handlebars->31->1199",
7304 - "default.handlebars->31->1201"
7307 + "default.handlebars->31->1196",
7308 + "default.handlebars->31->1201",
7309 + "default.handlebars->31->1203"
7310 ]
7311 },
7312 {
@@ -7322,7 +7327,7 @@
7327 "zh-cht": "容量/速度",
7328 "xloc": [
7329 "default-mobile.handlebars->11->502",
7325 - "default.handlebars->31->1192"
7330 + "default.handlebars->31->1194"
7331 ]
7332 },
7333 {
@@ -7342,7 +7347,7 @@
7347 "zh-chs": "加泰罗尼亚文",
7348 "zh-cht": "加泰羅尼亞文",
7349 "xloc": [
7345 - "default.handlebars->31->1287"
7350 + "default.handlebars->31->1289"
7351 ]
7352 },
7353 {
@@ -7390,7 +7395,7 @@
7395 "zh-chs": "查莫罗",
7396 "zh-cht": "查莫羅",
7397 "xloc": [
7393 - "default.handlebars->31->1288"
7398 + "default.handlebars->31->1290"
7399 ]
7400 },
7401 {
@@ -7432,7 +7437,7 @@
7437 "zh-chs": "更改{0}的电邮",
7438 "zh-cht": "更改{0}的電郵",
7439 "xloc": [
7435 - "default.handlebars->31->2246"
7440 + "default.handlebars->31->2248"
7441 ]
7442 },
7443 {
@@ -7453,8 +7458,8 @@
7458 "zh-cht": "更改群",
7459 "xloc": [
7460 "default.handlebars->31->732",
7456 - "default.handlebars->31->936",
7457 - "default.handlebars->31->937"
7461 + "default.handlebars->31->938",
7462 + "default.handlebars->31->939"
7463 ]
7464 },
7465 {
@@ -7475,8 +7480,8 @@
7480 "zh-cht": "更改密碼",
7481 "xloc": [
7482 "default-mobile.handlebars->11->114",
7478 - "default.handlebars->31->1503",
7479 - "default.handlebars->31->2231"
7483 + "default.handlebars->31->1505",
7484 + "default.handlebars->31->2233"
7485 ]
7486 },
7487 {
@@ -7496,7 +7501,7 @@
7501 "zh-chs": "更改{0}的密码",
7502 "zh-cht": "更改{0}的密碼",
7503 "xloc": [
7499 - "default.handlebars->31->2255"
7504 + "default.handlebars->31->2257"
7505 ]
7506 },
7507 {
@@ -7516,7 +7521,7 @@
7521 "zh-chs": "更改{0}的真实名称",
7522 "zh-cht": "更改{0}的真實名稱",
7523 "xloc": [
7519 - "default.handlebars->31->2241"
7524 + "default.handlebars->31->2243"
7525 ]
7526 },
7527 {
@@ -7607,7 +7612,7 @@
7612 "zh-chs": "更改该用户的密码",
7613 "zh-cht": "更改該用戶的密碼",
7614 "xloc": [
7610 - "default.handlebars->31->2230"
7615 + "default.handlebars->31->2232"
7616 ]
7617 },
7618 {
@@ -7647,7 +7652,7 @@
7652 "zh-chs": "在此处更改您的帐户电邮地址。",
7653 "zh-cht": "在此處更改你的帳戶電郵地址。",
7654 "xloc": [
7650 - "default.handlebars->31->1490"
7655 + "default.handlebars->31->1492"
7656 ]
7657 },
7658 {
@@ -7667,7 +7672,7 @@
7672 "zh-chs": "在下面的框中两次输入旧密码和新密码,以更改帐户密码。",
7673 "zh-cht": "在下面的框中兩次輸入舊密碼和新密碼,以更改帳戶密碼。",
7674 "xloc": [
7670 - "default.handlebars->31->1496"
7675 + "default.handlebars->31->1498"
7676 ]
7677 },
7678 {
@@ -7687,7 +7692,7 @@
7692 "zh-chs": "更改帐户凭据",
7693 "zh-cht": "帳戶憑證已更改",
7694 "xloc": [
7690 - "default.handlebars->31->1913"
7695 + "default.handlebars->31->1915"
7696 ]
7697 },
7698 {
@@ -7707,7 +7712,7 @@
7712 "zh-chs": "{1}组中的设备{0}已更改:{2}",
7713 "zh-cht": "{1}組中的設備{0}已更改:{2}",
7714 "xloc": [
7710 - "default.handlebars->31->1897"
7715 + "default.handlebars->31->1899"
7716 ]
7717 },
7718 {
@@ -7727,7 +7732,7 @@
7732 "zh-chs": "语言从{1}更改为{2}",
7733 "zh-cht": "語言從{1}更改為{2}",
7734 "xloc": [
7730 - "default.handlebars->31->1841"
7735 + "default.handlebars->31->1843"
7736 ]
7737 },
7738 {
@@ -7747,8 +7752,8 @@
7752 "zh-chs": "已更改{0}的用户设备权限",
7753 "zh-cht": "已更改{0}的用戶設備權限",
7754 "xloc": [
7750 - "default.handlebars->31->1899",
7751 - "default.handlebars->31->1920"
7755 + "default.handlebars->31->1901",
7756 + "default.handlebars->31->1922"
7757 ]
7758 },
7759 {
@@ -7768,7 +7773,7 @@
7773 "zh-chs": "更改语言将需要刷新页面。",
7774 "zh-cht": "更改語言將需要刷新頁面。",
7775 "xloc": [
7771 - "default.handlebars->31->1455"
7776 + "default.handlebars->31->1457"
7777 ]
7778 },
7779 {
@@ -7788,12 +7793,12 @@
7793 "zh-chs": "聊天",
7794 "zh-cht": "聊天",
7795 "xloc": [
7791 - "default.handlebars->31->1988",
7792 - "default.handlebars->31->2226",
7793 - "default.handlebars->31->2227",
7796 + "default.handlebars->31->1990",
7797 + "default.handlebars->31->2228",
7798 + "default.handlebars->31->2229",
7799 "default.handlebars->31->727",
7795 - "default.handlebars->31->804",
7796 - "default.handlebars->31->826"
7800 + "default.handlebars->31->806",
7801 + "default.handlebars->31->828"
7802 ]
7803 },
7804 {
@@ -7815,8 +7820,8 @@
7820 "xloc": [
7821 "default-mobile.handlebars->11->571",
7822 "default-mobile.handlebars->11->591",
7818 - "default.handlebars->31->1700",
7819 - "default.handlebars->31->1736"
7823 + "default.handlebars->31->1702",
7824 + "default.handlebars->31->1738"
7825 ]
7826 },
7827 {
@@ -7826,7 +7831,7 @@
7831 "de": "Chat Anfrage, Drücke hier zum annehmen.",
7832 "xloc": [
7833 "default-mobile.handlebars->11->623",
7829 - "default.handlebars->31->2351"
7834 + "default.handlebars->31->2353"
7835 ]
7836 },
7837 {
@@ -7866,7 +7871,7 @@
7871 "zh-chs": "车臣",
7872 "zh-cht": "車臣",
7873 "xloc": [
7869 - "default.handlebars->31->1289"
7874 + "default.handlebars->31->1291"
7875 ]
7876 },
7877 {
@@ -7966,8 +7971,8 @@
7971 "zh-chs": "检查...",
7972 "zh-cht": "檢查...",
7973 "xloc": [
7969 - "default.handlebars->31->1255",
7970 - "default.handlebars->31->2450"
7974 + "default.handlebars->31->1257",
7975 + "default.handlebars->31->2452"
7976 ]
7977 },
7978 {
@@ -7987,7 +7992,7 @@
7992 "zh-chs": "中文",
7993 "zh-cht": "中文",
7994 "xloc": [
7990 - "default.handlebars->31->1290"
7995 + "default.handlebars->31->1292"
7996 ]
7997 },
7998 {
@@ -8007,7 +8012,7 @@
8012 "zh-chs": "中文(香港)",
8013 "zh-cht": "中文(香港)",
8014 "xloc": [
8010 - "default.handlebars->31->1291"
8015 + "default.handlebars->31->1293"
8016 ]
8017 },
8018 {
@@ -8027,7 +8032,7 @@
8032 "zh-chs": "中文(中国)",
8033 "zh-cht": "中文(中國)",
8034 "xloc": [
8030 - "default.handlebars->31->1292"
8035 + "default.handlebars->31->1294"
8036 ]
8037 },
8038 {
@@ -8047,7 +8052,7 @@
8052 "zh-chs": "简体中文",
8053 "zh-cht": "簡體中文",
8054 "xloc": [
8050 - "default.handlebars->31->1452"
8055 + "default.handlebars->31->1454"
8056 ]
8057 },
8058 {
@@ -8067,7 +8072,7 @@
8072 "zh-chs": "中文(新加坡)",
8073 "zh-cht": "中文(新加坡)",
8074 "xloc": [
8070 - "default.handlebars->31->1293"
8075 + "default.handlebars->31->1295"
8076 ]
8077 },
8078 {
@@ -8087,7 +8092,7 @@
8092 "zh-chs": "中文(台湾)",
8093 "zh-cht": "中文(台灣)",
8094 "xloc": [
8090 - "default.handlebars->31->1294"
8095 + "default.handlebars->31->1296"
8096 ]
8097 },
8098 {
@@ -8107,7 +8112,7 @@
8112 "zh-chs": "繁体中文",
8113 "zh-cht": "繁體中文",
8114 "xloc": [
8110 - "default.handlebars->31->1453"
8115 + "default.handlebars->31->1455"
8116 ]
8117 },
8118 {
@@ -8148,7 +8153,7 @@
8153 "zh-chs": "楚瓦什",
8154 "zh-cht": "楚瓦什",
8155 "xloc": [
8151 - "default.handlebars->31->1295"
8156 + "default.handlebars->31->1297"
8157 ]
8158 },
8159 {
@@ -8192,11 +8197,11 @@
8197 "default-mobile.handlebars->11->417",
8198 "default-mobile.handlebars->11->71",
8199 "default-mobile.handlebars->container->page_content->column_l->p10->p10console->consoleTable->1->4->1->1->1->0->5",
8195 - "default.handlebars->31->1101",
8200 "default.handlebars->31->1103",
8201 "default.handlebars->31->1105",
8202 "default.handlebars->31->1107",
8199 - "default.handlebars->31->1835",
8203 + "default.handlebars->31->1109",
8204 + "default.handlebars->31->1837",
8205 "default.handlebars->container->column_l->p15->consoleTable->1->6->1->1->1->0->7",
8206 "default.handlebars->container->column_l->p41->3->1",
8207 "messenger.handlebars->xbottom->1->1->0->5",
@@ -8263,7 +8268,7 @@
8268 "zh-cht": "全部清除",
8269 "xloc": [
8270 "default-mobile.handlebars->11->606",
8266 - "default.handlebars->31->2334"
8271 + "default.handlebars->31->2336"
8272 ]
8273 },
8274 {
@@ -8305,7 +8310,7 @@
8310 "zh-cht": "清除核心",
8311 "xloc": [
8312 "default-mobile.handlebars->11->525",
8308 - "default.handlebars->31->1216"
8313 + "default.handlebars->31->1218"
8314 ]
8315 },
8316 {
@@ -8346,7 +8351,7 @@
8351 "zh-cht": "清除此通知",
8352 "xloc": [
8353 "default-mobile.handlebars->11->605",
8349 - "default.handlebars->31->2333"
8354 + "default.handlebars->31->2335"
8355 ]
8356 },
8357 {
@@ -8406,8 +8411,8 @@
8411 "zh-chs": "单击此处编辑设备组名称",
8412 "zh-cht": "單擊此處編輯裝置群名稱",
8413 "xloc": [
8409 - "default.handlebars->31->1558",
8410 - "default.handlebars->31->1780"
8414 + "default.handlebars->31->1560",
8415 + "default.handlebars->31->1782"
8416 ]
8417 },
8418 {
@@ -8447,7 +8452,7 @@
8452 "zh-chs": "单击此处编辑用户组名称",
8453 "zh-cht": "單擊此處編輯用戶群名稱",
8454 "xloc": [
8450 - "default.handlebars->31->2105"
8455 + "default.handlebars->31->2107"
8456 ]
8457 },
8458 {
@@ -8519,7 +8524,7 @@
8524 "zh-cht": "單擊確定將驗證電郵發送到:",
8525 "xloc": [
8526 "default-mobile.handlebars->11->99",
8522 - "default.handlebars->31->1487"
8527 + "default.handlebars->31->1489"
8528 ]
8529 },
8530 {
@@ -8581,7 +8586,7 @@
8586 "zh-cht": "客戶端控制模式(CCM)",
8587 "xloc": [
8588 "default-mobile.handlebars->11->480",
8584 - "default.handlebars->31->1170"
8589 + "default.handlebars->31->1172"
8590 ]
8591 },
8592 {
@@ -8601,7 +8606,7 @@
8606 "zh-chs": "客户编号",
8607 "zh-cht": "客戶編號",
8608 "xloc": [
8604 - "default.handlebars->31->1540"
8609 + "default.handlebars->31->1542"
8610 ]
8611 },
8612 {
@@ -8621,7 +8626,7 @@
8626 "zh-chs": "客户端启动的远程访问",
8627 "zh-cht": "客戶端啟動的遠程訪問",
8628 "xloc": [
8624 - "default.handlebars->31->1637"
8629 + "default.handlebars->31->1639"
8630 ]
8631 },
8632 {
@@ -8641,7 +8646,7 @@
8646 "zh-chs": "客户机密",
8647 "zh-cht": "客戶機密",
8648 "xloc": [
8644 - "default.handlebars->31->1541"
8649 + "default.handlebars->31->1543"
8650 ]
8651 },
8652 {
@@ -8684,11 +8689,11 @@
8689 "zh-cht": "關",
8690 "xloc": [
8691 "default-mobile.handlebars->11->69",
8687 - "default.handlebars->31->1045",
8688 - "default.handlebars->31->1078",
8692 + "default.handlebars->31->1047",
8693 + "default.handlebars->31->1080",
8694 "default.handlebars->31->155",
8695 "default.handlebars->31->163",
8691 - "default.handlebars->31->2444",
8696 + "default.handlebars->31->2446",
8697 "sharing.handlebars->11->52"
8698 ]
8699 },
@@ -8709,7 +8714,7 @@
8714 "zh-chs": "封闭式桌面多路复用会话,{0}秒",
8715 "zh-cht": "封閉式桌面多路復用會話,{0}秒",
8716 "xloc": [
8712 - "default.handlebars->31->1846"
8717 + "default.handlebars->31->1848"
8718 ]
8719 },
8720 {
@@ -8832,9 +8837,9 @@
8837 "zh-cht": "指令",
8838 "xloc": [
8839 "default-mobile.handlebars->11->593",
8835 - "default.handlebars->31->1738",
8836 - "default.handlebars->31->806",
8837 - "default.handlebars->31->828"
8840 + "default.handlebars->31->1740",
8841 + "default.handlebars->31->808",
8842 + "default.handlebars->31->830"
8843 ]
8844 },
8845 {
@@ -8854,8 +8859,8 @@
8859 "zh-chs": "通用设备组",
8860 "zh-cht": "通用裝置群",
8861 "xloc": [
8857 - "default.handlebars->31->2136",
8858 - "default.handlebars->31->2260"
8862 + "default.handlebars->31->2138",
8863 + "default.handlebars->31->2262"
8864 ]
8865 },
8866 {
@@ -8875,8 +8880,8 @@
8880 "zh-chs": "通用设备",
8881 "zh-cht": "通用裝置",
8882 "xloc": [
8878 - "default.handlebars->31->2142",
8879 - "default.handlebars->31->2272"
8883 + "default.handlebars->31->2144",
8884 + "default.handlebars->31->2274"
8885 ]
8886 },
8887 {
@@ -8886,7 +8891,7 @@
8891 "de": "Kompilierungszeit",
8892 "xloc": [
8893 "default-mobile.handlebars->11->453",
8889 - "default.handlebars->31->1133"
8894 + "default.handlebars->31->1135"
8895 ]
8896 },
8897 {
@@ -8906,7 +8911,7 @@
8911 "zh-chs": "压缩档案...",
8912 "zh-cht": "壓縮檔案...",
8913 "xloc": [
8909 - "default.handlebars->31->1073",
8914 + "default.handlebars->31->1075",
8915 "sharing.handlebars->11->47"
8916 ]
8917 },
@@ -8929,14 +8934,14 @@
8934 "xloc": [
8935 "default-mobile.handlebars->11->341",
8936 "default-mobile.handlebars->11->547",
8932 - "default.handlebars->31->1648",
8933 - "default.handlebars->31->2016",
8934 - "default.handlebars->31->2095",
8935 - "default.handlebars->31->2156",
8936 - "default.handlebars->31->2258",
8937 + "default.handlebars->31->1650",
8938 + "default.handlebars->31->2018",
8939 + "default.handlebars->31->2097",
8940 + "default.handlebars->31->2158",
8941 + "default.handlebars->31->2260",
8942 "default.handlebars->31->528",
8938 - "default.handlebars->31->931",
8939 - "default.handlebars->31->940"
8943 + "default.handlebars->31->933",
8944 + "default.handlebars->31->942"
8945 ]
8946 },
8947 {
@@ -8957,7 +8962,7 @@
8962 "zh-cht": "確認將1個副本複製到此位置?",
8963 "xloc": [
8964 "default-mobile.handlebars->11->406",
8960 - "default.handlebars->31->1096",
8965 + "default.handlebars->31->1098",
8966 "sharing.handlebars->11->70"
8967 ]
8968 },
@@ -8978,7 +8983,7 @@
8983 "zh-chs": "确认{0}个条目的复制到此位置?",
8984 "zh-cht": "確認{0}個條目的複製到此位置?",
8985 "xloc": [
8981 - "default.handlebars->31->1095",
8986 + "default.handlebars->31->1097",
8987 "sharing.handlebars->11->69"
8988 ]
8989 },
@@ -9019,7 +9024,7 @@
9024 "zh-chs": "确认删除选定的帐户?",
9025 "zh-cht": "確認刪除所選帳戶?",
9026 "xloc": [
9022 - "default.handlebars->31->2015"
9027 + "default.handlebars->31->2017"
9028 ]
9029 },
9030 {
@@ -9059,7 +9064,7 @@
9064 "zh-chs": "确认删除选定的用户组?",
9065 "zh-cht": "確認刪除所選用戶群?",
9066 "xloc": [
9062 - "default.handlebars->31->2094"
9067 + "default.handlebars->31->2096"
9068 ]
9069 },
9070 {
@@ -9079,7 +9084,7 @@
9084 "zh-chs": "确认删除用户{0}?",
9085 "zh-cht": "確認刪除用戶{0}?",
9086 "xloc": [
9082 - "default.handlebars->31->2257"
9087 + "default.handlebars->31->2259"
9088 ]
9089 },
9090 {
@@ -9099,7 +9104,7 @@
9104 "zh-chs": "确认删除用户“ {0} ”的成员身份?",
9105 "zh-cht": "確認刪除用戶“ {0} ”的成員身份?",
9106 "xloc": [
9102 - "default.handlebars->31->2159"
9107 + "default.handlebars->31->2161"
9108 ]
9109 },
9110 {
@@ -9119,7 +9124,7 @@
9124 "zh-chs": "确认删除用户组“ {0} ”的成员身份?",
9125 "zh-cht": "確認刪除用戶群“ {0} ”的成員身份?",
9126 "xloc": [
9122 - "default.handlebars->31->2289"
9127 + "default.handlebars->31->2291"
9128 ]
9129 },
9130 {
@@ -9140,7 +9145,7 @@
9145 "zh-cht": "確認將1個條目移動到此位置?",
9146 "xloc": [
9147 "default-mobile.handlebars->11->408",
9143 - "default.handlebars->31->1098",
9148 + "default.handlebars->31->1100",
9149 "sharing.handlebars->11->72"
9150 ]
9151 },
@@ -9161,7 +9166,7 @@
9166 "zh-chs": "确认将{0}个条目移到此位置?",
9167 "zh-cht": "確認將{0}個條目移到該位置?",
9168 "xloc": [
9164 - "default.handlebars->31->1097",
9169 + "default.handlebars->31->1099",
9170 "sharing.handlebars->11->71"
9171 ]
9172 },
@@ -9202,7 +9207,7 @@
9207 "zh-chs": "确认覆盖?",
9208 "zh-cht": "確認覆蓋?",
9209 "xloc": [
9205 - "default.handlebars->31->1829"
9210 + "default.handlebars->31->1831"
9211 ]
9212 },
9213 {
@@ -9222,8 +9227,8 @@
9227 "zh-chs": "确认删除设备“ {0} ”的访问权限?",
9228 "zh-cht": "確認刪除裝置“ {0} ”的訪問權限?",
9229 "xloc": [
9225 - "default.handlebars->31->2149",
9226 - "default.handlebars->31->2280"
9230 + "default.handlebars->31->2151",
9231 + "default.handlebars->31->2282"
9232 ]
9233 },
9234 {
@@ -9243,8 +9248,8 @@
9248 "zh-chs": "确认删除设备组“ {0} ”的访问权限?",
9249 "zh-cht": "確認刪除裝置群“ {0} ”的訪問權限?",
9250 "xloc": [
9246 - "default.handlebars->31->2151",
9247 - "default.handlebars->31->2293"
9251 + "default.handlebars->31->2153",
9252 + "default.handlebars->31->2295"
9253 ]
9254 },
9255 {
@@ -9264,7 +9269,7 @@
9269 "zh-chs": "确认删除用户“ {0} ”的访问权限?",
9270 "zh-cht": "確認刪除用戶“ {0} ”的訪問權限?",
9271 "xloc": [
9267 - "default.handlebars->31->2282"
9272 + "default.handlebars->31->2284"
9273 ]
9274 },
9275 {
@@ -9284,7 +9289,7 @@
9289 "zh-chs": "确认删除用户组“ {0} ”的访问权限?",
9290 "zh-cht": "確認刪除用戶群“ {0} ”的訪問權限?",
9291 "xloc": [
9287 - "default.handlebars->31->2285"
9292 + "default.handlebars->31->2287"
9293 ]
9294 },
9295 {
@@ -9304,8 +9309,8 @@
9309 "zh-chs": "确认删除访问权限?",
9310 "zh-cht": "確認刪除訪問權限?",
9311 "xloc": [
9307 - "default.handlebars->31->2283",
9308 - "default.handlebars->31->2286"
9312 + "default.handlebars->31->2285",
9313 + "default.handlebars->31->2288"
9314 ]
9315 },
9316 {
@@ -9326,7 +9331,7 @@
9331 "zh-cht": "確認刪除身份驗證軟體兩步登入?",
9332 "xloc": [
9333 "default-mobile.handlebars->11->98",
9329 - "default.handlebars->31->1238"
9334 + "default.handlebars->31->1240"
9335 ]
9336 },
9337 {
@@ -9363,7 +9368,7 @@
9368 "zh-chs": "确认删除设备共享“{0}”?",
9369 "zh-cht": "確認刪除設備共享“{0}”?",
9370 "xloc": [
9366 - "default.handlebars->31->2278"
9371 + "default.handlebars->31->2280"
9372 ]
9373 },
9374 {
@@ -9404,7 +9409,7 @@
9409 "en": "Confirm removal of push authentication device?",
9410 "nl": "Verwijderen van push-authenticatieapparaat bevestigen?",
9411 "xloc": [
9407 - "default.handlebars->31->1240"
9412 + "default.handlebars->31->1242"
9413 ]
9414 },
9415 {
@@ -9424,7 +9429,7 @@
9429 "zh-chs": "确认删除用户“ {0} ”的权限?",
9430 "zh-cht": "確認刪除用戶“ {0} ”的權限?",
9431 "xloc": [
9427 - "default.handlebars->31->1747"
9432 + "default.handlebars->31->1749"
9433 ]
9434 },
9435 {
@@ -9444,13 +9449,13 @@
9449 "zh-chs": "确认删除用户组“ {0} ”的权限?",
9450 "zh-cht": "確認刪除用戶群“ {0} ”的權限?",
9451 "xloc": [
9447 - "default.handlebars->31->1749"
9452 + "default.handlebars->31->1751"
9453 ]
9454 },
9455 {
9456 "en": "Confirm removal of this login token?",
9457 "xloc": [
9453 - "default.handlebars->31->1533"
9458 + "default.handlebars->31->1535"
9459 ]
9460 },
9461 {
@@ -9508,7 +9513,7 @@
9513 "zh-cht": "將{1}入口{2}中的{0}限製到此位置?",
9514 "xloc": [
9515 "default-mobile.handlebars->11->151",
9511 - "default.handlebars->31->1830"
9516 + "default.handlebars->31->1832"
9517 ]
9518 },
9519 {
@@ -9533,8 +9538,8 @@
9538 "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3",
9539 "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->0->1->3",
9540 "default-mobile.handlebars->container->page_content->column_l->p10->p10terminal->termTable->termarea1->1->3->connectbutton2span",
9536 - "default.handlebars->31->1068",
9537 - "default.handlebars->31->1587",
9541 + "default.handlebars->31->1070",
9542 + "default.handlebars->31->1589",
9543 "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->connectbutton1span",
9544 "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->connectbutton2span",
9545 "default.handlebars->container->column_l->p13->p13toolbar->1->0->1->3",
@@ -9544,6 +9549,7 @@
9549 "sharing.handlebars->p11->deskarea0->deskarea1->3->connectbutton1span",
9550 "sharing.handlebars->p12->5->3->connectbutton2span",
9551 "sharing.handlebars->p13->p13toolbar->1->3",
9552 + "ssh.handlebars->p11->deskarea0->deskarea1->3",
9553 "terminal.handlebars->p12->5->3->connectbutton2span",
9554 "xterm.handlebars->p11->deskarea0->deskarea1->3"
9555 ]
@@ -9586,7 +9592,7 @@
9592 "zh-chs": "连接到服务器",
9593 "zh-cht": "連接到伺服器",
9594 "xloc": [
9589 - "default.handlebars->31->1641"
9595 + "default.handlebars->31->1643"
9596 ]
9597 },
9598 {
@@ -9689,6 +9695,7 @@
9695 "default.handlebars->31->11",
9696 "desktop.handlebars->3->4",
9697 "sharing.handlebars->11->4",
9698 + "ssh.handlebars->9->4",
9699 "terminal.handlebars->3->4",
9700 "xterm.handlebars->9->4"
9701 ]
@@ -9710,7 +9717,7 @@
9717 "zh-chs": "已连接的英特尔&reg;AMT",
9718 "zh-cht": "已連接的Intel&reg; AMT",
9719 "xloc": [
9713 - "default.handlebars->31->2387"
9720 + "default.handlebars->31->2389"
9721 ]
9722 },
9723 {
@@ -9730,7 +9737,7 @@
9737 "zh-chs": "已连接的用户",
9738 "zh-cht": "已连接的用户",
9739 "xloc": [
9733 - "default.handlebars->31->2392"
9740 + "default.handlebars->31->2394"
9741 ]
9742 },
9743 {
@@ -9751,7 +9758,7 @@
9758 "zh-cht": "現在已連接",
9759 "xloc": [
9760 "default-mobile.handlebars->11->448",
9754 - "default.handlebars->31->1128"
9761 + "default.handlebars->31->1130"
9762 ]
9763 },
9764 {
@@ -9794,7 +9801,7 @@
9801 "default-mobile.handlebars->11->2",
9802 "default-mobile.handlebars->11->424",
9803 "default-mobile.handlebars->11->48",
9797 - "default.handlebars->31->1119",
9804 + "default.handlebars->31->1121",
9805 "default.handlebars->31->280",
9806 "default.handlebars->31->283",
9807 "default.handlebars->31->330",
@@ -9802,6 +9809,7 @@
9809 "desktop.handlebars->3->2",
9810 "sharing.handlebars->11->2",
9811 "sharing.handlebars->11->93",
9812 + "ssh.handlebars->9->2",
9813 "terminal.handlebars->3->2",
9814 "xterm.handlebars->9->2"
9815 ]
@@ -9823,7 +9831,7 @@
9831 "zh-chs": "连接数量",
9832 "zh-cht": "連接數量",
9833 "xloc": [
9826 - "default.handlebars->31->2406"
9834 + "default.handlebars->31->2408"
9835 ]
9836 },
9837 {
@@ -9849,7 +9857,7 @@
9857 "zh-chs": "连接转发器",
9858 "zh-cht": "連接轉發器",
9859 "xloc": [
9852 - "default.handlebars->31->2438"
9860 + "default.handlebars->31->2440"
9861 ]
9862 },
9863 {
@@ -9910,7 +9918,7 @@
9918 "zh-cht": "連接性",
9919 "xloc": [
9920 "default-mobile.handlebars->11->287",
9913 - "default.handlebars->31->1787",
9921 + "default.handlebars->31->1789",
9922 "default.handlebars->31->271",
9923 "default.handlebars->31->715",
9924 "default.handlebars->container->column_l->p21->p21main->1->1->meshConnChartDiv->1"
@@ -9934,8 +9942,8 @@
9942 "zh-cht": "控制台",
9943 "xloc": [
9944 "default-mobile.handlebars->11->303",
9937 - "default.handlebars->31->799",
9938 - "default.handlebars->31->821",
9945 + "default.handlebars->31->801",
9946 + "default.handlebars->31->823",
9947 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevConsole",
9948 "default.handlebars->container->topbar->1->1->ServerSubMenuSpan->ServerSubMenu->1->0->ServerConsole",
9949 "default.handlebars->contextMenu->cxconsole"
@@ -9978,8 +9986,8 @@
9986 "zh-chs": "控制",
9987 "zh-cht": "控制",
9988 "xloc": [
9981 - "default.handlebars->31->798",
9982 - "default.handlebars->31->820",
9989 + "default.handlebars->31->800",
9990 + "default.handlebars->31->822",
9991 "messenger.handlebars->remoteImage->3->2"
9992 ]
9993 },
@@ -10000,7 +10008,7 @@
10008 "zh-chs": "Cookie编码器",
10009 "zh-cht": "Cookie編碼器",
10010 "xloc": [
10003 - "default.handlebars->31->2422"
10011 + "default.handlebars->31->2424"
10012 ]
10013 },
10014 {
@@ -10158,8 +10166,8 @@
10166 "zh-chs": "复制连结到剪贴板",
10167 "zh-cht": "複製連結到剪貼板",
10168 "xloc": [
10161 - "default.handlebars->31->1798",
10162 - "default.handlebars->31->1817",
10169 + "default.handlebars->31->1800",
10170 + "default.handlebars->31->1819",
10171 "default.handlebars->31->223",
10172 "default.handlebars->31->245",
10173 "default.handlebars->31->247",
@@ -10266,7 +10274,7 @@
10274 "zh-chs": "复制:“{0}”到“{1}”",
10275 "zh-cht": "複製:“{0}”到“{1}”",
10276 "xloc": [
10269 - "default.handlebars->31->1889"
10277 + "default.handlebars->31->1891"
10278 ]
10279 },
10280 {
@@ -10412,7 +10420,7 @@
10420 "zh-chs": "核心服务器",
10421 "zh-cht": "核心伺服器",
10422 "xloc": [
10415 - "default.handlebars->31->2421"
10423 + "default.handlebars->31->2423"
10424 ]
10425 },
10426 {
@@ -10432,7 +10440,7 @@
10440 "zh-chs": "科西嘉文",
10441 "zh-cht": "科西嘉文",
10442 "xloc": [
10435 - "default.handlebars->31->1296"
10443 + "default.handlebars->31->1298"
10444 ]
10445 },
10446 {
@@ -10452,7 +10460,7 @@
10460 "zh-chs": "创建帐号",
10461 "zh-cht": "創建帳號",
10462 "xloc": [
10455 - "default.handlebars->31->2063",
10463 + "default.handlebars->31->2065",
10464 "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->createpanel->1->1->9->1->12->1->1",
10465 "login.handlebars->container->column_l->centralTable->1->0->logincell->createpanel->1->9->1->12->1->1",
10466 "login2.handlebars->centralTable->1->0->logincell->createpanel->1->9->1->12->1->1"
@@ -10481,7 +10489,7 @@
10489 {
10490 "en": "Create Login Token",
10491 "xloc": [
10484 - "default.handlebars->31->1480",
10492 + "default.handlebars->31->1482",
10493 "default.handlebars->31->248"
10494 ]
10495 },
@@ -10502,7 +10510,7 @@
10510 "zh-chs": "创建用户组",
10511 "zh-cht": "創建用戶群",
10512 "xloc": [
10505 - "default.handlebars->31->2102"
10513 + "default.handlebars->31->2104"
10514 ]
10515 },
10516 {
@@ -10542,7 +10550,7 @@
10550 "zh-chs": "使用以下选项创建一个新的设备组。",
10551 "zh-cht": "使用以下選項創建一個新的裝置群。",
10552 "xloc": [
10545 - "default.handlebars->31->1510"
10553 + "default.handlebars->31->1512"
10554 ]
10555 },
10556 {
@@ -10568,7 +10576,7 @@
10576 {
10577 "en": "Create a temporary username and password that can be used as alternative login to your account. This is useful for allowing tools or other services to access your account.",
10578 "xloc": [
10571 - "default.handlebars->31->1461"
10579 + "default.handlebars->31->1463"
10580 ]
10581 },
10582 {
@@ -10608,7 +10616,7 @@
10616 "zh-chs": "创建文件夹:“{0}”",
10617 "zh-cht": "創建文件夾:“{0}”",
10618 "xloc": [
10611 - "default.handlebars->31->1882"
10619 + "default.handlebars->31->1884"
10620 ]
10621 },
10622 {
@@ -10634,7 +10642,7 @@
10642 "zh-chs": "通过导入以下格式的JSON档案一次创建多个帐户:",
10643 "zh-cht": "通過導入以下格式的JSON檔案一次創建多個帳戶:",
10644 "xloc": [
10637 - "default.handlebars->31->2027"
10645 + "default.handlebars->31->2029"
10646 ]
10647 },
10648 {
@@ -10676,7 +10684,7 @@
10684 "zh-chs": "创建的设备组:{0}",
10685 "zh-cht": "創建的設備組:{0}",
10686 "xloc": [
10679 - "default.handlebars->31->1893"
10687 + "default.handlebars->31->1895"
10688 ]
10689 },
10690 {
@@ -10696,7 +10704,7 @@
10704 "zh-chs": "创建一个链接,该链接允许没有帐户的访客在有限的时间内远程控制此设备。",
10705 "zh-cht": "創建一個鏈接,該鏈接允許沒有帳戶的訪客在有限的時間內遠程控制此設備。",
10706 "xloc": [
10699 - "default.handlebars->31->844"
10707 + "default.handlebars->31->846"
10708 ]
10709 },
10710 {
@@ -10750,7 +10758,7 @@
10758 "zh-chs": "创建",
10759 "zh-cht": "創建",
10760 "xloc": [
10753 - "default.handlebars->31->2188"
10761 + "default.handlebars->31->2190"
10762 ]
10763 },
10764 {
@@ -10770,7 +10778,7 @@
10778 "zh-chs": "创建时间",
10779 "zh-cht": "創作時間",
10780 "xloc": [
10773 - "default.handlebars->31->1569"
10781 + "default.handlebars->31->1571"
10782 ]
10783 },
10784 {
@@ -10812,8 +10820,8 @@
10820 "zh-chs": "创建者",
10821 "zh-cht": "創作者",
10822 "xloc": [
10815 - "default.handlebars->31->1567",
10816 - "default.handlebars->31->1568"
10823 + "default.handlebars->31->1569",
10824 + "default.handlebars->31->1570"
10825 ]
10826 },
10827 {
@@ -10833,7 +10841,7 @@
10841 "zh-chs": "证书",
10842 "zh-cht": "證書",
10843 "xloc": [
10836 - "default.handlebars->31->1538"
10844 + "default.handlebars->31->1540"
10845 ]
10846 },
10847 {
@@ -10853,7 +10861,7 @@
10861 "zh-chs": "克里语",
10862 "zh-cht": "克里語",
10863 "xloc": [
10856 - "default.handlebars->31->1297"
10864 + "default.handlebars->31->1299"
10865 ]
10866 },
10867 {
@@ -10873,7 +10881,7 @@
10881 "zh-chs": "克罗地亚文",
10882 "zh-cht": "克羅地亞文",
10883 "xloc": [
10876 - "default.handlebars->31->1298"
10884 + "default.handlebars->31->1300"
10885 ]
10886 },
10887 {
@@ -10939,8 +10947,8 @@
10947 "xloc": [
10948 "default-mobile.handlebars->11->375",
10949 "default-mobile.handlebars->11->379",
10942 - "default.handlebars->31->1021",
10943 - "default.handlebars->31->1025",
10950 + "default.handlebars->31->1023",
10951 + "default.handlebars->31->1027",
10952 "default.handlebars->31->57",
10953 "sharing.handlebars->11->24",
10954 "terminal.handlebars->3->6"
@@ -11061,7 +11069,7 @@
11069 "de": "Aktuelles Password nicht in korrekt.",
11070 "xloc": [
11071 "default-mobile.handlebars->11->633",
11064 - "default.handlebars->31->2361"
11072 + "default.handlebars->31->2363"
11073 ]
11074 },
11075 {
@@ -11123,7 +11131,7 @@
11131 "zh-chs": "捷克文",
11132 "zh-cht": "捷克文",
11133 "xloc": [
11126 - "default.handlebars->31->1299"
11134 + "default.handlebars->31->1301"
11135 ]
11136 },
11137 {
@@ -11163,7 +11171,7 @@
11171 "zh-chs": "丹麦文",
11172 "zh-cht": "丹麥文",
11173 "xloc": [
11166 - "default.handlebars->31->1300"
11174 + "default.handlebars->31->1302"
11175 ]
11176 },
11177 {
@@ -11193,7 +11201,7 @@
11201 "zh-chs": "数据通道",
11202 "zh-cht": "數據通道",
11203 "xloc": [
11196 - "default.handlebars->31->988",
11204 + "default.handlebars->31->990",
11205 "desktop.handlebars->3->11",
11206 "sharing.handlebars->11->11"
11207 ]
@@ -11215,7 +11223,7 @@
11223 "zh-chs": "日期和时间",
11224 "zh-cht": "日期和時間",
11225 "xloc": [
11218 - "default.handlebars->31->1458"
11226 + "default.handlebars->31->1460"
11227 ]
11228 },
11229 {
@@ -11236,7 +11244,7 @@
11244 "zh-cht": "天",
11245 "xloc": [
11246 "default-mobile.handlebars->11->331",
11239 - "default.handlebars->31->915"
11247 + "default.handlebars->31->917"
11248 ]
11249 },
11250 {
@@ -11256,7 +11264,7 @@
11264 "zh-chs": "停用",
11265 "zh-cht": "停用",
11266 "xloc": [
11259 - "default.handlebars->31->1620"
11267 + "default.handlebars->31->1622"
11268 ]
11269 },
11270 {
@@ -11276,7 +11284,7 @@
11284 "zh-chs": "如果设置停用CCM",
11285 "zh-cht": "如果設置停用CCM",
11286 "xloc": [
11279 - "default.handlebars->31->1632"
11287 + "default.handlebars->31->1634"
11288 ]
11289 },
11290 {
@@ -11334,10 +11342,10 @@
11342 "zh-chs": "默认",
11343 "zh-cht": "默認",
11344 "xloc": [
11337 - "default.handlebars->31->2050",
11338 - "default.handlebars->31->2098",
11339 - "default.handlebars->31->2109",
11340 - "default.handlebars->31->2177"
11345 + "default.handlebars->31->2052",
11346 + "default.handlebars->31->2100",
11347 + "default.handlebars->31->2111",
11348 + "default.handlebars->31->2179"
11349 ]
11350 },
11351 {
@@ -11347,7 +11355,7 @@
11355 "de": "Löschen",
11356 "xloc": [
11357 "default-mobile.handlebars->11->363",
11350 - "default.handlebars->31->1009"
11358 + "default.handlebars->31->1011"
11359 ]
11360 },
11361 {
@@ -11372,8 +11380,8 @@
11380 "default-mobile.handlebars->container->page_content->column_l->p10->p10files->p13toolbar->1->2->1->1",
11381 "default-mobile.handlebars->container->page_content->column_l->p5->p5myfiles->p5toolbar->1->0->1->1",
11382 "default-mobile.handlebars->dialog->idx_dlgButtonBar->5",
11375 - "default.handlebars->31->1087",
11376 - "default.handlebars->31->1824",
11383 + "default.handlebars->31->1089",
11384 + "default.handlebars->31->1826",
11385 "default.handlebars->31->604",
11386 "default.handlebars->container->column_l->p13->p13toolbar->1->2->1->3",
11387 "default.handlebars->container->column_l->p5->p5toolbar->1->0->p5filehead->3",
@@ -11384,6 +11392,7 @@
11392 "sharing.handlebars->11->61",
11393 "sharing.handlebars->dialog->idx_dlgButtonBar->5",
11394 "sharing.handlebars->p13->p13toolbar->fileArea2->3",
11395 + "ssh.handlebars->p11->dialog->idx_dlgButtonBar->5",
11396 "terminal.handlebars->p12->dialog->idx_dlgButtonBar->5",
11397 "xterm.handlebars->p11->dialog->idx_dlgButtonBar->5"
11398 ]
@@ -11406,7 +11415,7 @@
11415 "zh-cht": "刪除帳戶",
11416 "xloc": [
11417 "default-mobile.handlebars->11->108",
11409 - "default.handlebars->31->1495"
11418 + "default.handlebars->31->1497"
11419 ]
11420 },
11421 {
@@ -11426,7 +11435,7 @@
11435 "zh-chs": "删除帐户",
11436 "zh-cht": "刪除帳戶",
11437 "xloc": [
11429 - "default.handlebars->31->2017"
11438 + "default.handlebars->31->2019"
11439 ]
11440 },
11441 {
@@ -11469,8 +11478,8 @@
11478 "xloc": [
11479 "default-mobile.handlebars->11->545",
11480 "default-mobile.handlebars->11->548",
11472 - "default.handlebars->31->1616",
11473 - "default.handlebars->31->1649"
11481 + "default.handlebars->31->1618",
11482 + "default.handlebars->31->1651"
11483 ]
11484 },
11485 {
@@ -11491,7 +11500,7 @@
11500 "zh-cht": "刪除節點",
11501 "xloc": [
11502 "default-mobile.handlebars->11->339",
11494 - "default.handlebars->31->941"
11503 + "default.handlebars->31->943"
11504 ]
11505 },
11506 {
@@ -11531,7 +11540,7 @@
11540 "zh-chs": "删除用户",
11541 "zh-cht": "刪除用戶",
11542 "xloc": [
11534 - "default.handlebars->31->2229"
11543 + "default.handlebars->31->2231"
11544 ]
11545 },
11546 {
@@ -11551,8 +11560,8 @@
11560 "zh-chs": "删除用户群组",
11561 "zh-cht": "刪除用戶群組",
11562 "xloc": [
11554 - "default.handlebars->31->2147",
11555 - "default.handlebars->31->2157"
11563 + "default.handlebars->31->2149",
11564 + "default.handlebars->31->2159"
11565 ]
11566 },
11567 {
@@ -11572,7 +11581,7 @@
11581 "zh-chs": "删除用户群组",
11582 "zh-cht": "刪除用戶群組",
11583 "xloc": [
11575 - "default.handlebars->31->2096"
11584 + "default.handlebars->31->2098"
11585 ]
11586 },
11587 {
@@ -11592,7 +11601,7 @@
11601 "zh-chs": "删除用户{0}",
11602 "zh-cht": "刪除用戶{0}",
11603 "xloc": [
11595 - "default.handlebars->31->2256"
11604 + "default.handlebars->31->2258"
11605 ]
11606 },
11607 {
@@ -11613,7 +11622,7 @@
11622 "zh-cht": "刪除帳戶",
11623 "xloc": [
11624 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->3->p3AccountActions->p2AccountActions->3->9->0",
11616 - "default.handlebars->31->2013",
11625 + "default.handlebars->31->2015",
11626 "default.handlebars->container->column_l->p2->p2info->p2AccountActions->3->p2AccountPassActions->7"
11627 ]
11628 },
@@ -11654,7 +11663,7 @@
11663 "zh-chs": "删除群组",
11664 "zh-cht": "刪除群組",
11665 "xloc": [
11657 - "default.handlebars->31->2092"
11666 + "default.handlebars->31->2094"
11667 ]
11668 },
11669 {
@@ -11694,7 +11703,7 @@
11703 "zh-chs": "递归删除:“{0}”,{1}个元素已删除",
11704 "zh-cht": "遞歸刪除:“{0}”,{1}個元素已刪除",
11705 "xloc": [
11697 - "default.handlebars->31->1884"
11706 + "default.handlebars->31->1886"
11707 ]
11708 },
11709 {
@@ -11716,8 +11725,8 @@
11725 "xloc": [
11726 "default-mobile.handlebars->11->148",
11727 "default-mobile.handlebars->11->400",
11719 - "default.handlebars->31->1089",
11720 - "default.handlebars->31->1826",
11728 + "default.handlebars->31->1091",
11729 + "default.handlebars->31->1828",
11730 "sharing.handlebars->11->63"
11731 ]
11732 },
@@ -11738,7 +11747,7 @@
11747 "zh-chs": "删除用户群组{0}?",
11748 "zh-cht": "刪除用戶群組{0}?",
11749 "xloc": [
11741 - "default.handlebars->31->2155"
11750 + "default.handlebars->31->2157"
11751 ]
11752 },
11753 {
@@ -11760,8 +11769,8 @@
11769 "xloc": [
11770 "default-mobile.handlebars->11->147",
11771 "default-mobile.handlebars->11->399",
11763 - "default.handlebars->31->1088",
11764 - "default.handlebars->31->1825",
11772 + "default.handlebars->31->1090",
11773 + "default.handlebars->31->1827",
11774 "sharing.handlebars->11->62"
11775 ]
11776 },
@@ -11802,7 +11811,7 @@
11811 "zh-chs": "删除:“{0}”",
11812 "zh-cht": "刪除:“{0}”",
11813 "xloc": [
11805 - "default.handlebars->31->1883"
11814 + "default.handlebars->31->1885"
11815 ]
11816 },
11817 {
@@ -11822,7 +11831,7 @@
11831 "zh-chs": "删除:“{0}”,{1}个元素已删除",
11832 "zh-cht": "刪除:“{0}”,已刪除{1}個元素",
11833 "xloc": [
11825 - "default.handlebars->31->1885"
11834 + "default.handlebars->31->1887"
11835 ]
11836 },
11837 {
@@ -11843,7 +11852,7 @@
11852 "zh-cht": "被拒絕",
11853 "xloc": [
11854 "default-mobile.handlebars->11->350",
11846 - "default.handlebars->31->984",
11855 + "default.handlebars->31->986",
11856 "desktop.handlebars->3->7",
11857 "sharing.handlebars->11->29",
11858 "sharing.handlebars->11->7",
@@ -11946,19 +11955,19 @@
11955 "default-mobile.handlebars->11->461",
11956 "default-mobile.handlebars->11->536",
11957 "default-mobile.handlebars->11->550",
11949 - "default.handlebars->31->1141",
11950 - "default.handlebars->31->1151",
11951 - "default.handlebars->31->1516",
11952 - "default.handlebars->31->1564",
11953 - "default.handlebars->31->1651",
11954 - "default.handlebars->31->2101",
11955 - "default.handlebars->31->2111",
11956 - "default.handlebars->31->2112",
11957 - "default.handlebars->31->2153",
11958 + "default.handlebars->31->1143",
11959 + "default.handlebars->31->1153",
11960 + "default.handlebars->31->1518",
11961 + "default.handlebars->31->1566",
11962 + "default.handlebars->31->1653",
11963 + "default.handlebars->31->2103",
11964 + "default.handlebars->31->2113",
11965 + "default.handlebars->31->2114",
11966 + "default.handlebars->31->2155",
11967 "default.handlebars->31->645",
11968 "default.handlebars->31->646",
11969 "default.handlebars->31->95",
11961 - "default.handlebars->31->979",
11970 + "default.handlebars->31->981",
11971 "default.handlebars->container->column_l->p42->p42tbl->1->0->3"
11972 ]
11973 },
@@ -11997,12 +12006,12 @@
12006 "zh-cht": "桌面",
12007 "xloc": [
12008 "default-mobile.handlebars->11->299",
12000 - "default.handlebars->31->1051",
12001 - "default.handlebars->31->1657",
12002 - "default.handlebars->31->2311",
12009 + "default.handlebars->31->1053",
12010 + "default.handlebars->31->1659",
12011 + "default.handlebars->31->2313",
12012 "default.handlebars->31->610",
12004 - "default.handlebars->31->779",
12005 - "default.handlebars->31->846",
12013 + "default.handlebars->31->781",
12014 + "default.handlebars->31->848",
12015 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevDesktop",
12016 "default.handlebars->contextMenu->cxdesktop",
12017 "desktop.handlebars->3->23",
@@ -12014,23 +12023,23 @@
12023 "en": "Desktop + Files",
12024 "nl": "Desktop + Bestanden",
12025 "xloc": [
12017 - "default.handlebars->31->783",
12018 - "default.handlebars->31->849"
12026 + "default.handlebars->31->785",
12027 + "default.handlebars->31->851"
12028 ]
12029 },
12030 {
12031 "en": "Desktop + Terminal",
12032 "nl": "Desktop + Terminal",
12033 "xloc": [
12025 - "default.handlebars->31->780"
12034 + "default.handlebars->31->782"
12035 ]
12036 },
12037 {
12038 "en": "Desktop + Terminal + Files",
12039 "nl": "Desktop + Terminal + Bestanden",
12040 "xloc": [
12032 - "default.handlebars->31->784",
12033 - "default.handlebars->31->851"
12041 + "default.handlebars->31->786",
12042 + "default.handlebars->31->853"
12043 ]
12044 },
12045 {
@@ -12070,9 +12079,9 @@
12079 "zh-chs": "桌面通知",
12080 "zh-cht": "桌面通知",
12081 "xloc": [
12073 - "default.handlebars->31->1578",
12074 - "default.handlebars->31->2116",
12075 - "default.handlebars->31->2203",
12082 + "default.handlebars->31->1580",
12083 + "default.handlebars->31->2118",
12084 + "default.handlebars->31->2205",
12085 "default.handlebars->31->696"
12086 ]
12087 },
@@ -12093,9 +12102,9 @@
12102 "zh-chs": "桌面提示",
12103 "zh-cht": "桌面提示",
12104 "xloc": [
12096 - "default.handlebars->31->1577",
12097 - "default.handlebars->31->2115",
12098 - "default.handlebars->31->2202",
12105 + "default.handlebars->31->1579",
12106 + "default.handlebars->31->2117",
12107 + "default.handlebars->31->2204",
12108 "default.handlebars->31->695"
12109 ]
12110 },
@@ -12116,9 +12125,9 @@
12125 "zh-chs": "桌面提示+工具栏",
12126 "zh-cht": "桌面提示+工具欄",
12127 "xloc": [
12119 - "default.handlebars->31->1575",
12120 - "default.handlebars->31->2113",
12121 - "default.handlebars->31->2200",
12128 + "default.handlebars->31->1577",
12129 + "default.handlebars->31->2115",
12130 + "default.handlebars->31->2202",
12131 "default.handlebars->31->693"
12132 ]
12133 },
@@ -12126,7 +12135,7 @@
12135 "en": "Desktop Session",
12136 "nl": "Desktop sessie",
12137 "xloc": [
12129 - "default.handlebars->31->2304"
12138 + "default.handlebars->31->2306"
12139 ]
12140 },
12141 {
@@ -12189,9 +12198,9 @@
12198 "zh-chs": "桌面工具栏",
12199 "zh-cht": "桌面工具欄",
12200 "xloc": [
12192 - "default.handlebars->31->1576",
12193 - "default.handlebars->31->2114",
12194 - "default.handlebars->31->2201",
12201 + "default.handlebars->31->1578",
12202 + "default.handlebars->31->2116",
12203 + "default.handlebars->31->2203",
12204 "default.handlebars->31->694"
12205 ]
12206 },
@@ -12201,7 +12210,7 @@
12210 "fr": "Bureau en visualisation seulement",
12211 "de": "Desktop, nur Ansehen",
12212 "xloc": [
12204 - "default.handlebars->31->852"
12213 + "default.handlebars->31->854"
12214 ]
12215 },
12216 {
@@ -12221,7 +12230,7 @@
12230 "zh-chs": "桌面时段",
12231 "zh-cht": "桌面時段",
12232 "xloc": [
12224 - "default.handlebars->31->1050"
12233 + "default.handlebars->31->1052"
12234 ]
12235 },
12236 {
@@ -12315,11 +12324,11 @@
12324 "zh-cht": "裝置",
12325 "xloc": [
12326 "default-mobile.handlebars->11->456",
12318 - "default.handlebars->31->1136",
12319 - "default.handlebars->31->1244",
12320 - "default.handlebars->31->1680",
12327 + "default.handlebars->31->1138",
12328 + "default.handlebars->31->1246",
12329 + "default.handlebars->31->1682",
12330 "default.handlebars->31->204",
12322 - "default.handlebars->31->2275",
12331 + "default.handlebars->31->2277",
12332 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->9->devListToolbarSort->sortselect->5"
12333 ]
12334 },
@@ -12342,7 +12351,7 @@
12351 "xloc": [
12352 "default-mobile.handlebars->11->320",
12353 "default-mobile.handlebars->11->329",
12345 - "default.handlebars->31->898"
12354 + "default.handlebars->31->900"
12355 ]
12356 },
12357 {
@@ -12392,15 +12401,15 @@
12401 "xloc": [
12402 "agent-translations.json",
12403 "default-mobile.handlebars->11->611",
12395 - "default.handlebars->31->1675",
12396 - "default.handlebars->31->1678",
12397 - "default.handlebars->31->1679",
12398 - "default.handlebars->31->1964",
12399 - "default.handlebars->31->2139",
12400 - "default.handlebars->31->2145",
12401 - "default.handlebars->31->2263",
12402 - "default.handlebars->31->2320",
12403 - "default.handlebars->31->2339"
12404 + "default.handlebars->31->1677",
12405 + "default.handlebars->31->1680",
12406 + "default.handlebars->31->1681",
12407 + "default.handlebars->31->1966",
12408 + "default.handlebars->31->2141",
12409 + "default.handlebars->31->2147",
12410 + "default.handlebars->31->2265",
12411 + "default.handlebars->31->2322",
12412 + "default.handlebars->31->2341"
12413 ]
12414 },
12415 {
@@ -12421,7 +12430,7 @@
12430 "zh-cht": "裝置群用戶",
12431 "xloc": [
12432 "default-mobile.handlebars->11->600",
12424 - "default.handlebars->31->1745"
12433 + "default.handlebars->31->1747"
12434 ]
12435 },
12436 {
@@ -12442,11 +12451,11 @@
12451 "zh-cht": "裝置群",
12452 "xloc": [
12453 "default-mobile.handlebars->container->page_content->column_l->p3->p3info->3->3",
12445 - "default.handlebars->31->1980",
12446 - "default.handlebars->31->2086",
12447 - "default.handlebars->31->2126",
12448 - "default.handlebars->31->2197",
12449 - "default.handlebars->31->2390",
12454 + "default.handlebars->31->1982",
12455 + "default.handlebars->31->2088",
12456 + "default.handlebars->31->2128",
12457 + "default.handlebars->31->2199",
12458 + "default.handlebars->31->2392",
12459 "default.handlebars->container->column_l->p2->p2info->9"
12460 ]
12461 },
@@ -12487,7 +12496,7 @@
12496 "zh-chs": "设备位置",
12497 "zh-cht": "裝置位置",
12498 "xloc": [
12490 - "default.handlebars->31->942"
12499 + "default.handlebars->31->944"
12500 ]
12501 },
12502 {
@@ -12507,7 +12516,7 @@
12516 "zh-chs": "设备消息",
12517 "zh-cht": "裝置訊息",
12518 "xloc": [
12510 - "default.handlebars->31->836"
12519 + "default.handlebars->31->838"
12520 ]
12521 },
12522 {
@@ -12528,10 +12537,10 @@
12537 "zh-cht": "裝置名稱",
12538 "xloc": [
12539 "default-mobile.handlebars->11->343",
12531 - "default.handlebars->31->2319",
12540 + "default.handlebars->31->2321",
12541 "default.handlebars->31->346",
12542 "default.handlebars->31->355",
12534 - "default.handlebars->31->977",
12543 + "default.handlebars->31->979",
12544 "player.handlebars->3->9"
12545 ]
12546 },
@@ -12553,7 +12562,7 @@
12562 "zh-cht": "裝置通知",
12563 "xloc": [
12564 "default.handlebars->31->550",
12556 - "default.handlebars->31->841"
12565 + "default.handlebars->31->843"
12566 ]
12567 },
12568 {
@@ -12599,7 +12608,7 @@
12608 "zh-chs": "设备共享链接",
12609 "zh-cht": "設備共享鏈接",
12610 "xloc": [
12602 - "default.handlebars->31->776"
12611 + "default.handlebars->31->778"
12612 ]
12613 },
12614 {
@@ -12647,8 +12656,8 @@
12656 "zh-chs": "设备连接。",
12657 "zh-cht": "裝置連接。",
12658 "xloc": [
12650 - "default.handlebars->31->1483",
12651 - "default.handlebars->31->1766"
12659 + "default.handlebars->31->1485",
12660 + "default.handlebars->31->1768"
12661 ]
12662 },
12663 {
@@ -12668,8 +12677,8 @@
12677 "zh-chs": "设备断开连接。",
12678 "zh-cht": "裝置斷開連接。",
12679 "xloc": [
12671 - "default.handlebars->31->1484",
12672 - "default.handlebars->31->1767"
12680 + "default.handlebars->31->1486",
12681 + "default.handlebars->31->1769"
12682 ]
12683 },
12684 {
@@ -12689,7 +12698,7 @@
12698 "zh-chs": "创建的设备组:{0}",
12699 "zh-cht": "設備組已創建:{0}",
12700 "xloc": [
12692 - "default.handlebars->31->1914"
12701 + "default.handlebars->31->1916"
12702 ]
12703 },
12704 {
@@ -12709,7 +12718,7 @@
12718 "zh-chs": "设备组已删除:{0}",
12719 "zh-cht": "設備組已刪除:{0}",
12720 "xloc": [
12712 - "default.handlebars->31->1915"
12721 + "default.handlebars->31->1917"
12722 ]
12723 },
12724 {
@@ -12729,7 +12738,7 @@
12738 "zh-chs": "设备组成员身份已更改:{0}",
12739 "zh-cht": "設備組成員身份已更改:{0}",
12740 "xloc": [
12732 - "default.handlebars->31->1916"
12741 + "default.handlebars->31->1918"
12742 ]
12743 },
12744 {
@@ -12750,7 +12759,7 @@
12759 "zh-cht": "其他裝置群管理員可以查看和更改裝置群註釋。",
12760 "xloc": [
12761 "default-mobile.handlebars->11->327",
12753 - "default.handlebars->31->833"
12762 + "default.handlebars->31->835"
12763 ]
12764 },
12765 {
@@ -12770,7 +12779,7 @@
12779 "zh-chs": "设备组通知已更改",
12780 "zh-cht": "設備組通知已更改",
12781 "xloc": [
12773 - "default.handlebars->31->1911"
12782 + "default.handlebars->31->1913"
12783 ]
12784 },
12785 {
@@ -12790,7 +12799,7 @@
12799 "zh-chs": "未删除的设备组:{0}",
12800 "zh-cht": "未刪除的設備組:{0}",
12801 "xloc": [
12793 - "default.handlebars->31->1894"
12802 + "default.handlebars->31->1896"
12803 ]
12804 },
12805 {
@@ -13172,7 +13181,7 @@
13181 "fr": "L'appareil a demandé l'activation d'Intel (R) AMT ACM TLS, nom de domaine complet: {0} ",
13182 "de": "Gerät angefordert Intel(R) AMT ACM TLS activation, FQDN: {0}",
13183 "xloc": [
13175 - "default.handlebars->31->1949"
13184 + "default.handlebars->31->1951"
13185 ]
13186 },
13187 {
@@ -13192,7 +13201,7 @@
13201 "zh-chs": "设备请求激活Intel(R)AMT ACM,FQDN:{0}",
13202 "zh-cht": "設備請求激活Intel(R)AMT ACM,FQDN:{0}",
13203 "xloc": [
13195 - "default.handlebars->31->1896"
13204 + "default.handlebars->31->1898"
13205 ]
13206 },
13207 {
@@ -13229,8 +13238,8 @@
13238 "zh-chs": "设备",
13239 "zh-cht": "裝置",
13240 "xloc": [
13232 - "default.handlebars->31->2087",
13233 - "default.handlebars->31->2127"
13241 + "default.handlebars->31->2089",
13242 + "default.handlebars->31->2129"
13243 ]
13244 },
13245 {
@@ -13271,7 +13280,7 @@
13280 "zh-chs": "禁用的电子邮件两因素身份验证",
13281 "zh-cht": "禁用的電子郵件兩因素身份驗證",
13282 "xloc": [
13274 - "default.handlebars->31->1927"
13283 + "default.handlebars->31->1929"
13284 ]
13285 },
13286 {
@@ -13295,14 +13304,15 @@
13304 "default-mobile.handlebars->11->389",
13305 "default-mobile.handlebars->container->page_content->column_l->p10->p10desktop->deskarea1->1->3",
13306 "default-mobile.handlebars->container->page_content->column_l->p10->p10terminal->termTable->termarea1->1->3->disconnectbutton2span",
13298 - "default.handlebars->31->1069",
13299 - "default.handlebars->31->1588",
13307 + "default.handlebars->31->1071",
13308 + "default.handlebars->31->1590",
13309 "default.handlebars->container->column_l->p11->deskarea0->deskarea1->3->disconnectbutton1span",
13310 "default.handlebars->container->column_l->p12->termTable->1->1->0->1->3->disconnectbutton2span",
13311 "desktop.handlebars->p11->deskarea0->deskarea1->3->disconnectbutton1span",
13312 "sharing.handlebars->11->43",
13313 "sharing.handlebars->p11->deskarea0->deskarea1->3->disconnectbutton1span",
13314 "sharing.handlebars->p12->5->3->disconnectbutton2span",
13315 + "ssh.handlebars->p11->deskarea0->deskarea1->3",
13316 "terminal.handlebars->p12->5->3->disconnectbutton2span",
13317 "xterm.handlebars->p11->deskarea0->deskarea1->3"
13318 ]
@@ -13362,6 +13372,7 @@
13372 "sharing.handlebars->p11->deskarea0->deskarea1->3->deskstatus",
13373 "sharing.handlebars->p12->5->3->termstatus",
13374 "sharing.handlebars->p13->p13toolbar->1->3->p13Status",
13375 + "ssh.handlebars->9->1",
13376 "terminal.handlebars->3->1",
13377 "terminal.handlebars->p12->5->3->termstatus",
13378 "xterm.handlebars->9->1"
@@ -13404,7 +13415,7 @@
13415 "zh-chs": "在远程设备上显示一个消息框。",
13416 "zh-cht": "在遠程裝置上顯示一個訊息框。",
13417 "xloc": [
13407 - "default.handlebars->31->837"
13418 + "default.handlebars->31->839"
13419 ]
13420 },
13421 {
@@ -13464,7 +13475,7 @@
13475 "zh-chs": "显示设备组名称",
13476 "zh-cht": "顯示裝置群名稱",
13477 "xloc": [
13467 - "default.handlebars->31->1482"
13478 + "default.handlebars->31->1484"
13479 ]
13480 },
13481 {
@@ -13484,7 +13495,7 @@
13495 "zh-chs": "显示名称",
13496 "zh-cht": "顯示名稱",
13497 "xloc": [
13487 - "default.handlebars->31->1036"
13498 + "default.handlebars->31->1038"
13499 ]
13500 },
13501 {
@@ -13504,7 +13515,7 @@
13515 "zh-chs": "显示公共连结",
13516 "zh-cht": "顯示公共鏈結",
13517 "xloc": [
13507 - "default.handlebars->31->1797"
13518 + "default.handlebars->31->1799"
13519 ]
13520 },
13521 {
@@ -13512,7 +13523,7 @@
13523 "nl": "Scherm {0}",
13524 "fr": "Affichage {0}",
13525 "xloc": [
13515 - "default.handlebars->31->1053"
13526 + "default.handlebars->31->1055"
13527 ]
13528 },
13529 {
@@ -13532,7 +13543,7 @@
13543 "zh-chs": "显示消息框,标题= “{0}”,消息= “{1}”",
13544 "zh-cht": "顯示消息框,標題= “{0}”,消息= “{1}”",
13545 "xloc": [
13535 - "default.handlebars->31->1856"
13546 + "default.handlebars->31->1858"
13547 ]
13548 },
13549 {
@@ -13552,7 +13563,7 @@
13563 "zh-chs": "显示吐司消息,标题= “{0}”,消息= “{1}”",
13564 "zh-cht": "顯示吐司消息,標題= “{0}”,消息= “{1}”",
13565 "xloc": [
13555 - "default.handlebars->31->1864"
13566 + "default.handlebars->31->1866"
13567 ]
13568 },
13569 {
@@ -13572,8 +13583,8 @@
13583 "zh-chs": "什么都不做",
13584 "zh-cht": "什麼都不做",
13585 "xloc": [
13575 - "default.handlebars->31->1635",
13576 - "default.handlebars->31->1639"
13586 + "default.handlebars->31->1637",
13587 + "default.handlebars->31->1641"
13588 ]
13589 },
13590 {
@@ -13593,10 +13604,10 @@
13604 "zh-chs": "域",
13605 "zh-cht": "域",
13606 "xloc": [
13596 - "default.handlebars->31->2051",
13597 - "default.handlebars->31->2099",
13598 - "default.handlebars->31->2108",
13599 - "default.handlebars->31->2176",
13607 + "default.handlebars->31->2053",
13608 + "default.handlebars->31->2101",
13609 + "default.handlebars->31->2110",
13610 + "default.handlebars->31->2178",
13611 "mstsc.handlebars->main->1->3->1->2->1->0",
13612 "mstsc.handlebars->main->1->3->1->2->3"
13613 ]
@@ -13618,7 +13629,7 @@
13629 "zh-chs": "请勿更改,如果设置请保留CCM",
13630 "zh-cht": "請勿更改,如果設置請保留CCM",
13631 "xloc": [
13621 - "default.handlebars->31->1631"
13632 + "default.handlebars->31->1633"
13633 ]
13634 },
13635 {
@@ -13655,7 +13666,7 @@
13666 "zh-chs": "不要连接到服务器",
13667 "zh-cht": "不要連接到伺服器",
13668 "xloc": [
13658 - "default.handlebars->31->1640"
13669 + "default.handlebars->31->1642"
13670 ]
13671 },
13672 {
@@ -13721,7 +13732,7 @@
13732 "de": "runter",
13733 "xloc": [
13734 "default-mobile.handlebars->11->371",
13724 - "default.handlebars->31->1017"
13735 + "default.handlebars->31->1019"
13736 ]
13737 },
13738 {
@@ -13785,7 +13796,7 @@
13796 "zh-cht": "下載檔案",
13797 "xloc": [
13798 "default-mobile.handlebars->11->419",
13788 - "default.handlebars->31->1108",
13799 + "default.handlebars->31->1110",
13800 "sharing.handlebars->11->82"
13801 ]
13802 },
@@ -13826,7 +13837,7 @@
13837 "zh-chs": "下载MeshCmd",
13838 "zh-cht": "下載MeshCmd",
13839 "xloc": [
13829 - "default.handlebars->31->967"
13840 + "default.handlebars->31->969"
13841 ]
13842 },
13843 {
@@ -13886,7 +13897,7 @@
13897 "zh-chs": "下载报告",
13898 "zh-cht": "下載報告",
13899 "xloc": [
13889 - "default.handlebars->31->1969",
13900 + "default.handlebars->31->1971",
13901 "default.handlebars->container->column_l->p3->3->1->0->3"
13902 ]
13903 },
@@ -13907,7 +13918,7 @@
13918 "zh-chs": "下载带有指令档案的“ meshcmd”,以通过此服务器将网络讯息发送到该设备。紧记编辑meshaction.txt并添加您的帐户密码或进行任何必要的更改。",
13919 "zh-cht": "下載帶有指令檔案的“ meshcmd”,以通過此服務器將網絡讯息發送到該裝置。緊記編輯meshaction.txt並新增你的帳戶密碼或進行任何必要的更改。",
13920 "xloc": [
13910 - "default.handlebars->31->960"
13921 + "default.handlebars->31->962"
13922 ]
13923 },
13924 {
@@ -13987,7 +13998,7 @@
13998 "zh-chs": "下载电源事件",
13999 "zh-cht": "下載電源事件",
14000 "xloc": [
13990 - "default.handlebars->31->916"
14001 + "default.handlebars->31->918"
14002 ]
14003 },
14004 {
@@ -14096,7 +14107,7 @@
14107 "zh-chs": "使用以下一种档案格式下载事件列表。",
14108 "zh-cht": "使用以下一種檔案格式下載事件列表。",
14109 "xloc": [
14099 - "default.handlebars->31->1970"
14110 + "default.handlebars->31->1972"
14111 ]
14112 },
14113 {
@@ -14116,7 +14127,7 @@
14127 "zh-chs": "使用以下一种档案格式下载用户列表。",
14128 "zh-cht": "使用以下一種檔案格式下載用戶列表。",
14129 "xloc": [
14119 - "default.handlebars->31->2035"
14130 + "default.handlebars->31->2037"
14131 ]
14132 },
14133 {
@@ -14197,7 +14208,7 @@
14208 "zh-chs": "下载:“{0}”",
14209 "zh-cht": "下載:“{0}”",
14210 "xloc": [
14200 - "default.handlebars->31->1887"
14211 + "default.handlebars->31->1889"
14212 ]
14213 },
14214 {
@@ -14206,7 +14217,7 @@
14217 "fr": "Téléchargement : \\\"{0}\\\", Taille : {1}",
14218 "de": "Download: \\\"{0}\\\", Größe: {1}",
14219 "xloc": [
14209 - "default.handlebars->31->1944"
14220 + "default.handlebars->31->1946"
14221 ]
14222 },
14223 {
@@ -14246,7 +14257,7 @@
14257 "zh-chs": "代理重复",
14258 "zh-cht": "代理重複",
14259 "xloc": [
14249 - "default.handlebars->31->2386"
14260 + "default.handlebars->31->2388"
14261 ]
14262 },
14263 {
@@ -14286,7 +14297,7 @@
14297 "zh-chs": "复制用户组",
14298 "zh-cht": "複製用戶群",
14299 "xloc": [
14289 - "default.handlebars->31->2103"
14300 + "default.handlebars->31->2105"
14301 ]
14302 },
14303 {
@@ -14323,8 +14334,8 @@
14334 "zh-chs": "持续时间",
14335 "zh-cht": "持續時間",
14336 "xloc": [
14326 - "default.handlebars->31->2299",
14327 - "default.handlebars->31->2325",
14337 + "default.handlebars->31->2301",
14338 + "default.handlebars->31->2327",
14339 "player.handlebars->3->2"
14340 ]
14341 },
@@ -14362,7 +14373,7 @@
14373 "zh-chs": "荷兰文(比利时)",
14374 "zh-cht": "荷蘭文(比利時)",
14375 "xloc": [
14365 - "default.handlebars->31->1302"
14376 + "default.handlebars->31->1304"
14377 ]
14378 },
14379 {
@@ -14382,7 +14393,7 @@
14393 "zh-chs": "荷兰文(标准)",
14394 "zh-cht": "荷蘭文(標準)",
14395 "xloc": [
14385 - "default.handlebars->31->1301"
14396 + "default.handlebars->31->1303"
14397 ]
14398 },
14399 {
@@ -14673,7 +14684,7 @@
14684 "zh-cht": "編輯裝置",
14685 "xloc": [
14686 "default-mobile.handlebars->11->348",
14676 - "default.handlebars->31->982"
14687 + "default.handlebars->31->984"
14688 ]
14689 },
14690 {
@@ -14696,10 +14707,10 @@
14707 "default-mobile.handlebars->11->551",
14708 "default-mobile.handlebars->11->557",
14709 "default-mobile.handlebars->11->577",
14699 - "default.handlebars->31->1652",
14700 - "default.handlebars->31->1684",
14701 - "default.handlebars->31->1709",
14702 - "default.handlebars->31->1721"
14710 + "default.handlebars->31->1654",
14711 + "default.handlebars->31->1686",
14712 + "default.handlebars->31->1711",
14713 + "default.handlebars->31->1723"
14714 ]
14715 },
14716 {
@@ -14719,7 +14730,7 @@
14730 "zh-chs": "编辑设备组功能",
14731 "zh-cht": "編輯裝置群功能",
14732 "xloc": [
14722 - "default.handlebars->31->1670"
14733 + "default.handlebars->31->1672"
14734 ]
14735 },
14736 {
@@ -14739,8 +14750,8 @@
14750 "zh-chs": "编辑设备组权限",
14751 "zh-cht": "編輯裝置群權限",
14752 "xloc": [
14742 - "default.handlebars->31->1706",
14743 - "default.handlebars->31->1718"
14753 + "default.handlebars->31->1708",
14754 + "default.handlebars->31->1720"
14755 ]
14756 },
14757 {
@@ -14760,7 +14771,7 @@
14771 "zh-chs": "编辑设备组用户同意",
14772 "zh-cht": "編輯裝置群用戶同意",
14773 "xloc": [
14763 - "default.handlebars->31->1653"
14774 + "default.handlebars->31->1655"
14775 ]
14776 },
14777 {
@@ -14781,7 +14792,7 @@
14792 "zh-cht": "編輯裝置筆記",
14793 "xloc": [
14794 "default-mobile.handlebars->11->569",
14784 - "default.handlebars->31->1698"
14795 + "default.handlebars->31->1700"
14796 ]
14797 },
14798 {
@@ -14801,8 +14812,8 @@
14812 "zh-chs": "编辑设备权限",
14813 "zh-cht": "編輯裝置權限",
14814 "xloc": [
14804 - "default.handlebars->31->1711",
14805 - "default.handlebars->31->1713"
14815 + "default.handlebars->31->1713",
14816 + "default.handlebars->31->1715"
14817 ]
14818 },
14819 {
@@ -14842,7 +14853,7 @@
14853 "zh-chs": "编辑设备用户同意",
14854 "zh-cht": "編輯裝置用戶同意",
14855 "xloc": [
14845 - "default.handlebars->31->1655"
14856 + "default.handlebars->31->1657"
14857 ]
14858 },
14859 {
@@ -14862,7 +14873,7 @@
14873 "zh-chs": "编辑群组",
14874 "zh-cht": "編輯群組",
14875 "xloc": [
14865 - "default.handlebars->31->810"
14876 + "default.handlebars->31->812"
14877 ]
14878 },
14879 {
@@ -14889,7 +14900,7 @@
14900 "default.handlebars->31->660",
14901 "default.handlebars->31->665",
14902 "default.handlebars->31->666",
14892 - "default.handlebars->31->923"
14903 + "default.handlebars->31->925"
14904 ]
14905 },
14906 {
@@ -14910,7 +14921,7 @@
14921 "zh-cht": "編輯筆記",
14922 "xloc": [
14923 "default-mobile.handlebars->11->584",
14913 - "default.handlebars->31->1728"
14924 + "default.handlebars->31->1730"
14925 ]
14926 },
14927 {
@@ -14930,7 +14941,7 @@
14941 "zh-chs": "编辑用户同意",
14942 "zh-cht": "編輯用戶同意",
14943 "xloc": [
14933 - "default.handlebars->31->1654"
14944 + "default.handlebars->31->1656"
14945 ]
14946 },
14947 {
@@ -14950,7 +14961,7 @@
14961 "zh-chs": "编辑用户设备组权限",
14962 "zh-cht": "編輯用戶裝置群權限",
14963 "xloc": [
14953 - "default.handlebars->31->1719"
14964 + "default.handlebars->31->1721"
14965 ]
14966 },
14967 {
@@ -14970,7 +14981,7 @@
14981 "zh-chs": "编辑用户设备权限",
14982 "zh-cht": "編輯用戶裝置權限",
14983 "xloc": [
14973 - "default.handlebars->31->1714"
14984 + "default.handlebars->31->1716"
14985 ]
14986 },
14987 {
@@ -14990,7 +15001,7 @@
15001 "zh-chs": "编辑用户组",
15002 "zh-cht": "編輯用戶群",
15003 "xloc": [
14993 - "default.handlebars->31->2154"
15004 + "default.handlebars->31->2156"
15005 ]
15006 },
15007 {
@@ -15010,7 +15021,7 @@
15021 "zh-chs": "编辑用户组设备权限",
15022 "zh-cht": "編輯用戶群裝置權限",
15023 "xloc": [
15013 - "default.handlebars->31->1716"
15024 + "default.handlebars->31->1718"
15025 ]
15026 },
15027 {
@@ -15030,7 +15041,7 @@
15041 "zh-chs": "编辑用户组用户同意",
15042 "zh-cht": "編輯用戶組用戶同意",
15043 "xloc": [
15033 - "default.handlebars->31->1656"
15044 + "default.handlebars->31->1658"
15045 ]
15046 },
15047 {
@@ -15113,11 +15124,11 @@
15124 "zh-cht": "電郵",
15125 "xloc": [
15126 "default-mobile.handlebars->11->102",
15116 - "default.handlebars->31->2053",
15117 - "default.handlebars->31->2180",
15127 + "default.handlebars->31->2055",
15128 "default.handlebars->31->2182",
15119 - "default.handlebars->31->2222",
15120 - "default.handlebars->31->2242",
15129 + "default.handlebars->31->2184",
15130 + "default.handlebars->31->2224",
15131 + "default.handlebars->31->2244",
15132 "default.handlebars->31->388",
15133 "login-mobile.handlebars->5->42",
15134 "login-mobile.handlebars->container->page_content->column_l->1->1->0->1->tokenpanel->1->7->1->4->1->3",
@@ -15150,7 +15161,7 @@
15161 "zh-cht": "電郵地址變更",
15162 "xloc": [
15163 "default-mobile.handlebars->11->103",
15153 - "default.handlebars->31->1491"
15164 + "default.handlebars->31->1493"
15165 ]
15166 },
15167 {
@@ -15171,7 +15182,7 @@
15182 "zh-cht": "電郵認證",
15183 "xloc": [
15184 "default-mobile.handlebars->11->92",
15174 - "default.handlebars->31->1232"
15185 + "default.handlebars->31->1234"
15186 ]
15187 },
15188 {
@@ -15231,7 +15242,7 @@
15242 "zh-cht": "電郵驗證",
15243 "xloc": [
15244 "default-mobile.handlebars->11->101",
15234 - "default.handlebars->31->1489"
15245 + "default.handlebars->31->1491"
15246 ]
15247 },
15248 {
@@ -15271,7 +15282,7 @@
15282 "zh-chs": "电邮未验证",
15283 "zh-cht": "電郵未驗證",
15284 "xloc": [
15274 - "default.handlebars->31->1999"
15285 + "default.handlebars->31->2001"
15286 ]
15287 },
15288 {
@@ -15291,8 +15302,8 @@
15302 "zh-chs": "电子邮件已验证",
15303 "zh-cht": "電子郵件已驗證",
15304 "xloc": [
15294 - "default.handlebars->31->2000",
15295 - "default.handlebars->31->2174"
15305 + "default.handlebars->31->2002",
15306 + "default.handlebars->31->2176"
15307 ]
15308 },
15309 {
@@ -15312,7 +15323,7 @@
15323 "zh-chs": "电邮已验证。",
15324 "zh-cht": "電郵已驗證。",
15325 "xloc": [
15315 - "default.handlebars->31->2059"
15326 + "default.handlebars->31->2061"
15327 ]
15328 },
15329 {
@@ -15332,7 +15343,7 @@
15343 "zh-chs": "电邮未验证",
15344 "zh-cht": "電郵未驗證",
15345 "xloc": [
15335 - "default.handlebars->31->2175"
15346 + "default.handlebars->31->2177"
15347 ]
15348 },
15349 {
@@ -15353,7 +15364,7 @@
15364 "zh-cht": "電郵已發送。",
15365 "xloc": [
15366 "default-mobile.handlebars->11->626",
15356 - "default.handlebars->31->2354",
15367 + "default.handlebars->31->2356",
15368 "login-mobile.handlebars->5->2",
15369 "login.handlebars->5->2",
15370 "login2.handlebars->7->3"
@@ -15398,7 +15409,7 @@
15409 "zh-chs": "已通过电邮验证,并且需要重置密码。",
15410 "zh-cht": "已通過電郵驗證,並且需要重置密碼。",
15411 "xloc": [
15401 - "default.handlebars->31->2060"
15412 + "default.handlebars->31->2062"
15413 ]
15414 },
15415 {
@@ -15423,7 +15434,7 @@
15434 "nl": "Email/SMS/Push verkeer",
15435 "de": "Email/SMS/Push-Verkehr",
15436 "xloc": [
15426 - "default.handlebars->31->2430"
15437 + "default.handlebars->31->2432"
15438 ]
15439 },
15440 {
@@ -15469,7 +15480,7 @@
15480 "zh-chs": "启用邀请代码",
15481 "zh-cht": "啟用邀請代碼",
15482 "xloc": [
15472 - "default.handlebars->31->1751"
15483 + "default.handlebars->31->1753"
15484 ]
15485 },
15486 {
@@ -15510,7 +15521,7 @@
15521 "zh-cht": "啟用電郵二因子鑑別。",
15522 "xloc": [
15523 "default-mobile.handlebars->11->94",
15513 - "default.handlebars->31->1234"
15524 + "default.handlebars->31->1236"
15525 ]
15526 },
15527 {
@@ -15550,7 +15561,7 @@
15561 "zh-chs": "已启用",
15562 "zh-cht": "已啟用",
15563 "xloc": [
15553 - "default.handlebars->31->2327"
15564 + "default.handlebars->31->2329"
15565 ]
15566 },
15567 {
@@ -15570,7 +15581,7 @@
15581 "zh-chs": "启用电子邮件两因素身份验证",
15582 "zh-cht": "啟用電子郵件兩因素身份驗證",
15583 "xloc": [
15573 - "default.handlebars->31->1926"
15584 + "default.handlebars->31->1928"
15585 ]
15586 },
15587 {
@@ -15600,7 +15611,7 @@
15611 "de": "Ende",
15612 "xloc": [
15613 "default-mobile.handlebars->11->365",
15603 - "default.handlebars->31->1011"
15614 + "default.handlebars->31->1013"
15615 ]
15616 },
15617 {
@@ -15620,7 +15631,7 @@
15631 "zh-chs": "时间结束",
15632 "zh-cht": "時間結束",
15633 "xloc": [
15623 - "default.handlebars->31->2324"
15634 + "default.handlebars->31->2326"
15635 ]
15636 },
15637 {
@@ -15640,7 +15651,7 @@
15651 "zh-chs": "从{1}到{2},{3}秒结束了桌面会话“{0}”",
15652 "zh-cht": "從{1}到{2},{3}秒結束了桌面會話“{0}”",
15653 "xloc": [
15643 - "default.handlebars->31->1849"
15654 + "default.handlebars->31->1851"
15655 ]
15656 },
15657 {
@@ -15660,14 +15671,14 @@
15671 "zh-chs": "从{1}到{2},{3}秒结束了文件管理会话“{0}”",
15672 "zh-cht": "從{1}到{2},{3}秒結束了文件管理會話“{0}”",
15673 "xloc": [
15663 - "default.handlebars->31->1850"
15674 + "default.handlebars->31->1852"
15675 ]
15676 },
15677 {
15678 "en": "Ended messenger session \\\"{0}\\\" from {1} to {2}, {3} second(s)",
15679 "nl": "Beëindigde messengersessie \\\"{0}\\\" van {1} naar {2}, {3} second(s)",
15680 "xloc": [
15670 - "default.handlebars->31->1950"
15681 + "default.handlebars->31->1952"
15682 ]
15683 },
15684 {
@@ -15687,7 +15698,7 @@
15698 "zh-chs": "从{1}到{2},{3}秒结束了中继会话“{0}”",
15699 "zh-cht": "從{1}到{2},{3}秒結束了中繼會話“{0}”",
15700 "xloc": [
15690 - "default.handlebars->31->1847"
15701 + "default.handlebars->31->1849"
15702 ]
15703 },
15704 {
@@ -15707,7 +15718,7 @@
15718 "zh-chs": "从{1}到{2},{3}秒结束了终端会话“{0}”",
15719 "zh-cht": "從{1}到{2},{3}秒結束了終端會話“{0}”",
15720 "xloc": [
15710 - "default.handlebars->31->1848"
15721 + "default.handlebars->31->1850"
15722 ]
15723 },
15724 {
@@ -15727,7 +15738,7 @@
15738 "zh-chs": "英文",
15739 "zh-cht": "英文",
15740 "xloc": [
15730 - "default.handlebars->31->1303"
15741 + "default.handlebars->31->1305"
15742 ]
15743 },
15744 {
@@ -15747,7 +15758,7 @@
15758 "zh-chs": "英文(澳洲)",
15759 "zh-cht": "英文(澳洲)",
15760 "xloc": [
15750 - "default.handlebars->31->1304"
15761 + "default.handlebars->31->1306"
15762 ]
15763 },
15764 {
@@ -15767,7 +15778,7 @@
15778 "zh-chs": "英文(伯利茲)",
15779 "zh-cht": "英文(伯利茲)",
15780 "xloc": [
15770 - "default.handlebars->31->1305"
15781 + "default.handlebars->31->1307"
15782 ]
15783 },
15784 {
@@ -15787,7 +15798,7 @@
15798 "zh-chs": "英文(加拿大)",
15799 "zh-cht": "英文(加拿大)",
15800 "xloc": [
15790 - "default.handlebars->31->1306"
15801 + "default.handlebars->31->1308"
15802 ]
15803 },
15804 {
@@ -15807,7 +15818,7 @@
15818 "zh-chs": "英文(爱尔兰)",
15819 "zh-cht": "英文(愛爾蘭)",
15820 "xloc": [
15810 - "default.handlebars->31->1307"
15821 + "default.handlebars->31->1309"
15822 ]
15823 },
15824 {
@@ -15827,7 +15838,7 @@
15838 "zh-chs": "英文(牙买加)",
15839 "zh-cht": "英文(牙買加)",
15840 "xloc": [
15830 - "default.handlebars->31->1308"
15841 + "default.handlebars->31->1310"
15842 ]
15843 },
15844 {
@@ -15847,7 +15858,7 @@
15858 "zh-chs": "英文(纽西兰)",
15859 "zh-cht": "英文(紐西蘭)",
15860 "xloc": [
15850 - "default.handlebars->31->1309"
15861 + "default.handlebars->31->1311"
15862 ]
15863 },
15864 {
@@ -15867,7 +15878,7 @@
15878 "zh-chs": "英文(菲律宾)",
15879 "zh-cht": "英文(菲律賓)",
15880 "xloc": [
15870 - "default.handlebars->31->1310"
15881 + "default.handlebars->31->1312"
15882 ]
15883 },
15884 {
@@ -15887,7 +15898,7 @@
15898 "zh-chs": "英语(南非)",
15899 "zh-cht": "英語(南非)",
15900 "xloc": [
15890 - "default.handlebars->31->1311"
15901 + "default.handlebars->31->1313"
15902 ]
15903 },
15904 {
@@ -15907,7 +15918,7 @@
15918 "zh-chs": "英文(特立尼达和多巴哥)",
15919 "zh-cht": "英文(特立尼達和多巴哥)",
15920 "xloc": [
15910 - "default.handlebars->31->1312"
15921 + "default.handlebars->31->1314"
15922 ]
15923 },
15924 {
@@ -15927,7 +15938,7 @@
15938 "zh-chs": "英文(英国)",
15939 "zh-cht": "英文(英國)",
15940 "xloc": [
15930 - "default.handlebars->31->1313"
15941 + "default.handlebars->31->1315"
15942 ]
15943 },
15944 {
@@ -15947,7 +15958,7 @@
15958 "zh-chs": "美国英文",
15959 "zh-cht": "美國英語",
15960 "xloc": [
15950 - "default.handlebars->31->1314"
15961 + "default.handlebars->31->1316"
15962 ]
15963 },
15964 {
@@ -15967,7 +15978,7 @@
15978 "zh-chs": "英文(津巴布韦)",
15979 "zh-cht": "英文(津巴布韋)",
15980 "xloc": [
15970 - "default.handlebars->31->1315"
15981 + "default.handlebars->31->1317"
15982 ]
15983 },
15984 {
@@ -15988,10 +15999,10 @@
15999 "zh-cht": "輸入",
16000 "xloc": [
16001 "default-mobile.handlebars->11->359",
15991 - "default.handlebars->31->1005",
15992 - "default.handlebars->31->1081",
15993 - "default.handlebars->31->1518",
15994 - "default.handlebars->31->1519",
16002 + "default.handlebars->31->1007",
16003 + "default.handlebars->31->1083",
16004 + "default.handlebars->31->1520",
16005 + "default.handlebars->31->1521",
16006 "sharing.handlebars->11->55"
16007 ]
16008 },
@@ -16012,7 +16023,7 @@
16023 "zh-chs": "输入管理领域名称的逗号分隔列表。",
16024 "zh-cht": "輸入管理領域名稱的逗號分隔列表。",
16025 "xloc": [
16015 - "default.handlebars->31->2064"
16026 + "default.handlebars->31->2066"
16027 ]
16028 },
16029 {
@@ -16073,7 +16084,7 @@
16084 "zh-chs": "输入文本,然后单击确定以远程键入它。在继续操作之前,请确保将远程光标放置在正确的位置。",
16085 "zh-cht": "輸入文本,然後單擊確定以遠程鍵入它。在繼續操作之前,請確保將遠程光標放置在正確的位置。",
16086 "xloc": [
16076 - "default.handlebars->31->1030"
16087 + "default.handlebars->31->1032"
16088 ]
16089 },
16090 {
@@ -16135,7 +16146,7 @@
16146 "zh-chs": "输入支持SMS的电话号码。验证后,该号码可用于登录验证和其他通知。",
16147 "zh-cht": "輸入支持SMS的電話號碼。驗證後,該號碼可用於登入驗證和其他通知。",
16148 "xloc": [
16138 - "default.handlebars->31->1229"
16149 + "default.handlebars->31->1231"
16150 ]
16151 },
16152 {
@@ -16165,7 +16176,7 @@
16176 "de": "Fehler, Einladungscode \\\"{0}\\\" wird bereits verwendet.",
16177 "xloc": [
16178 "default-mobile.handlebars->11->634",
16168 - "default.handlebars->31->2362"
16179 + "default.handlebars->31->2364"
16180 ]
16181 },
16182 {
@@ -16175,7 +16186,7 @@
16186 "de": "Fehler, Password wurde nicht geändert.",
16187 "xloc": [
16188 "default-mobile.handlebars->11->631",
16178 - "default.handlebars->31->2359"
16189 + "default.handlebars->31->2361"
16190 ]
16191 },
16192 {
@@ -16185,7 +16196,7 @@
16196 "de": "Fehler, kann nicht zu häufig verwendeten Passwörtern geändert werden.",
16197 "xloc": [
16198 "default-mobile.handlebars->11->630",
16188 - "default.handlebars->31->2358"
16199 + "default.handlebars->31->2360"
16200 ]
16201 },
16202 {
@@ -16195,7 +16206,7 @@
16206 "de": "Fehler, Änderung des zuvor verwendeten Kennworts nicht möglich.",
16207 "xloc": [
16208 "default-mobile.handlebars->11->629",
16198 - "default.handlebars->31->2357"
16209 + "default.handlebars->31->2359"
16210 ]
16211 },
16212 {
@@ -16224,7 +16235,7 @@
16235 "nl": "Escape",
16236 "xloc": [
16237 "default-mobile.handlebars->11->360",
16227 - "default.handlebars->31->1006"
16238 + "default.handlebars->31->1008"
16239 ]
16240 },
16241 {
@@ -16244,7 +16255,7 @@
16255 "zh-chs": "世界文",
16256 "zh-cht": "世界語",
16257 "xloc": [
16247 - "default.handlebars->31->1316"
16258 + "default.handlebars->31->1318"
16259 ]
16260 },
16261 {
@@ -16264,7 +16275,7 @@
16275 "zh-chs": "爱沙尼亚文",
16276 "zh-cht": "愛沙尼亞語",
16277 "xloc": [
16267 - "default.handlebars->31->1317"
16278 + "default.handlebars->31->1319"
16279 ]
16280 },
16281 {
@@ -16284,7 +16295,7 @@
16295 "zh-chs": "事件详情",
16296 "zh-cht": "事件詳情",
16297 "xloc": [
16287 - "default.handlebars->31->1121"
16298 + "default.handlebars->31->1123"
16299 ]
16300 },
16301 {
@@ -16304,7 +16315,7 @@
16315 "zh-chs": "事件列表输出",
16316 "zh-cht": "事件列表輸出",
16317 "xloc": [
16307 - "default.handlebars->31->1975"
16318 + "default.handlebars->31->1977"
16319 ]
16320 },
16321 {
@@ -16415,9 +16426,9 @@
16426 "zh-chs": "到期时间",
16427 "zh-cht": "到期時間",
16428 "xloc": [
16418 - "default.handlebars->31->1479",
16429 + "default.handlebars->31->1481",
16430 "default.handlebars->31->210",
16420 - "default.handlebars->31->872"
16431 + "default.handlebars->31->874"
16432 ]
16433 },
16434 {
@@ -16459,7 +16470,7 @@
16470 "zh-chs": "过期{0}",
16471 "zh-cht": "過期{0}",
16472 "xloc": [
16462 - "default.handlebars->31->1532",
16473 + "default.handlebars->31->1534",
16474 "desktop.handlebars->3->27",
16475 "sharing.handlebars->11->95",
16476 "terminal.handlebars->3->25"
@@ -16502,7 +16513,7 @@
16513 "zh-chs": "扩充式ASCII",
16514 "zh-cht": "擴充式ASCII",
16515 "xloc": [
16505 - "default.handlebars->31->1060",
16516 + "default.handlebars->31->1062",
16517 "sharing.handlebars->11->34",
16518 "terminal.handlebars->3->16"
16519 ]
@@ -16546,7 +16557,7 @@
16557 "zh-chs": "外部",
16558 "zh-cht": "外部",
16559 "xloc": [
16549 - "default.handlebars->31->2413"
16560 + "default.handlebars->31->2415"
16561 ]
16562 },
16563 {
@@ -16586,7 +16597,7 @@
16597 "zh-chs": "FYRO马其顿语",
16598 "zh-cht": "FYRO馬其頓語",
16599 "xloc": [
16589 - "default.handlebars->31->1367"
16600 + "default.handlebars->31->1369"
16601 ]
16602 },
16603 {
@@ -16606,7 +16617,7 @@
16617 "zh-chs": "法罗语",
16618 "zh-cht": "法羅語",
16619 "xloc": [
16609 - "default.handlebars->31->1318"
16620 + "default.handlebars->31->1320"
16621 ]
16622 },
16623 {
@@ -16636,7 +16647,7 @@
16647 "de": "Fehler beim ändern der E-Mail-Adresse, wird bereits von einem anderen Konto verwendet: {0}.",
16648 "xloc": [
16649 "default-mobile.handlebars->11->625",
16639 - "default.handlebars->31->2353"
16650 + "default.handlebars->31->2355"
16651 ]
16652 },
16653 {
@@ -16662,7 +16673,7 @@
16673 "zh-chs": "本地用户拒绝后无法启动远程桌面",
16674 "zh-cht": "本地用戶拒絕後無法啟動遠程桌面",
16675 "xloc": [
16665 - "default.handlebars->31->1872"
16676 + "default.handlebars->31->1874"
16677 ]
16678 },
16679 {
@@ -16682,7 +16693,7 @@
16693 "zh-chs": "本地用户拒绝后无法启动远程文件",
16694 "zh-cht": "本地用戶拒絕後無法啟動遠程文件",
16695 "xloc": [
16685 - "default.handlebars->31->1879"
16696 + "default.handlebars->31->1881"
16697 ]
16698 },
16699 {
@@ -16703,7 +16714,7 @@
16714 "zh-cht": "無法啟動遠程終端接合{0}({1})",
16715 "xloc": [
16716 "default-mobile.handlebars->11->351",
16706 - "default.handlebars->31->985",
16717 + "default.handlebars->31->987",
16718 "desktop.handlebars->3->8",
16719 "sharing.handlebars->11->30",
16720 "sharing.handlebars->11->8",
@@ -16727,7 +16738,7 @@
16738 "zh-chs": "波斯文(波斯文)",
16739 "zh-cht": "波斯語(波斯語)",
16740 "xloc": [
16730 - "default.handlebars->31->1319"
16741 + "default.handlebars->31->1321"
16742 ]
16743 },
16744 {
@@ -16770,7 +16781,7 @@
16781 "zh-chs": "功能",
16782 "zh-cht": "功能",
16783 "xloc": [
16773 - "default.handlebars->31->1574"
16784 + "default.handlebars->31->1576"
16785 ]
16786 },
16787 {
@@ -16790,7 +16801,7 @@
16801 "zh-chs": "斐济",
16802 "zh-cht": "斐濟",
16803 "xloc": [
16793 - "default.handlebars->31->1320"
16804 + "default.handlebars->31->1322"
16805 ]
16806 },
16807 {
@@ -16831,7 +16842,7 @@
16842 "zh-cht": "檔案編輯器",
16843 "xloc": [
16844 "default-mobile.handlebars->11->403",
16834 - "default.handlebars->31->1092",
16845 + "default.handlebars->31->1094",
16846 "default.handlebars->31->602",
16847 "sharing.handlebars->11->66"
16848 ]
@@ -16869,8 +16880,8 @@
16880 "zh-chs": "档案操作",
16881 "zh-cht": "檔案操作",
16882 "xloc": [
16872 - "default.handlebars->31->1072",
16883 "default.handlebars->31->1074",
16884 + "default.handlebars->31->1076",
16885 "sharing.handlebars->11->46",
16886 "sharing.handlebars->11->48"
16887 ]
@@ -16899,7 +16910,7 @@
16910 "en": "File Transfer",
16911 "nl": "Bestandsoverdracht",
16912 "xloc": [
16902 - "default.handlebars->31->2305"
16913 + "default.handlebars->31->2307"
16914 ]
16915 },
16916 {
@@ -16919,7 +16930,7 @@
16930 "zh-chs": "文件系统驱动",
16931 "zh-cht": "FileSystemDriver",
16932 "xloc": [
16922 - "default.handlebars->31->1039"
16933 + "default.handlebars->31->1041"
16934 ]
16935 },
16936 {
@@ -16941,11 +16952,11 @@
16952 "xloc": [
16953 "default-mobile.handlebars->11->203",
16954 "default-mobile.handlebars->11->301",
16944 - "default.handlebars->31->1664",
16945 - "default.handlebars->31->2312",
16955 + "default.handlebars->31->1666",
16956 + "default.handlebars->31->2314",
16957 "default.handlebars->31->315",
16947 - "default.handlebars->31->781",
16948 - "default.handlebars->31->848",
16958 + "default.handlebars->31->783",
16959 + "default.handlebars->31->850",
16960 "default.handlebars->container->topbar->1->1->MainSubMenuSpan->MainSubMenu->1->0->MainDevFiles",
16961 "default.handlebars->contextMenu->cxfiles",
16962 "sharing.handlebars->LeftSideToolBar"
@@ -16988,9 +16999,9 @@
16999 "zh-chs": "档案通知",
17000 "zh-cht": "檔案通知",
17001 "xloc": [
16991 - "default.handlebars->31->1582",
16992 - "default.handlebars->31->2120",
16993 - "default.handlebars->31->2207",
17002 + "default.handlebars->31->1584",
17003 + "default.handlebars->31->2122",
17004 + "default.handlebars->31->2209",
17005 "default.handlebars->31->700"
17006 ]
17007 },
@@ -17011,9 +17022,9 @@
17022 "zh-chs": "档案提示",
17023 "zh-cht": "檔案提示",
17024 "xloc": [
17014 - "default.handlebars->31->1581",
17015 - "default.handlebars->31->2119",
17016 - "default.handlebars->31->2206",
17025 + "default.handlebars->31->1583",
17026 + "default.handlebars->31->2121",
17027 + "default.handlebars->31->2208",
17028 "default.handlebars->31->699"
17029 ]
17030 },
@@ -17035,7 +17046,7 @@
17046 "zh-cht": "過濾",
17047 "xloc": [
17048 "default-mobile.handlebars->container->page_content->column_l->p2->xdevicesBar->1",
17038 - "default.handlebars->31->1077",
17049 + "default.handlebars->31->1079",
17050 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar",
17051 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->kvmListToolbar",
17052 "default.handlebars->container->column_l->p4->3->1->0->3->3",
@@ -17080,7 +17091,7 @@
17091 "zh-chs": "查找文件",
17092 "zh-cht": "查找文件",
17093 "xloc": [
17083 - "default.handlebars->31->1080",
17094 + "default.handlebars->31->1082",
17095 "sharing.handlebars->11->54"
17096 ]
17097 },
@@ -17101,7 +17112,7 @@
17112 "zh-chs": "录制会话已完成,{0}秒",
17113 "zh-cht": "錄製會話已完成,{0}秒",
17114 "xloc": [
17104 - "default.handlebars->31->1845"
17115 + "default.handlebars->31->1847"
17116 ]
17117 },
17118 {
@@ -17121,7 +17132,7 @@
17132 "zh-chs": "芬兰",
17133 "zh-cht": "芬蘭",
17134 "xloc": [
17124 - "default.handlebars->31->1321"
17135 + "default.handlebars->31->1323"
17136 ]
17137 },
17138 {
@@ -17141,8 +17152,8 @@
17152 "fr": "Pare-feu désactivé",
17153 "de": "Firewall nicht aktiv",
17154 "xloc": [
17144 - "default.handlebars->31->1777",
17145 - "default.handlebars->31->1791"
17155 + "default.handlebars->31->1779",
17156 + "default.handlebars->31->1793"
17157 ]
17158 },
17159 {
@@ -17175,7 +17186,7 @@
17186 "nl": "Flits",
17187 "xloc": [
17188 "default-mobile.handlebars->11->305",
17178 - "default.handlebars->31->879"
17189 + "default.handlebars->31->881"
17190 ]
17191 },
17192 {
@@ -17343,8 +17354,8 @@
17354 "zh-chs": "下次登录时强制重置密码。",
17355 "zh-cht": "下次登入時強制重置密碼。",
17356 "xloc": [
17346 - "default.handlebars->31->2058",
17347 - "default.handlebars->31->2253"
17357 + "default.handlebars->31->2060",
17358 + "default.handlebars->31->2255"
17359 ]
17360 },
17361 {
@@ -17427,7 +17438,7 @@
17438 "zh-chs": "格式化",
17439 "zh-cht": "格式化",
17440 "xloc": [
17430 - "default.handlebars->31->1966"
17441 + "default.handlebars->31->1968"
17442 ]
17443 },
17444 {
@@ -17469,8 +17480,8 @@
17480 "zh-chs": "自由",
17481 "zh-cht": "自由",
17482 "xloc": [
17472 - "default.handlebars->31->2371",
17473 - "default.handlebars->31->2373"
17483 + "default.handlebars->31->2373",
17484 + "default.handlebars->31->2375"
17485 ]
17486 },
17487 {
@@ -17511,7 +17522,7 @@
17522 "zh-chs": "法文(比利时)",
17523 "zh-cht": "法語(比利時)",
17524 "xloc": [
17514 - "default.handlebars->31->1323"
17525 + "default.handlebars->31->1325"
17526 ]
17527 },
17528 {
@@ -17531,7 +17542,7 @@
17542 "zh-chs": "法文(加拿大)",
17543 "zh-cht": "法語(加拿大)",
17544 "xloc": [
17534 - "default.handlebars->31->1324"
17545 + "default.handlebars->31->1326"
17546 ]
17547 },
17548 {
@@ -17551,7 +17562,7 @@
17562 "zh-chs": "法文(法国)",
17563 "zh-cht": "法語(法國)",
17564 "xloc": [
17554 - "default.handlebars->31->1325"
17565 + "default.handlebars->31->1327"
17566 ]
17567 },
17568 {
@@ -17571,7 +17582,7 @@
17582 "zh-chs": "法文(卢森堡)",
17583 "zh-cht": "法語(盧森堡)",
17584 "xloc": [
17574 - "default.handlebars->31->1326"
17585 + "default.handlebars->31->1328"
17586 ]
17587 },
17588 {
@@ -17591,7 +17602,7 @@
17602 "zh-chs": "法文(摩纳哥)",
17603 "zh-cht": "法語(摩納哥)",
17604 "xloc": [
17594 - "default.handlebars->31->1327"
17605 + "default.handlebars->31->1329"
17606 ]
17607 },
17608 {
@@ -17611,7 +17622,7 @@
17622 "zh-chs": "法文(标准)",
17623 "zh-cht": "法語(標準)",
17624 "xloc": [
17614 - "default.handlebars->31->1322"
17625 + "default.handlebars->31->1324"
17626 ]
17627 },
17628 {
@@ -17631,7 +17642,7 @@
17642 "zh-chs": "法文(瑞士)",
17643 "zh-cht": "法語(瑞士)",
17644 "xloc": [
17634 - "default.handlebars->31->1328"
17645 + "default.handlebars->31->1330"
17646 ]
17647 },
17648 {
@@ -17651,7 +17662,7 @@
17662 "zh-chs": "弗里斯兰文",
17663 "zh-cht": "弗里斯蘭語",
17664 "xloc": [
17654 - "default.handlebars->31->1329"
17665 + "default.handlebars->31->1331"
17666 ]
17667 },
17668 {
@@ -17671,7 +17682,7 @@
17682 "zh-chs": "弗留利",
17683 "zh-cht": "弗留利",
17684 "xloc": [
17674 - "default.handlebars->31->1330"
17685 + "default.handlebars->31->1332"
17686 ]
17687 },
17688 {
@@ -17695,9 +17706,9 @@
17706 "default-mobile.handlebars->11->543",
17707 "default-mobile.handlebars->11->556",
17708 "default-mobile.handlebars->11->576",
17698 - "default.handlebars->31->1525",
17699 - "default.handlebars->31->1683",
17700 - "default.handlebars->31->2070"
17709 + "default.handlebars->31->1527",
17710 + "default.handlebars->31->1685",
17711 + "default.handlebars->31->2072"
17712 ]
17713 },
17714 {
@@ -17717,7 +17728,7 @@
17728 "zh-chs": "完整管理员(保留所有权利)",
17729 "zh-cht": "完整管理員(保留所有權利)",
17730 "xloc": [
17720 - "default.handlebars->31->1720"
17731 + "default.handlebars->31->1722"
17732 ]
17733 },
17734 {
@@ -17754,7 +17765,7 @@
17765 "zh-chs": "完整设备权限",
17766 "zh-cht": "完整裝置權限",
17767 "xloc": [
17757 - "default.handlebars->31->790"
17768 + "default.handlebars->31->792"
17769 ]
17770 },
17771 {
@@ -17774,7 +17785,7 @@
17785 "zh-chs": "全部权限",
17786 "zh-cht": "全部權限",
17787 "xloc": [
17777 - "default.handlebars->31->809"
17788 + "default.handlebars->31->811"
17789 ]
17790 },
17791 {
@@ -17837,7 +17848,7 @@
17848 "zh-chs": "完整管理员",
17849 "zh-cht": "完整管理員",
17850 "xloc": [
17840 - "default.handlebars->31->2168"
17851 + "default.handlebars->31->2170"
17852 ]
17853 },
17854 {
@@ -17857,8 +17868,8 @@
17868 "zh-chs": "全自动的",
17869 "zh-cht": "全自動的",
17870 "xloc": [
17860 - "default.handlebars->31->1599",
17861 - "default.handlebars->31->1622"
17871 + "default.handlebars->31->1601",
17872 + "default.handlebars->31->1624"
17873 ]
17874 },
17875 {
@@ -17879,7 +17890,7 @@
17890 "zh-cht": "GPU",
17891 "xloc": [
17892 "default-mobile.handlebars->11->500",
17882 - "default.handlebars->31->1190"
17893 + "default.handlebars->31->1192"
17894 ]
17895 },
17896 {
@@ -17899,7 +17910,7 @@
17910 "zh-chs": "盖尔文(爱尔兰)",
17911 "zh-cht": "蓋爾語(愛爾蘭)",
17912 "xloc": [
17902 - "default.handlebars->31->1332"
17913 + "default.handlebars->31->1334"
17914 ]
17915 },
17916 {
@@ -17919,7 +17930,7 @@
17930 "zh-chs": "盖尔文(苏格兰文)",
17931 "zh-cht": "蓋爾語(蘇格蘭語)",
17932 "xloc": [
17922 - "default.handlebars->31->1331"
17933 + "default.handlebars->31->1333"
17934 ]
17935 },
17936 {
@@ -17939,7 +17950,7 @@
17950 "zh-chs": "加拉契文",
17951 "zh-cht": "加拉契語",
17952 "xloc": [
17942 - "default.handlebars->31->1333"
17953 + "default.handlebars->31->1335"
17954 ]
17955 },
17956 {
@@ -18065,7 +18076,7 @@
18076 "zh-chs": "格鲁吉亚文",
18077 "zh-cht": "格魯吉亞文",
18078 "xloc": [
18068 - "default.handlebars->31->1334"
18079 + "default.handlebars->31->1336"
18080 ]
18081 },
18082 {
@@ -18085,7 +18096,7 @@
18096 "zh-chs": "德文(奥地利)",
18097 "zh-cht": "德語(奧地利)",
18098 "xloc": [
18088 - "default.handlebars->31->1336"
18099 + "default.handlebars->31->1338"
18100 ]
18101 },
18102 {
@@ -18105,7 +18116,7 @@
18116 "zh-chs": "德文(德国)",
18117 "zh-cht": "德文(德國)",
18118 "xloc": [
18108 - "default.handlebars->31->1337"
18119 + "default.handlebars->31->1339"
18120 ]
18121 },
18122 {
@@ -18125,7 +18136,7 @@
18136 "zh-chs": "德文(列支敦士登)",
18137 "zh-cht": "德文(列支敦士登)",
18138 "xloc": [
18128 - "default.handlebars->31->1338"
18139 + "default.handlebars->31->1340"
18140 ]
18141 },
18142 {
@@ -18145,7 +18156,7 @@
18156 "zh-chs": "德文(卢森堡)",
18157 "zh-cht": "德語(盧森堡)",
18158 "xloc": [
18148 - "default.handlebars->31->1339"
18159 + "default.handlebars->31->1341"
18160 ]
18161 },
18162 {
@@ -18165,7 +18176,7 @@
18176 "zh-chs": "德文(标准)",
18177 "zh-cht": "德語(標準)",
18178 "xloc": [
18168 - "default.handlebars->31->1335"
18179 + "default.handlebars->31->1337"
18180 ]
18181 },
18182 {
@@ -18185,7 +18196,7 @@
18196 "zh-chs": "德文(瑞士)",
18197 "zh-cht": "德文(瑞士)",
18198 "xloc": [
18188 - "default.handlebars->31->1340"
18199 + "default.handlebars->31->1342"
18200 ]
18201 },
18202 {
@@ -18205,7 +18216,7 @@
18216 "zh-chs": "获取此设备的MQTT登录凭证。",
18217 "zh-cht": "獲取此裝置的MQTT登入憑證。",
18218 "xloc": [
18208 - "default.handlebars->31->754"
18219 + "default.handlebars->31->756"
18220 ]
18221 },
18222 {
@@ -18246,7 +18257,7 @@
18257 "zh-chs": "正在获取剪贴板内容,{0}个字节",
18258 "zh-cht": "正在獲取剪貼板內容,{0}個字節",
18259 "xloc": [
18249 - "default.handlebars->31->1859"
18260 + "default.handlebars->31->1861"
18261 ]
18262 },
18263 {
@@ -18308,7 +18319,7 @@
18319 "zh-chs": "好",
18320 "zh-cht": "好",
18321 "xloc": [
18311 - "default.handlebars->31->1521"
18322 + "default.handlebars->31->1523"
18323 ]
18324 },
18325 {
@@ -18353,8 +18364,8 @@
18364 "zh-chs": "Google云端硬盘备份",
18365 "zh-cht": "Google雲端硬盤備份",
18366 "xloc": [
18356 - "default.handlebars->31->1542",
18357 - "default.handlebars->31->1545",
18367 + "default.handlebars->31->1544",
18368 + "default.handlebars->31->1547",
18369 "default.handlebars->31->232"
18370 ]
18371 },
@@ -18375,7 +18386,7 @@
18386 "zh-chs": "Google云端硬盘控制台",
18387 "zh-cht": "Google雲端硬盤控制台",
18388 "xloc": [
18378 - "default.handlebars->31->1539"
18389 + "default.handlebars->31->1541"
18390 ]
18391 },
18392 {
@@ -18415,7 +18426,7 @@
18426 "zh-chs": "Google云端硬盘备份当前处于活动状态。",
18427 "zh-cht": "Google雲端硬盤備份當前處於活動狀態。",
18428 "xloc": [
18418 - "default.handlebars->31->1543"
18429 + "default.handlebars->31->1545"
18430 ]
18431 },
18432 {
@@ -18443,7 +18454,7 @@
18454 "zh-chs": "希腊文",
18455 "zh-cht": "希臘文",
18456 "xloc": [
18446 - "default.handlebars->31->1341"
18457 + "default.handlebars->31->1343"
18458 ]
18459 },
18460 {
@@ -18485,8 +18496,8 @@
18496 "zh-chs": "集体指令",
18497 "zh-cht": "集體指令",
18498 "xloc": [
18488 - "default.handlebars->31->2014",
18489 - "default.handlebars->31->2093",
18499 + "default.handlebars->31->2016",
18500 + "default.handlebars->31->2095",
18501 "default.handlebars->31->526",
18502 "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar",
18503 "default.handlebars->container->column_l->p4->3->1->0->3->3",
@@ -18510,7 +18521,7 @@
18521 "zh-chs": "通过...分组",
18522 "zh-cht": "通過...分群",
18523 "xloc": [
18513 - "default.handlebars->31->1962"
18524 + "default.handlebars->31->1964"
18525 ]
18526 },
18527 {
@@ -18530,7 +18541,7 @@
18541 "zh-chs": "组标识符",
18542 "zh-cht": "群標識符",
18543 "xloc": [
18533 - "default.handlebars->31->2110"
18544 + "default.handlebars->31->2112"
18545 ]
18546 },

This file is too large to show in full.

views/default.handlebars
+18 -1
@@ -2480,6 +2480,12 @@
2480 if (node != null) { rdpurl += '&name=' + encodeURIComponentEx(node.name); }
2481 if (message.localRelay) { rdpurl += '&local=1'; }
2482 safeNewWindow(rdpurl, 'mcmstsc/' + message.nodeid);
2483 + } else if (message.tag == 'ssh') {
2484 + var sshurl = window.location.origin + domainUrl + 'ssh.html?ws=' + message.cookie + (urlargs.key?('&key=' + urlargs.key):'');
2485 + var node = getNodeFromId(message.nodeid);
2486 + if (node != null) { sshurl += '&name=' + encodeURIComponentEx(node.name); }
2487 + if (message.localRelay) { sshurl += '&local=1'; }
2488 + safeNewWindow(sshurl, 'mcssh/' + message.nodeid);
2489 }
2490 break;
2491 }
@@ -6442,7 +6448,7 @@
6448
6449 // noVNC link
6450 if ((((connectivity & 1) != 0) || (node.mtype == 3)) && (node.agent) && ((meshrights & 8) != 0) && ((features & 0x20000000) == 0) && (node.agent.id != 14)) {
6445 - x += '<a href=# cmenu=rfbPortContextMenu id=rfbLink onclick=p10rfb("' + node._id + '") title="' + "Launch noVNC session to this device" + '.">' + "noVNC" + '</a>&nbsp;';
6451 + x += '<a href=# cmenu=rfbPortContextMenu id=rfbLink onclick=p10rfb("' + node._id + '") title="' + "Launch web-based VNC session to this device" + '.">' + "Web-VNC" + '</a>&nbsp;';
6452 }
6453
6454 // MSTSC.js link
@@ -6450,6 +6456,11 @@
6456 x += '<a href=# cmenu=altPortContextMenu id=mstscLink onclick=p10mstsc("' + node._id + '") title="' + "Launch web-based RDP session to this device" + '.">' + "Web-RDP" + '</a>&nbsp;';
6457 }
6458
6459 + // SSH link
6460 + if ((((connectivity & 1) != 0) || (node.mtype == 3)) && (node.agent) && ((meshrights & 8) != 0) && ((features & 0x40000000) == 0) && (node.agent.id != 14)) {
6461 + x += '<a href=# cmenu=altPortContextMenu id=sshLink onclick=p10ssh("' + node._id + '") title="' + "Launch web-based SSH session to this device" + '.">' + "Web-SSH" + '</a>&nbsp;';
6462 + }
6463 +
6464 // MQTT options
6465 if ((meshrights == 0xFFFFFFFF) && (features & 0x00400000)) { x += '<a href=# onclick=p10showMqttLoginDialog("' + node._id + '") title="' + "Get MQTT login credentials for this device." + '">' + "MQTT Login" + '</a>&nbsp;'; }
6466 x += '</div><br>'
@@ -7224,6 +7235,12 @@
7235 meshserver.send({ action: 'getcookie', nodeid: nodeid, tcpport: port, tag: 'mstsc' });
7236 }
7237
7238 + function p10ssh(nodeid, port) {
7239 + var node = getNodeFromId(nodeid);
7240 + if (port == null) { if (node.sshport != null) { port = node.sshport; } else { port = 22; } }
7241 + meshserver.send({ action: 'getcookie', nodeid: nodeid, tcpport: port, tag: 'ssh' });
7242 + }
7243 +
7244 // Show current location
7245 var d2map = null;
7246 function p10showNodeLocationDialog() {
views/ssh.handlebars new
+212
@@ -0,0 +1,212 @@
1 +<!DOCTYPE html>
2 +<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
3 +<head lang="en">
4 + <meta http-equiv="X-UA-Compatible" content="IE=edge" />
5 + <meta content="text/html;charset=utf-8" http-equiv="Content-Type" />
6 + <meta name="viewport" content="user-scalable=1.0,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0" />
7 + <meta name="apple-mobile-web-app-capable" content="yes" />
8 + <meta name="format-detection" content="telephone=no" />
9 + <meta name="robots" content="noindex,nofollow">
10 + <link type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS" />
11 + <link type="text/css" href="styles/xterm.css" media="screen" rel="stylesheet" title="CSS" />
12 + <link rel="apple-touch-icon" href="/favicon-303x303.png" />
13 + <script type="text/javascript" src="scripts/common-0.0.1{{min}}.js"></script>
14 + <script type="text/javascript" src="scripts/meshcentral{{min}}.js"></script>
15 + <script type="text/javascript" src="scripts/agent-redir-ws-0.1.1{{min}}.js"></script>
16 + <script type="text/javascript" src="scripts/agent-redir-rtc-0.1.0{{min}}.js"></script>
17 + <script type="text/javascript" src="scripts/xterm-min.js"></script>
18 + <script type="text/javascript" src="scripts/xterm-addon-fit-min.js"></script>
19 + <title>SSH</title>
20 +</head>
21 +<body style="overflow:hidden;background-color:black" onload="start()">
22 + <div id=p11 class="noselect" style="overflow:hidden">
23 + <div id=deskarea0 style="position:relative">
24 + <div id=deskarea1 class="areaHead">
25 + <div class="toright2">
26 + </div>
27 + <div>
28 + <input id="ConnectButton" style="display:none" type=button value="Connect" onclick="connectButton()">
29 + <input id="DisconnectButton" type=button value="Disconnect" onclick="connectButton()">
30 + <span><b>{{{name}}}</b></span> - <span id="termstatus"></span>
31 + </div>
32 + </div>
33 + <div id=deskarea2 style="">
34 + <div class="areaProgress"><div id="progressbar" style=""></div></div>
35 + </div>
36 + <div id=deskarea3x style="max-height:calc(100vh - 54px);height:calc(100vh - 54px);">
37 + <div id="bigok" style="display:none;left:calc((100vh / 2))"><b>&checkmark;</b></div>
38 + <div id="bigfail" style="display:none;left:calc((100vh / 2))"><b>&#10007;</b></div>
39 + <div id="metadatadiv" style="padding:20px;color:lightgrey;text-align:left;display:none"></div>
40 + <div id=terminal style="max-height:calc(100vh - 54px);height:calc(100vh - 54px);"></div>
41 + <div id=TermConsoleMsg style="display:none;cursor:pointer;z-index:10;position:absolute;left:30px;top:17px;color:yellow;background-color:rgba(0,0,0,0.6);padding:10px;border-radius:5px" onclick=clearConsoleMsg()></div>
42 + </div>
43 + <div id=deskarea4 class="areaHead">
44 + <div class="toright2">
45 + </div>
46 + <div style="height:21px;max-height:21px">
47 + </div>
48 + </div>
49 + </div>
50 + <div id=dialog class="noselect" style="display:none">
51 + <div id=dialogHeader>
52 + <div tabindex=0 id=id_dialogclose onclick=setDialogMode() onkeypress="if (event.key == 'Enter') setDialogMode()">&#x2716;</div>
53 + <div id=id_dialogtitle></div>
54 + </div>
55 + <div id=dialogBody>
56 + <div id=dialog1>
57 + <div id=id_dialogMessage style=""></div>
58 + </div>
59 + <div id=dialog2 style="">
60 + <div id=id_dialogOptions></div>
61 + </div>
62 + </div>
63 + <div id="idx_dlgButtonBar">
64 + <input id="idx_dlgCancelButton" type="button" value="Cancel" style="" onclick="dialogclose(0)">
65 + <input id="idx_dlgOkButton" type="button" value="OK" style="" onclick="dialogclose(1)">
66 + <div><input id="idx_dlgDeleteButton" type="button" value="Delete" style="display:none" onclick="dialogclose(2)"></div>
67 + </div>
68 + </div>
69 + </div>
70 + <script>
71 + var term = null;
72 + var termfit = null;
73 + var resizeTimer = null;
74 + var urlargs = parseUriArgs();
75 + if (urlargs.key && (isAlphaNumeric(urlargs.key) == false)) { delete urlargs.key; }
76 + var cookie = '{{{cookie}}}';
77 + var domainurl = '{{{domainurl}}}';
78 + var name = decodeURIComponent('{{{name}}}');
79 + if (name != '') { document.title = name + ' - ' + document.title; }
80 + var StatusStrs = ["Disconnected", "Connecting...", "Setup...", "Connected"];
81 + var state = 0;
82 + var socket = null;
83 +
84 + function start() {
85 + // When the user resizes the window, re-fit
86 + window.onresize = function () { if (termfit != null) { termfit.fit(); } }
87 +
88 + // Update the terminal status and buttons
89 + updateState();
90 +
91 + // Setup the terminal with auto-fit
92 + if (term != null) { term.dispose(); }
93 + if (urlargs.fixsize != 1) { termfit = new FitAddon.FitAddon(); }
94 + term = new Terminal();
95 + if (termfit) { term.loadAddon(termfit); }
96 + term.open(Q('terminal'));
97 + term.onData(function (data) {
98 + //if (tunnel != null) { tunnel.sendText(data); }
99 + });
100 + if (termfit) { termfit.fit(); }
101 + term.onResize(function (size) {
102 + // Despam resize
103 + if (resizeTimer) clearTimeout(resizeTimer);
104 + resizeTimer = setTimeout(sendResize, 200);
105 + });
106 + //term.setOption('convertEol', true); // Consider \n to be \r\n, this should be taken care of by "termios"
107 + }
108 +
109 + // Send the new terminal size to the agent
110 + function sendResize() {
111 + resizeTimer = null;
112 + //if ((term != null) && (tunnel != null)) { tunnel.sendCtrlMsg(JSON.stringify({ ctrlChannel: '102938', type: 'termsize', cols: term.cols, rows: term.rows })); }
113 + }
114 +
115 + function connectButton() {
116 + if (state == 0) {
117 + state = 1;
118 + var url = window.location.protocol.replace('http', 'ws') + '//' + window.location.host + domainurl + 'ssh/relay.ashx?auth=' + cookie + (urlargs.key ? ('&key=' + urlargs.key) : '');
119 + console.log('Connecting to ' + url);
120 + socket = new WebSocket(url);
121 + socket.onopen = function (e) { console.log('open'); state = 2; updateState(); }
122 + socket.onmessage = function (e) { console.log('message'); }
123 + socket.onclose = function (e) { console.log('close'); disconnect(); }
124 + socket.onerror = function (e) { console.log('error'); disconnect(); }
125 + updateState();
126 + } else {
127 + disconnect();
128 + }
129 + }
130 +
131 + function disconnect() {
132 + console.log('disconnect');
133 + if (socket != null) { socket.close(); socket = null; }
134 + state = 0;
135 + updateState();
136 + }
137 +
138 + function updateState() {
139 + QV('ConnectButton', state == 0);
140 + QV('DisconnectButton', state != 0);
141 + QH('termstatus', StatusStrs[state]);
142 + }
143 +
144 +
145 + //
146 + // POPUP DIALOG
147 + //
148 +
149 + // null = Hidden, 1 = Generic Message
150 + var xxdialogMode;
151 + var xxdialogFunc;
152 + var xxdialogButtons;
153 + var xxdialogTag;
154 + var xxcurrentView = -1;
155 +
156 + // Display a dialog box
157 + // Parameters: Dialog Mode (0 = none), Dialog Title, Buttons (1 = OK, 2 = Cancel, 3 = OK & Cancel), Call back function(0 = Cancel, 1 = OK), Dialog Content (Mode 2 only)
158 + function setDialogMode(x, y, b, f, c, tag) {
159 + xxdialogMode = x;
160 + xxdialogFunc = f;
161 + xxdialogButtons = b;
162 + xxdialogTag = tag;
163 + QE('idx_dlgOkButton', true);
164 + QV('idx_dlgOkButton', b & 1);
165 + QV('idx_dlgCancelButton', b & 2);
166 + QV('id_dialogclose', (b & 2) || (b & 8));
167 + QV('idx_dlgDeleteButton', b & 4);
168 + QV('idx_dlgButtonBar', b & 7);
169 + if (y) QH('id_dialogtitle', y);
170 + for (var i = 1; i < 3; i++) { QV('dialog' + i, i == x); } // Edit this line when more dialogs are added
171 + QV('dialog', x);
172 + if (c) { if (x == 2) { QH('id_dialogOptions', c); } else { QH('id_dialogMessage', c); } }
173 + }
174 +
175 + // Called when the dialog box must be closed
176 + function dialogclose(x) {
177 + var f = xxdialogFunc, b = xxdialogButtons, t = xxdialogTag;
178 + setDialogMode();
179 + if (((b & 8) || x) && f) f(x, t);
180 + }
181 +
182 + function messagebox(t, m) { setSessionActivity(); QH('id_dialogMessage', m); setDialogMode(1, t, 1); }
183 + function statusbox(t, m) { setSessionActivity(); QH('id_dialogMessage', m); setDialogMode(1, t); }
184 + function haltEvent(e) { if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); return false; }
185 + function pad2(num) { var s = '00' + num; return s.substr(s.length - 2); }
186 + function format(format) { var args = Array.prototype.slice.call(arguments, 1); return format.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] != 'undefined' ? args[number] : match; }); };
187 + function isAlphaNumeric(str) { return (str.match(/^[A-Za-z0-9]+$/) != null); };
188 + function isSafeString(str) { return ((typeof str == 'string') && (str.indexOf('<') == -1) && (str.indexOf('>') == -1) && (str.indexOf('&') == -1) && (str.indexOf('"') == -1) && (str.indexOf('\'') == -1) && (str.indexOf('+') == -1) && (str.indexOf('(') == -1) && (str.indexOf(')') == -1) && (str.indexOf('#') == -1) && (str.indexOf('%') == -1) && (str.indexOf(':') == -1)) };
189 +
190 + // Parse URL arguments, only keep safe values
191 + function parseUriArgs() {
192 + var href = window.document.location.href;
193 + if (href.endsWith('#')) { href = href.substring(0, href.length - 1); }
194 + var name, r = {}, parsedUri = href.split(/[\?&|\=]/);
195 + parsedUri.splice(0, 1);
196 + for (x in parsedUri) {
197 + switch (x % 2) {
198 + case 0: { name = decodeURIComponent(parsedUri[x]); break; }
199 + case 1: {
200 + r[name] = decodeURIComponent(parsedUri[x]);
201 + if (!isSafeString(r[name])) { delete r[name]; } else { var x = parseInt(r[name]); if (x == r[name]) { r[name] = x; } }
202 + break;
203 + } default: { break; }
204 + }
205 + }
206 + return r;
207 + }
208 +
209 + start();
210 + </script>
211 +</body>
212 +</html>
\ No newline at end of file
webserver.js
+24 -8
@@ -1801,8 +1801,8 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1801 render(req, res, getRenderPage('invite', req, domain), getRenderArgs({ messageid: 100 }, req, domain)); // Bad invitation code
1802 }
1803
1804 - // Called to render the MSTSC (RDP) web page
1805 - function handleMSTSCRequest(req, res) {
1804 + // Called to render the MSTSC (RDP) or SSH web page
1805 + function handleMSTSCRequest(req, res, page) {
1806 const domain = getDomain(req);
1807 if (domain == null) { parent.debug('web', 'handleMSTSCRequest: failed checks.'); res.sendStatus(404); return; }
1808 if ((domain.loginkey != null) && (domain.loginkey.indexOf(req.query.key) == -1)) { res.sendStatus(404); return; } // Check 3FA URL key
@@ -1817,7 +1817,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1817 // This is a query with a websocket relay cookie, check that the cookie is valid and use it.
1818 var rcookie = parent.decodeCookie(req.query.ws, parent.loginCookieEncryptionKey, 60); // Cookie with 1 hour timeout
1819 if ((rcookie != null) && (rcookie.domainid == domain.id) && (rcookie.nodeid != null) && (rcookie.tcpport != null)) {
1820 - render(req, res, getRenderPage('mstsc', req, domain), getRenderArgs({ cookie: req.query.ws, name: encodeURIComponent(req.query.name).replace(/'/g, '%27') }, req, domain)); return;
1820 + render(req, res, getRenderPage(page, req, domain), getRenderArgs({ cookie: req.query.ws, name: encodeURIComponent(req.query.name).replace(/'/g, '%27') }, req, domain)); return;
1821 }
1822 }
1823
@@ -1852,7 +1852,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1852 }
1853
1854 // If there is no nodeid, exit now
1855 - if (req.query.node == null) { render(req, res, getRenderPage('mstsc', req, domain), getRenderArgs({ cookie: '', name: '' }, req, domain)); return; }
1855 + if (req.query.node == null) { render(req, res, getRenderPage(page, req, domain), getRenderArgs({ cookie: '', name: '' }, req, domain)); return; }
1856
1857 // Fetch the node from the database
1858 obj.db.Get(req.query.node, function (err, nodes) {
@@ -1864,15 +1864,21 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
1864
1865 // Figure out the target port
1866 var port = 3389;
1867 - if (typeof node.rdpport == 'number') { port = node.rdpport; }
1867 + if (page == 'ssh') {
1868 + // SSH port
1869 + port = 22;
1870 + } else {
1871 + // RDP port
1872 + if (typeof node.rdpport == 'number') { port = node.rdpport; }
1873 + }
1874 if (req.query.port != null) { var qport = 0; try { qport = parseInt(req.query.port); } catch (ex) { } if ((typeof qport == 'number') && (qport > 0) && (qport < 65536)) { port = qport; } }
1875
1876 // Generate a cookie and respond
1877 var cookie = parent.encodeCookie({ userid: user._id, domainid: user.domain, nodeid: node._id, tcpport: port }, parent.loginCookieEncryptionKey);
1872 - render(req, res, getRenderPage('mstsc', req, domain), getRenderArgs({ cookie: cookie, name: encodeURIComponent(node.name).replace(/'/g, '%27') }, req, domain));
1878 + render(req, res, getRenderPage(page, req, domain), getRenderArgs({ cookie: cookie, name: encodeURIComponent(node.name).replace(/'/g, '%27') }, req, domain));
1879 });
1880 }
1875 -
1881 +
1882 // Called to handle push-only requests
1883 function handleFirebasePushOnlyRelayRequest(req, res) {
1884 parent.debug('email', 'handleFirebasePushOnlyRelayRequest');
@@ -5561,7 +5567,7 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5567
5568 // Setup MSTSC.js if needed
5569 if (domain.mstsc === true) {
5564 - obj.app.get(url + 'mstsc.html', handleMSTSCRequest);
5570 + obj.app.get(url + 'mstsc.html', function (req, res) { handleMSTSCRequest(req, res, 'mstsc'); });
5571 obj.app.ws(url + 'mstsc/relay.ashx', function (ws, req) {
5572 const domain = getDomain(req);
5573 if (domain == null) { parent.debug('web', 'mstsc: failed checks.'); try { ws.close(); } catch (e) { } return; }
@@ -5569,6 +5575,16 @@ module.exports.CreateWebServer = function (parent, db, args, certificates) {
5575 });
5576 }
5577
5578 + // Setup SSH if needed
5579 + if (domain.mstsc === true) {
5580 + obj.app.get(url + 'ssh.html', function (req, res) { handleMSTSCRequest(req, res, 'ssh'); });
5581 + obj.app.ws(url + 'ssh/relay.ashx', function (ws, req) {
5582 + const domain = getDomain(req);
5583 + if (domain == null) { parent.debug('web', 'ssh: failed checks.'); try { ws.close(); } catch (e) { } return; }
5584 + require('./ssh.js').CreateSshRelay(obj, obj.db, ws, req, obj.args, domain);
5585 + });
5586 + }
5587 +
5588 // Setup firebase push only server
5589 if ((obj.parent.firebase != null) && (obj.parent.config.firebase)) {
5590 if (obj.parent.config.firebase.pushrelayserver) { parent.debug('email', 'Firebase-pushrelay-handler'); obj.app.post(url + 'firebaserelay.aspx', handleFirebasePushOnlyRelayRequest); }