Updated minifications.
Ylian Saint-Hilaire committed
Sep 23, 2019 at 16:47 UTC
cd3e3997aa518d52a58dc8364dbf84944d3d4489
38 files changed
+5050
-1
agents/meshcmd.min.js
new
+2496
@@ -0,0 +1,2496 @@
1
+/*
2
+Copyright 2018-2019 Intel Corporation
3
+
4
+Licensed under the Apache License, Version 2.0 (the "License");
5
+you may not use this file except in compliance with the License.
6
+You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+Unless required by applicable law or agreed to in writing, software
11
+distributed under the License is distributed on an "AS IS" BASIS,
12
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+See the License for the specific language governing permissions and
14
+limitations under the License.
15
+*/
16
+
17
+/**
18
+* @description MeshCmd, command line tool for Intel AMT and MeshCentral.
19
+* @author Ylian Saint-Hilaire
20
+* @version v0.2.0
21
+*/
22
+
23
+// Debug Stuff
24
+//console.displayFinalizerMessages = 1; // Display objects that have event listeners that are disposed.
25
+//console.displayStreamPipeMessages = 1; // Display stream pipe and un-pipes
26
+//var __gc = setInterval(function () { console.log('GC'); _debugGC() }, 2000); //
27
+
28
+
29
+var fs = require('fs');
30
+var os = require('os');
31
+var net = require('net');
32
+var http = require('http');
33
+var dgram = require('dgram');
34
+var httpHeaders = require('http-headers');
35
+var tcpserver = null;
36
+var broadcastSockets = {};
37
+var multicastSockets = {};
38
+var discoveryInterval = null;
39
+var membershipIPv4 = '239.255.255.235';
40
+var membershipIPv6 = 'FF02:0:0:0:0:0:0:FE';
41
+var settings = null;
42
+var meshCmdVersion = '***Mesh*Cmd*Version***'; // Dynamically replaced with MeshCentral version
43
+var amtLms = null, amtMei = null, amtMeiState = null;
44
+var wsstack = null, amtstack = null;
45
+var oswsstack = null, osamtstack = null;
46
+var amtMeiTmpState = null;
47
+var SMBiosTables = null;
48
+var globalDebugFlags = 0; // 1 = IDER Debug
49
+var pendingAmtConfigActions = 0;
50
+var RCSMessageProtocolVersion = 1; // RCS Message Protocol Version. Needs to be less than or equal to RCS server Message Protocol Version
51
+
52
+// MeshCommander for Firmware (GZIP'ed, Base64) v0.7.8
53
+var Large_IntelAmtWebApp_etag = "zVObfGF4CXPIxvxSUu+3";
54
+var Large_IntelAmtWebApp = "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";
55
+var Medium_IntelAmtWebApp_etag = "IeB7H1GRGwkVlI3IGH5z";
56
+var Medium_IntelAmtWebApp = "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";
57
+var Small_IntelAmtWebApp_etag = "Ci0RenuglliDcxGQPFS+";
58
+var Small_IntelAmtWebApp = "H4sIAAAAAAAEAHq/e7+Noou/c0hkgCuA0+rcdhMHwq/CcXohAVwD4W7vve/fAQ2gc4WkFXILx+++kuUCgdRbrdHMN/0Dr9I1u3lp/3qN3jNMK6RlpeMwCO4ZOQK5eVmjBqOopY//rekm/df/6zP/C1FL0DRj6OWCa+Q6nXz3VYqkxIkzuco17vRz6yPJK1AN6nStC3816YJ+4ZT9P/cST/YcakwLoWrQPkGNuaaCd1EZykpwTLkwLhnlt55Clk6oUZl42gCltIYSn0teepXCIp0Q0BBfhEkGDS5mT+nfn//y+zb44ZtSpAbpWIibTJB926lGUsPO757FBlXBxDauKCHIk0KY8AuoKdvHoCiwp16FbIOa5vDUa4A3foOKFk6xoa8wfiF1kgsmVJwxyG+TzPwplVhzEm8rqtH4VCXlvhYyDs4HhoW+npQJyB79LWa3VBvVdV75OTAm1jrmguPlam3cmxAY5ueLW9uUEXktXo1Jm6FwIDgw2rrQTFASCKG8jAMjhgxZS2gjGexNusKk61LfUk7E1s5IJ3+/e5eMAG4p0ZVrhMOOK9uQdgBRmQIxW6TktfPR4wHiDW2oRtLas08wFwrsoLl0nM2dYFZYVTtj76PnQjnJ5vN5cqjC9tr2MJTaTcHWzVMmGOkNQrfVc7nrzkEYXM+Z0FrU8cJIDlXU9gfrvR0s+g4WA3zTPtm+xWI2tOiPZ2QD1KQfoJFUQ8m5dmvVmGCloFyj6i7GHQBIDs8sNRk9KRp67EJBd0gStyinDTmvxmlpF0u56wEF00XiHZ5JJUqFTZPBGJwzG0eMhoAmMsp7tZqZfhkpE2Xb1c2yDLK5uwjfeONpS0OeVjHXZqsryshDQcijngGuEAs0BsWasRwZG03jhdxd4nddulRK7gZkdnhWA+UfARbOF0O4897airiymXvLi8wHRkseG1DjksPGNWHcoTHu+XMU4BxmQhFU13HzGsEo8e58Hnyx+PqLEXeDxnXOjHIE5ZcKCEWuH2rhOadPvTtZQcIi94J7T0919ywHPXLRh+2ZoEITQmB+7f/VZT1sqd++l0fa9xsJOcZcbBXIpL8KzlHUG7Fp1N/HoAc5sFevU5ERBe3g2WOkYevqel7r8FJYU5t9cmRCV1Ebh7WI2hHh9INhpm9i8zur6SpaZsOkGqkQSO+B3XlEDHDOKWpaozqF14nrDmQ5YDi0O18Yy7pTxqXUViRkl+aj4M0sfOeLlf0e513XVUv0DjRqR4z6WltQvH2TrzywX5aacsHD9lQXy9rncs17TOYrlAj2gX761L07vj3Fa8Uedt+mSlqc36b+55UqFtwEwvC79FSPW/0fQSZMYCDG3iaExS1GJi9f9/a8v14/c7u5bpM8pgACLO6AhfvqOiOHbq76m7M71fbncyxUXtmb220fqWKsq7tz0+tcJs8aHNdByros3BaTcHS5dDodZYwQUACYggVfSwD68lw15Tlren2b78LjjoJKKccLtK5Ss1KYxwx8PyJ2r2057jJLRkMKU51UDlJzXyKKVyYjbRzZtG21KoIFn6dEtPjADRwPlIsdPjpXM8doT5DT6cTAIYz2pckcl0fLmzZBQrA5Es09CJ3HQ1+P2zB3fRfI8e2jJ98V7z+o4owScMiay4KTFgCc3xXkfyloqtJ8VqMDyE2ZVItNk5Q7wYLlQLJbd6N7voyABSfZtc38uLs3rf5qF+ZEXOdw9JLjMiUmVGC3b3+xHTwo27lpgEUDI9yeJvI/2en8zj74i/1ChtYhsIoNN+s2qe/QwtRzHw1vUKea9BGkvlj6w3ire02MN+5AetYzVNLp1QRKI4mugogEhpu8isLIE5Y2XBlwrIZ6XLCSeuvMnUAj+iILVsaqd8xwtv5EvZXoNY4z+VfRZi6YIeAj5zR4l87Rw6+5lvS19zq2AC+OnbGcbtjj3VcllxVZUQzusMd3zQSpVP9SqVSlKsmnjE6C0do+crp462cybvTBCURJmWg41raTFoY6iC2Fvv1VnsowyAPXiolOgwcNBvOBvelBA57RrfhPECmIsnIZHbmM4rcG0akegcCfVwQEAo23frZTxCfltJWQCQxK7TgbzJ6JE5x6xf7DnBtFSZRHfmxMj0AaU3oEoUqmR3or22zcaPgvAg59BOcqo83/In4yPovFwk+4oo+4baVAesgT1l/263YRmFPlKAkMN/jBHmVdC9jtiyOKtV7griXNCX5qNoJLLxIewHKaYbW7O6G5DdFsaye4TlO43WbXbQjn7Da7XlO4nWb3by+0SqdntEqnJ7Gc3rNYTjOsttPbBc1tiNZ1dkHrNETrD3ZB6zZEs63OLnC9pnDuLnYCkeo/CLmNYt5XxC1SRgKlkfFoQfdEikfSpR9E+dNej/8BhYNK3t6WWav1E8HkQzsEQSLCk2I/L9IcQogeAkyZpwijPPG8Ff/hrPnvYAj/xcxzI/ZhtyFUbJ62/Dz3g/sFx/qdBVkax6Aa53vnBbI2nRhKy3nLSf6PTcxm/1cr5lvw320Tw+4dVoz9by4ZimtYslefWTyfr/I8TfA02lEmAb+10yimGaZUv1KS2zxUS5VlNPbz6CvVvQdu/t+tw64iFh4/y05b6WK83L0eNKz2lCnhwDHNoQyABOZT5f18JIUZzvm6uQ76Sc1Luo70kq5T7yUB0GkO6Do7IbrNEXudHRCz+X/U9Ku7RCmbudZPhjzn+Ki4OzrOo5z/64Ky+1Ep9fFR0XgsKrppsko45/CkdeXv7fNLpzD6SqLwxCJB7DN2UpS3OSN/HlNsw8QBL+rW1S15JuPmwkfAqJB8FQW1kxYf1CJFJfGkVfyboy3XLG1NTKXLAYlsjR0MPxJiCaGRWimiy7k41SvF9ZqYCnIZDTlfPrL6T2TlIkxZ4UbOSuUwoGLpMFPEmxIwCbUeB/phSz8Blh3vPPWB9vDw8PgIWjXMLoKoPhPvr4RpSMIeCleUr/kCZ6Bg3nGX2usum6RJEEfBw8nf+Xv2vnfse7MnltMFmeV+vmLHR/56WGfbuI4YeEMXaU7JmLIHPlF1pLNloCPG/eFnIa8UUnKWiHtV8Hjq6N6W0T0xevKV65icp3cVQHsbIs4xTzO+fdUhgy0jBmLAJc2/pdkDmdE856tT1ctWfRZgHxnNyGkQcLvKYaBcIlZIAfd3DJe1GgCMVtdHtPIqRHYMNMu2tYugwa0fDMLSGJUbPKUCXrEl/cJEICGI4oG84yhZrvLibrsIJrAzV/SkNeMTIbMgi5Z5S2rmE/ctOCeFoeLG4JisbhnYo7ooPydztnxzPPduVknCCRHl+GhebCbkqg0DNQ093Fgm5drWayuxZo6KDrVgIKcvOgGlelnVNWhIYc67pbZbK54oHJBbP2aUu/Sff3h0+nbvTZ3+O5vc1/r+cB8xUha7fmE8V8kWYvey+3QVh2ROyWoZ+jkND3CMjwjVKeLbB3hswX4/OmKUd/MTRbtwmYdAE0NR7cgPv0Z83NOhz5aPfy3a+UKdXX6YnLdnp23Lsvrdn2M/uVvxvcR7aNK+zVrFo4sk5SA0yzhckqZLmlDek/P1ovlJ61/mfNQDDxwrbxlTn1ES3NPggdzTjHuGlQdblTvhudlQ7G0RD1+pRLeZv6CC1KklLQO7xRGKQTqUi+NLoxso+6H9iKYtyZec0b1diSP3tsZyWUqvWioM070/b5Gxye7gztGZOVuYYbO2P7jlG12+BtbdAtbbArYOBBqjHjJSmvpbeA+28dbdvwYx2IQYboGwt2peDRMagGNt49YxcBOl+sLW+gNxukByxwYgPU4LpHmmsXYcuXqPyEw/a+jZiOYIVSfEfcO3KeUmlVE2ju/29tVTmriNQrR1Xovc4O5hM1jUXi7IbWLKu8QjG+bHizTxzsCX/JzRuzfk9OIDuaFhlOF7rmWa5STNyPtPF+S2EJxEjPDZwxkzXK+M6x0QPkd0GyRPCU2AhET5YU2ccTqvrd7r9BvNToX0/280jKYmwwWoMElzsgRZacjl15UXMbaixC8oCCZXhxUNYvJB4xjFOLHEX/A8ofhL97ZSXkuRXbvDstZZCo7X4yv+Xepff2YzGo22nI/UpwSiQdnY0sthrFyvWTYnIjU7ad2kuZ9Tck5vlUNUmInWvTY/Y/6cxn6WYUivY3HD0Q08BItMssDzHMgXWJVTHXL7kN7dxZRA2kNYkFGakEUaUmD8QJ+WGeXYrYzyTZMU5w7sCdNvidaBB8UpsJJiccdUQEDz3j5qtJLYusvH7cfO0kvz2FeKPAmjnGSFNYaF4yMMyb5LbnXroSctYRtJjPKN7vkBhpL8nqLpM7Fg6a1oQsEXfnAfJbvouXUtmBduAvTTqvEhNfNAS1McWmDXrJ/meDTHpp1cKz4Q90Xl1IptBmWCHA5OdZQmCQ1yKVUy36NwQtj/Du1Jv3/SKn+1UIr1Vu5544gFBSoNNeePngXo+qiPtfPAJ1GGuoFe//OOAz/56jNgBFZHhJM76XUsvKQ+6Vil/2svGN4t+4F8Elp9rluEkDQB5AVNVpv6WKQrRoVGQvkT9Vj2rpbYt1pqPQt+SIU+/Fn2wkV1uvT/BHuEsk0xpVfyvqDhgSlHlSarLxyYK192VixXcS2ODLTXpQo1Fzdd5pF0OZb3OUqqTTY0/TZOv2ntjmj/uKy2uqL1vNrYEY0X1cauN7uPbvPfDF09b2pXW/re1Km2DLypW20ZetOOJrrlTbtak+1Ne1qT4037WpPrTQdaU8ebDrWmLpfT0tpAdltr6/M25/ioWBMlLIHpfx4bPX8S7uLNYXWBx3v6xN04Wgru5DW8MzRAj/Isbp/GeXtM450CCofnL3E4umanrqWI4NqFCCJjnaeP3lvIZclMROOq2HK8o453tfGfIvqNyxA/VQbjrsHKqp72bU8isbxWSWJcPX3cWlcNIz9O75B569/bURLSRzjJWYarnMlk8oZPoM3ufa7W38tLClED+aHX61W+gDgtvoD4w/QFhOHWxvDm1+6t3xhwX6uFKyyZo+R1Tz1/sCzX5dLhX9PpdBOfiFsXYq0L8W7XcLyUr3v1Z1h8eH2olUY3BXOrxFiJ2NOKD91t2QLOFJOKnqF6aTpO2NoDU8gpNEOwK+NETmKIldjrKsPdviY7PEutsTjHAKSynWfqNJT7fWVjhQ68roKPhAwrhc8AwGwKR8Bj558B5mreRxyoC/gM3tJn7Bs3HfQI5Z8ExIfEK6Y5t8X09rbVWKJr5PXrd4rkvL5IozSBiiMpRTPeywy2CYnhHaWk2SJiDOJNrRQbof48Dfy42ihLRHqsP02eygCGOpWouujeu8xPchqSNQnD3lUs5jUsPUscsbwtfrdBw8L3KDVFtV4urFjZn5uvysGvmu+nN6uMho+e4Ai3imsL+hbunl8voiRarBZkQOCbOz/Iacb4GTa/J6slX44DwrFoFviMHhCrPTwgvojnIhH6q7/54cef/vlnf7F88+ve/m/t7fu423wfG+yjWxybZ0VLvYVoS6wkWbqUlduJ9SXjZz9LQJsYIWfpokwECykYWfhPJKNsFXPpEgKPkLmyGBMagr5QJh8iZcQk94DkYEyJH5M0A5oHkillLkYLMzvcrszeazjF3oiD0CT/QB+fUSWfy2NMkzue1bR6LekAgmJ8kSaHe8YkLlkt5jRjV/wQg6lGq1A5gpNRGurO9Tkj6I2L6A6RUmCfFP9CltjL5WnmQa6ziOsQFk2M133JjPL5hgYCIRK/gclCRMYhxgq8oJMc0EKrGkEuzx3F+q+xoQK3kZJ4nfp8MjggI9gjZOqzXHOt0G/3kEBVUB+eyHVktsTJOu8OyDveKNhQlm9QD2QCBaAqtZ6l3Zx+lkLNuLfSEjbol0KRTzR7ElRV7Z/B0xEySYIUPGi9Ra4L+Oj6Ve3pvlwceFWdvlG4rJ35E75k2uL1W7hzqxlCoSyoEhVHSm/GfxIRCskFpPhkJNqFMdSP98NisJoy1Q+Lo0WUT+Fu7MbPqXcOfxLxN4GG+sFJKuQraqDeOE1+yUnxRyF49fLDu+LuM1Nueuq3xrB2a2yVKuh46nXDdZrlchdBd3f7yJ4HlxLaJY6cwtZhfe9sPGkroHVKCwbcB0Gu1AajaZ+fXkoE/XBuvVwBkNmkxQf0oW0JnKF0iZcpXxX46j6joQCrH2hbaz+Bo8gtXthAGvsSFna5a51hZ9jrO8Oudxp/85+YKoh51nbtrCV1x6oxHfs18o3Adl4eUF1nHVE/znnUwurzhf8ojmWuo5zLMOusJ7nO0tsopuSyad4S2O7/pdyz2dm42VEgsDv1AstkGiTUT4RZlMLrhqaQ3UaQWi3w8/WpQ65n77UQBe3QXJXwdMXdXgI1EaBtKmfve+SE/WFLqUaji+v26WSm9joy7H54f3bdvhl11F53XVCdXKsd69h/mSa0Ok8edbMnQdrQXPvVXLbBKdY1G++56CdznjfCDdpAnOR77oYlN6D/zoQ9sAd/AZMzp/515ZzvDE0OhAf4ly+D07i8959nzw+by8h0xm0akrYlHLdfNDZYn24vRg3HhnK3CNyfyQaLbeHMsb9TU3YBbaeW3OIXolQDWSz2xfLxCsA/z8quYWWrrGSQ7b6Aq1PD1alwRc6bV0D4VPf53TSUWwKwtm8mt+TnnV0TPwwhm31+44op91RAx2oMOFvNE5oTPruHZq7CsRtjvfNzyk9VDXGcpjgyqR5fzhpiuY2xeNYCxdqc6mjPOiX3VXJp5/nDCNYrxoEScnV/pqXcsv2AjP8YXeNDTj3vniSCphpXx098x0UBqAOe9NAkb7gGzxx1sEQuBCLwcCvj4pC9RZSscsr2G4L1XgL24cM52WOiFKMB1BY5x/SWL+paxogRu9OxCIp6QARBnBPgzzuHlkUQ5bDGbjqvYzf9l9rNl027cbCyuVpW27vYHjwFsWYtA+yCG8+NO+Ybymiu3UUPh96M5mSepjkpeljV0DDxxU9DXlo8EXMf7FRD6TuNaihy+ZxO+DZK2bW/YtSYcCOVJNLW4O3Z1YyIDkP4RuYzeD1N33Kl1SOolBrMBF7iBpQUBAQo6vDy1bIeColMkxEdZuZTkOEaP9sRL3pZHYyBXAMUFGSJJIQKGjP2eRo8CGt9K+7163A1Ug0TerF6Pxf92/HEFngeTyM14WXQ/SzeLKZ0+TyeRmrCY9D9LB5/SDFP/SysBVPoTEgP2GdGgVvTMiN4+wQZTB3WJrXJQGUeNBckZuAbehv77B4svQ5RIdOgsIcApBli5t/SizSsdRsljcYcmsWrzK1a4+XAmzrGSKLx5a0Ems1si6LhFXeS536tgVUINYj6yqNEAjc1yfx6p6qQaSjK428MKej5BLEEVaA98ImmwvCLAu9wh8BriUKGFj/RtY3GR+NPY+GvtWiNBNdfJoZeF3vhSwy4Bnow0HSQZhz5d0nK8igQRJV4jEpJV5ywoUpc69VVcgYvhYitKQKbHU0D2OyamzuGaV7QMPKJ6H9ZnhaF4b9wK4QNAwzG9GsU0KoS7J2UIMTKU8JHL5f6PaLsHY1vri6q8xFbW/SDUM3XztlJbPzKCE/C2FswdqX0f7uKaLWvI1f0E83mKaOV3q5cQfUxXHXaYhx8ud5o/W5mEwgaSFg374ovKsMI+qKMUWjRCttmfvhaQ/U+XIi60pckNLx50j4d6VSzIbdnes7ow8elW4UbWNqzLfU12Wd/z9qvIPQNCFfva7mr3Ox90xp1tWkMDCBjCm+NcCAy1x/tqUjOvkmrTHxb6s3yDL6oW2ZpngLUIcv9LGefo/y/uXsO9sRxbf8K8X3LWLFgbFNjI/Il027JZLbfe5dl55ONExhaFkibhP3t75wjy5aJU14vW4x0uo6OuuyM7+/tJ7Di7HJBZ262ZHfpbQVXCLEZT9Z1mANsqEv5dGZL7rItCx+IShYjraYcV66k5u2lSiaZAsqq+KvJNIE6NXflwjBytIwv8dMX9fNk826WYPL49i8joNhm9L8j/WZ1q3mQv04O38ZyE4/tiN1tc/IN2BApBqLMrtbvRSl9XKC/zOlRUz2tOREdWlZg0aXLUr5b4iMdUPpFsvrzjx9PRJQTHCGBLqkt67jVjDdEjjZgca/XZU4R5nhGoaUs5daUZfwGd1TgrnjtTqfje+39HQanTK7Xfgj3S+1tGBpj+XRp/eZ/prbR8+UjlnLZqPPf6tE3RtCmLeRstZy/Salt2e93q36rxSU+DcZEPsdJbMRf5DyTz+v0m5rba+tUuR3n/zY7TJGkpihtbEqT1ericjbbE5CwltEXGAytPYF9B9yqk4cDOQxkzvrFZP3rD59O6xcSRi6bkmsybHJ2CzSGuinxTM5sSxFYIhPPtBH1VQLtNk7s19XX59yie3wWy6F9gp5vCsAeAWdFoEXA3y+XRfArJRbubAM4RGNgE2mWyEWZNYRXF8bK0HnRZmkoX8lVJRaWhYwuudLek/f36FghJEs5LfsUAIyoJNzTgyFgEaPoo9VK3jLYYbFRUAIo0BY7wvp19evCcuYSm7v1F5wU/clyEscKKpaDugfJkGP4h8kMljC7Yj9RbZLccpkoqiJKZQEl1VuYFjrOCz2n+tTWRlBsHgs3jHvNfRnGjsMi0FKxNKfRqS52IyELNHCWK4QecbS/rFBrCKWwLcuRrD6n3vx1vf76nIXaiDiMgXmNb77YLEQDyhqJ5d5YTsxKDFsaYW1Lx2+1WX2zVDJsDzLrywhMtms+wn/C26hvJIS9EeUXJCL3CNmm/KKLpZ2zlMUOLGZlNv1OAh82kF/t739lGM20PLWYifnxY4rarOQoAWQubiVtZZ4Ud5+CwZD/FLj8Fxl4/AMkbuLAen29nkN74LNAM9kRj3nCx3zKZ+zOphr66f4eHlCmX/Keo356xqpVQn9Ky3oo6zJS/MQdeEIAEPCXC1VPgww5ZAEiLi7X4wJ0y9/J3BYKnD0blPcFar+/Lyhk2vkI0pGgjBi4ENkDDx8+Phr4aA4R/U5CHW65jErKTApdLN4HBjvPlKhWZf3P0r5b0xcQAoBsuTJ5qBrOHdjnOGEEczGMA0YRPBPoqBBnKZBMriv/eLvED7TgRaJkvUlnKCuYocyALyX5ePLnzeYiJWHhrI5fqLCnh9PA+vbTDz9afHw4BgNuYsThN8GXlxvhtd41kFR9qMnwnay/j+1ZXZ/34lVbPstM3xJPslotVyYTlXWXSqt6iu5ttfq2TuEEgRgn1WoMSqG7xb8PYFt//+Hj0Wnth3enb23LidL6cyyGvVrEwjGV/6fJYtOljtHWJKq9T4UbTnsaFjrOlI0H06GIzCY1Rafgy1L2GOv3uzOM+PfxTi2zu5cY+v27Nz+XGgpVXathZ66jg+UBk0C82VjrHHI8Gfg6PoDEd4EorqsYMig1yCCvEDbiwIJQM2b/LAulYXdPmRMXzIlNc5DcILq7DO7+KYMotQUU6SSxmY3GNEANCKHby1tkqMdFs0XmhkQkDwRtw2xg1f35Wgqor3dQ0+1m/13I1nLwbijc++wuXnv/o9yMoXWvbUqsJwvbcd4xY6VylXXIRi8GYsNIXC6SdSwvEjvBW7bJT9//BUihZCKLKm3ISgxi4XUafqvb9A4aPBE1vwP5RrdzwP+I+R8waM7BzHlPyJDNBnOYbg3vhV0Ixjm7v/f8Lk5S9+2543zThOgcRALmvLZ0uv1+mzlecyi6+5IUK4FROHeABOpVrHTgozumIQPvjIXEfswG74JH713m2DbC3KEziKt2IiQ69/6PuDrm42p8/8e4mvD4t+S3MU9+szHPhgMppv1+c+jY4N8p/MwGgylv7U8djzfg2eKd/SlQDb/x2s4clTAogw3aO9zzudfhvs9b/IB7TQhQ3uSex7029xu8zT2Xey3ue8MBzAqcKRYazBn3+/2GX5OMOoq0VM0QirQa1GrQiFdoBxpDoUAjf8PHIkeOsAEJ7EMwed/2fgOZ1Q6req3iUK2DaSELS4BrPfW4Wk5GtLzO5mcim9lhPtwdwtXMiQIJvRoPsYklDB4WfT4IYiixQEpS//z5QuKt402ywj8JpXjG0J8loal4nCkes7HApGqKSoPVWwWWEztWvyeDI3Xto6+G5t7rDILI77X2b7VWAF8DeI37rRjVfcsZg1UrDVlNHKv3ukgCHOolluUKNq/7Fp8KZamqHSw9mFkfy/Wn6wUcpsHUZ3NrT3G83xNimu0dWJ8/WwC0Le1yS2RTZ+yf7+/16mIXTp18fbKmXxth0F7sxBGvDNvoDqmwXkEovbL6rxwky+udUbky4r7FcBgBESaYygc+LHfca+12axuJyBlvqU7GIi7UXZLVXfKg7mZibw+DYAEy6a+hgCtnh1bv98AKrJ7FV5R7rbKvLT5L63oMDe/wVeVmPlusg9+xjAUpUN5XgWUxNI3PzcqZY+UkLNmtnHlaOfMXVU4ymD+oBIRhJegqK1If6kGSJgy2hTeqKwC7Au30PtYsuUpmdKqPH5FgwcwRU2eOBXCQ36y3lYJTfc2ovpRLqB4cMd5uH86Mb3YXID/UrOLi3wVv7cI6jMfCN6bjr5t6Qo60tCvR3C9dHtzqzsNc1Jl9hsTVx8VssrFBFC0vm32tBgJ/be1R1wwr7B/SZIE9L4oXRvlyIXIcPYTSKhsOpWw5iIakIEY5UVEOAkS8jUtXPzhOMKcUo3f8Gsx5o8ZT2HUFm3AMeU15OK+2fd7wGWPOmSREtd1qNVosVB11Y9fw2BHnksw11pBqq/SzduyPuLfn4YfYLipfLuf00ZXKBRi4qaRvecPO4gSXvWr9VaF4higkX1e+LCH+lcrKl/VyQU6iFNLK0ShlkzFIRRwKvl5HONtOYHkP6YtLhMSrRG4SSIygp6BEcpPEFWXt+iJJRgBCWQCIEH25yHPAO8Iwq6wn5wt8W3F0OZ/fxtLSEVGBiCgruC8sNf+4XE0qo0Sn9LmA+tyc3CyjSrRZyso4ufGxXPC/D+nKSi5Gy3llPmrBinyaAAk2XTJnPV6uNnnqhpJYeAJRggCAIYLNkgRnyRtwtEpliZtni/MPXwyy+RQfJTr1VXIsRD2CyrPVH8djHEtUhCwkv5C8ZCvciEdKqnLbbF+yLb+SfCz5EZeSR5LHko8kf8MTECT5uRyWGtoQ1gW0ljWdMqmpbQUBdPsDgw4z8nI0yTIx/imuM7z9nijSawyhEWG1oBEMKrCwIshYf8AOM/jG9wSuz1BGfatHxjFeN8n+rB/9aUHzHU0I+/VkpDZJ0kx0C3xUw5mtaQyqe1DP109DDI4kP5Yc/3kj+VtKaZrCnuwNTZ7KcbeEG+YT7XeFTbC7H8+CaIs9VLu/s59T2Rk3/rK4kninSlmbtmSLcezLSIDne12/0fT2RIQ6XPaMIAgovOKp5BmCvN4Rdu6Psf8ErfkCv+mWZLbAULaGsmkZcf0fQtImkBq32gxAdKfGXAbj+m15YSPur8KF5w8iCtWiLhHeViVXBoss8JxIIXEBBeN0DEO6AOn6mqC9oyUBji3HXdZQCTDNUJsyIAIkxTMImkwKwlhIwpFI6XRRxiQqO4XS0x55qFJBXP8S2dlQVwf3QCHJiC+mAH0k85gYY6vvMMqEziZxYnuMRwMcIIcs3RaZZuagzVtUlsgdZVAZD+0CBBKvipZxkOeZ+pU2MQ2AtMwOYFBeTgpexrASIq1dykKt9yBQUsF6s+3IBhgHHAjMM47P+NTINhmfCUy0+QqXvvN8gocenhvHhXoyp8YqRMOUylg3TsO5njeMUg0zCGMBCSOCZ47P4X9nxPi5WBTnTkC8MEg9mm/4/fN0je/1FtrTdxbLFvuo8FoUUBcY2RqwtZjeBUAFetsSKZ1rB9Acw9C+ZiwEx55jK4CiYWFh7Smy8cReILsCs3BFu4YA26KJwHZ/34AnM1ljaS84lCql1awzR0Dxt+h0EYWRGORO9Nz+nLwYKRYybIVzYrWfd4xbeRQB72Cex9Yw6sdjas14k8gNolUipyFlvADIcN9R7Xv3LCEwV63ihmQP9yJhftgTRbBI4XtF+J6GF8FCg/tFeD+DF8EIZdhF4cYoLXMqOhcalvuBbrcr4Do0wm2FzSLAZmiv9N4qM1kbgLyIDvFhx/lsHzUwHrPA3GTbxRcENQPdffrYbUVizw3f257HkVRt58b1TzFZwOMCayvIWhDZhw+owQEypS6DEDsW8wJXOzgWSKk3/LMd4wJVR1Pp9RWQFSm6moKC/yH+QONxDvsQ7bkar1pXAecBzjh6e+B9zycC80CuhKiRanBQeQHTTDG1B5gWYPRKpERku1BbP9f/xdh6j+v/5HGRvLNDvnyavLtD/lP0NP3BDv338kl6392hl7sHB8TD3Yfh4HsBjaTUgszR1y4ZfvnLxnYUyIpa/B0DN3G5hfqAAx8tfLR3zG3sCLomQTm7t0PfLDTYXB2mzJEDgWDzsShFFES2ApUbqTtemUEHfGdu9oOaj73DHK9cLqYL2FXQn37FfXjJVBfmY1d8eCzKlyYDWYO+epgbX+qloHzeXK2Ww0EoaFXdyJMUdsyfVsxC1dfuieNqNe9Yj/Uc6AO7y7Zi9E7MB9D7QXyoz2EpIc8TxonP+pzcxAktCSz+gW23+SQFJf+1L/IpCgjQfne5noji/HAEsYtPOzbW7tsQu9qdyesP9be0UFdbbELm0920v/aK4lDIR1kQYl5AsGX9kp5/pr8lIiDL04EHkozLekTo4+XoVkAmR0aITBT2+/SQay0QlNMkRKSxBVKRJzV9DkGuiVT05I2f8fYYDFoC4Tn9JJ2Q/3NnwslnOPjjRBYLD7/58QIOTxl8sBrmKBq5CJQhcQKy3VI1RxykqAqnreHP6uM/Fp+VgT/DQGDx93IwGx7SM7CoQeFtAmDQdVZSV3psLlkdPAhIefjgFkggt3qhZJddJfiQH0pf2B3j8CYiz8V6GusKcV7H7xEjEpYMXiF/XlcfCdU/dJOvdl5f1+LAfyFlFDQKlHHghvGO3nhHb/SMdHUVEcSfS7Ck8TLauQRb3DDDww4VfRHmrdzgGnjEY/Pilrnyjno9ny6g9HI9DPIFozPib87r7/lIGLsr0WsAsTAS8T54xLHRLV5txEIlOu1mix4RwLKPRu83a83dQkKLeUIRj0SqImakcMSVIhaS2/9+COgJhOIGD12ErPp+k+cQxxsKG4B4rNYw4f5QzG3ANADRZiwwhRTZi0zSuPb1/9OtBXfSVbFmNzRdQuBG1W/5YdE36E4PHW1cItMtNFIeUg1V1VKS1wz1Z9KskdDtiVotDlmmIhqKEc9zaEdi5rFyeOSIZq59WqpdF4oneUFIf16A/xTtM/Omrlk19/fFHkIGfjFfK+2BgsYzVOmlZte4zlNuAun0XqTTf5HOXdNMG+aGDZ7f6clD6TR887rgCLr38/qVXXbq0OAed9W/eOxwXv8q1e9t4fZgusOjLtTQtidtR0T1GIRkzY5yhU0SeGcMd0maQiP1fg/lzNkpXjR1kYx2J4DvEArhsqBE6NvJ+WSDYtvPi22VSjiFYw45QhGd50W0WXA9UOBsYVGtntc/2jFP5713WPhpcoscodeB2oqpf/C6Byxse3m2w9JGEoeFwkJZWj2kOnD7RAwUUIss9Dyf4J7fzBFtOPLpsrArUki75Xchf2DmQbHXMAAHDQC0c0DLbQGgYwI6AOgaAA9YfIOigRSNhgFotwDQNAFtALRMALK0TYALgI4J8ADQNQE+AA5MANjRdE1AEwCmls4BAAwtdCR20Faec1uZ52pNcJPnZpRNH7OdLNvA7EGWRQ95bpZtY9bLsuSuTFTrALN5wTzMdjPiJmaLkg+Kkg+Kkg98nT0ArO8dZFkPsr6bZX3Melm2gdmMtwFWYaSOMFLTTuK8/hc6PMBAPBd3UxlY+IkyawuU358Jmc16xIWtMAzfLXijvkFvWz40nDB9uyFezgQMU3r9AqkzYVmIlWA35pdSdFxMUH9HJKpPo+RXST+36ueIZP2d0utI7JE8qX6/KJKJ2jOHMZayc6mI6XmeSpHiDsvyNhYe/MykZlkrfAQSEaG7UwL+XNx6N5fakqG0Hwt42ke3s876bDKb/aDeW/+TS/9YvID8Pok3NvayqR+49gLjpeOCINdop7WbLi8fGAT5LnNp03X572DWVLK6+gSgsPArBBYL0JPQe+9i6eUMKuD74oIQrzHTpWVgdOhIBBLFO2VX4Dkgw4FPr22xt8rp2JXwfK6jw+M4CFnfvz+uuG6j7rpduAKdX5r2TDFFKZQpXixAYeUjmsdYptLPpPuG9KYpHYoimlQMOt8CBHcZjpfXdrpZsn1CUxb6ja3W1DA0+TuqCkEntT7fpcE0J+z5TUcyUh5eCcyEL4gSanRHaQnCF8ULNE/N4rNQqqa7pvW7I84k3uQCMCVJZLkffDV3yG90OB5zpANMNd9vsGwlQTV8VK0+Jiedh/Au78LTQ5md7NEovzXR4n42f2GBjX2Ixz3S929S5Lda+OOmj6e4SBX3/+06vH+bijy4mtShrvAlrx/BEeHIZulEBLs3tGEGkcSRiGOVsiwYm1kw6vORB00pOy9B8j6gi8fFmRGe6zpZqGCbKZ5SCM8ENFBa15B2f2+Edxr3TeZ0tRYpABJ2+9mJIHQugX0lDFJ+JaSWcHXoBld5McG23mN9EHVVm7xl8Ms85PkJJkk+X6TJNuMTKU72FzzT3qX26XX6V+rEsX9yf99u9uDp9ReUXBSHjOwsfIMfXsRvz1RsyzlxLG45C8di3LhmgEFgsdDscKgzeL8nQAEOcXsCxAMAq1KcqFGPRrsFmVVc+jTMLEOOBUdiYJQowLFuLAcBNJjiaDmQQ5SzB3lUQwBByKwLoZs5+QYIiCGZajL7FcXuY77X0yu9Rih7X7HnaOolHkmFVrbdYvHSK8QuTpWv2GOd24Us9nAnj4+CS7nTtS3440set7jkIeGY1MyMcRq5nmxj2dDiYhHuvgJDKOHhTOQ+eHGnR8+7cxnq4eiIKWe54KyJBG85LNltn18B6JQB8V07rq14ICcuY0HyCBATvpHQCozm06YiUMrsAcjkfJzy/N1xymtn4xSUv43YVk/SSyi7+lm1KpWYr47HhJC1lp5FEFB8dVr8Wlw9MPo4vWzJT3Uig3yAiR7/Trj8hv4nqJ6SXLO7op+BJrxB/9yQnx8ocgBU5uOb3MdFGfFDBiQu9zAadCpKlCoLD8t0By7jZVPM1XlkW47tKU77FHd7GPUtNmZox0fl5whQGz6BfZruyygUZmlvJudseMQJAGZBA5jZG0m95cqGokCJxFXJpJYKyk/4wpjJ9a6rVegtoQpORDNcCK9lxPxd7shr8uOHwc1QvLQ6QpByfbgQJ8ILmn0BiuwTAS1VNNSmffhdDw8JvvausrkqgktcDwHTrZ3gTtRNeFMTJxATHwbglJvqYsi/AwKqvJdZ+19pVrxrVnmA+d3dmC9Xe3f6cl/fCC8cLSs3jjguKfL1GAY3nDgJccyo1RWGnql9yr+DBgFGi5u8Camtv5uQJYjXbq683Nr/oFnjZ8yKAf+Umw96j/Qs1zWog397QCsTXi4mfMxT6JUyf5yKD4Pjb0AojfK4Q3jM7l7ovu0D96Xdla7coMSduXNK6/vFPt9eCRxf/pW9N2Fr4+b+hr+KM3efxHMjjBcgxGbgJSwJbQg0JE1bXq5eswVTjE1tCKEp3/35/XQ0Gs14bEj7X57taoNHR9LRfiQdnUWWIW/okBGUl2drl59Pz59Bv2qvd3/m95XeYfziaQqHwwDl2PNh3R6rlVxdw00cqLt4HXsvSnX1RBHqZ83/bLY4oOZe5QhlfUYtAX5pWQzfF59mpZUbYc/nUYgC6v9D3zXDJ1OvFlFQeQpScVB95nnw6BfNyKji6pJ6IlLP1rCP2ChrWkIOgMa6RN2TbJ6fMTOZeJpFlDTYpRAUntB/dF34zPov4wpHvYiAwokuBiRzn/qi+e+8XaJydrS/1FoDnmbxSSZpJOPwVh9U66VGSrmtx6evZtgTSfsfI5nB5gff81vaMxMLp21xahSq7FfnC6IZvKh47lybgzCegTDqZfA5U8QmMdMAsyAsDn5eAYdpWegxiFkP6hQ6xB+ml+IrK5XzJasbYy/cr8FZ5d/62RQzDx/jT0ISXoWumGoFg5TcSStmEFLMgFcv34gxmGsYMd0WEX2O62zJDX8sVwDEjkk/F4iPjf2sWZgiGfpVW6nstl6o7fBqQtt9MIqkjqni1O201Y+w2ICPFwpeoKBZvbyi5KnkAPIL51fwzrfcNhCowHWXO+qIeiJixam7vKy0yU9+SCKYMNaKHzminTSGBeBBd3lVHaWwuJ/w65g29rrLz7M055/Pk5Th4/TynBY7h92VF2r3jxtkXG2pw2P6We6+aKmXQA6lCwkygt6TJQYRE432RTtLZiI7ytCpA6ifMMi0f+iGv1hlFXSvtNCIY20+1ARXBKfuKf3goiBepL9QNUqR8RvYpA0uZFeruXb1A4oSa0dd/UahXo8uNXy1qY4wYz9c6cCKDtArqQ6uKqiDjW51IxluSdgkbktI2kZARwA2+zJql+iv52ofcjRjnQyKs3stfCw/b6q9tv5oqb2O/mirvWX90VF7K/pjWe2t6o8Vtfdcf6yqvTX98VztvdAfa0DY5JdGrXGvNfHV1l8tpT2iSiP4+CRhqTYBq3pU0N82yfMMkidaU1sDi6PVYchGtpbVQXod2tiWDubRba6Qg5LIOgjbtASNtQFitE75gMLnegqD6d9Wphc+i8WwrCJhL2gDNHptvvlUXMd/RFyz/HXhLEra3pKHG2mnDXDSFAJNNxkDFkHTrPmXeO1Qr+TJ4/pTWXgesm5G9qdM93phw3oPRtwoygHUKQRoSJDrRxhkKeyhvOa9pkZxqbDm3MJcRKS1bvklAMsXEBunC5sUWoZmUTDPnl+M6XCyciJVhJq2XLhw67cMEZcRO4+didYVWtSsLETqWlUI4VWFSARHSBdyWXyJch/tQp1gUJlgCOaxxF/MiG+Z+P2S5B9e8vSLvrH09/RpCSImPCiXSN3W8MycTaZAVrbsSYvFDIvV4AveX0FrHfqJYv2tZ1t2k7VsNJ3lqbzmLtadnH5F1hunUbKul59Y1repVlOvhxjg3bh+JQ9h+lUjnLHnL5lEDbjBxEHltQb+G1IPaHL682IMgqBPFWH1kaKU/SNhWe5fkBti3/UQ1ljESvV7eK7lKUVWJZ8pM7kK1lAlAQviyeIhgbjkUeJ2jxSFSyAFJzXo2Rqgvc1Sia1Hldh+XIlTMoAyRmz6zLe4FcXZIkzcz+b3lsNbevTucfDdWWYuX6Jx3TaKtBhYLT5NlmrPZxBPoGYYucEoRuYgDJ0KbehIn7pyBWZbBf3ivkOe5Wu1L6v+NbpSfY9/+/z4gYEwWMTWpQ6Dr2l2y8Xm+akLKv4p7D5BKv33OiQk4t97gIITz3Vt7ylvO39eaDQQ1ha95XPbJjtVR+pNKHU5CNVb+cwlQA8pGnrA86Wu/JFJ+mM53bvQqrwdT4vcH4e+OpYsfu894j+E9gXrzXTyN0j+Jkv+E5Nqa5W9O5AwGvN5jRyvG19C04WNMKT1FF+9NllY6Z50cM+cp1/3fgYKbp2/hHgtahlkxqrwQTjEkrwU/5P6Faf2udl43lhzTTf9bBQs/8AsMReJVhN3kqVowfsfHm+iaMmvYR17hQmwns317zU7vP7DU0itbNZ/+Auv+ajz27q3dfD+NzGyqs2UH8d9VMFTYeT7XcnR8je3w7oNrYKH/hJhGYtIC0jY6v2aacdH0ZMAX4gOHZX2poqDCkuRk5d378MzWnWoe9pMJ7o3Wo9dFXLa18A21Y+uaa8ghqReY4j0aBu/HduQIMSOTGyECfFaN/11A12Hqr/D/43t/YPfYDya5my3PofnA+Z9PzK1QZexY+am8Vx9WGM/KInqqQppKuGBAhpxgAwRu9AZ2S3ddRy6FiZX4zXijf2Rk4fq4v2bo/gqhdWmcJCZnQaY0F06KYQHFzoOtFEmh+Pjz2BHDMsymE16vrZ5p70VTiKjBeftHx3/tn/0ebWMlrnhWc/FvHXECGY4vLred0oirJTYLRGyU06JklrueNq/09nNOHRrzk77ru55GI5PkeL8b+n5j2cK195hVDFg2ghTioELtbkplJ6qKP8MG4YrBx2/zr/jRtR4HzYXVndhzYaTmDF/QoDlUNNdjKo6x6xfjMwQcwzPI/VO/Q5B/YhCQblhSFuZgjmauDG3qajocvMRyTKjUg+lExJVLH/ewLD4h1PZ0ucnqyi8cgqx0NmxtrDq6IpCytOR+CsjctTlGMEqKKnlVbmiKH5DxNXRFv3Tpzd172zU6nh65oJHY6lmXyv++kbk86QPHSP+NRk3SALTwIFQShH1AdwhSEHszEYc3b1eT9yt4AT8hgce8dLQ28Ef8+l4aqnVj0efrms4WPg9zPLaojYG33t9HhnXRnVCJ0jj97KUhfyMX+wjj987oGNduruYiCOKXm4zHg1F1PgGOl71twf7fo+ePsMraE3GJHimaF3AGS20fboZONWxsHIRTupyncro/KoUBeT+jPruv91/71u7Cz3P0V9hx3N5Y+d5giPC+uvQz+6fTVn9wSWSqH7g0eLSu0YFMbfG+nAM9tbPN8wTxPrS+YZnjjAP7mqPStaIsVuuP5jI0RoLBtHJg+lxdm3I+YJXoVOFCXrQ2GZRV3jlcewuW8QluJZ2ruszoHLeSIaRWqEc1B1SK9rOvJBixM0Aq7eA7VPVjgY3Z3AHvng+9BSCh8Pay/Aag3fnnZ4UspCnAouhdU/DPDWK6rHy6IxYA8RV+84A5or48BDB6NVrzAUeXXoxAmLLkUEzKro7ne6ihaEGLY9qyWsr7s1BFT8FHNEu8PKeYKpCdHDSJ7g9BUXqSKq0m5zrom19/qDQnGQyhvP3dzwFUwZ/RHqEwBi9ukGzzYEPnEScOO3cahwNwmuywF992N+Butcbtlhsm/pyJfzdaMIMOFXHwSTCMWmc6s1kG2zOCStjzh36oL81TKr3ar5ejBu4tn8+nwCOKX4sz2L6kFEHfu3O/jNgCenfVnKJv4YTV9NeTOpb2we+p5bLiBhZhWJb+xor4djWOCAl7Ged7Xj7ONhFWz57C2zmvjGly/5k+zy/8ZPYBZF7IHTn7vVhPutiPgTiNBI4M2SzOMh5hO//t67hmzr0dNpE+02rWM8Ivbm9m7+5yZy5DC70jbY1J72diW/OJ9ekgMaDnBowM2/CT4L6w7lNLplSbV+Nmbv9t3K3fJUwd+c0E+zhDLXjUHncwOyT3XyZu3mOYDWYlWNG4U/bj8hhrMKaPDjMflMpzPGt9fJ7l2hiH5RM1cq+ybG0Bzay5J8HcWMb5/oYR0RiI1AJhLly+oRhGde4ZrxsgW5xUae1vRRTC9XT9LDvvIa3fSGOWYKMON6bMZt/HuXtcG4C2yWaxjw2MTf3zOuk8UvgqeecSdn5MRg0DKNTTupPaah9owxkh5xMY/KOtVvAIqwzTmzo9KSE6ZTnjWfi3NR41n3fT2uJpKmJbaosO50PXiMWphaL24Kxv7jgGbeonmqxIfuTFfgq5HQw08YOLmE1RtZSifF8yaIP1kcjHPXubGJvoQA3e/6CZ5wggr4216tSbHoTT6wk0jEg93xf5RiP0wnJtsVm3C0abDa2jGkiEbVrifHUC5cOzL9hbdbrAyE+cxPOIUK+7RTtsYamwLYG8C6oO/Cm3mnSrs9VHbJzDW0rjpyQlt/VMfhQsnQMo4naNGCay8qRxWJAZuraNeP3sDe01ZPLv/56kuhAR11HfpEGlu9Fdk5XxLmrpx9YSRrNIPfU5bwcMtCZv30KzVwKEt4SBCzTyUZUuvtHityLv01a9OYvaOZWBl5vcIKAZntp4gZ5n24z4fDa9GU2BvQrVzNRnurLuUq68ibSb359FFzNhGnExsBw3+zd2jAR8vdpSbNAxVB9ArEUt2/GY3128PqwId5dWuKtZdCA2Yyl2yjFnwnewpdaS+El/JOS+xciUM0VNDjdGlXYT204JmV1g5LHZXNMs9pvGg/RFhbUAA0frN9Yq8wDtPwmgv2ChlSOZ9YgIKVxzu81GRg90yXxTmrN5GWXta7noxj1zB7yJRPHDfZXE9A4/5k+/+aHa7SBJ3JSCY27nvGK8i/fsIZIJc8j39eEMw4HaWbuFJPkbhhv09yfWWv94HOE/S1kcIFeE7Dib6OsKXL1mJB3Xn0hKWZ6dzOsicEUyWGMkoxvhgJ1s6BRXzBtNTt6WWF/p+nhaxKgWsxjfQBtglYtTgcD4ysqaOoQxRAk5LpNojsq4yx1kS62IcGxBgdM3gLK8LSDqqfDaAKfHgumuS2pxzbdgJGygVsJo5dwHGmoUe0SW1CsHZ7SJ1GNL1d0VhalAOJqdDMMs8Nqw2Pl0wVPu+XrtzfMPdpxxgcgRJLJXeWFu1c4kz8JOMYtHtqP+yEIwd6PO2+FQqjaRENqNOtZOzwGiWhWpwNV0JP7usa3IZ10zk1uoT99l2uZy6WXeVn2erpOO/CZLI6NzfbAi6P5rKVh3McGJ6lEquU8ltTZm4bd7CbK+BS2GRDMY71uqbiXd/TyTCKYjvMtHYVLNLxfihvoiU5hj2qOq+fytXVnaDcZM/383MT2u8YsznVDq/nPizdGuaPGR5w435wPL3A3vJaD2RuaItZq+bGPB67Y6NvFf/2FEH+8ZnOx+D9nRONga9uY2va/isYrlBtYazvLcHjQKDa9j9g+BkjpdfVnome27v9PYZzK7GNWTkDTS6xktgO2yBQgYH/y4WpTojBKN1de1wb4jI8ufrCylloBlDmN95SbAn3PaqNB7/G/3nQ+nu+ds0MhlxVG56CP52nOfLIYeSwRyncXnRQzVh9hTmXkP8Jyqg7bTXES5NkhIXQFE2gOCgzh/k52eNHe+k3Jf6LYOfkKRS/wJnK8v6Nv5JPNSbew5H3dCcJeMgVpLAkpzBXmlG7mSb4Ulbe/fXBUy8pC+N3BthuW+Ke1Alj4TED3zgBMFRfqF413l/FVRRT8W/mm3xhbZD2ZTsETDNx929HQ04crMaMP3tbNNYgNmZU3EyApLNMux5FR+0d2fkh5OPeQfZMfA53SbMoP9QgHJDOVlMce5Wom2Fw1jD9/Hl4dBGcCrS3hxRNq3aqcfMFDlLdAPJDcwwJnMoufZDtqmBsQCAvK67MAJDZ3IELluCyIijGFnks0Ia7xJdF0Co9kLmOj6p3L8uxxDCY5qkwlpMhy8ZPAmUFD9a1nvOkD3t8+Usl5KgiE01Uf+zXUvsba200SncblMAymTpH6UU2uoRwf5jITAM8Mzsi/G5EHJjBnsARQGo/E7mGqZqcr12p/03uKvX8IgcvsFmYmH7YoZ06uOisgkQlMqCU0aI3VefRkdNkKeadumJaZZuzDOjO5Z1Vwq8tZFRn0w0pkKO7q8yrrzdOGNc06pwAZ8eZ6li9nHmcQucv6Kg9XYePAmSOu8nyw3twes6t4FFm0edcRS9ZzzxROwVX45WBstFKqUMuSJUWw2YvTw6ULqznvQUd6akamAj5naulJWRGhnOSFiefSiOoUyq1dNam4v5fTCz4gL7XTuPh8yVumFjnY4mFyEeDvw0z6ou3Lg7TCSXsNJ20l4DVWptVa/x6nE0zN70la9kMKWiCtfip4DRQUGlEtV77hA9+PK933wXa0nTdet+sRyI8mv2C6J3I8IvJ9CgxLstBocP6LPoZcaUAySM9CXKD8hvaSKhIJYVBvVicAM3GNMRZXBrf618150T7rbaKF3WK4LaV0JEKP5bwVOUu2eLoDnoGddgfIPelRx6Tz3FOuD9OdyFqpg//Dx1bC74VF9lvWe8Jgs92HZEUGVDCnN5h6itMWzBo69llYYrMVwqbEOf2jiX9FmRoTDGpkPoerRpjSGaO6N7e70NNqF9wldu3jWWVIXzjv5VZpTTWich3m4mUl9lxvQbuOkIY+FKSbvKJ3fyrz02qOHIyYVNT+GWmplLXjeZKP0boqk4Yr1LVXLOIJigB2jQO4pK454y8e3QyS2hBcryglRlWLTBQvyjbCmrFHAfraPJEXwbqulU9fLK8bvz/cHVkty72AUX/0GAVxIxOHoWqN0/SXWupJJHU+QlIBkmmt1Vwy7UAMmr4Z4Rj+KvIRkcaZGMPrqCT+9yqqqGNqRCtW5S0mBggZY1/RzojRrX8d6TXfCvB10uRxZ288+jMdbt5qbb/FT2ggjCfoWnh7OoBvCAOiD5lkrzJervEq/E/lpUx7xnY8XWvx6b3zAaUhtIH1/mgATIGATFbxzU1X3zUjO+7mq/uGW2PdhhfZNy8N+4bdsE35SekF+WYnMDLU+92qCoUv45kB3C8P4PeR7GeIiERKWtEcLd1m/cf34fr1GP+Smk4UrDUJuiLE+ScppMxxq4D1hc4Qmc6Qv7vst/WlaHauVstkI7Wdn3LVpBS5hHJaxji8TEZ7OQMFfZguLOguvAha4J1GvIusreOhRdfxGCM8Pr/mHnARtGmSrTqq4/d4REJHcDp9AYtYTw19oM6q0rFe0TVvRyT2r8GPm8jB2y/V+0pPIgM4x2kLLChgk7Zn3ta1F5SezGp6jS97kM/CnPEaIA7YyYix5D/2aQHIc0s3T13P+A7EESgzZZH82cZUJPamLIGXgm339Q5zu0unwOip2FM48WHAvPZiok0CqgQNsLH3vpn0ZawMFLD2MdAOFuHFOQB59coB96XG6SKg8YXBA97cpwKueJ71EFuRhdPovq9PsXp388z65pWLHOHnqp+t296rgjDlD1q8toEDZAaq3Mc4JQxZ+GC3Qi1srcSYd5c7pd99GQK5kIb3OVE4YyHYFtq97Cht5DxPvH/P4lh5qhjHcIlbRFgZZDfwU/UmkorcQWKz03Xu7p3289W1ruW6YrEdNwX6ogQF1+nL0ta2d6/+BJJ21zscqlou9K6AFgJmnlqVGFdwHnkOkKeFGDI5PcXccPmqMwnHuUajlmoZbMajrdrR8Q+eWpHv/d3d3dpas91ofSFuwtqS4LkE3BQo6G25oI+7R7qc9z/sHy2+217WpWyDp7W4tXvMYuRe58ixvpk+Ir0P4u77TGSCO3/vsDB1GOL9+705TTM7N+QU1J7gB5mRKKqfM2AztmsN3F4YBUkzPv8RSyYJK9HytqE3Zv8QutIiHSFGi+3KYMMBKryuOaJBOJtg4xgMajdiRcC+WWTmlD5jFTaISy8cY4+ILqDhT3pDrOMQFnGqTHMyHXZ3GsyJpuy7wqpIG1s3GD+s/Vifv6Bz2B/hXJ6S9zIiOecBS+67LvXFefBlOC4QcLJoc/odkX7POGeAbof1tEHWqr+gH9cPopPqmpxK/FvGw2rC+O6qEFcTilPz8LgstfwxktP1ZxxAn92iShJ4qTWv+CwXGe6DYpPys0lpWHEq73b0oGa1NQw3vrSg0tw2JbPZPlRM2xDC5Gc9hFVcK08vfqQTvdmfywibWRYVZxlGvh9cR5t9ntd4RHqb3mY4vJwlDqgBanZrVyc31PdFTn3vnZv/OyG973PSyzDP8+7CmXt6L66x4ln90GgnOCv22NphR6ExOHk8pM8moeWSB6ZkSgfNm9FBbAvP2Rz5pRs6Rzi9t1bkRqdifK/KN6QToAm+vBH5/Gqrzrp8tezXssTiD+rQ0S8+tBrrI2Sx8DSE9AC1dYKVqQSd3C5/+uDqnbt201N3OqKgVlvKmOJAtALh6TBFkVVBWKcEew7Y8xLMQljMmnw6PbxNzSnZV2WrrBYVrTHGhfDSKcn7mPG4ZMr3+ZWBhuNEvl7uHx6bxuo0mO/0ezcaS6h/NwHBGBxglY/vNOgALIJwK2ainZSXyUJCUx/X0Z36CWPL66Petz9GVrqkZ3blXraJ87mSYhg54OVdjRWs1elNXc4k0N1KKHPObdGV61Y/55gZSzTvtg56x3jM749HwxGkzjVgO4Rcgnzu7hziH79+0kn5R/87POjt0TxAb3f3SAfkR/5u6xwdwS5/X+lc+ntn5x3/LbZ7Lxnce7m4s3+gwR0Edtr8Wu69OcKP/G3LT0d+lgtt+gVtMo3JmnYMbPhz1ONo9nbw8Sv+UdF2fI7tgaNEHQBd6Pvjw6Peu9Et5P5rMZJPeu907kMde8yAqWCh1F958njR6royt9ujcfr0Gte0tFdr13ZuRjU7UzwFc8RzEh+PBnixc1N35qTe/XI9xnQsZliek+HHmzAppl55BPrLEQ4upVJW57e4Ms/z+Q2vzrQ2M9P582JKnF138MyyyDQ1Nw+2PUxqCeQ57tUfUX78+6moxqTJvPV4/Z/C/oCgexD3NF+nTb6ONg9bKV6ybcVLXmeOOM+HlHEPddVBsc5CznsQgfA6Y5FFo9G1FvSjOAlKauQUztHESLMIILZQuXMzpkj0bIIGFU5YDxOxv0ODTLnASiaDbw6w30X1r1amHIOcpHgLwxs+P9QB3sYgVkAx1zGBTlAZ6XSAzZfyRBy3hptplI6JRQBvdVg5GgPdMX21VdB6EQF31QT8okDovR4J25iXAEYj9I+0hnFsUKHeabHeHtZ7chNf65cWj7Fsqm1OOrM5aak5WxNyW6/DM0ZBvRTv9HIj5mTc1CIuWozvZbr37gOfyn/BvZF3G6/UCI5isf4/pcMEt9Y5g1w5FBeswiClZVpKzXjdXGxsDiqThcka/MN56fuzmROM/xUXtK734T0un3ZI7D1EFMoahV0YR5UoKMOoVKbsLAddFwixsV/yLdzluvSF6yIdpqoG/I+wXuwgX+1BTAhmfX6N4OFAvk9tr+nkJuAr7yD8cn4Jf82TEY3p1LRHZs5lwLUs3TEBWO4Hr//01LF+qO9+JN7tow8SPJ3XI8WTiHRLZYTbEwKjSsnNIGVvLPQrOgG8UgjwvAkjWcIMMTB3GdtZ/rZ60R7DqG/X9j0aGZKOXt8ttZrLayvPV332xEtypbFea8Q6ApJf2B+E7GnAqXoPmzPdnwmVpjB8WlhCkSwhyBZcOwSEQanJnD6dPspJt1bHubOufN5jJLs27/ljVB/wmkbziHlIWmJpSpmCUOegSEU2s5Meacicjhdn1KObYaJVhPVs1FViMjsWZjDcruINb0Ub0CV3RJ9cb8pc8dBevBAVS8o8Mq7n7u+NLYJ/pGd/RWJ+JWKzBUV7fmbC5bygSJx9WOPji1OvKJ6+cfLZTDfxGhGxSmIaoUhj9SmmXaD8iZV3kTQOWsZsApL3YqZFKbhDs7DPhT44qyirHscni1AY+ipzC/KQl+cTTU9gpEHBdwtUZngHYNu6VOnOAupdGg4uJ13tYBj8iKAQ2Ud3OyWfx1UnH7kgy/Gk1TIavbFG9DocJmAfmB4v6vg68X7opuaCwGU7RFmhj68vkf7qsTIOS+B3WxnVZwcuLvby3rDYgr5iQFq5qQ2ONM4n+rduIyjN44SCk/wbnhHdiFMVc8GyuuXOuSjUx1YlmZV+4KR3rSno3pQO6CPGyUEE7PcnUN1IY6tVS6afkkNV+QVnHtdP7G9Q0aXM6aPbdqw0PLxiDZHdJw+qsTmW5Xw+FfUsVy+OM8s5MVcKW0UbWBfaG3hxAm7W06AEY2rvOxKkkyY0vs1nC72f4h2mTi/6GKAf0nGE8/mEmY7PE9/vJSyL6b87nGilSe+J7vULvm7qyEYmG9jqiiXtTzG0O/q5YidhWCRUaS8vHgwjBIOp+bSQy7NRFKnHzOOg6TQ/m0keavC6sX+SAVAFVHC8sEDDqxnQes9tN32Dfote90djjX0QVKXt+JsQadathLrgOERqfawbE9yqjZna6w4W6uMFT0ITz4grsYBiRhVnC2Sx1Qsf5pOyy513LpN5HrsU7UXXaQ4n8WO3+jHSsuabWVd62QsCNuyY0vDplkw6Hlwy5qd+gVNukQhcGNG2J/2pEjyKW1MHoIRzFjpBFD6CrdozDss6TXw7b3XU90PwdvFLt3+eJOkwf3YD+mfCjU0t93VuGUiJwSzwaO/vo2DG23fhWVBeecOs8PejszOczqRGdjU/M0ho33HcPQMV7IlTmq7m1qX5oF8zf6nzfFQP6wdPZv/60l552eajmXxuy1vbUrgx4+H8yxeDai+FQ4wAC67HjQ+T/ToSPfGMX2zSYfxwXSiVb4cqKhI6kRCIsp7TrOR2UxWM41zGJYYuy8+jhzo6c25vXSCe8HCWtG8MmTJ82D5AV5ZMGOAFgUYmqGVgg+AupGBOjsFK56ixtdPBrcKKjF08cfC0TeKveFg0fVEzgjLW3UUuAOtllrfuxazwYHMcRNejEJsuJA8xWAvzrS0Ymqzpjk5+QfcuqRyzBoJqIBKlfJwM/YLHVlA9v44/EMTUpmovQdrQ9PEX+pzPj1KxGLi59HtSyXDzdeOGu99YDVSfPtIXWwLd0lDK7bzkESBPcd/GCPFh9K54ChvNH+IrRFP0r7OmjOCgo41mjZJ56wM8cgx4VclkS2ijMtANiEYUGxHCEvyB/ZiCAuMvHa1OGYQurfZqpslGmHejQIDXl0wJSyytP64t8TXGijSwM6VCKbcoF7f74q9FSoO8JL+nt55TWVF/pyWgjKRVWFCCacEr1NSj2j8s1UbuymJu+17BHhUHV0+CK3S139AUp2FEHWzClnt4sFMnkqkT5VMn8guncBqFDPVXc728LC33/8+wPrUUgXEKFlSsNFcMUu/yoAGe5j2IPiXEfM3bpwlCMbVWlwRPaybOx5P6JJZ1c1w22zaMaN6NZsoCWgXZhJmPPr2wBcFhI7M+x6caJ7jZ7rYUktFNm1p1Y4BG4C1frVRGtH3mpGu3zkYeTRjdvB3iD7/pse06lpQUDUPEdbiJU2y3qYERk0ZMSsfFipaQ1U5jODJ2ynBuPS66dr+J1cpuxycBETMmM63TaWTuOZfhr1pbvLnODsoFIKz8nStH+bBprVP1OUY9shGBrZU1x9YKFphT+Od4SqjD5NMI4kZlHRo84E9wqA3nG4oyKW+LV4Hb4q3W88ydttnrbMQ9vtFiQCZAPBFrANkKX+BF/5m7tD0x1ulBd70e6zw7JVHczWdcj0wJHsOZvsQvymlgZ5ScpeOXWATeM02yntVklXhEttACwMuU54+1Xyst4ynimk4Sx8iqZ0S1P4U4hZoY6nOVIuyhw0tEtlTQS4XrzyiV73vmOPHM75XHr7Uewf2qI8eT9+yXqruyjFPFONxxHPI1EsTmqbHHVRIkz3kQluNSRpMQ84ONCRMHfE3w4Pzy/HqP2/M7nGid2Iixw9EBDeu+G127kQOSEsPoaXBF4TRezzpmYt+bSw7HD7Et/0nz5FUruCf2h+ZYFMr7gEi+Zg136EmvqvmafPSmmh+wV3qzmq8r1pvRfE1lqHn/QhGJZiskz3lQhWCO1jfgtwNec8EiTKV3l62owGX5kAnebkWb9YLXMPasHJb3sMhbHnIqq9jgCx6FjBa2OSd72/O7NMsJaoOMoWJd3ocwWdBU+PXxsZp9tFvZlxc3vfwbNcAn/m3Cb+Rzcr6vQAz0J68b+rvV8Rv2QQll2YTe6ourL56T2mutrBJSzOOtAear6+L038r3cR5ZWy33vKoi5wjiNZA7NieTSJvFCh2bJBEogQoLoKaKqONLUff5Z1AksoaCghCB3MZUEPekXp/+SIae0YKz+siBiSgIv1caioxUWYikMtnLmMLb0yLcVSRlfpusPLgrgmA7+zF9Ek4rQ/PAELeXpbmbT5pdTPdwvhJz0JrO4mLhuWqOPjUSZoIoYaZFDdjqwz0e/qMe32FX4ViG4j3l1tfvaehqEeoqM9hOftgIUy8sm2EK4mVLlUtKF1osEv674ucmBflLTR+b4JoFtAFgp1DdoZA77wyXXfgk6LtqENM1VTVj+0gj2dYn91qmedH3u3KP0baXeDeCyNRjypkygvRQMXaUp2voDnT5FDW/bbWjD+9tISkoGifJzFL2ZJ4onWiGCdZXkkYmU0m2a696CVcXN3cVv6rGVFmnuYhec6Y+2hxM/tqBkRrfZbqu5pnjhHQb5LB52jVzMSPiskSnbdPOKbi0cqty71cv2/15byLw2SQa/vq4kylR9uT+VIa+GowiJ6htysRGASdNxG6mmAfq7Wzt4EJJ2Y0znVazSPCycoVxCK+RAB9QHEa2JQeYfrk6JyYchAfasF5vmOOsNnP5w1TrNuvvMh+JbCZVpkSX0ugmFeTB+dKY6/KqWmrnft6Bb75li1DRoyZFu2JShFWa+tqAUwRbTIimxv7sJO35lH8rLM2LA33CbL3IrVjH7aYbaLmBthvo5IEnSbs1amfENsf+tthp80xn0JFA6NoPCIizleHM3uPCXO3fghxVfQsr6fVbuKu9b2Gu4i0FcAslg4Y4hQbsK9l23XLZaxZcLJp9aKLwHIFQLmjp1iaP8E26jk1XrGEe5dvBru5WjvhhXBrxw8euleWaxVNaLFbi/MpyOwuLBro62kDQy9GoID9f4r0cVdRkZlaS6TscOFdCnVkWFCpGqUhjpoimSlTbhK0pXWgN5CAxYKLWNAQrKAWKVlNb3JpVMoUV4jS3vMt4jInFiIagVxIb76lOs5njn47EPkgDboKDElmLI6pitFhzAxibmi0LiDaRPSUBa/gYOhX+/IpTpEfb0mBReR+xRowC/lJFLbg1HzOnI4j97hiyQdO4JbKmY4lsuVhGOXrFL8Yf/byLtrJmhS62ES0dsX0zgbWGmkwG/cKkHSBo43CIznYlysmbWIz5HpxkFC1aYTzUj7FMeTeiMOPPUiudFzu9UL1P/JiTvOJcNfQd/REEsGOOhuMXEz7wtPoqRGTSL+ga4Z1/yp+Ba0bT1+23Tb65aAdbBXAt45/CA2VtbI4n9oXYebYSRyPdFm6jBWZ0nj8JwNdmsHYZfhFWLs7ZFa9e8g7XXm4SFd97jgwO592sXLywuFA3Psd93Hr3dv/tqy5f5Grv+bZN5Rb8udKiaqHoEKfGLKQZiIbg9eivo4VxbbUqBvZdrEIM7bvYfXd4N398zAM0hsY/RkrrzxPzh7AZh673mshK6q8tuLuEBc11/OkEwuohl7n3IZ6aY9vcYkBh5eDBiZpZ430rdvT0b/2t5gGYASnaQ9AuMFY3SE3wiSq0OmKwgdV1gE80EFVzoNHm/OZ07bmfBKDA5P1JUojU0C85SWef0Z5D0l5OXp6PJtrXnvcgldLJ/J6TUaY1Ez+cO09rUcAgDWXbienh/CZxsXzSTe9x5NVm1DvFkTntatXDB0rXGZJiDosNNAyGat/Nx8AUNgf99EE1T0u9zs+WpWKOQnZJLnzruRichFNINC1/DBKbsIRExN0OwSx5Ez6A4vjwjc3mbEveY/evQsX1TvuYituEpYpz38kI4Ms7Ltf5eKbTa1RxpzM3H2VSo9EEwpY/3kAjwuRZfmQe+UhNrpVH5pIHAG0Jwu/t0Wx3tgkXiVpHfYz93s8FossQyQLkH35DN3HSsiCRuvTUle68bL7bN0a/l2d5d7zLfsrSuiPtb07DLA5w1TLDMUxjaVKNgQKdsRAuaQYqVjPBpVVCUGnOE1SaTQS5q5Ph6bEn1KFcDB6Hn1JtLj7vIH4WFkit2HhXMUkLNKzHbXNnsTICkfh1vKqHeOV17fb2mMLEXutYmgmyCJwx/cgx/YWikb80vo+4QcXt59nmBNgbwtw+d0YF0QcSXR6FQpq3hTQcl0L0oZTaaTqlxrHA2g4s0bDqES0g/GQyt5zMv2tYafgKuS5siuLMKCQaSKLiXCknupRExdlTTjQ2idyZUkhwxwRVC4qRf0pkaQYVkmyZJHbuFWJfSmzV9C32ZRTMWZa9J5hVAVPxXVkS2vNN2SLSL40oCirTPPpQNf+gk0/q93EFq7RcgLBG/6V5o449Z15Ri5xBHACf5FBjV3+5DNpsB2VIPVk1Zprfp1/MyZQv0Xt4sSpZccbJ95cY+myUAfgu1o9dFX0CtGOe3oxRcnYKObbnOgPPtpWHYba9WFrhYqXN/QzTNMElw6su95UcGmtc2padIKU/eLh0Jc2TbxwWJBFJYT5s/1TRFiu5xWTnobVYsfTb0pki5fS7/2AQ1H+VFzf13+m749vddvApJI7qbZePfY+Bdsf6Fy0Y1hSpM4jXF5JWT26oRHGS3ThzM5tjJTnv6J9PpPmXpn+wmiY3lHiGnye7mOYTtm9eRT99K3GrV9+RVcw+wcop2N1iqXpj4xO9XKHxuJ9f7wIcCZhplyqQcZpv+Yg4YIS9TwHwlgBGak2Wfb50A3pI6B5YJdRhtAdTRMQxIyouU4hLGFc8cXLjIdTd0gH7nbDSJg7wRQbWrbPgAcHFjZrgS4LN1swWATQmyGzGCN6ZIG4uCP1pQtlmC9AWQdPba8DN1yz4uMSCK4TNvvrIC5BCuhI6brgaqTl1sw4BgZQgc8eUQ101ogQ74wnHY5r5sLwRTg9rs3JMm7MGlKjLw9lutjVPrd3s4JePv+XBZa7y0BJYHlgCp4eVwOKgEmCHtCXtA9sX7bNDaxkxTwIbWRhpIqkaZ8IfM8r1IivRf/yI8/BVRt5cf2utdpaH/m3o+5lnXF8VJG5YjiEetKQUlqKPq/Z/JhyEddAnoK2k55IpYqZJ6dAwmkHusGYSFRcJXpyUtIBI8urTNI/v3RVIVS0nhsV29bkO5tR8iAODrn5W60lxG0qSuUxIJWp4Di/SucNp9t2JpxdHbXtnaeennZrwyQRGPnkRQO3zxWQMWcUiPH/TEPjpiS1kMXPwTxF8zF09z/B0wbpEwYz8rO+ySbtcSmsrdV+YHyLRwIjDcSKOyyKe1qFGJQLp0WbUfbZuHt9qXy4Hw0mQORMRjyGTBqCTUXjVGI3P4FFkCeO8vNRcWwolE82ob3xrjvUlU+TG+rRt639Qj3XHP8kMLMnl9SdBIR5SYIR6qSW/jS+ThG2Zm148quBv5lGlvYQzmsxtXbRMUjTRqcvGumOu++9WzOKoaQEx12/dhjX4jXXWhYCqVg/J0m/w0xaPUEWfb7hywalzjCvMp6vcL0n2Pt4RU1Iqs8QtWkacq0/Medv/WrGUIXVFOwNczRpp/tSEzLPfDlpm/rebrXxL4toproswaEtqk8rmajsrjambkrrVlIcjkbZv+witSIhxfo9kwgTJjUF8qxS9EZZELY1gkW62I12E3gp1Dyl9VIcMUVL5PPY2I3GmY0ioG56rifApqRDHgcLCc2VwmYxUZeRDPC+RfMpRpaKaroysex3Yq0P/QLX43Or3rPgRFMdH8XkIfBpN7tncntTPktKt/4zkOA9+FyNoNA8o4F9xDzQ7pYPj19iVycHWun9oC+wnxhVzUhCD7Vd1EE7WRRnxKpi1Mzwd5fuKMFEVP/wkwAmRTEMtmqpIeQI+TzbrutpqqiT0y47okUifcHOuar1Wt+UkqpcyBFMoFdnoq3gEHCcmpafa65WVkx79PREtgouEymED/s3796Wx3rjW22/sNAZUW7hMlE7fVJ44nRLR7iWyKnbfuyTmUg+OvohiO7J+7TNNa8SICRijY022qbUa2+u0N9IerKDiSj+qxUF2sFJhkHMaxHBGg356sPLG2zgR1rXsh9+77dMcW7wR2ml2Pb77irZqOXM9aFS1ikPI5dc/ZzbY73Un9KQT4uD3pIH1fo1py0qXlK19YyKH7FtWXVsTiwV4EWjzYJ+1oZFN57vreb3+yQW0gur8QV5hrQ8kA7wlb2YfWdKTAVPLl2RACus+38BPLOxUY/Lv87oHcdC/zw4i8YmnhZ4b/etLD4gRBikbDSXsI+ihEM/rfr2/7xUTozQdzX+FiKCYThmhoCLU77lFlbE5EYFNV8bmVvRe+r6pLrS++N/SFS/riZuZPFdDfKwuVRIMtPHpoNOcGvkzVOlWQ28J1WPx9cwY832JyFc68lUWeXKL+JeIx9ikT4LxX3/dPgkutdb1gHrfCwE1FY0FQTUOUnUZ3BLi8SA+0FYRjceVWx/K0t47fYxkad+FUNl9hs26Lom9JdHcuxXArQW8WkA64ISq9bMH1KaNHofVnAZ6ZFb4vTW/RKaeLXwXztOl9lkatZuNWVT9s4dlbPDXPY1Aae1m3ySvP95Q5CtjHFLV1s8BMR198goeNc7/ZH9Fd9c0MnpeNB/p95yUA0hzQhPfKOAnVD+84vZzNtKuSEwnwXdZK+shRJ1r7RCjlc10z0pUkh2Gfkd38S87y890kBhlRhJgqD7DN2epPplK8hVm4pCmLvuYOYtUQk+sLgM1AxGkUiq+dewgj71F7EBi8X0PMvwSrbPE3eUUziDzWQOUt7P7Zvf9Lkbn27LnGXX50Oz7u/nv3WWi7X72GTDa/3MpgBgGFWOgn6g01nBmg1gEvZipmK0tp0f1zHD6hyvM7UR09McJwdTX9kyVOW4TTyWEdZbVhTFhwIArIUUUlgJRaAf4UPoSSmQZ70Qv0VOmYFfT22yzPPc6fTlKZvVgZHvQwTISLHLFj8jVNGuxIMdliDH7rVbfffdOTMwqUdjVZnbxJ7WEEwba5Oiv/RiQKcvaOxrM5vhmVIPlyv58FxY8cz5KGpwgjaN6g3j/VEWBC2sqQn1zSonUH4lKK1oeLtRb2s/bJjZYbMiBJoCae+H2xR+2WvN7g6voH/SF4VBtohfI5Fcx/Vg+aZY7aWxGhtetj/BehNNAFHjGaEfci2WWyi2qFtZwmRwMUCup4o2em/iycyscJrWUcm9IK4cSVUNvDIzFX8br3FoPWS8FFFEPN2PuDpUycG0KruVuCy5NSUQyX9qNVj0SqqDVrBh09pGrakbUwRS5OFlounYu3X7md3EvnV83K5/HzN9YS6tWfo3FPbcm1It/WE7QKV0GoODd4ScBQW7/upSMIEeWsNV6jCyhQcfRLNQUarjBt9XVnSRuhbeurmxtywn/VpW38vz/EfXOJnPZh4YAv7VykvEfV4pzsVAhp9OWRvF1SrKF5XFZ7FpmI+AxNT3YP9it0RTcVFWffVNVuYE9orzsGLP/SbzaxKg9DlmgMkRACmTO1MNr61yV9FH75bpNI+0X1tugEk1Z7vWZ9C93RTZ+egERiqYVDDtfJL5u6kgbK8/pyUWCMxUPWAbrEtEaBOViqqe0LUuXM5hRzqBQzjOnnKoS7MhulBDNmhdeOeH5Jfe436/Ss6moazBdlnBvGlTHXA0wBIiyNUSVRR44s88n5I6CaRO+EIR+DycNUMOC2YyJ3acATwMax+RigfUVzG+VNkZDIgluEnxna5IyKe46zaRSkIR7w9bk5fkwhO6P0cM1DHW98U1nNZ4BY2K3RtrkaFGuTs+pTs+pjsnLJ3eGe5XVyBMVbLqjP0LZpa3tlekq0hZPoX6bIQFuoV1aTLgPg9ARQmv8DnNG2qZ8lMMXEQRrND8rtdobEbEUwq08TMs9xYWT9XfAfIrR0xPeSUPTjfhpU9HIqYdbv7ABxJOP8LJc9xpnf2q15rLqdGhqtNjxSxl4uYfwRhk2EAlFd62wVuXZ3S3ku/5yrUufn1EmP7m91uVeRY1bLdS0NJquNnkQOuY+kno2ATBaM7u8J7N4fp+rNJhTak+bvBSbOXs2rieskepmSx42sT+HtgiOCxcHibiD40mAcyh/YvxYxgzCacGiMPpfmEDVsZt11iYSZ9Q/me5RhMVaCd/DUQAAnPX1nTPmX0pVRGVE+hSMV46QJAz2h/Qin9BXMwYSglvoA7vIeylO0BWUp7gKQWoqZrLeIPob27KJLe4aYxLd2tmf51cwVsp7YymNNs5KVeMFjwnwz1aO/XeRYWUHk3vBZPy2qJaydiHWNgaXQbB8e1cJdaFdcy8ZEbKPF2in+JkakdUiSklFCmkma5lERhmJvE3wXUEHQ5cO5sZfnOlPnmvkslxL9c8YsLhpgeB9/U2bbAu1TZhuS/1Ge9ld7wD33m305DgctOG2BrMlalym0ia08CjYNQYVc7DPJ6ne0Wb9qPHhU7Cvjho/Ba/xNwmDLwl+r6Lgjr8TyvTxwYnvM67TfcccmWDUR/2C178vfPE4QgVu6muqua6RXadihIICvwbAGhrVwIJplkREtFwjFPtv9w67tQqKuYrGFJMef9je3j0+rkz9Yio1LqeH7yrTPtesihdK+3cJXUGn0LSuxZb00el8KmKXYR6hgaZ1QVOxH3xx2qD+TNRWol4mvVw1PRcfAOvj68cg7P2ZBGlvKwni3sskuLD2qfgEcGO+46ctE1hloM1AZ4VfBrxG8LLPyQBGyqqKfJG6Dlq99upGpG3hIiEkZECbyPGI+AjYy0HaACubp22z3eHRXcEWAJ/WijZKP4Z2NgdoXRygfWmAFu6B6NTjp2vYrNCtqIc26ebk5Dz4+oct0Ngvqde1nZ+PPDxv5p9dq+ucfVi5w1kxDfAc8cPsaAjYFI9JuPmYRN0HbA9Ho+ROeyR2M/mLVDhcai94MMVi1AXo7OWKplugnYk7wWt9zViknTBYg2m1V7srHV/vR3/U1/zMoppYv+xgpMXGi1xOKvCEFtNqt+lLuehvuvNE7Txc7BYlL94UosWwMoG+xCA+xy6tyVB32hZ1k/bf2sVkqGs1wumkfg/o6mwSUloTm3dI6olNS0zJoB6hVVcGY7G56FrlliWWMrEYgUHaVhEdjSB7dWlT+N3qCoDEwVCANxO/15yHnNEu5ZBbAJcSlyVfo8PCU/GHuCKFUJC9MCDLDe7MftB6ql2v6I5KpIkYBd8Y5jk7g60y+cfjg623tCBJWZE8pt11uXaIhUTP+/e5e/+a7MlM2mFS2E/QjtwkVQoL4zYp0yxPp7kCL89J8wIeP+wOIlYoa9oMpet3LYnshUkkdfbhlQkHK18eI6GViL7Qom8v9N/6Xl147a9obxRvxWFY1yq7IF9qLzwJTzf1324ugRrCOUyoNzgMYNtviLfMZmZXsyYFOJLDocNrhFicvNLyLkglIHx0DJ3uKCA1NHWF3xuh84KL99u1pph6Y3bvCmc3Fevkchv7gw+/APo9fXw9mbLehmnF9Jvev8IoDtMWGbUPJ6bRLJ3y/nWInea6aGF7FLn+tr310HA1ihZje6JaG+Gcax92nmne7rONpyDml5Me90p5ivEcXnYBew1uw0x5Xad/t/W2HzZgqeOzdY0OIl+GYHMJ9VZLjz3hmZ78TFUCIZmZKy1HU0zqIQNhSbmwYww1r3vCBuARs8FrEDorzm55vaspGwF+I0zApHbNqoXmnLmWP7FnVdFjbCz+iQdYvtPq2XEhalHGWHXYiM2z/dZ1HSpxq8vrA0z21sZgEzt598Uqg612B+EY4eXnDK+sIZgiCI7dvensZcxTbeiz7+ihoPcrfauHjUjvl2FJKJ1SjdvknRuyETZuGuLjbsHjAb7ODOcYeM/PvXP+5omqg+bbu6NwGdWz0osedJ5pFzo3k2f/sR5w283cBa47LY/+q+pRUfZxcb2VXuiZQRZS8YEtcsSIovz0xQ7Vc2hX5tAuRvJk15iGPa7vKoZ8S9ki44QvR4ZwOF2ZERs7DNpSmzqd63ti+1l3ltuc2yL9cF8VaKbSctWe6VY9K1OPKYfNLu4f/yFu0EJcY4dpof8/A+k8lJrlZSyeRtdZEe8EkBcBuR1t19LvsfCKhnBxUKAn2vTk/cYaCXZrM4lcwvR7pFJXegKkRD92h6eB3QFrhGQDyvXrPIq5q7twV1Jr/oILWFarRUBbLRcBTdVGVRe9ArAFpk+7mG4N+1xFwmXVKpXQatPuyHTKVdWuQACYIwPnToNns96zCJ7JkWcSa8TdmHAHGz0XM4jIleZPyYQ7V2PZWLs4V5kc4pEuyCpZ2Ocw7nrjykg5mCvFcEBO0fLaeikZCPnzjRLsvkcZk6NcAHVncBY4MgE4kUyJjE8crR7XtkiVilzRx/CR0e6RUvfSkC57JqUin3w0Fvlz23k0ScfX2lUX0AHguQtoA7DmAlqn2hwmdMUdw3aQ1uTtuySIlNWFDPfdOKuhkaAsVNC+CsuF69EG13rxC1s3HuN6catpAS0BtCzA1dAMeV5vlrX3Ouo1Tgdm/DASMjbzqzrP/BfvQqxGlSUvWCVk3EwzXv76Os6qsAwWFppISFRoIyGxhbQNJLGQjrS23ZwaIJZay4pl69/Y1mMAqLAzv+lzjXjR1+mKOWYvr5oPjwa1aFa1lYUGJnQnoZaneFmCcVEqE8SuWhk2edaXhsFqE20/07PZ2qLZOisPbVhZ/ZFalIKiIC/r0nK7smB1TEe3bfSTQuqeNf4VfHCNgmmhzbjdtHGuaTAT2bKRZQNhJkHbJnDNgpnIjo10bYGZaNpw41C3VNlsV0e9dcb286qW83ZH116YSCreme3NrERmKI1veNo7v/q8Col/OGwMmsKl/YA3JaY1nYEXEEJMG9+NKD4iMKdZBuA2xfdl7hBrNntahdnTdGcPQ3c2JLb97P7tTiyJSmV4VS3Mppk7jWYmqi3U2Njc3mFqZlAznyJRaUqB4D7Je6k4oRiZx7nzqdiJ5UlT7tCpORPPmzPx3DnjmkWk+KgciHgjvSW19br4FRfU2pelvmd+CmNNOuw8MgfduVPHzJeydb3IbXgQFRuKcN4wBNyGBF6364nUeVWhtC38AzYgJSNQXaBr0K9ctOl/xlQZ6iO42i7fw3XK2Q2R0aE2l9uCcXptdT628mSaI8EHapicb+QJ0adlSKNCgabhqNjY78ZP4nrBs/o5qLXYwsyqTH5BJhj+e6gLh3ghzN9v34zHlNAuLAc6RxCjhNWN8tQFO+D+3iVLHIoZVMmQJLlAHYRBlL3bKi/vQ4rcp+sHYdZPKViwfsyLlaeFag9CHMXNgZHCI7w0ZUfQEV65KFeLC6L2+PN9fMLkcPQnjuMJWNCQ9unCisbC7Bva9KCRNGAbLIGYfNsaEl1PFfPG57NTKhwllTpG82F6PE/CiYp28JX5u1JlLxyBRJdcflUBu9azFyOnvXupaYcdOaSdW0co++KxdSj781KgPko7iMq9DFHeN9rsdJ/nhAVzbxjXIzJZwQaM2Ue9av9UpX5SsdNTrxt/RkCi5SeftLr05A48ZZ9GpeM6u/fktKJT/35XtKXVBddKLhVlW/V8aDnNLbn8clpZWCRREJPMyntVEJXGt9enIob13xZNjzD2jILsMVlri+ABnw21ay2sjV/rHh9RPNXHJsiy5PkXYA6C2NwiPPfz5skHF8CO3Zwp64KqBNeRL7nzSeGpkms0IzQznW6MSTU1p07N27/xJEd7+NOO23xEFwtRFQl5szXy2KpGf3B5bWr5zZ+NLTubyzCB5rCD4HnN0CWLzvMVPspp9cOnmzaAQ+AhDxzSekmJHhJBzey5HR/3uUMqvtWr2Preyqgsl9nOcPIP7jRgiVL+5wGj9loYouWXU7qxbZ5Nli2/1pqxD+ZZu0eyVTcZrd33dswZpgOR8DvMcRzXEFOTdz2uq219+K1wnuZ2Aj2AforFoaXtK05zdtbMpTa/t6zTBBU/lDL3qGAsP9IIi/WLanxHNfRrQxTMkmEuyj4aZxFFKeTZLJemFbpkLeA3SapUEFLu5eqkwUMtyr1AKNZ9VnUnPIJIfcVXxPwaloT/rsd44dAsT08QZVy7ZxtSvqpN2JpwUjs8Lmb1jJ+bZzo3clkE5PntpAnf64ggOf/EU5SR9ySeJUnq9BYLQ/PdzrLHAus6nSk5H7dibjsOo+hI+7qdMdHyE6LnmZPgTeEoGJX8DZGtPRK+qONJN58GN/qYmGtlY1awEwR8TC3vlG7VMdLT/tI8k3tHhFRYVZEW96SxZSaDcLmkfWx6aJpe9NASfAh1Z+wYT0NmLrnL809Z5FAaNnZwTdrCLfcu9oH6kh5saODZ7U1u5HB91rGmx/76i155hhHisjw3V4/IMXJzXIJF+Yg8N6HkGdOtTjEDo7+P6/zRsexQnFWuhQxBeGt7a8fthwrsf0RMW+GlqVCQTKHfQ/G05PfKWryhHNfnO+1SkfrCPq4YrPl7yly0zu7Si+aePaqJSC9/6O8uF2kKONSJkcn4JrrS3DA3vZrJvb4k8aV0rQ25+lWl9Ho07y2Uu5irvdEZJ9Pp/R6T5tSlWkeQLTRDl6OwZOexXWR3CfLwU31quhZZhPn95OgarLhexZ7ZFw7LaxcNQv/ZvIYcS9G1rOz6wfkQtHLiFyip3naE+SukJOvVb28r+/q/paWHtLjnNFTmTamhMgP+1iwfpGdhPH+SO1pA26AZU1M+96b8DpW7vAT1SZOZE393aBK/kZKxvGufz9Nb9InN85i5TL5IbeVFs1noicd3RDaJefMqT2zCSibNydPLTE0EEE569CRYk0lwcyWdN6dFbEzNFlhfq/FtqDTSpA3WHp/jv7BgS828f3C2/81pMYn+Q2bEQ5PgWwbcOkOmJs0neSWq4ZNWJOH0IB1mTMg0wSFOPBlqc8PAUbVYGDDHj7mHg51IRVr+3dkTctH34m7IZFOE0UlsyNZ7iagiT4KAvVLOXkxqUEjF7DK2aTXm/QlnFNdJ7je9+Y0TyDQospgfymM35YKbLL+HeWJvk6R6D3Ij9iPNjXgMV4GdgTNGA78iGx+Hg9QIavvZ/VesFyEZKoapREHuXJQFrEtPefr86dkczmGV2RhEVAAPlo8Qn6J6EzyqfvnyJdeRx/NDBvOUESvIYW1P8Vrib2RuuGsHiKCkFdvvIGybws1k7NJDr3Am+9AXY4eIYbua4VGz8gIxgKyB0hF5lxThteyonyfIIEaUjTeLvmaj9snOQCo9suE1LY6ljhoz2Raer/DrpDnpn5ry5IyYZsUfatFPT5m0ErTDmA7R41q3z6YQGEF5KjAV2DabxACKs6GIRmAumkI0A6VaiFkZphCAhHWix8yR6XnRrpgXreK8aPdqbzCGmBf2dh079Ay8HF1bSkBCmLhFfrFZa57SDI09LN0/0zej4q1Rczl3onrJvd9bkSA4QInhGTPBG1tEB2y9bfoALmDRSIyJJh1bS3VNIGy1aWwzmbppPB31Q0T+pE4E3Qt0jsXlOq904g0VKinAuN6n9yPKvn+B6rvOphX+PW0Mq7lOkhLJHbSIwDLtQt9JZ8nEzMTmRvPx/NO5pnLz7jKe51bzLvLp+776+k2OBpf77UALOJlNU74xqO/1g8/H871zkvZqeks+uDd1B79ju4r37o/mXaGms2m3J5pZnrdsDqEOg7wuu8OEM7z0Zmc0wR4m4RDspJaJ4XXAjEnYMK8/hNDdqKy74/0dSify18BKYtKeOsDG0SgCRZTxNMsB1aXxnaHrb5naAsopcZsbkWywzOzb5xqz/WYqjtEtcE1v0XM8VHyefltwlskzSVK7zbBdmW4Au+WBrnW7B5yYzWeywCoq1imuaLi09WZh9tTXHz5155fssoDu1XEkxtDctYDnCVP4nNUg4ozUWVlZ3djt7S4sZBt/S0f9zmUyryb+3Gr+fmrHKwh2Nee4iUHFRzh1rfYWdvXy2KVDfC9uLWsNmbiVcZZX8b1qvpfx3Tbfcatjv57brzXz5ekl1uaLRFJ7cFT2eTyCPXr+mNkjoogl8nrGBL1pc0RB2Rx4ocP7JD8Xjk0vDCNIAThyPc8T+fo+57vRQ2T7fR0T2RjHMAHmOqIFLOs1zoLH539y+RZMDdGcjLEoZHC9QYCpCPT9kr41fWR7akUNE9VXKXsjMy1UaqNtIQT3I6MATQWv/vmna1juBSUPgiuMgN+YjONcnzH2fQsNYpHrF0kRSvo3WWDJIlP1w/J2wlLleXmEDPUpgyvK+y3iBURLmjNJOtZWXhD6BNH0iR5qOWL+Nr4ZHuuvabG/o7/+kh5yVfQ66nOiSMndm6tVdXTMfZSFmGthHKdX14HVFyS90s3YSYIHlJ90SebhHI/pTbyor+8k5pyHANbwTnJyABJxzsea23NMptsTCzoN5DN/ed9N1J42vfcqCQYjmV2NPqRyGxNMtrRehFmdPpwmcLDJnvKfUtQxQW1eJ+uvstoggNrsJsGr5OR1cprnDZC6ub7L+u0lJybWlYfdTfzTYAq+myy0lECt6mhvJ9hLegfTh5ZXIQ8lNI4XNfpB2AupAUpZhwiA7aCJv5MRtuZrmQ54xdMwEH/yGAZBaD8BPcPaxc84DFr4+SPM8hx+yr6+t7BXoVsZ4nXLwqvxxzQ61iHbtbao/DJEw604r99qYYMlzOR8GPAuBdDtZHGcc2Q935YBrVlOP5zyD2IXeCnHR8B/KMDjwWhC6BtC39dbmInM6jZi5+nTnYYuDa+tvJIWrZDu7uy/W9w+fPt2dxtmjDSWtlgasA2jzuwPdXQdqFS7KuIKEZ2qiFFslkY8ZdGBJi372lJihXbwZmzUhwu7PoY+LCsBi+GuzBwCsXarENZZ/MsB3hBO+kLg6v4ptlybWNtlfHnDBydM7Kz4dPiPauAgrdtiuUtxGEuIjz6JHT9vFP1OrZkgIAmCI8KwkfA+KNQ59ftifs1ArX+8qkb7qExTPdAdggh9YVF9mq69xVSOKNRDFHO42kI93B9woljTibNklm6NsUS5t70Ru5yXWGaX6+PeJUjOYCGoMs0ZnlzyUMkBGBgraAxkmO91VPmMjX15sfWEsgUMOn1rO9fIN3F7T6cq7WOGpk49dfVJtsP1fo/EOq6ua3oSaiMXsdSTJQsV9J44JQs7W1s0fVJYOx03CD06aQDLBjFbCEL1mCX9bncbp+wF5DBTc8HzqYh0FRILhru1HuSRPf8r2zXRj1hM4CpXNX1YeQ7RkNbzLk2Mb+T5skZUZ2xlGZvM1+pUZAyDcp62PonkKddbnQXbWSQrVT3eeqGa+r+W+UWdgZtZexFmLRwTC5uxGzVucWwQmK5bW1fuRUXdcI/UnaVWylV6sZBmieKpBvg90jVnrqScK9nCLaV+gbaxpsBIOhJv1qdIb3WLO23TzoUzVnLMIhbSsN7aXZbfZlP/NmdBz/jXV+3HFbe6LMXl3atKFL/O3bJFJiJlfHzp6J7T0Z0OO7pdmAUSHQbtTm9mQ19UNLQqIVO1n9vRb5Wrx60ffLBMpAWAt7Fqa8t/uuo9qbpb5eWWnrjNqiq3moWU7VkpY6RcqE+Nu/+0vbICbQMoHJXj1hg3NediwccTUWMvZExR4SjW8yguVEr3+FpV7dfcdKsr1elMv7BEnsh6a+t5Ck6Vioqs6VrkyUqrr0CoPgwvhpAWEEu6WmqBj1/hMCGdmqJBCx5P3sAauFTN78k8MyaY0QyKfdrqnwXF6oV262DdGbznxCvsG4+hrse7b3doqX2KtoYiXSfPA9lBjX0lX3oHvTMcJnuWbBwe7b7NBU7i6d3TNFaJpG0W7i2ADlHNragMmzrnSUoy0Lq43q2ltZ8LrS3XVC+bd1gvhfWzOWt1LjeryZCtMuhbF5mF2ccll5c+XfjMUjpTpQi66yjwwijG9GpC1Xd5ZfX52gsP8J8+uY10etbzsj7spbKBE4nuPfTcQXjdb+DFDsn5iYJwAbus+/9movzakikYsgZvvv2w/ebweHfHMzOXON6XD5nCUcBHECpO1ff89lXWXd8jln/rkSJc47h1q0FK1hSyttjKrkDlzq7bScJbBNnAhVuVbzP8wcrE5Edb2kmgr+xtCjXAdxxUbs2rZs9Y66jnL9TzVUXzHJhaM5PLHv58Ra2tqufP1ZpOPnoA+/OOWl1Tqy+Y3Krx3lNoHR1VYkDEGQOqSTYv/X8PcSwUGdnYBPAu2F71tX67McYU/EB3nOY60wm0nslO4+LzJR/faYgU1mjaL0CH8etRKgiP1hPPhHcQ/rgjIYoYERa3RY0Gc01f3geGXULmAZk4ggX8iEnGXfQpEnvo2kQ6IMHRMlqW9RAmiX4keAP5WrJMgAZYqdPpqe2ErJqH0mKoP6ePSzy6ch3picS3QwHldP4e62iib1atoASqMLcXBSKRX5nSWNgqW/Bqt+jsaZPWbqszoeO7pk77nM2OeS7LyKHxuFJENMCCMP0ewZaVXYMIT91p7aU1qr50zaiaT7UD3dO/hFy1WxG9VPwYBkehsf3Es4yeaU+fIklrWXdwBoPDOl4STIjz0JdE6gN+XHBv36URuXPHOpaE6z8B5rPHoJHjddLF80HydpTYIeqNMz7zZeBGn4zp80AskVwK3PC/tin2S15iFXzz0l1h3bB+6fc8PtZZK25cICIxakHsqtxzBg4GiDFRDlhYi0kQ29mICoTXGIqIgk6U8nXCdgqyI5Lgq9bL6cb3IvhZTmlFQJMT7//zFtzYkzhzpVCGivW79OSyoRf7WyY6l5cAXgj1Vr9ZjJYrQ+J3i2DTz0XgZtI9KUJUcprZuEgdF4y5oUmJxNaQi7nqa0ssRhLCRj+cHN4OaTMkHV/TbQV6jX1tuYFovW+kZHD+id0TKUSBKfQaoul0EeAQZVuVuKIqzmV56q5cCxkdOu8nfqbrftt1PRghOMcXEirloOCrU558gwEXlXQOZShKcNcCgWbPTHVXyusvH7LLtRHPB6iIbg7Ob1X6YhlnIkYFw272QmMTogKMqzMy85XlLWhkJsiG5XFIVlEIe8p1Q2UwVKRsOMmIuZiv3Dn0NkFMj1aEm/aRMvatt2zDHsoW3qUc3NwRwZWgPgaHSJ5p+SWadaXB9YTJVZXZ5JyRjTnKM4O9W9mlS5XDdZ8VzX6ZQoj47FS5UC4JcSIt8vVNt6Vedz1x+gVrUFBfCMa8meGAWX7AGqtL/6shyFiil1jeTEcT98/WN+FirPYZtUX6wGs1ml4tNeYoA+/m+tPimre5sb47/JwOMJnFIVn3y+TcOiW7vb1t3Hbojox+1lpLPx+80RLs4WJG0jybK3k4V5Y4/HanblnW2292mCYZZ1Sus9RcWWLJi6npBQrrX2KWrL/W2z1XlFgq4KpRTu/H6swY/4836eFMH2e+3nTxzoYd5V7H07dr2hiSAvrWvBBT03KQu9ZUqICKOSpQ0W4Zoohy7HM6hEUWKIYbIHwx7mNYIZeOe1o4ud7PyPmSl9FpUQUMu66xkWihJaXExck2EM82asiGE+8t95KXvHQk+c1jmLXzjE9bIIvX3f3J5CZN3o8uIPxjhvH64RmAgWm2l3BKmFxngz9JbTYcVyeNUTg5nyzyKcVky2ZOa0miGGq2FhHBf3DEyYfuRXxQtgLrQTzqoYrGTduxScK6Wtd2jNcASjZt/N3yM+XGxWuiWjQSDKzEvz6YKF3I+pJbWl61NClUjoKoXTdjEYLdbwj5uyUXxPjM2Sgluv4zOvNfWQHvAeQefEY65xQMujld8aXZrVx6aGyWivNrgzOSezElWzIxgm+hGahebAZnibmWEq3g6S1tPMvuynwUxYyftddedvFwBGqRsOkSmLWJYB16Rzj88SayFV94XIw4oc2rnpu8qzPn5pFnUFEt4oWVvbQDE83YDu4OeJbXmFCBRxNjiwZWN3iViiB0aYnjeohZi0ZDKY/NZqji1DF1pGA+IzS3v6Ozv1lYqDGZC9c9fTW4I878rPOtW8jSeIQxDSEGekftosKxaSkvAQdc3E8Wbrl8sj3gJcyZbqynXdtyBrLerLE7pzpR9AGZ7u3o+vxTqe6w/V88uJnpkqcG5CUheTmopVsDj8eBuu5Sqd5StpHTB5nmljwTspl+6whn9PbSZvzSANPWe6b3hai8L/hfv30OfRhO/o+fRQOcNqfnkNPypfmDGP2zQZTR+i5yR+uCu7i52T8O4Yula8PKAMG4/j9xrFhriDJRPN/qHGwcvV9tNprNJrRRK2I5usK0mR5ifbm1xiQvpLOTgCezeqjJ7fq4y+X+zKyysb5Ay00xuwsNtXsS3jcvyvfNoa9NUwbD/Hr+22/eFJB3dluJkyF05L1sHjjv04zxK9/MJQ//Vl9bwwXTkCEPyy4h03le/717KfP+83tpT9wsEtk/uJqe5VfTW1xNb9fta9ctrqbh9O3y7OTWXE35Ne9qWpXZ5JyRLfymq2k2LuY6OtU09oy0TlrG8FTjDBIzKmzR9SjTFmH9bLxtUynP7AwXQbhQN5CEEHmwo0kJoYiXCxfVNJHO6sZy0YmmtiGRObEr7ZsJ3LY2gPt/FY37dvq2foZBG1vqdVZBvS5JvYzoPlNf6hkRgV9DbAbi7n0aJUCzRtzUhcP+c3nYuZ9981DzKJz+v6E2Qx1NjXJtyR0EM1LO4jsOS4wojgITfes4vEqv1//fIMztfNO97PZfowr+n0qE8g3JjjnTi/DMGsw11k5Ozk79qV2AUGePYx4NGmaU/EyvW8JA/dmdArQkfzphOVXjfagrOjQVvdegSr6SzJ9Q+++JzOnh/y3NZJoAs8d5ufxt/y2ckk4fIuVqKYk8SbQx6454qUfkl+ifrWZ6PzB1RwH8/s/cRp/9b7ms2fu2bwxP+tu7F86fK8bymUMiPpQp898eySOQjqlB/H+DyG75++PHSWBD+kH8y3VmaLsiZl2PQuXyjc2pyD0cDXPWDJ/76VuLD6/OE759cIx6iKlr2YYsh4f0NeucAvYDgiA4g/h4OOgZJ1ypn0Xrt/revef7dd+PAo2oPhbT0XUyIhPwi/zGzuEBPa1AKM0XURbRFxIfiUrc6yGxl8ul2xwZVgt4DAbHk+OW9hH286G+2Na9g/MYZvhgAaGB5yjgZIZGOLkbUtIAnxTpQExdWwBL7++ll/gIc09BiWiGro/MDe3qSF32xtBYnJ027Dqp/R5HZuw7puv11i1ya+MKmQxKshlmghut3xkbNyeJKzqQuAIXui3DmdXi1NJV6g1R/eGc6jOlU/lhofLN9eF0pfWTpAtH5rye6tLhYRx+eK99bFOCRDIvPtfZLwt6R3mk76vY+t8ILhGIgrBeKsyV45M5fGbncEFqr+z8B3NBC6iKLND9fYYmpbTZ62oRG6vZlDR+RqA3XKdM3TAI7ctB4wsgZyL4dxaEigCQ6aH4Y5PUrq3/SNPwM9Un5848N15s1s/qiQp1xTRcpRTC71qhJc9uNNYAeRBEtq8oVhg1pqnNZtK4xP5R76vqeJXTFkXn6Z8h+FAP8XGGILTTPqMq937XqR2dJdn6uRIhtk3qEo0nkdJNu/T7yBtJXsYwZ04bCAZJgjtJUkXbNrw12rY5COiFqYDCij+NedQ9QxspfzfhwdgGTsZT0jrFE7Kb0ndZaoZv5saf3IKFNhDxnhJcajQ/f2Vm5DybO3oXqjrefbtOOGgcvQgffQQHGI+hHjz2lpJONEOAmey6SEq5sySNXxexheBnA5P6u5CSX/gYhtZlbR24IgEZlShM9rd17RdBezqg/wMOTsHnYR81ilk5mRss6GgxaPeEsxNbVMMAyHrevzGvx8DIdQPI7yDU44J0EhZefZy3/AKH3qF6o/6ExTsUj94MvmaGAboyu4ab/O0OG6hId6jowhBObN7cc33+mXvKhb+KZisI3mjFHSge6On75unTZf27WZd6/zs2ydmJKtW9yoJRhTMfHUSobbLEXKI71AlBFwz0QtfP/wX7PqLkmaWw1O+JxUb0Jih3hDIkgQKcQgX4vQ4pisD5cRzi52XdoDixWU99Z3pIdTKxEnjr0I07K6FnrDqz2IHqJLXL8DRIFSuLtmDmxr6yJS0slNpExoLpAUsIWKjXpOvYogMm/wyDXU9M2eguQxuSxmFYj2WRyKTfT1AW1MPTMYb8zClu/M+L00ReUy8cFQjuyYkD9lnEZe/QIIrx4K1JSC8XdsvW+RBztpQqOCkBUJ61GgMqafRXear7jzm4bYaBPbLRXrHn14cwN+N3w4BBCRgMt/C/mgv8asO5CbeuJvWEobOeOwDZuIBE3CD4WrCl0y3oLkBstWSRphi/YuKnY1YZY63dFOOeM65goKYYv8Z4x8hNMfaFr1zrNMXIFpophk5K8Bbhrs2fUnzbV9aSTxd7JG8V3WyyQGGr829YK15t/luLgzPyT1gpksbVKTIsLtGCVgfCzxsXvQuqTjYsRtkdSj7S/N4gN8oSvDrJQqeA06hLcFkHqNj9ykCkZOUU4WLj8dbFnen2UMtBqoIDAGdJS5bS2xFNM8mEnvgPLNKTM7016HWWrWtZfwbobkKXjm2DFl3OZEfRdgehGNk2rW9FtsLraiWA25MYJPy0+1J+e8y9ps9dredNyWcQeVtntMBzy7mfjM5wEhyh8ifLp758dLKPtnwQH/02mXSrGXRFQ+FoqCaG4BKeMPHo0diOUYfnUocVXQXWMCudAu9Y9ZR+4ulAV/RF2yZz6ouVhxbo4tkZGtrOW1Ebi8m2Y8z4cFA7xMyvvYH/S2N7DQ2c1FLM3AhO/ftp0pCiikjezUcBn2KSt6Yd/tB0Bu7hxIzCaechQ9ueUbf9nd1Fx3Tp/Lp1ynWbi+JRdbsn2lVnEoWBHs/19Tb0KTnG+KQDLz3uWpmPM0FFgQfrURwE5QxHHWBxR+ArSxQ72tzvlnYAGqe4lya4ZlAJBzWkxSZdo0tONsSg3rh4uA4MGl7XompbVOBORBCv//uomhrV8dVo9OnbK+TtSULN9HkwuZ3BtpPNTEX5RrCrJpaUkevz6IJDdjyC6WdIU4doK9z8QHzsooaHg0+fYIK8/v5nXxdKd5dXHMVu+58hfDeFcCYi0xoOqlCgqcWIL9M+89GxM1ZPxLHItNHGfbYKRCWJs5f4C0g77QxpJ0PaKiLd3dqupfRJ2a2F17goXF2TzmBLQdUn2gTkbV/bjUK6c6OL+f9DW/BTojUyzyfWq8+cwpdntGg7HZOK0543GmP62ko6r3KSlZ30fgpRm4Rmuog6W2NrPoiltuE6adTe92GV5W6CxmBi3dWiVDswHLN9mKgYno5M37ejWjQaidvKS5CAEDGyRgwrb3iW4aGaz80VZ4C23C3zc3xzdY0sK7IWJCER6jqi5xD33InD+hhf3oboUe0ZHo2oh7DdloYYTWzdte2jD+zOKy2uMbirpV8wiVgJH1W2yrCOeT7tg1ezaBKaQsEpPdjH36tPX4KTjMHIig4ogpVJBMbnl0stbUhHeI8IeGqulKPNhL9ZpjYzzS/i/GriFHHa44UuOOHvUdDk/U///Y5WV8jLkBOqnIEhzqwjfy5YW8n26X87t8UF4MG/S8gxH+YgBj/g94idcu1yNnl8LzIQmDqM5W7j62ibmoHPdCxPjgxZExGDqu/f2+w9RLGQ2+lCBHVkUdt4U7ygjYlWo0uB9swi/H0GvuPwW/A1HYyjim4QnN9Ftvlu4z8Tr2BNiZVBLUzetzg/RDOq+fHbUFqE78KZtfz5b9cynDEBBO+v0WMHP2n8GNY/+/kUsCX8VC5CUL+XwaKBR2tOsMqkq+cD+y0Ofb4qoDlT34V50x5GIzU885HN8vaLvH5b47d5hZ1e/nWdK3KzzlW1oNiEX6R33JolqjDjIiDoZ4wXlEdUfpdrVA72Jwb/qS37u8pJc7TgcD16fUT9rnuEmb/OasZZWsSVCLaL+lftMylS/Jl00ZVRN1GGkdBtqrgLlGA/dFO1H3fP8gn4smwihltFzmvmEHh+dhDRtBZb3ULYm0pJ03nllK3KlDT3W07ZRkpUB8NZqM+Up2npjil30zhLEnJOfvIPUb0Um3O2dRlx8Q2XY3Ec6S/GTgr666hRZBZVsWacK0aTBJMnLsWF0nP6ZnSE4zPFzj6aC5JH49BnVBke63iPoy14PsbFmj2MaWuCM9L/ZO9KuBPHkfBf6cfeu7yZPvZkTkJIhxxAY5KeO8+HAE+MzfhIoPPy31cllS0JW5YN2Xfu7szEltFXpdKn+6jiA4WyaHcJHvOh+TMm67sDoa1VloILixroWxVabXKaCPK8PsQGGZOAXzfas7tj8sgfHZzHCNlJYR9+SQnOo1hej+Dj0AZiF3JBs+/LmjXQh2946gcBx014BmF0gJ22ye48aZ33JC0UlfL8pg3Ybb+GPTM1tWasNvyxWoO3YNCHagaZhbw8e5g+8/aJrWLN3ZrN8N552Xq9E6n9vS7HwanXFaNgfhWylLuut2ej6pj5ESBI+4DNo1AMDCSFdXDFnvu26jnPFA1kOE1l2B5OVVFwihnzA3MsiQjlebVFT4BZJMU3956iwR/UbhSiawqq8FlgL2lWntuhF8AxdCyJtiqlWsJwC5f45wGWvwzhqn+wCzz74fKawIyTn6xFHhGvgpHaBCDOJdld2ymb+6kA57OsXfFbmh5+jdpkIY0LofFWXgl0k1nb30Qnfpn/LAuIsC0GUp3Yjc6gBQsmXn+zGZ3mRYQ+uV3+U9BVCF4dKfgkC+4PFp45JuG0jMX+J7VjCNUCTB/03WAYpvFuuKUKKA4IQREekB+4o6rs+SCkKu179OuRLvd7B7VFxLn+IKlo1EysOEv6+WSvJL157vocfKum34gP7Uwp5bzcAL1/dZHhJ46hztXhc0d4WhHdPSs7+1Z2S1YmZSsvcyuvCivvZIXNavKLsGU1FTusOWi/rXWB2eCrUUl7DaUK9R9bkeT9nhjWECw50q9ycWwPZbF1WqlluT8Mb0xSLeSnfXI1MyzAiSvnZVJhONgzcLGJGdvtS4ZeBB3g5kUjqmkG84sMOGMHfJYcRRzb/K5VuY2lQsKmUYKNGj5BLSras/B46HM7WengfzsQHisTxMyzhAeqEgJZQiv1h7Y72UA8maCbw7PY2oOkL/ySc+inSLbqB0u4LX61Fhmc1JjpwY+jcM392FT4uwOxfFr1lCxImJCiTecPwlLxEUJ42bjdhLMog2DRahfwaZ3l0hWJQ5KqHsZBdbigfRrnJ7AorBogyoQwVqZNxznJYj9JfXcK6zDoyQPIwwITVgwTkrIDYFjqIKOkd/ylSNWDhl55U6WYCVg1iAlbkrWDge2ukLqCX4+q8kZES4dYsv9Wiyy7VOkMYIU9KNaPKVDFWrJA7WtzVeAeP74YaJpwlKAd+0zsZtpBxuDARJfg7rW9lcYvvXf/eS0GLTuvrRytmGnEx5rzaEy2Eqs/acdFJSE5RN8k6zp6IH0niYKMjXf5r/kYWwyVhk1sL7Q+8+NEyIX5jx8vnHxS8seff2aYp04jLhb+gSgSfxbEO6kx+TRzAt9lo6qQgkG9pXTwB7MraC3igNqAL7nzRCfC3CMVvhk41h8UHm720w/kB4eBg+ZigEfhpTe4g1wIGB4sYB5nUB5nUZQ2lHV6sCz6hQLT/6qA7/VMN4FyV84pmV4OrDevsXbhMqa2D5Q/HY/54OIGaCZYfv7CQodbIVYM3qWmvTvOggCCiZypGFvodWaguVEr1IFrI+TbXfrKZxEE6c+0xVLa+NGqzypy9cJrhT2HIV1IEdBRIUXGJ7V7d+k1m0Pmm1h4z0wh4fUGXgkYiH8dhYuImgf+nEXx2k5pXkG/BMb0Wbrimy97RJ5roaPOYiS36hZjuPvuYNwLnnFO+apa0yY6yh/k6ZKneewvl6wqn2dhSIIrf0HmPuP3cJsy76fQT6Cq58mEdZwwBV2DPEhMX16rKhpVG8B1t/KnQbHBQl/5jbVCLJJmm37oVS/ZgRfytZ9yoiV6/O8Oxb8JN3H04CPbpvkzTMVFnkS5+aECpnYMvTRJjj4VN4cJwRboLLCT1Udix5MspQlJTXkyOVQaZ5lsK951g0kz/LGQcnuoFPr5eniyxYIF4PmjAP9YU1Ga4edX1tS6BODRKXTCppaoFacycnNUGABLdoG5S6VfxLCtg7FvMl8Gmh0OJOh4Art3qK7g7z8K4WySJOHDS5vh9q2E/r0OvWroCqA4UpAgflAZYASxZBB8khZbDNW1BhUnJuRB5dOY74Mb5Vv1KMFYKZ2EMKAAoiE47/44dZaYwq4qdtUjMlcOAFs4xaHF190ncTkrTRjv51TPJkLyrV3oruIorJr+uooeaQ1PM9fdFT9l4lYOimPoNqkwWkMxkJhzf7mqkjO3X0Mbt37Tc+h/37LuEU7zO0Rf7qFRHoV+6tsp8UTb9EKzbm6N5I/EuRm9kJzRXpbdggzPgw0ukrdE2ftg7+nubpNfVsP6Sx1pCuXuLs7PDsd+7/yzk7IXRrrPhnWTOxD4Kg999brz3K3ycjgKN1mVUB/pBzLZ/pINsL9CooCikiV3kr3CxWFXonKH7a2kN83CxsqeqmKOQ/c9irhVLjh7hVfFLvrclD/9Ez+Bd0/6+g5fc0eONOjveZB1CY3RdBXbCekV7hefu6PhcPjv12/fbFUrsYMug8AnoTRxg6H9vRBwaskosCC6ygjYgHVODSHy4J5dk3+OTmW3rC9RlBU9SI9o6mDDfiyxCj6a442SNV08crQUqBnMcnxNCQfy0moK7l0/tnCvzCKqRnf8GqVChyfeOFAxGDQn600AgkUvRmlWhJCTKEJrYaYDOksFfJnEHokBn9UXYBni8d6ABLeHptToAn4WsSFLSV7vT1/iASY88t/+4uLWtxh8+XlxaUH5dq8j9PhSupUBUdrepfx1+x3GFdkISVRuiJAuNTtUsS9rboJXauRXoMwrpQi+ev3l59LN8OoVa1UXrP2pC3yB5WzP4359YQGzprAMbOhYcxckAA39ImBuEQDdeggj3iQUxeJehSwDjhLoDdNEOIy+2DjNowG4tJaWmfQ4K5uyI2kOtdZCndkhLuhsCGFjLJLAMRj2KgBmmqJ+eXstz7X0pw0rL/efn6ED72/e9t7l3e1Iq+Y1FWLzCYFTglUBbM9h4bhVR1pB0WSqBkn0eXGdQ7xgLSstm8nQBljokcujibBN8nD9C19x7UXOkk0rtEkY+KFA46/SomkrsA+ZTxJXoOG7gMtaWMmyHwhek0lRJHOl7UxNy2M1TtyGDcc2vo9aQ05Xu8R37YB5e25edLdGQFh5tJctIC1HCwnEL3UOhE3Yd2GYUlnhUT0U/P9m+CWaYcjSjCrP+2P/+zZ4EBN+AUVgJwkEdb6uUiOPVYrPoyAT8NdtG2ooXHwAoxQzHME4Ret9VlO0OTGzzSbYtaviBzKoBrBcue9UVTTxzNX6pyY45gq93wzGXJUPzdaoq8RPzdEN1fdJ4zw+quIe14mJI2ghorgdkS5lyGq4Eo3eq2poYplIdG5GMVNoZAZpQqBrsxX09LkyRTaQ56JJrh5LnYlGST4nrd1JMtXrJqIeq9sHvZD2K7BGad/XSLNI2LoE3cp4Zaxy8ZlpOYtRzGXHMkCYC87ciGAuNd/pU24oMh/1Mc3l5caYgcdS5Ae9cfIFDjuAFeZDts7Zi+q0SyeqLgnZ9ME1h5Tq1UKXahG1HXGJUZESdX+vM4yIZCavszCBmOnrGjGaEHhptoCWwgtDXAOJvQbZeSyNf6uTgTPG7SizlhEr0UqU+VWXUyKSmTL3RhAzZQIjRhPKbMwW0FImNMQ1UGbuGKI3o0vhjpeGxrt8pPPnjg+LHj+GMD7y3rz5uYdzX52/4IpP1SgHhxULzWYkVBIOMJ9HSXpiJ8Rj6+aiKWevsFiMpyRgUUksTOEZMFxJ5j8Qp4+u3XEUukQ9ANYj5V1nSzhm4qd2UBxmg3My93werqy8WW1YiIR9qiB3FFJL+yGkAUKEJrCbKrki9kIOc2iYustQ2o33WG3IJvqAaV7ElmXrkZL1xMLXp4Osd7NZxrZH+PLaPAJdwH6oQ+W+wZIOwmpbVYcG8k/ZjTQoHw8swGanmq2rsgwhQcwtlw8HlPfyiaLcPwAO/kCZDkkA+yfk0adqgPZ4H6mRIfEQhDuRRdJ9V6BL0JMNZb4wKTuLB2GYTI83sFJcWxsZN9+L2NjjaSaYhB4LGvAMLJ573j9p1ibAMFou8+Vphys2lE1mSBW+SpqdNY0dbcqRT0utsgbgyNb/vEaOvDXpxYZx71WBRnFiwKkvd6OaRFhuTEio39yGxS7v1kivkAjGDTeDm7xnBG5lSsbZWiTmok4wcUeTF8qlrKrKl6uw+XxKzbfdKW0PC8k3xvph2mQXL1b8p2FiZYuFvxVHhi/VjkVx0cjU/tH++Rv82+vcjC/Hk4/ju+FsNpl1ICJ1MP/0utexbv5LVpVsuYrD0H9hnUXmoXbGCHAHDy2bVPI2/v+/aEkOjZO3qDon90qyria0hhibze6nMS4BOjW9rTb7n8b5lBFU92o2BzZ4qMl0OaRsfQfN5rhiFmJUA+QJ3JDGZnP6aZJqJ8i9cQNgQIqeOZx6KDMRQ+7n8uaAJr2yHkHfc08kdM3mwjnHOQSPCbps4iPmB2A03jWb60+jQpiMVol+55LkYGICZN/bmlWBsdh1KikSuv307jxECQFPMiV+V2SD8/Mw5pg8ki7C92tYpywjVJJ28vr+d4yqMO0rQfZ9H4GJ0xeh/ewYP5dHA6A1iRQTdCkQtQ2Qfl6Xx/gfsHv2aRTqtlBsX2jq3nZ9akA/hxI8cgkj0SSzwN/J7/d1V20LuGS5J8FWPfNkrJG50KO8VKlVcxpzegUgmLTyT3BpqfXS3f159ehGHd7jtL+ssAlZdR1C5Fyvlbm3yrh3B/a3jzFZJ+RA4hH+nSGmPDt4BtDEE75bI5XxLLkeKs0B/cNwGOOGHJNKzB8+H/LtPxSR8Ep6MpYtqw4b18GToEptUKgsJECCK7UOklXxTiBJ7ScVx/yLJsG71PDUAJ0IuFXhbb1wx+03E83gVJoRiCTdpCv4CFk5mZu1WMdaPP31Hq1KhNcrH+KKk+jWxJS1t1Y5GsVl5o4kXnvnQH+0+3j+gJP3mfxeRFAJkKo8gIP3khrHDRhK44/Xwldn6EgF0IDJ9DxUUFO7LU9iZyI3VhYk+MnoF+8CR3KQfj3es+nLhcutiiDk1xh5sNnNPPnMnrafbOt5KwNnK/Q6UktBBK6KGgNoo6YPuqrtSNgEgh7rSYmR0i3Wp/qkqckKSFV9X6es9JTBJXxx/eYIwlNx+eRlWXo3CHYlbC7HDwQg6fAg18kPuUf/B0TUmTSHu1lc8x1eUfBdwZeG1dQqmDGBKpHcM8GOpX9sI82zKulRmJNcFyKwfa/5emOIPtdtKNCl3lrj0aTy7rWczt7PrhhWW6MROj5JapK0L9vPkocRVQRh5PuXCfPayHAKKletM0mmW5Dz+/xyNbS3wTtwovVK1Zqj3E8XCct8kgzKSmxvZ/kO5a+vLjPl8hNjOE3z5+1AqibTLnub62Iwffu6Mrz1W7mD0c+oIQpAKY0Ku1+FPDWExvKwkPv/r6bH788q84d1iVYnaqi8l9u57wFlvePoMQkrF8HmLz08pmnkvf2vtetQbBNpwq+C+Rv8kVGJ+3qd4pIocYt1vS+wjrCQ4ChKf/ebwgLmrPhaKkxj2BlWZrT7DQlhaK9Om+GhEmfnFeLYRxxpUbWYh365qQ5wV2joifOkxgTV8yR7R1Cb1eqFGM4WeQEHOoQjq6gBREmvpLfJ2+o9C6QbLWN0isDDb1OdRXoRAFktrHKR6SBZ6gyNGGhQT3zZJoNeFq6HUT7rw8N4Oe4DKrEVUpFqlQZ7s+4noLlKBg3qogDh0mf5e69vgI5jna2SvZz0R4iE+uXkqTXT7zoeEM4IyREUKuGqWgs4ukbA4a6tZRTq5M5rnifMNMMQ0g59jOSJgVF1no4vJq51dXEGFgiNFfKgJYiAqsskLtRrbc2jnECGLSc1X7nlEGdVWPkUbeVqjsOUpjEGcdko6LC2wYj33N3GJeuQX8AnOXj1Mc7bXp7GUeHYwnZ7Tzt5eFZlH63fj6vdAp6gN1Gw0USiIwKpFFqFzgvBKFAKjNS34uRuR1wQWLAyK8Qb2npkdg6YhM6xeCIwmmYBvRW0X7rE5eF4FYthHygEnet/RcHrEGknf5c4ObOelnmX+tJkVpMcXZHjua/DULdF+vN64dBnFI94P5CVF3TOwMBTVBJUmkZeWMvcraNvdMCMKF+hcqhioiddNOE3aqbXy9RaUmm2iX1XkB4hE2WBlS4ekiSz5gliS9Bp9+4gVLgBMhQncZKm71YOLCUTvV6S8/yYMTGL5rfyq2PjVoI/u5Xg4gL9EhVasbg0FnCYZgLfjlPgq1hM+A5b8ZonYRlrwyAfzdPCrMZaTSAwZn5sxZOQJu8A9U6yBCymaqHjytJTFczaBKPbvtpRFi215YNkGoOkcSWqdpbizK4WWGQgebrXronGxfZVShg+Oux43rp7Fq9W1Vp+x1vjSsB8MSl9c8xemDMWp9G2wup23rXGnU7p6w/mnCjsZpVgnopD/p+9PaT5mW69whc3weBMuSOA2CMNJ2aB87Ko106fHdcxLXPxLEvK9Bbz+K0Z3gaPBcJVAPWdGU90y49VqIXZ77REdPX8TQRTbzPo/fmtfBn3L36fOi3i2Z2ThYHpFuPLs7EVcAmVJkHwn/6HPMjAGJ1PDifMmMAnd3/yZEInzeWuKRPzKNTIaD85WP6SthCtCq4QzyF69OGGYJGFqJoUVDVsMSmSDDwWBBFnsfuZoVpUZxfcfsJgMlqn2DKtS2Sz4jDKgjIqrKeZVjMwVJWQLKxlCd5pH1tYa8rm9Nw3H728NUccj78QdIEvz0W9V4krVcbnVXT2troTqBFaV9ThTuBOSiIIeF9BYjwXgi9icRp1xvAwkB+wHJMU1oRx1akqNWEwfqo/XZULLE1SUQjQD6nFApVTJmWe0nZyu+7SFlKXNgQk/0bVbanHoRyJ0ebBOBTjEBqplI79OrEfjMPe2tAVdLZj99YGrnjn2DmHAx6lGS6Pt5E42qSDF3Ks5Es5EFcy8uWNL3/1Je8zFGrO39LSjgeVKj+Ce4x0zrjoOpC7u7viyFskmb6GMEIbKedUScgR2n+5VLET+L3N44cuXm640bP3w2hp5cW7WEts4rWu4ug1QH1qFBepCkMYkXUYpL3RIH17cJooJHieh3oHNlnZ+ftWXii5PhRfmLsEo7vVkAw3/771wufhCSAHPuEwD/6+zTHbRA+3jKvb/4CrzmiXsgUS90jns6+PbHMawulMv8uZcOTNlvNlpN8ki/gdADkXzsOHyOilcOCaLQsSky0P2NXn3r8d2+59z0tYqlmYIXEKXJT4/3s3NP/Y61apTYsrauO1Qf+73L5KEIMJNz5C+letog04deDd5cfnuR5oO2BtFbdnlO+7FXOZ+yW9qn8bqNxUTYj+hJLrVkjeoMuY5e4H0xaS+mk4Nr3+7sGEV8YhvgJRVw365KPWGUud5dSzwxVXyjGY3J/U3gcFRpv+XcqNGHncllJBXy2v2aHkgiiShI8zuKU+cRuFT1OpvK/YPDc8/WQaIQKH2iOcXffWwOPQdyC2PVVf/YWkJpbgpTM186xXde4cqxXMITB92SaJlqhPytM2gRWwh9X0QYs8AnIgB2LzQCpojzfah+YZgRzubVH7Iqws7UufKNtEGQ52a8pORdmuKbsS1DcPpkjdqKmbbAWyDc7cveGA9DY3DX84JIJDiqOavDUYbTdqOOcPBz3QDVzxhAD6ffhnuCbp6eUnF7hPQOEI2Zdo8lI5r5Tbe6XkJccJNCRrAPdbBdO221v4DqeWYV2DIAyGbEy7LVEOLIRR49eP7BdNI/UykGQBc0uZdnHt176GcdmQ8rmi3jBn3uF//7t2a4oxiPRn3tSLfQfMd4wiivXfMzu7yyz9bPX37M7ZbrIAUxGsZi8CUQQQhv1+HmRRWhz8BjAyZg4pJgIA";
59
+
60
+// MeshCommander LMS (GZIP'ed, Base64) v0.7.8
61
+var _IntelAmtWebApp_etag = "N8Wf/McOVX3T6idS+oh9";
62
+var _IntelAmtWebApp = "H4sIAAAAAAAEANQ8iXravLKvokPu35OcPyTegSTwXQI0TRraLF3+sx9hC3DjrbYcQvP1xe76SPcVrsaWjRXbIZSzhgSwpFk1M5qR1P7ff/7vya+G7wcffns1QnPqOr0TeEcRXTqkOyf2bE6PZEn6ibUTbPVOXEIxG0iDJvka2/fdX5of+82B7waY2hOHINP3KPFot3E+6hJrRhocJG+n5IEeAo1jc47DiNBuTKfNdqOIdJAObn5YBoTDe9gl3akfupg2LUKJSW3fK2J1SDD3PdL1fEbSsb07FBKn27DZkAaiDFHXdvGMHAbeDM1DMu02LEzxUd54PMERMbR9+9Pp+5uF9PZs5ncZpkQRvYlvLR8L2jh28UOz+Ozfk3Dq+IujuW1ZxDue+oz9KXZtZ3mEQxs7+2hOnHtCbRPvowh7UTMioT1NB0b2N3LUCeix6Tt+eDRxsHl3PGFvs9CPPetoMbcpYTTDme01qR8cSdmDQ6Z09RQCQ+yxuSCTO5uyobE5b5rYcfyYHnlMPXlXzMgzFhxiZh13MCkV7a7/rao1KjeWGr479mPKGmMqwJZle7MjiTXjCXEeLTsKHLxk4vrmHRd9YXuWvwAbKcjfLPYdVyBc2BadJxPBcR/NYUIeSyjmTEEOKOn4yXNC8Ts+urcjmxLrEZ6ZnZl+iMHQEnE4zI6kTWEo2NgLxnFWeJuu68ff5/LjatplOaCpFSxSe5r4jiUYQnGq9eChaAeytHqe+JT67pERPDAKSoFCZxMChkjAKOFn0xc8PgOhlSFE81SAQWqJDLKWebkl010cRozZwLc9SsKiY+xgjI+/H0BoYuMCP7KTWZjaD8Q6Th2Fe0jmGtxpjVbwICCSVOMYfT8IQn8Wkiia4Ep0AFaDUSkjZJzZnqArTQLhDxx/9lgcO5lM8ERPO+TaHkQhDCEaHnmUefXcdqxd37L2BADSJmRKGMA0dhyTOE6lGJ3gIec/myUuF+t5EswYMhfb3g8gk3WjjC7z21QjoDbWD3HRaWLmi94RQ8pIevi+bhI66SQI9HgIAIKsMbRIuDI3FPmObaGdU2lgvB5UkCtN3OoZ3JzgsDkLsWUTj+5SH6VE99HOZGrJUxNJP+1zvSOIQXsp9/JjFqBkxoLE/uCznbsHqPp5v0zCfjMKsElYYFmEODgWXSElpAgmpiqiP0oCyhJ8+CQUQZP0WFp7WKv8yPXKdS7nimW6WR5DJOQaBT4AQnmsaFQ3RqPWRfOdttpWWpOyUFEQEmwJC3ZhiSjhyUSktktCzl6Brx08MTGRy3C8AyDdghpbiRaZ7othXpHqo/DOoA2vmrgLakgDfYJUeawAEkctcOg91tEyJfhhoyAzkh+5XiBqZ+rShUjWDElAMCzo/FuxL8mejuLQ2S1mUzN7mmVTN5Jz9n7ozEf9/nX/cnzVvxwoy4fOMJScpfI5vmm/tuJ4fr10/Pefv32zZkvXOFv+Lv4qH963fv46mAfmlwvpgvzitoh+f394eLh8o5/2GbZ+u3/ZZz+A9xQ+bpbtsXPxVVbejyckmoz6yy+j8eDd6Sf/y7m/HIznF/3f/nY2fC8vFuOBdHGJZ9qo3z4b+leny7e/xaejwcfzi+FiPns/Wixe+7P+u/HbL8PrxSAcvxnM1eXN4Gqsx37n6s2C9p1Ru/VmQPq65Z1fXN2MZx++vW6dXl9fvD29/jrtX5+N59pvz+YL4tz89qY/jLqNPa5x5e+q8YvRsH81/DTG7ni4YEq6Kmpw/ESD50vv/OfgNOzjz57tv/v81fYm1xfmBxVffJM+n93+Fs/6FybF0vtzJ5pMzy+VjxPiDK8f3vajWzv68GV43vf77xfdlbTq31Xat+dv+pcj8w35hbZwhe0cFqU3n0j/DpPL0Lx0P4/Pg4Ud/O703fmZ89tT7Vs/+PIa//a0/+W31x9+q81/Obv9Oh98vlHx7eXPp96o/XDeH41m+PThenht97XPjj8js9vry9faxzf9yNfO5u6FN7r9dHfT6n+9Vq7vzI9vPsrR3eDuUz8iI3Owsg9K3FMc5utGC4IA8+0sw5DqMi2+1MHakuobx9TPl0Fs2XGUdFZEULM9acvlCGr6bhCzr8CSaYfZNCqFaYTvIglNTIEgnosMwgAR96NIucg+ysQuLJmAINOOUkK2Zp1go+Posbo2sj2b2tipLI+Am6ryCJaqcnnEW6NyY6nhO4KAPoC8qtLmf518jZgUros9puhDZls+DD0IvNmv957zIjAnIZUEhCV84KORLgG6vSRFkVYTrEuZOaVfxZniU8/rvANb2YxWU9+KmrohNVnaipy2KbntpNM3JKdsJ52xKbmtpPvyQqtUjEqrVIyclmKspaVsRqupGNtQUzekpivbUNM2pNZqb0NN35CaLGnbkDM2JaduYyewUj0iNLUd1peuWyhbCQqNkYkdspuUeMgPsGnT5a7BHmDjQKjbm3nVKv2EoPgoJ0FQiEwdH9O0zEEIlZaAisozBGBWeE6TH4aafTc78OKVZ2nt490VS0U528KUYnPuMlpHkRn6jgOqUX5ULuB1U8E4twx3LuTfTDA5+kfNGJbgVScY795ixqK/55RxdtdP2faSOZNJTKnv8WxUKwihaaVsVCwzhFJf2JIrJ9W5ykLiYGrfk6fRgzv/kXSgF9ji6WfWKRe6IuI8roA6Yk9WEraVKhmQxP9AHhH3+pUUJJyweVMVHiefRElVyaOkqqyLks5E2ZygqmxFUd2coqFtQdElXlyuS8RRvACByVlB1BcfxqRjma2kVPEg7R8zAGHL9nUHXozEQzOaY4ttlDJvQjIoLpxN8C6S9vnvgYr2jsv7U6ZpHqPcaPGENceUiPvfjh3RZnKYlQpROkXRebGZb5TBM37InnV4/ta0mc4fWJYngTwuiJNtR2madpyd6NgexItmerAjbPe2VwVcWhMKLcCxXnjmW4TQVHnQwv1G/ymbVItMcezQ0pZzyaNz9sXjmWkHXsJ2cKfD3PXkMD0HPKE2ZR+X41s0JtF8kFnhyWHacZLs0Pte7Dk+troN0yHYi4PdvQZr5PMPBtOdMzCHDFYWsUvuiUf3eieWfY9sqysh08FR1E2PNhhhPHEIb+NFIz+kXe1s5vk4UxiDACgL3Sebqd0GA2qgdBe520g/2fFmsEIpl8UqdivAlVxC2WOiA2sJ43x04RAll0cRj5RXPlm1IRsSi+FlkOI7R6VyMtkJB8dc2Dk2CTitYFapQQv7sUxHUYA9QKn1Ln0MYw8ODk4OoZVNZZj+2V4Q0/QEOQ3ZIH9MugPHjwhMq2Obd11m+mx+PWLS3b0n/OrV/GbOApacjOXtJW04oLEkKc2UVz5jM0QvAv3m9I01BFdJzcuS51xm6vsOWHPytCvtcX1yrKtjBYai98qbRMHxq51Oq2UccxWv1FSv5RsyDUk0z2k6bsSbdvc4FMjYqgDtm8zTMSVsTis0UMSYjRRQtitQDgl+MdJ8rIi2U4H20mdTuR5jMkxAJksV2BrnHiXOq5DMjlF//AFl2Btr0LNoNLVncQj81nufLHM0fAWBM4enQ5T6IeJAlQ9slJfNUfJzXGT2uLzG8dUNTL6jrYxWkgobhepq5YIwIBVXWkiwsr+ddvJTXmDB9xrFAJet+TWeIEty5gsgpNZ7NWGun1n9gO9YIq7vdEHjitmAhlKkoVfMrUj24+0puiU0Dg4mtodGlk39sHJOjPXhii9HdQFrpy3Bq3Dmlq1GHOLvEFqoVR9T3pEFOFtGK44mf/bIIlHOKThYPeT7gHhPQX3WVoYFTVYFpVt8T55iiFjbCoO4ogKeNpdbPAvPk5zmkpdI3BtKh/Gpe4CqcpSdcvJQXj+T2RS28QGRCoiE6RAX1ST6nERxUJ4t6Ia4BLMUBz0ITqJZjrGHZyTkk1hYo1b7/70zQlkjDimx0GR5guvnkcOKJtY7iXtmSDBloeHkMGbaxj2MGBxs/5B9EZ84ufUIYVgRn4fIgx0BCYaNQBrhh8gK8Qy9Yh9+EEAPRlEuONBG7JPO7QilF50OqrxTkdaFVnG4XL7JJ4TU1UiFu31676Koex5HIVOv8gzbKiQ/p8JqmTczLdyRZRASRqARMqlDJjJ2ItJIe5i4XrmjnFmJVqu2V8IHwMfMl1dSyDmGmb8LARn3bpcRRNRbimkcwURlYEoNmJKAvcGhtcAhQece3EDk8XoFbdRAGwn0CBJ7WISLILJex6ieAPVjyy4BKXIdm1w86jMTI0WQdg1EOwF4R+jCD+/AAcFWI4HDVh2HLYBN3Dz0CK0GNuqAjZRTwnzIpstq4E4dcCfVzQwUehWSiHgmESDbdZDt4vwPyZR4kQhZazipaj9GJER90/Rjj4qWo9bNiZoAfsZ3BPUdHLopmOCeOXB2v2rVo9VVd3w9tachdkkyVH92aJbOSIx2CvSUCaPs56u15YGX0PnwgCGay0K9xB5FlIFclTQAmOiBAJnnMEqrl8V9EZlSg4w3i4UQZAQ1DisQa9cQM2qIFd1YQNThiFZNqlSDu12Du+SHIglVLpNQakjItZoXLVgkoNZhq0wrV3AahwMCxZAlINfrkNequhwdRIxGHcZWHcZysBIxtuow1k1ZKZQI6Np16Do16EoxTUDXqXOM2snmK4GIR5Pq8Kh1eIToJeCSRVz1KYhlY8efZXWeUIdVFn3CPmh2cTIpzwzDEO7V99N79W8q79WXzwIqbpLKxurkWpPge1EDvOTjnD93gXBHklSVccefXr9+XaaP4E9CEscKOswCW/HwpXBnVLw7o5e3rguZNevNF5+I0GGi9LFvQS3/audBacnGsTgvmvok7OtCHV9eU3jGaeTDSoMFfuWnVxghWRONQozg6T2bchXCe9UCuKaJvJfTYJGQUiYkoJ0I+W5hE6xQzVkK3N/xsEvKs1bcdkgT2jjoxoGFKUkjLp8QKO6Au48ck8jxWgYCHEULZldymn9njwjkgXtQDqHMUP3ptLE9i1cc+W9+kEfl78BjsoESuijjtcoANL2W6/QqFmebhK4dRbbvPccWQPkBtfMKR2J5kIkdsTFfz8Vmpdf3lieHKVWu5JzqU9Z7ZyH2oMJdDYl4b+wkchlZYFqd7DRB5UnoKiSAhWQuNfyCS5ePkoSwLByallPC8hkSBLfD2CnIUb0HAA73m7Ht2W7sojYy5zjEJiUhlL50juKATcc+YrRIaOKI7COp2dlH2LNQsmU5Rb/6951/++lPr7AbHP9md+/nZr3ra38N19dy1w8cbJK57zC1dbHl2t4LrbjhuNHHxJKT3Vhux8mZzz6S9xrbxAUtd7LtXW49swowW44Q/0xzrm8w5/UxQccmeO9t2rImKohuDUKgPoCXHFvYOVuddn3GoQcexJOqWx9sLUGTchEhFy9RSKLYobBPZGGKmbKiCDSU9K22SRCdE2SR6I76wT6iEEA87CA/hDF3iJGzQ5JgRRFJQ8tBvTKNv4YDGQNGhHj0A3lYo0omy4NDvBmddxtGIzdJM4UfzLE3I9buXtWGkhe7ExJG7z1nmRprZqmcOBr4luha643AGKYJISRXCe1u+sFR8l7Gz2arxlVoMx0mkwbwYndSAPmeVR6QsvRhbocWp8xBKkvkZFyOgVuoqBGOZV32/rQKSvanC1YgJMqrZiSh5P3p+X6jYBqmxEVYE00VSSRTuBNfGzbrORI42CCd2ogtMS2p127nWQ8TtlzNOTHvWIGU8K30bgqufOWHNHdG6FbrIbXe209jdENcnxI0TCMFwHLu6sD03vlw1CwQBZja0QYzY6jQmpA4NC/77woUxDJAerkCoJ7y038MbjE4oNPKveqdT5lQX2PGngXE1gC2c3/LgNDUDxGoxmcx5AUYOhyDpnS0jtFSOnqv7yzwMsrZqJVZrpdZqHRazxiOvH1dA+YvvTwiq0rjSWL+2Z7aWVaOqE3B38b4IVnlVaWwzKexeM2Qq9BPTkLebZoEmbL8zyPF7e35cLN1xpSVNexnxX2Z36fJR2j7sHm2KQPqFgwIy5fR+3zVV9DV7VuxXYN2aBb57cd0TjzYv4Gxm3Ktbc81eFk753EwGF81+6PbYm/m5mrvw9vzq+bNQCv06lJe330eXRU7ZN6hs8DkEVHqkWeGy2Tohmaui4vVBsmU+hKjv0xGowmhC0I81E7SS0MtecAG439wK8GUjX89Uet3JGoiuPpja78lq3AJz+p9gnd0Q0wgNgmfA4jMELtwr+CWfxHgqphbUzu/xD9bGyXGcu8TUyM8y2KHkncoYoead6hih5Z3aKLnrS4b3MOAzUNOe0ORUiVDmes4yPMpmhAE5UzsEkscKwljhXGCCOko3pkgWGtn+kvsLDUUPQINMQXBSpxaEnwrbQgjbJokoN0GKLNRTdbY1oIs2QAO6lUOO/h5cZZe2fA4UNq2u5cvAnW96e2ZbqOyv3BDoQpBaf39hEM7uRz1gY2pnBHZmBGPhLaZzPo6c+s8L3tOvRg6Fel5IPEKiMj2J2Cqhm8zjqjvJmw/Z2xrChpWl3ILh4tPyW4FJAAhqALTZK9HvMGYpOUUoFxszm2PINujPgKrPMhDrehggNnaRxOmkMh32TPxIhsufqc7J7BhMgE0phNbxDrgl30FHcpli+eVqksTRg++RL5Xfd7wgxUNg7Mt+MB5RBjaEUwLBOn1YJM86JyzNAa2iwIo9F8Ea+ah9mY82BDWyqJxSvcVKqOoWWMU+Qc1JaekZV96kuOdXyURfujMdvmtQT7SyY8/gZn1iOUXI5YFxFw+XXkBDeXFNBSBhljYFU/ZhA2J+uRKUcQMSaBcHzzUDHvv/Aphy4L9t/XrZ6IOVSCvbkn+Np7AcT6T/G6zrFLRtqR8xmBYib8hVX07qvmG4fDd7YaUjS0p9x1KQo8BlmivyTkUdftteBBgTQq5Wvyjub+Ae81DL2LSDZJGoToVI6rYLuft+2j4hkWvVFtP09CRl8IKS/5wyfzaNkFBiHkz8eiGc7Q2pQQ86YlMsjSGjB2069peTEm0tyGxzkuIffhwiXajZBu6TKD+gGdIpmyaVzzaEZI1TUKc1X2UDHAoAvyssyNJiFM5eMaS9BenkU/++6gafYj/4FM8wNYxXHf587MH/XL7mR0l7JCQH1SnUwY2WLpNm9PuAzlUs329jm8YVWKySpwIGOFDa2SQpWdleNGJy76m7+WlQK3M6bWihKPdJcFh0/U9Om9aeLn3N9UBtd2/hw709ot1kHC0O/fj8MhlxhwR82+qAfv/2fvy5rZxJfH/9SkUvCqbCGnqcOJkSMH+OY6n5sqxsbNvqjSuFEhRstaUqCUpH6Pou/+6cVDgIR+ZzN7vcEQAfaLRaDRAUI/L/yqGsHFm0PnZHioi2wNNfDctmANWTysllYySsB7nl6aU49G12NC9b075NYoWbYGwNqsASbBzKJFbSlipZ4+H9XM8xpdibsBUts+8zSiargYtu7pwv9v0ViPHg8hbFYl6rF5IqmNY5a1DfC/S6tISqV7TyzS/3kemGW2PNpnDy4pg/QZqsiNKff26uhRuJNm/7204451ueZTbLGnYlNXgWZhOFzmc00yhr/DW0TxBll3xYkv2TzgR8fWrdU8tGy/nYgvO4nSlBmGXMYarZBf4yH/GY5YfxhZ3unRN/RqqaD7SZJrrmons9Z4pItOCgHiUzmOPqx9IU0O3/8VgEsbbEm91cCdRfhpH+PPN3c8jaLHetD9DgDy900CIwBXKXIc8Dy+tkK7WRvtT4CKUEKLpSIVy7FmoAIIywL8aAEjMVX3EwiNCPII9RZohjyWkIDOdz6P0p/N3v9ksNJr81NQEWrSKJsJU3yS3P4IyMourtmPxRP1rnrZDJoqE6fqbn4wQ48mk+inio7PLJM2RuNa2xV3MTuO5h+MclDYYvKZ2uczu0QYkv2/HghANeCpYfp6XGGn3Dl69etXvHTyvQNlNyHsH9fJ+I/P7VeaR7r0K6L/4DjRbVVl/f1hYhGwmgaSfqmPRS+cJDF1jbKmBPE6T2YkCs/jh4eud/suXDse/jRh+fwiFhEdEZRQg+CNZ6L/QOHoHJWwOr+N8OlMmZk3NRPoOJtDz5DhN+Z2Blu/szJdx/IzBD5IE/wYzMnnG0ANCBpIfDfmFx42uPlvE07yGw82w2CIOMeidxOBAjFa/nH147y7wtntL/MyEQNMxYjLATrOQL6Kf8lmMsNOxRWRDwgquaEE3jcRZRKuz05k4RByLI3RTeihKJ3mpcCAK43IhEYX/vkzKxbsS7SLJoNhHZoIkwessDG6+fiUy8mvicCOXUJpy9u+S6wgHiwN+VSoPiAVO1ykeQqdHh90Lc5R9EJ2DdoHqOL2Vow39ZMAIQea6ohetZ8AS9iljnCpGiPUeCqhoxcHzZjlGOMlYckXHSWohohFUAfOBzQgsZNudQ2JP+AI9FPkZX/T4B7FHNvHaxK4zMxxdODhk/SjOonaVjmwvCG0lgrjb7BHIAbRkJb7SdnCPtvp/r7r+SP+YCzn6j9FW/9vUZRLZrq3+49VVaAtw4mjTgoWgISdgXT8YvHjO/cC2aQj05TvmRMOHJfj+IxC0m2DL/BcOo9Hgu9sHRP8eyL4ELSAvo9t+Cm6l4mGeGWO6y5gO47RREF+L5nNmEWJz6s5EeNRx3c6E+lr6wA8AOLucjnOL+ih5k/Mm3VtiB7RBIzjd9YHHjUQWt/svD6ibay314CFbBijDXh/LP+PR4RMOztWQE2XUiDbdIviUnaNF1D2kKZdn4oA2cRnNQ6j+sszHrw3VL+eRsDVLVn/+9DNe9QAzAcYk1Oy+UVSHx9IamERYniVwA6sfxElQtjo1M+mOc5qkHAYXrCKelg5fgH+DSIf46zNkCl5LjCG9MNXK56NkZjD9jueX7jhOgA/xUzWgz7kBlad8FGGuPkPI+hT2h/XpD4rzjdjyI9SsOX+nqgQSqFy3UOCTNMLz6eLWkjxN4s1aha4KuhweRlbf4CTUdi/ne2PeclGvFKp6jC1p7C6W2aWlSgtPtQDO+Og4g9sAIBsvDZIu2bOu01RjbZQqEV3QOiqh5TfL8ThKNaZaRYmPlTEUK32lm2mriKC3gztQk7ABZwQmMRpE/si2t41M9J/UDzDWlA5U4jQ7M5AqrCmy0KSeapo4NJiLy8yFwFw4iP0QmAu2MRcCcy3OAsmc6b9qAQhOYDK8u3ST+VuUQf+wLh0QyBhRSpZLF99LjsTcqB8YdzZYRIk6g05ptQTQKiC6RgEv2WrtzBmC+xpb169C6XrJmtE6zU2bngtN/jMKzpLwKsotdUdEnMhzc3L1HiZxMXQIfk+JOOQmI9QmnQ6xqyCXSZZDTTzLXJ5d3hLqz4ELvMqCcfFzFmUZxyPv4klkQxiyliz8kdWjazEpLARjP07jCNdCUeqAEfecmA0v/KYxcbRwE3k5mplcQDMDiSdR7sp3HKjfZSxWzusIUXqtB4ZYrKcdGGVrr2EUQadq4tH86fSbxmVBk64p9hrgPZmZqDHMLQxxvrPTZ0zbyCrQ648AkjA4XKgvx0V5aWYHvolhLti4k+bECoNwP3w8fW/MB9WBp2WhygvoZ9+2RzSEUc9ic2IYoTFkII4VuoF0Tuv12pe9b9rlyOpSv2DOmrsyaUaV4dO1nmAu14702f/MZnyOV8wVaOR6wBk5l4bvRuRXbiaEk8K2+r4u+IhrKT2idOFxCKmlZczzJAVlFsU/CbMU3BRlONSwDaprilHmlQtmj3nT43/jtyccGL8S4uM57ijLrVr9cHoBixSnsXx/S/kLcyZdPGomimjaPBNdN81EEc4f10+dia7rhl1gengmCrbPRN/B2S+tQM1ES43TiKOW/2mT0CPnICTTYJ42474vOAcvU7dpuuKsAapIuYrVEP5fLsy7h5wG0FNXVZNvwoGRszSJrsOpzl5IZNrPIE98lqsDlBSFCHGQlNFT5L1UAprZ8HgGGztR6smjXNYn2haX7EXqiidMBbTPo/BynsTJ5K5NKDgPk2odtcH6iwMKcUBdvIdE5vYL2uRDejXHoJ9/V6pcvZ2mkRDAqzDWvdBKBCHW/lZlPWMhiMjvU5lHqFMhPKw1r/ZgnvyW3Oj1z8V9asOVFKVrdCzNVhewvZ6PDiGZjnA3ocKLK98vxJEHiR/h58mzexqVWfv6VaKtQQxJnvJ5Bs5lTyyccChdQEYuvFzCRuOIsEcBlImh99TkWjXwUH1eUs6A5AIlF9k5zB4/3BpV1GRnssEgUIORPzj+Auo/3YYRyDRW7gesuxbuOH7Ya2iPESsma4Jv5zamTu9AgE+z9/w9MIIT9E0USLCdHeNBRwG+oLK+X2Gx3bcDu/9ItUFrByG+QXkI3JK0Sjq0GVerHdbFuC+AgRpXrc7hzIRxDM3FbuEdhr0L6mj9AJqAHXT71HnR7Qm0+4e2DV5umV+K6wyi9OgKo64YNRHBUOSzDKgIxG+nEww84iG5ubnZ45u3ZCIwQQ/5q4YYOhZ1ShRYF56l7xUNsXRvD8omSf4eNyplkJ9Z3CHZMgzhkTirTFzQ5AVrJ0Z8H6MUL1LC9ojEolhYD8WchpiLro2VlkhsC88yFcsdwY3w/HmcXffwtTvW2zOeNh2lSKhYU5cK2LLNFUwI8tLeB62atnQ8vOLbNenLGIIPX174hRKw0ente4gFfjnrWxyjQD7s4Z8+/tnHPy8unL29AERHBFds9XGD3xteOJXu8LoOvElWLew5P/JpfBzHp2mapNCmYigeiufMk3kYqa4GEKPjAULqQTY0tOh11yAOLv8Yhx+LJM1ZCD/wlgMWYAluZI980Q/s0jd7B8PtUBBlZr7HyM/tH1BjxL2ifqmzEYExzeuwfCSsHVaQ8QzQhpcN5brI6IbSQsuJndCJnFO6qtk7dn9dwzs7whKNvtHrvUpfK+yI24NxHB6VgZZzaS7DohkM0HITDOFL9Wu/OqgMYURk+MyqiXHImsTAhG2jGFTGwLxSqW27JuQWS6Z1Vi2w7Cp8Q18IOcSEb1oyrbkeUWxpn1NuvXZIhP8SR1jxsEB+oRYwOpsIa2iM3Gjd29m202ocvQana7/mBNhwy6BvlLTZPRh2uY80GhttseLuITuFvq2q78hqcudwS3214c5O3cejDguFaoV3WZXEi+7rWjcYmm+eEbz6Itm0eykWwCI506fDaLoFOUTU+BPkrFSCi3r9SkMUyFyTc6F5VKtZbGqzBXQxuAuOAo90bjDxQPyYxUexRz5+ODvX2xqxTdrEDuDvT+fnHzs9tydipU3epTZL01XJN9UbuCmWI4a6c0NBjDJEX22C+E39sx9+eAVyitNZWPgvyyidQodCsU7hr2MG2xdfZqOXlv5XunSbeMTewqCqQ4dPt7QTzl7VmbONbi7rm2H/PVmIGs1QLJ5wUwX3xPDV3ySd/im/6NBGBCl0ZJSq2Gelr93xpCCOYNnbIoqcCr0tAjitZTr1Agc48hr5dPTrKh5MqqFXkdV2Qo1e/lhTWwbUa85Qlp9gNpUi4LwqxJQzq2ymv2gv8wzYUO/MyHr8P5ShvdTNvhry6F/3ZgKDekpGEpTJD5np4JssYEiDYVjZHgqpj0ekND2ZEAx0QlAdkALnh6nBUthaSq5yxksBgXFkYpOA45RDiozhHxcazizqG/tEo2UYWeWsqszeBBoZA2R8GMMcdsFimMTK5xtahGzwrZ3VGr2GNrY6xzLsG16Y7AXSmU01HiLh0G/UGBRuR5ELbBDUju1dRnZt4PDC3iW7a4cQM0rCZHqjGzSDgnocJbulmsP4m3YKangg/MPBWVokbm1knkkkHUKREiwX8Xssd2L74WjBejtIiG0G0Y4ITTcjaQfjUXyEf+WTDEqxqAhRbYs8Jwx8PtnJRA4KY2LWIx4aAVQugYvxdB6NjHThqNJ4R4TC0LUewGzWIHp7ZG6W6F2ShVkoN0tiuUVyXd0iiXCLJEUDa0rWHl03bZEsG7coUh2yIkrvgdRvWtohuW7cIdG0o/k3kzcxWqm5Q1ILSGqhjwgZG4IZ2hhJhjDQZUxTrnBCiGA3Ce5+F9NAsSvjHQNKF5ntRS13AEaWrv3mePXvZ12yciUD35VcUnsr9A1yRcgV9+u1o39qluuRQqkz0a353UHTosHX3q950RAUbIPUgpaenIxEkNWQCXKMMiYQVBb2m52iq7Uj9oigIrySe0aYTJ6GUcOOkTM39oxKJ3mgU3ADtqVnuvByGo8w5M60qKFtS2knzKyGadAPmEyET2S5Orym11uN5UcTFw9+q5neW1gT6pM8XUZEZpQC2FKBErzd3ijqUb/IIwXUJoTpKqNYJiLGzNgJnLg8h/Ed4GtVsJAdmM96okdNjNlKvNGNqRx5JKTeUp4OGQ/J/yO2WQvHRVx03hesWirPJcfDifD08XtsVD0rdlSultPnmHrlYqXncuHR2BuWS5zxxVqZR7yu7f884+WDSgEDX+/EYvqOVXThXvLsw838YwoePM1hQ5SK9T+LiwQpiE9R8+K0lh2Xpufy9N10jixu4OX+I5xYzd2fldp+fqsqdgc3nrx0MEnPovzQeGyjLhjZgJBDYMpAYZNBZ9P80HxAVFo7pEKioivkq64uugLN7Na52cXgBhhBcVBB7qcIHH80D2VwHeHNKNqpBMAg907nI3GFcdEQGMA6CyuP5VvFh8QWyNQjCrapg2YNREBTUJwlyzTEU1SAobWNH9doh6jLgFXtUCdkWzEZLYvfqAoxBtxppk9RFUcnJzAKJ4NQD72J3Go0u4TYSyscTi6oTUAI/OWKMVzpXSJniSZgBbkFDCGqpoHqbdRpp7G/1po06qWGEOo30W/NCHVS1JhSfx55PUf1brFSx2ksxHMClXMDJee/PSHYkkmHCV0pVw5je4IZIoXWhLN2B0e3s1hfCcNIz+2Stt5dYmSZj/dek6PDwen8OophSLSh9TzzbrMpE+Gz1+lAmt692XeTdNKB4KHX+f3db2fhZTTje9ozkgJq9DCUbsyLppkoz1wozxK+QBjQFIK96HRfd7hUH/CrQW9qoKNZPpZwQTSTau705L8ucKUAtzC33+m+7CDlvUhpgbR37QmY2kAGJzgu5a2nOHodoy9EeCTCsPgouCekiddr0dYTG6W4tSC7HU9AFqf1BQbuSmhzJDsybGsB/ENEDro9ICOJPRguSXuptYEqBIXvEaEj/DFNZp/TuGEdyWuLH1+/TIXLFO6Zy+PAlmvB09soPIPSEGbdqBxrhmD6E2fsHDsz59S5kWT+xPOtb+CPP8M/UlWnWmc3YPt/gvPOvZ+zbBmNzpOraJ4pM8kftjDo+G6/A8FMlmvjyqICbJSEmZvwbJrt4fJIgWnL7HVkFT51e3tQgf9Xn3jYgx/4yjaMN2GAh8CiSuSdqSaC108qOYP1ogBv1zn8Vvo6r7SXI6q9hbx1EJn4x2dVJYgMOgY1g7VoVGIOXyz1NGC9BObo1qm9O+iYZdhAX13TRvR/gzb/oQmcQyGGCjfojQ3C4N3rnHe2i9l5qHM6ZQM7RJPEkAEzfW11ueNTnBKwF6re6SBUR+ZJSedwV586m4Fpg8lvCwlmHk8n4I5mKLp82DbVEeqTjxCk4quPx+GVyCEEjNzHntncE8BFZE+2uGnxejSM9M7bKJ7CfHP3DtccAhMw0Kq7+4fwFF4C5NLud8DBbkHqKzN+wrJ6jMRr8Q9C63n5rUBSmqltu40gZhuh/EV8B/iNCO6p01YnTaCbOaRX72bJMisFfJ0NBWLH1jG1/8QRpeedN8no7nAQeYUu8EEruI0arql11w4gbMV275N8Oq7wvmuHpZBTW5DRmthvZImmA1yaHJByaGIJRUtGOzqMOCTCl7fGzq70qtFTu1+741kBeIuzFdktZpHP8/vmEbp6usV9nmf/C21uQm1StzhDF53HdrlU/Tf3OHZtS/btx2XeGBvQ1fhxaH/o6LNUHcD1v6M3UYIPi0h+d/V8OouSZX748fyg63a73TMUpVaL/T+u9798S04HWWpT4phVY0I8cMphiko9Yh/bu2rEpiKjIJfOem04wwV4QAFrUF2AzyAAbkEAzWabhMWXLwRKjUKdxdAcDWd4kk5biHFCFWto48lZCYN/mxfy3FaSzDDwNx0kwvyl9Tpi+OvLdZnkOEXh/8qK/XSzYr9hXf9mcKpX7De2TXl90X06vFErdvx134q9CVhBbgFr8Sct2XX3qGV6TTZUjRRPiobPNek0EtktKFJxxAeYNYhIoeow2wECxm1LlRxjCdXn70jVhY7toNmJytlLT3IyRdDsC+8flU/0kpLQf6CjbP1X9JRP8pKDScnvTbb6PWl3k5INITZd0ji9TpQNPWwj8gaYxhjo6XaAyP7PDrbbQVCzg3bH7JxaX1Y6C8Zqww5bGeapfQY4/5dHOM39dW8/qTxq0THvovwyGdX6RmSkRtLXYgbKORWD+xQHdkyLbat4eHpBa/MRlhrTLcKIopmeU06FP8AymIdQs6pQTz71hpVWJu+/z2LB9azgel2t35Jwo6uaA+qIc2P/Z1aNbqCFK/XafIAdhYvvLz+///j5vB4Ny6W3bERkoybvLjul6LvT+XL2vTxGBLiUMEAQf//Hzvm7/01dx+Gg0JbeSXiywkm709Dbu1U39BHcSYMT+g4djpj/r68f0deoqG/vZrSV4ulEXpp3uCudaUPNQPRLox9oyZ5f++aOkWEb8p433Jo3T3kUuzM+1FjigJaGINC+rc/v4e12jLFJnAQ89oszj7paHOfw14RSi1LOBCIrlV9/sjAHPEpmhLpvP7wTvKWUynOSuAhRi6PAIShiBxqT4tCSPrZXAGrkRcFjEKlTkggnz4z/Lu+Hsci7aZgmWTLOXdhxBJwAELs8u5uHcCYFfuIZMKixAlwkxeu1VFaxm7Ze4564cYlf9ubunE9weWUR2YhQfKFg4odwMn97W+4ZramPvRTS4lbRWJ1LYF0/HoQNR3hifYRnzFpmvdiVdiXq4dg8bzI2T+kIsUZbmUNbE4z5IxBidI8Q2NIQYVQSoTsY1VkXu9FmOQBv+HQmRpbnw+dzmAMJBStUwHuvBPikdPZyU0mpo4V3Vbw2gRJkki2sClFqnGaR1j0rrBs/MQKeBPiaWOSzuPu6nSdtYXhtMA9xkJk6KOXaOL/ltzZ3f83y+jkuHJPGlSz6PZUIV+j61JmozPAY8ICDsCnjescnchNMi+GbauoOjZ2dX+SlHb8w7tSrLe6kVJxXlJjM+5CCYu4YOxPnVu1Sj4+s2IocLiTDGupcWj1KPcEB7vCQYqbTu1+EsbLSgS2pc7fuz44iV+6667nMCp2tjR3jYDHyCVu+KNNYsD28cG4E52vqmUwfdPc124a4IyUuCjtzbp0rutIHJGfUgIY6CVv4IyxmeFUFQXYLoZ9VhRZYWgUTL0qIisN5dxjjK4HxxrAMFwXm8/DuYuvlY9cGsG5MzSynTmWWmwyvIbE5kefQ6lWSwQexbEVB/Sd09vgbO3sCfX3r9ERfo1Id2WUT2V8wksxrbS5xmEXqZSEklMm3hRj366WHLMJ3y0rF+rBjpI+CinJ95De0gAlerdTvoLYiIVvlrTI0ha5pj3PDHkc4/Ap0b9AVFTFItsf6vlxbBgWNKyaJ+OLA9wwo4dlT6UacGZuVTvBR/8qabZSLKrtyTpy3dPUWGINME1sVb4CoSxCO8F/vSvSUoysz78pRL06drNGnvAXhlE6+fhUv+p58/dp7xmD4i3F1srPzQvx7ZN0j3PNA4YBe1N2KjAGLYwqKxtJCWbLmllL1WtYEH/zQql4vwsXxTd1jAzzlukxTmLyO4BePY/zSN1LCZvhPIaM4R4MHvidA2rRe0Cw8n6ivo4rZTxEZFsihl1uFnpVv1YewIBiQDraJA+1tNWGDoWFY9jIXLHRQRLqG1ot0Sp2CvG1XVLFEtUkHv/F2Y3BkXRjkoRyHn8TUJZLvdAKGZClmJpvT2DBm3p1/kZE6fhj7C+hCfa/LCrUvUD368wj36sbTKHX2f+g6gMfgJ/4u/Ig5E4aMM/MDhsX+mIn4kOeRL1ysxiWZFC7U3xxH1e7tDsZMvSEb1suAcHEr4x1dqbuqMLbm7PsE0EetInLmeRIQat3hfWSeioWxTJYoLNd0tVZTk5z/b5lxIW+XOt3B7c6O8XVWGDKrGVu9jTAK0ecNS688vaDOKW60nkUQ+aR4MKdc/1LV12sOVM2H8TiL8nLdK41VLAzrsK8LqtcRHqsp1/5AHcnOe3HZarmy1wXYeV4D6vV0uT4eXKnvK5r4ShG+lI7LPE9bkNU73X9u3doH3edjDHqx8s9kHknhLErVVSe3rLfv93uHt/4tjLuZW2CUc2SJIijfhxaCJ1ixsOOhfrrwWzP3bZSFDHy0W9G/o0okaceg4Wj4El6I1E0qELZezZMbvPkikEzN6BqtplcMtvfJuySN1Fimf2mcD3GwOoEYp9pxqPErC80J+qr06kjvJWPF4fD+PjzFAHgEp73Fpx6xWzjxungqaTLEV9wuvLH810fo1yK67b3qSjiFiBxPgMP2DQ6XUTKBcL245zLGd7vNx/3yY7/82INHsleCPyi3eClauK7bDmXcjUsFYkfuPxX1E+Gg5QsfGbD+ClhvAe8vBesomeb6hGPQOccDhxiLCQF/6BfNDDlheIPkyJ6+Twk5L6Rvp/Ij1/JT1O0PMLza8Clq/eF7UEzWjmB4BPE0u4xGriRVRvLpfhTj6VzCtvEgXTuU91EKzCmgTlKNtr+Ft8pHte/nbb/OWx3F03hbI9oDw/g4E/2tLktHcuqScrQRcS852o4TMAL3/GInOEZ3WFB8MwXEhDqF5wWu+RE5jmMgG0YQYY5gDYkv/wCH+H0pwdEMzQRqgG9it/BtbPG9kjEPI5d4Ba5+gQuSUgEEqQ/i2oqqK1CdLZJkHD0ZC/lRNhR5v4eaaxM2tKxM9Yjos5TtRRJPQ1wZXSdX2Gdn+OXCJG1zkHUe5TdJeoVXqY7H07Btnf9OBVHoxcUCu9Hr/zWEn2oItyHS0mCvilFXH43wS8qnf+wXJissMZXHSPHLjnoYGBdHEb9Vxrrf11j3NdZeGevp8Uk7Ese72zzPo9kiR+8DMxfwnkGLqH1zKb4sDu2mc3kr2R/L8Xg8El+YnGZt/dEIoL6N+IstIp1EKc4CeDkPSKOUXbwDcSAN1vzONYY9U6AFdiKGmh5lrykFs8mnGLS3zy+jdnaXgTD6e5X46mqK8oGlQv/sS/t9n7SDJMlFcmYGToBDjRwkaoUxn2g8cRJeLRdoAgu8LEsaaLpc5ADyUg4G2RARCh5Bc1D3yqzDLxzfcPm5zjQHISyet+OIQ3fiN1ROPn5GdS7EwaX4rh3dghUhExRY1rNxW87v4uQz3hZu3BZ/vXl3Y7yJj0M6ltMoRCqhEQFPIAIesTEuMK+K+NdJ5a0/sRnDZjKmjkZUBC5oBbJeBhSqETO/FdBQT52mwnIwbIarDa2Ht0UACzuKZortWNxDsQ0kYKvj5WiaHy8WP7/1zA9+dFUoVynuU+fn+TSf8rwpkn1B1xARaYywfMYHjR6zpwIllPe63edmna2qjFYQc+n2OCcUDUTSLXBLXIjMZTWmNtqwlvk+xIFzYE+oM2H4j99rwha4v0ZpEKVJhq7l5/nbZManc7b5DAngr1D8oUwRIryz6Uhl0U3qva7T6wJhRCB++P0mDkxcZDA9/A3TuIPO9JAA3Evq7z8G6Nd/fVd8Hu8jdKABnxrCTDCOxXCclWP1FGP1q+ZY3Z/Y7AWAvTtBznCUIQ9llUxsGwnVywLYs8rVWomZypk4EzsVuNMtgKe3TQBYDrqWeRphVhBln97meBvDCKNcqLTQ6FrNVucgAuqPVBoObzTUw+wc3GAsx4zMao1U7kNF9ZraF9SnDup1G7vnXDtDdDPOSMfuyumMnFBd5hWx1dpXGRGRSFuMb9lQ73+hP43x/LV+WSCczjq9Dp/le3JrDB6Ic/8LEBoI/mqgPgLdT2K6yAwSF345LYdXDWxLPrFuQzoQC5vygazn1/Pr0vehdvC2uV8Qtp7JN2+y0Iuc542ZRbtV58dWKkfBZw2vrZfqaxdAbRMde7LpcLyZkhR5Qkg0mFmwAqaWC6MS1Mx+/YlpzdCi/hgTXfiI2SCnayD3oRp5+Ty/j5syD9h2OxcFtJRiJjkIkAN8dGLkAJFq2thhNZplitDiAUo4FxuU8FFTKujgkfUmTZdpQasGWq3AUK0pWFwINkZyWFUQlDtPD+pTNmsg+miaBcXaQcNmitjsO1FEdFvst0xTZk+/wWw3EIhGb/9Yf1LTnEv84HtReJTq8WxB60bOWhhCHqeTpdh3PU+wXUy/I7vVs0OIbty0dzJodIpHVoPDsh1TQKy4b/AAvfJA5fCIysKitWCHemVvqS9Xk9xeFMIIH4cttg6zZmdoG5sQPsLIr1gFVICu1ghdJoIuo8nIF9ZK3NrFHfwn8wJHp/q92FFZeq9r7KgA8pxPvLEDmXxvslZUWmV9GaR0qodvNslxdidUr63FtAxTt839WsuTn9/VWvYaW8Knsmst+9By7TeaV5lD8+tiXEQnOzv6SmJeTfJjPFgvlEGS3EHPl2D4UNDQbLOBLzhTb2iKb5YaH5oo9RRaAepBNNrcyK22579sQQGQuwMVCeqDP09+N/3wqRCDTnF0qeFth2/nY2Cc05JYnvy6/OHTAznUOtrOEpiX6+lBp3RgzHjD41u5GlRu6MCpTeww4wdKsYgcNrGhoWrwEkSayajeulN+KaWhk/D4nti+En8C4UGg8ZskwYM44+nkUxI3Gyg20VZZg7D+zxq/gzVudAoKxjzN32+Q5gU28vsAKcU0nNdGZtqSm6Wcl9rd/0/ctz61jWTxfvdf4fKHLbLDMNgQkuCa2jK2AN3gx1qGTDY15TKWAN8ImZJshuxs/vf7O33U9tHDnTZO1f2QYJ3nrx/nqNVqdW/f1ybcx8y7Oujbc+m2Dvy4qF6eDNBG5EK/xUB2vJ8lcKW4GZM88NmrbdTFY1xGu0b31R/5ayVJEGtyNkzsXGYNwKeH/E4/9fvE77Bkg8F7WC58zN69GoM28DoMvs/PksK9WLtVeeHxkxUabQpA+qHPu2JP9nvBX/zzNn2VG43o25EZSWLowiqefzpNfzqT6ekdDYzYtRk+D/fRz1g3KZTCDnreDHchtmBGwAr0OnOFfrveq6usJk3YdOGb1g5BA+1tw4a18oFT2a7XwsLOscNmdoseGNg9fhiHOYKsoPz84PkRanPgWIKulMXN+FE9do795ePjN1GDcqKwHQaTGD9Ku6yURMVoWdE9pYQeVm8alO+HGy0XNeEjJQarFkgX6g9wG5v7fHYDYyif+LR1LlTgFc5i3sxI1ViZD281rTv9as5y0o3Ugh/6wwWCNw/uIz9BGc/DyT162OUk8sMAWznBYMG/80LbxepLb3Yf4fEpNiUAiWODNiDRb4yPugGtb5glj9xlyoqfSn4MvnUnC7VuoCTiNiIoNVDin9/p7K9lUTG8wXT/TrySTBB9mcvpdzjPwB6o97vDZRgQekGygi3UGb0gAraj1o0DqCIHPr+/utWvrICORak422A7W4Zft8dXqRWt7AZS7mKun1WQI+llVGsaOhFeCjovNhm3xBDqs2AKaHnvaSKnEy1M0Ps6Abd8JebNfJWAacoeyeFxphaHIBGr/eYTzsLG4qwWuwsks9z2vVaFKTdUklfMeDAAMVavDZZKrWAFMDix6NRmBHH95KMgFs28/2JVN2xvI6L9XKPf5hs9LDT6tNjod7rR778DlrF8tLboOYNn+/Yu2sjWsQkBx7v/OIt2auda0Qoa/29D8PCN09j9shYFKitEeX0eMGznk+cEd/XMVrbx38Pf3SGwoe1ReKykkjWPewoRZxf7RUMy1JjOXQEWzRVjgGTfSYtWNiYjvR2rim19/rVGs+UY02Rr93GnyT7X3IAXZ2UwboVwbQPI0l+4R3OlbQvjEgcR/F7ZGQsbejUevg+kutyhXg2paAuwmLh9LeGJrf+UfwTbCo40ouPdyrsnFXfp0V4OAS5ugsifx/RwURHN1wrvEaaLh8d8h36exfOI3pZ0gkWgYKTzprR0hYDyDHkHU5NREvCo0diARoOAXG4S2PkHt6EtPs4wN0/RcL4k4k7I8sbEODqDafGAey0FR7xIDSRUUVez6Osg1lO45lYtMQEABSNAkCGI9JRtx8tgGWNCaTYdqFW/vJaXAkQRE+TRJFjwZDMnusSUGMzWCGnRHqDKa5bMVpwez8kGRAi140B9dzAJ25PpQyFFSGilNgBngxUOSaN/z+ifK8cGwQY75V1Ifo7B8/WrTzA2OxZK8JdTg5+SrzjKnZZP3VQM/VWo7n4XldbM81FStnxGyvBxi3kglbW71tpUj3SipZg40iMpE4IcABv3G70P5jzxOJrThhsba1OLtTQE+zqo1PLKm6sCj0Ct22QeLtXsKEvzvC3PYBmQjebnszjR8Cz7eqky94Hy7n0eB8F/6Zeth5UCrPLvbOgMlre4N2FKqri4APMZ7eGVobFN2nDN+jSMiUNULn+Ww7XJ3cwCBKd3mLlC2s1AsQdSqUkj5ulkc3WIyblXYqllrQCMuKLDn7aBM4qXlJeG9F54d2SlBncHCfoOiMCBe/y/lduLIFJzV4OPba9+qM+brBhzhhlKqUVGNpjMKHd0ej2e7Lmm4ON08VqomD75yVhhUqLVU9Fi7LzfW4YhkQPZQVPtrYuTenp98sgZYvAruCgBLnkKPZtKxMd1hidtwwhRGNjy8Rqd0wRjRHN7ESQ9/ubv9y0x5PWBIP1VfEDkrw35yUrEYveJLoK4fPIz/1q+3A6QCEsAwVw3upujVejP+TzGB3boUfQMgMlOmkjhdaOY5xR9C1Ocq7m9+/3VrN7Lfrt36n8HlB+URpLXLw5Ky2ZRqkpto0kUchTP7u/VGGG0jKIgvJrdBaOZinf5QQRKq2sGZXWjBRUv1CSevzeVqk1nsElGes5keXcxt5LBlvkeiAH/8qkV+ZnVPRohneszW3AMJAZMJiMETprZAc519BTPn2ccT68EU6kJK8Ay0L+RIOlEgi3gDCYxPSX9DFS1vK1dmo2HUXgli1Mw8KDRXy5QSJ4p2AGhwegOUDmeZCPwk9brcW6ySG8XOqm0PUBidp2zF52wXo8rZwh1pn9uh2Z05Q28j7nEty0SNkIY3A49lw08vrFagcBznqxeejVbfBLaCtFmi/x4ZI3rejl7LYhKjfW3dSlC9ow+5AV+WsI7j+iriB0qxGiXMe7aXDeN1+Iz2cxjK06SEqR0XqUcQLma8qsVLbx4ZV72by38VGqedJT+4jg1eeQp/PW8oWF4Yi5n3hBA9HhnAFdvXoCwVSm5H9GEDsJX288h5M8FaE2wSh/i0pxD8spAlVXnFoDXw/2/10uHAWQFgOrNw96VD5ivLr6eu5r/haEKutb020pwQ0OZjQHZBnN6csUGEQp3Obt/KEKqFBtxC2SbzFK3mhzSEPOxfnqL/xvqsUusYKHhcvotcuCvh3OvfKVotvYzpkNxtvm1+0p0rPsTsczOZ/RAUpoQMfQnvn5hYQpS/bkcozRZpaSRMwzMdKlffQGxvNRSbvS0pOcn13Gc94eN+kuWgUVi4SyIxKw8PVe1xCU/Z9gUnLPKzy/7KmEZSq/J//9rYbXk1B3x2XcbH20syl1iDD3BMBy2xEbhuju6EnOmBzD67gSJij6U3CaAhdqusStMFaeb+FvglG2DpmyqKWMEyPg+B0QpaRTgC0JICExlX+OMuWhE78d+dpKlIhqpVBkwcuoAwpvQycYwf2dlbg+hCW8FXfgroEIdgMUFxz29vkLRnsT+OL1lzGM1AjD4Znk4zWrA44oAT4oW+P1Iucu6chMa6KIr3+YKWepGSsNJug/0aN5+CKZfs9WJSscUWmLtgMVtfVTYyfkkorbynoLANxiHGAxrQRjtBMkMNaIus7CxBYmcI2wNtg3OggHbMJVN04WFCc8t8UaNY1oLrqiGYha04Hqlx+vJuQINfvSw07CKy+Atow2P+kKnIe7wBvdqlC3cGl2KV1A8+DQY5jfqfLFlFUrV1bt5/0cV2Y/CWfQ6h1IVDvnyR/7+vZwFyfR1DrWu9phe/7CvTJ6D9HA+yG/TarWs6g9bb8g79QlnlW28aXVrh7ZBb3C6+7158PAtwXR+eE7fddrm0YySfcaWqrSAZ3K/rUetZu9z+6/vzY+Hm+0BU7nFQo5iVT+FfHrLSSvMNRN9/JC5a7ON5RPOFLHPoFJr+9wplM1ZM+umLF1KCdtEKVQsU6TQ4OS4pZOKTV4UGtYZUejY5kKhYpsFhYo5/2Wtc+ra3gHr2fqwT3ZFRzunOd5Iax5vjpxKEYNW2jZwhKopbKRcadAIvnXIaAXbgNHyHC5bObCKFS1uHylawzpOtIJ1lGiFkhiplFe/dYgIHZsA0bJbhod0sntw8Dz/D1c9StHioseitW3LJG3vXiabhSTm8C+a+BnAeENW+xs4K2yfgljPnH9YqDz5MNM+87C0bdqBsH3OYWnLhMOyOttYm67Y5RoWt000LG2+E7OUzDD2ZlnFwrJ9HErzu/d1/bprEtLympLF/qaWySpvv7afMaz2BfkYBE+tcPYclNarFKXesJKWVSrN2QewVtk+hLUmV5wF7tIw1mzbQNbylqGsxTmY7c3bhbOWtgxoad4uorV8PqYrFrVtDGstZx/Y0jQrWVnfIrili93DW7+rsI0FobJ9LGhNQyxIsbJYEOyNsVC5LbdnGQxa3DYYtLxlMGjr3JPtzdsGg5a3vcFpeVMsSDn7WJCmWcnK+haxIF1UdgsG2sDycp4sziYJZGmhjR5zqosfblawUR+FV5fA0ks/56Y1Zk40jb896f3FgStdSqIF9OYU3WlvHqGNw8y63Wlx+fgdfZs/W0zC1TYsvG+BuXAt36evfsi2G6HSZlGhpHZlLBpCgZnCsLn23eQqmNxJ2i1ouc8d9Fp3M3DUEzdNpaxtbFGzld2bp9gg00KD8Ptwc7mun+7jiR/wm/XRHP5e3SRlplBMDbn0E4QcZKum6PBpIOwn/YqYVu1mYNtB3mSq7PV45Vbjyr5Lkx/empb8S0QGE+Xr/pG7LLzTf5SJoiCk9WCvcp6z8Rrfn9C6ptawc89m4J9I/IWbuPWQnf4TYl/3CrVJjaJsLLaUh6u1Bhey3C5/nMqGK5aWhY7JtBdEviK0zb03j1uqwb7+/cPaSS+s60foGIuxmD9tbZpVzJYtbs4GJ7vfn+XqVuMUVcWAqtzKz4Znmo8DJjtEWrWY/WS/8qZxEESbVqanKcs8rDebAZKcIQCSl6gW6CXq7KLnYBjQiUgJPjPNVo8XTN3+K3uS1LVuqoppqDcaDVDtL9/EQEhd6y+PZtHCuGFawQgjKzFj8YGWHl10osTDQVuzF71tWn5LcwFpdTSIkGmrc8onf/6rhIbzpHofe/1PvbEzHPaHNWmchX7/+xDnmF23247n1fbrpzW3N3KGvdZVqrHfOK31+qPx0Gl1Ptf2j0jgpnXldsaD0bjb7zi1/eM1rQsrrQtnfOX0LkaXtf23p7VR6+zKGZ+7vQtnOBjC+pjMtW5a7hU4UD9hnxdDd/R53L502h/H52A6ndr+O8LvXQ8G/eHI6Yxd78Yb3zhDz+33avvvT2utweDKbbdGuB4zyAvXA3zSrXxYw2L6kAU7rVELJT3Mqnf6jqdsOH9AFPw6l9vp9a8vLsfeqD9EwUBvrM32Wl2ioE7OrvqAXbAhaubs88gZ98/PPYcYb3OMdv+6R/QTdjpwhl13hCKD9I5JaENniMv32hn955D6uD+6VKwPmkXyzEbzHa5dXQz71wM27lEdemCjmEzOg280ZLN2z5yhRtlAgbutP8ZXLkBSx0CjkSdR2tb16HI8+jxwQEZZ6dLpjXRd6+ZtnKw1OpftQdqfGu/WZHcwbnU6Q9U5G++FeL/bcntpCzQ+ZPvJqotUjlD6ofPva8fDuuue88fAaataPaqvTXEHZbBHotCDYf/GJTvoumj/1oj4R1lP/bP/A4ugHwt7bpckRRO7vY7zB0gnwnhrCOjoqiCL4vacUbflfQQRZT2/anmX40+IC4frGk3TdpyOKsAHYb4rQ+74MM/x3Itea3Q9pFBFuVGuQd9zxq2e6jjr2jqWhce/8/6w2xqBLoN+4K3pKPQZ+gr6Rbfb6qEv6k53jMK3+72e08609/FJhjzq98fQ+wwGqmCIWr5wek4apWhcAL3glj9+z3yRiI4/wJYzHLnn1KscyarUD6kvdlwPLcshMugj0MFqHJIp1PKn/vDj2D3nJDc+a3mOYuY6Ut/pjnvX1PeJ+/Ywyz3rU1wOCK5iiz6V1ogii1r10P/c1lWGLSr3ErQrR1GPZVfxPMBladGrUNqrriKiWjk/oVHbSNy90fAzVeC1x8ZQu5T0xirsexeK9h60a05/LISiOzdQvepfjM+H/f84qlAnKPPgo6tVxx+dz56i15muW0yyRIFBUyRRSGo0RTvmBiQZ1XroU+1LxXmr8gsYwzMd6DrLEPtENgOT3smwdfsIGeoHYLzn7HmOzMWSHwQS3CdQYDSIwv3uMFvng8th2i3eqXvgGLQ+mk+39zuV2DruSPVvRTlJMzBVB9p40O/BPnHe14HZUym054E2pqTkwj/F64cTdSsa5++84HDyB8clmO5/UgWU6so905E7lrVB7A+5PENxf6gyode/HuJOrwiAdNkadj61htRtQPVWjhFAq7zZHxZureAfraJIKKFFlb/x2fX5uTNUAe5dApfiqpzQHefKQ/10dInmZbvUtsOrdfWkJ2+lT57FEbXdvjB7y/3KF8jjcEycE9lU52LSwdfJUzClTWj8g2ZvvjpLNHicx9/UEZ3p4rUQV1GywI9AHe6+WB08qvSWavoiq75fhbTQSo0+0JHFL090jkI0BXkSVZdRDIzPQUxG9JGiB81rSYZe7P/qz5KvvyGOB+5vbsep+jQjvFGD0fx6O4fmJhkyiOd+CC9vWf6H/vURyWEQb5IdeL816ATVa++s+jX4lkOgNjxVcvTAwOexViP8uqOTivO2nmd+MC/12ZszU1eDr3Zgo5Y818ev7p3h8eFNddjvwoI6xRX9QgjSQazP83CBnlN9nCXqdOLq3pNeoZGgnSeLavJAtpLJI/5Ty5pQGc9rhcBf2UjP5leHcL1R1tG/wFdyeMrT4GsHyVM4W+zVmjgCunKX64jdtPupL8TC9Cu2g6aaB4AR0RRZEfQlv7rAs1CTNwOfwMiqLHvJm5x4Ux0zPJGH7jLtV5ZDDekendB0XZOaM07PPalO5RNjc9B2N7H6XOlog7z/G2q9PFHtc5Ynet3q2TLJUz/qriV6R07EebwNfD+QIr89rpZ/GhQ7/JVvNVmoaz5R+IGUmurtEfF8IVOmE/zfYMqMWVKugtKGij7PH0P8F87Y/XX5VH1WH2lw25cKUgzpVm7S3CpXCaLvcY6WjfkyVzo0Fe2L4TfPQ5xk/W1TxXJnUk+z8KjjjInx7DHTv3I2sj28lenhzT4Ba6bnHMNUaoLq6WuTHtufwJ+ETY+LKBrsce4vw0AzFEgdLsxaW9ME9XIyDdxmy1fpe0p65/EcFp8mURCmls6wRFkStK701olniP1bSD6FkNRQZumOI8jtMEBTJCzPZc2YEBCllyXqj39mkMvSs3j6KQwwZNFqKFPmN73lrf7NKPSVLgllED8tzjdR7+pSvW1kzvkENTafU0dttvkvo21Thuaip0eT68bgrlLSgMn8bkGpuUmZubk62ajrrNp0mTQv4vnyKcN0XnT1rnfcRHMtQP2m65Ng3YYTP2jqT2qf6WD25K8Zku+q0hH/mf7i/tYvdh1B7JZlC33AN9QHXbc65YlylQWBX/1FP4hhTF17bY8ZHu7dv3ktjy6EuzvVExOkQ2LI0KEPmdRu5LTFFY6VajbFjH2zeYl2VDc6OvtkAZ46Jr7NOJseMgewN51nQs8FiTW1qt4LNVv3xNPngVTVscx5IptttmfxdDlbVM/iYPIVhtLJqypNtzV516iwSrNc8SOnkdVtmD9IbTruqKkcXPea+pvTKs+Racyb6ClaLgkGecA08YGBNjtQhCYee6qqpppNdlLlDpWpzeBAL6JoqzMWeSoRM2A01YM86vFx7WrKy+ND/tXk1nAZ0SStmnHC4RdoAJ+narwlslrk45LHlI8wRWTMicbofAybp3CG7T5P3ogW1I3CUze5+tJM9Rgjbeoy89yNbAZQGisKO58lC74R86yNbv0CD6XM9BOetsm1uWCilNluIngo7ScUMeQGFIMBnsHBgxzP2OAFFOYxUDY1EsFA4Vc3qioUCU/E8OR09QyZlm6bPPuim1BLoiHo0UbOpuuGVLx6jsfnUmouvFDXcdDNqLn8lHwkyXgVSTcu5hxLDm/ez4y3iqE7LrLOA6LhGXdEv7r+Nprhnkgbqg8qMuptdOUxocoT3DBdAec9c3g3q6p4Zw7SQul+2CjBGEmofshC6W6DVXr/LkXX5a/XzZKy4PUGy6Ij0EgZ0hg/aFw0Nap3t63q78gzFVo/FhLdCdzFZCArg7pV2x1Vab+j6nwJMHhYgGgCJAm7osDjW2b6qVHWBCoX/jlHVFuZUS8JcgWhntPX51V+GV1dzDlWdCZay9JMUfRU3uveqR4ZxJQMUSEM6/pJcepFTgfjIMVrFHntb1N1KAu4R4Kryw3ysSoZHwyot+1GpiEIeEocVtN3NuAhSfuKVc+x1JZlzGqkLF4kxbSjlMYDWSYqt/OrMutvmVNi/IQ50vY7JmVMv1e5YWWA65VZH7Is3C+YUT9khjBdrzNJmqbOetNrV/Vajur5ZAZW9Ujlz4QSMeotn4p9Ra8X6KwNbsM5KsvQVfUqTwkcQj0vwVvM6G7KUo0yO6IIFciU++KSs5XjUgk+tykVeVsqMuRHbyWjZozUKOwfcXDfxDhMVRKHdqNB3FF74A6q4nRPzUNhabFHtTcRCihbZ/44mUVZMopzc9XqlZlBOWizcl1Tmgzs7uD5pKhxRKAuwvkt3f/1rW6xiGe3y0WwFgI6zXWQiEULgNlYM88HBa64h6qFEdTv1zdRct8KkSerq6PnfUWvazqeg7KcBt94ZX9hxpFk4GHlv0FEzf+WfLTPqryDuk7ZINclmfMzMxqKwVUo5I8kWcofKwa2QZosw4WsemK+VczVbu5JmnFW/JMcn+9momC4Weuhg76Ta1Dg1Qs8RsbcRlFzKrwj64qRR7rHhjYObr3IFeaRfQt8kQAaKqGiu1TTIxCqas/WuOo5I8WtM5fDkBUaTFLRq2lHGSNcPYpxzAwvEFm8gWzESQwkzMusrVfAqkuW8AJWg1mrNMejCeYdMU+9u4+op2LEEvgp8zjL1AnuiBIcj9B0j2CTYKWpLfJXWvRemYdnig0wKoXrIZ7aQy3wWUJP8OrT3eSunt4iu7uFOtV8j0ZtOIX8f/+j0Rh+vPnHP3Aq+e0BHsNi8txa7B2uziS/PaB4QwaI7vca+41fMmJ1HAwOizTegx2twsak1L+klaM3p3RIc6r4dq34pabHe8iUExoGogUF7exFU//8kkP7Z2rthKz9TU8S4e9fausWrel2L9GsFPHirPTwl99r+9XaL1nkq3PQw+/pDxp2wum/avyUB40veBSi8RG88mgyveguF8tJSBclKH6BM37s2tYAI/7zFCMqBUQ+8H7BTx93oL3bffaRtc5/VtWUt3rMVj+Q1S81mnCAMDUD/jDWruOufn/y8EIOV1wPuGx1e8WCwiJCUlUYUvIj8BBED+cVMchfagdZUqNIOi6STkCioWaW+r4oWC9xUak3SgSP35w26gx1L/w9Cv6qIqKC/fAg4e309urO0T9l/f5y4hz/c08Lvjm4Z7n/zqOgf3cHrb03b6C+mKv6CjzVp0A7RW6QFUINFCEv8OMdbnthaX9BcS2EuW9QiuFW9JY6rlYDtwVAloWUilKZXPJfR24+93Ovvv+8/2XCL4t0yATftXL1IXgZP/pvxWocDMrvg4NH/wDkg6na12jvzcFS3TwgduCrA9RAWswvg5e9N2tbMYIzZwzmG0TeW/t5872y0giwEqkV3y/Va4bRnLYFm6jM+Dz/f5wdZ3PquPZ7fkXQvHGkteLA7WOhyyQ7217vjcdkJBfCjSlrUt4F/N/3HEmWbXC274IlHZ1eJNnEixSzF+ZGFF62khq2zRFFIgnhWgDDVONZqMs3qVRTPRMppA6AaN4WAzjS6PZ2U6+08LnoSRJ6AEtf85TFSWjudnU6WZ1nkpYAXTDFky73iec+OeFey8EgAX5WmB42Ksl4KvWEjL+PSUzGhN+Z1pVtXoGgkozLmIQqpHpyYd/OHn8vyUXYwRJekIuYEAijj4SvjHJWqJyEJREcmv7peeV+wvCZrrDcDKRcRQt8FeOfckpubwmmXFILiEp7AD2t8/NkupodDtdlqT5Hi635ptjHDgdK1hrvEBxBTxIoousii7KyXJcAtIIbTtD3hKtHiJXzInuCI198x3EURYTFOpRpuELOQ5wPHlaHZnhn+5u0r0MKarEKwYGWUaxFf61VyLhGOlbxtX1r/0f7gvvxle/Bwb4X0o+f4/YL9YkxTln3lIsQmO6CwIz2e+4JT43R0heMljqjpT/TaCkYrc88aY8xU2NMsMJFiymzw0E3S8G1Pl6ECNa2DArkgU8t1JUONNivtn5LfoMvx00tKcwMqBgX+X+7BPhungzJcd97xrV8JfRYRYX5Q/9Xb4QOQ5aEEmFdzfg3VfzNF9oznpxwcPP5IbNKsulp4NNSNyspqdwhLaA3C7I3H2vSYIYtGUg1Hc6CgPzNXXamN+KNROJ5FglwvLfOCclrm2GZU9NkZghoxJN08WCH1JWWVnNRDuXsS6cVmDmasbB3xBG8fA3jWHzNE5sUXkp8F+XFel3C3FezK9PerJ/pKzjZZIyFwA9C2uHg3du3r98yI0siXx/LAc5Vg//bCuHdpTqjtdptzPY5dJrli1UWBPY7Ust0Yi/pdAZzYhWZ+iUTyipGH+4WW+6RWiUCaq5FQypl+6Ya4tLcgtW/kNrxlGf8nj/xUuog0LV9rwjj13IZLdWG/1ZeB8H1lHxBIKj2FZpFgY0j5Nv6o13IQz9gL2UZbWHfkdEhL2uVj5h1Ho9c7KTyg2IZrcBC36X2zw0FwU0EhwDoBbsZhj5+S/yIymxTKEB9wwmGogJakHETBbDWJjs5FLvGJrtQjpCvwkznlueCWU4Az46PGL+83Ims2GbnAEgiB4LL/IGUu8MBu+DKWD+wDevbw/EOmfO4LkewiOS7S/mKWXwaD+PFGUr+ab1YGcErHLG1v0lxEQwgKqnamyC756Hl4fBbGL1m+6KrQitvUcsK7AgQhe0TWXgL7FhDGrGVzEShLJtZTzDrCeXN5fW0sd1Ta+bMDufo0Pu5zEUqd8JIV8HAnFlBB+C4v4X/AAqEySRe8Hu5Y9VgHgQwSOcSlwH3TECbFiiLpZXyOeNKFg1FvxxRzQLM7SzdgPdw31NGCu8d05TvInwUiKp67cWHrPaTKeCYAfoG7YaqU6QNnTuquWrDP74An08VpqUGsF7tPVturvmZYnWmuwZgkZq/NHpurr/C2YOhyLwQmqFyB252znH7XLe+ghZ7uCvXz+df2dXHH3GRrny6QWYaTu6pcoR5IdWk5XkDwmIIwMvRuACT6I4DDnnBeNcni3DE6+DypXCqeZvYE1U/YqRlECwj++BJczVVJrNUFfKY8ZL/ls95LvcVv8aPJX58hR/P8k+m1kdwnP+wxqR5tIDgOzmdWR/mN/Lqf9Gn7W+uxG+PDidMFQICqBcO/gzRLBR8jWbGM+fyjs4BjkMkgXeDu06UTIIggTRVLvHRiWzSugacG3AAFtv8GlMl7VVN4cyS4JYERxIWs1fhPo/nk3kI5ghVrPgqBpRlPOebOKkqMZd798BS3PP7AryueGaOjLcdAOtq6AqODHlc2XKSkoGvOXqiY4SRYABub6b3kNkvUmAKDgtjQjwxnMatCWM0ewXMHv1QJOE7y8jS1ZkbMJDI/EpN4FgpdphpFWaoFo9Syuxw6NTJjO21HGjngmgSewU7TqciwoljD66sOGQWa2Hz3lA8jevZ4slVh3v5W6qnTzNglWfyPsp5jcySvIExOY9cH8jpy4Un1YZzfcbyJca0h7bsWOCldOC2s43Vh3wGC1afPVqNr6BhqRU0a+bdRxsG/0fFWqXQWPEV3fHBkPFHgOL7inEzJ59mMzunnUEU7PSXC/t0BgkBq5bJJHHZyBj6hsV2kyEUeDAGci0qLti7TZwwwQ/pe2MtDRjUM2pzJXPVENDZHvwlq5KJLI99KEcvQg3aPNRaMfkV6hwp4geFECzob00ERrmpeoO6SLP9UiqxjNJsswVOqL3iS6NWfE7HgmuHVGg3b0KV1Bw0whOJa1AWK5lWWurDoZXiKtHx1bPax0285zyXOyjak4ym3EjF4q1/YQJtoWkAKv7GZ/SyEqVLl7InC4ABUXnRrQsemQt98pOtWhywQGHkmc6YaApM29uwQbEyyamZPAPsGhekcv/pL49Z+TkeDKuKUfATSnD1dmv9eHuliuV6lbovwtv6YaItp68YiupWK0GpcGkbpepBSUKEaZSZSiF8X3CCBl75cEjrvd/NY55nJUWRjvr+ucieKVZlZQ7e/rFYPXyod0IC7vk3fPRtNlxwoEPgEiHBex1UN/u4Qp4NRdGsRsOwsIxuHh9wz0XVFPVa1Qwrf+CCXtO3sYVI6ZEeGcSRlXlzZGcEtdZSjgXljUIthNXwLXgXIH/ER26ttPb1cXJY2YMnHcEPCAv3hQW7Y04QoLe+uCcPg8BdRKvs/+D2EGupv5THYzzF48/vluah44dM9m2W2gCTdiNuEHtn+CkE7Ihgu8EbfH2h1wY1UXiGRPdHCNsTW3Gv+BBmvKS7Z1iorZ+DoI97OwZb1W39zL3bAWKBfYk4eKcC99uin4oRIFO+lJ7io8SelrZREQ77QODYQas0NTeH8L2h+GQZ1Dg7l/A2TR3ZEyEg6EXqwQ3D2jkzhSkP6w2u69RcWRfjWiq3P2F+GSqHXEeA6ysFwddWssI9MquwAFYv6RfudBjcf9LmOduyXjPhwTos8J6BTgEVnCcyXSdmL+HOjN0flqUkXTwRxo3Oz/BM/gQlPdqgt2QQjQziZRlQimhtsdGE75W/TY4pmAlEmsuuwV+0/5ztR2/HjXiXekI74uYAwmJqnQSueddJEsTrb9RToggqqMANVStIutRtmfCZV3bO5Q6H04giU5v4zg3EjEh5suz3R3S2XmHUHaX2nkjtdYHWlCBoZ+D2SCV6CkcPBUzQZyd1J9LmggWBXT8BceiDAmDzKyLHcuD4TlzTyvcjnS1t3K7hRvQS9iJfHqfwDpM/muZDqQT+wmn8o1AQmb6cuI0hHeIpyk+UEFb9uAQuEE43jA01C3Lpi9ePYwQjfLXcPHzuQTn8KBGJQ/gDd9exrTgORPf+ickc3Ig32DAcDka8H5jVhOUEyZ3bnXP69y5JWFwji7LcuVcP23LVraBUVz5vykBrZ+u+cONs/njaW3XMzYRwVj4dX2jMv41plcBGVcl+mdVxieH9Q6UcXeV6UjhSWeVC7/d7WQi6T7eUuVX51rJxv+OZY2YIMHOYkx6H+Wa0kW5WXRvgRK3uCR+cqxdUlCfv/f3k+sZFhZNMldxiPTLq+/1mQkeAfouUoif0aCCEcjUaQrGeIIQQ4QcBuCxHAyxXAOFz4S/Wv4/t22fhZZukKH8cEBvWwQlx/owQZ9EMSrCgpwrYmP3l1fvf67nciGYmI2q01VI9v3mroXr1DkdGNL4xYz0HxP0H8RDOYq/cMF3udnpeBCroDduQN9Xd42OlzNER95PzYNvy3ASN1KSfpGczXjKOtMBkyfOS891u8y+jnLx4vJBl61I1CFK5GgEpK9YsqCHIyw7yZRryZTkCebkaApw3rxxi3rJj3irFPByxEwwcFJX3yhYClX0UVEM8XqzfK18I+2eEzmeLSc/3yBgZ0iILO+zLqSaU+YwdxISiGcJPAAp4fU4/DPhZCMPocCAth63M6K/mZaX30lZB5lKRh1LU4TIcNFXKFLHt6Qb6Smba2QAJs1mAeLv6hDdfHB2hcriQKt9aJvtS0zS6nWpprvzzSy9wGxV9EFebU+fTfLCZOrAx2OFDFfQyrn47zGgGjsIEGzoxZpxYV2rprhKgIB1uwxFy/4pJ57PgNXhpVqRsvhr1+EnSegB38QVnfH3/wctwTLp6qL+55kexeeUq2cfsGzpA1ObMSd0xZLHzUrDcIbksdhRFggtd3sOwECc+EoQ+eUTiTkvObddXL0yeYOefd8oC8fQQKh8HyB2lBQd7gsQYKTTETO9a/UCa+KV6b2aZOvZ637il84+LH/OK/jbHI3zFGs6ScDjdg56kvkpEoa8eWBwa1s3mEwgn7aS3aqkNTwJ+0/aPO6f95k22cI9uEA/7J1VFpPY/37wpFjTnOctDKkvUsp/LqoiZqS8ha5vLw1FxdWixxWtfnRSuJOmQCaxPHrL7+aNbhoixf1yrH2/dM6cHLuAWjKcgYAtwOsrNBdq1yDvKFsJwa6ZcCqVT+n2yjclFgIrSAeR0IELIkoqQTgaWH1HKyMJjFpGhahqXiFH13Rg/rOnI2EuVA8pKHzs65V4nu4TKXT6dkp0QNJcL/gbmRG9oRR0KA3QznVeWM5g2eRVJgvqgNRg4vWe4aqwVDC6bFqDMaLfwICNmM6FYdUxxNtSqsS5rmF/tKN8QCSnPEox9HOZAjMjuje+QPl7LBq7nDbSsAkvrlnZiE8m7nHwDedDGQdadKPSy9m16h2blIkDWdIxiAebigAqRCgSIAu2D6pSpx9hFSHug5rMON9/L2jvVk0lvjC36uE/cc8TsFAnl+yTvNVYoeMh7kHNb12fBPGzPvzpF5mMQfeueevSSZnM7hbaXkeMf7vABfYRjGeTWN4GVdmCsr91qpv7AfEneYIfDaG5cvXC4Lkj1YYEwVSLMJQtbq8fX1iubAnGIyys9IFcfBqQDcBbnj09pfWOdaMNxwplgXJxJ7kJKG6NH6vlZ/3uDPog1pK01pQEvkwHF+jyM8kofkGKdjOQJ8d0XVqHxEyLBg3X+w1LbhjJ3S+frKAWqt72t/AdcW3egtzs3sIXe06VRpdrNNTPdJRNqShycnaM0nkQL49GdrN0rMFkL1Z0ySt6SGHsW9jdWNxEU7qOPsOUGG3quogt2iWBxvcdTaSHaVYhhWZ7x1CrBU1BUHR0nOmvzPqHiACwTQzAgqAHiJY84ZMTGByxDn6UHjV2R/rrJPb3VRRIuiBmaC6EwnBYDKIHpAo2JZNQNsBGYKBCYxkH5NkeJEXKJ0UJDUpaiBokuNIzjihggDEvk20TMXfFakKxJsdf3iHTPDlG1QQ7jHI5ZQUiM80d6tw9MFjo4NJz38Xh6A33AcxtxtWGXH0tqgJ5vmM7Aif/zMhkAJIXDuAFVFEYaQ11gHURwcwzDNYTwoFRXIL4ou4DyzGYA37DSUArLHdAeBOgD3+257Q5kkA5237g5r7TdbatoNY0cCi6A2jrU7t8yLgduAkwbXsMFXVjN5SMdYy9ACkdjOLU4MLhbuI/jgYxlLSBUyFxkYaImExcOJENZwCAcSzmBLgEH2k+037xxJYCT7b06bu99tRl34u3+l2yCSkzYlB5gU6yK9LR+x96VfzWOI//f81c0/u70szoC4iQEOsZk7vu+Z9Lp9+SzmTjABvpayP/+rZJklywrEHrpbXbfXMGWSlKpVPqodLik4qwEyF6DnObhB9WCAJEGIyctRhDx9dN1moc39h4tcDO3J2oeO361LsJc6yksbMAOnQHX59lx7bnVvLzxgZHnbXTsV5dTYq6vTpftNWVeNtxPeDzHnwJ/AC/4IupBOWW4vV3ybjdledTYgwNDKm6+86B3GC2g/KQbFTIfzIPxwn3ELmeQ7aJiM+kWwCgqy8+na4Z/zBDX2KuVHFV9qHXsLsDwLNGbcehaTK3Vm59ngfT67Kb09b5oyfsMM2pYMWo4/1kiR8cxnFrb14LcDEHaY7QGqcatxO/mEK3yl5xF01Gfbwf6v9GA7/X5HvwO+d4e3xvxvX2+d8D3HvNRj48Cg3JIzz0e8D4fcEjDR3yfH/DHPIDAgAd9Hgx4MOTBHsiUB/s8OODBY97v8T6k6fP+gPeHvL9XZ0b/9Ue8v8/7B7z/mA96fBDwARQy4IMhh/n9YMQH+3xwwAeP+bDHhwEf9vkQeBjy4R4fjvhwnw8P+PAx3+vxvWAWVn10NLym03HVR3jBU9k3FqRFLI86jc6xQAu7iNphqSMMvcF98OFHH3/y6Weff/HlV19/8+133//w408///Lrb7//8aeIEzAKi2fHf83Lxcnp2T+X4JvwxctXr//VC/qD4d5o/+BxdzfyKqccOWjHXefp5w/xONbwqjg6GjJ+fP6t+NYv2ARLiSIwm++4uOJhsAfl9a/So6ORrIwqMmUTD4q7w6LSh6MBYxxQs/KpcRQrBCvpiE3Mut6T5ZMTgB8Kjhkj7OpIlE0zUiLjEIaoXZjsTp9+sP2n2P5Xb/vxk+6T3SfRbLfgnvbrQSDHE6VnOKMztKyMsmkTg0F9toeDGU/WxuRrY4q1MWvwsMQWSaQGjIb4vTcIag2pn6gWHF6hOmr6Yj29VrDRVcEscKXB0wWPz0+y80ScZb4m+/ELdCcDjrjkJJRRo6zLAGOtdCpHnVybJdElDOjjyxWH8Qn/KCsFnnCS17aJXCXd/C1x6NjnaA3YarCOw+Tqyre34WmzhRQqj0Bnr656vABlKszvkguWTPNud9ZEpILEP8m3y3GyCh2WXGSOeg2CN+LbvUnHQsW63nbGKpTNwT+PAp5MC6xEa7DXY31OVc5xrCdya2zP9dhO1S+o+m3TNOrcbqQw5ghoSU0XwAUvqodUP9z3seDvsaBz82BQtnTmjTrFum1hFm40pOjOQ0Cg1JHPox5fQkeam+aLPRTMrUHCEZOujVmsjUmmS+x8OTYnqo8aF/DApY6pWnuIrd1X0QsjOtXDxIIZ/XSJ/RRbQki5QfUQS+WsL7rEaRkitpz+ScA2547ZibNdWrO2sPMucJcYbSuQ+5TijYNMLRnaw761YvYfueprb6rTES9eVLJIo9I2nWEKyPJp2pLHQs4b+w40tmbzbzTa2ryKildtMuSldQivo3ypRGTk+aKi82n6gECws4S1BOh+cvbf57b350FfRoxw0c/w/4ySr85JDy0b6PgEy3GpqdBxTh6qPCpvsxN8GJs10BO9pZWzdgjZdDb2WxZXvvXxPkDxQhyX6Nl5B6BGl1BOFDKh0/YvLrIFcALDQWSw9uVP3327oyp8nL/2S6adjWUXip5DyFrHGAJ8ocnVFlk7zV0cKf6Ecsm6o11RMJDmcRrpUHiEd3QoW4fgC4/DFbf8hN2u6hoYSsi2qOogK4ANc3zB4KmSjWIasy8VC7qXaf5Li/8wQf7Lmv8wUfyXBv96DSsJV2WExSinMqUuK9TnaEu5SiIlL60e39CAkplex3nRul5dMZlH0rVS3dC5tL3Qt08+LWd4nk/S52zFc4eWGomx+aT+l9K98URA+jFGMNr34h+48Ujng+JVWaF/NpkPsKn96iWQX4juOwiYNAEEBtp/IUpE+3TSnCcM/aBZmqCiJBm6omvw1KmZwvjQuXOjBD/1Xmaxx70cr8jxZizUgzGww1OZmi8kswtkFJfkonK6mKEnIlQWnQ6FjkfiTi/UM7sk1YrB4m0orL6Op5Su08/XaW4SCQ2JuCSMgi0io7QVFo6st4rG8iKZue4VvJUVVq+nnSNl0DhRZjiNxMetQnNcf7OB2F4BgfOW/0/8gpN3x5whfbGGvh4HPvFzI1GCiQig2umwlA/sBGpXBOnPo04zBdIvDPoS6VU3+2VZOpYwd5/6zy4uzs4nbAy22q4/fTp++PTJ7uwRG0/8J+kj5u88Yv/YLcJYbn99gT4bYcDEoQI9i/tCoUtUNb3C9MscfwU/T55li2wco8fBZ+DTB576M46e2OBpAE9gUMLTcLZiYgfT4DUw0HZIy8UOEk4OFMTiM6xqI7PK56vKe0Lpumh9dxXleDgc2MnOzXTY550p2dhVBsZEB72xMyMdDUUyrjKtY7veeHfX61JRhCqy372UglOKIz2a/SqWx9ghHMvNjpDO5cr0afvQsw5/m+vK3QogEOLI+WbkMZ7Dunoy8XMVZTrfTBhP7NCkGzA21tS8wi0JazH6tp7ms2g60yG2zxzyC351hZTKxU+9bJIwtiJLY83+c4UzL0H2L6NrfVZpD1EIDii5VgB0cLFMnk1i3x1hVBsrje4LRfQSPe/FvqAhou5knwL8YM9ztJXgeiouSPgTj6HoHV5PEwbkwpZ6COWa3nc7vbqFQclRSMr3NSR8dpxf+AiqMricXK7GDi3z63HuEvuislLHMf8nUum3UnVToQLHiZyyLMQ8+zGDkHNXXS1p+AJrc6l6+w4VpHKEIKM4Djx+j4QbH0eAHCljdDnLq2oaedSD9jqlSiLNxtivH6cCXT87FUwN2Ti600SbCv5aANY53L1GZd0EvqCEk2Sa1N8kzsbxakU2kJY1XmzVtv9FJP0gkoN5wSaGn+exCOOKQh7p9eWXYHoq7nm1/nb9Xu2RdAJa2Y3xfgMMLevQ//O6JYbqYRHbyGWmOz89qCwtRtt7PZ5HVZFhcpiHSkQFWA9JtyuvuElwcBfTAgZ36UJPXz1RSEsNCbbSqyuYrFdFUutgIhmlkQLfVU4SMPFptdLjtbMibj6lFYHeeYFfKtZZU12dtKqOX0Sp5Fv72J6msxrpiokYy4ZWNmOLIVuuHZdgCfZ5QoItDxPNSQ6clFqwIJKEaQNVAAgr6aJA/VwxeXXVFipS1vCNL9rltsAXLc/WZ2eCZBmrrNFcsG9ciKtvScAk1g89zE5dD+syW97b2S2kIabWYacz5Q0fBz3DNGHqPl8/aUIpN4yZ7T7jAME1ihZqRJIDn0GGi2sArWjIgHokAuY13rk3Vg+n3jg/rI2uqsfonOpwXGR50A1mbKxjvMPJEYC4kqLK6T2vjnyvjkrV5WqUDLpip+x6mHqlAxv1ozlUocHAYyTOb+W3PutmVno1U3/BJ+JzbJxJfxwDlNTXe5QTj3vjMkwoKJl4OyAPEH/vSEy8bQ+wIlQ9mta2KdOugPUX3Hn+9PhVlvo5U5cV4U7/4LAgEaqH9wbjXg2JXT+dFLQAmrJuItGqDksZrUaCDXs5WDF/Ej1JGS5E/iPwuglAWz6JuzU3YrswedGH1/ps3BAcfr7o9LcXBb39wf4wOOgPDyMxaQraF7sUzfscxMSRXe/BZ8cfeuOgNzzY2x850+k4I1HHe/CNSrW2KCikh7l/hXR2vIqSWyVefVQAr2L64ntHzbaDreYVAR6bNNK8wDWbsU02bpGNkEzdsGSlb5RqmLI7+m6PLXL86LzHI7a/xkdLo+XwVo++pIhouQY9WYTS94Q1so9r97gJGaSGpyK7HiPn6VeqD8pkJ5e3LfomZa/h2LLbjQn+TFO+03/kH2xXhF30Ct+udw4lHhzlUOEcQRZBWd1jg086aTXImgdbJCUL+0dFzUhSVx9kpF+QstDOspPGJ6nKSX9JZ+sSl6R+PnXq2IOhIYIJ0WrdCkbuaFunKFWjjM1UaDpzKU2skdVcLy2NlVAFraipTQ5GNgfBaDMW8EcZHD1rm7DTp2G0aOx1ysbrwg8OLKHXQ/ugkHMAeMY97pAVUY2MgdR4TaVd4sO4VpLxyTMyHmCjIwPCBSyXpt1g4suHKOPy7/Zi5xyvaTwqp8lMBuCDCpO2MWXK2LhUsryU0eOMA/04W7GVkjHqFZma0kDCzDjObjBnUWdbOQ/3dRBvEHQDBEmOnapOAo6iT9RkCKP2MQqTYAQWjaHtNh2rNoXJzTGAJ/iJXLY+fzZv2OALnqlTtyguJdd5ZF7qAwNS+hzYbuZRm9/xivfYbq0iuMQji+zUB00DPmfhLz9+DRm9OJ1naloN7+Y+jdpK0GnZKvEzw/8xT2qvyzlEoI0gOd8OgPeVccVcYu0fo1bm+KNPf0DfSCvVwW2L3+D2+GyJfCw28sScQN7axtJeU/BeF111bB6I16ZcIktLmNQsgE44Syuvygt1VXO2wsmMym3BVpjO5LIEK7vhSzo16pk76mkWihH1jARrj1wgkd4wkjtFOEvZqts8A9IF2vqgfEcZ/Dx8iI+H2Q762cgwtJChGYYWEAqzgbRmvzJwHMrSIW2pVYI2aBiqz8rln1uopQUucHEcx6Pq8iRPKgm6qYCusCX05YPMqUrrd0BOxIvjQsCiKy6xiWX6UizRqWryfIm3j73G7A2S3mH9suOgrgqvlP9aYn4tiyQBrZ523sGm6fH62dhO3W+lVoqC/VMNytQ/sYtgHv7U8xsXEZxnZX5ThyHDqEPusY1RQ3SHIUXgGdwQszV1HjF3LHgGK64r7OfGvXLcYz7zZvwSqzr2cMFc33G/+5d4IfDe6bMLbyWRAvQeT0VCh2v4sSdViJlz8q8uZHj4UP2truFQ3eUZzqZj21uNn3BFXF1KcM3ij3TfDiou/6KKc6GeVYuc8LOoiYBJxQGFJ1XfPcGLxnyHhRLD84oZl3wlUSL7UbKjWYrqp6p/1QHyngJWG0b4FjYjzc2hOWDL/DAjM2TOsul8hr4uOo08Viv+PIob0sP6nUQOzwSThCY0on5ELmtrRC8GxPy5uSst15Ro7VYlbV9rxYCN5zSEvkEGK7zA46/zXayZx+kaHbo8x+w5Z29UBPzrX3f3R7yTHJ89y5ZR9SCbsnrZEWVxugSDd3EeOcIatBoDPpIvVgPp21PDdjPhqZOU8gYL+oMqez9lMFB0IDr1GVMrX80NNrwo/kzd1/+g5kp/NGCc769zl5dqKwb9S0qQ8nkGK7w8zZLl67OL8VawYq16fZwld1yzd1CxXqNiy6xAAF7WfFl1E5EA3PzlDFarPhLnmc9ceiEvD6JMsZ6u/Fy5VYYgrpA5cp503MXp6Y+a3LpE4PgwvOZI0HMooxZ4dKVJJMNUbIy5yhWQmpjCtF91wLTjc0D1QL3D1SIwc4xU3PEJPgPD5PMdWNDtMaE8qxaikOxEhuhkOp7ShhbLeM7hWN+JxhCjCRvklMBuCuy6WoSXK/NmWMHwHla5VAu5VOU2uHDUm+qqrqixZukNyQj9cHXlpu2QECTrfmJVSFltrdVWsPoMRshJB45dW5X0FUbWJXAjBTeY5GYV8fY/8z1kZo2rTxF9i0tF2+ASb3f1PvnoQzQgqJJ4hgQsyY8+/KgdDjuLFHAmUsrOmEj5TVXlMd8K2IpTwucnt0gKNjXTNxYjurtVAMJh834J87yXpqbXX7S918xXYlwjA9lWVC/A+a1GgG82jLFQbuleT70rjSBIcRVFkqiak0J8anos7eqK4kUOCPmpLA7TucKt1JOtAJH2dibj3yajBnIyGtV72LEpNrQcrXz+N01HVTen8ci9HWVZvn0r0rpBziFRXN1yDg1CGUA6ijZ0ARCGh8JavxWhOxOaHKpFxIL0IWeiXtUtcMV31SoKMFZEU8MrBOObvcxY2L4qN5UD7FTQ4mLUeOsGD4f9x8PHo/3+4z1KllE3mordmmJ01ePCSDBbuQ12rDsFSYQ6t14l3XInS2KnLYAYps42yhFKveuihH6wbSJBz+AzdVSPioAaTcrdYR0n7bRIyZ7omY4HEFUEnRaFZv5aw8amqc0o1549ueU7bHILOO+XuHBDFPUApKBHrZsTc+RssqohHsg0dcWUZ8WU30jBmxJgzoLqJXqdL6XRhTrElGb3UARp5hJB523JAO0f1xUkVL0osnR20nwdN1+3KWUomvtCJQiXNrQsVsgYI2a06woyqcjasbnk+AJja7mtNjXKoyZb8EkHJRa1Rwff4iiJk5tAAM3R/zgIGO3vptDMXwcCdCQXd2dfsEuyPc9gG4E5PQ588St5/9vxavv+RUQJq+vZWX1pqAcXEMoZU02d+LJITqkiHUfJQ5l8Iy6otvcBzqhS8Pb0nYBb2LEkS9Ekq3uOe3cpHWoOh6yaoqLSSJFJZPcBJokVJ0x23gVO5vGNOPnpWzeWaPloPTLWzS2WuA60EdF3zy+uXbEhSuUYoxLJTei7Rch4G7Ql/LTq37ExdFPu3GhZnwgn1dSb2Al19dsjms6jzRkcLDmymrjeZlX7to1OnlpokjbRhHp6Fc1boEBJGR0hzSLf6ptJa5mmd4iLBFlkEWZOxam922Jl3BUxE21aG1dJVD9HjjgsSGDImHK4vW3xr0ZcF5ducTsLAdm4mtbBLR0DaidQaoJS3irrbWc6aXRtbtm2Iz/GHV0h46DBm2abOLN197B2F0uz+9HFOnfZx67rUbbG3v8+duse5a7kf08X6/zX97HTm+2O7+6l3fFGJsXpWzApOjfYFJubFKf/lklBIffDtjCQ7fpxmHFHp7Vo7gnwUSJ33TpvG82s/P82FgjInMbCmk6FxsXF8sYJ188/bgZ8nXuPfFjdO0e+OwI+m7n7P5dCN7fZYafRWbNNAS8zzbj5Rmg2BzSb22g2vxnNFJ8Wm45EGzOueXFjGbtTLJq/CRbNN8ai+R1gUcepz2lT45it4AROdjiBU5EsbgKnzz765h1vnd09UOnAH6PB/v7wYH8w6vVWShp3jl0KTFysmVCmJKrcuEXaL13YySNPpOkxFi9K9NgsC564M2tSsvF10rgQhS7Lqx9V3mKnDhgH/QOiVwOIXGiuD6H4FOvmCWIYaTfjNb3G1q0oshjaPbDk+sHzi2ewaa/PMz8AwgfpaXYuvY4s0A2IDFLZ0VjxDJyNXKs6dY2I/qfnMZwtdCVwgP20x+W/M25nUNFXbh8/PIYOUGn8QtW3wCPiIKjPIdXP+P2+b+fCO+1c8Nx/0hiVgj7a4xpp/+pF08ScJK9/CbSdi9hNiXWV0NQziqHcFevIY5vdiohvykLSPHVwy0KQzepQTuYfPBKMsVXbKkBisgpswHRDQ+7U5byiFti7dOfBknPD5bmfRPm682Jw/CO3P7Zrjchhh1rkvNEgeatBzjcQ1Tmf5qbQN3uZMQLD+28rXTaNpfW2UsvKeNpYU3JBcdcqbPUfsKc6b8eg0jKdX11Bq5UTKCGx+OWu+mfcUSptLrUmvmx8sxSvMRltviNH6VRRpyCdJuPqrVmMbhOV/5uGZOctWZJOQ/I2eGJ3VQtTCTneaDk9Wbd3nbzhWpObSdtImPbs7W0rPrghvn9D/MAZf73EO7XIKTPaShf4VXqz+4hrwE7MnlI2VZDT+LSbYOLozzZyuPp8k8JWi8ZhY+f3J9DQCVmaSb1Bjj6R1sEPURlWntsOVhjeGtJNm6JdKexAt+gr0FTzaDpzKmxtyszppKf8HtWa7S9YVRG7bc+ni9nTOfxQXUkwVQhZI77D0DYlXKfQV9Gbprn8sGeLrthK2825AL8mx3AKd+01B2Qw42zo/9n78u40cuXt//kUXM4ZDx2EQ3djm9BRcojNTDyL49d27uax72n3AhyDSYBAxiHf/X1KUrdaoCbJ/PY5dxajpeopqbS2llI2JxN3kfGd8SIWy5DhdfzU99a49e4+f+67zfg7YdSUDLbc8gh/2fjaFU6XnJ5weuT0hdPP1njf4RplxCJtgnI7xSApTWwIpD0XKfVpLhw0MbjT3WEe4g/eQ3HXdbiaLmgcSmdwJ3oQ/KFIYaCVQm6VBi8sveKCZv2/aqVZrOzwitbZGGryvRfjohEM9UWBgzHX4fX4aWctxLef1I+a4+86Duwd3yBhSnNw5pqDU2kOzlxz2lzbVmJFPd/qwCX2WGOPNfZYY1PZGJcYjKzX7yzK2fo8Ki2oztM7lFL7yRgacg/xE6vvt7HD5AyDVJZkN/n1jBqTi6cRNMZdejUSf+ooz2byXeQ8uQvibOaRpwQt2/xWyyt8/Z4eiEMuytuGDcR6JonSwioRH1M1KmQliEXl018yesobESntQwROXvHja+9JcsNELq5voAh6wUdNujyoJAq0Cu8Rcw9uXDOQqZhx4mNL/NzfkCYa90CZUVkv8YfNrl1yueTyyOWRy4cLf24+J0+49zkGoda1khw13Lw47knIbZSlMST0e0IPAQyXSy6PXB65fHIBXfc/f96bKJX/0qsov9KxefM+igoMrKTffDFFs/5Jb6foDP6XXlGpfOsdFRY7n8qvwSLe/j4hlJHM94t0sWFEJAa5MJbX59fyxaU269CrSj4Z0WcYuum9pIP2TV5NQtVteQdkiVwN73fi/brw+u6G4w1Rl8HVQDh89IOQW6/jB70CazApelbK03aCR+0kkSShrfBXwC9KfzT8hklVaZ+HJeyezdh7kU6QSBwoiEe3EaUKfzz649OfdjDjMzxydTujt6xunz0LenQwdhZMrmdk2vA9D+EIpD3VIOHCIt89fpKb4P0tfw+s9u0MsIf0FzCgqae3ye29I6Lq49sKnIiHUwaDanyb3t7nSV+K7C6RzCWyu7yhBLxnj3BRGhL2XopZv3+BhLKEJ8KXkC+QBt/GPOIuWU9Pb8Nr+hfwNzeYlt1y8kU3WP7R5Z9sTY303C1iMXfZIDcQBHHpk/qgcdhwHXbPB/nAEmEScE82icQKxHeDl/WI966jF9l7Yjci+zKkowLcQwpQno6K9No3t/3rWNAzelWoe/gcs9O2gIUDuDmhxtRSAGpK6eRCHIY03oiEDm5uI+p7CvmO+SMNTwP8IBsT/NCwhx//hq34WOsk0dqg9zCWPGmmQg/3DZ6yZZOnjl6Jueec4p0VSa6MUYgMzoZLyVg2fOnzpM+TPl/61AJuNUsfbRoMn6fQ9tCJBMVQ0tf9vebQucF4myvm5nZwXdQLAiYqoKP8M/JLdzDmq9ygja4XM9PaYMz1QyJNl16okU0rIGvEhu4Sqbt7qbsZnwgLxCtJsZIUK0mxkhQ9OYwu2Ws2ZH32E3sIllxMPkP8CV7DHb30uy75oZch/B65aQYq4tyuT35f91HvuI/ByQ0+PKfvjg9On6fXS6kdKOe1Vs1tcj3M9YJJyB05CKzReHdDFv6JWLENDba7ItvSYHsA21CxVQaCUvMti3yvDb478N3l4pYG2+si29BgW/I+e81/YkP+ENBsnc+yvMoOqZhf2TkV8iz6KTPbAJH65mA1gIZbQHcbQMsNII9AhgbI3RbIcgPktQmiSpiD1QBabgG9NoFMPem6Pdw2KFDr9S+btUY9FBcP12txl8gxjT+wOIgLlhBKjG1gYhnu0zZRt2IzM6Lj1eNUsdyHDNSvZa1EbWRFMHUAkoeIZlRq0UM/Aoq+ccAjRqYRihNHZb9gAOdoycMglfOQGNif9WxbTBK4+Cv4hEumpy/XM0YPthceQg5LcchLN2RSUHdcsEjCSJXdCOkJJVZdP98cKiFKNUoKwKWSuNX82qYwqGVbHownGRk4Sf5oBlrfkAElRWeg8gdy0NrKgdXMCeAG63WsFrnG4kM2GKtHSuAgEC7mfvVPegkPUzpZG7uf1BpV15pEelDkXysWZiYZ4uQriVuYVkBVCCDDHlhO2sqEnhMXbH9sbcBTdiSGXkOG0tD6ELv9bUE22cn2ZL5zul57bcPrewWv49g36yN1yW3rYjdivlXCp5hXonwssstzlPHIuHjvW1vzjMW9b1LHVmoIPlLd1jUNqrG5ZUwpHagkDlTaBg6lZkBP/XpK8CCXiCXOuLhPZhe7XpN9Tm1++dDwdQo++7kJFKF5cCLmwhzttbiOxGpv6K84KcfEkRT98oFpXiRbol3xhLpSvcD5l1hFqfrX+iwrIALwNR4+xD8nv9ubkarMiQjMmaSBDrnXjHlOXQwRdM+cmZfU6a6sk8XTsMEqJgHdEtMElM3N+FQDvLHETwvxUNA2/2KWx0N1W/FYrcoM36GXTHmb9diE9dmKPX7jOsu/LX6ExeUVeAIjile+cT0l/LOuo4Q71k9k5dROtdzy32n9Aztp9yMu/soZj3TvT0fxHM7Cj4y+rrn73n6n3dp3Xf+g/WzfpX9rN7w2m4d69lIL0PaNEG5nLEFsE+IkPqAzJBeXvSLw3b4tnFtRyuAPCH4+DF0rvjWCW3HKBByRAPBTR9brnwsy7UWklakMrSO0MUhdSh39cjtVCfszYn93+Q4T83SUxASifdzOUVbSLZWxy8te8/zyUtBpLyIrdrZSQFcVBRal7IVhj+J2sFIxnhLjd9p2MfYobgcrFeMrMQeuZxdjj+J2MCXG33fb+OPJWoUeAoMrgUkXNyk2WLzDrKpnNZub0YLB23cPpXgUFUW3EVcoGV0QvIw2qJThFFSvNc1LaMuTU1Ct1iQvobUUEDwHqldRnQi3UNhL9kgqg4w/Ey/9cjuVnV3pYDTA8HiiQLSP2znsUFIPycMyGU/faTQjgFv5ygDbOm29h7i/iWyP4XakoGKVITUfjwbJfKGRtd+OV14aolKrrzeNZwRwK58dEP8LwEk4GvfieJbM54RX9HM7lx1OFjesuOOYQoQpRBKfYcJOkJth3M5th5VFj/naAsP7FYZ9Qix4uZ3HDiaLXdluPhElQXBGALfz2QFFGVdERcJk7WokM1zwcitTGdqhzOsH5G52CZCQdEaIG2FW2PKCPhKww3BMk9HkPJzPV9NZTLhbgdzKXwbc2SzyQkWyBHMrRmn1FIWVfERJzzFcqGfMCHozjNvZSyuqGM/T2Sh5iMe/Z7W06Od2tlJAV9QC8bYlvjNPhWq1j9t5StHUKPTxoPXsOMFZvpSOx4s0bgTxUnb7UI0YeCU6vshfhQMClS5eTr8bTrb7d/fRvHOJT/8PcRL/nGNbgvkupF2CVE+A7Ctw5eS7OHYCtgXgbKzwpIvvot8Jp/qCJJolWRJzD9/FthNVzmXCNDmWnd48gzaD+C4Eq4ADmmypojs4f9W/9AhW+7idpRTMK4D9fPKDRpNeO1x5keOPALxLaOZ4+bqH0Ri7ybgqcXHcJmx7DC8FKxfkbQlqt6xydAQvhQoqpXL8LTl+E43iCgb8x8mJWkBCMr9IA5gyCeW5bG9J975CuvcN0ts7pB+UFqZnF6yjd8o82CHzUMlcmcVnirTHlku0NydfDLIV+lBp9k/6fi5AB1gxwVc2+1f1EmspUEWOp72ILGMrR8whn2kdaG855A7MdoaJLyWNqb1lmO0M8wBeNcubTKYP2YCsfTwj0gxqNSOZYR8hY9A+nhNpBj23muVjfsHLczLNQkUqR/XRIucp+nlOGFRyro5I2YKeF5nh6cTlCJt2GbMlmGdsWrBaccDiZ/gwesTVOK2UzTCuOQrs7iZ7OH6LZXEbiI7hmnuzrF3/yM9nDg9zTEHyqbj2cTtLni5PfXGEuPM3nUGDYnKE4YuWZGZFMk9NUHoLrIHefaBX8HSsqip6FnQ+xTrgyKRpK4S3NK+/SObAkYvcmkb1SMT8+69YZaTFVh2rht0Pd4tZkswxzgIixKntAolq8aChdfLeWKlXx4uKMJrP8bCrJfYZxSrmk9EMf6cze45VdbgL56NIp8SkkCUDEWUEns5tGYn/RSntQpo3S2/fFs41qwF0UCwfYs7cXJMYDLIrn42WKPCfFe052vs0NsioSLZLZN8M4ZrcYLaW174RwDWxbvLkfVaiu/3NMK5ZtPDsmyS6+EU+AWlEuSrqIgnnRhVW3Tm2QUYz0ZjpkSEj3hdZUl9iIDiexiZBWxDIXTo0yS2AAyX7ZDSXNRMg59PNiuEdZqpDK9oiNSjVct54ER5f/II3W6kJT838dr4a7NlGV3AKJlN5fusLDcN3vyqHvlfa61QKVP5Wn2KitL/YCv2Dr+sj/cMvQx2pD+ifCw2t4OWa0Og7BXKKD/YhOk6UktFpqgozHN2NFr2H389FAvIF2EOakeHfI7hdNUIv0XqQHRKufdxCbgORah+PoIIMRPu4hdwGoiYXcXIpF2YEivZyC4MNpp2vl2H8XiRRvuezEcYtnDY8Uc8XWCS6XISTdypdRT+3sHzjnu2/92xpG09v2pIvMCK/+RQ88WDbtvIn3LelrP1PPeyVnZYJ5w+u+lGFfDzG4iT/9Pbs9K997CD90m2x3vn5L6fHvavTN2fdwzY7fnN21f/71b8uz/vHpz+cHpNxC3Z+cfrX3lW/i28bQhFT1E9nb8764H/15s0v/d5Z12Wn4Pyxf9H12KvTq8uri9OzH7s+e3N81c98bXb29pdfugfszelJ95BV3uA7+Lh7xCCwf3GG5HTYRR8/z1j/7O2v/QvIPOm6Ldb/9VX/5ITcLnt79UMHiWIXhOH67LL//972z46RuEO4r7ruEZKLpPRe/dKXYpFsdto7UB7PA8Tx1emv/a7nsx/7ZxDzy+k/+ycyqM1e/XqeJb6F3KrjRkbtZDFLnU/bR5xSp3DLXr+cmepGMHHk++HobVJcScTDmOqFUnE/MeWJOkL8CbcJRWF1QyYeK4xYNFWTjyTuxkwYvJiTc73eSgXDJORD0k0/y2OZMZfvEyezv1K4vNdoeb85zK5FZ0YzOkjmXW7yZw8BL7PrufU6+Y/oWp/TvSM9pXgY+sQ8cpgAOXsuXRqAw+m2oPIHHgnxXugL0NlpTnUw6mo6rabJSr7xXV1Mq+LR6+pJ/4JOR6l7mlyzB/JY1SD4TDBpMddswNM9VHLWw6/vovhi6iRNq+ETUfKJo2BKk4FcxNXe5dm+WxXFgdSwAbrLBUY4nRx6nfw5XnebsEEwKQSLxA3ZiotzZ3UkB/3ckK/Ec0r0aj9CVXvez5vz3l4PwbKB7ueNcG/PpUQT4COX1/C1icI87ygBUxfpHidVpDZB63UxeLPPcBysBJCShkJ/oJw0MxNVlUfHaTQeWbM5+RyRWZr6K7zdISP542dicugPtZ687kzEsbsgEJoP1c1bj4Dly56i7h2rR6vrLeokP8msKMrgDvj3n4eyseV1VVRRZdSfJDwWq0nr+SRw7Bxs0uSPTU3LDEaCo4Tq5Bs1RtWXs+lDUzfprKbIWUcVTWIkJwmjRaKN9pg1BJiF4s67LaErTOhqSFUreEQuHhvcc4YNq7Ky9uwe1h2ZdExmCrrTr/RmPWF9wHpsxYbizbPF1Gzy2S0H+1HNygDQWc+2hhMJZ6mVWLW6rJuj8ixo6+VgjYbRTYuvtpvmTcJ90eh0z5vonlfFXSfofwWEkqmyU9fxjn7xQaa2TN+lQglf6VfFFl9XTzKd5zmZZ2ROEOvXi1R/fPSCF8zo6HgdSH2yqoFJgTYIUR+CeFoN7bUgoQP+4gLsC94JVsPRGCp9bqQhq3hrjAKZMTv9thFaC09w/ztxihxmTj+LKG0nqKJvAoup4NVWXQp5KJ4/x1Pmu02EFd7sr7dbT8QIQIMUXXxhbstpFEJcEaLrSyyut03YPfcwYQ2LE9ZPsZjRkm2ChBcg7gUE6XPCE1K51NwRw2Bcn6w5qYil2TPXDCiuVmpm1zQ1lBdDebGjc5Hi9pZuenKCPruavhnFW60tCr51QBXZNob7qPh4e/y0DZVB5Y34u3bLeGCr+DpG4MTmgPH8OalATBPSBifHUbceNTgh1dNGDBJO438hV0hgRJv7KHsk0TInofP3FMWiQgFkr/u3mOdQSSDyADrE/ZZnrVYj6np9vxGxsYXDUxxNl8WW6HYGmFgiD7PIe0tkJ4tc8ZZorG6uKT30UntAWyCyJXdbQa1Bn52PeAGyqRz1lQXbzfO5pJ78M339LzCJ/QFfDf8gY0jIK4udIAt/Pf0wm9fpXtmKQd9LwBakLx0GuRzi1mvIJYcDCpt+lw03kxxao9s6+rAPiwqHrSdRI8wFvBQpovKtN+6aldDpFgNAqJ/yR11Q9//pMkP8H6kTbZkkW/G3bcVvKeFkVwnf7ywiawF6WeyjuOvYYuLt1No/oSVdMLo3pfIARUu21HOexxywj5r+XIwKUtUfs7L86CwtCTjXBXlui9YFucwLctk4d5hCR3qWTzgSRglHvd03Eu62HVHF3L4vu94fxtNQw1M8q4g+d/iyXlJ5ma3yPjrMqDBLx+lKACu3yWrWrThcoEK9Fb3N1l0ZS/+Zm61S76FiOhXROKAuetRrtQb6PjMnjpN3M46jKImwnlH+On0QU37XiM5iqUrXLTFKJ/aoX0cPtMdhj7xMMGeKRaS2hRTpES50vBcRDBypEDLHgt66VXMYfikiV2EDdVWr8Uezoe5QZ+Xr9GlV559Vh1hcTgYYzK1T56h8NtwkCwAcIzt+X+QKFVOGS3HIUrRp1pHEvnd0KMnJtYvBPZQcHb/TOWxJHuXeweW1JZfntmEa1j9sS0btfVEpZ6aP2YhnN5ukPvDNPK2OsdKVBDBY+rE6mld9r4m18TnmflptPFQf8FGQz4oUgqHMPzIninjniWlozfdgUk3K+5bUqnxTHdL5Vo9Ziw2ijRWlmA1YqlZvMTKQZP2hhJlBnHswV9DLx3rNWhOs1XeV5IKjnAMOJ4VSSkWlqjVcYyYoLo01vr+p9j++S8QXK+iqERFWa983NFuj8n2NVQfTBQWHOvj72vcO20rbbhFEo9DhapjAFEKg+sah8Y3IIaToX6+tC+8GjfMJ6hfzt1h8hSGB5uJaFu442hiZGNEDkC6fx5sfgEsn4SoQVgv2p+/kQYH1GhfIQhVOy4D1esJ11ajrKKa5RR1xXmIRsWuBzJbXHPYXUmuJZq/sZUaa3VZ2NcnKQUhT6xBEYuazWC6V0IyiAiLdCNtoWMx+R6dY4R5c574brngclof1sGZtUlEIKPPlmi9VnUKpyhQXAsyKZEZ8r+8xytXThD+9vv3ttw8t/NMUv2l685RGCtAtfj+foWPaaMuyJafim5uj4rWCgbhKis+nmNbZMED89lDTn6BLUKq14vjJQC4Tg6ZaC0C6bNRQal145qsRLZjpNoVdoBC62Fqe65IEHEZZJrN5OO7W5PJXYBAX1/2JvIeNCGU82sJgWeUTXOLY5MdFU90HisBasfCqDQTBci6PHnRrn41ezrbM6Kgcg00tFskflW+1EoONCIlcrWNRLXF06jWN2qVQZK+m03ESPlgp9d6Foh0tqnIosZKrTQ9FrAYHKyVthJjQb1DldoLTbkmWM8yK7LCnJxmcXDvUm9x2etpzMTlOknmEY4mLqZ0j251RTH0cGZ+hw6lOZ9VTZUkBC5ZgrWzzXvRzvosktOdA7/VkEh4+TIQhuNhKL3eDNPXkLoljtPLzk79a6WnHSNGS00pDu0l5OsdoBcuk+nX6zPafFPclnaOHRkpor3KyhZViY+tKUYs+hqzhVS931MTegYxVTLm/Wu9dHp+eOlYutRemeOCr0ra5lbS4V6ZZCt8CitVSD/RqqeKCP8+L6tCzNh6kPG1Q/9ioo+s71p0zukCztxZUWwvFBVM/bKU7VjXGWLfijJF42OAuWzW40cEbI3LDRRfPJg13AxTM4MNWr+OojhuWDOXYOafEDxurfDlZxov9OEQxvbqct2qgxVwv++XrwgysMRPXbPf29G3bvb0YewbVYkBd6rrW0IFYVWzUnCpSqEWaPZnYuwGjObXOpatNm0eHaGqtjwROEyS5KXM1fZ181LQis7mcynZHCPPa+2DL1UsP8hMu0qxCZGrZl4U53ZTrLOmW/zLNmOKETqq8XaSdnKmrOaztb73eINCtDLgKpbuRB8TUv5jYFiDN2gO22jUdBLipdXPsbC6S/l+25Fj5HzIxgBmj/gIlX2BGfutxFeL5k1oZQM52m2kkB3Ug/932GlEXrDtW/5+972xuI0nS/s5/8b53pyAPpd30VUUQaySNNx/GnGOQ60gNIjhkSNgQSMZQ99svs7pJNJqA/Pr9gqrMyn6yXDfqyWrTdqEWk57Otw9GdGa7m6xhL5l4+PH23YycJGmylFNJNaErMSEl5ISSUN3GQgVJW6G6eY0iTiWMKOUw15Aw9JgkVBCF4FYW5hQHkss5TDQU3GxSiRILYwkASvXIGcJhA8WciNJrs9pViODVuc4BWiJ+fdb6xhK+Nhtvb+wIscmKx0RwzOQXv2thsace+xruKglVqZap2r/vNPXvfv/H3cj4Q55+FkVAb2/6az8nhy/VjDci/WHwWsUU0d1lukpP0nVaDL/yYnIwW/gdArErOfdzORKcLiOh6VUk3Op57XVE+8W11/HaX1Z9fTRbfWHly9P2+fCr4zOPdx9fRf508uPkqVtNwjQ9mf0QyensygPxS+f9Z+lsMvvx4ODJTbyLmOnhk+ZkytR7+HHmQP5xi+PlCG3uyVsASrkDPDt2yPcCMxnUbvfs5n+v3rly0dmtxyenNxAShoSTs06ikGiy7CSe7cTv5MrFxcOZycuX3T9A9zx9+23X8cg18VbyC/bt26/+OBvJK5sAGRU23en0dHwbl19Yfn1z49eXaTdx4wq27VaE9EM/19Fia+inO/T99jaA1F4O1n8LyiR1z6X3Mlrqn4nuFZCeuquv1nThfN2svWqspPa2tP1BnU9/tmY2A2/ZPbzZyMrEI+2D92iNirtPjaXue5d/aO+X3wDaBVtgb7q5k+IWg5/msI+ZSYtg5TTHfQFiYhbMaWdO+6RGXBiB0pz3Kbsxl1xeriIuL709rdG7e57rXh01WDGkMw/svvAVXPzNnrVdy74ypxd3i7s/9NHc1eVhOmrxZLbouyOsDhc/X12bfF5DWsTvkU/6Tf0w3LW/8l37q029dXh15E7iXoP48RwcTXY3242c76XNZl42gxRAgTs+ajq4gcSXLHHhjGjhdJdAit+A6EMVcajZbHgDSYTQgjf97g/e3asx8N7qpvDwZHmTey/c99PbzyKsaRerzdmd058NTpeHG/vkVb1+NNkwex+sg8Y/yWphl349gzceyjPfAdgynL92oLPxTIlG3v13nLXxm561EyGuiWmOkWKaU6Qx6yPllz5AZz5APlLb+3QI7Fj3VXhfRfdVvFrAvhxFNhfdVW/eJT90ydMu8T9i/KCUY+fv/w759ge0YhwuTNeK3o5vNIC/I7qxM+Ab3rI/6Vvh35Jk9B/qWN0R1t1DsEyLNE8XfvH4cX2deXVvnXkZCXXLTZ4uIpE21hfdcvPCR/hi78SBBt+S+/3hxZGHcuazZSw4L2OJeDLb9TeRa3sROeU9DxktJqhYFICkTk7Soi3ELj2ydXZwwHBzFobpbHaafKOpW90R3LlzDw/56DiS0iUofWpH7uzk4ABvThyC8U9VG18J77xXdc6OvS6bq1K05qxc+c2qIusdY73rPqW+Skx9VairCvwpqmLvXZUHlzfL4BWXm4eJBKBqzVDerELlw/fNzm1dmKuK1VzodXV5Qzpx2UkcEt+SCwlJJguXrlbc4mTWv7asS96HXTSYUWlTer1PNvCLhQczT7cGL9Lp2wUv0iJ2d4dsZdtd1rfMvPiByzW2EpV9NV0h+KB0ZTmiKzswXW7gK8tX85XlRr7SvX43+MrTveUr+MrJu/GV7XQlzWWfqSjnrAR3i6plPG1zR16W98jLaVoMyMsi9us3kJfTnrxczu7WBssxebns+yasDi/HS9LLjrxEr756xTv3Fe98U9cdzo/cSZCX+PFckJfNdvfIy2YzL/OxdzhwuA3s5WTFFXw5F3/IT9PJLXs5GbCXkyF7ObnPXpYxBpvZy/mWeXC+8n2yYi8D7emKvSzXycumxi5fSV6WG8jL8j552VjTFWWNxy+cqGxy7yP/yE+MRwfb6+FnzKO9xZbjH01i2Gf3KHFMu3S++rbevBvuuTPpxWv5jpN/iYy89LFd+Nj6e5S3DcfAx8IhxwocK2is4LFC7mbH+eBk7e/taNeyxduTnX8+DRx/JiuyE9J0vfAtX+LcMP5O91eiZX/1hCfozuN00QfXv0jP0vP0YkR9vD+6wxYdr1n4SC48jL44WqM2050+ztwbxKJy8bAtHndj4Yj5Jtb6unfcibWJvHfcJEinzR41gs+7p67LN76spLAPCUuIKHvHIXFq/k8mcUz2AFHLoB35SvBxx9IuOpZ21bG0Jx1Lu+5Y2heR6PRZJDZ9Hkme9k0ctmD32n3ZzbXXw7weISE2EXuRNMTcnhA4vn6w+8Xxs71owOMou3kcy123DAk5RKy9SNTEtl57/ODixjcMHh9fxML++eRkcjaZe/sm0chYNC7T89kzvwB8kb6YXafr2ZPJyQ2kJy1If5EuZo/T49lJLJ8Hi+nHa4vpi7XF9NXaYvrJ2mL6upM0JJ180UkWkk2edVIOKU+eu/Ti4WxntO4mtbvMe669HWFc3qv/POtv3zxERGMlgZKw1CqSRTAxSGViyZ6thMG7MqdqWEt2+4QKpWaolROJsiNkKYlKhmxMhImNhAtCgcQIWosAJoNMpJTdlZCVEmgJKynkwqUkQiPPElgiQyluAZyYpBCRBlRh5QqBJeA6kpzFbYUlg8MaSIFsVFLOQOpuOSFJRQUkSqiqUNCqZ2s1MKnFktsJEZRCiQphYUeraYeqkhsVKIkJgZEteoPZNGOpntUiSiUjJkSuZNEbzIXEizWZGUMm0JQzBxRSQqqSNXP2LFfDQuRAaFXdbQZIWIuZISgmwmiDsUJ0sZsYcE6UGaRoJYzKAgOJ+2fS6gXFEZhFs0mOuioamBbMiQ2AlQpIEqhugRWqg6kQs7jSgShnlqRgVYqhJdMKBqqWSuFac8k5VUfjqg6OTBTDgiWhRt0JYl5kcTvOuSasqmoxSImiliAFNVFzA6KuZcOiJCTJf4qwSZaok2UWLDkxgQCjOBgzVSalWo7enDQuV9u56XxMGknt1bSRKe18SN54fm+b63wDbTx/NW0830gbuyd1gzae7p2/B23MFZgzNNrIKIIslBttRECuICQ9bczcnWjBG5G1lsqINc11nwwgpjVJmtu+UnFTY03zvI8qKFqJ9OVq9fpyen5HMM/fk2DOVwTzfEww530vhtXh/B4ViN+gGefbqc5OY5iPnGE+2jvfRDOO3EswzPjxXDDMjXb3GeZms257zIEc7Y0I5vLdCOZ5jMFmgrnYMmMWGwnmYiPBPF8nmJvaev5Kgnm+gWCevy3BdHqZHjlBPN9MMCOmfXGwvR4tjng529kMcDGJYZ/di1s88hmRFivm9qgb7kce7rh8PcPsCWaaa6Sa5happXmONAfxbAH9vem2YRq4vnRPYwWOFTRW8FghY4WOFTZW5LuJthic92Ou2m/Z/RVT1p2/Ws5KakPWGvJ0bPAWG3UDmL9b6kpq70ped/4s7LX/PnHPXJdp7sz1In2ePk3fpi+dx75I36Xv02fpm/RJ+jh9nf57yGrbU5X/3dParzta+7WP89dOa78+OoR1ZtsuVa0A7xfcbqX0xy9mbhisd9luAEkLT7Bx4N1lx3oXHevdXbhI9WZ5cOBSlFnn6GmYhs1NWGANU7e5CRNyKQrJWqHtdYd0TlHHXk9vvYZTDsoaUgmJpHOaO4Szzilj57T3Ik0qvaRNyr3PZfOZ47IemdjM21n4XfxLdxz0NfzfduaJayFIevenPw40rnfwIqTYVT2EOHg6j1yUBE/3JHQXkWu6zz1HTfdp5JruW89x030ZuaZ75jlpuheRa7rvPKdN933kmu4zz1nTfRO5pvvEc7npPo5c0/UTZzXwMcLPou/k5oWPXnRaE0sTxcUXLtabZ96TfDtucUwY30RZGDVROrHEMWF9E0B17256fHb87MHud8ef9Zqr2e43xy8e7H5//E2vuR13Kjfzg4OAnYfU5hr0Ug6JdG9t/OWmGZawCdtu0nUSqUur8X8y210+eH7z+YMdv23yea+8nu3OPZbxqT9RcXxx18iPfT/wavJDN76TGOfulPjEAx1POz10+u3Tw9u96OHOJtfewtPJk22mZ73pJ7PP0sezb9Jns+/SN7Pv03ceQ/l+9sIhvpw89b+mb93/FogXPcS3s8/Tl7NP0+ez5+nT2YWHYZa+FJqnmOkePYugyzaIeT+TF7fzdzKf9nN61qeT5ZaDp/0hAwhsEBdegj0ENojn2yFwBEEN4lMvoR6CGsTn2yFoBMEN4ksv4Qax02cm327H4BGGNIwXXiINo08nz7ZDyAhCG8T3XqI9hDaI77ZD6AjCGsQ3XmI9hDWIz7ZD2AgiN4iPvST3ELlBfLIdIg8g/vvhDKmshc4U6S7znqEzRxiX36pP+rXl3Ye1bl1ukQN34920t6uWvmj3//uHAB7GN7t8JbETznuATRUJ9el06CkWYSPZPXfQ+6/zqkg/JzX33HXBYcQwbpVH4wqMSkde12tFMhvJb1krkg21InlVraJ07HVDvNOXyHMPeC62Bzzf5mmJdoA/kjAMebJBzZZFy1E6HMQ/DahUzKSuXouFmkgRrtVXA4eDyChhZqqqEjirMKm7QKMimVw9iJkyKBcWssAfBlArZ8uouYZ+GE01Mfdk4PpBaJUySynMVVy/irMimtRqKuF2EHRlYkPHDOtBBJa1QjSyoQzCsQJWsBAXdv0gNlsrsgNhqAdxWmMuwIzZ1cOYreSasxQrrh8EcMnMDLnr+kE0N4YAHby6ehXZJRYko5zD6SrMS+CFAJVDPYj5StVaoQK6ehgALuqISKyuH0SDGbMSFmRy/TA0jLVUN+Ls+kGceIdrrRkrt1oOosbZLMcQmKsHAWRSM61ScpgPo8kEzJyrhv0gtOwGIpqBQj+IM5OYOUzXrkHQOWthsm6gVhFotJIxVw6QVTQasRTX1jYLBqFpFQP3yaEexqmVqIBKUdcPgtYxNCV8hc9BBJtYHDJzBdcPwtkIKDG+JfSD2DYSWNaKba4OAt0sAjkbZVcPgt5IFYqxWMAMI+AYvSRu6fphOFxBq5Jp4Axi4whGmAGKq9fj5OZKd+76QdAchSmT5mxx4g9C6CiWgVFrHLCKpxdFtJoparmKrTM6NnFWcvUq0I5sTO6+qqtXUXfOblJUK7t6FYLnXBQUqAT2Kh7PjIUhS+uwQXCeC1ImFgiUQaSeABhYanM6CNuzeTlbqdX1gxg+ao5TCjDqPgjoI5JqpUrF9cPofkarIAzm+kGoX8RNDFoHD8L+Wtlq3+/DLYDMjAgkUZvBfgDVWllR23CvNgeitVrdjHLTV1SrhpK4UuHCFaAbbyXLlDGpGRXIiKGuAu7TwBKLClhVjuoIYjGGMN8RACB259ROQBMsUXusKMhFVbrOpEpCmCgzgirlbrJWLsAxsAQOwQAW6OYCk9VQm5dgmwVFJWNmTlqyVCsctkUJHbtN32K5UlEMh4AZ2Fr7TVVimoUayQBACyQyLFSzZQs9lQLMkiGxQC2qqCX0CqigVUoSYlEvsmZvkNG9oaZaIifWzAuaAHFMYBJ3ULXi0ZETmZ9u1wb/f//wcLCrIFAqsXZnxWB/gYhi9mmbioOdBi9EzG7Prh/sOaBbZgWk6vrB7gNVtzZFzq4f7ENkUkU3CPPVhoQQKpeqEtarrYnElIGZoHpbbhd80ZCYkBD9rGmHiQtnBKbWPyqUgRRSTAMFs1Zh4aJUOUMqGOW1VYBVxYgNknuUimS1VSAzCqhgVKxCzlo09MQ1/BJjwuzQwNAtSswlcAea0KpAtsIBj+QWRgW52z7LKlS8JcNFZLRGM5uoW8RYQ+aa1VqvZcZMHKceG4jUzOB6rVYKq3HCYjnrbe0cgQpV0IRuKmRG2PRYCWvlkrw4V+EKYc/oKo5ecntABpUa8JlQHUskZbFqCNYqI+7UPVHbC8VCpdBaU6gNDLF2FztLQlJVqbb5WUXQJCMkYqSqUJtegWoGKpaKqiGpWFjnqJjF5EfJVdEQu5aUGL2YpTEoiFAg/gIIELlGs1J23ArafIJlKrlmS5hLDLmYBEoxiXnJiUQsxtbw/9i77v/EdST+O38F4Ro+xAYZ4xAcXz772CSv907IfcA2To6SutmXwv9+39FYljBOdrOvly14JI1Go15mNBoOl4INIpaePbNlL51XNgmxUR+RPYSJUzTfpYwsVTPcqhF0knUJyypsSPdXRXbofv2A1PTWqNqSVMRoUd+SWjSHuXz+3beFqmTv+mw2irA1aOIYtebA8vCHp6+Siz5sZoCuLWvFELQqbPW9t9fRlf66sLW/JmztlwhbC1jgypa2jhC+Lm2teCICuWiHbgRHTv8RcesDJRwkWSlquRzXEFPVfop4MohwuIif7DS9lZ/P97Hh6udy0/6a3HQkYktuGlNbKpGbahtxk9waJ0gV5KYTy1buYFIUcE1YbpqG/dco5qYQm6ZlpTVIh0iEDszoBxAdkZXirYtNy9FYbApCoFYiNr22zFKT2DQRt+Jai02vLbHptS02rVyvy037VAflctOHJO2xSfzayE3j0muF/VW5aVlm+4/KTfslctP+U+WmE5GKOeSm/XK5KXWt453+Y3LTY2fyQPzjhqS2s9aq5o0wFbERIs4zKTk1xqzvJCt9h7lIVtKEinaY4Mf0nag+QV3HD+tBpGa8JVMmu5OMYK+iFwKr/k23l4OexUiqOLAyQMygtKBwhfhpE2bgrEmMid7fF/HlMG9p8TJvc4VrjhvSXHJ8O/npXyq/qAYjPmV3UER4G8VfRPvDyk+Rt19d+ffxw+M7XMjskWdHgF8JkD6Cj0DhYqBgZaHDTut2lTnotfU+/+pmT75FbF8iDuyAp18h/kV6VeUX71bzuCZ0j8qaTPUZfDv4paaID7c+BqgL6qckYE/s5+9vMFN+PB9FIX+ojp0SoYmlmBnxJ9ZaPneFdfqFSJVxbQpGH7pwSu2WK29I/Av7iQvaChU6vTNakzlcDLXEIrOpa2+d/vXVYro4fbWoHo8uj82+SRl9vSDDqRwH+bkIDJ9gupTR1ElLFxZpRmXtcS2EaLOqKRYfjy/EeGkxsdc4qfW0xvHQWfKVsNTogcz/M7LXe7QN0JsGMco2DfU0X4hiKTHiBS0QHrbjED/gbydtrYbmvB5D4OgKnU5EOdcd72jiiDh3b7twU0HPd1b4dojYJFzxa85FViKKvE10laQaqHQWwXus4WVeFkFeFjBnLSoMm2aKpp8jjIEABZmPRlGv0ObHVtnlyZUkEVvwOB/WTNwl1nqZA22e0zIKdE+ceP6aeGioMlMPuYLVwNXpp/L6+Yci/THXdZSzB1d18/hXu9ll9OLQydgsdo0sjM7oRbW40IKz9oqjr/GSL1Rrk6aXplonzoyPaXTQYDLMz682j+qHXzQOLw4XzqaoxFTADejF/e8UNt1QBk6jRmG1YAbio7ApVfPhlMZWEqLRmFGv9Ds7sGTelGSU1ZmFYzqDAxm0kNluvdEA0+HY7PpHGXnwn/vinKZXilRrzCyshnRQJJPmqCkF8SXARD7zoECQ4hj5hNH4wyvLITSM2XOSt6NcbeMsmfOv6lsxnx8Vj5rikLsejyu1Jv15Z+/gvY+rNW3Wnj0V1yINRtRGoi8RQCbRwzuq1F7tU/g1ybMmuFp6g0ymb/CfkQVwJOwIy49SoPPURhjRpBoom7pXaGwvTud4+dhOo88BTQ4xCRWigFrFIhcn0/cWk1Ob0Iu9D5rkZ0jkaGYBAjLGFw/JIOYV+IfxeN0muRmW4Dh5dtgc8DFOpsibWluK1pbu5H6m1aUORTLYOA9zVgsb4dx2nADgyqGg7yHi+DS+wQSKByBmGCPv731PNzbdNhCNK3Pv4xel9UvNJE4KzcR04oi77ebh5b+thlIfPG9+32puN6vDhpPR2j1c7NYHhz+4snn4w1ZyeDls7NZ3eypA/TgOwnuIOGreIm7jcDNUSE7O36FU4GaKxc2mRQuJ9MDACvWjHnzR5Sfgjahviik90DgNY8xbCUqVT+GnDhuD5uXWHeW+N6UTTF3KfFK90pzYK6tkdmQ11ENhUJn3jElfrorpoI01nX6+ZU5pw88d2uagyc17APVEKu2e6M2G/PSNmMf9fTO2odAbf98UNctS/y2sNsvg1kTCW5Y8KS8Q93ao8ox4m2wSeEEHWVkJwHTiIrjmNy6n4RSNhgwp06rWEOfeQuWT9xN0ioXNOg2qok+H9DsLw0TfubX7CBLu22M0MqLywQvGvIU75Frtyvf3xU5PD5PRPMLYuu/d31dMpzYoc92XmI1b8xpmKwTS6tzirGwvtGTm072PaLGE4qGnG7JT2WfVL4+TqkmxyslU5y8vr7Ahuca246oKm/5w4QmAKkZ5GGyfxc+wKclZtgUwVDHCDB9wSwzv1NSylVyhWEKKgLKp5fkx46/J/pMzNDm5AMcYUEZnly9nIwq3MzZGlk0ylBkk7G78BAVpqK6X5NWr07wALylR02DCu2xC4QJUrzupslsul3jsRC24YQz/8+8+hTV/mirn1mi6kdfET1XxKB/YaL9ELWHWtjNFz/FYjFAmlsusEUZlhVZ7nImaWdKCzl+7isqTthVYD5ldBRzBStBTj7QQ5Y+5o0DGfls2ImI6No5Ozo6TC8wl6cklhsrneghFeGVd5RVPM6IQYoxMNmJMCRetOouZbnf0xHUuVd1t97axW2jDK9md7UKjVDRd/Bv2Bi3RdgUA+G57widf8vE9gW8RDeHsSeHbPuIF3MLGNHLd4COHqDpltNM7unHwAq6rFA86wc0RGtcUP7gEoVGkTzjQGFoNlz4Q2PjD0dT5JzQwoMgB5RgVDETCcTVKl1CkvyUl9LFsjG6eCiUivbZEQlt+J+8XN+HN0Vhg1XBEaRKAz/2ULeUhkFw37KJ1zfVOEuABobZZWpyFs8E1SRDPFeAOxUsCcANmIzwLXjbCc66Mj5DQaPByKN5llj1l4KLrkGdDFdg0qEzDmwAFiJsgg48o594/ocRzP1EO6SvHXDm6Cn41+Eh9LwbvGuwUjhx7AYfG3hu8S19nSUllKS2RYcK+J5NxEj43ynVDroeKzq6k11fAG9bi4y2hvDVFaG9ccR5gOaSqNJ0hyd45zneEUYjJ7oumevEQA0BCC7J3+kpD5Kuzs/xEN8bp3IjWvxc3Z1e7eTflU8YXCTvrETZU0+TG6RUQ+ivBWrEh5gO4IPsWRlfuqxUab4KoesIv/6iJj9fiOELk402+eR6JCPORfQB1+vIKJ41hAvAEV7qCCQ9QMYgvjfBWjR6h+lXxFMQM7S1UbjHA56yZoWQUJvU7ZKY3EpxQLxJZ8fQg+KWi7OHdNTVe0h5+t7bXf6fW48JdmtNH65hRJ85lxqlTolx6pUcp1SITlNwaH+Ols5Ix1NdbZqz1E2QMqT8lY5XSnLWKOTMTQIEeN/Kr45PLIFKr5nAEgGKHavao36mT68w0BDfb3l2y4IRKeYux2PgvuLsUVGob0lmCsTfHb2GhhYKCH723DzWBtSxYUyuhnNB7R2vPnm5QnpgGaq303D/rbtlKlPCpBIhonPzwCZaPbfT9GlRoXG8jtN76L1+rfolHu2ZJE1GqIFu9BE+kxWa/YekE1kFCi169gLoy7lVIN4fIeAlg+vVa5LvdposbGuoAE9iVjvQ5ivRcL4e6wvdbnvoFIkfZ9jUZpTcf86MbEmgYmLPvlsAojOsBvqeBjvC70FH2vJYGJF0FwP8tFQdK+9m3TVEoCy0NSI6C9DSwhbUSpUu3Hjz6ASXpQzXRlRpwPQVsu74Gtlzx5BhDkSAdoEPTGCVAWroSqF2lqC7BLijKbdLKxDUWz1MILqldKwRSJ6VIkj6u0kNXKG2KqFA8TEOKLqUKFPhIX6FAWxt0CYX0cVHQqWLEd+EAewpCTZR4QZGZYN/1AEvpEoyifsgf+7ypqsMWmFO1ANyCs02quh5cAADlPr7HPsjPm+AMxZwzAVV3hUF68IgKDzJmi1y4eWBXBW638kBfvHVM3JJGutwRuP5J8dTuLXa/gJ+bN/IulLF0Dcpt9AOq+rZ02T4RMULXCAB7CgJdBBFE+vku++EaB7J+btVfDrgM+AawirGLxc7WIz6e9umu+0AdbbWouxpGfdj+FTuAKp2dvtdFFpGF3Nl9PJQupPPaXP3Y4wEKrejmXkP9wYKoqUF5W33RP4puGK5ECqbXYtxiB/qj6aHd7hYYYg/f99gD3c2MSNnjx+xDt8zYpwM2fPRcvyXhQ3en3HbmA6Vq9kFDI/soA+5k9nAAyJVd19MNE1HQdsgfquCgyJAvFc/c/Tg2SOrYXotit1tEBI6Wjt12dWwXxfxcJc+DJ1qpDUvRAbwFWNrwUOyF3R0za2APVpHifTp6PiNiiGj+Fl20lWiRcQVsPD7f2Qs+bzR4ksdVedva+f6KE5fr6wdqsbxvL5b3j8L3ggP8YLVMKPtAaWLFfaBX3BQGLEKAv6bigopZtttU3CdQkUTFbCFsMlKT6YKI2UJYdLpvSOUAqPdEyW1hluejDy6tfWVlAb9dTgBNWiF2wbSbwa5HkVCW7wmyOPDxzpk5K/kYhwK4N79bP6BE3HtVMD5wiTDH9p0eh0oO3eJQyaFbONhhVg4ggutQmPp+F0YDhd4d3scEERuygy0fO1rKkSiH9JUjZYerHFPl6Cp4rmAVXXwPyxT7Gd1zhpjuMTuY7jUcOd1X7GC6Czg03ecEM12qiO95o/adrvD3sX1tDMPvjt7T4PdHVCEw2sKrNloNhu8HZglHD1GR1SC1G6MVtcj3UPNTWhwm0djR4bTWLoZH48iE76/HjyYm/icl4adWeP/Lz9fjX12o8PbrGGy/jsN2zmLlAR7br2Oy/SiX2Ts7kqaC/xNiNUkPpCB0n7M4VU9ExLPM/e8xpQ31bJOvZpPQCO+HXrQ6hpX80j4Jxw5kdCtm3bRorkO0ZBerIz2Gi2r2Hrs1XRWeFWCw0OM324RBIi5yRcAJg8hjo4fS5LwNKWGpP2sZQKg/IBYuOZ8Suk3a5EmptwX2UyuF/J7OJ+BCAt/K3ir8I1VNITKkrHhohztKk+cL7LUt6PiKt6fItHUo2KAesTerVk7QjBuUNeon2V/wm1019w4vOpxgb7XEGMLeQx6RmzjwlsjeWMU3rlLyqYm9L9uhjqv3pM95JdlKs48+b73UQX/p+XOLuwtyDDgFJQlpT+PfWuOM0gXPEWe2KiVid/iK9hYJO1v7FKZWAo7cEzVjlLvvABXWBjLK4uRezA/+XmVzubKckm4ZztpNybyTfmGSjVzMpcAuIFJW0fJGylrCs4Aj6H+M0hOf3AT6pL90RTzOgkhdwHx2OkkDZZ+8vU1z1OJN4qeKl5Wd+999tBEb7Vm8zlZQnib+P+WzVJkF0WTZVOpqk3j0aNo8zC1cX1aTcYsh1kKgKtLdZL8lUfKFSrLfYyAIXXAS95ho43/M0ss+g8g6YSuGzxHBEJRaMWTavtOJo8gqrBht6D6gsBRDxazZc2DOI7y5n0sE3KELuupqWH+E5Sk1emt9hYhagSOBHGdIdvKcTUgpp3HScjHFhanDgHQ2/B4JazkCCmPLoZFa2HIxsZZ2UyV1cxFUBA7xl0dK46DyvZ+tFMnCfRsTVyDipWuF9WcD01z3s1er9lo50lrnPqwuCF+6ikrFgHIlwZ+MgLW5tlyZAgVXTasSQhbqssg8NTU5IqSAFAkEeEIwT3pKOmHvFvoNSHrL/N/eWEs04udwv8Xj0MP3cjdE/vM9P/w0/FW37gf+zQuUuALxYqNWzLpvi6DHs2BOwVPpMM3ASmLkZctKZahEFnQknCRcNCsXEiMbjYxRyxWBJi7FLFycCjJ1J1I4PTII0QyoNGAomTgU2hEsd5b2dpo+KR1FuPrGoesPgShDPVXuW7N9Szet5iVwXD6aD9Rh53UgK01faRH4StgcBrx6TTQTttGtQR8mU/YEXBcES+9StBLiTWJKzKcMBVz8hRbU9Hc+ESyVEUtB3UQ7SWiDbZwPOXJ6nBB9/cSi9LuVw+Wtva0fQn7+Y+/KlxrXlf7/eYozVJ2UheWZOAsJMUpqGObbZrv7RnGrvCbc2AnDMsAM3Gf/fq3NcjCcw923okzkltTqllqtltySagoseyfP82D6z74I/F5YByZ6iRpRz3VgQpZ/0U154OxRDya1KuQEP2yQ/G/q3GS99Ffpxcj8Umvzpahl0+kQKDPNL+CArgPGnb4F8nINdngeLeHnmGBL0kWclPnH+PL0S/4GMcolwtuRH6U35IiL4pNVVvRFZgKuLHA61HjFK4cF4geNfjU7NM1eqfq5YdGZ+sav253+E8zu07Jhu6eOFuF/sVHHKFyBmiPxTpzZbVW0Tq/iWPRZ9KNrz3HfulZ0fD4Qdptqo3hZOrclvmP8th01PxKanJvNuYLR8c1fmbzYxvc/cx19ga8GVZVnp4TvmkU3vrg6OJwfTY+cAyAYOttVtAalVrU5vYjuCq/o/nqhKgcMPNpSuW4QZNE+Fau7O6MWX9QoGRIMD0zqn9+ujWfp3d0L5FC3LVJupuvJdO4XDbJWQqVkPJUOENpVIOU7yek6Pr9FRDUfAk9LSXMDI288JTRNVQw+YysuCEZaZhK4E+ndIrYYdJ+pxWdl8M9E+DThCmYKYy04pm0J+aotKTVq6xCDxjANyVbCblqv97q27lBdKacOb9W2d7bpkNG+M5Z8MVYsUiViELDl3Stn/9VL91gfIqKY2cM9RrtfyYlEF3CUn0M8M3LzINfmy83mu3KzXpBfcgf5qkaLKNLiSBZzKD7EOGAkzU9Lr3j1lbYOFIF3GIRs9ys/09uTLWVWkax4rMbfG7Gzo+4Di6g2qtql8EqE0RXu+KB+x741VcBfUgGZ8kgRkdJBeZ/ZX0HjPKJW7nXV3twTw6Rf/jHMp84/kf2kerA1ofR7tJ3guYaUyvWv6QyueGu3pjqwmajb/q23mlob6i9kLalbTKKWQRgjKMRoO9fxDmULrvNkdXq5g+043rJpU3kJWIQTpfppP3Qh3t4ui8Yf9A9E8fJssykv4KzbPAnKygUdA0DqCOZInv3XaZkjW/BYLtyBzZvdDsUkBhfVJBClm7KEriCZBvYo9ppu8vZ8CBRSXi1O0TmzWlN37Mb4moY2nceiOt5usK+3CIc8FSFd0p7KU9QSMQilE2n9UWdKzs+8R9DvC+wDIPbRpN6D8tP28rmNt+VTN4nbEredAZAg/Ejqgtwp6+pR+3be5bfIo9tpO/LngJH6soyIesQFhxY8701t2A+RfJGv83OQk4le3UQLoFL+rEqS0catPeMa/p2ba9N51NtLJbZ3d/q1ungjAVHW7WbE5M9iwKtf0T4vqu5UtKjlBwmlmr5X7tyd9pMnSDMzEoCosA4/B3FkhgAyF2hDqxdyFTxFgUGdVH2mZq+GjC+kvfpLOZarMzpkjqLcAHvOYImc30pzgTbm6ovXFrVGz1lRn+K1OM7h85/KPZHa8mqvy59ebS7jtzcpWibPpHnU7a6sO3prAmOtrdQmMJdtJskTDt2SvV0JOJcVS+LarCnKkwvyzxnveqnyMGE8tRByPZH3SyKSPs2OGXmaEICiRvJO067tYGPmezlt3SAUebeWR1ljg1kuq2pBeWd0uf4AFf97l+L+aJte3insoR5tB7wv4HE1YnYkLeo+FRvh+aa6zTTm6GLK15s6gwpdnla5CukuMu1x20GmvXvZYavMGcyVeAz6jFfEVH9WgauKrY6rExEbpWZVlVjpENLarre9jd7ZQnErBea2VtW3aky3rTYTcR2pNhS7PLNIfR0fHTgdHX1O6Rc7Y9STCILasnQfW+c3l784TVfuwJl6Ofnf34qFQsSVSmKuNvHFrekQy/pgw1uj2irP5AVmlZtZ1XZjI01U1GmbMYMK6k52tl4Xr+ZUylBc1KpSrc/wVQ05XaOJyEjgVYu65TdtahbDe7sCqms1oslQ1KTHtrLVrQ8Iy9sIW7QRtmojzCWAJPTJy+GbKvKHxcSVEUQ9ZVnc3dUmgLUqVJs8bVkwxmEcmPlZqoWg0ypeN5oB90L7G9MGC89kzh+K18pG6ig7Faoa+iJazh3yt+YyRinp1NyJTZuLCQkJYqI6Z1rP7qVJypvV0zYSbhXEHAxYhXicQBqidKk0mpshCMQl+Hf/oOiFY7i1HtiQ2G0b+uzbRBpWpjnV74kxbmIz1Ux5aE0lZYOpMAwRFfDDe1syjZkuH52kLj+lCTspzhIll76YsNRvvRMkns1KGgealigKsXs9f705X+XnDS5jEHaRl8X80QptGtc0EIDRGOacnqjqgLTQ0UEIGQqsNl/yt1/Qj9+jZJJeb0dL/Q4EhSeem+1lfn7OG4CEWh2NJ7HFWfY4qoiSoEIvLj8ooPdN4pl+I0TTb2tpNkxj2hF0P42fQuaeeZWIRPGZGD6TBp/OrCFxCVfFbU0V4ifoA+vThEt+p6kkkv6ijtHt/9me/uzFCdSrszSBt6gZ+exlCeT5x1mU6PxFVyXA2j/KoVeJ1vjdrgnZYenurn26b2fUaoGABnt7ypzJuyWQZsZux1QJvncyNEekpDULMhioPiuKPjppq3jI+PrRI7CtLdNiF7XlicGLxRt1Ytp8nLr7LuLj8AGk/wAyaEIc4cnhH48+igqniXYsd1taOsm8+pMI/QvTGYMkbS1u9UDNgRp+D2mjKcH5kviI1vV8dAmCtgDhNqC/BQA1loK1s05BxFhDtVE9vk8sNKiuMuEcoqtNc0guL5696tZpX3Z7/eMXK6ofWqxA76taFitet5loVftiBehoXwEs8IHuNfu2cIwez6cVhyM0Hcdc8lEW1vGX00V8uTlXXBRkEr2VOvwtVgqcaLL+rEZ+kPv47QmNXb5wIcZCRA3dL2r7nUX6TPEYWWKPYfvD1YU0a9wRq8kMJr7lKUTiNxzrBVFr1G8pSg6bjExxOu3m4kmE2rrjnQmy6cpV2pFZ/hfMwMCPWOCfOvnOQMUiMkHdZ/9XL6+I9L69xv/w06v8/HYuf9RyAfuPIfJMQ0TVuDVF9Hu0neBHmiOdLTz/mp9JFG9tR0FDzcsDofGPxnr80Bj0tz0EWo1+dIMbD8mra7jPQ/IjG/E+uYJPQt4fjPkQMYMBoAMeAjwmf02AyJ9zNEaGCcBwGR2Rfz0fIlE44fLevj5HnPTY7SGO9r7zDjaKA1MIFH1gBYYhnwAypNx4xvt8TETwfezAR0DeyhZy7YsOwkZANSHgQHq3UZ7BECCijYoGKqQAI6AYEfvSD5rLCxN7fIIc4RCQEEnGXN5/CPIQ20eCcMQneEMWtakKaahOgJLeKQFl6XNwOSIaEan27XJyXUQyck2dICdIowxISZlCJMVDRaM25KZgPuZ0KRPxjcKAiypvgsTIjnJR14SH6paS7AGO3Egu6yzkROQI6AZcMkEoURbIIQ6QglIhQ7+v/O/pFWCkDREVEglUCWPyHOZjQHvkiQsiyCsPSCh+wMEeNTbV6R4fgz7wTB57+0MO3Mgvq59IwS/e95AEWYmEEAkHeIac4tG0nXAMMFUqoqTLOMpGwSRRyDoCs9RcVAmIpIR98nXHwyEfqD3aZEAkhBwtC4T7JI5IRkn6xBfVHbUkkAGCiiEJA2cDPIibkKsptVDISZjx9MZIRygRC7kEUahrqjGO5ptMEER2FBuSFA64dFjnVBRdNAdM1GIk2mjHMXJB1Il6AgIxWpio2UdwCEpDCDWyUENTLUlHeYSpPvb0VnMgBOeEH6yF44E8lgJ5OIo+odEu7Qv5n9Syen9prdythecWhUlj/iNWLovkea+QFH3TbswL52QPvhQZrxwnjeWrCQFRAVjuX3bHjH9R6l4UEZDMvkRffJ/ldn0/Pc7prPAvQSdkvg4WrIv8MEZzWgl+fekhY1BxlVS9sO4S8Qox6iWo6OIh4A4CZjJ94Qa3j0vgdahitY2b3yuWmp5ruTG6XoTa3YpX6mepfq75mh/yN7S1/CSKxVZlEw5F2CEGt73h7DA6BMNn5uxXZeyHe+9zj4HBuXfdsDVNRpPvW3x8eOKLM5yH6XvxsXfoD9j3w5OuDPYpyHzvj9sRoYyI9HoeMPBUZPiJKEynPemvPndeogKMvvkEafTG9zHQrp8kyVDkFIoDr7BK2crKgBoGGdEw3x6hp+NQkd6BOiJFQWSC4E9k/00QEDNPEyULaOFGrU6rqYZxoWlcamBNEPSe53YpEq5o9diaPRldNE9oiY6WIo5uzFFU1T2359c3WSzu7lbUxWyZ0eRArGyvjUC1wMWA/JousuNr/N9zwgQ/0dIDGd8WAG0XrBqyHOkLE5ZgPJ+nvxfLRvSUPg/Z11R966EuYT9A3r8ROVaL9wbODWn2qrIUxdqr7RCVHcTHKV2zFGWIkeHwBCbLA1obVDVoSNDwbEr/t2llvHqQkFbSsa3+YtmoalVFL3pkWtL5soBBvr0JX/EXuT47VlXWRAin/ueT6SRwmmMlr7T+NbzulE6kJZqEzH3g5jdmsR2V9iIHNBG9BjYGWDxXBVdU8BSiV9lonuKF7PkgRHhGKV+E0+rl5Tk4Uf5trF4hub/X48dTZ5alNI4Y1dd+vBhSQVHXHhHI4i5vdFTe5x1NZk67cgk8yn8kgUj4HAKbWZ9BX/iDHnb/mTp2HswdU8e9Di9RI+q5K9jI8i86XUz7/1hHrCbUz+ShI/T1iAYLpXBp+NtZX1UJtkw4Fd2hpPIz3kcZpzFM1VfnpB5IX9R5bBZzOwDtPWXTh+CEud5nzTNdU1kJNt50VvLGLnmhxkyyCYKgsJ5Eya5l7Dj2/RM/VeHsxC+jUri+Qq/MTjkWmUTIIPKuhg/Mp+eypmDpUmDLVA43UtqT2UyEoyZVC+HQdKISw0ptEiqddCrQv/BXuzlfiBwhz6tqZ54Rc5jxyq7d9ztg4Mxb0FGsPVhWFQKUONldIZmCNjhc1FnbeFxLHjsPmKQNnYOayeFTTKrEbUwO25hUyYnJoctkqfnqTxRbFAuutpgxu81GLbws3OMff3Ncr1ViqpEwuwiuRDmdB+E0rTMXtbVArpKJlFy55OmMvDb16zp1yNOo90LAHorlkUByrBcpT3yBlzpq4kRMHPjQgQ8deN+B9wlOwBAwQtxGU+XFuqdXIq7BZy44UoEzEeN7wZej08UpeUJ2NLQUOqBlXL8tDZhETQGvKuGFB7D+jg4DiF8Q6rSXfdHH4ZCX7mYedwSOuw7BX5tRd07UYTPKPc/2zRbCPzpxV9Ap9duNM/o5FXJkK+S8L9tahj8PKAxp+/Tx7cus/PnytLj8xcaT3HCdWietroQG4KvCl9MsJxl5WPG3VsHhm/+N+lQzbXfogAFRW9K+n8BeTk6e9sCDFUh537XfV22/J8y91BlSYsyT+TuBLjbd+XCanm8uNsXld5Dy/HydX3739uas3JzLAaFjMdAQ9TGu8geYlsA06AHTx/zyIo3lNQU/nCun8jE6PEJX5IAhXOJdE/BBit07CFwT/itB4Absv36lKvBsc+1hFarPmrGhGPWDrRwkvO+CUV+aXb/BWMk/R+/EcCL14Ge00v5MfJa7Q35z/I70EUXvj3V02IsGe7MH8Xujp+Irp3yYZviOdtn2Zas3g9lzdwclHKubj89zCKeSOTaX5zibN3iWNLCe548hfZAwu0pz0XFTxiThP8srWxiXpkrMmlmrq/IXm62ThZGZ4JenMHCQHRDVSXQ5XrqF4+Lz+RYOYAD0SvGaNHMnyH32dN052hxeNsmFx2y/NtygawNv0s4kYmS1d7u9g8Sp9fTl797+7BO0s0pM/lWSv6RWyk3azvOnSAPms9s2Btux6fgHSyZAdHkgjBaOWKyGTUBJ0HpRU9kY9iGMdsTs6CyJsVoyke6akQEDt31Z+p5NKq0Pm6qrBwdlwXRjdFieisS3xYEKkzfFEpWGx5XX4xknselxk5ZFNuFMxOjiEbOAQAK4fvd94PLv6YtmXJ15MuP5g4aGjm7vPvAYoza0ACndZ38B6T77s6Tb1UxKRB7xBpQZL9XF7kkUBAmzraPi9AtJiE6M4IUKXmCi75akrZ5GUSqPUGM8MqJXkPHUQ4Hx3JZA/hXxNAhn2zDZ+miuqcbTa/JWzxBajvHOaI4X7gmRsEwM7fVpEwUYWEB/pNNMapAChBYw0JCRhQwVoK+Wgex85Wdxdgrboe7Q95pxw4DtTGXtiilXo3PESUO5jIx7A0jN5vFxeUIL5lMyUUvSK9V8J8Awq2xU2Kcl04tJGBklqp4QuVORFFJduZrmfjZTdXo497aTBOHJnYCRTeOkThTkGC/RJXPehq8DW7tOOG3FV1Hm3BcZz2dCJwa9eWBeYI8Qo90uma/U7F1auUESXXMBGDrI8d6KfptWlMZUh7BdGq4aSu86XVWy0+wpKn0tSHU/ibW8d1VBH9BOioJut4UmtEzEgkC9N0uwY0jbqfNqZbTRJVN0yZQlWnX5sdsp0xOdIW5LS2o7sX3Wj/Fie22TpPNWkizvwB+lml1o/LqEoLNNDpVnN+hoNmLeY4+W/VRtiPh73aw8E6aBU17KBs/Q0Lxwjdz4lZEmnuuy8B3ENBhfyLpaNCp3gQpbGHYWfuGHLj8LDE/ZXQ5sngvslgx4NbaiDRHVvA4XWCRwWwFFOHWBoJbQZq080iBORlVBrdzLhbeZLpBR2b16oTpzKrW0lZrxwlaqobzXbFpUhdVbsPJS8JHXMpEb3vMgVX2yzpufdAvUWMnrJC7qnFCjDjOam7r9qIHpQuFgti4p3qm+Zv2hkz8hzTAW8JTCbh+zc7RLBkGH8s38Bu9BbEKGh5RUX2ZlK5tZvUa1D3y6alSxGRkcF7YPWfzPwGpyXMjlYInVgoA4JqxUzDNQKqruEzkkZ2pIDkKE3Kx68PWzqWyhjtfAq5ojfUyMawunbWyWuJVljcaIdagQmTb0CHXhl3gzi0d1n+o517SWUgILG+sDAWhTZmFpsvCEFxwtT20sWa6J1obJC6oOO05Ys7zJk7W52q0pl6dUkMXU300MB2ltghoO9A4M0kekWU3NJER8yhPbmjHv76YgP2SRNYD9BHz6Oq0fIkUzPcEynqiOxNhMJGjIbreZP5BQ7sJICYbsvkdCVSfHS9AJbXmttJHpTDUbt4qDnSY1beFSMV0YCYjk1sreTBRoKhWn1bmNztG/KFYtRWNVuV5u6zGuoKUamM30qNQf6yhSUKRXCrtHaUFBXpnuFJMgyIgbqyFfe4WWJDnA02TgZg6YnRHecNpC6r6XjIwxQwDF1sTQF+IF5CLHf4UWSIk1GEC5+TCU71rL5r9C5uOlmNvkfahNFdWfgunPQr386tWSL4WbD4BbYd/7/Fygw/AjcR4U/Frohfk5KmCaRMBuGTji18QlUtdTnmtGKkD3qVIZgCEvdWe5BssPl8BQivpqe62TLVBTKAlNGDHNzsKdZqrOchSZa0t1cUFwfmKMWqiyqTP26RTnJ7ufffuCCvVv2e5SSkydxBcLpRnWvORHENuCsYM1o4K3uW8wFlkMB0Gwjpgbd28Fkco5rzlPIFVQKy1KhfBBveG/7iokUN1u+dLmvtGW/lbmksq7b453djHWtVxp5jPTo5BZBoqsKWsnWPquHy/uhqyZLgHhA55gBd7rBx1KgKl6wvBjgID1RwqIXwsFmL74U4QOMPlrU8S7yfd6YGEmEJmyD5K5BgXJNEi2GL2gzU4umyYbWDAmeWMC2Q3VnGTb0scnUPHg5KB6b/NBDJeomd38J4Va1opUG7yQ/3ORmJUjaaXQjnNa2te3iDv9Xcn0ImIoJKHZPEEhepjWoLbQOxeMJTReSrHJuVZX36lJINpcFCizsms6elEImBtc2U2F21c/9Wa6EhQCTB59CVjnC+l4YDMivZkzxywWncakGRB30qwAzRkyIM0ZMgH6CqCJV4200dNk48REKotqjj6Y0QS2JJ/4QqjEPLeKuNjVoe9jKboHRRCoDe8HdmaJSk0dIS+gKnOaTQJxjxD3wv4AJw7iONk4SbH6vVie/mFVVuvN2Wdcd3v15frm9uuOmVqnTLYelFWO9Qog9lzMcqKsJ8hxkPP0zik4CKhoL/ct9XT5+wPaaCIcs27CMehhkuuk58DASEhSTT3jGUKl/3we7AV283K609tpio0SA7dbKUXRoSXGhxPn2GKLm3gwQrf1TS1884bIyW7ZzG4HmpbFToUiwMish8nEbsxVkyEjKolIkepyO5UlAlolkd3TGmUqpZc8YvOzuiCDq0l2cqqPyGrlXdMFzyfdqLtmYowx/XXbisbvm0sN20b1JntkLbg2kuoV6dhZjKb4J9ajYzs8ddzV4+3Cf7K5hqHVunqRCiykzaA5E62oPTanj/OVl7ApBc68GjNRQ1oYCFKwqMgQaAptQiAYsuiqZZH+pgE9zy3wuWuuKPbqGYusSH7UQs62qlXfWiCCs75e2a5H4ManlkimbllStqmjZy70H/3YDzdHT38RaFsBh/Vff8gk7kyET1+VARA1gNsZgP3maateXhKq8QIXd3LpL6nKXFRwm+395tpmQxo3m6WqpTIJzMDO6yz7VBTwG/ZCJ6sqSQm+zfD4Un/EWpb6j/4CS/1Hf9ZSPwnJJ3EsfcX5mNOGg4HaPcD7A9peMJAO9MOQD+WOgRHSYS9BSFsNxtLFf0wXCPCJ3HUR9kLtN0/hfd4JCZt0sifE9EvbL/CMQjx43xvgwe+YSgV8Avg+PQM8ehMDiOoTMf0xHqILYbn/AXDgUfd8DfAANg7x4H0S4gEMeAYgZhCGeAZ4ECaWBvgd0gMORwM8+N3D+3iAB+HJAA9+QcOwF+LZRx3g6VNF0DPAg3eqFbmtAOn2QjwDPAiPAZvgdx8w8DDqDfDsn/APwngDvfp0/Emv4ENvN8ey5dVa3hHa1gOduYsMvv/YN2bNKwkoN2SJNTW/sZkaCNX8TTkjhz1zc6fS9KcLOGh57O6uTzp5sHdgzFmM/5EzqlpSgZAn9rO3OreBp1DE+FF2by7/L2Cb1X3UjjUpL3lOfef/abuy5tZ1G/zuX9HVY1bUTHT2scKe9a17H7uToo7tKe20Ts5EuXX62wtwgSCactL93htLAkEQokDw+yDbUd+t2KiVqXCHcuffqVyJSa6Zvl2iEdVGukwVRTbWnLeGNudcUO4iaQIDxRCClqrRVsY7jQqPM3+EcZM/sJKNiBq5h38H2LIOvPRiSHt3ZGoGjEjbjKkZYKXN7hDjbrDeaV9tZVUBU2KJ8PhFjB8rJySe4fFsL68QuwCTBII2/XkjNoBelBXMMCSLc4qEFfdNA53F1Y/VBPKSWJiAYnITmri/Qc+flwzaaCRUvNx92oXC5tMJT2Gudb+7xUAYcIZbXKV+3n8NQvI73zA0pxxkucyH3CAl8f0o9OvjjcF3e3993O39eipy8Rfo4tT9z9NXNumgN/irbA5ej8CTxdrJSPot37Y2zhm10lB0JzwrQGU++MK/RQAeHqX38CHsMpzwEG1eF2mxXDIDwMlN54sRmuCL9crwtweW1QIL8L/CfLaCKuyUoVwVD6VOn0QOecMIGVEWNH5tbbx+WasTbUcIf8C6XTgqadQFdY5bhro0KIIC4NTTrQTr8EoJo8Sn9LDpYdIVEeuzmyzabFZaaViZuc22R9b+L2mJ6r+lJapzWmLxf+AlsJ9/T2XOSyA99H7SEisFMD4WuYonaAmKjJOVNN+IBX0BK9R1yBrxBxzollRV9Bv+KfdEMSSfTmHLmWpvgh4svxCZFQwW5bUY4KGWH0fnYZELP12n07KqTJRBSL/I418JkOKts5CSJeLlwDJO3qhZhxopfP7CMPCJ9HRfK7qEklgcI7Z3XsQpEKqjc+21mzziVeHuUPTopGU3CHVlj5MRpHC+vantbHxgu5iiF+ratDFWMOodhmPi6G9TjcfoAJtusR25cxPHjwvVWZyLam1tRjeA0XwgbKaiHBtP27HNXSMX3Tm+wPf3tKtVOoOH0+T6sZadInhF++cVW6RYE1JSI7oJ7vxjPWYAwWGcmLctOAharAzQWHyBENAuYbKZ3Tvn+uNvtdkdZuGjb+buqLu7sFgLaZXB98JwRt/CV8P4XCPuyum3A77fsHIdE2L/b3eb7d3KJ4MPmBTLDdzAzbWGe7QR/7A3QFiFdxKynAEaiPZ+u3M99sDwrmiQr9Dkp5En6FWCXVYuJhQhepy3x/qZvD0tMHvVtPuqurZeajEV8yDY2BOmaC9iKnWlCj2Rcwq2mPHq42P8dJWX2dwcCnAj4hyctJvDGWk7wFVwlBsPGqWm7AeffXWKl9gqE6ybsJY9paPQFqHB8IHF2Cakby9fxE4/BbQ4Hpy4yiyJg1wwHybjOzjZcbvmavB3mvG3ijPmentzjG5b/NsKmzf4ckKm0G9fLgG+EAsIAAU+RdEShGeZfgBHm3yvi5mwf6fpbJ4Q0osptYHm06IYwtqJKXgnrXQqRiUd+YJu5AtWllmjAZHvBODBGQoLZzHf+L3z+ccpFRhRXVIAjfyD9O6n3XvQuWJKwxzowq1/V3fSTokC7BVYfDL+nRDrzCwUqNW7wLWBA9GcjlMFGqkCMNym6jnoo4bNAZz1lPciDQkvM7mqchJ2GqeT/X70pEjDnIGBe0CjHIP6dT6NWDjQIo/Th3KJ+lk7PxPXOmuuh2Lz6+c114dL6DlL5LW8l7Mw+M3xuUq+m1cyPF/Lp5IWGtAvb+6eq2jxeV7TganhlY+oSbK6b0xFsiJhfECW/7xULRwu3pbjOe2o5sZxlaqCKXGpMY0OMYo4ez0/Nlq2n+zBFXo4Pt1DnkeUPXnV6tGHOhJP/BlPJlHsajW/ntYcJFXrhr1+DprhNBHvCAfie3dvZBdeI1vgVWTr6do7vPROxGYNnX+F51+l8y/T6Rd4+gWJ+6jRgXHdY3JHpR+LfN9dGgps2c5Ais833w5zvpIm2/hjmjktRCVxO9kY/8n4cA++ta2wS2XrRkKQa3Wl3GN5BgaoqTQ7yjWWadQjvZdi5xo+TTZrSO9T0WVeTdaf9cozDUIjMJKclSr3+vjcxovPOYrndn97buPcaG0vM5DWXnxUKA2/oARlLiqhjdgFJSRzWVN4Ce+CHs6mGs+nzqk69nu9O9j++ExtqOspwz4e7G8vq5XdjKmLLqn+vZHdH0tUbrnumu9ZEIn3XKzcxK1RJxIu3zrVYLLTrF/hn5fr5tUr+Ptq/fYNHr9ev2k3Cj8RC5wxw18mzHB4/R/emxvUS7lVrm6gri1Bn+1f8Qs3N9OCG7AIrruQ0AVuIlbXoDRSbcM1vCYH3+M//DFcjkU2nYRTUEQn8YqQAwQ32uc9IGQIfR/lPRaMHKKPP6ZSyIc/irBLfYAaNai03r4/KroEaWK9Xf59vToqko/JX9WE9G9bd5Bv4bevH0/UEPgjepGiAhUi4BeDcj7mHiHmtuKIQV3W9dBe+WRwEHkO+BB+cOseRnz8Y9pH9QJH0rQE0bXN9dCK5KpeHka/HSRIDzW4AyscucgajMFi+IM8QMdt8CQ2wK6g1WMqqnhAhoOP3me+WX9MFySzde2zWUp/Gz+UFKs3qdypL2EVcOW29Phqmmo4SzJGwJxOuI4SBZOmdOBAGCOkw2YVn4NgXTykhwL+IAET/gz+pF95GAcWfG5He4Qdc4oG6Q7zftUz6zb0+XRa+YCbGJkeeqTguBFgBte06IVY88ZcVm646CbMr9YxqxwXcN6qPbNq4FbtuVV7GDn1NAhwB9e0B6N4Wy4qBy45CA/+sDTeCdhJUekjemq57OPxnntjQG+sVy4eWum87D4e99zGDdr4GLIvV8Y2aCqETaMamJgmkWGElHQEjoZxSg20FA6R7krNUsDn4u+9OOhZD5NJjsxdeZmm+pkFRtBvIktIu9IqPV+LRTO71SClQUSP1+kpCIM0E2/QtyhLo7TPCcNxAVyTVuk5yM2OdVbdtfW78k7QiyE0SyxW1Wp+DBakgi7DnjqsAizZADOZqetQnRfVRVHNRTWKquno368My1ak4fPZ4JSkuipsrvllLeL49LjtsLPVdTlVqRZnt1d2WaV8o1SHeEtHSI6alCyE0BQ2d+m0395BW2qjoI35o0hQXkvoHgrRc83xUlTZcJU8U0dl0ilTNa0jieXSXv+iFfYncBmhh4iHdyHEI9gK6lwbwWT7Y1ACUoJMoWeWwcAeejD/Yu/du9u4kUTx//tTMNyzGfYKYkTJdjzd7ug4sjLxjmN7LDsze7W6Ps1G87F8iCb1sCPx99l/VSigC+hG8yHLzk7unMxYbDwKhUIBKBSqCu3/WXSnCf3BgEU6pf3jsA+A8z5IVdk/Vzyn4PePBaxIyAslfsVu5rYhnbDOHzOmE/bMF9Tpc2M5BVsHc5JiFN6MYPP2PTLLZjB9Mr3mkJ/yO/cp2FAMYEQHykJgYDyVfU+4DFALrfSVA1Qfm1+P6Qc97jIqXtQbFY/O7ExAvtxJRp5H9VgoxGWV+ALd/8Ol/Xp2x/xVnCvb+TQDfN7PF+n78zR3LP+lGIi+iV10JSZiKq7jKsPBI0JXyUBMEni28ep8KBt4MOiZ32EEKxgWaI/Tbj4uikwgBR9W4TqQMOFP+Oj3wH6S/kIOQLlOii8YlOnh1BAomvreBg6uYUDBkQf3bR4y2LvtQxzEbMXIkrv7/zF1RnJ3H2eMMUb5YaAfors27/q+OXl6fLL76unx68ZwCiETG/pxmQZVKL31K641oMRAhBRQ2FJbCXzFV4DsFfAXdMyM9pVoztNrSLlKDHLQLWVjNtgtIFkOf/AbAj8CfzT/++MemLLJ5Mrij53+TvO/L/f29jrNHanfBJ4klSc4Wi4hwsJnYaIbhF3ALVKmDZw80jGMokUjHOp24+0gV78MkSaXCyAcBuVvXEAWwdSZRDUsrYk0YcrZjZdwEcE1ClogAqe7pRHtoL+VrLwjjPExDC2B+EkGKSWY12Y5JrrulEHg1DDohTsS55XMV88r7dsnYF7551QPuOIq6bvzqFeZR1frp83EmTaD1XOBmR7H2QztxMP2tHJID+MPafxxBCcVvp/glgxSQzGukBQT9tD/q8Mrz1SOroqlcIInrOSK9rMn+/9x5YzUTrCvMa7ga7/ArS78UJxAtqO3v834ANJxD9roqal4VbyUaqZiL7nyP3+aSGPIuIdzVFqLcEeUsOwgHzoldtwSJNAQL7o5AjeACg/3gQH7BQ9PkgxSBrtXZf6f+Pl/YvH/wMFrj1svYNMcAOZI1cpDunu3mNLhT26TniFJGiIz8ReQUVsPJGlSqnv1xGCj4mUjQla8uStULAy+7fxf6M0t/Gj1DlGz/yBCM53et0lfgC67h9wBnNKBVp3aKT//XrdSzVIph7hoFyKYTZB0519BTreWiUngYKFYfcal7C3FYqoEcnHwBxSMVd9WhzvFH7Rxq5+4XH79EKgU2lIz57V6c3DRHE4b48O8yI6k+WnHKMVhEj0TcR5mtBo3MVLm49NW396WwrhpnV3fwkqBjQQ9tbX12uU84vtPGBauCSKWeinqLWgFEDGsg89O2+lU/q9J8UBRLM9v+mWD5pbBUTFMv2Idzb5JOZEcXbltU+mnp6OdnX9/fAZkXhpLp0+3t0Wru399Aipq3yuw1mAw3ZaliK4ZGltZ4zOyhw5sf+lh5iu0w8v1dQL5bWN3Ru3eOawtpIugFyglT75xKCHMElwEzsFCgUTrK5yt5rhB/cV+IKQZkgPfPgqXkwoRJwURR8mEHRagNHp9AyvmF+4LioP8YzQSyFovzlMZfVqCWD+xyTpFei6f2Y9fP7P8FvDOhDr0rOhJgqjSC5mtp1w2T55Viq56RFJfy1wlpO/xLs7USrG6mHGimoYY4lmSt/XsEZ/wt+4ubGB7eDA62PuPT989Fk+LYifZfDgDu6GmWui/Q5KbLFAXNHFId/Eh0melt45hegwnMIJH53PY+N1NB4enixfZz5Iu3inh66v4rxO2l2/CaLgxATWXUCErnBIkaLIzy7ii59iGY76Y4QVUZo/jQWdXqbRgIrF5VyuE0WWrxqBAxd6aOntognm4/33Ueah+dR5H+5TWeRjt67T96IDS/hwdUNLj6AGlfB89pB+Pokf042H0mH48iDoawEG0r95i7hKDm3VLf5q/uPWJXlJRpMHYnT7C12H0/+HRlTMx0USke9NJ4QJysEf8wRt3JZ5r3C+eKHSWIeeYgWsziynMlFIdJKTApwz1Gyc35j0Q2U7H/fM5hOOfAHu9fvP8l+PnL4+aniOK8sdObqbpJI9ygAO2PzNsaJEUvwq4/YTe47y9NadNaHZt8Na+81BjKzUyqghKTySgwYMKHdO1ZT18AxhnAvciQYNNRLgQRRSZCnzRCNUrHqqxbWiKI/8VRIoazR0NM17+SzDc/gXXoTUa9BmXsl3BMFgrGVKtP6bGVHVtvWCIq48tIX5twVByxPOa11FtHapXCZEazRuYKHX0oS1PAj0xtXxga9nUcf71X49O/q3TuOq0H1oHOWH4haNKkrkkwhZ5zE8y7YXWR08tjrsHu6aWtjFD5WYH/0CvE/UNVrqgsS24lIzepTJ6t8EtC7t+cvO4sc47wqeJk6GwYfWSib3A9UNBrcMsiEpoj5b+Ti0s0/HcK49n1tBk1aGpe9lHr/OpQb6Fwjx/GdN8VGiBEI6/Rt9+28E/9F7o/jf4C7MSleUuaYHZdNzjO7+e0uiiOO8qn2IYHTNko5C0pBkMZ67CieZKSZ8bjyMb160aWRr1aIebAfCdYnuCvqtGgEPcZlAWT9tARhl34d/REmK1FdD210DbS9bDqvYMKAwJmcXTW/bWyCDMo5VziLQWgx6sE5DaRou6hftWOnaiy5IxSNNQLMlwwHBlUnh/MPkjqBLgd4zQPihoo/IZCIFqOcwrHWGRicisSqNaTD4kmQlCMeNLbWwbSG0i1M4QZURTVRgvidgzNn3oK7MJNDiAmnnIgHTOIZKGnlYDSoURAfiwHYAPBMAmTBgh4I4PGQGlOr5GBBQeDBOsV5gHtrBwKAgtyF3XE0SGe4PqZazngMN2nEUFYeP3orYvQQuJbds0tRQ2CAqUuovkBsb8CgYb3qCLnrZB5Y7n59dFGuIhAIAYYx+RAGKMwBSNQvMbe4p5pWbCUMwuu7ArusApiWGHSyEV32qcwhD2TJ/wnZH5hshAImNhiY6DNyxWklyd+aVxoeXV6EafGqGg/gUhDfi0nJVOkvbhUWXyJ8ZNa6KIjloSxHFCD+hn6g8spaWDID4xlboH+Obj5pMErSJUyIUm3pPwXqM3DTjOvz03+9ByzXEu+ArnOa/k3A9pM6sc49Q44fEuXUw7MV6kDhP1Lw4ifSOHJF3+txjep1RSTDwnwZk+RzWZaZ9Pe+dNcZH2j8bpAk5IbfW3/e7l81+PQVv9QiCukPwWpbaT47+9O355dCwy4Ap43AxvVyIw0LzCQ3R06gVunhbfuJHnL98e/+X4jdtGR2TpDMYNwPMk/FVDXgp/y1zyqWHvlVgE2/e1APxcggg77A3zOc+ljbv86vmzDbr7aiiby7Oazm7e1tHb47cnb988f/mXDdpUDV4btgFg3Or9co0L+2syjduwOuZcLpoiuPeWfyHQdS3T8n8MR+MpsNIX6Plrp4FaNOjnl8SDfm2AyCTvfJn2EfCqZvd5/O+53f26dnNNji/R42MDe13j+1+w8dqeZ+d5rzfMhl+G244YulrMfrMXMyNe3fe2wLB5Sbm/vhnI3gVFZ/KY3n+7PHPPUPtVyCPtosSveI7DZ6QMsU8ulVKSsLsnscNg9hSEpKi58LXAw1KLRduzhf/TSQk8Niwk1Pe4TKqNMfjxuV9y4O5u3mibmfUeZAk6qaTjClsAW3IryzMkzVHVKl9pAnlIGnA4edoGW6FF2E3ox6mVfRYHSn1CCo2usVl6Nx1Nz6+nxlDJmJkV1VBD2GUoiQVRmBCqPWzs7fmzHAy4HbufbtIzZkpVCpWJA0Q41Y+TyzvUk201nvR49PrqyJfIi+HWNV++e/ECqzabUDddi6kjvGK91GciBbSysZClbz4rQiD5KqGX4nXllWO0VeP4oToUSNbORQCKSwqXD+fX21v494OnnBSqGPx4DQZf+CeBfzAfPiqKk1CV/BuV/JtV8oO35AfQIUBZ+pFkjl4BweOgnDekugLst/TxuIt9fXv+c/6xVVEGe5SxIV6zm7AprncQ9gw6LlFjoz50ZAKDIobyZ72MtImHpUNIoHr6yJsasoQW/V4LTNBWYKkhh13ibwIS0Ie853iGxGEPmCqVBBE5zHYXYryIeiG3beeECMCOhJIEbpeY3m6XljHpcXJSdTJbORcXPTFZfUnxDWqvQWH9zR7+BTe1BHW2GI0805DwlQP/BYjo2Qp5pADxAbI+jj6NrExeK0h56Gpaci9QGojJroM1KXm/20d3mkkc2pcC4Eg4sS8GqioaGfJdAfNhQT+Zu/RzbXpGnnsE/xUPXgJoJXSWuGrodealmQaRBAaYyAr70mQksoKy/lsLh9zkz5aWZpHGrA4vFyFo7jWRoTRkHGvIzw+jZLTL9EqdcRvF4cQdt1E8WTVuaTFuikfzQ9maWOOn0IsmnhElpPBIlA7nfymuu08uILWy+nouUpXmD2i3yNUDv6KzRysNaCX3Hjx2TA16FZMAka83Cejdg0mArDVyKBsLyDC1dbJSLJAQ0Z5AdXWUCkA/ygX2NQI1Lpqhfi/yiPhNGXWIWYR/xQf950esh68Nixn93G3hF5T7cKJBg4seFUYtsvq1RP0yv5rcxva0Ub7XWAEq1poqOO/8a232RT5bP+JdGO8CEuqIYUxtySxhwoVaZLLoEGeOcYsZT4rqWGvkInpskydytA3U8WkT0rFj3B7Q5YLD8uhJ17kWU+MU3uRJUX52qC+hIn2zEOuXZNBfnUrQEOAtBIyBxj4H2qP+W6jEwsJpAHsrpbCVU9+xcsIyYkzVTG3X2onS1J5UtngSSJidnQKnMOo4KGJV17YO03RushdRftlCcdqq1AvDQ6uZqILm5FQam8Vo30WBm8N0rLjFrdVBtBcd2PBw4WCIwh02Ao8DR79EUFwQzr79li8LMfKKHnuiuBp+feveYcY49F7rIQpYCaEKfZklijZDUcBGUjCse7xoc9o4sNrYS9bfvxVVI75TLO7TdFYCw/jAgrvZBV1iLuicNqqgw+ghw0bjsPu5tMuLS7sgt27t8vu5tUNhig1/RzuwIPTiXpIbX7qCuxBns2Sq1ZU3SmcFo70Rua2wn9F70mHVAEy9mpKKNDE+Pnxj6O6q0im174PO8aUZug9cFwOwdUWX26SKtrkatJg5ZRSaVI3ROPCgATUZEW5y5U0ot4KfTsN4QxqoK1J2ESIpI1MsSYJFyJmIehcyc70fhzqy9Hr5hgaPTo3FqXLdFtka43I9VtwR4xeOPrIJcNsbS8ORVHnQ4ho2g7+ZRvCFQgXJmZF7NvEJXfIQBZqLcxV39ShdoLtUQQ4KFqC9oNA4qrP7a+f9w6bqZjUZa4QyuSHXrqgcxZytJuF73zmdL0kg0VCVJ42CBvIV+9asgJ8V0LV7atkxtZWJIBU9u6VdFG5Pm2+e/r0pmi9hFYQ/qLloqv3jrI2BgT6+Qh2Bt02WNSyYHvo6B4A/vZsuLmdoJZnLRs62MotskE9yELH+tCN3/tRs/4k8wqhRDDIivmFLZuf4aTKXAlavYe+TS/XMN+TZYZZkdUNO4WKQ6icwEOUx96RjnTBLbjzNhzcYRqlLCBaaMBTllH6GhUmEQcocCC5EPyyi0uBgGWAHHCH9G4dpg9YDbN5pqwvAu4lzCtVYgvbJsgQloIqQfXdTQz7Sxfo8X3n7STxbUuWgCy2OxERoR++5mb2ZkFEPRP8c5P6+kK+jkZB/iyYCdRnRQGiEIxfaXcfZM7XTEmVSMQeyIGV41vsYgFxWI1kzlzN3LnOt9XMZy7hzef1UDrxzOQupzbVzectJm9GkZdahJjTtYHJi9JTIExIMo0dVR462oa47dor8vFMhOX2TsRt2i9XqaCmypFOdSF1rInVpIrk1GVWLNARMRwPgtWnuTo2aZUoCJTJr2sxx2lzP05k7bzxjsp2iOzhdU55vxGBkIGVItjmknN9zNM5iSx37xjp16zqAriGQVGw6uR0Sjr79LBRbq9uNwjx12j1TgghL2T/Bso13L5VbFjRFE+oVjl5bqRBIGpopYQaFLV7zvWq0zGoEld8IL0Z4SpZyYF4rmGVl31E6hRCrDYApGxoUajHajacnL9udBonNDXmeLxpYDq6YLlJUQUwb7oV1M0TNf45AF4kUGfm00Bot5tDFldjzxW2hFozTtVVc4w2uma+vSb+qVUdrq5KlBNeYbFZjn2sM1tYweFnNzDeuZLWUra3ElgBMBF6DyjtzizQzElW2gn6nIuCP3MoYWb8n1u+B9Xtu/c7wd2navD1Xk8ZNQr67xzXvKy55LqgBnoTvUim/SyV5l0qz1ZUCf60Pd8Lv9Z1q/e0utVAYLNZotYZstETjkuqsqJe0ot7gfbJElng1xFsu2+6AgnqAgOXbqlatxQSElmJziQ4bIF28ACi1xuJR3L7MX/pX/t8Iz/Wtbb7wU4u+db92pS9Z6KxfpVzbmpUrFJXkBcq3rjA8XlY4xWefcf+Lyx9FCGKjlwBqnTqUtNkDCHfGE81X4qvQ+J5W3bMi/Mi/vEyDTd1M5wt+rxw/Yidry8gjWOWP6V0KHWsK41qq+abR/g6dHRrkVAp/cKLDHzzYYyq5RhtP04Z2Qm0vZmO4J2s2muFXdj0NrDtEEzTKBHHqhj67pFo3EBnSUdnvBpJrNxAxSMqOIIP2rAvZ/G9x641B7pCAoq8NMNmgoNZtIPcb3uWbGzrWttJmZQh7Ytxvy34Ty83bWm9iyX1QNpYiWNEy3JlB3kU+X3xuN11rRsbhNbawYFPPtbTPJVw9pRujs4mbiAsZUekVDkY/Hp/sF5RZ3Ndg+6HjtcizHHuNlPkJpunXbg8nW1ME98BlI9kj9vI3TZz1JenJjbQX6fjiPhkGO3eCMNf0rj280Jdf+DrJpiiwFON01Wn9uQsY7YFrceG5dqL0tyvRCLYn+rr2kKfua+Filtqk4eHVfS8Tz680rZ+aBQL39d3O/utu/vp+OdoP/v55eUGMHNQ0yDy8edfWOWAwSKRmPDAj5y74FQM6Yw4nFRHUi+j88/b2MWRkOB0S/ddY0fH+WbJkS/MFvFvWLLxU2YKYTea4hVD0DWQxSnJXqdQPxZWJnWA1UtzDYFvNENqU8NctQ8L8R/EsXlwPL7JBy8nLUjhPGEyjj8kVvMIUy2R6qtN2j348ap5hEKo2JOgDEh8qj4azQT6nGAcxw/rzfjO6SvYfxMFHhqfS7wQPnoZDeAf7MYOj5K3BIYGon48RThs+AYQCINcBkHkvBcuciJQmvZLSRDMZa8xtNQ2vHa6fQ8/PPKIXLylqHl3ZPQSpFZbl/Rbec/bFFR64/PyE750kz1qf4I8WtzP8qSXuvLiZwEQQsIeLgVKr99vnlxdgwmrJ4Wh2Yw7E1fmYew7dK4oHuaOqyFlVMaUOqsXWVVHcX+vbF1+D61+f/fTlkPXfKa1vwlFPjGzsUN8ivgJ95MY0Cfy9zBBV1KkUN6wHngUNVxZBrhpaS4hNah0hEOpTok58HHQEz8b7qHrCZ5M7agKJbGWhfSrUX7kswCwTPMuEb5YJnmXCO8tEL/kajHvahL7+Hah38vPTp1N5sItKtznYGObPjk9oEf2K/BzcB0PTLfzXWIuNMmdLmvTE1rMcVaMosMh8tcDCz5hTeBe8jhgZPX9u6/n7oidGRs8vfXp+czpdddc7JIV/2mC7jZpjNBJSGt3/SMh4lOR8EdJrO9qBMA5GxTS80JNqBANRPr+jIaDfdafnntuttxl6+NtMPmV3lxfX5iM9Edm4QrKc6PTp7fnrfOKl/I0SSZsw3G/+6/Xb42cNsLj/9enb48Zfj/+rKbrn8lPEC4Hj3MHWOPnEmH1IcQMR0Mag8oqyZVhBhk0GXHQw7gvBMQYyoX7wuQYxZTyLmJuLLG2SAwe9sVSDrJ+t8/NFAynYeH38S4z/NAZ5CmPbQHjIIzVtoiFP1qayyPVJQCjE+vYpRpVfiqrHDLO//Zbh4NLPOaqW6wB0N7yHCy5mhdFiBknbOID2OLhmNXVnB5x/6OXVT7NPYWEhN6ga5rQGlTtttV+kSc1xRbck6rnURH1DCXG0gbAvkyZajxkhP+6jbF13TkGnqdG2hwBuQwv+cdCHvfseG8GTgWkEfpuOHOzfUxskf2ALuE8ePzs+oCZWduMxtSA3a8FqwMB+/Nmg3aNKWp7lvEPCZmTPk7hx6bfNK7hImdQyU5Gdnkhr9s40Xmakc4egrvl0sRgrhWCuXWhF0NPB/Ft74nEo+niwGeGRJdNyVQ9/unJVzdTBgnyiMcsz9s9ZmM1aEt3o2DlR80FTlNby5lLIfITTLnIczlhfHVVdhHuha1+4pE0gY6Fv9RaQ8tbvXW78O/+2qz8Yp9EaW5eOFPPmsRBRs2VsvlFgpbqds9F0PyGMaAUnZLlA2luKFJJsMep2Ec6xtj9eKKGmHvHqgmlmZoQz051+z/L6me0uGREuGVvUdtbmCNdmXrbWVuZFl1vepjIvphEupttUfnO0v/tgz9R9CFV998ftebZfAw14/MFeuKwAffTAAA0e3wnqowceqC6F7wIWIBBcd9n1zxQ9u7dfcpk9y0uvrX/0lBKSVElXSdUxmYvzwob6oxUL9lV5vR7Bet3nx9GuLAncL6/joki21yyehzIZVZZJ9ylSSToBmQQEIpZJzQqSmAXrsOYg1WI5T4YiCyP7OyYXM+2qM/AY7Lake2zwqxFKIiL5J2hXfDGIa2MdFtbj/bDve0WNXBv67iNEnyBBhYfV31d+5YiY+tM5yCt6c5FJPP4mV2/1hB67cg/gEaApurvD7XvnUSu1HbrxMWgrD6Zxmkx1RY37hyQrEsTTGnyeAmeMx6ivwMSWFPhaNMXg//Qf7Jf/4TtIlzUwGPWZwlkWPvtZOwVU//0DIOvCSxFetiG8rIA3JXgpdj6RRABjsYbwuIH8u3moHwztxPJJksUSIN3MapqccVSBp+2u1n3YqVNOZfR6Cj2jmLL0UjNHwzMrmEiPzOXajn9SkC+Ljs+o4/OQAPxn4g7NjktZ8WJFA2To85/xCOmBwP7uL9yacidgGRHBr8nDTkfjeFlwFj17Dsy6uxv+Cm+RPxa/7kA2ohvu/J3+ir+jqSByrfiVXnh8YY3c38PlNHkRX1lJs3B51b6Yw7xWrwFyY3mxHlwt45I+Iyn7j2l5I9XSBRmgWErwSIMqwfnpfK6yNZjYqryBci8qF78uij/YAxd63AqpYH3r6BWzDzgYDNzNrrtatwT1Gvi8DUWxbjcsFyBjw9pF7JIU/hZZrwBd8ENi4jTF2r6KYFX/RDdeLuMa2pbW7MILdBmnHuUa3cWYV6VHXhtaUPpBWF+52wXyy13v5s5b7+co3eKRUbqlWq0yipeprXvrt8lmgmK9wPJecB5faeiam6sJnXFEsV8W9h7FE35mfEd6fEf+8SUUYIRGcQlvaLqKt3tBCbEnOIvvGinLzUGdgS9H5guW1p08fUl4d+r4Hd3W0cXpobD7JOxuiAJz/sQfSMgM1nhtTKIfR/LJZFimZPIRiit6qxQ2cmule/LkIBRTc2TSlEvPXM0SydPT7U4s3D2su/GBJbA1QabyVgcWl3rctNy4tq73WKyutkzLl7lSgDwtpihxKyZ/fqWk6ZSl6X6xsYyW8Yol2btwqVuBvnfheopLF98K/K4rF18X9IXUz1b4Tw5oKRGKXk0uW32EIuglPcO9PZd7RzFvwFvuoSPkjQx0ACkNNA2SGedpnxljs612lDwkcF79zvozcizN5aPyyuVDifc46h9nZKHGv3X2N9mgJS1UeKIc1d6eStEXHXXpFMuVhfahEJtxp62RkKgAqzl6lqLCCXoopOZVkuIMlYc5naEm8iEfoTCTgzE07ffETzOMMbQjwzMxgAVMzJOOfj58LgY7kBL2KTwiluufznc7ZztYvOhHv/0/58NpC6DyQbm3vY/Av16i6vI7VPgRO1nbv0HV/aO+QNXNvT4C+YI9BaT6mEjLWyBH1wDahmxngXmmPhfp13ccMA78xozfPJD/PX7ZvxWv6O8k0D/sRFU/kXHX2FAegZ8aIFGy48/8NobZxuaTLuS2/o21N2tljTlqZsFbCk+DuoCnsaNXYDfxj7fvT14fHz3/6fkRtbm3cTBgAxmtJ2U74zY5XjUF4s0rbhNfjta+JhA3Jnpw/1Rf3/Sxx2Xj63Xc03o73RqPNVbRBeg7U4T1yytxKvtwvC5qLc9WN52XEpkZ1s8K7moZiItQORtT9RTJ4f5rfD4jGxSeJAZjO/d+mcOF3TaPdmzaxjpL6it+BMTX3Js8G86GegwWW/Ts7UrvnbkLdnlmhIg8BGLzWPuJ7brxBF9iKn5hapc7jLFuanp7gln3zVcM+CswldvWM6WQLtaNz+KpwGEqWYa8FF0PAkf5HH3TUMO72GJnrd9KbXjL1Q2+ya/OsxQB4fPWmzffWdH8fOxvVv2cbz9v2a/DAsDt+/lo/gXEAQbcvtqAQYP1HLoUVdDDxeIyn8PR/QSOoun4JYVS/GI98TZHqZ/dqssYGubGfW4vrI97WwoIKO/uDh48Y+9Hqgq8ZOeWvpQEVe5HfV+3lpd8LTrrHUtQ9hz10zu9vBjApquWIvn0Ag7F3Utcte7zfBE161qpp8q9SNiBi5u7jqX4c/UAsdChcNoYgQ1c5BgFb8uX088dmM5GA1PfDrokkpzrSGYVYYTFwftf7hk2r/jbiyTBxjIJt+dZEu+/b/VtfYXVfw0GX2npd5FA33Ge+Pe/CdS3+fUP1GsQubddof5Q7TbPix3o6u91pcun5n2p/x0K8eCfRyPOClDWixdJsafYlmF0uOIfVFFuutcUwalRmDdFk5gEfpC6HH+Q6vvsyyu84Wqq30vUv2q8W+on/r+DqfwHc0N9geUxUb0xN2wRc6OQ/FDLoNYc0Hqb6LvUsSlE58e9uP9kGveNSVavzn5LW/wd7OOFtQnzg7+04Vm203MeHhtYRlWmVUhfDti6asDWVfxIysAJcX7XNST4f/dWDXmJlw/8it3MLRcNrPNPsl4E2y4Y2LWm8CwVv+cKUVkg1syBf10sB5454EwBdwbcYQL8MfdL6Fgt9yPjfQ3uh/1wtlgk6t/aLdD/7EnQSpObiYyKHHCMEoC3ldA5E2hRRNudlb5/tjSPK6TtiRQS//R7YpBkrtX9FDIQApmbeMLOT2EuTL3mStOQmugrRwBGQz3lFfYBMKeRGwSb6E8hn43qPS+Poblfg/KVHdZilmcYb02iL5X+yBrYgMrug43NFE1IuQlAnFuA737oNPAXrEEAqBDHhJ2kYFtlUtGfoSjabvLjle5Lc5pfPc+QjGgxmInrZLTbEb9Z8so1vFoI8877tGkcQFd+ezLY6e/su5j/wq8EXpyfN8bn0z78MLaZBsWj+Mg8VTY9LL1x1w+jwuo+rjXcd/wX0FfGMdu/dL6O2NsRf/mM9ePLJHM7ui0Cv+32dwe7+1bDrY6LBXX9dWI3LD4mv0G1jniWyMKMq3UpPoZAoWZTrZQzWCVnTz7GMxATj3YSemRROdQcaceQ1mvbR2QW/t9n7ncYXyePHu4/3vvhh8f/8dvuNRrjA3wfpCO75l747f93He4caUsr7FCgl76jncsdX/3O48fel116htWm8RRZLbafy5ziA5m9pGfa2R2R+5KPwZ5P8ew7XOAFsWUgiUz2+uSkUaj6GgqHIV330ORD5NDZ0u4ioFJ98fJc8nuXPPPyqcT3mPc+/nhk+HiWjNToXTLue2Lm9GUmBprneQhGu1McAkQJ3YBalyWiH5VQwvf7Gt380/lU2YAvIJiVwui3fH7eSBcN8wCoQes/bWbqiRmymWamKT4qCA42U2Cmj35mcrCZhv/3P91v4IGP3nofy6xzFO58tFhnpIjV3923EBkpRDQdHADlh0jxjcHJOTxjfQ49vVh4+69HuQxqFNazkMs0AkZ3rwNr7HyUz1UTPTDWRrijpOjKbv/O61LqfI02WJdS77rET0fj3rxcfhVtT/DHsn9cLFhKhY/YydpSSsUqf1CtzmJRr88h6eJrntf4KyPGrHuK6GYxAH56ibrX7pINkI1Xvxgne5aZ8hi8L9PiPoZHehz2EjvndHwmutqPn/6yL6xMelG3jdpezMO/mIc/TJ5BCQvwB5ays1pQ2LI0Lzos+W2ErV/SF3mcOh0pCEI6qJS73MdnZNPT/lkcEPPn9LyZGCQa9mvQQL99+uOLY9JFx02V/1YrsVHAxl4MqCJnAIDEgHj39qfHUKZ4+IUE03cXvce4WIdxvlEX336taP8U0WDj+P4DrD6iGFqZ/eQ/rJ1mxeBxzZ0Xn4XnXeebboJPO8fetdawXMvlS5RUZspF4lAzI32dUvZZHTtixeASwTm1Lk+tImdn5F7ux4doBdnuZGCEQirCCGH2GR+zOJxKs7gjbWAN96yFDhMWSyddkfop5Pa0ghR1lqfjpcFI9bGY5RPYokBgwEvMN7AWwoaM9Wh0j/g2JgEe67qMn1TYkAogFgx0EYY3Oh09iqwno8GP2S7HnCHDrs1ds7ZlC3Vsyuv4LYOWDeNUwhCGy1oHDw03rB0OzN5gPJbM5gPaDs0e7R2pVA9O2h5K+pe5Bt/lclgSs8/q+RCzkQsZZokLsQDDYh4k7yDT5YKOjefPKv2NJdO0cAuVcYmu3zBOmqzGJUchDwL9OzxoIO6Eh5F8YOzVHYE6gg8v0vGJkVPxteHbBFwBhUzgyVeohlw5u5RDddyh7EcYw/ER5tJtp3Jswp2Wsg/2IfshZqNXkpsfKPCPoMADXf9pf57nXBkbPtBZaGCHmFEONrqPOdmbF5yKbXUwNdftvJqOP+leQNaeQiN3svpWB6X3wCHDGI8N/UPpP8jkoe+IigoGrIZErK2I+NBc3OJdFlz2pRVas5suhhmtDekQBBxrhBn6tjs5EPYpcDPVt6f/Boi+evXi+OlLRNPXa/TQD0P07oaDOWjGGHOlNNu+0TXveKXtSkPOFhvyM5Awy/5anSa4RqoZfXdqysTplEjDb/awgdMcHJQJ+ORQcl+3lRwmAMjtVKSe/sw5sHS7CcETP6MJRy5xqDZd4NTEahbRaFkBLhqjNQIvJAFONJGiLQpoTuwVBFPzSToc2+sGJsKxckEznFcLSJ7nCoa0VwoEvBgfPbXXCAMWU3mNILiYxouDqJv/Yv1EFneeyEzIBb1T9XSsJAQm5u2tNvSxc5g3786WRipPCe6iJJ5zBsrp0kjauJ18j06ZWhIEJpspL06Z2MHUMMzO89ctlSsCcwgqBx/jja85nDVpw2e/Y+Xq3Hj++uoBqrzh76NGKiWM/AIjJjnbopAxLYmPLdQApRxZ+NBiZOunyoO5YiXBZ7x+AfJY6FGTNKS0OOvxxCWFn0opxg6wy5QkpbCkn4U27cRTs4U85gOZSPN2GjPhtk+dSmdy10s7jsDmkV5qBLagPFRGNGHBTWuASk7dk9PiMd+TE3C1poMpCK5FcKNue5AuBmzb9QplumzTUdv7Wmc7D5qf9ZAbno2YBnivdVcSdL4cCQKXBlU0v+qrwozCfQ9FaTD4ym+LYdj/7AdL7YadDiF6d3l+zw4OxPU3IU1AtLHOZX1WK206K89C81KGR2tWKFV9Gic+0abWMdacd1I4lop+oXAa2dqiGi3TqKxlQk19Wc3U96iZ+vp+eKDeMy+f4l0llpvH2qmvr3O6D6VYMBID0V+jnaJ7ZO0pPis/+CYm+uAsLjF202X76GUyAUX8ZHI+RbEEUvgjaR69bGIZLIKhb+afdBn+wkJY5gWUGZ9nKbjEm0L8iaVeYKmTt1BscQHdezV/PT+/Gk6znEr7UpPmyVus9QoqwR1EOh3+hodkg6ibhMVfqdLvSsXT8bvp8IIq+TOw6juse5xMSLJ9SiIRJNmfSfOYnqy5Jori+4r8Umdh9C9+K9zrWa1jGQv3/MbCvc3Ns13Q7bc/ntxnS45Z9EV34cDeFAuPI0Lvzj4yW7dqlvENabHeJh9lSePticbh6zFh14DPRyNw8HAc7jZCxWifPps1Nh0HbpKFgg0bXxOEANsAQ/xCocbvkm2KEJserMRopd+qgwI/pLgBHnTs3HIg6r20GKXnBHgTHNQZEFbmr8UO3GIbzjE/5iBQ5I3W5UUWbogBCgRHb5//UkKg6t3Lc1U32MGKwwn7j22LJZ0fx2C4ITfH9i/HL4/fPH3x/P8cP7sT1vt/4VY19sF26D/tAYN/JRofMI3vgOTvROIHZRJvuKqTtuBe91ha1DXgpbjeeBUB8QXus54/a4pgw022cy+brNt6eyg3Jgcr6lYt8M9t+HK7kWGabEiS/XshCbf+JWjC/OEQZYM1gW8ONybIwVpePWagNrVqxsnjRnz/+059Y19AAPmdhQ+f4BGsosWvSK775kcDXDX/oznxwIkIDY/ub4AZqNIxMQ9tfK7YHnbb8yD3+i6Z5Jo+8ZjeGYcNWTnYlJexQWRhfsSYkZmkixFskdvTu7Oe3gz+65N8ezTueQHRTfLSsSU2/Hx3PQNsP8W2x+DLkOVnZkkPU7I2dvPtfT0TMFTr5+bMt9adn2FWe4S352OIWDzMx3LzHXpNnxiu+YsS4j11x0Ck8TmqqrrYzuqepeTFvF79xI2im/49N1zTyqbY3L8yqqahQkEl1mDEx5jgaxDKf7bxY8b3DveiOVxPNI7mwuN5dxy3pN/2LbYR6mesuEuxRVsKu82YxB9pjpfx2ja/5vmAW/0KB4XF3HNO2Bydzz8qMAJ8UtgQi43Fi/WnBQcPxAAcad48e8nT7ulC+Rg4fitsV42mCUKKXIyNbQ1xpWNYUxiDoVWN6/0hy8VH4Rij/+cJ5aBDiBiTrXCPn9bIdebeGf0IxZh+JCano3Mog+8x7QIIlYCTQRpcTI7JFHZySsnYtm3PPHbsmSnvLAyF8o0wjkZUNRScoJEMhb4cH/ONINL76M3zeno7VuxIbY8hO18BB2jQLhxayQqtZCIrVAKg4yfS9tDgN2T6RP8cfhCR5emYKpokJi9mYXHMsQnbN4Tta8L2HcL2HcJSnraG79dbioc3fU5bJKdl7upXucuusMq8u3gzrV/wYRguu1SlX4xfd0nOp870sJ5aXpq3X0p2PYU3UpxB76EgHvaiG9tEI5qoB9SW6PxdyYG0jqivsxSB5SG+v7cM48x5DajHj2p0xY8iw9eAVjyHxKizayi9t0DvH5kXfESXzUKytj7AYgfV74T+qJtuWbVJsZm2qByGNkQ+nSFQpEKi/iWQ+GsFRK4cUllCin8ylHXI8XGoiiMTXuHIn06e49PpPMvn8KPzcDY/k1L/ePbR8Zu3KHvBm4JoIB+k5nXUfzzc+3OjlFtkvn3z7gRfI/TmE2OsenHbQnj986kOiqJRQYxeTvWihDaQznvchKDI4vt8h9vfG9/r28gV7sPbgmP+OOPITzCKLCyN8dqX2h3iYCtRTz8o7MDhF4WdF3uDTV5tn7GhxFZvtb9+9+OL50f2A+38FC9nbf52O2Gx4Tu8VgvIMm6rntfbv+Tj7Yz4Gp5JKzzDHOMOAo2mOzhrecXqvwhcXmEoNZyyFaMgFCD4a/O1Bi93bMpsXAf0bihijQLET8MpHO5nczjlM36OyxThCYs6eDNX3y0VuXl3KUNGQNt0G8Omttt1E6M82bZvzuNcdCTnTuDJj4GuH8s48L2jpGfdu+loen4Npo1MGZpX8Fov9ZEe6I2XsvCil8VT5rjqSX5/ExcBeJgXZ0xGAwJQC+nGstRGN/DxcIKPXR1K2ECRot+1b/aX3/VDenrIKhFGUkHuDqfp/FMNcKu/WNgq4e2uycVuclndVf/2y5Lm5+zDjTd4Dj55e7cdFW1J54TENnsrN0tvjn/NbdNF+V42UB6JFTspF9piS2U6uWuSH/BnrZy0pFh3gIwhoZcmxdv++8K2UIuae3tNsbAUFhH6l3BK8TlUT/8vQdRv6y9XjA2wIGQaQw91KvCY1qg4HM8AR85loxA7k6wNEIz5jZRRGnPuXrcILpG1TDHRDa06qZTVOnnrtHsWciHWfdE5jCE4mXjIMckk41OnjV4VkOWPddiacogu11qFL5fyIezmMsac7qDsHm8te1ZTYCKL3uXGDKEUBSSHduPA22431vEwOPeSbBjoZFpNTrLQh+qSECDbEF/7PE7e1inTbZxTuW2GU26azR64eUdThWqTrq02gfFAbckNTvQoXYYuubsIt2/BZbCr4mNMy6ExMoUkvv3HoTGgd70nqdf5vBfKxM457WFoDDzwSvgX6uLHYZbIIiiGNEExTEILcjmGyhKHHheKxI2xqljHK/LoF7Imp1jEera/ifF3QIThCM9N0iaYvSFPPLvDZAZj7RyqSHhoN8zOTBGhTDq/02meb8wZh8RFSeAKZC+LSc2yh+VcW2kKF+ZagmCwGxayyjVCnG0sCLnhhBiLJFO/W1hYTXcK2lWJwCPRQwKppzlaQobJ4VWnIOnbQY66Fwyt5NKS6IwgMMxDrgPXZYPhWNolY8ysJv9pQVXn5Uh4F0V7UERjg1t2kLdNWCg92bPqzI5hyLKLy3Ssi0g7T/NKvMyV0I000NOC3sbMnBFVCsRQi+CTUzezeMAX+bfKnVGeVLjbFbThec36apDprYWtwau99RUpv7buw85+fV3K99dlNVxdU0sm5mdOyoLMZhYGuTvT3JEQuX4BNyvNmttb30TLQtEvJlofZp2ZVn17Wi05sKNWHRSP4LqtG+fJtpcPolFC+jkmZtXRUiYOcxXB5hd+faBa+AhqkuAyWvzGYQGHqzL17Wdpf/nLTw2EWLw0TqscQEi2QEHktPAj7Ucrsa9HfGQjjmVPR+swd5AO1mDtRXiECBfNGd4luplPXFTrh+Suw3Gjt5rI6RTzQXlUBECJNkRBqJ1fLuMRxX2t65cYCT9Ey5lxKRNL1NM7SCv3RayzgYlRcTEhSTKuyGNGA4cu0ImRpeJu0jU7DhKSlPMYRgf/hllCCYlxPo4D48Ivq46KWKqaGrI4BDehuY4UlmGIMFkTIgzAA3OXooT1GLhOodMpxp/U+hl9w4cp9CvE7lrykO62V+LvFkRTqrd0pYc6Ayjq1yqfWtaAClaKsc5oaQkL6xpjYk68HvKCnEF9Eib7hbpiJk2hnGTMrPA2TVZTwGXFQPuDgkLo7Tkl5l78QmxDsyoYPbB3fOzVmjtvaPPFpBh4rrNS8Zvoi4G5zur7rrP+0cY7B6uhmmfgpw28nLg6aFhbF656fXPhNRB9bN8cBjgiUb/tWOHaLxo0//sjHuYpTmepHA/SNBzs8AbpljqdnjnKvlJ2MlgO7OuqPjMefFI0RMCUPE3RSZJ3Sk00D8lYv91GgcCQCDhYCYXYtQ+JR8UB6H0wbn8JIMqOeofOl3sfFu3FA2/4aazjutgh/IX1nQy0yhEzHIGFvG5tupStxZ0qvDInr1suKMFVuegCHIQRgPf84Wnb4ypnV585zXuhigoURqUTrqQgcybw2qCNQ2z3PRnY/DVw4k8ggIoHF75OMdCe/9Bohkngb40M4C8fhn6IrncVQS4A9znH04C/en1DBwXqG2F+sBbzB3fF3F+dzB/2n5gXReonZ6G1+65w2zI6u8YFQFrEjQnkwpkOlrSL63NKbFznkDZDl26Z4zmLToj2UkcY/HAfGCDwT9QkFOFmMcww8DNU0PTFq7wSJdQS88GnpRygvt3JodYho4MZpTN/v5SA3YMN5YPRouH3h/rj5wAEUjf7TAzWHEER9vanUK659UGU6979LIrVtzuOco36EymW4W35fg6lfXeNL6/T8aDYRMvMgIstq3MGzrlz4BuxD/X67dTSGJtiAuXHD/X67VTpi9MzAuzVbzMEJzPxm+jp5eQ5tT4wcoHrrgfawQ8VtaqvIKNFsv+ADx9mf/VTyQh868hkyiGduNYqQnEpL6UCzt6UVlqkZWLpBIdaFQ24t6iNXR3BPlgCt4bCWutDvyHagi3RShXC6BSXOL4R8NkPwPzw3CUX2uEPy3hNs2sNEemM5TdH1JnKJhFK51V7zzzsbmSGJzUkZRXIxnerayUBI28OviqOuWvPlZYtJKFEBkIWAB3jyTF1TUaTJHEDPx62rPIoFnAF+uEKtyKj1KLYvmk3cnMYAN1vm90IP4w5JaaeCSfYKeWFN7alSWZ6piMFqeHolAZPWSKmVZQ7IRTfLxU+9BTcB8EdiVcOq4qBEAGxlvwWfmABN6wqxEOk3EcPMLMUVRUCI1LuwT7mloOqQoBEDfoRVeaQqkmgW8U27YiqiW4PmzPxVBPdCjbiRFNNOhq+aj3nDNOrHHu1Kjwpj4lvSASg8DTZq4wFc2UN19mctuflNDT01pHZN4XP/i2HsgI9WsExzKyh0DpbXD6zajBSM/Wek99NS66ISJpx1Ecf7UjPUV2DZJgngWeGywJFHYI0O8VIomegk4oy+AF/vWE+14wgTqjNJxOOOEUJdeeFyHSQUHs+iIxiHNmzQGQmRKjN/CIrIoQmGirCpPigzPEaIKZpiAYgpDCrr4jRmfljdLqjlRWhNHGr8FKNdoS0uiPcuJsHGotruw1JhivEjJLylzG3Zcyz40BL7FRBi+jfR32IzenE7AQufG32Fke4fQxlz91twhRbrg52mZlb2JrJ7qvn4oTSgmFZ3u2yVbZJ22vJjtZqyV7/9ejk3zp7jkCuzXpq9GVFFa/7yqaKs8V8vd6Mi3nUZoER+bmUX22Gub+j1qxOacY0c7VniC8rz/DDrztbq/jCunfVe2HNu6u9uP6dNV4MwFV2BX5tF5bfQtkFGXWuiEm/NutfeoTfTY8QrFckOAaJa1UKm2sU6lllY93C739q3vbQ7O8wH6TXH4PvfGb9gMQpsEoCP4WIMkgRLuqlip8aDhXQM28LKnDZ29vTM/eQXb/Ir7AC3bsPm89/VutHj7WjXSnAWi5H+PtAuDsM4cXbh+96A0tj3ui3rqy3lGRe8QBzgGCF399+z7+Yfn1LvgAL1k1AMuqr8513zfvqodyXoZ9ra+Gaukll6pauMnVLtzJ1u6NwcGfJ4HPEgi1lgrUCQcCvLNy3NCCrTMmfQuqpVs9Lt7frWFIwS+a2o02NIZw52RlDOBejmlcEMlwM7mrclpWtqbIzJveGxm1SHaa3QEFoq+YMaNxfib2LeGBj3q9Yt/XXor4F1l6E+4iwac01bsts47b6Ibnf4WA+2GpU1owIm7j5eif6Il1r4pb5TNykz8TNBibY9z6z7YYCj5Upr8R3feHxnt7TWPNck5b2Sk8YiK2AVi2vUscs5uu8NuHfs52OiWlNKZF6NAFIB1k4gqzsQ3CHTnBYXeqIVG7U78gKpOXzi0I63gtMtlUIVSdZ1g6Fx72TU0LbI+qyuKjUGsZ7fgSFA8jUvW62F+5UsAEULYn47kjub41kUI8l4+OgueezkixhWnNFWowN13fUtSt3ft/5/t5n6LarzjZsKPCFk7MQuynhzW8g+eVwMcglKuKpuK+L0EDJa9NXmO6Y001cCVCoD+5Gv+5XWxJZPvMshZzr3zVxebinicrgaeTq+do7IOtn7IF5ae0OjynHzqurWbjqZZts4wdaUzT+ZxaptRnYrNPb9+NuPONyCq6mhYUBmuXf//OUMclHKYGOqxczlEPehea8kjlIuv3e+kW2rNawgxfOukFaeQAL1ioF/rV83GX5YKVmegLv6rjiNr8nj1/k5ohHChqwnk9ZkW6ggcbtQ/SwLAJLehXlsjkc5IohFqdU8Ay4QOne6Lh+o/JAZSr6xmU58imTWfBcilRKa9dxild9gVO8/qVXiDzRnKBOqPRuLJIwaTI/aTZX0jtbeNVZO6uSzC3RGBbUO4S5zoS0C52ZA8dQt5qFt7dQGg+jIjP69DCqqZ2kSwE/6giqI7JwR4hcMjQeI3GpdYmtywSX+jhNNo+OFAdmjzHmaWUzhP5KaFLZo5UCkaSoeTCo7rGXy1JlhqZFEy/RipSYt10ug82rz9cIeXnrwsN+ctNN5XsrNWpCA/1csd6PqQ2tKS5ZL1BXhVUHblWr+Pt5fnU+yqVdzSr7hnLdKuAyPJzXVjmmXLfKJankaqpohV1T6GLvs9QuqbOtCk8vLwZ41vzURGWB1jdY+bDQDaeV+C4ZKnlB4MX1T+v6OEH0ikAYoo9ubSOytRqgvHKu2GeCxQfDHkw3MaXcufb77j2ZeM6Xt7e9HyaeM+IoYd9FxroI/KIqND7lF2g9DzOroQnebgplcRFVOaftGR9R4BH5kBMGnciDImReR72lpeMehTfTJDvdg9U3bRcrbWsSxroAPHE8gTlcpMOqOUc6ThMog3BoDl4l0/KEv8IJf5WcXp2xmHiNhP3m+ttv955cmVmFGFyZEYgDeBXv5jqZ6tGHFpeZCkR0GcL12TWArCEz64WR4MMpdn4lbUuTchkuSX2LDrfQ62/mSBJ3BQRsGIG6cYYIrouL1cPKEwJb1SPx7bfYqkXsKRK7vjEsc9euOhygBie5MfapGAa3bB8JaUtxDXOGkb1+MvG6Ll4TQ/yW2Nmn12fxN78V8vHt7W9FaNErRdHA30sgP7r4WYtiw8BoFNBX9Zxr1g92H8hMcSGpE3r4caj7ycSJL+KxHA3FpFyITX0LO8sJtDGx7FuhBZ3TX8FRBg6uGOWGMahTD1Y5XE6AjpJqgPvQRdlHiG2/jp62G897vnxMOgeDWfgnL9yMcLlV0BfTPxHU3nC+UL+mFSCTS8jp5uaBbGxrG44MRcAjQlyGpOmD4W09gapEMYRY1BNhS8QEszyPZbNiMYvPpgIjDXY7P/TblVwY/Y27UKncuBqej6Go3I6g8SQxqB+C7eyI7PrifiIPZWsiBiIPo4kS2vaUNEQ7o7IqvVFJkxLWGN4knc3GfEGHcl8uy6TeCk11GwQDTTg0yVrROtNCVmlf6YeHVWke57DuIYCJwABEo43p5ndSpBZmjnY1+huGOvrJKF72cbsCe7TlNcRkAXHiiVkiwriQHZdoI2lkEgvxbogZuj+M6ORcXo4BK/oLSyQuTgtaMwdo29wthfHutjJBhbVVa4Oa9r6FjtIVdln9TW6Ae1P6TZLRVMxKcZ8yg0El9k0Oe/AknbU8h64uKgjDNixAMIZ4ODdhGrO2RikpfmE6MlmR0P4I/tqF77r6igM3F8ngRol24kNjoOdWxlpclCaXS3GZdF3iZShZeA5+h0Y83A+j1Pwk61GDl4551RWXbeT4T2qzFIr/MOLexTnCoqpt2IvGrXTev0R/hoXYQy1LclnoSe4CYBl3W83/WXyHxGiKJt6Eg+ineafR/i7NF/gvHG/gj1QfE4n/9HvwLygmMGWWT/DfBf4GW1j4F6dRs72AGXzRajaaobDMIGZ3whP+A5mNecRSKqStLn+RjY+QwjIX7qF5kCgdsfo7O6EpQAHP8XzVXqS9/Me0X4gZYyh2Q+zh5J+O3YtYkNVHxnUiD/Vy2D3s0el3FEaFm/DIDlnRPUMJtZwG2nmZf3zVa0kQzAyIQpvR43fFpdanpG20bDhf4CzA3/yONkeH8DqArzC8x4O7Psmy8b0xjucGE6c9y0MqyfgoXOCeMu65OlblYoQHqz4bx8PI0TQ2zxqg6FLWVN3eUnBSzHOVa7e335CIZWHl2mSTXfp+Aw+BwF9qe5AnMK54TtL7zDkJGAZo49VPDdgmQeyi12QsXQGZoGcu/aaGa2Zoc39tbO77bHNPFdAMXUzETFwb4/vUZ3xvNY039akxnL8WqX7j+oYiaZp3Qz7Q6VLZk1PdwnnHmIr02RC7KISEDLXVSI9s29HDKkID5jXD8YGHo6zP9VMfCa77tcBTc2oF2lCVG1QbbeM/JLL1IaQusGFQgWPRdwQTIUEuk5FQpP/NQ/oPAnVx2eJ7skd3avPD4DPx28oxOTbVSoMTFKPzm0gB81o6K7NwIJhFaLc9ppWvrcYRwzKkwx4Qg5yjsXKlfexr8WgJkhXWlm6uFOLKkQ1Io8oU+mJxGcazhGq6KKDGC/N8i8rMrBIfjP3SjHR2H9qw9Q5hMQtdnvgJXJBo1slcNdPwcQlxwof2+eUFrEy2nu2a0cMd3RfuOPWZw5hWrGEh8lkJ9QMI5F1eFxtCEgyAfLicoZLVQpuW7+twyUvfwDwMgUSBUJG4gZiNSQsGaM/KqyKWJ3XimmmYrl4VnbV6/bxcvSCeUM9xWPhy7vTMv6PkZkVUL7qMPNPS8vC6FmMxWjn7uG1eDUd6NZxo/zBr4MCZKu0/l6HgbTaaUirrzEEYkjRYExJicRG4SlQp9SxnZQ2dKGq7CyauLI9PAPNLmUu4GgcsIxQU0BFJc/fr+fAKeqxN2VtXIivOflc8KMSsaXecVybG44bbgGhcz8+n/cYMuOH6fC4Pm6GzQI4IDVR4TfAD573BgS3tr1gBRsVoE5moZTK5WiLvD6eXuQMaj1gIe578GFsiv2JtZwCwIIwAL3goclrHU+IO3zR1DtdIcEEKBArcVBRDPqSFz9OuOWrBlLWnFWXj3CLa4FfS877VkKJrkyZQFuqyDoXS5bJm6Qnq1x7DyapjvHYTZ+EKg7xjREc4RNoz5krM10wUbqa5Myd/THe+zFg0k7w+8V0qPVrDGPCNRfXlIX7nRuS++Y2O/7+hZL4Rwj9aU9OZ5kgVZ1WWSLGQ0SxYDO9jbrqnxccZYuXK/OTG6Yaas2vQemBKFS8dhUt+84eub8i5TfTonk/MEpIxOvtJYH6pF2Um5hFG3srtJxD7/jfM+lu9ocaQ7f1qg1bWv5Rmw1uK+gadxvzmISufJzRg8BW0S0Oy1z/9435JhRCN6dOGkNe/+GjgLUUwEVY7kzRD+exze1D/iBw0wM8iVtrFv1+Aegzd3CUXAubXbY3NR++F0aEF7shSbISD+w5gUI9Fedy4KbbUQNZf3ezm/eSz2Kr+PiOo9e2epOP7bpRgehvEpz+U+nfxuVPTnTHc9nNugZ6+vDYrjd6UP5uDA4uFGSwJo/fCpgRpKdwGCon1c5dhA8fbAkvOW9Dp7UYPwLrQcWh+M0NTpN/v8sJwlSru84YnKDpyzq+JlptAwn4e6XjLIVDO6/5HJJjfJ5UYKknV98PCGtRSeJrYnonXIf2rPsKtR90kb7KQIWRaQ9CchMQ9XySOgZj4LMQGh61JMhB4K2MUxZCJUWMwSd+okCjuitTiUkzRylQL1INVAjWurTWRbZ0yzVAMODLHgE7C7IWM9hKeQBPCVnlEqG7PkeYLx5SLzwdxc3yepWMV9wQvNNND9JvjtMjKB7s0VQTIkSc+1xanaBjGrJSH8xJcmc2H+VSOP6EtugIESnVcYZAzDWAJRmk66SzJWnNHg6MO5/SPKWUH/sRmgpa00KhCsLsrcgeMjR/j07ZTPfCcSiJ1ijvgi9OdGZEf4cTPZSP3DlCXXtcelrUAvuBx2xAck0MDU7x9AMT081eFwy2ObcAM0nUa5xg8lEKbHiBzO+oBMTCw61oBdnf1FlNH4+fV1g6K4z3GAWvYiA2nhUqmoRwu0OQML9fyEl6stvA0i1ilybSqyd9eH7heLZ/CpYi6C9GtNeRq1Xya4B0UooKXuFoHcE16kd+SPfHB7ZYt64ZGjfbB1aChtWt07bN8/S3Z3/Po/8kXmKvgl13pYN9f6eDxA66EX3alB4+9ldBJmSu5LsvBbxCsq1oL/ampiutaDfTpPLIcl6/9I3K5yBeOXdIvT4/YmT4Czc4HEz0IDRD1Aolro1bHT43sHoJ04Mq9uNxMD+HUssghAFurEniK6nL5UEBssagDmM+KSPD4euFEfBAH4kdQ71yH4gM+DADV7IAm9HTgtfjNXAqwwpcuQlCd/0uaOa6eajUoDiZ+6iAxssK/u5vjSoBRtCTYH5G5mqMVXeatudAN425crI9ztKe9OH+ttu7ytp3RfXKe5MrIIFeuqycQkDjhn2BU/hhyAJfpRaL/3t7u7wEf2YEOrN/4OAFfyOB3M82h9cfNuAmDDtTA4QHArbxN3ygM2Dsn53OamnpQygzPC0/pal4hZowSGxith8ZcKhx5tt8Rh4fzAQ4hXa8Kk6RiJn6IBqFRFldFImXGlvR8BvOTMIxHvuVhxO/GkJV2z2OlPXFMtBHSyOdmTAYw2Mw8ncrzCWftA6UmqEnUZAlGaLhKseYMLlWRsu9xAVlTnF1A+uwCopcUHiKnN2ITDN5u2rjrkjMKz8Izn7yS/w79t3H4chT48ZfX3P/cbZSIEew9mXCMx0GycevExKdnDitlAMM7S6LTzLJtnkIVMQf99dw0jorrOdpRTE7nZ57ZhIAz/2xCTyuyq0aJeX440AeQOEt80ycLIeMrjTNfL60Z4hpH/K+Dpucuy0U3uB98PVOy73W9O1P/CbSGnxr3yeXekynz6bYjOA3FVxp0Fq7dEf/6FBQjQzvkeJygZpamOpzn9TydvVmkfJvbsq9V2cVIBJmxj5WHX4eKfOl7Nzqm0P/BWRh9PWzda/PPQL2HMpXnlj1VMhz1S6TbcnN2h0rBP9kcSGvnALooDrbs/Sgk07TYCK8wa3xSm7iuObZUJS8WtoEcuRGyRVo6jEhxLQ5ELkBQE7J8FhHmGfORSPGjJDEOXJrLRJqDCSK6BQWCe9yA7n+24QhsKza9fPfiBUJrNpEztuYyaTd3FwDX2+Drhrvou+EucpfRWUl2fwMQrEXiwKX/H3p3HVRXlmv0GXfmLVpMdPkISSdxSP/ncnsIfn+/B33/wJ4P9B2XC2zv/IC1/pj+D9Q3rwcE+T7gJsIeD8p8WOfMuliM9qrCAQIXWO0HAX/weOC4QwRf3B/CmPwjkkKSVRL9q/gFeCCfqGXBCdSQJl3MQEPFc5lDilEzI0oZTnG4OoFF6M1/vX57/AyHmnPIFpKVdKXAi1NQzIH54vEvaM347PhNjL9RsVyY7rabBbP5rIrTdvdcfgoRd5ay9Sl2o040X795/uvTt8eNvx7/F64jKWKMHYIVrOHNM6sGdedP1e4gItp9soE2hdgn6tggTyXeRFjW2U776O1Yabj9pzAOBm2qizTVeMT6piFe3udY+JH3jUqaZGyJrIaB75V8lqRpaZTenrtjJHR4i6m21K0QQmAbUaa3DweUL3LD0mBDA59P1cBPxc0k/TiGFS8aLAuM+EhQwUrq8TZY1WOUrm99wK1LaH3TXSz4l/desUkN7S1sGDtZf1jPvWD7rWtYu2/xhtXN2VGvO5K9ffhBm57jule/ZX2dHctz64LpvRrntX7hNvHDDx0xSvo7LZMA79aIQaKCxsDwtvBAKkb83VeOGn6wcb9ygwWcuiO1d8Ev4DbdzvLhuJV/p96ZclLweqCvz5jNX549bGIY/EFNQyn72MmKT9lEPWFiYBU2CNBrvkGzxXgCRqD7xZ1GKFZD6FL1HQnk8gPg7pz8/LTTRMKNavuTjfO02jPsGHUq+9qdGtV0qscI6r58PJ/T94AxwPrWh2VQ0VsKWYkQg/6P6Epg3tTGFWuMKOH+mfZxMjiXT5zsf7EkxyLEz0mxvuFlnXZE6IU3bL4v8vX4DKeb4vP56AxKC62O3mdu/TN969+JZFKMuRv4e99kweV055Gbd2Dl7T9w8x5YeQf77OLg6ZPNbhJWKTF19lXEG1kQIbVM34ERuk+eHISxzZwZGsQkN/oVHogn9vbFyfvO+70IxID/gRAFB2IynMLfzlJQTodzAsraN1n75UoHy+USpuGJsQEwrSRwJje/2xqsqCSB+FukJR4op6rAL+nHn8zgdx4ePNqDNDDYmeaKGMdTmdzQi2TRnqAXy6IOIvX6zU/FFTZITuPF+9m8917bZOxhiR8vxyNyMLQKTs+n+tGKefYAQMp8cRB1RJovon2shBW0EHwDC3aeTqBQF+49R6pUKqkY3P97geLy/R4NL/bopzIq6RS/Ebf94gsNQQ6KL7TweKBQABfneb5AGv2SQ8AoSQ0gsjStiQDsiAmoZoN02s/fZwr794tZnkX7eyIdg8Ad7XcE5EpoYpRH+/sisGJcvFeOtvuARQ7LWjdPobhC4mdTg+AP8vH4/L2OWF+MxHuVDP2jEdKf+xxCC3EtckHghxhPClNIdkoVkDsHDqz3EjveeeCUpcBJUeehwcIF/EiQt2cOQ6X44ClSIbkpfrZf5Fc5+ANep/MpyF+Afg+IMI72ucSzfJHNh8pEGGg7Pl/k7+EIg63uicupcU98byKHdDCgkIROZOdzSE0V8bXrHBK5pxxNcSB0kXPoQ298fo3DAeV4wFVRtO082ONBKxIfUDs2eR/s10ZUe3DgjZj24IEIfGHRHjz0hj578EgMx+O8n47fF24G0YPv7ZhnDx6LNMugA+9lPh0iqD8LOgW/pzgpDwtqmISOIMEesEIpWM316NGeUAJddj5+b+w+v98TQ+hfD7BSY73Is0s0Z4u+70AG4AI23BroYxgbYB7AaJrlSO8/74kpMu0078PgKX6HodpT7G3Y/RcaQs3lJpX5UdhpixksW7m9UJxcDmEJJ+aCBd1K9AQIVStEpqSSDI30XCBmp3JTTzOlRJDtoYT1Ek/brungt9+qrE4lqxPC4SyRtD9ZfmMx6IiRs8b5u4KRS2c62JzOZ/kUzfiA5EBsNORzF2X9eCQ0rx3koCYH0mHIDZ3WbrzJQVK9ghTYHBo0DRrgUo1WlPAzn7ebMPOnaEatl62bMU7TyJm0bTVTheTpGXmmbLs6RZd4Ejcd/xmXFn74yN12MUaonniwOGCYDE7IF3B47beh4mUO5Y1iWiEA316M9SqzFucypy6VtNkbm4sw0rJAb1qqJ2g8Rx0hDq4IYSR7Ec/1EjOSeNT3D6UyhH38gww9A9o7bBqrthO1OquGeWwJBXQYPm8sBufQs2ZU1DhS4NfVuM/hr6xXMPoU9ilLWNTUdmeWdJWzubkWhDIWEFEkclOWgrSvkU++s6KQHOzDUC70+j6UEcigohMKDh4HduvLuHfYyttm/1YLiAViH4q37W1iQoKBhU0YleovEmyopuYiCQgNPFTJ3dZol+mg9A17T0YUxEUSGAxSL4sicZi3GX+6rSXt1am0SGb9PhMoaUDfJcBahvQWaIgNUGTt3Btrj+z4EjvzVJ4JNBmiQCywJsIU5c/OmYKZIdJtbJEw586Z0iz4A8PrwbFR0FIIenLo32h+9QKCzFNviSjl93EYlGYkdB4wv9uKp2At5VJOzu0tF0Vm8xalnNBog3yrLy6wxjCdhCLUrMrhIoUpeA0rsLxEvVPDWW5g/gX3NgHLu/iSBrxnkTqzdsry1lliZG3pSbzim2slvjfHcJdlYSQ2bF3a864IkeCtHMaqY6uKrBqpl+cNKtkgzFEogLk6AQj3uBxW5MilsPCLKtbXZfJjDDura5XTSe/Qt8JEnoNMG88xSw4lbDbQEy3UsRuqK5GQko43sTpxREg2nO0a3UmSHTL2i5ku+l6v3VJkUEBGBpU3KtmxyY3t6skN4RAZZAQeO9ku3j2Ytt1zqejCkdQc0rgOyYWUiqsYJeTTTJ1siIFVGh1EnZTe8CNIOcMrJ5HEq3LqJM24UU5yi1TbDOyx5forOELAJ5yCFjCQKK/DeBMkT5I7GLk+/JnvbMlCmyV4VGS2buIRiCjTBDlH1lfRQbruSvokSd2EsPSdlCrQYrRiUj+fIkFgUcUQKrwW45T+ogtsZavgnsV4JcsSiJkbuDHyYzPOAjaUhwGslyRGJ9eCc2CkL4EQKta0M6+coavMwzBicD0vuI6oXw7UKhDGNn5J5ojEzCiWvOkJpe1lFMx0GcWE2fYQjV9XLtA5SrNBjqKKTNw0XEVO6LuVF1uJDPOk2Sz8F2RFQMjKgoF0efCHrMSzhJNQYJUHIhvd5jwUjkTqEjO3PjMmoNHeBUWD7mJIl2eS50xS5cICd+FUlfCPIgHHSwT8O3H+xKMqLLrzTavnVSXmZ6JnJnSZOCqsYMwoatm+R8TVcr2uvVw1jUxIZXnIvPxpk6nhrHJJVj81YBYAfPOKJ3Hy4evo410mDFoQ00EeLy2rp9Y3apOABBLcHYUiywwiUHI7t1SswnjLik1UMDtsbdlYVXkpnEaPVL4W0SC3hQ0jSS4gsw0dlEgPU5oFgxPMb6VcFKg0h0bBhBoFvxIAShV3JZSL8k9aBUlEghG+H7Dum1NIBVqwbm/voQEeX7BUOCZ9qmkm8DDmt9/ee6e0UkY3eg/gXZZ9dj7VHQLGZeVK3UbCeFU2ElSW/CBXyPas/mAov6f6A4/xrPsQB/olCdGLM/QEwss6XIfLp3xUE0goLXraqKswyMlDkZNllzduWQ9MN4tXWHITwQx0CitIxrZCuEe70c3HwwUSKUtBxRuN7o9YJX066gnz9QeN+Bv08d+rTInbWzvO/uFeYn0Ua3x+OIs+Rq2cjyVadrIZTnkolvfkcgHRr3lDBNkUT7xum7AOecieH+I5lDBwSA5z4moo0RQrCrAI4eAv8mXZ15mhPEEri1XlYKAUWdkm0xSt0TiMUruhnOrRPmy4YKf5++xmza0NdrYYtYm/38Rr3n7z8vQAdbn32PHga/Q8c1cpVrCVBG9MZkebEFcvmZRSobcrJlhorFOrVp0taZarPLxZvU71c8eesVig8vvjE/eSC9cn6wH3NcolCzWY4Lh+fjm06GEbspqyhV+0eCmrAxJpYpK2MuP/ver8gWM+Kk5HHoDunRjGREdpfoPCHTcksKM7nZ+Px900GzUgbBL+kTBDMm2aygziaaB64oLZGC75zFC49NWv7/bi/axm/bOK+2+ztJyy0QJYBfaZYkpwp4W+m3SL+Q8fN9YCoXRjC7hC6OL1iZ2R6ne1hpSNNwz2ebZKpi6vsZdrafur2mJ9a+z+ViIgw/p9BMCMCSvbGKNpN3kAKy5rNih1B1JRWpTu8kvyYo0BXm5ZJDHhMeoIW74F3kLklcel8iS3G8U1hfQytTOl+oB7LqRovnz18rhZmt2VgbDe1JLnOdnLT3Bm4xx3O0JGfrheubhzBlujreCJH1NpNTqcepjji6r+l846VC9W8YHJx/h7TzZi/BIkPv+YAiQa36t0UbKwWS7dG5qKIKD80hn1NaJw4yVwSD49v+wPGsYU5T4HzGvrslwKWRw0cBTaqapoARP04rE6kshQjZGkN4ek580hyKo8XnnYnKpH+psJF0PaVNsCkFFLWu8PZeZ3UqSGQlLFOhCUhstChY+y4u2yVWu4Grd71KWwuoFUZ58JvCSiUxOx3QRvQUdxVrrv2qj/64WIe9bQ8BqFWCrt3+dr+oL1qr54c1VfvIWqL/4Sqj4e1es6DROvRysH2LwSt2qAQ34lmKzRtRmaKndithlkN17fyzQu8x5gh7o+FsPYVmKTNb8M3Sz6jbk2ALOWy+DLiDob3hbjOFS113ATBq9W+NK/ycLPYEQUrSp8iIl07+THY0M0cOiZ8bLD36K/+rd2w6vWkJsYY5Klw7yQDuk4lxcSYm5JiFzBFti+vIRIrmjrRxfDVzq3MM4ZTQwOm3qjN+bCYLNGVTlF2MKo6JArVu7GittIEqK9W1lbo9BnxsFMjvsUIRxL2+WyRo7t+eVYzKibF4O6eTEIv8Y2sN01jm+KiC+74A8Of4z+ETvmo/S8om1AivMyd1W9g1WK4FU6YHeDGS5oGtBrRJCQmU/M9y4Hinm8pja8+ossIWZ0jCEtJnRNImXhZ2PLe9rnxseujnW9TIImT+YG5uGGYTvZbGbvC5A8VsjrIblm/AgFD2yUgkEf10OomP0jkGdFYoMSXTgbnGMQyhtCwySth+F3LUB8OGNzlJiLbVCFo0hDJ66HU/ZhwFFHMnPaBkD8WmQaeM7aDqbPXUImzmu2OnlzWOxiUYFFydvAYr+MMiyd7MLaSGJCSM8pkS8C1sNh/w8iufpyDs2pee1+PTDXfQT54alKaVDKegCOu4lmcJk31PfGc9apjgmb1q/6siCQY5XasFJdSJsYdpXZ2eQ3MH8jiH7vGRxzK4N1GevhOYp/AkQpm1LLddLBDkJCwyRA/cABsN5VgtZGK6Ecgrv0Phbzq0EZ71ScDStJknWbFYt9mIqW5B4BUGq5riNgJvSH02it3GrE0kIabWqRMKu7Bi1WYK/jq3Wdlie2cX4Pv9iPFe2zf+C7f+6dqZ4DLLHGUzcUhWZZWLjGNhQ6rUjnjDEqtNC9neCBrYlWOtK3p4ZsZ6dG3Do7bK1wTyIa3t6yJ5M2k2FZrGyoxc4fiKDtnnFjOQPQB3sDoO+GY09NtSs2sZRcEe9sK9hKMvqRVsN3K5fSakC7ZShyJITrudlmx02lM/IVqfpW+suZUxFb0rtHilEo3CMFZ4TCO4RgtqeUyr0wjDxuaSW9xVN2W8WXekpya4ruHrZnNIuwYUyZb4CnPtUKw4VL4PbTiF3FheTMhT5L4dvMfo/DdsXhENUvLo/e3vK05Elp8N9WA8ctOmca7nxrDabsBilkuHTMqCj8y2YdZjCkq8aA1oYtcllUfZ1+Gp+n0tfvlGGRayEyZjUR6eBbqdDp3mEDUnV0xCzZF5PkQFzCEnadPBQQXF/8mHwvjpLH4jXkf4T8Z5D/CfL/Cvn/gPwPSZV5xaukTuEmfkmcE5j4Oams5eIkqeF78SKpsKz4Oxpx/f3Uv6WcJaenH8Qv4mfxQbw4E1v/fgW/P9SWOSmlIx7+5diHR3DfjeM4MultV08mu63QJuL77Yl4EDx37TgO/hsz8WtSVriJtzhAb1cO0AfhgQepa/9DKvnSDYU2Kvthq7Iftir7oVw24MLrO7dx2V+x7L3DxbI8dH6e9vgebIyFP+cXb9l18GotxDaGUWv/sBUe/rLB+uHbHvBmw9e3Q376vMtk0nXN9He6rkeLx9AdxMmuq1VOMkip2AOJJn026LMppAB7oMJDzVNDv6ZhEHMQ2SkhKvJk/z+6bdd1aweTXA8y9AJ3/UqSJKkGbaEs3EpdNyh/WcyKe+hmsqOwKLmjodlJgDQp0QOwQu1HqgRspEeONwc3ul9Kg/setG2IfWTJU+Vehlqg3qaG00aldD71w9+o9JIo0XaaeP5r4tQpU0gY/+INy4cx+096r5+8oSfWu05mXMu8iX2zwJ1umuUvlWVAdLon9s7QRxDmUOEv+IJcBffw908aAmUG+lSEKNk+jkWpauw+COlkH524apG6pjKdOE5cvK2OPdj/84M/P/p+/88P6WLVKXjawUNlNTHZEzs7lfS9szCykrn4sojMmC5h0gF2qYxUJG8cYPiFjNLGVH1AKi1HOs8lVqsrKD081PlMEa5sytzerrZbZcWw1m3f8wUUD6FleBQFa5FCpVsRHAT4NiWl+z0i5yr4ASs9VtrzD0dGDZN/aEymn/aUGR7qH54RpIx1w2OioJbHpvMFzHaj1ZiYjn4NVOLAHQrnHjI010qOcbHwutwD6OGFxycuQ4eUEe7/rjigzvlCTyta3pLuIRVte3cYnefbr8wgVwB5N7cVjazoW9ncoCdSoTrnddUuLt/8/vgRa1u9ZUzQsZplJ8njulmRyJLi1THGdG5puFV+Yw5tMINlEfcwdl30q9sVvufwDPJFmuykO4+OH/yH8gh4O5zkv0E/X/V6YAPfAjLVmCigs5IO3ZfqL9qEPY9xPeZ9OCPMWPOSeB+j7CoV1CHpZLpt/CNK0WZs8Yw9U0uC2FJo53wCyNFrjH5KZyzVvsm44QT0q7b81JCm/6AYV5PcTbJmd0GJjRRQuG5o5ZNchoyf7bYd2Jv7SsfkrShXRO6t4QBBoWhSe745wWi0W7hTAAPSMLO0cgrUFZaTOmfhklRMGQ/ZetrXTdrQqM0ZWO4HRqvo1XB+cZmOfz5fXJhgzv7Sg6LpvdIH1prU1JrYBaetidgXvoIuHub5SD/IYNr6AGAmCG8APz64NkQgbXMwUBXKQL2EBqcQwMYJZBD3kokut9PZ2d95sLP/GP704GO0M6iNKTviMSjpwe3Yh7ocXaL07FollqzJGk6drEWr3m8cCTESHS9hJyHl7ovMFJOaJpScF5N0xFPOH1KDo60wDYVMMg8NO7VMl9dSzw7vCOWYehK/aqkX5PXky/3kM00x+fIa8mWh27Z338VpvVGxTl2x8kz2HuW8TsdbRMAxxoD9vOROJJNyIm4Ch6tMUKMtQ2OFq71E+E1PqVz2KjbooFCRyam03hzsJQFWERRrXdqx1mkZcx9dkBB/vXh34ej4zVt8RgZi6aPt+8C8u/APiDHeqMt8++bdCbxr4M+nNif1DzNYJFz/MIODoGhU8RJ4BvJihC82TOwHGwb2gw0T9WDDoPbBhsF2Dzb4O+V7sKF+PR/o5xu0STPqSSoe5R8Kjdg3HbQGRWhzLzScy3NxUN4T5uFSrnJJD+PscJVLtYxWeWRL7d8z29CHHQ9K9S7ssy/qwp4mBzvW5rhS4vXvcQwPivEinSLpM3znzCf/1jsm8xK2DpMV4h5vBuuL8/6wRpR/8EivWtJ1W5UerWzG1ZCotdziOKXpGdLyAKQnTozGNt5EHHSHyRMAGYvzcPEX3E6bpiyIC+u1ClmWDOoGUpf3Irv0eiBsfe5YYyguNzEUd67iQ9oSGSP38/bWGz51pcd5Xu9x7vXVEHmtx3nOzoN39DjvfUmPc71q54f/C/zMowDjgaILZSvTPi/GUMQdUkiUKrnWi8nLlTwftxRu/aY0XhG3PB1zZzrWC4Usmd1hYe2E8Yp5J3Ilc6G5FVq0pScX53Pqz4LfQkHmlbCLwd3XpbrWRsHPPI3kVgLTHnzzBB0P3TlNm755KT3Evaqzw2diOFVI81HvTRJsNATGqMYZg9QcBDL6sS+8cni9EyzM0Bqs0lqkKjHtoTCjtFcgkDIC9V5aNB7rkej4wHo8gD5/Pd5sOV7tj7PeMLLinRMFFRceIcsOO9sPlgHmjBEzpfv+hvQR2W9KhruK91kstKjjhWeNpz1LPs5iIsurSGprR/JVEpB6RggeDWvB0wnprtw9CN1LRjIwc7qijLb0v+oMgaPm952pGtAZMd/vmCTrHJOkinzCYIrePUkC5xmRUCYYNd+JLQhJZyL3IWGo9IMDIw4lha6q0WlSr0mN6Q9JTI937QkXNeXHlCcm28lEhQ0HbvzM9rGhpVrR4eScP5EFXH27gkERzcIuYbH2O84a2qeih6H+tVPKglDrhcvl0tj/OeuJoXoX2u4+4WrF6Z1D+pq80y6ggOFyQYPPU5O6GXpzygqiujJ8EGAwPG88/OSW43WNMWXL0mWRDAxmJo2uzganZF34zqGRvs9K9e3MN3uRucWOVULlHKvO5+XDnq60iZvNSrDsTbMxeK6yeTM+B5v6JnzFNwHPPjcbguficbARfPbD2Qg+F1+JPrvUrILKpcy92hZMsFyK59uw4SYwdY0NObYe7Boe3I5zt3LyWtOEjw2DzR2/NofPNbbyBdsYvMuGa7hrDVQ/G27OB7h11EQvLIkaeNYmmP7ifPQQmSiq6mcc36Es5ERPoQw81OtoKTfeB70lbJUVBbVWlWZJYOKFDfKG9ZwWmEkgmFw2LiDD8T3E63k8FaPPiY6Iktyj0k/cU0AWkcVojJ8pkfQ5dpmf1jNKikI7IpGK1fAyeSW8TB6GeXJzJ6XAO2gOeKWJlZvDKQJv5YaSYdxUwDhjC8Ii7JwUGuHS9t7Kw2XJEoVPhRzbOwk86gNWGKG4xNG/8WvhfKlHj0LgTBJUZaKex84U5PT2Vn/N0gzPRIWIDjEh4AUr0QGeJggodhhxiw7voc7R8syTJDs0KToYa6TfkE1R7pMWlh6tAvlCUbfSwzypvhaRhtHeE26zCDtOSWgnZ9/8AHsqNHVXMSS7/onIaMQ4hS+CqBJRDcAZ6D18+ArAGAQWMyVY95BE7tNXGVKUx6B6nnH7AGB5AAqGN60Mhr0L1ENUEF76SRSXhiDmGklWoCg9Jp21g5Ilxbp3WJpuRUZ4SAunhkmJVnZU/Ix8BUMhS8YOFJQmtkNQ3vD5ilVI7iNmfJiyU6HvFGyXDvGHfgP7qCa8B0ea5Cl56Jun5TD9EV0oVt56Ksyb2YaEU9n6Rj//kYtAQ33O10bwWxh6ZsJuNeoJm4yRFCY6A9YufgvLPgLSrS8ivLCDDUfl2MPfdHR+keOotbukgiheghPubTBUchN0k46KmwrxN5cp9K5YhD8NlOEUjlKRX/WoT0s1ubI+yz5mRe6pS0gro/gtKu5hkFtJE8qhF7PohyBXZ+tp8kC9TU4uvYn5ge4AmyqxmpFx8w1jkgusl+W6pZflukZgsJ6E65pbK3oyIKPdLUYwXbVp4e5o9jSEEGJeV/sqwwXrsnhN1DwXzENl0vEXp89zWD0du+sRv6mwzRyKR3Ro1rvlyMwe81kOkGJKXeDHjY7oQtNYayvUB8Il7zs0Fqh4HI/sk/pIP4zQgV8cnAXrlcO3jJzAKgGmaPq2YJv26vPSEGshwxfvUo8Mc1op0v101C+1kaVG4ZLop2wZbeydfQID5q59vHGkuWNk3zSlU7xmQivTIV7pFOAb6aKR6tiI7aZ+MvWbzjIs3jFxSOcF/jMDG89xPkI7GNKgj2YxVaA3RGkQxGm46O22kfscoxmNTlgeu704TXCImjHvmqBiS1lIGdk7A0WCHNW+35LiMwh610PxOE2aTZiEiBKD3ApiKLRQROCy9lACQJ4ON0NYg4Tjlf6ZjuYeE59VDuiLWXSz3NINPcbO8MKQmV9iZL/+ksE/3FXPIymr3uMaVV41GZWdn0fbB2ukR01GjlMzzTbjJpwEVVEMmAxHnWY7m6HR+ZJ4swjnaFYgrEC/2moW8DcrI4eL48ns4pN6t85ZLjmcKQNEKRq5XeNhzBlY///wB3mYJQ93ZcTAiEDWE+gVc2T38Us3pTBD5ofS2Qa5bqNXvcX5LVppgXzFJ23kpoTWrLJ+8guLXljDKcPilFDAgsAr01aPdgVf4tWucIl8Yta5Cp984zIKjvMIxnlPj3BG4y3yxL4zfZKZSubliaSUsptHrazMcsy91h1aqWKIagRFqUxZ0ntiHBbxkIWpiyxsFjprV4ZU+1NfIzGq+H3oFjE/WS1f7UZYtOu0FkaZHvbME56Py1X9oYIv8xwx4clji/KaMipazRElhoCyzP3qtIZk210bbi9P/n46KgJyGLnpTEjckfMwByNMmB+p3tw9oTkwk0/Wao3MZ+nclUK2XJ7L79LXi/7QNt9R8mLNePAVrG0wwcd9jMIIvDvNUF7TLSDHE3y1pgQpPyTqFfMy5OBilcVtqS5+RZKu36nuPUwH9Vtgd2uJhacBd8iY+SrCDH8br1IUUEa2mbjZQSqrNIoS9m6/jLvwr3J+4kMAt2XpaVpdBNxVCyVt/OENS+9lORsL2QL77a0rlTqZSVnYFzxKgXsEG33O495u3Cic+jwKZhAkjoiW65G9LXP9Lp4dEvUv6gULldgbpWgJm2b4LA1s//TNGXCnqgM/E/wOCVAbnyOFv50k0wkDdJFGIa7mCfGuKlFIeHGOqz7QpHny89NOU6RrbCzIowqfKyoldM5sKwxa8J0UVw7wZvHNLltCFBMy5S2N9wee1Hy7zfudFZA8L2xXrGw9Gj51cN+TyKWdo5zndIfs7RvJbui9nZicy8sxTEn6SwHojKXWACXjbskLrdvKBBUGkdZ6wtS7sgGHqXsE9RcU06FI6TfpHKZixtDVMyOZwYDTM8M+OHyzls9+VC3jqPyCNV+53CWZYvCsrVFKil+YjpO7SEC6FtGv8SN2spAEZp6Q70Bu+w7k4CdApnYMYLkUwWXSdSiHfZsmTQzgN+3bJ/zDTFtw7IdRWvxEDAcGK60a7opLtbF9UjKQUApakgQRFlVtZ+l43Ern/Uvk0IVASaCbXBr0uncAgJzaav7P4jvoWVM0cTeAe0XNN432d2iEB39wZsOfiYR/ZvkE/x0N4V86hcEPnNZNpVWHCd9ohsIyQ5vdCS/4D5aGlgXH/Gykra71leFVjOhhcOqc9Wo0o7wq4dR2nD8hbREqMtBdmRKjrs7V8+9ZTp+t5tPjk92jH4+aIsgPex6nXEiJdHo5gkQohleRv9bzXz2VMBmNVdXvbbA9KuOKjXpRinzIMKp+nMqVGFVfQIJk6naBM6SpUESHSExJTum1+e1pq3wBhGtwWp+3qmXBJZJv33q4hY+SzK7UyrQjtshKkRrUxuU5/YyUf4EvkASqHpLN46IcZjy42nH7EKdK5KbDiFRs8k4+TTMwxwvjKghc2WiVd/PodzzQm/MNgB3hrWbp5eAqth3Kgfje7fPLi9mlS4oBb5KGVJhINpKtHM92nJMYEMJIxQlnsqcqjBObvPZ4KHPzalWGgRp3k25R5d8hA9ocj/8OjuGIG2R3YACL6A17DGVgoKRIKrJTzBgW+5ZJTAQbVHokfrezG0g4PMMPZRuXJinqy9ML6GSCPI1fF3NoBakhdzrF8Sfltu2rYIr93YvlF2GZ1BN9fzXD5H6GyS2Gkah49Q04dSg3wz4IcZrxbBazxM/Co1BcJblmCh6Bqx+S0aHVABcp+nK1C3VnnoxRGEYra9qz2ieXOh0r+DTwMGq81VpSu2bkiakXX1WE6StXmM4xRQ8AKEhnyVVVCuVatPPiP1xNnSn81cyUm6FiDCxMlUN6n3bU2LmbJbaEVyDf//3525/fPz0GHt1//B42nfeAJ577MBjQg+/PhIqJ2lxVuin84Tgi18m/ezkeaRUFh66AifIjpBNmT01qO1Vx9HVhpTcy2KtDcHd8no2ggBueKek8ilPKs1KClCMscaqx6iyl4jA6yEGojgIr3pyooKm4v0ffiAqnLYUnkEeULdeOw/7DR+VxeHjA4+Av/b9qHA72PePwuwxDsGIcSKDY2+5c9q9zGfKEzcB8RitlxHVVtj67udXxHLf2GBf8853jSr1silNzqGuKJnEQ/GhjOfyrzn1nX/601oVR7F72E/1X8YP+DXvU+RyNEK2kfu6NQeNXsKaHMinBitTzOW4iBTfwQsgOS0VP07MoqKaBv4jtBlsUyKsePD4EQFytwsT5GXubSrgJUlyWSFJDjCpZ66hRQwvNyR6SeHKYMMs/yhoYfK1FkMjIS5/6jEvZWy5zVAkXtz+ejkp1zbei3d8KFmyocJJiJPowy4sAcSVKF7a2GG6senMkBmSrm+XDcSv7rh/ujMS0pugsGcWzJzjaMxhB1oyD3C+1fI+/zHFsZ+qoqRGJq0QaOd/x8bvikn2gQM7nVvYJ3GXeym0F97ILWqBJov5VjG2Oyv+z6E7bPw77gGTeh4OjKtGeL1KYhPyBJ5sq1czkIV7PYNgweq45M2o8bnSkhIinqejRRHWo2gbr9+HFC92P7x6HYhLL88YkaSGdZatqfztyT6V4jR3AYTlsA5chvDC+HgzHeWvSBv5Lx3hd8H+O37wCKhcBrwb5x7fnRKMJOC+fqNnWQiDxYLcIMKXDUBW1UGWhi9IfFezkiN4fx2BZYhDuTABEkhVxIib67WJsnNkQknuhRah0trgc0+snA4Eav8kSLfpKBNQmn92kyw+uG/Bm9LkNKI629mY0R7LXKa3UWetiMFyIVOyJLgaxJOajoQitevt19Tq+ev879pfgn0fIRjLz7gIfsZO15c6CVf6Y+wp0rFZOxvmpftAa1BQB/MY17utIzePzfoL/aokZf1GYxUXSxAB/9DJRQ18wg5jXO2+obRItk7rnwMPgDmJfzGgjx5ul0L7OiLEG/OL41+MX71+8Ovrr8bNkXye+fPWe0o9+Pj76a/JAJz9/+fb4zetXLyDMVPK4YKMBsNHgiY0mc9SAmH2a2Nmng7M4O52e4Z2GzD9GA9JQTGHtfDebgWliushxt9F1zvvaisHrR5wn2WlKgM/aCp7oA0J9OyBY3ywA8rR/hhrqcdpffOvr6iFkotdK/gTADhyw334bYOYAjVv0qBiDElAMTGU6lw6CzYVORQekVD0vZFJslLHrO83GaXMnbeM2DKqKTzvNswZ+G/+sUnM/wehVDDNglYRk1VZoDBBPCxBnIksys6Kcqst1LG72IiDmJL0gdqblOKvtJLfOHeUc01lvVSgtFBUYEH9CL6fJaVPxNkw+zd3wC/kb/mhBsKl5vEn+P8R8U5vjnCVV4YEnriLRsl7YZM6GvIoFZYZs3VwMJzl0YDKLigizZAuSCjOYUSb4xa8CbJTDQgArwRQmQ6gJPUlH+YvzPghQpZAiN4phoz3Ri1I9Knj+VHYmsBirRYE37UoRhubeQJArGtiq84QoLQhhyNNsL85rJnke4gaUuHM8PwPM6SPJYnTI0z5XfJQ25MxGJQw1QjXn9tvb7FCXuK2iHJne/H/VPNNkKqWHztoRKaVXuK22v2EBAGbQ4hwFjCbAQV7XCWoO6t9kS/jtt+YTOZm/kJv5iw6DpGu/IVcSB4rQ0yCygQmEEdkAhYITOVCFnihu6lKU5W//TM3MxU7/NNNLFdSE32a64mduVpSsXTA2TReK/ELriW4fXSfJZHANBrw6IBa6NhZpZc7ageCS8sxp5WF5guRm7Qh5+IvCJPPpRpIbyLafBIA1MGDnxJYJjItHhr9d5vNPv6bzYdodq4AyzQJTbBV5A8T9CiqD01K5M02w3Q4Gp2Qwal5oKE04o+UwBbgy5bp1TWuYBT0zvdU1NMPn/1JabydPIw1ZnoaPOHDythSoscofU6CGjq0WqM++rn2Q2ehulrhwnSmni0kbbbp12JpLijY2RzsfNHZ5Dgvpr5QNC68UuXHpT3VQV+MAhQYpjdd/PTr5t+8bb+za7cbTk5ftToNmkYnlmk79hZuhMK9eLJJcpHoUCt9TNmTMtFLg6QWqBYaLBaw92in3zbOXTy+Aa7qXoH54aoIRtKmMeqNmmI71Wyfet+7aVCRsXyh1SCiKqK3a5ji6Ka7Tokkbg8qevxpKqAgFi5u1UPCbwSqnuENEil/mItPAMBOvu5dL20yH5+qE0EN9y9E4Bc+vdy+f/3oM95YvxKStbg5Pjv/2DkLWHguwvz9dXxzPLH85fgNxYyFlSPqptxhgjmNFh7byTGyJwerIdzdpMThRqkdlCeO+Fd5VNVPatgc2DGHfuHfCvXr+jIh2PpSGYGXeaBessS0NX7578QLBN5ubIf/q6O3x25O3b56//AtW86CiOQzAMWflTsQpPPuiM1T2JOUlOgu7JPcBF+KNRlgshgxmwD5d90fm4H8zg/6T8ifpDp/eC1OqQzK+Uw5MpfweJS+0SDoQ4mltI/ZZWTaMnbJruOKeiLEwbvb3Qw9/H7aYsoxQqAQYdLe9nNZQTU9Qnr2yOvWOXgEP/uPt+5PXx0cY/Vx0FLWA2ei0uhY8HV4ldWtB/Zq2VlQ7zSt0kOzqxAsGO4GqQ7bxX6OpCEO0aGfs0BNmSXCnESY0nEGlA5a/TaMLeqYmCbS6/RDqjnc3aQ1HG1YcfGIHL3mMfqTV/E8QiDqi0fnzw73G3l6k/vd/tJJSVsvt7znlcHA1Hkjbqsich2Seg0DaIJWALjHHSsPFy/Rlqxcedg6gcG4cICeweGWIJBAVm83DaKJvPcbD33LpZhXY9fAUkf+A7tn5E3m4npTv3h69ff7LMY0hiJgA9B01jGe1aAMO+Mvxy+M3T188/z/Hz8qQ/sL4GoiGK7/Kuouk336TeqtazM6cLbvPwuCdkGEORNqkLlZfhRjby0RB3XQrhGqGRJvp2qVwb20H/E2ahclt8IzHp+c6gN0sSwcrCq6Gq/AGpye9ItWcmxr8CJhbHo9OxckpFSmiYB1Ncmd1BRVHmSdq3xoro/VqOv7UuJ7DURUyjxgorgEWeoAPopBXhFJc+JpNzHOjMHmKkqpVJgE+M1XNdp6a8rYFbrlqHkJ/q2PrdvmXdIwa/0qHRYO8VPFWqQDf0MTEv7DYXmaYBuvsOdJGNdGgNvTwLZAa2U7ixZAWbq108xSJ00pS4j9/5nXnT3/MW8+ZNDSHUm8NvABRdM7WDmXmjiANYFY3btkXGa67DFKgRimrHZzMjIn5ldQQqjioJLlfZ8H2BPP0+iidqVcWcl5UZvoW6wrmaAOjplTZAP2PXLKcfJrAaM6HWQOyaMW4At9k1Mdi7xxwPIoklenQpp5myk8j8tpx2kzzBRivK/+qs8ib++f9FblgcG1ygZKQwJ5miAMQQntx1fRev5hYAo2hGgFqtUVI3z1+dnxgtSm3bzPY8JnGRTEaZPMtGrA34i3mKhLHy4ysmTzN8+bH/hOtFed+tQ9lxg0lrOMVWXS8gZ7stHgzh2faZ2S5NG/aoZJQXKo9JFt8b/4qPfGlEan1Wx3utZ37/FRavD2Fk/h71Lyn1sNRWf3DUe6k3+DtKKqgHoLK7IegUvshqEw9BJXWPgQVpFu9BOViue4xqDSZFE87pfT8k1kiHJrS6xGhRem35y6d+UKTQiVo6gqEGaE1lhZQSdsROv7apkkap3xKz4SJG7CeGA+naOnPLTM+ziCzYcUKFbNhLlfBnAmOGXtXEYlVy2o2sGI5M9KRFHj5au2bmSMcmYVQVlY7oAdcT52D4KPi78kkuNRLx7Gd0apblcx4m+pcm9N9tfnwWKl6golcz7MsraWiI8RB1wd6lZI7TUPT1qf8InRlu6Vs9/ToM/1otzzdc6zDq6h63qJF4xuzIWq29XWdw3t17OBciwjVmPOx+qsKz9XPku7rucynWEXnWiwYIQK6Jn6rfNO/yL5XQ1k/yAwXM2IFE+PKaaMGkwBSEDn6VYuTKclYmbcJGS9VJktsmcFpjAaAXTaV4JXZApeLHOlr6t+Ay/B1wXApaK2wr4EdRG9vCUnLWzRDzTK17zZpI5P52zeKWLeiQiW2XqfY/MT3z6CfpqP/Kv4IhUN0pY7dK0YXlC7F9HOVkhtRKQsRmPwcYKxvlADMD2BjQjhcD+B+X9VNgLF3RSrliUKKJwK/g6UvCtA32tH0x5nNxSrUs5Miquo6KuWdlfT6GQYaznWDbb6tgLZzp+1Qu+WpZ9PVVtyrk1lSWWwMRPgYkt2XymZ5BpjQ8l9F2rxR6X+xraenbj/Jyhx+e2ut9OiIaDbgPm/AdnbkSYRjhC/54PEDX/LDzn4lGaM2uvvn5oTSsf0LQY862OAzOuymQR8l+ySruxK5vSVhiSc06/lHGKhhgP9MYEGd2Av6xBiTZqcTErbAU3m6WrlO4U4xsP4gVF2m4y1WHnDlWi05Gv1g5VGoa6tWIZzywOUtEyyOqFTX73bjeW9NEZBCmPlEA8s0hheNySXQGLuVon3lRWOcp5BwcX3esGaEGqrGv/3ZKAN21akgnUqTYQZtlwZNiTZm7dHb442KEMKSh7E2kK4pQV4WN6K+CKoXTpZcgw4gWvYDwKIoS9JIDTWiTPjvYkgMAvlcAbL3au+rA8VeQuGKYcCd3SWESk7Clte8966oRjswjQ5Z9Gq1RYHkyhB1hxl3z9zVRNVFrCijYtURFH0KenfRe8wUCUNXVNtukwzuqIrOwjMKgYkvcTCXmvUCT10l2Y8L+d7lpzyUrEQvycsLc6weEcDgIhm+G4DBa095hCDpzOCvtvsJtKhukVbfLx4isGgVsOU6IRm7SLiFq4rSaHwFtu1tfqvhv0WGEd3/wcdPRLK6PRuHr3Sai3F5nGu9R6EBvThXZc2b0z378FttlmU2lDN8+R0U7WVRWPQTo1aQYdznqLfxRP3O579iSe2C1jeSQN+imhipUR3RqGZgIWhc+rSaC6uNiptQVXgVh7vcjQTehDfVUtlbdzvibmxxowYmbVDdvIEBp3EUrqEUDo+tmOAhYm2VGVI8ViqdtNqfb/JV1hQbH4asx+L7yabSOFYTMyD37Mk6EpJ7Jnlb1pY9nZ3FV+vkjMMrYjAQbSpL01nhxxkRnG/q7tlvbzUYWMYMwBEyqbVgT1tXuIKtom+l+JJ5vm9Nf1oIq7y7zNnUI8lRHKcDM5YWTaD4ycnTXRz3zu6vnfcPm+EyS4I07jEbxyNc+pjveza/jwizQatHp+TM0RmMlkvz0oUlFTg8zRIt4dhQ5c0zTciUn3LYYSezcU6Bf5Ex1YnIioLuHIt4c3UCwNYfa/AE6tNOZGG5nTf4qJjC7MVw4Tyx4O3U0ZsXRndV1xP04vRp47ZXVeVc29JW7a00Ia27E1mKoKqD6pIOqmtUUNygo4Vi71a7Jt3+4GSBsfBfbyTdMMa7JyYJqzfvSBKu7ZCksDJGufWOBPLSh8Qfl0qMg6Or6yapJTFJ1/JZq9OUrbTPgy7XDNpCHzrlXMBdSnKf1mx7LUZwn2qMr68x++IKsxwgMNW3tmfpe2YBnjXwP+Cu4VQaA3V3IrGas+vRwxjJhBHzit+cbSRwAoXiiqvIwcunrpPy7bc9fnmrqjJAHwxBvheZ7XuB8s3pqLhmz8zv21tMJn7H9OIjvFHPuhQn/cLxIy+e4cLp71luMiE3ucD+9ttiUcqs3zLUWqBsm/to90Qd1VwLE/0l+/ivuEGtWyS9jwjHG14Mp3U3w6s6i4IgLsy4GzpcyXuuw3Gku+DlVmstMg+/OnoMV3254brsEl5FWEDlfnc8JM+GcImAtmYQtlGQicRbhnrykAeTf7gooKPoiT5f7q0xZYDZiMHT+o5VAvWQLQT0eK82e8iT/Qdx787AeMMjYMHB/t2huRYQjNxjBU2ugXZ3iwcJIpY90lmY+aaQ57X13DKpzYpoLN8k+SrDl0G6ABO1c7AB0ktfo49GADsMAO42uwjf2AvlErLB6RyFwVVclsi6FSGLV9lrbNjbHvY26aN3XL6BFQhMj9knFYSdw5C6xh/5WuOPfOox/qidiRxBlF9Lr9nocrXZuNtcfiYKHujVtmGW/t5nLP310JOedwBNYo1YTHqAz17gV3YJjyF3je4S/D/rjUrGR+yPqj7jUvaWLqlU6Z/DKTXY1itV9c0b5D5fcKh7qT5wZnGse6xI2W7Ee/jz8eHen3/HwPf8xrITbSpuPm4+SVBHqa5Um3t7sMrjElv1z8qd5zZy36sYeejGUQckrCpdt4pGouu43rGAnibVx+BElhQk0MD0USIj2w2zyJtSeG7gFzjSQim2pMkPJ4aF/lfNmoF1MQtGY5cXF59s1u6LHuCX9NQbgP2kr/4SpCayev+QompERiTJullTTOJJ0nx9+fbtf+2+A8FxF2Dv/gT7yO5+1ICGd2FZ/u/5f0+bO62mtTzDUjjYaaqMcAd12hPsDyb3TDItMDVPpcjWVDQ1eCiawSes2+bHlCrP3BucRw9aU3P3Ix49CMWcwqT1xucwKDNN8e8ePQp3OvFkB3uF8uvuC1hGFojaXKOGmbN45kUNUZihGYf5MTM/PhQ/QIEcxv3D1jyZsUDSebTbEfPdZP7vnUciTXJASOMaipQj0qUckS6Y73D9UMysZ75S7FzNo3JWsbzV/O+Pe3v2/5uiH64udLm3t9fRxVaKoK05o/04FE2UOBE0yTVe7Nyg9XsCpjDWMBG+Sd7BJCPWIA5zE0Xfag8qirQy/HN7+MOoWmBmF4gd/kir/IHMoN/29TNJCtMIyDfDmbY70yVHMEF6OEEmaYYfSMp4Xsvnc+Zz+gwG9LcHtXj1mTInxPboTZ1Ss5pSwKS9Sqz1nom1jouUwrKnR4IJWWyZZXpAjGk1m4s1yTjTa/LAasTnQ7iJmuXTk5Of7eUoVy+ZFItQr5ZCPXcl6OFKYH5MDYKmCOBUHvSe6QzgBtm5s1D6ccsK0SWjJ8ONWPdmkfJrz1gQH8Lqp9knfBqPD876rNlchnSGdtpDZXgaIhb4drSh0U+wm+RzKAcSbOAhkw4XiVqkCQhJ1RdIB7UEHLgEHBgC4o8p84E1/gPHwbKX8DArc27YVnHDyInGgLgRgaAkB1Vog0A0nAzhHHOIz5ugxP9d+2Z/CWFA2/9zPpy2rBJh1FOQu8NpOv9UA9xCCgtzCefs86d32lzH5Daaf9rhsjt/UlbiBub/ymi+wf9qeRx4iaVx+IidrC0lcazyxwwOAx2rFcL5oamH8C+uv763pYIvLGM7tvx7VphvaF8xXfsiXYygE/hn0RQwbIUHZH1h9WQglNYsO0hu6J3bmyUueeo3RtSeJU31u8mJuApB6uUUL3c5PUOjn3HSlCicmlR65lqHzsNEqgWo8Ue5GU52GuIceoYhaao/ubRzLqeU56u1GOc5tKP+lLKu01F+OfPWcrrF6dSxgHumkYGe8Qf1jPHkDOqbJ4f++nK4b5486psnh7rmz3K7xunumBFsGjT+MqNmPrkgj5wvjxrx53EPfbn0w5fHA+jPdPvJGeWOYj51En9RB6kSJ2HHAjeRcHbSuCdudWzYTTOYu4mMMSeWsVU/EF39U+Pr5hPG5VSDspvKSLvpBm03lRCvJhvU3WQXeTpSugYDw0V7KBN4xgp/qtijSYp/UPQ8bFIqaFxRc5jij8JkkrJgWiYp/kufi8surnNop0YJRK1vCDw9AG2WHErCrkP5Pfq6hDO0umWn4tfpDK1YkkB9XsDPc5DlZcLtA+5yZyfOTvXXmaq5jKe8/usA+pUYoJTuLs8pCtyiefrvizP8fwNTo6bQwEVBI/VLNE13TRHzrbd0vdpHuNq7KMHTyBclSYilLGs/x2dZ0Z89KVqmbYOiZ0xbN0D5qEvRclNBwxMpCoRxRuTm1RVSEC7Bwl9Y5DLDx+qPYHPsptmI8kqJerwzxUxgHeMU5kSnsEMOuoxjsaY6RIA51K8EJi05VqchCn+ZSxAHqiIs1DVg8KZLr+3F/QmbgOWlA1dXcYGW9/WL9wIpbPNOBmp8dQ+pqeRkFrtFCwpoytQWWGIZ4PweX1L3dnZCjN7ffP/ekGQX7o+A93aa8KMneuHSZSVafmzDJp5og1P+OFMFnarUUbeuf8q6kKhebPgK+ZVzgWPxQ8MuYuCaxUJlhqKHf1EIcztDI+WuULxI7CRBzWMnnSgF9x2rKGHhxZ5KuO3SoNS3vJusahgT7KZp+/jGTxVnRjIdmIsZkosi7QYugv4eUtGYIpxhelxaPkEqfUsftuzbLS+w3coC0mt1AdelqKHGXpSW6HqdDi8cnFOVpHrtFjX7moUQSxVoAOIQk3Y70wm3e6Hw7BZiDfldXAj8RrOKiup9Mp/DcX3xMs9ljkcGHSjWRecu2IeV3dXBl3Z5JrM7kcFulbqJ72iiX0OY6iwuJVLebJ2tV6Tunlx8CQAk9uh2Gs0YTF9ZXiBtf2onGYqk5nsrVIJaXFKGCDYi2NGlb2/69ltfqmZGUiD1XW7lxTAtRj91l0H/ZLIXx7RgW6trO8XSiOITtqYpGi7VFOs54oE5ix7sPYEnMfb3nhTVdxmmkFwHVSs7OzjcVUwoOncNOqHAKGwlQcYYFVoZi8GwR0/OEIk0qWLJMBl8LHnkeBAhFXsuCyBghtWSoqtDMM+QJqnJCbSbDguhLfPTxUCYZB8inOnBR/QKkKKLS0J2aA2uhGGJJN5oWVomunvTZDXnBq1hyU5TFEjjEuKK7mTvDkq4Q2WYf0opZ8ZJRMmn1B1XPnUl04YSLxv5ZHbxqYGpTYFNChLgBQENowI8XATi5NsYPJoL94bzBToX6bbqW2lxLzRvCG/fNHWKdAc9o2sNo1ocAy8NJmDWBUxej5+QyDEmEntaXgQOKyn46MM3XKEsFNtJXAO5hqTIhP4o/aAtV1aCRXRtUV6tBVqc51PYMkQQVsCObkVuL5DR8ne3IqwXHSxKMBPyIJFHuhrNLiUlp90zATe53LXK9pjqh+5wiQNQUAX+xeE84zr6UfLzqRxinaoZ9Q2dpEDbhhJC5KxkMJwAH9Z/VUY9JqGFaKHTAFs8/OHsBK51bP0NmXXJWP+1vcUyxL4bdiH0nC2f8/sJ/4qRvqUW/P/n7mu700aShb/7V7Cc8/igsYwBOzOOGeKDgUzYsQ1rnMnscbI5LakNeiwkriSMncT//daLWupGYpO9d/fLnTMx6qrql6quri51V7dQxMUyOKa6JhKlYH4vRuqf7JB3C3MhHPPASvje/8GlcGRt50XptEhBT2AP/8NXp//7lFz8kJJ//RH19vwEL/C6Fqn/KPH+sLO/tF/ysA+O9bDD7arKGp/7UAtD4xGuhjlO7titDlvtXM+dbT3PAU0ed0oLONndQrOq77yTBG8ZaTjaLdPdvPXNEvNQVoFu5E/olJgDw7UD6+uiYmC450ExMFxjYIjSwFj9DwfG6t8yMEh6O3eJzI/c6sFbLkHzh6vIQywPJfzV95geKLYriBCx9PDP/B7LWDn4ZToz+Cv7bavfDj34+Df2l5J+wzn+JIkeJBa7SJkkC/iLgx1/guR7e1rh/2JUK7OpiRFVu9jeWqZ41Oxz4IcPA3gwd+21G9JxYhS5+w+uQDeNn7/ygdKnJzNr/rbAYaKFdWf3DSSlYh7UPr9CVF+/w1js0/xqMK/5J0TaDQpiyyrKtPDthPW98XPLasZyFQhQ7qMGxlx8w/9j62i+xHPHdojv58VADGHhDc+S4FfImsPRDRQHK2743+h6WJu+v7gcD2q/j/5OoDpYJyL8E1vS82xoViEGKsN6cWlLH06D6t+rWeHBsr1yN0TCm7Y7GDiG8kcLhmJmqW98UKMNmxJeD/VkFrvhpJFAr9NemFSmzJBZA83Km/3k4l7YLh5z5Q+HinnS+OqI+S0ugpqZVcQxZj+dLeJo7UkP+IY8oGKKW5EkwFljdffDmSFIsfXrv0Kv1I28nnXvX8iKvimGNduBIZhSLArJZW3ZD2UyvAPWDHcJrG65E/iM7INxRnaPzwf/sKBRRUi4d7vxiil8xmGAc7V5N05FdTvr+U4FYJ7X9qOdL73/pZVpe2x9fclA7ZeSluPxWoxuGwgVHeTYno03N+zv88IQ3bbQU/T8yqANdlBl7LXcvO0mdKBwQYWbo62aXG+L8qALEZTJYYY7XxV2p8q+qWO9bEMuRr+Nr0tW5MD5JyYGXsFCreA4Kb68CsVPhR83Oq0TCCzUGxJqxrC7Ms/Q1esHWjxfe/TqJ0ryJIURmJiDjvb76XMzjNILCdXLfAm/EosBDvjlrb9LETcqCeYagXVYqqR/n8q4sg6F3F0F480aDo5byh7s0YVyg+v9/XV2Gozeq+tutFxG4TU812065HeGVC8WEpdp1yFY4i1iop3dFsTJIorTa8oxu1WESEKUk+1SoVdF6H+hM9xm0ZMX7rd0xkMYjA+sQjUEXSdHvIjv8OIRL0jMtLt5YWKkJV7EP+MFSYhywoTf5wVIIQPxMqYTdzhPnWlpZE2dhnHPCTF6SmWYQEFJ4y4r3hGJ7w7oCmPhhymG2fTPwN7YGT5McGCiNavbSRIMEGnvyaXws2d4bRkYOTLjCEOkuCyl/vIJxxst1C3OF72MVD4h2ftEzLF0GT/KuL9OF1ja2YL3yk2aH+Yib81DnheekBW8Yg3b7flzPxXBTF1JgLAwCm/kau35JG2EQKZRyF4uuoCUUaTCgCHviyp5uYHP+Iw3fCLJZXJDe/0jkkMVXfGFDq7NJmvpZfeSFXfknGUkoTbD7qZWJh4M7dlXtNpnKzpWqefWPanP7PfdRuQoqzhw/aQy2hgDqdwH2yHce+iYUyJouBZGfIFTpWjglQ3+gYvowLsaQLWrrL3C2X4pWiOKim7VgYzMjaZLw8V2laLYlXZ6gkJyL/UjEA5V7x70qr4MLqBVWjPIv+gv0xkAVhd+SL+/rX0v6d3VMYDdeYV/2z/j33vnv/Dn9Bf86zoEev1XojrpE0x8PX31xPC6TflfU06nQxnbfxLV/UN8SWmHKNr4V7T/8bcmJV8TzUmWX1Bl9/yXynLp72lGxvDfKOcx/pUe/e3QX2p8q/MxpqKYFU+VLOjv65MbIm1bnBxS6d7VR4eoXSqBqndeuzNYTNGk9YeIxyCpr+0z+P+uZdcH6xjX7WtXo4un2lQkySaKPcjTIey13JQwx2d3bbt+JUIY2MLxA5iuam8l3ywyk4EkJQG6E6J768fLjQDUZeSKoPaeYozr9tfWWX3Ir//AXfusPgr5GSquq8pq0zhK6QAnDER775VZIBdV+9taBDRYudB+sBHPCRV5LWHYU4E3EgeQKujns7sTuz6NNjIGvtwH4AOvm+gokUCtjz6aOFBFaIJMFlCdV4MxWYNzfo3peGihgL5DC4TTGRIeM+Hv49rwelabwbDxn1g8KP4ovPfn65jvYpmRpaq9/dvwGiiY3xu5jIBNkzCTVq1xM3j7m8WcT+7vie1JyExiZmjR4RivTguQWvPyElVEVd5fKC+e+KkNcanHzGo25TtdOaS1Fiz0FPndXWjf8/xMcdotqn82uTwaw8tq7UZ6fsxqtVU3KEWb++xdlKRoxzE798wwWuLlgdcZkLV2+G4whRa39RZ3iha/AOEJVy5d1OdtZWvM3n54b+3kmUt4RfWPbydYL/eDoSa4YgPacUXlYNaUYv8TSSXNltBZtYu1n4QySajAX8qqxpqCUouRCohAvh2NSFFM8WYcdpKhztl0YiHxaypxloIY3dr0j5Na/q0ILKvTIvQfl/1rTGWjoj+bQWmB78JwD8QcMR3mdPr4M6ZYxDMaAUdD6fFdS6zNLDEFI0aZEBnssMyHz9CDvovD5Pt2Ag1CxxghQ5k8pNGq1vj9jyurNku/m7/DfTNZpYegKKSZ6MWgNQRYtW5D2aAxr16hoQmokF/0QrKmjG/zklhi32nIKZvUUa3ovnciSGt9F1dGOfMMeGO54UYbZXutLDGYwBpZeLz9smp8gmMXLZXkOQe1/hh6+hj6LLtBCebcMJRBTfOAgAb7v0SD4nZjn+SERKwKqHS+K6Hh6I8rxUM8W8FRGEcBX85EUwqu9CD2hJqhcqMDh9BXRpkkG0/GRutw00Sb3gbkYVXcl+9w3DqezeJvA/CFPlHsDRZrWCXE1vZaOfAdfUUAlzS2McwRAZbi/0fxH9mXQAQC/LAAIAV/1tuFJ/Rbb6iABDVjvcQQGgNe2Q4MhimWzvWJfEirZNWX86OPVSwW0km7rlvwrq3X1/yw2peynF6vEnHn4XFbrbQDD1+u+d7KAgzLHmX53oBUZ/gC9mdDcKN2iNskPEVCQ/qIH4eE3eu0EG30heHCdk4I74e78K8Qzz1l1NuBBjp6VR1sSFVP6kTHHZNoF/vHGvtJcfsbXF8MvjD8/bVwz9XOKkVl4/q4GgCmJDwL0MSHAT04Qbhb2QxEnyJ6Ud0BiqbdQqLQFD5jOoh5VN8FR0Y4Drtlrwwt9A46JzZxRu8CqC2NrLn7HQtUaqXrGxkXsYQiWYr0EYQVvDixMHD9g79HQnsmvqc3eGWHFqCArAQ/gMp5db/I+u0bJpk8W9sv+ct3BfmnO6alYbDOumi7mhPLXnNIww8VhUuPkMEDpn80Qxsz8I2HK03K4cGpDf8OVMMsu43MpfTBE3pk+LnKnP2any866xSZOuVMOrcZyIZMx0Wmkx2ZxqGZ5aTIosC9OVgZeqtsxMBUZyGfFMrCy9o1ZeOVmjVoRXjQOz04+UlbAcy75uDYOjqxXvRsCbS8YciZMYNoiUFM2rjkGvBM7gGOTIyTALuYo5WQ83dTw0KPwpKFhvztN4KNJHFdPL+psLalGnANx/wKg7PDShcFH9KFri2gdA6o00i4MHpL9tmqpinbZyYchyaZss6MrXyTN8y0LQyrXFE7mwdE7JnVmfIvN6fCRlcVX2WlrS509Bsnt70Onn3Gs/NdV4UPFXt/OH3mrVGORr1uh70cCpEeW80Lt2y4VcIrtg1wqxpgsNQugzon2/lwV74b/vh4KPhdIb9aTmWLgeOgV8DxClj7oRfwqO0GuyxhoBm2oLCEEOtOWfAs7Mkb9dh46NHHTYGPxgOZNQ1ToWxAZNkdg0oXC2KPDew41HBW98RAghXqoDlqFNbpQe1sH9azI831umVVAmE6OjBqLzgvo1AQFfAHpezbiBb3D0AfujCpKrv3/0661jrXXdDi9QuS7dRunI9DfT4GpTGcSFCkA93WlOdnnR6oLSsfMsU3g3OhvHSL5c3dumccxxe51N64+SMcUijgv2rwQ0SgLJGafs9zyK8EYaLWi9mOXewZ662o8g766cWn1Z3dK5iGv+nAZtQv+/AKWbW0arpA/8k2dI5fcyPMhdVEPMp+0uMfiFg2J6/KiKZQPPpzkWIY81+OrmbjUe2uffj608fmUTPFawNyPIUi9+cYPK9eVsAGRy7Fd6h7Rvjl8HrWqC/SdHV2dLTZbJqb42YUz4/ar1+/PnpapMugbtdFHQ1b3Ys2IQYY1H3gASa6o2w6+Xh099H72Px00PxpJu6hs/9Ja2gtfCOdBz+9gWAcIMNYhdlzksol2/Jt6LdvcOsO6t2XcoaVEZXVELQptFxK3NiQmKsIu7YapTubnS5HyK9hyg7K8V0FpOoWZuccqnt/c4m1MD+csJoxXqssJ7jFgTAMgnUAuIweZQPHIqoHqIs8dxvWmRYX7tqvWticByMEjU6vgfuh4ie1OdHr5dbFOzzs5hei3tWjsH6AOwx0Y3vVeUBpYViIivuxXWi4CjSBresV/HnBy6575XDOo398TH5qnJ+l8in9ePRx9tM3DC7yIS9pwtMy+AZAwnw8gJQF5N3mTzgigFdI9ODfOr0/PD3yWU2yuOpz3Mi4CCKngXsL9xKXScUnm0/PMc2LdSZebM3Pk9llS7DbL3uPdMkhTZ58WOm+JykbwZb43ZfY3thf9H59aKwgXnITY9gXrfXY9VUczWmhz2a4+pWhV8fLbC96ZqDjZn8fjuIUw1WLd0RNvSF/Tjkse8hkAYbFh4iGFBReDmRGrUnWQdrdNIOIBdxcxPK+V0dv6kykqXAXOISP0AGtH6jgVFR7EeM1IHd299MRCGXFh/lxoQ5fYoaT61H3CyqjQ4h+ghYPdVWWaMfX49sXdTZnCXYntuLeDtVnw6JUn4vbnG+3Pj5Tu7WiGa1kiFfzfHYCET7ULZJlQ2zn2MlBN2jEoKr2oEJTa2Y/6SVAF3EZytsXHCLHx5vyODgsedr7ylzRpuaTG6wT/5FCR+2nKll156CMc81Y0muwA0Lb+3Gp2W7GODyognpzWzMWJWVBxbqKwNCOHqHpjboLqvBQpwUSP1nhyGaEsJTcKoX6kh3EUkYK7kcG5daG+FHkpjI9TFLIukRdB3zjqceBhGBzZcbcDJMwVp/Yxki7ZQON/0Xau0uzbBiluP4BVSq2sYo5VDEH96lpCnV3QT1oFswb1qYnuuE5OmxZ3SH0we3oajq56d/83V7bg4Z5SiuOIvo++ZB2QaL4uVHH+dmr21ODVo1nrRsE5qPAu3mJWGR9/AENSdzQkBRiHIXKwvT2dMz2yMGPjaKCVA8HtGWFqbId7GRBYzwK+WBThYUhBH2Dx5N0nq5/Mbm5/Ty6udnfv0AL8X3rKJwIUJ8wmGwEBslg3OG5SHzqrdQTnUGhvGxtKLveNIdB1Vy+bAM/3Ixv4bM+L5Z9YfGfrt4TPHhpvJb6RM3JEIWGWU00i4SOW11Pbj+/nby/HqJYzoH47AIzWEWdDHmx454sQmtRRUvTguHF7e8XLtIymYGiTWK8JQtnQWWZNF9gj89g4PEjmOxEEduwuxTIBTHoxWAC6cRliaPV06WKaaVT+Kz6GHPrdDFZPPCLY9UNvTY8Y85eBx5Y62Kl36RDlFRaVODoCWthAjMnKrTxdYRtBykDow2UDEP/pVr6iQzAZOFfEEwVAcdG7u/z77dvKIHiNuC9yjzVRxjOzWTT8PjPKgtiiApj7JlJTjXFEiZJfm7AulT5uwhcwYsKEM2W4uut5i/N07q9jgMAJ7h7IZYpdIr7YG8S+u1xiHgQfEiWAnL0r24/n7Y67adBLGkRRQR03e5TWlMoiFeO0P0gAG+iwdBLZUw7nknquwmj0P2f0id8XDkQKw5n8GUFdhxC9nvhSt7QKxOobaoS4gPOc140343pk6gYH4h4OcAjWqq88XSmQSeuSwEbqqIEp198YTaTZmvWnp9ecgM4wTzcrANFkC6iOAtz03NeRFFqiEUBZzLFz/Cjh0YwfF0P5BMLeYSBeBcikYy6ueRfvEIPRphYLXy3VOioP6juzlHorSI/TPt0/g8xcRSoNjLBox9HIfpGQ5lymEC5s6rpttkY4Qe2QgnyiRWL3Dx0U1CExFoB4SCY2GgOwmdrBzdHHRkTrEosDBuH/NIIEREyTPTm/kbhsIHeCgUzspQk+c6LcQhw+QyR65iUHoNdZMqYKhFVEhotqKYwB1VVyeMpLyEnWrN+lzEIKEq2O4GFutTGCe+qz/pTxvOHpJRCX01nuHWPwR8qbojg1zKF5weuUIdg5w75ku9q4RuUu4W9m9AoazoYD2WuHtPRrVkIw7iVb6P4VsRzmSqw0QMM1IJAtPCZdyJZMF5FSGtIE1GI12xINY2u2oxWZwI4TJsQWoCOTs/dxgO3VJeBrBr5BgXLs4+utUxuI+jzahJl00yU3ihaXuuHnhEkYRBcX02rBjF5F7exCBMfs+RnfRlZ1fnV8LFRm0FQRlCQ2sxdyCVDbxd+7E1FnD7jcJmlUQz91PeWeGFuavCym9wg8JewbBXia5UKczbQl7PKvkHEFF1KNwqUgd4FH0RBwLqhKLYHPAh1xXoPA0CvHsf1OPShcr5SPyzr2AfpvB8bAP+tj8Oxsn8H46vPfQcl5aZj6D+XsdzRK3xmEo5e0Z+rR001hVEbIyeZnWcY9heHp3E6kLHWHIYl/Pl53iZKnxUwckkYpBc7aiw+dGdybkzzBuJiPJllC695WkV0bqU10oRxUZTJWpkpBTVqMH2GAhatY1fqOQ3xMiD2+GEhQChJ9uyv+KHQLk4uV1HIfHBqjQaUZV8GZdGfGSZ0Y5lKswgFHcqVDKEv3GcFTmOsOs6SUYCsyZzhYthwsjSKTGh1V25VSsXjNDhWH7gr9GUUVCsnw6mHongJplN5xhryMnJLBZmdVYCj+xTjIQ21VDjlBoigyMZBbjBXIzgjrMJUN99wyAjwVnAzeWY0e98EVg1sjBKVnpov0GgVUEPYCqj3hsHzeDQa0UuI0WQDk4mQodrwNpNGDSpSt1LMEHqoT7T9KUEhRlNZWk5DF6CbOJQJ1K5qrIR/mBVqxzRKETjBA1J5vZzg7tIU3exAHcR9ZqZNaTGOG5HwLhcBGeKZY0hBVU0aiAezgcDdFu5n1VaCYnzC5N5UGwRHzJ/uW2JSc++MdIkTA7d77pnEngSmTBMz2aAzV7QJ+TBxf40cDYge5Zb9mS6eExSxWbCCGnlNmNHjCvcWQ4ENCEvIAOmmkx0b7ZFfaDUAe0smbKzPiZr3ZiYrqGBgmancLzQ4VVijBHPiLPfi7omVURgFGzCr6AiDJZ1LM7W78Coao4I4QoU1TYWCRtzTJa+LgRQZq/xcUw43UgT+l6wFPMjAzVIazgCVqnDkGXwvac3BU7MHQ+doU2IDavjd/UfhB2jmzRYxiWHbGIRjR0tmTdg21zdRIPMHfJ/2Kh0bg2JnpzDNJV1E791G7IYSHAxs3n4QmM4AHQ6ApquqGBaqPjLBGg8Xz8pql1kzwPf30AmJWSVjKiWqsFC6MYsVCP4pIc05HgPyS1ZXTUWqOh2mfMQK2Fa2xKAxur7KbcjeVPCsoapSDWH1iI6oljQtH8M0y6+7e8rTfJ/Iyb3SfF6K4wS9QxQDzASUFMhAGnO+ehUxEkZ2XNujtwH9tZ6HJOEGdIaxGkkeCik3vdIqpVMY+FVtIdDt7RTKeVI6awJ1PUTE2MNVhwTrfJ9AGcQFIvCoByaMsk3HRNMqxj4uK4viQwg7eJus0GxrTdXpaAmTiUu4wp4h5kYklXXP3FjKsGqaLtAlRmDUjycGWWXRUVAJxzfjSl5Z9YZqFdi4MMXzE5dfe9dx0KNLAm1e/03/8OWm17IvI+FBce/SZdCr/+r5j7UkfQ5kD98xDkWAZ1xdoJZxdyU8pDxMo9VZp7V6epNlbTabmO9NHRfe1bJ8S0ss/Sz9Fi/Lm0IbOLmBHg+Q1Xu4YNveSMeFMegHMr5nE5D06sZqd41WsZOaWo42j6OpFzM+QRjFt1EUOCKuZe9LVzJcJ+qIz2GufmpdlsIXcJcphoMzsUdGBr/AfxlFD4dQ9FKEoNJ08urw8mpWy5y1vBx91qpl1qdmrM3U3s8u+IjNh4xvo6fQiq2TWRrjKdRh3m0Sj24O+JllDWkqhh8HOdknO0Gw44fwEBCMdaS318ohKjqOO4AcEnBz6K7VmLdJgmXCD6mdduw4kSuRMESLt6M9r/Uq33HNY7Bg7lMG++L5Vszx8Fyj7ofQM3UO8cHDKWkRcJZCwJm4Sz81fQyR4M2puwzwqYcPVldt7UDh7+MAWMBbQvIqo5CCAoxQiYXvSa3fcccX+eLDPZdLtQvQsBAMJdDSHJ5LmkuvB6DskcAZCY5iRE3oiYCz/27v3/vbxpGEUfh/fQoGe9YWR7Asypckomm/6SQ9yW6n40nSM7Ob9a9/vCiRpmVJR7I7yTr+7m8VCiBQJEhLTnov53l2p2MRKNwLhUKhLjrwzV9edKPI3UgmSQj6VbXSfEpOYILfRc/Et44/LrrRIFIdAm4J7UDdQcLWI0zVl7CuKADDFso8dQKGXipTPojuLDIbA467ZTp3FkKrMQOAu4Q22AvYELBVVZt/6YpldCzCzbtpi7R3c/My2EvlvsTfxet19iuqjMzSL0Y/EuaXsFdASYWbys9hTc04tN6efNngFDFMe8nuyYLEBGSEIHZ7eU8oJya74nS35yv2PkMzDMQQUUTHV8rpQMowG0z6wefzRI0D3SgsK5n4Am6zn8FXBWCJ79EW4hw/tRseAIAvYOyTjibw9KfrxjFsWnbcZOXiwEdcujgmpXgl5gaeX9mM8CRlV8A95+ZEcTIvJHrVwbcZ0BL5CenV03SN2g1DqNg5yc5+WaIqwLuFpr3dhqokOu+MBkNWeGcn6wNfu0bvO13RBxIqUIE5TxBrFnOzcKjdFkoaZq4UnLnemzR6b0kujQraDyokFenTNvUpDEPXVwOnP1qDWXkB6a5RhycFT1l4DnVD+Ze/do8RvSXRmy3P71fTfLXAw6xwjht9llOVQyRhypoHx0utDULp0qjw1u04SmrwyZ5QrKrgt5/CPQtyxp/7SgeXNIahmMvYqEHjIYim526GkOLlvJpyDpwqT7uQvEKcK1Xfz+h9WDrW0niaYwo3mDap2hIX5ehw3M1zAqfqXynmoDww34GL4fLj5wXxJDju2sFZHiC0qjqUcc+xh8rlINThi6MRqWP9y9vXP/eV7UI3dzXkwzCGJXmMpgxZX8089tDuRUh9t7pGKSS+7o3B9f7eo6NHjx8fHB4PsEh1ksIbqC4aIEJhxQ/Nj0f4w3XkbddfRs8PdNzjWzsvmemCaYWtbXgvZMVH4dnOavwxxlca8r0MDyNFDV1J0y/r/6gMGXv6hyL1RVwAjzsZnhqfFcR0nexDkuh1SO+BDnWAHD7w9f6s6Ck4JdLsCqUbkhqmCDXHvOj83lPTRTjSndsZ3lmrSRori1u61gWajSHEtLUdblmbukBWK9u8ChmInm/Lva9j2IUyhHMr5stqtHqEhOX/CZwvdrO+Vsdf9yFfCmgINsonk/hs9rEbCtgIBuFfjac6DwhWc1uvnr8MitUUmrNNdtzSodvTAvDBjw3YSFL0FFI5c/RSPZao3xq5XNySqOL+bL4mTx6VxdI7VvkwWCsAIR3ocHQ3uDiZngIVQoP+k/0pbg4/OcC+RwlPLk/mhm5NFIxdH3/hnlCAolwvBmQWbfTtTSBgeyOhZOtoWPNOgaQNSQaq5tbIdtZn32j9MEb66/LnDAJyiHgO/TSPCOog8SPR8IRRcCK6wwbgkmjUyt2S9bE6PIYj6Omzcap36d+H3dJ+Npd4dDiwB6MsYblozJWdXdJbRrb4XNunFtdh+n9Mp+gc5moRoOgz1W/fU7sHZLBWhBYIBbJfWeIeY8cy7yue4PUHiiUs5DGuGgM6eCw7NbCDx6Gi+4eH0IcxHKQAGaRlz3SjeE8OS1VApQL4Fn/iZbAUEXcFsiqzCXATQkbHjx8P0eEhnnulNiHaH3oK6ootHPCAWuJuLpTVBAv6g9JgB7N48mL7XvzJo7kFM/ynRnEd8SN2Of4e8aV9PIKjuI2FkHROV3YAEodKEprmh7KaCP7gKZxBFsrGrSHFFMY1GBwd7Q0EYjUqIX/9alMjJ7Vjk4dlcsg5X86C3jIW1N8FElTQ6c+yPPQZuZf6fAxOqmnmDsPc5FeBjE59JR3vf+ocgJWIzYgHewdD8UAPGVYAyEVhkV75l3HrCJTeR7AXiJDOIXdlcQ+l7PzrGjeS6J+bfAPjlSpPceBYCE+mUEcXgaLi5Gp1enJVaB5Nc2SjR8CMqQMmmLvjIW6sDwcOljkVccqOT2LPUtffaAVvjZfR8GY4APJT3IP8fEAiUKcADvkpwpE6yBv3ExonLdHzTh/0heG6WWi2CNHOLPjGPdNsWk5VoDr12O0d8rAptYL+TM1FIut7iEDZL0s8GsdAKmrdoSz9H+CPXyFcbFekyOuNRK+9kf4zFbAZX/4uewLAi8OlVo0km2xNN6r/8CUdhs3LPawsN3rRwIX5YQHRWd8ohe+/YkPbYoGdXr7q3TYCYu5wfZxOFFkm5V2m/3ptPIPd4wyh6RayOn1/+MFyDrc04TtLzFBd/fpbOZARWyvGOgDE58+FmTug0LCDtPjzCr66dAKTiHN1GVQWqRjbJTkToeTrEMnqomK7dlkPJOdiIiZv4FnQT1pxxJX2aoX9BJaBgyp+geS7Y9DyvCxgI1nT/pZ5QpwObwCL0zakNfAcbYuxF3FTQFx9Wz6fjfE8x+AvGAKClSAWR7OzUXWOW+Q1NvlmmNhF3dlxh6/k2HzQRpxdx43KPjusrS9yq7iwLgK6Nap8ZblUHF5rtWwT56EAa1ezp5LE5tOmwjOwkpRAz6V6ffhh8flHEGauu8LCCDUzylEcNUsdZ3Pk6RqxErXmYwF9StHOM9FdDGMtVfNQhrROEwZ+atm+/9pnnJNJz7SbNp5/bp7ygawO1QywPrVmSJtNLWv+xsU5ECrZvdw2IMv4G51be/fGfcEx19clx8Ob6T2oS0OEo+oCARPzvCvyg0jIzAgcYL2jA5Rwo3tixbRFSlbaMjExXrl3dprKk6yVljufLdZAI8NbLSbFm+2T1Ufi1lCk+erZEcovXzyJ6A/4CKYf4KRDXHC5o/+GTMjMXn4v0897k/H04+RqNDwE0VuM7zcfgE3Z+zJa56g0VuGX3dcTe3CytkLOioqTDOpogMUoU3gIg1RlPzs9yYAJXS/Tue7dB2Cm9vDZYhRB36gWPi/vW+pVkLOPixVI+i8vel1YixZoMvw6E9L4URwJEd5VSFuGYCn9k4rBaHAYLQN6RONp731Zj0CyzLlszFPi0LjTcgIZOcsLI2fhe5KL1yyKsBVPk7TXLMYTVkbOxHdm19hcJq5LNxDXuVUzaR2/hNWaDwX2i95teDu5p7P4pleZ27hlRk0xPpc5nNhz9Uhu05ynvG7qzcBHPJ7FX+8wj95N9OHyI8DR44OTAE/vlacHA26DOci5XIY3HxfKARDArpXSCrxgfcGAnqz2uFL1Mr6DF7athPGGfG68OZ8bU+TUYTw8Ok1hmXoh8D7i40L0UvNmAV+PhJLtOUopXCWFK6So5r+slXQbs4rxDPXKLtXHjBSQx1q1IbEqIvj+CZqtCTl/iI1SRdXukRbj82d9SKlDKwFnNHgvHj6s6Q4cRDyJK8t09iKoymiRmKaxGD2AYJ2PWAW2ZSXrR+rKe0RXPdwD6CQSqzrgFYxxoLQFzGiwmcemwYNBpcdaR6cEPTgsQY+qfXP1eGyB4yqYUsjFyfz8Wdvsgb0efnlNwVB2jJncBmi6SiEN/5B7Y4TQhp1jZtlZqVbvJuyXZ7keV7vKNH+oLEvMx9i9cUE6xjDnkK1YE6hDl0L2bg07EXKqVpLJe7iz3dxeeLKsJk9TJh1lWDH2vIInHsmkwNh7PuVLlEu2GsSReHJJW5cGb+i1w5TZx2eglOij2Bk/9RiIr8sPDYxSjbD9RareRD6IOJbZT1V0TpDu/AWibAA2dWEb2ku2jidd0u7YtSE3oWsNcFxtCl3lWlUe7GX5jmwViOvqP2w+qnUSg/qXt91h2P80La4mSTQY/Cndz3vin0U8UHeOFV3jfri+ukJpJ5I9ynDmZ3Biyd/ODmR3XQK4c3wYnrGUr8nxocQfiqARonZDlWJ0XeHziNXaxVx3N+sCzk6CpDAc1ZqPwjP8awhr1wdyTDBGZc8Hc4Ce5/CX0RHssvv6FegEwhJcK42xbkoP3ocyGnBlEnrLOYL0YSVd+02boypBksCiRAdhX+sVxcT6V+7D7meCEGeAb9pXkMRmDjCu2EBdBQBxUuwvP/qZJptPuQ3l1Q/cdhwfb1Y1Tx9eKvIS6uliMGfAyL9L+vtvYWzjTNEP6Cwq9D0xYbK6Ir+EPRfmSU7Bmo2uH3agWviBt7Dj4rLwAhiVyK/QkMi1SucUKIfw9GYG5B9l33mfFrTiWLMIxR7KCcCD5lmGGlqTlea5RbZAQ5pRtPwcwFaEtZjhfQd8C3wRwf7p7qibq2KmN/8kQqlqwFuSajbJL5UVntE+FPVVAQ0wUO9C9S+47eDH4EJfaYhJD2PAH5HbMgIF8sukoxekJ5afhQdmNv5wlejF0zAvOIzMFAbzNCQKTGWrjETmvJ/URnFTrydyMdRH3a1oF/ACpLsJSncP8a9Nwp8exur9hXnJN1iU9X1nT3tuKcfGZyxPK3eVkqbyu4437MZmkKZyKFLvEDm53KKS0HihrtdlHqVMXEUTIxyc/Lx+M4Kz53pWqJcH2Esk+XQVL1D06RzIBklu8wTAX85JEcozpbKj7lehuUHRVZyekpA4oHtEvCn0MSJXH8prOPkAzjboIUlcAEdkWrZpDxbruDU3OxI6ippzMWfp/XARwOGZQEhKOj8wtGslCqokRg8SrW7c/+33S7wMqbOS34/0QUec5YcFHHKPThL3HMRcUlaH88e9PEFJ56vLr1Vh9QZXveHpt7lyvgqZkmyIn/84GBUJ125TDqCdcXpKPUggy1dbai/Y6Ap6U43v/KR05pjDNU3oqrMrFOCqeOIoVYRZwd+OzDFlGpG1xat1svsgcpjXdscE8CZyBZqkwI3A7sq/lIBdRssw2Zz370WrBZWQTe/2TS5hsITf7wXk+I2oQZzHeS3tGlf4rGqwfq/FL2ZUzWMwrdUKB9bxsbfpP7Wbwoim+0TOLwW0qHhAIQvVSWn/mPutq49cWyF71LBN8fWreVTspmX0RJnbn6UP1S4oMP5JPzu+Swe94+eHf0oRqTHzP4HNg8BGAArbWHKhwF4ufQSE9qMLKh3BgqxTTkwq7V1uXKfGnjliJ6vxN5n125cBz94NwPokcA/vgqObEGu/FXtM8+1QtvVWME/jXjw3jfpzbWPebO8I+Z7B+r0Zpup6DtVKVSLH4N3/6LIc2SN/vq1/Z4dkXNEBMXZFMuC8bxZqzgS42J0d/FeXPC2UroiTEsaHuFkgvbKHuq5ILGtAd2sTBDRUeRirvVdVnnwjKSxhHgeqDL5MlRU8/8whLJeSY3YAStOTAP3XBeaCcMaeeZyKoC/feiqYalv1U5gaCow3wJ1fPuQmpIPQruDQUo1i4UZQSb04MFrhyCVyaUJxa1Ebp9stSVk33GsmbfuoxS03nSjYji/gtlSfKUtGZSpT96Xx+5/M6KjSXXMfciKRtCgMW+sByHpO3Pu8edsY0NLyN46JDsRga2jVmYnheCkVSOIMPshDD37aS82gZIiQFUTvr6gTCWXRwMPoF5EC73ystHdHz9d5uhyjfK6b1/SnsfZgJ1BNWbXp0ltCCmWkWMOTznNIQGDSi5V1gXAYxjWxdl2HmmYYwhgKaSMZ1Mr1Gz3lWBWj81l6hS+1f/7l5TNu2xPS9aZ+VtJywQ0ZFuZa3UigYg+cFOqJAZ1s4V2d4u6KO2WVYYyxanwqtxUp1zIRQdquQR90nzzF+HyH1Rox01TRqtKPdTxVdaTJY5iRNmV2GB0IE9smxNzdcOF8V7XeMrwleaVZNqQ3QJESB6sriGkzaMHw4GLbpfUIM4vp8D9wo0uiTaqwWGRMALU3INm5ZhVGFwnGpdimRl0TrfwwlDNW4fAbK4xC+Rur8ODCPOBwJCOK4bTj51UAlWr1HSd3l2vo3s5wq7I6doEuDVz3PVvGsvfvdRh3ljAPE6CmksX6xCuRgIt+mflWRXzfQ4WGPYxNGcazMg8ihe6ZwpDxW5kBvYBv3AkTTIONGyhTstqWpJcVE8p27aXGE6Z9TaTZFGghzbd1dGjlk3d2NgY1c0pUaftieE6CX5pLMHMMtCRcyIcMlw3TmyyNdgRdL3YwgMhpNRHn+H29SoyoChPJ0jriYFWUnxfvK1Vd4CG+S8oWIOFDwe+7yTgoCCZY0cuMLh4AP3kFubu9CT+OyIDXVbyIcCQv10ePBwNEMY2LJcJgWoCZwZhyREhF1HWAXlJKYNFj6drErieCtRqu6MHDjQ/iTKy1XkmwUKFDoRFbo/YgYWsDTAKiTrWxXFbTmjKCK8oR8nE7TWq/KgJGIa3cCL6dZpaz9QMGVFDaXkZvWnYqu5AHc/VvQtp3GkQjddv2C+8kztXbnkH6Vig7YCIsv8x/my8+lSZ2y83KEnIgKYZtWqCN0ZKqQxswk4woWGaYRFQkRfIWoFATIA6Hjw8fHz8cPj4yoDoaNq9mw249TdEqafrhSwXtk+YV0TFvW1ZCVlbbDboL9GASWvNX1DepOUEla/4JG4Jf4OY8Byzhdr08mRhJ5hIkmdDIBKKU9RnNhalRiS/X2sB0Z8cEIZoiu4bS7/1P2Rj+WefTy/1oH7qxt8aOpfDh9doqdJ1uz0p3WjboMqStlSvMX968VEO83qyY8ZYCcOVv4Jr66nIpUS9mduKdRzMZM5gML8D7GbSufiKHD2xw/TKhwE2AY99GbazYiR1sJP0jJemXnV1EJOfNGpFJ7PaugYyHuw2725XX1bsJk4d3LCSXvl5awxr7K7T37p5buc/mRljJSSP5mSQQqPuNK/LuivqThqLhIp70ENqAoVMbCmZNHmPW8A0Dg92Ms4vppiCzeJ2EWjepCJXV9BVm6LdPuF1EAShRzLRNUDJQX3A65vRFr6xKW2EE2gr/HNN7694qLabXa63oWDYllA33zjxbL2PR22CgEXa4I1QkaeWNa07eeIK1ccdzCed5noLWMsmJ8K0URSrZOLiep0aAr8hfClZDn/Rhu8bnL7LnRSVNMAzTl/1AbyOvtRjKCWJ2MyI1wwivTuQSDSOYEz2VwVqlkBDr9VsRyoEfDiin2q5XAYZhU6D3uf33JvX7f9QkAMgTG2I8Vv1/BobFpDOtj+QzgNE/g3GaT4DdIKhz4K2B3OcErXy4g9p0yXqsZfDu3U/IZJkC8GlzxajS3A9fMNQ+KWlZBiuHuz/lB9mXACGCtQKpc+NOMPi75CLP5m2HP9sWpGKgPMHwO6D/occeIvAgm2xXAtzDKMWK/t/gqoK9R9eNxIf/BOp4s69fUZM85LqBmQ6kDfFReAamiMFgj/8PUbX/6slT2HTQLnRyoJTT014PR11uA+Abq7WdidKN1Uj9LBQRKX33007BWthmqSwSDsuwOxFKwDDhJWjpn1EWoMv1UozKD3R4A0vduXMkdSoOeUFKmUKyQVf1K3EGrH6l+7vf4IjPrlq9XUVivRiI9X6Yqvz3DW34OeILQt2ydBu/tE5Y1dzboK0eUOzlM1llpYFcL+jswNrVJ+9ua52syz28fr99+UyJldZn6xGjmGF1EQCD61P5RtWshONL5f6l45nV95aEgdjr6avzwHQInbq8emq/Tf5OwJMv3s/75+hiTyfocfS68/6by3zpyTo5iUK9KJhLjvi24GLh/fYwWDciitoZSOwMDRbgsHSBNi55cI1OAhklHCHKYdbLc4vwqm/KpeP1svWi4+mZrWW6frnUu6abA+uvf0vyrQOlGYC5jP8ZxgW3CLzF+Wr/SNnBPuhIruElqFquJyBL9HjV4JkbCCcWkB3TOh7FeV8LDoDss95MsHkopw56yqdbJdXOc/wLVJDHfdRYMHMtJw2iT9+rvHm7Y+JkOhfaC/IzwbzzXScOpv8uv/1OU7/Q3PsKQfeHJCExdXcVoqPKAMdVslIw6bjFf09qtyalBvC74oP4omN5Q7TBUYAX2d4sUHgN2TzXYkUtiy/8dcneyMDuMqBZ8CyzE1wqn6NGXKL3BXAvvn1z3LKjr2lDIlRJwdFXnJCgE9wT3t1JmIZTE94ovkBPlx4JaiLh+5Iv3SqFeTLhwfA3UGZ5sgLtR2+t0O7y92McLHK6iH6EPD5YF58GJ6acffIyKSSpCqX99tUGaGGud1IpfOE0d6rzbNahnOmyFTvLWKmZ5F0J90Ffc+qKaDwgQEuNDRmCx+mdqZFjopfqHVshpIISsqF0QxMOOqt94smQ3oIM2RkB9EJIb9f9dPD21mWU4XNTXbo9AGSHv0c9HfW6O1wtSJKhTEEiKU+ZQ9IF5+GuoFwN8BHORBQ5VBl4a6jUfnOaDRvSVK29DcI6DSouBdEKQEaucxJ3QVhYcscaFLT0y80iRiOBifhjgL/O0lGu9IsUVYXrO93jFQWRnrSnKcy0o1Hku/rf1JXHS6+YVmHKtY4iE+c90dv0Zdw+E6JJHZbMVSxLGPO/jdMViEgwrSsG8I/KeQWPoBNIjsJQB//dG1ogKq3kLS35L0Aatm4DeEUXTwYS58PImDjj6HBoMM6e6P9jvZiLuKLJ8liSdIXmtOJHwPDNB7I+7a9/Y/qNPgBYGc+KJjfgJjldLjUijvRfqezLUcA0onmR11e5+rQSKYyy+u5pKXWarhd1gJdvXxuA27jqWWlMoyRFtmBp/REoM+vq3GwyNQNJ1jZNqJsc+BQIWTRH7+QOVb2oGGXLg2pJaRPiK3PAYW0cDy/0YXjH8ln/Jr5lJGXoMYxmDTf2evlncLq4eo/eDmML/tpTHCisRJLfs+7D5rrREPDedRsIFDPs7TUt+85OzVsLxf7sovvUYYYRYJVDK3pHhReGrqcqwgERBAKD18MLH2zx/f+Y73+U4j9W/zEXYSjL3c6MbvxPQy2U8h5vpnmcN3lbR/OOUyfLmOIfgyU+HO0g71ROMQ/RDRO59Q6mRQKvyoV5yKRyYLGfXo1WWDgmSSxcUrAQ81M8OK08tJ7sU34FLjolvsAHKbh6MOk18eLDU/NQywqGsQLdV+Ngo7b+P2momiuyVaDImP7dcK5QJd1MlX7n1M+c7RMGPP9nOpGTo8BxqryrT2/YxBmM/DXwMl21OcLdtoG85U+sQVefQ6E7JBF3kP3gD8Y0rdsPFif7v2Wor/Fd2hkpYRAbqUGBe+E7BMJJ8zvQHQ20lB1l4t/WJEzuhrVtYa7WqFGCRisY96Ro3BzllfEn6hM+qv4ObCDMli2zAZqXqgMVbNh4jgyCo78RjgeUFqCb8dLRSZDCDReVaNGsNVl8+LAxfjwKjHfy9nltG6xSkSi70n0UwEqtqhvhWzUQuvdFr3X2h2LW3ci0DeJo9Zbdd/japXXBAviJhl5g5jaGU+16ieG6x8XuKU1XqUvBtyPhmpn9uuo2V68opTnI5/rn4fVvMle++50jSoSay065wg6C1cizA8wVV2IPjaQKcOLqxT1aNKpjlpaUsFhzXcPnLBoNvh0h9Rgz27FvVJAJ43YMZFeNNkiy9izJh3qS8c6PiZzQHTQAfP36CHJsXSZd323B2V9bdoj3YD8qMDhEgO2ZL44xpiNenLFyqxQcJlgHUNyRZRPel65zns6Q692+p2Fc2R+JfxvF1Z2RtE1e7MHspGmlfXvMt5FaJjGM/btJ1fTmxx9M0G0fQoQxd2nYOm+wLI00CO72dh223m5QmO24pGMsTflu9vS4vYW2Lh+Et3egGLtmklX1WV0rZORamDSSb/EcjUzQUAVf6q7VYI0VihrYmvtSa+x1m50MNQKNVY6gIC/NkrMxNimDzGShKgdl2DMMzl5S7FiTOUJXdTuEHo6cS/wGs+8Y92Qyt9OIuLk9miS5soDxW0qRl027pMyVRRre4CapeY/gDjmiY2ukQ7aUPJy9MHaVNmkQygaxRg1UubZEglWvxAywGs/CA1pFSBR/G2u1Y2WsJjNIa2sjCyWJH/8ItSNt29/SvqL2UdIG8n6Az1XgSuM/x/MzR9fql/neB8ASsFlTqyF+xA8124MQcNOB/NEPFoVKLtFLuHJUnRN1WHt1EyNXP4ESc0wWMxh1opOoKLG6yCoaxt0t1w21+pW9UbfrY1nMJV0sZ2RPQTC4ooHRb4RCIK6TprXR8FdZF0KloSTHUjlpYQnXxpBBV80MyWUJc1T19SuW+BeQ3WKUnq4oxUQkxMIuKnikf9bKUOXSCFhtZNvLku7cDxFJ0nihXLFPaHA2kJN48geguXHdrYCSRwNMWmKK/U9DUJuriNX6WBXINA7Qv2pW0H1JY6ko0sWQJ2iHPNaQFL69Cos5joYnZgurdwXTWfR6agrnSSSXSY6v4uCBYdlXfXyLsRqUj5DuPIFzPzr2Z4HEd0JeznEXfQYyqVZJPcOarhyUDl7wvMM60EMY6A+u4cjpAGDIO46TbH3ETEHeIXrzntCD12zbKENlz5h2M4r7zEUUf4+O7MVU7XRMMLezXrfkOzJ8HukJt3VzCUQDAFyCqqopgO+e1jKBczIAYjwX8uYL7NmRgOMFpioX8hIfY0ZiuFdMP06vhCzSLzb3NqRdWqsVP1itE1hppxZS+3MSSAPTJtxWBqeaeK4ctUC9pURXdFehkEI9LQhfEcSj24lDUBWXJDR1G1n3dRNDb2LPoeZyPpZap1USxOxcbflfbRFmFrv9YX7rEEMirp5uWJfcCEEEK4BMr/tth9gdSFPl88+hpyFjTu0dogHayF7abVX8UvKaOdYhA8Ukjshmmp013OS3tiPTJhF9zk+F9+mFzOKsVQAvekB80eZWKbJ0BSl/5/59FcZZL+HwRNiwxB046yvs0D6sAT8V1KvFyihSegpRsOInVsWRUnSCpwT1zPaxESQw1qMW1qSQJKBAdm2iSPREkWgit3gpAy2Qwl6jUalUCqVW4MCAL4J603SjKzydIrt1ITu6Cvr2AOqQ2u9UZEUNTGmY5C1A54OF1gmNK8wrp7SGyhkkfjT3+GclaEdgSqBvgwMeh7S0n/4J9XTVsRDoPSFkVjoFZnIgxvyRmALv306yudAyYzjm65kzR8jiO4doLpU/dJD0nFR2X07mG7zeMsxJGvqL2G3UVI7frcgD4OZ3q4Oh726lK7HE2CQMtKcX5udUmi9XVrAu7bri16jvHevM2MiB47cTYIuVFicCodXWk+USmA7MNdBBBsw+IPpsOh/De3nwDsxuY1RpWa2ghr9cT2FGxzESB6ypjCwM9IVzp3YM/ruadityRDe1PMnwqqMK0KNqmuQ70ZlVPBwZbTlA1p0hOVcW8AwCDA6khZB4WCY+mV2CIkiAeh8q55HJsUnRcZn28wJcHmMiBu2JTrEP6sRwbTGimidyv+51PYP0doTE8RnNJ9plrz9Q2OQ17KKV+tVdh2hVqUDByiEHUCiLZzq44AzwwidqDbwGuvEJHRcGS23eNExoMssckp+BHv0qXa6DTxOQh6BqFEzpz0h1goUBXLPqC635dIh+I73qDZVl5iEreKa5nxjEtVeTP8jop7vFxRY7dZ+LLZZrudgGvjstoxhR63W1BEOotouvC2j4ZOO4Lzei7gLtNImMII9GRNVEUxIUzFJ59UkGqPz4P+2qSJc+dlHc5AI4NBdA7Zl5sfLdAZ/k9vrXce9/dPfDex9c/+ZEn4Bmymv4KGuMJ/qWOEO11cHJvP/z2Gh7Wo5klrjplkcbwP+N7vwH4y6MRpGKQEkHO8q2tBm2TjFe7+HzM5xfHABT0LnAA7SPxD8zyL+m/DAu+P0UsaTtforz4NxP2fWUXxDnjRdEtpQI+P0vi9UWWi+One9xc7zuzepXw9uC3won7Fao9+stOSwvHOYCV8HDOmHyxqyTobcl16QSONdUUXEyRTA2wSY8ECdVXlmZqbJJTIbFtZhMgXpkZeWxLKSpzT1tGB1ETsy9mVqqd+bTH3SqPpCsouefnXFWcsolYRdVk48OgPTv/DdoZNDip4rg+NWWQ7bXPpBDXrsTQdk9bjCGMt5s2eUeo3AYAMPw1FbR3wlyykL8GvkQ7w5hoNXanmq1j8Jdr0Yg7zuTgeZvTO7CCXuXd5vhxKr16i6zEk3x3o58yfb39sxP7ojwZvbIoBsqr6HMFNKBLMvas8NXuLyNu4BQtg5IHD9d+bPyRPNAqjMFYdQPFu2bTpN6ic9XSnspoCu1gYuNd97BCSaxiPxo02ypFWaHg9JYyHjjII8jqixq7mD8oidX3ZxmZuKbDuxAoH6vtbOGoW0bKy4DoXcxWQ7CJHHy94aNldKS0uB4gNPwto6bzdflwr0u40x4olNISjtfKe9dcEspk9/N1mbn2CRj1oRlytSf3paBKmba4XZZd2prtmlg8PaPcW7dn1MDMbvycs/7N81hZpFenF9ngHHQhlNKSCfL9uI8na50FnScvbhTomc0NvID1r9mTsNZBvNpajxRPmCuKMMbfS2lB8RqxJCs3zQea+8W19cMi/nHyorZNTVF+BxwYN+6UilfFivrwZRY7U5/teV+TRM/AF42tQngy7lO29KAj/sU5dMe8k/0J2qdzFEkvNqYYMvfYpUbVWfiX71ZLFRpysGX2Q1BZR3u70eDxzYNbyNzMCnvA0XPundCh74KX67XEEeEPI9jJtq5eKoiMG8NemffWYWGUwomOeT9OkOjQobUlVJ1QmW8nrtQXEGM9yI1AvSbWzyIHWM8SVGYCnI2m4Jso7iwsYoTAMjfY5pDjNG5+0XCE5EAG4/vQe70A/2n4M7Lr1H+isyM6g3dntmuBLbAKOeEVJHjxIJ63408ZV5dX12nwMNcTXDb5DpCKaXupZAcwK4SI0E+KGxK2PNWh9FNlldgF6j6jFEU5qShtD4TQTpH7Zb5HtUownjTDu3sVMEMrj9FTyEpM95sBg0lGpYxx6OyDASnYmHCoEoI6xEMObe0/w+w6+9CAUzpi9C7Xj68uil5E46XmkW31sEUGfTVW5xfq5NUnaKBS2HOBqNI5km0l8qMuZiAz6zncQiGVa8JnfzOhnwYl2sXfW9ZXptlf7V1xXHer/H0Wxov9Ex09fusnaIh3vP9Mh2jVkwv0RG+PGNpil1UNeLKnRVFVzrcJXMfC2qRV4d2LUeCEhsph9Mpc7hlXHnb3z2KRs66Y4OREzeHYFqYZo60wnMGodpRlUQXDacL7j53F2GuCD2l/27HZcrolIAk3EWSVE9KIwVHxMGRYc1mLvSaYVCcH9IVEwBhUSv/AV62Uf/+gMRvoud4F6533ZxNfaAgFLsG5loZRNqppX+FPQ3qh041herGNLDi724wLs2XbTw07OYvc6gN7oXjwp3uAOtBzr/wjCG8LRr8bHG6JnwB9fBqwhxvwc/AltMCZOgnphFMVYKsmIR6mSkm81JhrGYt45vYdapVhDqIXsaO9/ps4qlaV/N3pyqVR1aMAdJXClFb3i6eqaBo3Zabw40l26M6LqQuWb+V1ekmtUkplGkD/C8NlqqR/SXV4W784Dfo9hK7fTVJr4JiMV5r3VHQ/P2IKgbp/AujFP1A1TtGYg2Tg2qoAB0ADoKmaQqerEXoXAP1doDlxmANT38eobfkS5hWcjH9eiRerz6mxqs5JPyiUoJf5iiofDuiB6l95Q8ahgtJ7+ppP43o0FBHxVNs4hp7B8A/AzCcu6qtP8PHn6dwj6Xj2w0cwShBu14E3/JWMSJb1SQp7JqYV3ljTbB7Avxy4aIFJ6nemnBqrUEEpHwDwetnvpjBVwZVljscnTrBA5DaGF1oFvf2M512sp+eCs9DuaG6K6S6MveT6DPxb+hZDB5YBNnnN1HyvEKka83pXMQvIeFrjP4m9TbcxdlyaJHQbyzZAnbrpRNjTIUXQ9LkzFugUYofVbsxO6XykhCH9ifQUOpph3W1jqgAeOZNHRXSof6s5vC+Q6N7jkvDfCMzoyLosPxVjul7DcnWiyOqkzl3JfYCdhrm7PRzSWCmSCBqMde2D8Oj+5PIlloZrew40mXSL5f+Nr2ynvrmz+03cs2/jwtVKZDfzHVkwTYsHh9V6+xqzXdfpVPGbMA1I8dnFNukuvDi6wQJKF6owIgrbJzFtFOWJtiPd6t0vgZRR/8DlHGe+3y5eLFAIlp5VQGZ6fpv4KWxK/rLaCjCs+o57KsrHAHq3gVjjpRnoIPwbLVYIjyOraZOzOrCwTIivrPj5UJ89aaoUW9f1nE2F8vx3NowspaMORgZi2Kf/aaQ5iE3SNXdN9nFVZP95fgS9Eylpx+K/93V/WivcjVOC/QPE5igYNo8Uuz2PBWbJVS+umET+Ew+o4GrSLuhTSgxu412l4yU40RxfrK3veUpLg1Oe9v0eKz44aFnOudkt8G61L2v8AIbm5vyYWNv2bBlp0Zoq8wwPukxlAMr0TSUXix0qIAv3wgTMPoF4pUWeXaFQXLh2O09SJXXzJSRBX8D2KdNKpd54kHIOEUxi2lIxVaFdnNLiChkD8Limwdsm7S/UEQ1qfRhCDm4GZ6sf5jOgSPVj1cYTpQp9lSLIblIoQNXgGpjJWkGM0ItD0utpG4P/++H539++XPw9Pmbdy9/fPn0ybvnKhWZppP8rIu1WIFd3hs+DGW9juc/P/PUIKEGHC2rYiDzMJSYZh1zrMg1hwiBgibZ1SIlco4zTySfTT3inHllPyuPPHbU2YDLJroQ4CDn/ww24hOE/QKwcRGOtqi1vSp3kegI+SNJ+iY0+4CZr9s+ceJviDqeft9Ezw++Bz3nJLuBlkb/dSSbBm10zpom0V2Zb3K/gHO4KUE21VeIcnovfp7L/Lx8/a6Eqv+Qacvn958RezPnK/yHdXZx/766UoP/ms6ur+7fWy6wqGDZH4YK9++vFqDUJnYXy7Cd84tSN9eA1zOzS2YQZGpP/d7D/TvC8O9xyVVC6zHq6kLPPo1wR8c1fctRYLfWP4HaYJzBwfJRxejbI4HIpwnIPctq9j6PJlM4O+Z6zkaDWA9qNBBmv81g/81SEG3pmSTaol7NQdUB562Iol/z68NApY2LUxQm02tW0H3x7t35W/C1omvYh9rEdvUeYX0mbpm/vs5WFR6fPr8EgVVg/Zx/S/cewroXIF8BETDM27fU9Ejps6LTusulr5796xn8rPG8RpzLuV6D5ozvbcB9P+dwH+bXPYOICwb+tM4Ia/YQ84enPA95sa4uWCmFiqvoPoK1YrgzxQY/iJSeEoJ5e5rPreOQRqDFBjDrqw2AcgMTYs/s5SD3zPcffxc4a7kKUCc2vQyMauAHXQob7h2VvSYMksToFGCz59FQ6YFW7g6yYYVlvVlACVfpqrYRmNVfMc5XX5ZX+/B3UTBxfl+0rYhxNRHeVHSm0tivMJXHG/L05MnUiudQlXNw+EhWko0TeLeTDSCtxpC+6bFhYD9SjfZtox+QT4lRe1TZe9cvmwPNMgupFnFm00wNpa5Yp2+njrTJRJcOUeREvXrQdIffbbrpDVnHoTZC+jkpwWTv51wHiu75KvnZ8zfQ0zDO1LPRHUQQHpLaKSC+G91B/+DlqJ343cYT1RfYiVd+kRC+KrkaHKkr2/ZusRBnRM3GBDWG/DCT9950nCV4uSLFo4ukCYY6H3fmyQ1eEEcCtNqgQ8i5YX+BRmmuB8ap+R609u+To2pUrklAhdDCHVXgcsXP1OGOK3BjZFUsp8KBH1aAkbBpRoQDPqoAouskxWcYyHlJmfEtG8XRT1NU9EolXxBA+YmchzEp9s/PNie/WG+F6I668wRWEqL1Ln+b9p28d4vzMSiROg5Vuyi4+Yr/W4X7Hy9RgCPvKTmZu3q7D+W8VPo9CpvoyWHIHreboP5A6ltXDrCHbVUQVO3G1693024o2LhyKeTZNkyccIxVoIdZjPx0fNNum0eg1vkjmMZOrijb20///Nn1rBAwq41YLPJrTOkDhM5c//DlXfpRKS0Kxc0LCtV0lQziq5PccLFXFLsvf38F2ooF8D2h0WWDFDsHRuq4ddNrLHWvtu2wvTpf/lf8dEvfllbq523EvXRfzda4aFu9Q+xFqInlrCcpMNU8Xory6Mw9WliDqr7g+9yvgwVM/oMqJHssJUOnBx71qmoKRI9Ck/Ca42LRy3sCRIq1ZvhzpevSGCvZ8g3lHu6MqX69UBTJtn2pNlz62stSRf0VY4W2OIm2wNIovAYpxmplq99JPR6iueZta0MHFri1oY3XwkzEnQthxAKrfG6sKVHQmIJ251IdFEWA0iJwusr0knISRiLHsibdpE/T2SzIxqbPyv0JqQwHtJqzL/1dxxga+QVstH2NjTCtdYmZMfUu9imSqmvDVnfOWo/26c+7RkLW6CQWF4N7hvV0B0QfndTYQ7faOMBBWdcFNjrfnsyozAzrz0dE1wyfjDSLDKGsbeYfZ08h220e8roJxd39z8MY1aC736pMHcbetggZTWseTfq8QZN+OBqEPQ94q6Z8J4JScbUEU3nXvPPKXpeYDnxz2dDRYw/j1h3i6Lq0wlmJUPsioYzJmUypIt6EMVo1ES2hJJTJnWywCnDGwOUg3ggWbKmU0QbFCF17pi/0urfFka3ZuM/Hc6QHKkSD5Fmka1TbMUwn0UsBNp9CmScbjFZm5OSVo0EYN48EWLRNxmLtsWjtbjaxzFIKfLZDfpoSxsW3kpW6Gqezt7k/2mZ7PVlUFtVcn0gBV9HIsiooDi211da5qQ5qJE7SkTaBPd1XEVBO9m0KZNZHDcmfRk5oa+DEbB/0wyky3i1qbmFv92SfVYJ1OpPpfgZYWSLs7GHo/7bZRdbPFocjsVL1vn9UQurZUa9oiIx//CTZ5YJG8d15ZkJ2Pl3MZkSB7zVbeij4IU491ZvZWge2oXvN2i5oPPpxtG2H93qEvO3bFWV1GxGCO/ezcYn2zdZNEzjWizhD2z/jplsRH0zyH7rJ8CTJMbvtkE3w8eGfhwjmnI7JXacEwBf1jhRbVYHdw3luWSsuPVLeQL7AxWW1MO/jVkZ/BdqaT3KoJM2/lICu/8FOJvMGqQUT8kB/VJQSGVCEziApRet5u3imoZqx8XqQ++Xo3bSMrCbRhO9q0lePwd1uagPH7x0/P/xT+f2fgHTk6K4bhvvoMmLjmQIUewE3hfpU6d69Swcy5a4q/LsMHTDi/9o2WzL0HzjMahwdYbWcNio/3KieqLGeDlUUQUW0qmrB+M1EuV34QhHkP5UGemUYeRXYzLKCDL1Ru44ZxOrA22l5+jMRRxpCdgr8aIL/9EHKedlF5Tj1aTXpAhHifYZSdUUkJMLqH3QPT8r6dXqQuhJQ/1wwE/vUfRe5aUNmZrXI94YxAb2FqrwyRmA7gWhPFgVZ8Wemu7cq8lcz/uzsMKxW8YqfzAuf2/Vf8eI9vSIXJ2tybeAf/zC8c4qGfhnnPWbG/yC3eXWGejS/wjl+ZPyDOZDD5wd3j/kANjrJxzY6+Kr2DK3s30Y1uhTnNozrsmAuWoDvbzwcjGs8cs2PyUYV/2/oIqNYfKxq4GOfTF6rS40/KR88H2F8ZB2Uj9348LDitXxTbVseeUDTEErvSpkSTDHVmA9jNoZ7hu98BdP8bLyEDQW1fBEX0u2/772a5fvIhfEMqf5m/bZRmgDX4Y0znxn3IWFz+v4+W5cYYZpsAQ3MjOzmSjkDlhbO0SeAYjki3Oa3KSn+f2TIJ/B+o+YYLStVWgjX5JY1RH0O3KHKDPQ79YJc+uIlJKS6ZebUTJOwVcWdsmbyPVliEKaWjdjuO9PfOHK7Ak5/MShv5qumDY1tTf7+ySyURf+qLLgGgT37Tt5fVCD6y+v1BA8fCWxn6x5iC5h9rwVsm+b0/mvpaeNJXm3gmxag07gC6VbYgd1iFde7i/pvWT/NzZLib7uc+OUsZRoaDyaWKMfaOdBjdA6kvTZ9otz/UY54penUKziurhYATj6Nq916rR4SsBt0TNUSgh9QT+OcjrJ6Lo6igOpKCPByfPkpXY15uR9evn7LUxwfZLE+SE3eYtXgUpgvBnf5YVK1jC9OE8Hd9cYpd5r7Kv08vby+DEzBtZC2lvajx0b3gkreLa7SmQJFJ76fytoaG1QFAkLKb2qUqsBWCW15m0XXuJXEROaRAxO+h1OOFPsaLHVn7ditOw6j0pMk25F3cNUw2LaMuaukd7rxQBceTZ1v8eYRsEvWdp0jtMy2HBJczPCEvJ4W7xbAjXdXoLEynIw/d5UPqaxvzkBlQd2vbHXHsT95e22FQE7CMUhug4XG0rvdaJjRWD8aeU+ETPs5Q91KzyujfnjdRX0UTdT7/d2ydlhQTvIpPqwUvY5qQsSZey5r9ybbNExXCLNHWeOFyuLtr8sOUPtmftqdoRTk5EQGjgTV1KuVBegoeZ/13e+L0mugNxwCG7vxXswSMQIC4kNBXkSMr2j4Caet6YE9shHx5v3XMzrY0IHhzipdrWLodwv8z+NPBB/PzamqNJHNF8ogdUSFuS2rexSMApWFV1Z0CRvemv76J3YUDZUtVsfxqIhrYD5u0yTVxNA6LfE7X6Hx1B1uIy6aPPKUAikusG4Q21DOUB7L1H3aa5wqEpEcRFZFRzyZf9FR60lHHlc4szGJ2rEFNVq66U4WGtdbG+DXhfWy5erFsVu9Z0ujWGpbipZelGOK0ztJVjtEN28NZuKQs7Z6kHjWKirBA4IXTQzV+1rVF57q9HzrVZV3rEfK97unPsMf6vp8HChWY7/91SiG4HqpzvUV0D7oWV+nmaReRwTk9Lq7DoWnDi0dYnXotLIOVoVHhcNMA6Bq02GXuoedPJIefMTgvzJ1Zag+mG4qya1Q6pExtchNbkz7o7zsyi0TebjbhREHw5JuH1H900dUlWnWwznkgbKj41Ipx3Zgo/DYNcvFXvcencXF27izB/ftrNGFMhq4AdDTYnEZmFXBuGPa613XERMIA2+a+jP0Fim3OTP4ybH14Ne4cTYe/SOmGHVwPBjcd+nMJu7SHqsF97/faCiu7n3Hc3zv0Rhy0jAav7MHu0sPpNOesneLPR2wJMKPE7RhZW4cU6fJII6OT1PAjF4IFJAsofofVovLp9oZdZeQsDs8OgqVzj3tBvMc6WPi89DfOU5FeK596UmTrraE06hnmkJ//jZicC0bZYu2JC2zv6wPAKVbyUBmiR2hP/5AgSFETjKjjlz0esbZd+Y68C7C+PCIHHgfPjrBv0cPTxNQwnv8UH1FgyF8nuW93kipDd0eDOGdlCkRFajbQ2yakKl/+hztH++4Ze6ZyBhnKcW2AJ9D9YUt52q3olrUTU1yOxrI8phQfiVgnYe44F27/rWZswYOe9orRT0llJVzeZRLEsH4+kA5+qNyGI9S2cwLjaBzdOZYyx2uh9N+SKZ8+w0bV6P9CczA1SwQDKNj1Pr/qdTrN0XY/qndFLHVe1/F3ThFKDrhoWlUMJsfgSLQFcBqeLZz63jdYadIqm6R3Dy4+epbktS7ufz8Ql2Bgv1ToWO9gJH24ht7m/3hvb2T6Afm3apzIGstwhGg7oS0aDhYCKoFo73UpTCFDUjd5Pl4jEn7BuP6GzxAIrLaOJh6DDIL48ZisetW7LYZeyuaoAMkxVtcDCnsPqFY5pqCAYfghHoNZQmYVQBzBughv4MToJfKC4+pgyZUlLW0bE9cLXeDDvAQMaKNLcc3cbudOd2e8PFxwIIDWtLXSCDQrkyTFrQD9Q5ZRQGnf55UR2yeQSl74L9lODjRWEE7PeVbpZGsakHyhtTVKwqjBazvWC1Sq/REKex764GNa8qAqobumHX9XHb5TMitCXnThmvoCA1pA1yg/j6ZzcxcUIX3WvHqNH/nVSdLuerCr9tXnrQXiLnAVyjoAMUMYYn5GG9e44Ie38g0FykXPhvpUrhh18DAQQ4FscIEsGSZ5vAQBwVubi88WcjIrEyD3kwc6O9jqpj1iKCf45PXfIzxUNGlLprZjwQsV/DyPDhPYativKnh4OiQUp+8scm3/hpfnuu6oMjL898PhTxWP46bCiCvldwMVAOLTzJQ7mKEjEYCvTiU38OReIM329n0cgqfBxpeyEMCbKoeevKiWBmdWMCpSMI3NGrCAY2GJuFVuv6Nvt6ucpYL3yzzHOykFfcJtXVsEshQbfUWhiURDGsDkiDqJapRQQNCw9byAgG5756e/zhLP65fz0cH9uPDh9HBLY9Fw1ASzkcebfUwbg9Ow0oT1molGAijBL6tfsORNAPBEB4NhhEtgE57ef5CeddYUyqvTqddyFrXrdKMb3gcxhNPtbo3M0kvppXpkfoN+5F6w3ZJjQecv7KyrDKygojbCUDVAJPV0r97on3PaPevgx7VekazIPu+ajPMrpwppni63NpP6VoGyOweehvUo7BtdUCnOulkt+yFuItGXkK9ks6V5zXRWsPgQl2K20H69AsnrfYwDiVScPkS/G2K8nazt4wEL5eCTEk1GOV3B/jkQvcWkDQMT/MYZAQGPWrHAy46eyQLiwRV0gERogSN13siWCpSL0b291pI3lUVTPVMUEfFSP2YAd3CYCUTjNvInt9j9up03/d349Vr0PIQvyZljIIQiaIAT8f8HR77vh0O8jf1ziaP6g0duetRvZEutBMDPx3YYPML3E+EIkZ8Qk6e8bG4IYcZ/jXAoNjLn2VmUhb0IodI9kHBqWA4hYmCE8oNntZpUOxhfavYG5m7G+kVGnvExeBbIenmuEmDdlGz04ib/GitYeXOjr9Y9fS9t4qIv+vt8V4MMm8+mjDbZuyIwN0iuZO/Ra0BxgpiZRchqjEmirs1wIEBAaz0FAGU1o/Ijfzse4PyUBK9jl2o8OM8zTzsp1fYDM9D84pexxDdYB8fC0UoI6yEri5aT+AVcm+6Jqk1BIBrucRksdHOoXbNzhnIDfdOd2AH9Axofk7hu3b+6dHR42EMJwH9PISfId9ozhaTgWeTcYTZFI/Dm2wrxEesif1Yg3cYiy/w8VcoDqPbBFUsdBhvjyUxYElnWzSpYkm8LZbEpBAzsLyA/yIVInuwszPv9TCad1md6M055Z6XlDveGv+i/3b8u71NG0L7tGvJMNTzqcpQX0tFGQ1JqQq+wwoYtq9agFKxAEUYeiRT43aqQQQAK0ViUlfU0A3vlhhcr2aAGuv+fLGi8QL+NxRCExbznOJpTR6BQUzoKv+8hdV0IKgWYxDTMpIcg0GXLTXAha2ikjC+a+TO/c8zc6SehJ7ssaMtNYV3tDNAH+xn6Wgg224K6QX3sO5h5n6lXtpmuruOGfP2BsyTq6vlaH9/DdLay3TdLy6vPvTBH9n+p2x8CUbR+fRyP9qHf/cIYn+4j+YhhibidXNbI2Z7aTxlZruWzkKlwW4vvbfBN+BzfS0xQviAB39pWQkeKSscdTz4B0Ao3/NLGRqQPrxtQTfmUVEH//b4gSScqvZGeMZ8ABWNGnrSivgHbk/w/b80TwpvPBMxwYmo+mgsyB0jOlpVcj1pTYYw4x43evQ2Q2IGY+9elryH7IJZcHgHhTakhUzhEPSu8e1dtCUeqBf0uxfAc8VvCSUW58n2wU6WqlacBWyyzbnRsd/X2HxsXYll97ux5h6fX1mv274Pd3a2v+Zm3LvPxhv9TAQ0Y+NCcTXkj+w+zdsrZv39tmNkPsaMRNdTCn8OpAchUL+vt5GHLVM7lav4Yg9v2/GOPULiQyFHHOs4tWibVuS4C5+G4QZi5d07DxArshR4ytWIQfD5cjZfj7JEVE43SF8v0iUdcOt9oGiH+4NH+ymdmGhEpIvCDms/GNFbyH5Ef/uf1wV0xJ6827a6v1rMxvsp+Fb7crm4Xv9vOMQ9ZpunvjpNqfuzAXmvs3svPgDTa6hxelen6FDimPV/MWuKK9QH13ocpWB/a5SCjwa6+I0egToFdwH0/THBW5WQe3i3Pqtd90bckH5wgtEJmZLYpnTuxpKx0e6JXhbCknug19aocbJfYoJnzu7fjxNnsamWrTH+u9AzhnPO0t63Tyf3I18ddWg7eMYR1n+BMVTo/yIGX4TvQI7+cMSo0q9v5F63x55bL/eI2qjtfF+7Umory8q9nMNUEtNYcz/Nxs1uQHUpmf/2cz9DEpJYthuTHLcZk7C+3ceiZOv7GnX5jvCUx66vYU83/W6GDYmyij8BleCAkQV88qYVcniK2j9tEAcIccwhNrnKoGy+9i7X2d1oNnEWp0uaRyxr0MGmtiMDM+kQr9Vw0lnw5hreM8U3IYeS0UMC1eWObxfHt/3l3gxy9d1x5fX1VYYPfvDioAw3QSGriiUv5wbiDbAzIPnYZGFLOT5b3W8Z/ZLeSb77DLiqatWhO1pr1R2hFNh+mtbm64Aq5ImHqqZN5o3eeu5r42RnC0Ml801h0zemkY++aRdo5cJgX5tHfjdMIG3O74wIH1J44YZY+QH4KsG9W0UF/tK2yVJSiZ8WHzex8aocu9RVpfRf7b8x+/KOikl/6iXp1I1OUe5jDyAj8ik17xN//plSKUUNUglang4fFIjRQCp7nLKca2Qj7zLiabH1qb3Yj1LJ3k1tk0QgbKuVB0ULCHS0BKq/rVq4lAnEbvFFt6kxfM2qv+ciuN125TT7bY4qipa5Z+GH5DtYL9OwaZk6h6Pj/8oVsg/l/32LQzZ75uA3yY5PSVko6XZBbxfGWO994XiMTABqrtJYgOVJKCfV1EkvCuXSr3GAoZXiJbyvzhNUABa9eRtkGC8BeWAt4c9hAm+I3UkyMf3uQ48gcWL96uZQJCltLH2WmtbEAz1/yo7zHcG38znknwcXIf7fSDUxCW//WHS3yhztCH/bSM6q9kInXtTWU4eBA9sHlFrjGP84JLYB1RwOHx8+Pn44fHx0mjJH78p7Fjt+hWxpE+EtyhL0SQNlbqXq7Re7ltOlYidD7XIjifZbXU3pA3vSdLNTr41yHg8Uls8TH9WbJMJcSpAf/QDuK4UsqtpAgKAVlbFsE5WxokFlLGvWA/IUCVVMLy8OY/dfnn97x63WUsG1lpzeQjtOPzmc9pu9jJfoJow7tECqzZyHFKRFA3So5vsCMVBOPDnmgmOH2sk8YCV5FxKflusqPp7bhxiJ2oWDPAIrHzLmhfK6RbepeH99oVwPXsOC4AfsXD8o5pGvDE5lJ0lp2ayo/8Q16h6EPSDMPZYWedKGnrSDEP3wKTvsNUag66oTIlS9zZzzBeFq00mdRtUxOfGtV0UZTKLut0d57Ez82xiVun5e+LyV2P1HzSEdcEX08kjWdj2Gn1nK93NZXLgE28Jt5J4EI6/KHA4pbTLHqFxoq/XkbhJVjSB9ZmKG7l2CCnSwBg/vwfRqdx3MF1eIZNcg0xN+QkgWY1V9Lo1bjme/KoRX+NVUETpvjO8tGSNBHR6Ixq/ICSUFmHY6Ml/LFT1V5OMA9FCy8ep09/6iNDuEP1yUZsd4VXpOMaJMYhFxoa9wZdG4cmEIzhURruZBRgeon+gVFvikBDxtSIDSIzk4UOC+nEO3kFQ7lgMc2aIm31xDa7Ox+tw+sg3majrnU/U/fzI2V51493c8Xf5eFz3SBqNptFuwBKFQNVvr8qPjkXup8t9sLiYxUGzNGWZ8JkJXcewAVdWDCG48QGLtttXxj1OfphB7FTnFBCQNt/dUIt9eh1x2tugWj4dnCS4gHFVN6r/WI6OpEmkkWwJ0rWHUqKvFuyGhXhtOW4Vkrvy8kaDJqiRVSTeXM5lUT1ivWpdv4NG88TQz1228ZH3mt3XkbpvLodNiX6Fax30h/+mkZ91MW45cdf/O0Qg1apmC5gPedzW1J3FVOjESIbA+esuzCyXZDjV201AJ0B0XjF4JKcj1x+k79CZAeRgUEdiwOXI21lAJ7XyMsZIOyW3sXmVuDTga+xD67QI0rmoapUjRaNBEo4TVrx8afg2GUF80sgazTs1aTAti4E/2HH4lhqpW0Oin0WRaAKNDpgcQ3EDX/+Vl0Yx86FVB7fpeRxkb8HPDM/3MOSZrBPHuv5bYIha5RMyJlpvdl7hildvT16ZetOwk7tnKcHrcsZXmeGwqOVe5a8+hPLewd77Myn8KlJSFcVoXoVq1z1EBe1Z/n5fM8yiT7z5rJkOxJqPoJLVJyLKM8B77z0ObqC5lioMZHQDwm2r5HJN4+RzKv/GWz29BZekugoHSrgYz0MaifjGe37tA6jlMhm308h4yLCpYk2HRim8pw+Impy2a2fewyE0B7eNsAzlM7pqthrEKmFVFL/L2wyuyuULWS5Qh1BBr+gwRz8jXhnG+ETMIwr7SMEx9iZBgPJjLDNIQsNZNy3mXDluKMNb9enNnv95s0K83G/Sr09ixN6xjGFzcv0WUCCpFktkEUGvCSlK6vRRfDviJ4K8HUYcOHZ+UhtYZq8wdouq6ZxgYP7IEakU1mczd04mDtEtpWnd9zuU2lOzuNE/2JoIbgvQJbmiz31twY/wbcG8rJrXmaGUYY6Q+SPukIaYfzPQw3ytCYAwjVFj82/THKaoJ8vBFPM/9NjqskFZNKgOtXUgdeMn005GMfYJwT9qcEXrv0q+vX/nQbjt6CqCE8i+W3ByMhIneIeTB8OHxo5FxxIyz+XZAqY8rqTJ4+3n/yVPlsudNWkwXurrhSLyey0AHS1R1QsqHD0IeUw40lpeZWBr7wmMwvlJhz5KbCEqgVFJIrBVUJ1VlbycpOqqAGKXKcdDfzp8E52//Vcgj+v3y+fPnAbBE/egztolpQwJ4SB8MwnTg+TxffVk2Nv635+eq7Xf/+vJ8783TQ9Xy06evzveePH+rmlaGNI4Dn8pqWYS3+JdoU7Bs9PtiWgQDZo2E03m97lKUZVPi5fzDonaI8Uw8wmwTpc9XiUcRPsTELL/fhK7lSRbeTLQp7WR4aooF9PqHOk6QWvUDMqm7WBi2uViw1dJLmYnvzl0uULj36zUJqeakhG0Cvk9/B4+f1vuCdm+boQ+VI+Ph1rK8fPi+7eawvEWyFTzyu0Auir4PpXd2iv75arrAgG7khHVyt3U1oqdhUUwwiMYLFXvgefsW/Ir3yIC9cZu993f1gsp5dweWoSQGH+zMs/UyDoQEbjLP8Yh+UlxOVYwiGqrvureL1Is+zGUPjUN2RbgbhnJiwh1s4wmkjAbt2Ilzc6kM8AEfJDO9BOQZo4beATnDuzK3ZaGRO+PIDQg3SepjPpswg3MzOoghYRoQUpgVhlSdqOzCR05ZgfwL2okPYToE9eO2cpKXBB1ignufGfyX+7JYWA0mskKarh4LkiKKlBvRmbqFlwIy/C16TcSk3BHMXb9yNKQcSDJLPNsP4yHVqzBlGjIBAg7kJ2fYFRs4J4uFHXQ7+eub8f97DY7aFBxFwewWi/wacacPOasvRi+7K9TcvDcTcjEyo6ALpnZ8aFp3GwSmryv40W/AvN7O2qdTB8aUdcof3uL/d2po0Xq9SbekbulF7LNVxVCUe+ls+nE+QtJ+Wr31aNQOareflG1VTyAGpGEYfAH/erI56RKyhc6lfjrnqdTSNuFnD7AySmqvyNB6HID5HcYur1slOULmNthLFZ0ZlUyrnF4XSMThodwlKCjAD9UAyOq2a+0uDlDks91QVnal9IzgwN0GxLLjHFK/n39G56SuvbwX4qZ6/2jmjJnt/9YjtGVvpe0JOkbj0fudpWgAc03reeDer1+5tX/LWCxlwPsaowxbDS3J/RTCGYbn5Gk5OIinmiaR4qim8dT4pcshCbP+sT1rtd1i/ePC4Z2myjvfAPYc/PA930zVyTINb1FKm0dDJVfPo4M+ARzD70P9+xB+D/TvPIrKX0flr2P9S9ROpSG9rtyxCYAq4EyX03xrQjBiKlXHVXirBbifXnMoeEM6Q3cw30xg9+bXX5fGigg1e0ZiZayLhPz115WxmlpNR/aMXFwucdfhvq9jqwhJpVRgYmBSg4G4lfXGpnp/YVt4eK6XaT7esCW7L0LpUKJRuVzS2fnCNdcb8a6ZeoBfsWV9p8GoxBBZpe+jEmEknkWjElOkwUpIGuqkDlw4z4E5PJ+s0jV02ODSLbEJ9p8GWuLu0xqmmD35AF2l2w5nSdlD1DA8GsjD0zzEn4eP5cGJ/vmo/HkUEQD8A3voAJjhr18P4d8QvuzmGIYxFICkoQI4qgEchOUjcvFHk4CCnUhJUi6mCZ1hX9FQ2o5O2wGEKYRSWlRJewhpR5U0SwCSjiEBVR+2L9JVgXFB/XGthRHyIJZfw5agqz0aSKBLQcxxU1CxjsAngDrwfke/p0udCm3RL4w7qudBwZQRRulr8mUNSD17Bai1+qKSXo2Boj/JEYjMWxmg7k8ZnjQQoRE2mfGFMZeJRSRIevbq3Y9Pz38hWYUNwlqNChtkX4Jf1uOVTfjhS4CDCLrnr9+CbS0K7cP4JUg/KYAri/mKjcBYkJxU47w+e/PkVWzil4MdfKASnqZw8NLP589ew3/4668KFP9R/71+FYPf5fUkfv78XH3QH/r3qSpxQLXTv39WpdTvZ8/e4H97w/gH/Pzxh71nL1+p5AP4eDbEX4fxT+cIp/4d0p8D+nPoG9yPELvhxxQvGonQYzMjfQuVwz/nMWJC/Ax+/Dv8B0u+XE2Bs8cVhkWKVR/evX19Hr9ZfAoWH4IcwNfxG1X6tcp9Cx+mv7VOIA79mF6CjAV8G0ePo5FwxC9PwXvYDugDFeM4GAbPrhdOUFvZiR4PW6DfLmaLYGnBo8cHLdDPP1+tALF5gcOWAn+5TgsOfbRB9ZcLEHRVWjluH7K3zMP2gfsLPWosNH3IIUHo+uw6ne0hTOCWAYoJGE8ftsStNPv15RzfPWD7O9qIfEv7QtRr84g4NfFgtIQDDp0oyMezmRa8JAP1hUc5fTHNosHgn7V33z0UIlyvR4+UqlGtb0mm404P0WU3j/KrLpenJFASPb+7vnIkUcVV39v09zH53MNfBuwnHf5SBCYFjisMmpKq6QF6+zHFnQfkKb0yXlIzjO6MYZX6Av1HZ31Ln+3BFBcmAyq2qSZIKSfZjmTk7eLDFfZDZ7x8Zn0ro7T1fJZeYf+0kPVHGLKan+6NMAcK4Be8rohR3n+FPyQ4q73+AHQE3kRWmOh8yo7WEod0/UsKYBqBp9Cqn1gNJfysviGbJgFu4CMb6Snrew4ue0ijSovp+Z9/gUs7D6F1K4WJRaeH+QOkZwuYORon5jlDZSMq+IhQrFBc51dKTCUglybBjLNoHGdRGeeTNRq3X6UfMetd+lGKNxSqCvtwJkZKo/ppOv9h/OObX8aFo0ldHw6utHckfx3Pi8Vq1IIPbHBmFHPszGwMkxQgHyjACgEEiM/wJb6lKl0Ewfr4D6JwSEsBJ75KJyOirsBnlc4NAvw7vGGMxC/v4FWnsk7CjcTLWA7XDVjSmEdOySkbzzGeg63g1JUFUa7ohKzpoZo9zalswQ5FREHz6Ld1lyNKKNXJ9mVUOeje533KuDCzzevQiaEso5yvF8rQfb0cjwvcLpD+dAZpbzEBKMurF/8pJLFDI8YcQVPl74vWua0ycHyCWwD4XFJeADsCbNFxPnuT5mkUP6Tz34Kf0oxoCX6pD9lpIyhmV/3spx5vp/85HpWrCONP8by4+rIfgTnp0cPjEOfrByEFMj8B1rqASmoMEcyc/biQ6lbpsISQTUPFjwu2lXPayucYwNJSOPykHrYsg5dp5ivRDsNRnnPaLhCuil20tzBEvBmoajffBEj1DPWr0ToM8Mfp3ZnhopHatSzZKzgO+yvUBe9Gzw/+1FHorrqGcOUy6nVks0nacUN0bOt51WRqpLUj+oYJoHZ2anzDzg6W+Zf1Yv4jCkeImXpyeWUAhRQT+1PlokzAHvsv7bEv6iwTqQlAffqIw7PrLTqNGa+V71muNqCyS/MOj1fPWi1CLm0ZT2wUT67l1fzdyvyTXFF2svXik4j3OQC3gA3OnQzi7MTbolFazShy6G7Dy5EaCmlrGMHcbs9XYdU5zq4AF0vdRkj6idwF2hSKoPai1FjSiQrZ/M5UeXhWdTga0/XJRB+OTH7nA2FRThGRdMzR8sEJvKjqc3z9wxcgXSQTUzOLzKcNO4oxQYQzt7DDM3g468/VQyv+dMPgUV7VJteLmr+CzMX57PqG8QyYhGo8ai9Q/XEL90sFRXE26i+nskwCL7OzS9yvNklLFzARvNPa9B/HIHdRi/NCafrqZIzIFXfYnkVZhNaW4KWTKCZlJU+f4lqfsHk+oShSBFHgfzKB7J/HVMmTfEbxVj7yBEsDNqgM6YoK7Ytj0BVMx+h0fezP8RCYpva9r5HVMb/fi8ApMB15EHTycrpWfNPjx4/ls+lHeEvF5hERR/RQ2TffUlWxHiHm33o0BJIqPJE0s4pcr799sP67LX+T0VfPKKK7J8cD0xce5aSUcxKTwEDClJWh438j3MDe2xdy7PrHWqIZF+y7zSp1puXL889UJ09zqowrM80omb9g5bmLz97eXlwiEJuUZCL1N+HCmQo705+u1d8uy4NHM56QvGefF+Gokn3hoRqwCnpdPOhkx+ifcD5Iz6bQJTZvaL1RQ6DDTFhayBSngSPu/bBq0oZVE7a3Kv0nNgHN39gih+YVgul+SRRg3Cu+ztWkGmMHdb2gAWrTiZGZa9mHVffiOi1VHDDWE/UcOBdxxjFOwhx5nT6nYGfdIqmmAbT4f5CjVgHC9M8IkLFIYNbfTgt9q06vFhng77+OV8BXL9ZYHDLDMPYiT67q+n9erxU1FA8Ums1RR7oBvK8/z6LRUCkt14+9r18fTGjo6A0AYYBGP4ABVWm30vjtYDCQZS8pdUFloKOKXCcDO7uZ2Z0COmkQkdKQhq/fGwDoI4zpWsUZSUyisQFDJWXd3JPrAoN2q9aWiQ/2IDxb9oSamOkarucArQQy15gcBSuEFqNlr3vdE/S1FuQvJ8AGeEGZGVK0F20S2QTXzeremcJtGngUV8WrAIftBczmCYYxPzNTLoyGrTCx4XQduFmN1ocKwivdrkgVvEXFEnkw2bhl8RzmXclIO7yxpnaohXQDdTxtbnxwMIDfNDe440tDrL3P2hTL2CKrAC67pMVXGG299jYAclkL+pInwr8qMTNHe4SEJzWNv1t8/AgCEt0jQ22MfXgOMvzV6COcTnF+vVrDb/U0ObZYcqXK88kLoXueHYmhbT4Pj34YxmKkfz6NyaYtNSNul3pXuBTY0DHnZ2EXeREA7mgVDUQNhOsP8kTef7PUrSF0rJ4SBbE54MZv3nm58XHn9bQ6Q8J1bwzXt7H6DZ8kW1vTNqO6whs3oHLMta3uPoXf1k/hXCrn0w+iEbzdNzMDeJns+Dtp+9fauy7NIJHSrvfkM5RcFsNrfbjp524/eOVs3ARoVD8S/cWqxyR2agkoByrehdHHsSnDUhsHwcpzrLX31UOvosc2lIog2l2xF6Gq6sHooaORFd54lgK46xwxP+R8H9XNLy31fXbTtmrvLzxrc/95GdaGzOgAV1jyD1QJLaKNxuqvwHiJwsk1bNl7FJNWxolsVn0Icl4fvlxqvuuHL9AfvEagrbitzpqLX5Pwjkyri9JBw/xBfQbDG2aESIMgLQUlUASgaRFY38xAAcmk9ZaCeC3PruExFF57PvWzq0XaRYdCv14WR1043Uaih6Tjy3qNOx6pB7Drc7jLzmr6LrSbCI9VwTn6oCrUOGDcquplqNg/tFCyTpJmyKp5uLOw62PZZhdfv4L2zwxYMpg6MKftzUIrP8rIAH9mApSlZ3dTPjhqKhfQQnau5VLC/U9ee2+T4Wgv2qzyt1x6QbVfN1Z7d4VktF+7MReyvcfKUR4oRt3dwJvamQXVNx9kzvnEW77HSWc3JCMtQMpQF+xIUqg28jhgfmutTnEyA6OHGT4DnbriXdVWtnA8rXqJAVoMrD4fYJS/kyR1ufmauJax6Cf7usl9bH6yCvbRXEPdQLIGtKYeF3jLcduyjydZiNeNIrEth7H38nJBrNJ3GTqGQCqUMNrfVE+woQqlqXp4XBEk+xqw+n+4bGKOlmcPkr/AeoZ9xbb2iylo96RfSsDI3JC3Igw5EYbcEoY8ZIJlEJzdpurX4MSh4FyNztBWwtEaAYfK62danSQzh4taaox4bk90kAAJ9bgNqzNDs1Edp8N8ovO8LgHsBDovFBeOaJhd+FrtwX1MBhp8t9tEKFlDXuGRYozIOPEID/I6V0Tm1R5z8olXroB98lmOa+uZJulCaqULQv8Qjo0oHTiTxGPwFNaasssjJL+Ku05HsiTrNZerLfT7vMbOAas0JykHkpu8LkMI5zVRQAch/ZKJubIdR9mE7WlQupH1Lv5dghHTEuiw4qKAlMDsENOcgDH07iyrzNbcsgmZnnpwgwoJqaisul3PdVjsWx9/I3pw2DHjE9pmeHxdjWnGFe8BK/J8/vsUFNDUYxVsF/LraDKfTlcpnn3jVQlPRxJYlgLmFZjvzWCWYjdki2wRz5ghK8XR8dwmPhyMRJlEKZEG2wkc2FvJB/N0hb4SoGmMcFZ29dX5W4VvqR3tOQV8p+/KW5JbYUmZxZ+QGdCTxOZIM3noNjdAGJJ+IgiZGuZjqvDtk3OV7+3vDBT/kbrUIOgF7slyOYPevlvAUBpAMEBBoDrJV4asaS3voopDNYZanWuq7OoKx1F0AliLyw0FgSEijlH86eX5219fvHt3Dho3n7/oCoUULFl3iswKYo8OtVqC1Ogj00iYNQ7PYS8/h4OBEqU+YBL1nR0yt0ZZ6N0zsB20Yzat35cemvclto2yuGkPZf0NUKdspqmafvmLjhQe53/TQmHMNjP2rR1lrWJL7NvzW81g3LpZO1RX6/ZwesO3NZb1orVbwu76GwQbwT31CWjdXuEPOHimi2Kaw+/b6qvg3XuS6xFtXsBoeCVPZ/i8boKusjWSmiMwmXmflqswGoLfFk81DGXaf7VcK2X83PyyEWBLbzZY1fZNWeLkNurQGvS91LFLAywqEZvyEZORYw8nXSHX5bWnYUuU/hMS5xzKEo6afR+h29lpBmJkb+MtjJYrm8I6juMTw8ShOf+W5XsiKBaX6XSOQeG3bdwJIZ8I10dE16p6021YOOQuKExtQgI7g7u9m0sxBlbMQxSNrJpXh/s1mBKJwaUn08C1kB1dIxCIYkpxf7otPMh7DxFj5uwX1LEaUDf0+UBA82btamA+RpcCml+1+NzHmvT0lfdw4YYwqMCGYMzkrLXhI+FHBfB9YWSgSpkmSjwAZjvrmoLu05c/PYH5vW2Z3nFBLjjYirH5zeUuzhHUrdrT5UW4e78ZUjTYTJGZFpqmKhSbnI53dgxo2/RYCP/81NBPwd97gkwF954hczi1TBIH3AiJDHDrTBmgtslSR2V5XlSIZDO3as/A2jEhhWmXHMbrrTNP1D160gejH4y6WCDnFMYduD9h7HIUDM3lICyHPE7zCZBIm3cY9oSOYbRGNrdWbpK4wHLufD4KZTQ4ndMFbYCiW0mtpOqiReJcJK8pqJ/Xt5gZ0Pa4Y0o2oA+3sgmtwQl34qPA7qXHUdHhWKnFDC5LnjFYE6NitTe0SJ6xMQZ3zRN9a8tqN5iWdPXBB9RbJjeneKHVTXX4TZ61GeYJrgpLQ0RGS2tZS336s90rPU9uKDdQL6ASVsGg6InwLkc3vDG+Hel6z3zh5CF7J6fpzkL4B/vnLBzyJniZ+gwbGQXPBU6Tu3AWFdeu6k2yIZ/jbGBY7fweK2w6l2uz93F9ffny5uEGa6D66fhX2mAN+ATzJQjV1s4N4tCKBPtBvYyWQT6br99eg6P1z7WFQom2/zm/cF/z4WdA2KD0OfDbXRDKQj5JZli0Vy2rJsBbVOVgyQ3UAfwmem5tWFGvIGWBhyjF1WLc5y4BwyPDkbBw4mbfJpAJZ2KHr18joM+uGOL4xPmUReJpKEljYkZIr69IiLUpWTl9WhXf97QqQjTb73ndu/MAB8WQqFnUHJJhwGLeselqCHi3F512kXkIhSSN1omHEtYdauCZBbcA5+6VXigduGpKn0zzOZWaUPKZCGh0zPsTh3Q3U9zBnjAH/2AkNr1Eq2eaGr5jMqLJ20xtDm1/z+kdQLj8N0+CPTQ1RuHCjGdH3jkE1K0mGv7JM2XISUEDL+fUgH96UPZXi7JK8XROvEftzXYTN/y2SRMxNteEmXHnGxEzqiFm9H0Rs46XbxWj+P0wc/jfjpmRDzOje2OmnSA/bt5Oks4gLhRfDVa418BtzH6afhi/Q9PVuGXybBCGYjiDAmjK2jJxgzsnzkUtg6nYR+pTULbRpSGtQ77WlgcnH4/olnySHBwPBpKOGXUvKfi9RGbl7aGQgxAK2M/DUOmNYVmbqq8YVCNeMQryljjCX6HcFNmu8GX7G/eyrG9L6A8y9ZkHSczsyEBNolKn/N2DjZ1u5K8AEQI9XBTpF4l9Gwcp/hayvinfwWA+wpF+VcG2DTAJO7dqRyMT/mgDLDLhZdR0m2d/2x9fRK60JwIrHkcFLdaMsjmLvS3f+hmoSniK7RioPIlOvXe0r1/3IhXssDxSjc7V16++1Acu7NCkqoNJ6dM4u8fHsyFJohqu6jFsM52DS+fz/I/WQPCQY468HDQj7Ct0kViFERVCM3MTogtVHDbc16/DgxP4d3CK/pAen2Sqnttbo6CAy+I/Y3d2EMaOXaLalm+OwvjOWehiVWaostNYk0T/ZxbrhBz4pu9MmJ1itqMlbjBzzo4Lui9ejF69wusE9sDU0zwU0tywlLlt1KkeF+POsMCJf2wbTXNbHTCRPGNYVu7fRTw0hWdlyhsFKcbUbxTf9S6RhmdeR+3+moS84RWM0tsqURmGo2pKI0Hh8Ru2Iyi4mZoIR1i/OtI2zZNBTNLRxm0BdGqT3ZOjY7OMHvRJj6+befaFLBLY/uT3pE5a7LHcTnfcWmywEaQxYc+XEUEGkB/S8CwBMrw9041UhVM98c6dYp92T+A6vkJ/hJ8vZ6AZJSZXV8vR/v4azXrTdR9S14t02V+sPu5/Wu/DYXa4P3i0n1IhkHaI021L7K8Ws/F+CspoXy4X1+AYXPfg9MTzDHjvbkFtxl/hm5cNtRSXVx+oimx8CfWACGs/or/9z+uiHBpSulkfrMkMYD69BEBA0T2qCj7ueO8+2Xe6c3riPG7es2+2jkDdVujx9XS31+GXEd/K000GhUimDmAunC7Bl2cpkPVoRKUm+soLDB3cm/9f3Ps/CPeG3457hQlzusQf6Rk+QRGLwpkAw6gU9OA/CUdL80vOa2WGvjLzsswc451jS4VbRwnGDPH5YeqouPvP2G4u/8LYHd0JpbC9lNWTTUtBm563310uuTTUC4WC0eiB4jhaKko2fb8/I/2STcFD0IIJYyOYbbQ/E8+V3dz1EgO5HCGfuUox3DApGARrJQPvBy8/oClwaeQbTNcYvHU9LcaYvh5r+LWsvjTNlGrvEmTuawoVkaH7ugU+ZKTzgj8POW8ZFjjFMBJj+7ShNC1b5pM/mdITBR8V9rKcQ1e1ISi0MkkZh09YL6pKzb2lXRSCdf6g0HtNzRIAmsB+pzB81vazZaSoJW8MQ9vBPDEevIh4dLr5gmYrRx6AutH4U3mFmyxmxXiVmMVGospcIIKeqhUOmKJPJ2gaYKMnHx+Y6p1QodQULE1LzFBtzUpPZEc2hmgjrkIl3RAxrKNMbNDM4KHMw1FN4sD0cMriPlUWsIyLZFN7GIshD2N33Ld30rAybkW9MXPbaiVLQLNrlKlt91oSf34NXPoGSpdCpm1DHpKb+NvOJkNtDXvXtAzix3QKNMOEvCNSJoO18qUToNjPusRAa7S/Ek8G1deTN2mvXgrmtb8iz4jd/V/3P0rUyQtH1UONr7fFgpvNth/e3tUmEFJFUNVVmJNUw7E2WhD/pqVJOvDrTYRx41HLdI/vIJdpe+M22Gx7e7Y5v67ZxtFe/Ipu3xj9pdahDQK+tHSlNQAMF6YEJI9Hyah3ZuoxYbxgPD7MBirK3z1qTFO3hu1rTzB1r0088szd4xGNHThAmrZBJw7qnfBhBveQwymGMep6W1WLIf8T3EyLQ+A+ayyYpMSaMtl1c3hO6o6OU5O7eh1xrhQ6fAZVFNSH8kMEfPqzBwyd9l5C/6luBCJTqjyxjt/+Nr2aaO11g0NUuE0ZHuoi3a48yfvGl/CcqtlcC5t0rYHi5qUxlDD68SI862btoXfUg57QW3QnQI36YF/rpewhaPDup7cilLVqaFzoYxiV1o0PwC7T2JedPOwTIDgUDkebduYpSAqnHzBxDJ15dX2FzrSdzuQJb9KBh1mtd5ZVSOuoxHaYjJ9dcIF6nf0D5jOk5c2TqOFClBx5nnzMZOC06cChKm5oLhnSm4Ce7lF0Nw6R9T27ZWCcHfSKqEuCvs/vU+Tit8UdZl3yXWqsBJX4PnXCZvsuFaH2Fk4pnm4mmDVWfKt/Kxd3LQQLI622xFltFfsIeaMk95ycNZI/Eszc+vDHPV182ZamHw4eJRUWlSMqfsF55ovVarjUlAgrkK0pXHtFO9PIN5VR+0Jvj1mSGsG6FKGrGZ+hCz5YGUu9Etzh7zHNiY87kGl4kfBEtclivXg5XzmuH2i6sr3SI9kHew+bee2wIR3CvqpNHSqybiL77Oe3Smgy/oxlq8qEvhKquoCe695XrWExvir8hNnQru/FBdidKqfKodyWjCldUmquQsMwkcUkTkPvfPOQxIpgbT/nGAS/YZc1FTbbK6N9w/vs3TY8t33X2Hlp2TJWE/fLZtvGzp9ff5NuA3Ga7G6kELKFPoinvSbto+Hpi8X6ClE9+PEvz37mmQenL89/Pwy0sJ3nHWLescnj6h2Wlb2PhscEOtSu4OGIa4ZHR0ai0z5sbNjO5HqZzk+37BfKMKmtJQ45EZoykVO2Psz96instCBJgkHw9Wst/TQJDh8FOztBJf0kCY4ehqFoH/PmozxF0uSObTdOUTS5wRBJPLrx5EM8mi26ZSjj9LPbOd99EsVrdk/iRdJXO9CpNIzb2m3fglW9m4FWf0D8E2HFXQZlmhmqZJOpBAIQllSyv349Pjo6ODopn5JrgGGI3kBcXxqoji0sruLJICT+D3cpMM0TvWshxd2j9Hlcfl7Qs5D7dn7hEEr/tLrXbkaQnVeWKoHu1qZO1lqWLRMgPbPbsOrD9nVFkFY5ntWu13xSVYRHRJ5L8Nqldf5a7y+oaxkhVV4i7fsLJktiV6WQf6JV7t9BD/l3+IAo7aVHgBoUvRqpe/gffDLRYJqOpkG0yeH0/Q8gbPAexJiPh585M6yz8hACt9jd//HHjjntDw8Othj0KaUFy9pJ1MkaFWBpuNf5nA0/v+s42r5XjsCnuiKbYXyKoorvgvHoGiu1D1xZTWE3OnU2pwipixUOzoiD9o2/BL4ZuAwGN4Rv2HjK6BVACJPcjp/GQ+D3WyIzFt7DzoZ9Qe9U3xFdrlYLuHeZWfVM2j7OWn0Gc5zBLfAphyX+Xvhk/YmFmccqI32fuxE9nMv2wSE9AvBLPsK7wjMaE8Mvi6Bs1WhyGvk7JqnwsHiUATxeJwvj1kHfdVZaxVDiCWKj3ojbuFRGSf87NKT+P6QSdX6dwbMZ8BUMHf5oXSiLyeLUDTQcOL0YBSRzG0HsGrXu+dgynr3O1spRo26elM5MrR4RpSEFMmmowUcNVi8MpJvKszbTbnq11AygKo2UsoXfrrHZsob3Um+Kpu03vHN7bcJtk+URLDsVaX8z35zj5jX/4Uy3975oFoFfCA+ShC8H6W0a9XMs6kWMMB5y4uQvaXCv1adjHR/D73RRJSVxz/CtkHckwOupfxawJB89L0dN0P13RndcuAp4qjoT5nogRnQL1tRUUBgZzcoI6ZvTEiTHOIu8pxwip0r4qeFzf8kFpqjejkQK37FbXFZu7HUYx4r1yWzzMs/UfRpLxeRPKUMl4YxrVPVFL8MnsV183r+byYoinHEbNyzv7d5xhyA2AXsBL5DUJX4pKLEbf2w6trdwkRkXeC/c1Kguij78v8Ud14nKHfRqda2iNKZngpu77Z5S+0CzcFzpGjwa8qLiQwq2ERgwrYPFxcjWgIzWs3GBpxPWUEw/qGPmKviwWlxiRYa/shOHrcH47zJOsxFosZRRwcDfNhxaiaUsqyRriORRxE4WwFK7Q/v4Wqyd+pJ9RupwkTm+KaQsaQCtIn6Rntim6wslSpRPUviwuJxkMXaSllOEiMYONph1NjuUK5R5mhQyd32sczUNP7yeZOwMQJE2Bv1raUAFyKOKselUcP0MHqktvK0RHXhsghVt0T/atF0MhKf2Zv8ZyG7p9Pvhy7MXT8/pPNT6Qca6pwLp5g5hNYcPtRfhHH4/ot+6gDELooIvtakbgD1mYO/e/RTzQWotn+pGGB5I8ewLoPA0D1DqnIPLPvKlz4oD1jM1JJ5pt8TWmOuZhgTOoHIKzh4MRnDE3TGvSVQv4tYCM9s2fUk5y7KcvgSndPN9kf4R+8K/gjd4kEKPhTRDtOcrdLqSzJH+x3GKkW+xunqYUv/76NA4zMbN8EGXRy+G+aE35wByjrw5Q8g59uZEFxIZiPxAGH/urMJQcqR9XAtwacaFiGsKEta688lyuk17/A0Q+1WDR8+0/9MUaMrcYp6dn7iiN6i8//a6XTsbZ9FoEPa6dhLOhpBg8Ys1366tx9uyyOfGenuQTNglwIR/qLcgg3oTgQJHV1/hyLcozpM0Bgj+17++cut9cu7rdX7ojPxADmy/M5nf2e9aE63d7kC/+cb1zy7bu6nEjtjb2WbTF5z/8s60i/exbpUAeNt1ERXgIrX7JS/qndlqSdLbNuQD/9+H8djEHServ6PbHq6VzrW36cedDZvklPIpFphfbX6g44Pd6+XVy9pA+yoVcQv6VMT5w5JoDRJksB6V35H6flx+Hw4fHz4+fjh8fIQZFZ5zoHULdUeRVuX00xyw5XjcdBjNPXqdbKTPO6jp81YOu2prQm7Ul8bT0FOhHmsLd2jyN47HO13+foxCPqUJLlDFlIyrzBNYTMpG1dQ/zxaZ84mL5bhqi39eXAXpDCyA4PezJ8+CqXLd/VHBqoA6cTGGhyd1VYnhB9xUoNi+kzj+vCSMWsxmU2VDPrd1lh7JYxFWlIXxoRov7OqCLPMm9M4S5qL2KsmtppmjjgisanFyZeQvRS85CDPuvFHZK4HDUGOVhLddFFGbC+FiDiJNjLQeDVQkO3e+30M5iAgPRWVQyelh1vCidwSZRuYthedyxp/mxxQ6k/yxwP3wE86hGKm/M8jHSyJ5ffiQIkJFpJOeWdduYY15xfrVqdE4pTs7FtPN/NbIB1aDOiSGsWPacjEOHuSx18BhDujePl2/XGrJSzfrY2n9BSIgnvds/CG9nl29WSCXWMvVPrKAVa1llU6KMFMJZo6GEpun3wfyQWTENdFigL7dy8+Z+XxhPvVCGGM/YfMikzc2vplB2rPAkPS5AzVshgp6Ac1NucxQTvWppKYPcpUQmQS8RD+wk6oyLXvagVwnMx+aaGKNk464B3CHHM63ABryyEJ6F0ODHXMwvjAWkA41QCMQwC4RD2uXM7MR1tdLFC1utQ14OLQqzisF3tvWbYEgXPS2Kd5rZGdrB9+5O/dJzmcYvu08JjmbrUSMRkLyg8nXCxRPVEeBcdzDUFpU8fbF4Iqs9cpgh+T9M6ggKz0tF/+bumuJdZ5UmSWt+u2LpbCWGTogy0pnyHHW66HOeI4647YELE41ZUsjiyQR5RsSDC1QWGrGBSiqEafQ8gBsDTZ3/+X66fUKxXcJbXR7GYgqfId/pEIW/hlzWCdffpVxOHNZ0ITCY8g6LxGOHP6f7USm9AqbliZAVSeDsbkJ1BSDYRhP1Od3kjqlSVeJkrDiN5RopChwz6S8N5f50pd/chIhvR2kjLnFlIyxt5iSlylDnVKUKQd1Tnc4qF3QsQeB6QLSJj4ffgkTz7+3kEnmGzHDQx8z7JtafFnq5jswfXZ2/SDDDWVHVdTzCYLMObEV5jy/mqg3vwZaPbgg/gBPfcMdDDh3EHHuIOIcwBNzmpd8cqrD/uF6o5xOP1hWeAIcZkMh9Tq1NqQkGwNvLMIKH6AQG2vX013hBB4w6AZOIIUTgPMBBz4o1OiACXyVrn9rYRdSc2z8GWb+U/pFdpoZhnQzhiG9P8NwWJJis9NsGX7PrNd4g7Nl+L0EJ8X5OHQ/jtyPY/vxgC2GH4v9+3lL3A1jhgQJX/VC2UkEzjLbJLumNo0voE23i2XS+Mogt1PldEyjnLdw28WZLZN50w7PgaHYSiTCer08SKjhjh04P1MS+uiRb54x0AhDHDpHiS75FvQ7H7QWg2sn7Vxf3Zcln8JOXG2DC9QdqjPhz/TnX8fzYrFagyawTcMoRVrfDzNiFhpNw5AQ48cpRMHF1K/Jo/jTmmYxBwVJDBoB/Nrlk3+k0HshbUkbD1t1ZCAFaQNR5j6M7c/P3wmX0nvKmlDeMJ928WAkMDsqyJg2ewLQnZ2V68B83UViDkeFWovcBPQaRnTLQxYTn60Ohqd5nAOjeFMs8IqreUd8miyVQcgdRR8fXZ9qrdhuHiqi9GkC6ind7NSUC29BhHBjl+Bf3r7+ua/UJPDGkWOPgWu80eGGPWsTN65NmpRZ/RwtHudXODxltNmfrrXxZhjeZGBoZ9X7SmZUaej9rho6c36PhIjRnA7CWOIfKGtifCigdLk8Mz8M6PsJQtMvKqAg5vRmotPfl2kXqqbwttb9pJMm2a3yDKhMO4V6O+5Pri4FNADfQNkXc/oO4VNAY0KMbm5vYw4Mraps/I9lJBxOGhrGUsOYNcVqYxmJheO1sY7eZoBWNOUsJEfve8Tj0JtH3YWvJtN1+XrshHSYY9zjRIgaDlwnAzlTqTOViqtyc93rqd7+Bpm/083LZL6fQf5vkI+XqAcJuISEd5ClCpE5oVAEE2xItYrhU3K5TGaYggT5bMIiJvSECqIwC0eTXke8WSyuhGoWfQihbkiXCol9UpuYUcKsTPi9B3BQ96TX3b0rKgfNkbH51KonEv7O9F+sTO72xj0RNjpYCqkxEXBXS0Bv5kKqPz8CPTA0UmBlUmnOhyJsKPts8WkOTRRClj+rdezq7pm6dk1dxmPT5oEtfg9JfimDkynk6AV9//tFH4WXsB4ZhFxfUwQOpiySwYqja88qdSpVOzCicC0TTUQgh0p6aJgtPoPiHS+IiVV+CxT7N8CwtnPGEe/c+g8Y5eQE/p3BdD//6fm757Cm31yjrUv18npn5ztWeetuLeW/LMOPzUOsfIDTyB87B28RW4cAYVyACC0yg2uJJaIvhR2h3+8WDqi68BwOZKcIFYEP6NPhZrBISc4KFML0kYZBuHC3Gd0hIat9qTBifM9bRsx/VUQSJef18xTEd7hLsotYCPLHN6l6kCB0RzW+UAHlPiAHp4VSapr44z5nnpy3sDmhc2yTwuJByGB4yPE1hg88QlJ+6HtN0IMM0G2xkEeyPl/PP8uJLLgEwgOE00p+D9qxfm3K4fHYzgRy9Let+2rA5vXbdM7epnU/GbOsz2bcEEH3+Zs3ihiEkiLIw9GZXtX8FC7hHQqEynCWoKE2wzfbMw/hNiyqi2cYFDydXT1HIt7N2umOp0pYkNwzVymxzOzx11uaumQm6+tXnHsUm+NrIvha7WMYepx4DGOcBJgLI16nv4+frLu4F4cZPAZ2MaqBM/TKmdf0FmfHnWsDQXB+B5vmU38BFXSNKr/osTlBi9CeGFVSUdrY88zCr9ksBayHs0pVCqJqHAN8fVjk6h3U9vocjpR3C75UxBFTmYfPD9zweeDPFGAcrUTIDy8w4g/TVMTUsPkelEu3WbsHCt+i9nSghLN0CWMpEsXwAMH7hV+OvDXSgDbeFXi+fsOe0LrBZ3xOM9SHQg/7eLHi+8bpvj0kWrEHkBVjngrHthTPLBJaBmmwvoQHYxoCjOdaVYq/9HwqX6FjfAYCWLrgyCC15FjlY2m8mCieWUAToHeb9bpNes0Dptd8qVvCSppVhA+hULAap8ViPvsSlNIh86OiFa1N2mgwWDFTew5HWU+09s06fsPC2/XSWoyB0EEvjrLoClt7JcKmPkXH3vmixWAOOP9KSTNQKquAYZLrPyBqHwP1VFfntwrcrrMOxrAew8FO3fUA3qvPDqfg6fjW/TaYzTr9o0nctnNY8Dt0ChGTdciZtP0FKLojNYS9csmnFothwiY9ffXy1XN0GuZZ+N2t+opM1AYNave34uUHlMoBBYXuA58GNEdVcLUwl/P5Vamuj6RVec34NM6CJVLmU2Td3B5jV3dpgvEUxtHXtxCmngruX6t6GwvVwLmZwW6vCoUqLrvCtLiPTVLlzV3g+G76wfvg4HRrRzgo682u0xtvPwxynFbqbkItUQWcXuLp+4/l+GMtC32J7U+AwfbnLGewiJBlewjW6s1cN9FPfIrgJyDyeJlMVdCUCuVlxhe1UubkBDBgYcafAtymGFZqvJJFfzFH8KRWagh5hjqg6YZLMWy0jD4eWU/WP0znKTwUakuN0MbYyepFdeSfTNW+ZsGvq92LW7oX2+6ZujCKHn7H3m5ZoPDWvbhU5hJd5AFLkdY7LsmMiPX7LOVNIyeGMXadEPb9f4Abk65hUHKbtydCNOezvGQEomWsiH1H9hut5vjWNguRYDlpsvm2szDIcaXwZ3jB+rjn9jHtQ8VrdCnYFf2P/6mMYKpWN0Z2vXcQVgrAJkDzvGraTIRnTuesLRzfPSNW7urzlWq9vSBtrjCOIuvuoN7jKIKeYkX82LOVdVIHI+rIVqr2xHnSuAj67tK+CrJIWvoRCxua1BymZQhtPhG8DA560kLNqI451WFPLqcOde3DPxn8KcXT8F30rxY/IVf/NIXrA6wIicL9uWdd7E2ubHOM6COUmJYpiy6UdCg/nCRpy/Bf1AHPqxUpPh4erFIkmqcnE0UP1ipIbtoHATnMQbn/4wI2bFHfsHxrhnHhwe1MObCanD6lk3fv+TxfoLRsFHz8z+nyZH9CAs7EhUG+YURRvREA/it7hxM4N/42cIZBOjVHMPxdVrVvBga5ZjT4VguvmjG/KuXsQv3rh8srKKbiTCBKaoct9uFJvBPKCNkm/Dsk4K2Q1WFifilil7DiCO1sHcc871yEvQgJB0qpnTLPoAwGCluzdl9g6gRM9HnyK0wGcxm4LmJGzFoPIl2P1D8BguXq+qT5Xcm3FUv7ha2YefJTsagywzi7y7TAyUFeJVVOg+Nh+WQXh5A0wDRTL1e/Bv2NqyeXVygrgaMHq3GI7b87xNakvSvT9mziyJe4ZweDJyU0AXiApD9VtP39EP85wH8O8Z+jC/PC+2SWri7XJMDgz6eUY5QLvscL1CfwDRukqlr7yGRf0p/Pry9Jw081DdoM+W+v81xpuuVj4THOMW+yk/JN9kBI/Vg7OCkMC4GLVY60UDaGeZmrnmyzpL48Bb46qgFj0Lv+M7290BSVFLsRwHiQRQ5BP5LQMGESgYop0pWnMHGEXA5WSoWM6RWgoaQH/QeJqtFY02liQXKINJ+IHtuhDLb8EWIkMqqHRJ6v52ifC79g4nSN0og0P4GTngDkCsjCdDYIkK7irdkA6Xnbo5f0WsFhI5WnLDTMI+E/NgE5ap109fgAhmXuerLS1ypUio6pG4iAZaiRvc862AisWlYNro4sKd8IcvNQ9C5OB/C2ilZtvnD0BVV4ujPP1stY9PwvJGbLidDvZJWHbKfYAmj2oDsgpE574lbV41HeKxNNTyydu4K6F2bWBL3HROh9gB6icMM5dG4JGJ6uxqpytXtx874bAw4qmiTLzUvkCp5gRwrWgJCflhFM2JbuYCzRMCYxuqr1XVVNl2tbVSP9AdONkXX+AtGw0h5cLlkaQJQE4/RkOTI0Q3dk2ep9xvYnV97CBDSRYRO2HkAp1gI2TvseWzO/792aWmRbD7ZmP6CxOkU5RftALOXLhPKVtT0V9kCtYepN5eYrHQR3txlegHlhfHUST1EHcnVJrnNhEhYfqgXP3HehWg1OKE9K0ucDd3ZIWaHXi7D/1DJlgCRzM82JnCtlpL09uLe7u//W3U5sr3qdelCI0yM1xl/JecmDVB2B5lgxdxQzNHJB7Tnycs95B/u9Ur+9N7qnHwNbAzNq4bI+sLE/wgj/bZyukHnYEz2Xn1L5r4CHnkBm1JCvWJow5M0gBG/mBXKC2MbI1waxgVCNP18Huu3qcAz2VNUii7x+4NoD/ZxY5CrLzNjhZ7LKCr+QFS64I15BEnNtnrwfSPj/CzmJy2j4+ulpnmQYj94wrDG0kqik93PUPsLQom7s4gl3gD5HEwnoBi8S3V3kVaXI8K4it+6yGR6mXLnCMrT0xt8KLQRDgmKRl1nov8DD+KDBOFWcJ4Y9xqc5jVVdkxZaREOnIo2IL4Rsxvb8DmzP78D23MF22WlG97wN3fMaug8GQt4xrbJpWgdV/egj8qiH86aghSxpzdnD0YF0qdZrVPhW4klkH6mW0pGeJcj1XEOQ23rt3H+svuXgxLdyzG8ViNf8K+it08D7V8JezCy8shlR7qjSNo9Ndo5KWewQi1S5bUJphKmKUL3DlMVGo5OTjQYli3LTKIIikUTsRRK3vZxgwgQS5AQ/BwjtImLBd0Md3Ys7tkNhtwNkvvNk4h7w0vTiDppfcJrfQ5nIZFN0iw9Awcqu98QQaSOUg/Ogh5PTE8+g0x2cop54gWlD+AGEfo7UqmHHwenczkdnxEUDbY1p52F4LaNE8PzzOH81vposir9fzqwTBU0PSZot/CxzKIXBSSGzjRw6YAFDBbiTPUrtB6SePgoEcpikmvVXcCDz4Qu+ZBFQMCXj5DT4cI1eDwJcI1QUQGUEv0++DZuX0Gzu89C3dVc4jzbqZiYOoeXwQplZFirZ/R5XgA7MGbsDwLqU3Ac28e18/4Tz/diC5xBN5swWs43n3RBx8OrvWTpSItgCeWi5rtpXjC6r9M+NvbONsr79uOUG7lUq7OO/v4m1ltzfOb5b7MFD4Me5El/A5cqn6se47rAC8je87ig6LjcUPhkCgvuMi554zSpvjnFKmBjKwxIjh1gPy/UBMtVtTMgmLk1QWkDkZyT+dTxe0ocNNCtitvcxE1CDzYnMfLqLftAj6T9qZSeTqcue+MFcPcZvvROm5k7I6YxjZLbOfoWDWNkJwQNmt6YnmEfG4dmhzKNHhieWlck4hMuy0jJQ/Juqrp9N50oxBy/XlXbA0q25E2Tcrr0prjERakoA7w0AtWS7ZjsGWIKVgSITIOUXA880vTAftfIah1wZ2RGp03vHxGtC873GZqquCY/MwNg7dep5p86r79S5eadWbZQtYC7keR6jU/cxmvUQlSpN+brTMdNF+FVVvnRWQz1ijcuFCkMp1mau2GNQvbu4zt4VfjZWdVaeq8LwzLe6zEKNFgtnS6Chs/L9EizQV8xqdb0EdR22jP3Aah/iavV5h32N4atA9Fg+KMcbY8JDab9hKW0uSSRRwXw4UDZZ2uuuKwIywDBM6GaxDoHz6lYTUfz+YZZ+XO9EIRCGXi8uIXBZ3hAU+i+6vkQXbvh2dnKFgyvl7Tge9JZJL4gUYSHUotldWPUIRrwb5OPZTEunk4H6Wi/TXH2xaNHRYPDPcQaNQghGjOgKB+ojkJoDRVqD3dZyocj5qX7TAVki/eFPPMNmabj3DSBm8cej4fIzGxzUQvNgl+v0BB50r01AcMXXKRJFs7p7iilU5mT/GqSLqZHh22hDIKZULvRPubVThSIEGCpvqp5oyoW5TP8B4REpHRgNN2c6d3JO9nULfadxhgRm5c8EddaJQq9XvC9GPA/dF7H82AjkNRjyPxUsM5QHHQQZVEKwNlQjTUuqHZaXK7Id4lLuKzQEkGaM15dPD9KjrWNPrYOvZrU8qvrvjMf3Rdwq/gvZwQF0xdYIvasxGmZmigOk/SrpEWu3Ca8NNGH2X/VXBbdDafvE20PyQHOvmwtMe7TqwT+ZzSB6XciJQhd7g3eoV0jlgykgmAOcGRw+E39FogzoajBIhDZ7eAao9zYH+2HoNgIJpwXTfx6asW/GvDb2MzYJ9fbkPJlozRPniIGpeQkINulfLorr2XiKZqFYDH8MQQK5MSjJK+fJNgXCuENiGQuys/MIPgmKxrFM5mWcmydXXfMEnSxBdHSaLEMymnwP58rBUB4+uni/3AORySxZwWQNJ+PP3bkjMo3kNSxWKH/jlUa9a7SNdCGHvWsJ//V+w4z34u2LJ5GQ+Gd4dEw/Dh4dCmqNHInN6c/stvLGWcNts1VrKGeWiyEdoHqBqGd2tnk+/rbNjYTD7Dp86R3az2wBL5qXKkXXPRo4dOCO3UtUIzM6OBmUgN+TfjFe571WymjQGuev0woJMMRJpJzV5Cefn5MvogPFDVlPHRKS1nqrlamDKmt/IMXPQFjM/kfO19si5+n9IJYJvkGtspcqzvSH6Xg1im7jlEhAYnvKfbPy3lonrXEKn9fz357i03YygE9icH4A4zSbBoog2XiFPy1xQMP16pFDVp7pBhcJzk2lLSZWaSjtPcrLHTh3q8qZ77lqkZDjhWpXyIeS92TB14HnlbGBz7S+hmlt1PX2K7GXLN6vpOzw5jNFM4yX0tpcGafyhC9JLk2COcESEA6zCa0iSZ134HUa7plh/baFh57NgYthd0ePfMfbRaEK/Yti8vh9t70j99sjoQ5VW61eCZ/zcWX+ZbT5oprNRGoYPmFWdW3j2tpm5JHAx/45J3l2UR6WcnI3LH4UcREdI6Uxj4LqKWBSplrHOIOYrqc6Jzcu2VEHDNI+ohnfNFe1WM9LkAEGfXBmOOl0ruvjPLwpNonpMC0+/wp1QS15i+nLMbOHKrurlnmSrie10IPRKR7eJ/uUCPz3wYmf+uB7qyciG535Zflq4ELiBGz1wNQUtbBaL6BjwbutohfyCRm2T4iJhOafD9uF7ovnfw+5khZ2dpueHHxDTxzrpoPIdssTvQ/O9xpeFQ3oNjCa1htsBnrC83OUheIoDdvpspQFspSTJpZyqVjKznWVp1zWecqlhP9610rXwkV3+15fyRmWOZNKzkGZM7/1zTW9yvs37gBPYhOPIR8O6NeG8xe7B1BVHHzsPwmQNTZ0TiVm/HgwrSy4i716tn4oiBKresNom/sGmyU9ZaOR419YwAIf4gvPDSVDjwJSuQ7MFMXKz3zuhBrWLOwBSgwRNyoQQwtxd3UH1eBRvYb8ET4On5XLNyqXL77z0LRrWT17Lgz63dIBuXlV9ujkNW54eLKr/UYsET/KRLQXCVk/yCIfguP6e883zlPVUdoKEUhIWsFuexdw8LhloAt7AWhCXkRa0jKHv4i8GXY+8yBvfkEPYxhTQyFv+j8ZebMG5JUFOsQqDGuD/FFBvAt689TVAvcLv3G+muYBZgwg8K7ZCBEBhFFr22LL0IWoCLcpAhKwqy7rB+XgwxwoIACnsMkOqWLrxqiTadRJ/XORXdyXrSM8y6gj/0exdv/bOLvO/0TWzs/DNbF8zbwNIGMje4N2OWS6AsRG148fQ+0iNk+EYxatoHOfFXShzJ17CAAyVOwjVZjrPtgWolDaFpjevmcEZg83UGXYwneSZU0TrQrc4KSdKJvAk8NBgnaHdNAfDNXHgfo4RNaHzJfUiTVbTtJsfJWIQTQ8ODw6fvjo8ZMfnj57/uOfX7z8l3/96dXPr8//8ubtu1/++re//9u/i5gNWDsoeYpDXl8rBWvrMXwAtAm9gKeOF3Cc/9RloDNjd8U68z7/54PjCy5EUMufghOiFIwfL8+nRdc2hqZkyi7pofYhmfYSVt9KFeoeHIcXpr205x/Bbaet2eW61qwa5qPTTI3vBnGOxbg4OIWbOY68pUvQ3dzbHVgo0121Yi7fJM3Hj9Df8kP73Cy/36UfYzsixvVYaxI55ywZHMdu5XBhqVQPp6rTQDK3CFpuQvzIdiLzNcCvofo6HOJPkzHEjMMwhvMGLWMOZG58gkbx8FivJ4JSc+inKie1UJsm4VNpjSLyn2E1D+UkHOGPQzlxxVFUIJ8t1mMbVoBNZJZUp7JI3MnkUxjG3WznEVhmw0M1jCCHOWX+1nPlAgef0t+WvQ37+ISWdFExc5H/DWlvN9w7HAzC/WFPLD8L21372k98M40or93IZMo94iqlrw1KuV19C4oP/7JezFGhwKAG89IGnvOWpSpr7HjUVfqbKG3aOjQq1gpeONLlUj8pj/RfiezdaqoI9SiTEx02drR9Cyq2Dqp0jUgLVl5f5erTUVu/Wvzy7qlR85LT9aIO8PLtawNwK1+kq+JTugJ9fbxOLFZf8FWsv1bOhOG0/Xg9VVbuq24NUMVOMCE/yfvwOSg9wRrbrp+Diio6sPrzLy+fcePtkDzY4VQvPWryXTGAf5ZcIzjsr9XdbW/oAHWWVi3YC7C0msEtAKQczEHiOfCdQDFqejTKAy8JSUD9sDsnXUIRuMbG+/8xx3DP/7H6jznZLk56ov8PQEpBJxZqZqoIZ8qyLkGtyJF4/a9CHg6iEbqBn8A0Gzc+ChCzHo0EKg5CKA2Tdozgf3v76snPAQSaQIfvNmc4cv10Qe44ePHu3Xlg1ieg9wUEPUBQiKakrgYENYbHlxIUYQ7rMEsYuAPz+PHDUam/82z6cbxG0Uo6uxS3lnSjc2lkLaymO7mS00rLQIG0/hwoImpNHBD0otYoHvqP1b9dvv8rzvBQgxQMutQ8JI8fP5ZW8xnVOzHvL9fAgcF6Q24okapIviBw9TqrpYyE+sSLdBrKj4tuBJROAj0chn3FeCaDkgmg/lpC9nEx/RFE/C0Sd6gvtypl68n0wxWEtP/6VQXNHh4BYq5y654gC8MyNcnwCBkem7vQ8FCxdLcdp3W/c7SvX6ExSKdCpvhxGb5ARoPIHFHRMXwNzdcBfAzMxzDCr9PUhllRnMTAsBJ4wC1FL5OZKkEMBZ4jHxcqAHShbIdEBkv0cYWeRvfyxQxw+CLBAmfin9IsT8cRKhbcDfwRnFYryNucYqP8dTr+lKTudKAPwDX6HUTaSjNDnS6UCtsvb14iYVvMScLCLSCUgn10/PjxcIT/HsiJTTpUSUdx5Ma5LlyLqOgCX3Xc7ImTjXy9waAbPClGyhGe0uIu5ApD+o0mrqlMUaC/JxoBFRMnqb4WcZ2WWE3SKJtdOy/56sV+93QHEOJyHQfoOFCgxomoNQFaH8UUE9KZwWCN6NmZ24uRg/KulOom7YMdA35o3/w7O9WULr4Jw2Vqeb5agC+rlAzVa0kApolChCtqu/laHbHMHaMNU0LetLTCb1fQvQmRqY+61knuCFn+gksO9XWLkE3DM5LWfbd2Civ/i/yN8pj6JEp+ZP3Cm2mInVsKIihipJyrrTh3XHUv+X1lHsbHhydLoKjR6fIMeNTR42P8hLsTfGfwffgQv48ewWcBn5MkMiz8ISB8L4Pb5sRZgks0NLF91aBArHWwU1xLtL7Y2UHKWDfl6LoKoU/BZNccZGmfXs37ZMrSEyMVFt1rysEMLX8lVyehciL5ILIT60b1M/vmD1VIC+h4UGHejXKa8PVn+F/UIdsJu4A2YCEjKFUHH1iUKAV3EZDb8SA3p2rDiryhFBE5p4ScU0CM91NUx+JBE6cSki09DJzwg7mzScrEtN7jBc7NPBlSl7vpWWpU09TcuktgfSOwsTt+MDPMNrKWXTUDu1VSynSoUAfI24QO4Xr/VpTzCrZ2NTcSaVvtyiXaiuCzK9OarsC2Vgl+8SGdYYRx7JNnpDqOHi+jYoadCSR0jmagOymvFqvKTtzd4ARDt31Q8PPnz1HZXWQyTKKQurNO4lDIqxVIok53/unz8OiHp7FqG447kn/aKo2IU0u6R3NgBMjRxwR8KdpJx/KIeVv13NPboa+3Ee/tMA5+AvJo1UF3HdZyfEW+bM3ZtGbiK4zOkulzIe0vCKIMVnoyUTKdzGah8mXWN88EIAmgt4SMDq5yO+asA8Z0CjHbtp3pHY6ROLILx74KmU5dD+aYOvGk4NXCrZI2i620sJVCV/GKlmS2soJXZhfLXmVhcjzuno7lo7DnJhzKY54Aj+s8YSDpHskSo4GMhhzuEXDHHsBDGVVaiIYyOvRAHsuhpwJIY5P1y2oGzyVMrCdp9Y23bJQgIHR/AttUX3R9Wdal1xm69Co54B3igOPCMLCEPGmCAVpsoQTABid4TcvfYw53qhVeJJXEtBdJTDKMjcUxZ/2YjMksIHUeWgbZico6q6WMSt7M/NDc2c5OU04ftij8UcUVt7IJ4NkmQLYzMBydv/7hC0jjyBY3A5ZGhMDzu4Vqk/BCvYz4Z4HyzupJ958HKr/JROjGN4LadiqolEV4ZlXonNm7DS6tTbL/wQhBSi9RxkfUSUaq+sap9in8IS1h+25GrBB7MrrteDv58+IdVsb4i+/XV7FZ18qekWbt+vV8xrg9tB9Xl7LyqvD1K/9WDzCHj04qYHBReHhaSbtd48F+vQR+r3OyT1LQ0/8/2jbTIwhdCAA=";
63
+
64
+// MeshCommander Local (GZIP'ed, Base64) v0.7.8
65
+var FullSite_IntelAmtLocalWebApp_etag = "PR80FHg+cPmsp2l3pigx";
66
+var FullSite_IntelAmtLocalWebApp = "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";
67
+
68
+
69
+// Check the server certificate fingerprint
70
+function onVerifyServer(clientName, certs) {
71
+ if (certs == null) { certs = clientName; } // Temporary thing until we fix duktape
72
+ try { for (var i in certs) { if (certs[i].fingerprint.replace(/:/g, '') == settings.serverhttpshash) { return; } } } catch (e) { }
73
+ if (settings.serverhttpshash != null) {
74
+ console.log('Error: Failed to verify server certificate.');
75
+ console.log('Server TLS hash: ' + certs[i].fingerprint.replace(/:/g, ''));
76
+ exit(255);
77
+ throw 'Invalid server certificate';
78
+ }
79
+}
80
+
81
+// Various utility functions
82
+function debug(level, message) { if ((settings.debuglevel != null) && (settings.debuglevel >= level)) { console.log(message); } }
83
+function exit(status) { if (status == null) { status = 0; } try { process.exit(status); } catch (e) { } }
84
+function getInstance(x, y) { for (var i in x) { if (x[i]["InstanceID"] == y) return x[i]; } return null; }
85
+function md5hex(str) { return require('MD5Stream').create().syncHash(str).toString('hex'); }
86
+function guidToStr(g) { return g.substring(6, 8) + g.substring(4, 6) + g.substring(2, 4) + g.substring(0, 2) + "-" + g.substring(10, 12) + g.substring(8, 10) + "-" + g.substring(14, 16) + g.substring(12, 14) + "-" + g.substring(16, 20) + "-" + g.substring(20); }
87
+function parceArguments(argv) { var r = {}; for (var i in argv) { i = parseInt(i); if (argv[i].startsWith('--') == true) { var key = argv[i].substring(2).toLowerCase(), val = true; if (((i + 1) < argv.length) && (argv[i + 1].startsWith('--') == false)) { val = argv[i + 1]; } r[key] = val; } } return r; }
88
+
89
+// Convert an object to string with all functions
90
+function objToString(x, p, ret) {
91
+ if (ret == undefined) ret = '';
92
+ if (p == undefined) p = 0;
93
+ if (x == null) { return '[null]'; }
94
+ if (p > 8) { return '[...]'; }
95
+ if (x == undefined) { return '[undefined]'; }
96
+ if (typeof x == 'string') { if (p == 0) return x; return '"' + (x.split('\0')[0]) + '"'; }
97
+ if (typeof x == 'buffer') { return '[buffer]'; }
98
+ if (typeof x != 'object') { return x; }
99
+ var r = '{' + (ret ? '\r\n' : ' ');
100
+ for (var i in x) {
101
+ if (i != '_ObjectID') { r += (addPad(p + 2, ret) + i + ': ' + objToString(x[i], p + 2, ret) + (ret ? '\r\n' : ' ')); }
102
+ }
103
+ return r + addPad(p, ret) + '}';
104
+}
105
+
106
+// Return p number of spaces
107
+function addPad(p, ret) { var r = ''; for (var i = 0; i < p; i++) { r += ' '; } return r; }
108
+
109
+// Parse the incoming arguments
110
+function run(argv) {
111
+ if (meshCmdVersion[0] == '*') { meshCmdVersion = ''; } else { meshCmdVersion = ' v' + meshCmdVersion; }
112
+ var args = parceArguments(argv);
113
+ //console.log(JSON.stringify(argv));
114
+ //console.log('addedModules = ' + JSON.stringify(addedModules));
115
+ var actionpath = 'meshaction.txt';
116
+ if (args.actionfile != null) { actionpath = args.actionfile; }
117
+ var actions = ['HELP', 'ROUTE', 'MICROLMS', 'AMTPOWER', 'AMTFEATURES', 'AMTNETWORK', 'AMTLOADWEBAPP', 'AMTLOADSMALLWEBAPP', 'AMTLOADLARGEWEBAPP', 'AMTCLEARWEBAPP', 'AMTSTORAGESTATE', 'AMTINFO', 'AMTINFODEBUG', 'AMTVERSIONS', 'AMTHASHES', 'AMTSAVESTATE', 'AMTSCRIPT', 'AMTUUID', 'AMTCCM', 'AMTACM', 'AMTDEACTIVATE', 'AMTACMDEACTIVATE', 'SMBIOS', 'RAWSMBIOS', 'MESHCOMMANDER', 'AMTAUDITLOG', 'AMTEVENTLOG', 'AMTPRESENCE'];
118
+
119
+ // Load the action file
120
+ var actionfile = null;
121
+ try { actionfile = fs.readFileSync(actionpath); } catch (e) { }
122
+ if ((actionpath != 'meshaction.txt') && (actionfile == null)) { console.log('Unable to load \"' + actionpath + '\". Create this file or specify the location using --actionfile [filename].'); exit(1); return; }
123
+ if (actionfile != null) { try { settings = JSON.parse(actionfile); } catch (e) { console.log(actionpath, e); exit(1); return; } } else { if (argv.length >= 2) { settings = { action: argv[1] } } }
124
+ if (settings == null) { settings = {}; }
125
+ var settings2 = {}; for (var i in settings) { settings2[i.toLowerCase()] = settings[i]; } settings = settings2;
126
+
127
+ // Set the arguments
128
+ if ((typeof args.action) == 'string') { settings.action = args.action; }
129
+ if ((typeof args.localport) == 'string') { settings.localport = parseInt(args.localport); }
130
+ if ((typeof args.remotenodeid) == 'string') { settings.remotenodeid = args.remotenodeid; }
131
+ if ((typeof args.name) == 'string') { settings.name = args.name; }
132
+ if ((typeof args.username) == 'string') { settings.username = args.username; }
133
+ if ((typeof args.password) == 'string') { settings.password = args.password; }
134
+ if ((typeof args.url) == 'string') { settings.url = args.url; }
135
+ if ((typeof args.profile) == 'string') { settings.profile = args.profile; }
136
+ if ((typeof args.type) == 'string') { settings.type = args.type; }
137
+ if ((typeof args.user) == 'string') { settings.username = args.user; }
138
+ if ((typeof args.pass) == 'string') { settings.password = args.pass; }
139
+ if ((typeof args.host) == 'string') { settings.hostname = args.host; }
140
+ if ((typeof args.hostname) == 'string') { settings.hostname = args.hostname; }
141
+ if ((typeof args.serverid) == 'string') { settings.serverid = args.serverid; }
142
+ if ((typeof args.serverhttpshash) == 'string') { settings.serverhttpshash = args.serverhttpshash; }
143
+ if ((typeof args.remoteport) == 'string') { settings.remoteport = parseInt(args.remoteport); }
144
+ if ((typeof args.out) == 'string') { settings.output = args.out; }
145
+ if ((typeof args.output) == 'string') { settings.output = args.output; }
146
+ if ((typeof args.debug) == 'string') { settings.debuglevel = parseInt(args.debug); }
147
+ if ((typeof args.debugflags) == 'string') { globalDebugFlags = parseInt(args.debugflags); }
148
+ if ((typeof args.script) == 'string') { settings.script = args.script; }
149
+ if ((typeof args.agent) == 'string') { settings.agent = args.agent; }
150
+ if ((typeof args.proxy) == 'string') { settings.proxy = args.proxy; }
151
+ if ((typeof args.floppy) == 'string') { settings.floppy = args.floppy; }
152
+ if ((typeof args.cdrom) == 'string') { settings.cdrom = args.cdrom; }
153
+ if ((typeof args.tag) == 'string') { settings.tag = args.tag; }
154
+ if ((typeof args.timeout) == 'string') { settings.timeout = parseInt(args.timeout); }
155
+ if (args.debug === true) { settings.debuglevel = 1; }
156
+ if (args.debug) { try { waitForDebugger(); } catch (e) { } }
157
+ if (args.noconsole) { settings.noconsole = true; }
158
+ if (args.nocommander) { settings.noconsole = true; }
159
+ if (args.lmsdebug) { settings.lmsdebug = true; }
160
+ if (args.json) { settings.json = true; }
161
+ if (args.tls) { settings.tls = true; }
162
+ if ((argv.length > 1) && (actions.indexOf(argv[1].toUpperCase()) >= 0)) { settings.action = argv[1]; }
163
+
164
+ // Validate meshaction.txt
165
+ if (settings.action == null) {
166
+ console.log('MeshCentral Command (MeshCmd) ' + meshCmdVersion);
167
+ console.log('No action specified, use MeshCmd like this:\r\n');
168
+ console.log(' meshcmd [action] [arguments...]\r\n');
169
+ console.log('Valid MeshCentral actions:');
170
+ console.log(' Route - Map a local TCP port to a remote computer.');
171
+ console.log('\r\nValid local actions:');
172
+ console.log(' SMBios - Display System Management BIOS tables for this computer.');
173
+ console.log(' RawSMBios - Display RAW System Management BIOS tables for this computer.');
174
+ console.log(' MicroLMS - Run MicroLMS, allowing local access to Intel AMT.');
175
+ console.log(' AmtInfo - Show Intel AMT version and activation state.');
176
+ console.log(' AmtVersions - Show all Intel ME version information.');
177
+ console.log(' AmtHashes - Show all Intel AMT trusted activation hashes.');
178
+ console.log(' AmtCCM - Activate Intel AMT into Client Control Mode.');
179
+ console.log(' AmtACM - Activate Intel AMT into Admin Control Mode.');
180
+ console.log(' AmtDeactivate - Deactivate Intel AMT if activated in Client Control mode.');
181
+ console.log(' AmtAcmDeactivate - Deactivate Intel AMT if activated in Admin Control mode.');
182
+ console.log('\r\nValid local or remote actions:');
183
+ console.log(' MeshCommander - Launch a local MeshCommander web server.');
184
+ console.log(' AmtUUID - Show Intel AMT unique identifier.');
185
+ console.log(' AmtEventLog - Show the Intel AMT event log.');
186
+ console.log(' AmtAuditLog - Show the Intel AMT audit log.');
187
+ console.log(' AmtLoadWebApp - Load MeshCommander in Intel AMT 11.6+ firmware.');
188
+ console.log(' AmtClearWebApp - Clear everything from Intel AMT web storage.');
189
+ console.log(' AmtStorageState - Show contents of the Intel AMT web storage.');
190
+ console.log(' AmtSaveState - Save all Intel AMT WSMAN object to file.');
191
+ console.log(' AmtPresence - Heartbeat a local Intel AMT watchdog agent.');
192
+ console.log(' AmtPower - Perform remote Intel AMT power operation.');
193
+ console.log(' AmtScript - Run .mescript on Intel AMT.');
194
+ console.log(' AmtIDER - Mount local disk image to remote computer.');
195
+ console.log(' AmtFeatures - Intel AMT features & user consent.');
196
+ console.log(' AmtNetwork - Intel AMT network interface settings.');
197
+ console.log('\r\nHelp on a specific action using:\r\n');
198
+ console.log(' meshcmd help [action]');
199
+ exit(1); return;
200
+ }
201
+ if (settings.action == 'help') {
202
+ if (argv.length <= 2) {
203
+ actions.shift();
204
+ console.log('Help usage:\r\n\r\n MeshCmd help [action]\r\n\r\nValid actions are: ' + actions.join(', ') + '.');
205
+ exit(1); return;
206
+ }
207
+ var action = argv[2].toLowerCase();
208
+ if (action == 'route') {
209
+ console.log("The route action is used along with a MeshCentral account to map a local TCP port to a remote port on any computer on your MeshCentral account. This action requires many arguments, to avoid specifying them all it's best to download the meshaction.txt file from the web site and place it in the current folder. Example usage:\r\n\r\n (Place meshaction.txt file in current folder)\r\n meshcmd route --pass myAccountPassword");
210
+ } else if (action == 'smbios') {
211
+ console.log("SMBios action will display this computer's system management BIOS information. Example usage:\r\n\r\n meshcmd smbios --out smbios.txt\r\n");
212
+ console.log('\r\Optional arguments:\r\n');
213
+ console.log(' --output [filename] Optional filename to write the results to.');
214
+ } else if (action == 'rawsmbios') {
215
+ console.log("RawSMBios action will display this computer's system management BIOS information in raw hexdecimal form. Example usage:\r\n\r\n meshcmd rawsmbios --out smbios.txt\r\n");
216
+ console.log('\r\Optional arguments:\r\n');
217
+ console.log(' --output [filename] Optional filename to write the results to.');
218
+ } else if (action == 'amtinfo') {
219
+ console.log('AmtInfo action will get the version and activation state of Intel AMT on this computer. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Example usage:\r\n\r\n meshcmd amtinfo');
220
+ } else if ((action == 'amtversion') || (action == 'amtversions')) {
221
+ console.log('AmtVersions will display all version information about Intel AMT on this computer. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Example usage:\r\n\r\n meshcmd amtversions');
222
+ } else if (action == 'amthashes') {
223
+ console.log('Amthashes will display all trusted activations hashes for Intel AMT on this computer. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. These certificates hashes are used by Intel AMT when performing activation into ACM mode. Example usage:\r\n\r\n meshcmd amthashes');
224
+ } else if ((action == 'microlms') || (action == 'lms') || (action == 'amtlms')) {
225
+ console.log('Starts MicroLMS on this computer, allowing local access to Intel AMT on TCP ports 16992 and 16993 when applicable. The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. These certificates hashes are used by Intel AMT when performing activation into ACM mode. Example usage:\r\n\r\n meshcmd microlms');
226
+ console.log('\r\nPossible arguments:\r\n');
227
+ console.log(' --noconsole MeshCommander for LMS will no be available on port 16994.');
228
+ console.log('\r\nRun as a background service:\r\n');
229
+ console.log(' microlms install/uninstall/start/stop.');
230
+ } else if (action == 'amtccm') {
231
+ console.log('AmtCCM will attempt to activate Intel AMT on this computer into client control mode (CCM). The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Intel AMT must be in "pre-provisioning" state for this command to work and a administrator password must be provided.');
232
+ console.log('\r\nPossible arguments:\r\n');
233
+ console.log(' --password [password] Admin password used to activate Intel AMT.');
234
+ console.log('\r\nor:\r\n');
235
+ console.log(' --url [wss://server] Url to the activation server.');
236
+ console.log(' --tag [string] Optional string sent to the server during activation.');
237
+ console.log(' --serverhttpshash [hash] Optional TLS server certificate hash.');
238
+ console.log(' --profile [string] Optional profile used for server activation.');
239
+ } else if (action == 'amtacm') {
240
+ console.log('AmtACM will attempt to activate Intel AMT on this computer into admin control mode (ACM). The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Intel AMT must be in "pre-provisioning" state for this command to work. Example usage:\r\n\r\n meshcmd amtacm --url [url]');
241
+ console.log('\r\nPossible arguments:\r\n');
242
+ console.log(' --url [wss://server] The address of the Intel AMT activation server.');
243
+ console.log(' --tag [string] Optional string sent to the server during activation.');
244
+ console.log(' --serverhttpshash [hash] Optional TLS server certificate hash.');
245
+ console.log(' --profile [string] Optional profile used for server activation.');
246
+ } else if (action == 'amtdeactivate') {
247
+ console.log('AmtDeactivate will attempt to deactivate Intel AMT on this computer when in client control mode (CCM). The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Intel AMT must be activated in client control mode for this command to work. Example usage:\r\n\r\n meshcmd amtdeactivate');
248
+ } else if (action == 'amtacmdeactivate') {
249
+ console.log('AmtACMDeactivate will attempt to deactivate Intel AMT on this computer when in admin control mode (ACM). The command must be run on a computer with Intel AMT, must run as administrator and the Intel management driver must be installed. Intel AMT must be activated in admin control mode for this command to work. Example usage:\r\n\r\n meshcmd amtacmdeactivate');
250
+ console.log('\r\nPossible arguments:\r\n');
251
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
252
+ console.log(' --pass [password] The Intel AMT login password.');
253
+ console.log(' --type [partial/full] Specifies to perform partial or full unprovision.');
254
+ } else if (action == 'amtuuid') {
255
+ console.log('AmtUUID action will get the unique identifier of the local or remote Intel AMT computer. By default, the local UUID is obtained unless a host is specified. Intel AMT must be activated for this command to work. Example usage:\r\n\r\n meshcmd amtuuid --host 1.2.3.4 --user admin --pass mypassword --tls');
256
+ console.log('\r\nPossible arguments:\r\n');
257
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
258
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
259
+ console.log(' --pass [password] The Intel AMT login password.');
260
+ console.log(' --tls Specifies that TLS must be used.');
261
+ } else if ((action == 'amtloadwebapp') || (action == 'amtloadsmallwebapp') || (action == 'amtloadlargewebapp') || (action == 'amtclearwebapp') || (action == 'amtstoragestate')) {
262
+ console.log('AmtLoadWebApp action will load MeshCommander into Intel AMT 11.6 or higher. If the computer is in ACM mode, MeshCommander will replace the default index.htm on HTTP/16992 or HTTPS/16993. If Intel AMT is in CCM mode, MeshCommander will be installed alongside the default web page and will be accessible in the "Web Applications" section. This action works on Intel AMT 11.6 and higher only. Example usage:\r\n\r\n meshcmd amtloadwebapp --host 1.2.3.4 --user admin --pass mypassword --tls');
263
+ console.log('\r\nPossible arguments:\r\n');
264
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
265
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
266
+ console.log(' --pass [password] The Intel AMT login password.');
267
+ console.log(' --tls Specifies that TLS must be used.');
268
+ } else if (action == 'amtclearwebstorage') {
269
+ console.log('AmtClearWebStorage will clear the web storage of Intel AMT, removing any loaded firmware version of MeshCommander. This command can clear the local or a remote Intel AMT computer. By default, the local computer storage is cleared unless a host is specified. Intel AMT must be activated for this command to work. This action works on Intel AMT 11.6 and higher only. Example usage:\r\n\r\n meshcmd amtclearwebstorage --host 1.2.3.4 --user admin --pass mypassword --tls');
270
+ console.log('\r\nPossible arguments:\r\n');
271
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
272
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
273
+ console.log(' --pass [password] The Intel AMT login password.');
274
+ console.log(' --tls Specifies that TLS must be used.');
275
+ } else if (action == 'amtstoragestate') {
276
+ console.log('AmtStorageState will display the content of the web storage of Intel AMT including any loaded firmware version of MeshCommander. This command can read the storage state of a local or remote Intel AMT computer. By default, the local computer storage state is displayed unless a host is specified. Intel AMT must be activated for this command to work. This action works on Intel AMT 11.6 and higher only. Example usage:\r\n\r\n meshcmd amtstoragestate --host 1.2.3.4 --user admin --pass mypassword --tls');
277
+ console.log('\r\nPossible arguments:\r\n');
278
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
279
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
280
+ console.log(' --pass [password] The Intel AMT login password.');
281
+ console.log(' --tls Specifies that TLS must be used.');
282
+ } else if (action == 'amtsavestate') {
283
+ console.log('AmtSaveState action will fetch all the entire state of Intel AMT and save it as a JSON file. This action will take multiple minutes to perform. The command will fetch the local computer state unless host is specified. Intel AMT must be ativated for this command to work. Example usage:\r\n\r\n meshcmd amtsavestate --host 1.2.3.4 --user admin --pass mypassword --tls --output state.json');
284
+ console.log('\r\nPossible arguments:\r\n');
285
+ console.log(' --output [filename] The output file for the Intel AMT state in JSON format.');
286
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
287
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
288
+ console.log(' --pass [password] The Intel AMT login password.');
289
+ console.log(' --tls Specifies that TLS must be used.');
290
+ } else if (action == 'amtpresence') {
291
+ console.log('AmtPresence will heartbeat a local Intel AMT watchdog agent. Example usage:\r\n\r\n meshcmd amtpresence --agent B4B6A24C-255E-A75C-F5E8-B00B4D946AA7');
292
+ console.log('\r\nPossible arguments:\r\n');
293
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
294
+ console.log(' --pass [password] The Intel AMT login password.');
295
+ console.log(' --agent [uuid] The unique identifier of the watchdog agent.');
296
+ } else if (action == 'amtscript') {
297
+ console.log('AmtScript will run a .mescript file on the local or remote Intel AMT. Script files can be built using the MeshCommander script editor and be used to setup or perform actions on Intel AMT. Example usage:\r\n\r\n meshcmd amtscript --script myscript.mescript --host 1.2.3.4 --user admin --pass mypassword --tls');
298
+ console.log('\r\nPossible arguments:\r\n');
299
+ console.log(' --script [filename] The script file to run on Intel AMT.');
300
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
301
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
302
+ console.log(' --pass [password] The Intel AMT login password.');
303
+ console.log(' --tls Specifies that TLS must be used.');
304
+ } else if (action == 'amtpower') {
305
+ console.log('AmtPower will get current pwoer state or send a reboot command to a remote Intel AMT device. Example usage:\r\n\r\n meshcmd amtpower --reset --host 1.2.3.4 --user admin --pass mypassword --tls');
306
+ console.log('\r\nRequired arguments:\r\n');
307
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT.');
308
+ console.log(' --pass [password] The Intel AMT login password.');
309
+ console.log('\r\nOptional arguments:\r\n');
310
+ console.log(' --reset, --poweron, --poweroff, --powercycle, --sleep, --hibernate');
311
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
312
+ console.log(' --tls Specifies that TLS must be used.');
313
+ } else if (action == 'amtnetwork') {
314
+ console.log('AmtNetwork is used to get/set Intel AMT network interface configuration. Example usage:\r\n\r\n meshcmd amtnetwork --host 1.2.3.4 --user admin --pass mypassword --dhcp');
315
+ console.log('\r\nRequired arguments:\r\n');
316
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
317
+ console.log(' --pass [password] The Intel AMT login password.');
318
+ console.log('\r\nOptional arguments:\r\n');
319
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
320
+ console.log(' --tls Specifies that TLS must be used.');
321
+ console.log(' --ipsync [0 or 1] Change the wired IPSync setting on Intel AMT 7+');
322
+ console.log(' --dhcp Change IPv4 wired interface to DHCP mode');
323
+ console.log(' --static Change IPv4 wired interface to static IP mode');
324
+ console.log(' --ip [1.2.3.4] Static IPv4 address (required)');
325
+ console.log(' --subnet [1.2.3.4] Static IPv4 subnet mask');
326
+ console.log(' --gateway [1.2.3.4] Static IPv4 default gateway');
327
+ console.log(' --dns [1.2.3.4] Primary DNS IPv4 address');
328
+ console.log(' --dns2 [1.2.3.4] Secondary DNS IPv4 address');
329
+ } else if (action == 'amtfeatures') {
330
+ console.log('AmtFeatures is used to get/set Intel AMT feature configuration. Example usage:\r\n\r\n meshcmd amtfeatures --host 1.2.3.4 --user admin --pass mypassword --tls --redir 1');
331
+ console.log('\r\nRequired arguments:\r\n');
332
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
333
+ console.log(' --pass [password] The Intel AMT login password.');
334
+ console.log('\r\nOptional arguments:\r\n');
335
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
336
+ console.log(' --tls Specifies that TLS must be used.');
337
+ console.log(' --consent [none/kvm/all] Set Intel AMT user consent feature.');
338
+ console.log(' --redir [0/1] Set Intel AMT redirection port feature.');
339
+ console.log(' --kvm [0/1] Set Intel AMT KVM feature.');
340
+ console.log(' --sol [0/1] Set Intel AMT Serial-over-LAN feature.');
341
+ console.log(' --ider [0/1] Set Intel AMT IDE redirection feature.');
342
+ } else if (action == 'meshcommander') {
343
+ console.log('This action launched a local web server that hosts MeshCommander, a Intel AMT management console.');
344
+ console.log('\r\nPossible arguments:\r\n');
345
+ console.log(' --localport [port] Local port used for the web server, 3000 is default.');
346
+ console.log('\r\nRun as a background service:\r\n');
347
+ console.log(' meshcommander install/uninstall/start/stop.');
348
+ } else if (action == 'amteventlog') {
349
+ console.log('AmtEventLog action will fetch the local or remote event log. Example usage:\r\n\r\n meshcmd amteventlog --host 1.2.3.4 --user admin --pass mypassword --tls --output events.txt');
350
+ console.log('\r\nPossible arguments:\r\n');
351
+ console.log(' --output [filename] The output file for the Intel AMT event log.');
352
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
353
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
354
+ console.log(' --pass [password] The Intel AMT login password.');
355
+ console.log(' --tls Specifies that TLS must be used.');
356
+ console.log(' --json Output as a JSON format.');
357
+ } else if (action == 'amtauditlog') {
358
+ console.log('AmtAuditLog action will fetch the local or remote audit log. If used localy, no username/password is required. Example usage:\r\n\r\n meshcmd amtauditlog --host 1.2.3.4 --user admin --pass mypassword --tls --output audit.json');
359
+ console.log('\r\nPossible arguments:\r\n');
360
+ console.log(' --output [filename] The output file for the Intel AMT audit log.');
361
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT, 127.0.0.1 is default.');
362
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
363
+ console.log(' --pass [password] The Intel AMT login password.');
364
+ console.log(' --tls Specifies that TLS must be used.');
365
+ console.log(' --json Output as a JSON format.');
366
+ } else if (action == 'amtider') {
367
+ console.log('AmtIDER will mount a local disk images to a remote Intel AMT computer. Example usage:\r\n\r\n meshcmd amtider --host 1.2.3.4 --user admin --pass mypassword --tls --floppy disk.img --cdrom disk.iso');
368
+ console.log('\r\nPossible arguments:\r\n');
369
+ console.log(' --host [hostname] The IP address or DNS name of Intel AMT.');
370
+ console.log(' --user [username] The Intel AMT login username, admin is default.');
371
+ console.log(' --pass [password] The Intel AMT login password.');
372
+ console.log(' --tls Specifies that TLS must be used.');
373
+ console.log(' --floppy [file] Specifies .img file to be mounted as a flppy disk.');
374
+ console.log(' --cdrom [file] Specifies .img file to be mounted as a CDROM disk.');
375
+ console.log(' --timeout [seconds] Optional, disconnect after number of seconds without disk read.');
376
+ } else {
377
+ actions.shift();
378
+ console.log('Invalid action, usage:\r\n\r\n meshcmd help [action]\r\n\r\nValid actions are: ' + actions.join(', ') + '.');
379
+ }
380
+ exit(1); return;
381
+ }
382
+ settings.action = settings.action.toLowerCase();
383
+ debug(1, "Settings: " + JSON.stringify(settings));
384
+
385
+ // Setup the proxy if needed
386
+ if ((typeof settings.proxy) == 'string') {
387
+ var proxy = settings.proxy.split(':'), proxyport = (proxy.length == 2) ? parseInt(proxy[1]) : 0;
388
+ if ((proxy.length != 2) || (proxy[0].length < 1) || (proxyport < 1) || (proxyport > 65535)) { console.log('Invalid \"proxy\" specified, use --proxy [hostname]:[port].'); exit(1); return; }
389
+ try { require('global-tunnel').initialize({ host: proxy[0], port: proxyport }); } catch (ex) { console.log(ex); exit(1); return; }
390
+ console.log('Proxy set to ' + proxy[0] + ':' + proxyport);
391
+ }
392
+
393
+ if (settings.action == 'smbios') {
394
+ // Display SM BIOS tables in raw form
395
+ SMBiosTables = require('smbios');
396
+ SMBiosTables.get(function (data) {
397
+ var r = SMBiosTables.parse(data);
398
+ var out = objToString(r, 0, '\r\n');
399
+ if (settings.output == null) { console.log(out); } else { var file = fs.openSync(settings.output, 'w'); fs.writeSync(file, Buffer.from(out, 'utf8')); fs.closeSync(file); }
400
+ exit(1);
401
+ });
402
+ } else if (settings.action == 'rawsmbios') {
403
+ // Display SM BIOS tables in raw form
404
+ SMBiosTables = require('smbios');
405
+ SMBiosTables.get(function (data) {
406
+ var out = '';
407
+ for (var i in data) { var header = false; for (var j in data[i]) { if (data[i][j].length > 0) { if (header == false) { out += ('Table type #' + i + ((SMBiosTables.smTableTypes[i] == null) ? '' : (', ' + SMBiosTables.smTableTypes[i]))) + '\r\n'; header = true; } out += (' ' + data[i][j].toString('hex')) + '\r\n'; } } }
408
+ if (settings.output == null) { console.log(out); } else { var file = fs.openSync(settings.output, 'w'); fs.writeSync(file, Buffer.from(out, 'utf8')); fs.closeSync(file); }
409
+ exit(1);
410
+ });
411
+ } else if (settings.action == 'route') {
412
+ // MeshCentral Router, port map local TCP port to a remote computer
413
+ if ((settings.localport == null) || (typeof settings.localport != 'number') || (settings.localport < 0) || (settings.localport > 65535)) { console.log('No or invalid \"localPort\" specified, use --localport [localport].'); exit(1); return; }
414
+ if ((settings.remotenodeid == null) || (typeof settings.remotenodeid != 'string')) { console.log('No or invalid \"remoteNodeId\" specified.'); exit(1); return; }
415
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { console.log('No or invalid \"username\" specified, use --username [username].'); exit(1); return; }
416
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
417
+ if ((settings.serverid == null) || (typeof settings.serverid != 'string') || (settings.serverid.length != 96)) { console.log('No or invalid \"serverId\" specified.'); exit(1); return; }
418
+ if ((settings.serverhttpshash == null) || (typeof settings.serverhttpshash != 'string') || (settings.serverhttpshash.length != 96)) { console.log('No or invalid \"serverHttpsHash\" specified.'); exit(1); return; }
419
+ if ((settings.remoteport == null) || (typeof settings.remoteport != 'number') || (settings.remoteport < 0) || (settings.remoteport > 65535)) { console.log('No or invalid \"remotePort\" specified, use --remoteport [remoteport].'); exit(1); return; }
420
+ if (settings.serverurl != null) { startRouter(); } else { discoverMeshServer(); } // Start MeshCentral Router
421
+ } else if ((settings.action == 'amtloadwebapp') || (settings.action == 'amtloadsmallwebapp') || (settings.action == 'amtloadlargewebapp') || (settings.action == 'amtclearwebapp') || (settings.action == 'amtstoragestate')) { // Intel AMT Web Application Actions
422
+ // Intel AMT 11.6+ Load MeshCommander into firmware
423
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
424
+ if ((settings.hostname == null) || (typeof settings.hostname != 'string') || (settings.hostname == '')) { settings.hostname = '127.0.0.1'; }
425
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
426
+ settings.protocol = 'http:';
427
+ settings.localport = 16992;
428
+ debug(1, "Settings: " + JSON.stringify(settings));
429
+ digest = require('http-digest').create(settings.username, settings.password);
430
+ digest.http = require('http');
431
+ if (settings.action == 'amtstoragestate') {
432
+ getAmtStorage(function (statusCode, data) { if (statusCode == 200) { console.log("Storage State: " + JSON.stringify(data, null, 2)); exit(); return; } else { console.log("Unable to read storage state."); exit(); return; } });
433
+ } else {
434
+ if (settings.action == 'amtloadwebapp') { settings.webapp = Medium_IntelAmtWebApp; }
435
+ else if (settings.action == 'amtloadsmallwebapp') { settings.webapp = Small_IntelAmtWebApp; }
436
+ else if (settings.action == 'amtloadlargewebapp') { settings.webapp = Large_IntelAmtWebApp; }
437
+ else if (settings.action == 'amtclearwebapp') { settings.webapp = null; }
438
+ nextStepStorageUpload();
439
+ }
440
+ } else if ((settings.action == 'amtversion') || (settings.action == 'amtversions') || (settings.action == 'amtver')) {
441
+ // Display Intel AMT versions
442
+ var amtMeiModule, amtMei;
443
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
444
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
445
+ amtMei.getVersion(function (val) {
446
+ console.log("MEI Version = " + val.BiosVersion.toString());
447
+ for (var version in val.Versions) { console.log(val.Versions[version].Description + " = " + val.Versions[version].Version); }
448
+ exit(1); return;
449
+ });
450
+ } else if (settings.action == 'amthashes') {
451
+ // Display Intel AMT list of trusted hashes
452
+ var amtMeiModule, amtMei;
453
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
454
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
455
+ amtMei.getHashHandles(function (handles) {
456
+ exitOnCount = handles.length;
457
+ for (var i = 0; i < handles.length; ++i) {
458
+ this.getCertHashEntry(handles[i], function (result) {
459
+ console.log(result.name + ', (' + (result.isDefault ? 'Default' : '') + (result.isActive ? ', Active' : ', Disabled') + ')\r\n ' + result.hashAlgorithmStr + ': ' + result.certificateHash);
460
+ if (--exitOnCount == 0) { exit(1); }
461
+ });
462
+ }
463
+ });
464
+ } else if (settings.action == 'netinfo') {
465
+ // Display network information
466
+ var interfaces = require('os').networkInterfaces();
467
+ console.log(JSON.stringify(interfaces, 2, ' '));
468
+ exit(0); return;
469
+ } else if (settings.action == 'amtinfo') {
470
+ // Display Intel AMT version and activation state
471
+ mestate = {};
472
+ var amtMeiModule, amtMei;
473
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
474
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
475
+ amtMei.getVersion(function (result) { if (result) { for (var version in result.Versions) { if (result.Versions[version].Description == 'AMT') { mestate.ver = result.Versions[version].Version; } } } });
476
+ amtMei.getProvisioningState(function (result) { if (result) { mestate.ProvisioningState = result; } });
477
+ amtMei.getProvisioningMode(function (result) { if (result) { mestate.ProvisioningMode = result; } });
478
+ amtMei.getEHBCState(function (result) { if (result) { mestate.ehbc = result; } });
479
+ amtMei.getControlMode(function (result) { if (result) { mestate.controlmode = result; } });
480
+ amtMei.getMACAddresses(function (result) { if (result) { mestate.mac = result; } });
481
+ amtMei.getLanInterfaceSettings(0, function (result) { if (result) { mestate.net0 = result; } });
482
+ amtMei.getLanInterfaceSettings(1, function (result) { if (result) { mestate.net1 = result; } });
483
+ amtMei.getUuid(function (result) { if ((result != null) && (result.uuid != null)) { mestate.uuid = result.uuid; } });
484
+ amtMei.getDnsSuffix(function (result) {
485
+ if (result) { mestate.dns = result; }
486
+ if (mestate.ver && mestate.ProvisioningState && mestate.ProvisioningMode) {
487
+ var str = 'Intel AMT v' + mestate.ver;
488
+ if (mestate.ProvisioningState.stateStr == 'PRE') { str += ', pre-provisioning state'; }
489
+ else if (mestate.ProvisioningState.stateStr == 'IN') { str += ', in-provisioning state'; }
490
+ else if (mestate.ProvisioningState.stateStr == 'POST') {
491
+ if (mestate.ProvisioningMode) {
492
+ if (mestate.controlmode) {
493
+ if (mestate.ProvisioningMode.modeStr == 'ENTERPRISE') { str += ', activated in ' + ["none", "client control mode", "admin control mode", "remote assistance mode"][mestate.controlmode.controlMode]; } else { str += ', activated in ' + mestate.ProvisioningMode.modeStr; }
494
+ } else {
495
+ str += ', activated in ' + mestate.ProvisioningMode.modeStr;
496
+ }
497
+ }
498
+ }
499
+ if ((mestate.ehbc) && (mestate.ehbc.EHBC == true)) { str += ', EHBC enabled'; }
500
+ str += '.';
501
+ if (mestate.net0 != null) { str += '\r\nWired ' + ((mestate.net0.enabled == 1) ? 'Enabled' : 'Disabled') + ((mestate.net0.dhcpEnabled == 1) ? ', DHCP' : ', Static') + ', ' + mestate.net0.mac + (mestate.net0.address == '0.0.0.0' ? '' : (', ' + mestate.net0.address)); }
502
+ if (mestate.net1 != null) { str += '\r\nWireless ' + ((mestate.net1.enabled == 1) ? 'Enabled' : 'Disabled') + ((mestate.net1.dhcpEnabled == 1) ? ', DHCP' : ', Static') + ', ' + mestate.net1.mac + (mestate.net1.address == '0.0.0.0' ? '' : (', ' + mestate.net1.address)); }
503
+ if ((mestate.ProvisioningState.stateStr != 'POST') && (mestate.net0 != null) && (mestate.net0.enabled == 1)) {
504
+ if (mestate.dns != null) {
505
+ // Intel AMT has a trusted DNS suffix set, use that one.
506
+ str += '\r\nTrusted DNS suffix: ' + mestate.dns;
507
+ } else {
508
+ // Look for the DNS suffix for the Intel AMT Ethernet interface
509
+ var fqdn = null, interfaces = require('os').networkInterfaces();
510
+ for (var i in interfaces) {
511
+ for (var j in interfaces[i]) {
512
+ if ((interfaces[i][j].mac == mestate.net0.mac) && (interfaces[i][j].fqdn != null) && (interfaces[i][j].fqdn != '')) { fqdn = interfaces[i][j].fqdn; }
513
+ }
514
+ }
515
+ if (fqdn != null) { str += '\r\nDNS suffix: ' + fqdn; }
516
+ }
517
+ }
518
+ console.log(str + '.');
519
+ } else {
520
+ console.log('Intel(R) AMT not supported.');
521
+ }
522
+ exit(1);
523
+ });
524
+ } else if (settings.action == 'amtinfodebug') {
525
+ // Display Intel AMT version and activation state
526
+ mestate = {};
527
+ var amtMeiModule, amtMei;
528
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
529
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
530
+ amtMei.getVersion(function (result) { console.log('getVersion: ' + JSON.stringify(result)); });
531
+ amtMei.getProvisioningState(function (result) { console.log('getProvisioningState: ' + JSON.stringify(result)); });
532
+ amtMei.getProvisioningMode(function (result) { console.log('getProvisioningMode: ' + JSON.stringify(result)); });
533
+ amtMei.getEHBCState(function (result) { if (result) { console.log('getEHBCState: ' + JSON.stringify(result)); } });
534
+ amtMei.getControlMode(function (result) { if (result) { console.log('getControlMode: ' + JSON.stringify(result)); } });
535
+ amtMei.getMACAddresses(function (result) { if (result) { console.log('getMACAddresses: ' + JSON.stringify(result)); } });
536
+ amtMei.getLanInterfaceSettings(0, function (result) { console.log('getLanInterfaceSettings0: ' + JSON.stringify(result)); });
537
+ amtMei.getLanInterfaceSettings(1, function (result) { console.log('getLanInterfaceSettings1: ' + JSON.stringify(result)); });
538
+ amtMei.getUuid(function (result) { console.log('getUuid: ' + JSON.stringify(result)); });
539
+ amtMei.getDnsSuffix(function (result) { console.log('getDnsSuffix: ' + JSON.stringify(result)); exit(1); });
540
+ } else if (settings.action == 'amtsavestate') {
541
+ // Save the entire state of Intel AMT info a JSON file
542
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
543
+ if ((settings.hostname == null) || (typeof settings.hostname != 'string') || (settings.hostname == '')) { settings.hostname = '127.0.0.1'; }
544
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
545
+ if ((settings.output == null) || (typeof settings.output != 'string') || (settings.output == '')) { console.log('No or invalid \"output\" file specified, use --output [filename].'); exit(1); return; }
546
+ settings.protocol = 'http:';
547
+ settings.localport = 16992;
548
+ debug(1, "Settings: " + JSON.stringify(settings));
549
+ saveEntireAmtState();
550
+ } else if ((settings.action == 'microlms') || (settings.action == 'amtlms') || (settings.action == 'lms')) {
551
+ // Start Intel AMT MicroLMS
552
+ startLms(function (state) {
553
+ console.log(['MicroLMS did not start. Must run as administrator or LMS already active.', 'MicroLMS started.', 'MicroLMS started, MeshCommander on HTTP/16994.', 'MEI error'][state]);
554
+ if (((state == 0) || (state == 3)) && (settings.noconsole === true)) { exit(0); } else { console.log('Press ctrl-c to exit.'); }
555
+ }, settings.noconsole !== true);
556
+ } else if (settings.action == 'amtpresence') {
557
+ // Heartbeat a Intel AMT watchdog
558
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
559
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
560
+ if ((settings.agent == null) || (typeof settings.agent != 'string') || (settings.agent == '')) { console.log('No or invalid \"agent\" specified, use --agent [agent].'); exit(1); return; }
561
+ performAmtAgentPresence();
562
+ } else if (settings.action == 'amtscript') {
563
+ // Start running a MEScript
564
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
565
+ if ((settings.hostname == null) || (typeof settings.hostname != 'string') || (settings.hostname == '')) { settings.hostname = '127.0.0.1'; }
566
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
567
+ if ((settings.script == null) || (typeof settings.script != 'string') || (settings.script == '')) { if (mescriptJSON != '') { settings.scriptjson = mescriptJSON; } else { console.log('No or invalid \"script\" file specified, use --script [filename].'); exit(1); return; } }
568
+ startMeScript();
569
+ } else if (settings.action == 'amtuuid') {
570
+ // Start running
571
+ if (settings.hostname != null) {
572
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
573
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
574
+ }
575
+ settings.protocol = 'http:';
576
+ settings.localport = 16992;
577
+ debug(1, "Settings: " + JSON.stringify(settings));
578
+ getAmtUuid();
579
+ } else if (settings.action == 'amtccm') {
580
+ // Start activation to CCM
581
+ if (((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) && ((settings.url == null) || (typeof settings.url != 'string') || (settings.url == ''))) { console.log('No or invalid parameters specified, use --password [password] or --url [url].'); exit(1); return; }
582
+ if ((typeof settings.profile != 'string') || (settings.profile == '')) { settings.profile = null; }
583
+ settings.protocol = 'http:';
584
+ settings.localport = 16992;
585
+ debug(1, "Settings: " + JSON.stringify(settings));
586
+ if (settings.password != null) { activeToCCM(); } else { activeToACM(); }
587
+ } else if (settings.action == 'amtacm') {
588
+ // Start activation to ACM
589
+ if ((settings.url == null) || (typeof settings.url != 'string') || (settings.url == '')) { console.log('No activation server URL specified, use --url [url].'); exit(1); return; }
590
+ if ((typeof settings.profile != 'string') || (settings.profile == '')) { settings.profile = null; }
591
+ debug(1, "Settings: " + JSON.stringify(settings));
592
+ activeToACM();
593
+ } else if (settings.action == 'amtdiscover') {
594
+ // Intel AMT server discovery, tell the server the state of Intel AMT.
595
+ if ((settings.url == null) || (typeof settings.url != 'string') || (settings.url == '')) { console.log('No activation server URL specified, use --url [url].'); exit(1); return; }
596
+ debug(1, "Settings: " + JSON.stringify(settings));
597
+ activeToACM();
598
+ } else if (settings.action == 'amtdeactivate') {
599
+ // Deactivate CCM
600
+ debug(1, "Settings: " + JSON.stringify(settings));
601
+ deactivateCCM();
602
+ } else if (settings.action == 'amtacmdeactivate') {
603
+ // Deactivate ACM
604
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
605
+ if ((settings.type == null) || (typeof settings.type != 'string') || (settings.type == '')) { console.log('Unprovisioning \"type\" must be specified, use --type [partial/full].'); exit(1); return; }
606
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
607
+ if (settings.hostname == null) { settings.hostname = '127.0.0.1'; }
608
+ if (settings.tls == null) { settings.tls = false; }
609
+ debug(1, "Settings: " + JSON.stringify(settings));
610
+ deactivateACM();
611
+ } else if (settings.action == 'meshcommander') { // Start MeshCommander
612
+ startMeshCommander();
613
+ //} else if (settings.action == 'amtdisable') { // Disable AMT Network Interface
614
+ // amtDisable();
615
+ } else if (settings.action == 'amtauditlog') { // Read the Intel AMT audit log
616
+ if (settings.hostname != null) {
617
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
618
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
619
+ } else { settings.hostname = '127.0.0.1'; }
620
+ readAmtAuditLog();
621
+ } else if (settings.action == 'amteventlog') { // Read the Intel AMT audit log
622
+ if (settings.hostname == null) { settings.hostname = '127.0.0.1'; }
623
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
624
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
625
+ readAmtEventLog();
626
+ } else if (settings.action == 'amtider') { // Remote mount IDER image
627
+ if ((settings.hostname == null) || (typeof settings.hostname != 'string') || (settings.hostname == '')) { console.log('No or invalid \"hostname\" specified, use --hostname [password].'); exit(1); return; }
628
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
629
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
630
+ if ((settings.floppy == null) || (typeof settings.floppy != 'string') || (settings.floppy == '')) { settings.floppy = null; }
631
+ if ((settings.cdrom == null) || (typeof settings.cdrom != 'string') || (settings.cdrom == '')) { settings.cdrom = null; }
632
+ if ((settings.floppy == null) && (settings.cdrom == null)) { console.log('No or invalid \"floppy\" or \"cdrom\" specified, use --floppy [file] or --cdrom [file].'); exit(1); return; }
633
+ performIder();
634
+ } else if (settings.action == 'amtnetwork') { // Perform remote Intel AMT wired IPv4 configuration operation
635
+ if (settings.hostname == null) { settings.hostname = '127.0.0.1'; }
636
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
637
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
638
+ performAmtNetConfig(args);
639
+ } else if (settings.action == 'amtfeatures') { // Perform remote Intel AMT feature configuration operation
640
+ if (settings.hostname == null) { settings.hostname = '127.0.0.1'; }
641
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
642
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
643
+ performAmtFeatureConfig(args);
644
+ } else if (settings.action == 'amtpower') { // Perform remote Intel AMT power operation
645
+ if ((settings.hostname == null) || (typeof settings.hostname != 'string') || (settings.hostname == '')) { console.log('No or invalid \"hostname\" specified, use --hostname [host].'); exit(1); return; }
646
+ if ((settings.password == null) || (typeof settings.password != 'string') || (settings.password == '')) { console.log('No or invalid \"password\" specified, use --password [password].'); exit(1); return; }
647
+ if ((settings.username == null) || (typeof settings.username != 'string') || (settings.username == '')) { settings.username = 'admin'; }
648
+
649
+ /*
650
+ 2 = Power On
651
+ 3 = Sleep - Light
652
+ 4 = Sleep - Deep
653
+ 5 = Power Cycle (Off Soft)
654
+ 6 = Power Off - Hard
655
+ 7 = Hibernate
656
+ 8 = Power Off - Soft
657
+ 9 = Power Cycle (Off Hard)
658
+ 10 = Master Bus Reset
659
+ 11 = Diagnostic Interrupt (NMI)
660
+ 12 = Power Off - Soft Graceful
661
+ 13 = Power Off - Hard Graceful
662
+ 14 = Master Bus Reset Graceful
663
+ 15 = Power Cycle (Off - Soft Graceful)
664
+ 16 = Power Cycle (Off - Hard Graceful)
665
+ */
666
+
667
+ settings.poweraction = 0;
668
+ if (args.poweron) { settings.poweraction = 2; }
669
+ if (args.sleep) { settings.poweraction = 3; }
670
+ if (args.powercycle) { settings.poweraction = 5; }
671
+ if (args.poweroff) { settings.poweraction = 6; }
672
+ if (args.hibernate) { settings.poweraction = 7; }
673
+ if (args.reset) { settings.poweraction = 10; }
674
+ //if (settings.poweraction == 0) { console.log('No power action, specify --poweron, --sleep, --powercycle, --poweroff, --hibernate, --reset.'); exit(1); return; }
675
+ performAmtPowerAction();
676
+ } else {
677
+ console.log('Invalid \"action\" specified.'); exit(1); return;
678
+ }
679
+}
680
+
681
+//
682
+// Intel AMT Agent Presence
683
+//
684
+
685
+function performAmtAgentPresence() { startLms(function () { tempWatchdogTimer = setTimeout(performAmtAgentPresenceRegister, 3000); }); }
686
+
687
+function performAmtAgentPresenceRegister() {
688
+ // Setup the Intel AMT WSMAN stack
689
+ tempWatchdogTimer = null;
690
+ var transport = require('amt-wsman-duk');
691
+ var wsman = require('amt-wsman');
692
+ var amt = require('amt');
693
+ wsstack = new wsman(transport, '127.0.0.1', settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
694
+ amtstack = new amt(wsstack);
695
+
696
+ // Register the watchdog
697
+ watchdog = { DeviceID: Buffer.from(guidToStr(settings.agent.split('-').join('')).split('-').join(''), 'hex').toString('base64'), Retry: 0 };
698
+ amtstack.AMT_AgentPresenceWatchdog_RegisterAgent(performAmtAgentPresenceRegisterRetry, watchdog, watchdog.Seq, { 'DeviceID': watchdog.DeviceID });
699
+}
700
+
701
+// Called after the agent is registered
702
+function performAmtAgentPresenceRegisterRetry(stack, name, response, status, watchdog) {
703
+ if ((status == 200) && (response.Body.SessionSequenceNumber) && (response.Body.TimeoutInterval)) {
704
+ console.log('Asserting presence of the watchdog...');
705
+ watchdog.Seq = response.Body.SessionSequenceNumber;
706
+ watchdog.Interval = response.Body.TimeoutInterval * 800;
707
+ watchdog.Retry = 0;
708
+ tempWatchdogTimer = setTimeout(performAmtAgentPresenceAssert, watchdog.Interval);
709
+ } else {
710
+ debug(1, 'Failed to register, status = ' + status);
711
+ watchdog.Retry++;
712
+ if (watchdog.Retry < 5) {
713
+ tempWatchdogTimer = setTimeout(function () { amtstack.AMT_AgentPresenceWatchdog_RegisterAgent(performAmtAgentPresenceRegisterRetry, watchdog, watchdog.Seq, { 'DeviceID': watchdog.DeviceID }); }, 1000);
714
+ } else {
715
+ console.log('Failed to register this watchdog.');
716
+ process.exit(0);
717
+ }
718
+ }
719
+}
720
+
721
+// Start a new agent assert
722
+function performAmtAgentPresenceAssert() {
723
+ watchdog.Seq++;
724
+ amtstack.AMT_AgentPresenceWatchdog_AssertPresence(watchdog.Seq, performAmtAgentPresenceAssertRetry, watchdog, 0, { 'DeviceID': watchdog.DeviceID });
725
+}
726
+
727
+// Called after the agent is asserted
728
+function performAmtAgentPresenceAssertRetry(stack, name, response, status, watchdog) {
729
+ if (status == 200) {
730
+ debug(1, 'Succesful assert, sequence = ' + watchdog.Seq);
731
+ watchdog.Retry = 0;
732
+ tempWatchdogTimer = setTimeout(performAmtAgentPresenceAssert, watchdog.Interval);
733
+ } else {
734
+ debug(1, 'Failed to assert, status = ' + status);
735
+ watchdog.Retry++;
736
+ if (watchdog.Retry < 5) {
737
+ amtstack.AMT_AgentPresenceWatchdog_AssertPresence(watchdog.Seq, performAmtAgentPresenceAssertRetry, watchdog, 0, { 'DeviceID': watchdog.DeviceID });
738
+ } else {
739
+ console.log('Failed to assert presence on this watchdog.');
740
+ process.exit(0);
741
+ }
742
+ }
743
+}
744
+
745
+function performAmtAgentPresenceEx5(stack, name, response, status, watchdog) {
746
+ console.log('b', status, watchdog);
747
+ if (status == 200) {
748
+ watchdog.Retry = 0;
749
+ } else {
750
+ watchdog.Retry++;
751
+ if (watchdog.Retry < 5) {
752
+ amtstack.AMT_AgentPresenceWatchdog_AssertPresence(watchdog.Seq, performAmtAgentPresenceEx4, watchdog, 0, { 'DeviceID': watchdog.DeviceID });
753
+ } else {
754
+ console.log('Failed to assert presence on this watchdog.');
755
+ process.exit(0);
756
+ }
757
+ }
758
+}
759
+
760
+
761
+//
762
+// Intel AMT Event Log
763
+//
764
+
765
+function readAmtEventLog() {
766
+ // See if MicroLMS needs to be started
767
+ if ((settings.hostname == '127.0.0.1') || (settings.hostname.toLowerCase() == 'localhost')) {
768
+ settings.noconsole = true; startLms(readAmtEventLogEx);
769
+ } else {
770
+ readAmtEventLogEx(9999);
771
+ }
772
+}
773
+
774
+function readAmtEventLogEx(x) {
775
+ if (x == 9999) {
776
+ var transport = require('amt-wsman-duk');
777
+ var wsman = require('amt-wsman');
778
+ var amt = require('amt');
779
+ wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
780
+ amtstack = new amt(wsstack);
781
+ amtstack.GetMessageLog(readAmtEventLogEx2);
782
+ } else {
783
+ osamtstack.GetMessageLog(readAmtEventLogEx2);
784
+ }
785
+}
786
+
787
+function readAmtEventLogEx2(stack, messages) {
788
+ if (messages == null) {
789
+ console.log('Unable to get event log.');
790
+ } else {
791
+ var out = '';
792
+ if (settings.json) {
793
+ out = JSON.stringify(messages, 4, ' ');
794
+ } else {
795
+ for (var i in messages) { out += messages[i].Time + ', ' + messages[i].EntityStr + ', ' + messages[i].Desc + '\r\n'; }
796
+ }
797
+ if (settings.output == null) { console.log(out); } else {
798
+ var file = fs.openSync(settings.output, 'w');
799
+ fs.writeSync(file, Buffer.from(out));
800
+ fs.closeSync(file);
801
+ }
802
+ }
803
+ exit(1);
804
+}
805
+
806
+//
807
+// Intel AMT Audit Log
808
+//
809
+
810
+function readAmtAuditLog() {
811
+ // See if MicroLMS needs to be started
812
+ if ((settings.hostname == '127.0.0.1') || (settings.hostname.toLowerCase() == 'localhost')) {
813
+ settings.noconsole = true; startLms(readAmtAuditLogEx);
814
+ } else {
815
+ readAmtAuditLogEx(9999);
816
+ }
817
+}
818
+
819
+function readAmtAuditLogEx(x) {
820
+ if (x == 9999) {
821
+ var transport = require('amt-wsman-duk');
822
+ var wsman = require('amt-wsman');
823
+ var amt = require('amt');
824
+ wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
825
+ amtstack = new amt(wsstack);
826
+ amtstack.GetAuditLog(readAmtAuditLogEx2);
827
+ } else {
828
+ osamtstack.GetAuditLog(readAmtAuditLogEx2);
829
+ }
830
+}
831
+
832
+function readAmtAuditLogEx2(stack, response, status) {
833
+ if (status != 200) {
834
+ console.log('Unable to get audit log, status = ' + status + '.');
835
+ } else {
836
+ var out = '';
837
+ if (settings.json) {
838
+ out = JSON.stringify(response, 4, ' ');
839
+ } else {
840
+ for (var i in response) {
841
+ var name = ((response[i].Initiator != '') ? (response[i].Initiator + ': ') : '')
842
+ out += (response[i].Time + ' - ' + name + response[i].Event + '\r\n');
843
+ }
844
+ }
845
+ if (settings.output == null) { console.log(out); } else {
846
+ var file = fs.openSync(settings.output, 'w');
847
+ fs.writeSync(file, Buffer.from(out));
848
+ fs.closeSync(file);
849
+ }
850
+ }
851
+ exit(1);
852
+}
853
+
854
+//
855
+// Disable AMT Network
856
+//
857
+
858
+//function amtDisable() {
859
+// settings.noconsole = true;
860
+// startLms(amtDisableEx);
861
+//}
862
+
863
+//function amtDisableEx(stack, response, status) {
864
+// //console.log(osamtstack);
865
+// osamtstack.Get('AMT_EthernetPortSettings', function (stack, name, response, status) {
866
+// console.log(response.Body);
867
+// });
868
+//}
869
+
870
+//
871
+// MeshCommander local web server
872
+//
873
+
874
+function startMeshCommander() {
875
+ if (settings.localport == null) { settings.localport = 3000; }
876
+
877
+ // Start the web server
878
+ var http = require('http');
879
+ webServer = http.createServer();
880
+ webServer.listen(settings.localport);
881
+ webServer.wsList = {};
882
+ webServer.wsListIndex = 0;
883
+ webServer.on('upgrade', function (req, socket, head) {
884
+ //console.log("WebSocket for " + req.url.split('?')[0]);
885
+ switch (req.url.split('?')[0]) {
886
+ case '/webrelay.ashx': // MeshCommander relay channel
887
+ var ws = socket.upgradeWebSocket();
888
+ socket.ws = ws;
889
+ ws.wsIndex = ++webServer.wsListIndex;
890
+ webServer.wsList[ws.wsIndex] = ws; // Keep a reference so the websocket and forwarder don't get disposed.
891
+ ws.pause();
892
+
893
+ // We got a new web socket connection, initiate a TCP connection to the target Intel AMT host/port.
894
+ var webargs = parseUrlArguments(req.url);
895
+ if (webargs.p) { webargs.p = parseInt(webargs.p); }
896
+ if (webargs.tls) { webargs.tls = parseInt(webargs.tls); }
897
+ if (webargs.tls1only) { webargs.tls1only = parseInt(webargs.tls1only); }
898
+ if (webargs.port) { webargs.port = parseInt(webargs.port); }
899
+ debug(1, 'Opening web socket connection to ' + webargs.host + ':' + webargs.port + '.');
900
+ //console.log('Opening web socket connection to ' + webargs.host + ':' + webargs.port + '.');
901
+ if (webargs.tls == 0) {
902
+ // If this is TCP (without TLS) set a normal TCP socket
903
+ var net = require('net');
904
+ ws.forwardclient = net.connect({ host: webargs.host, port: webargs.port })
905
+ ws.forwardclient.on('connect', function () { debug(1, 'Connected TCP to ' + webargs.host + ':' + webargs.port + '.'); this.pipe(this.ws, { end: false }); this.ws.pipe(this, { end: false }); });
906
+ ws.forwardclient.on('error', function () { debug(1, 'TCP connection error to ' + webargs.host + ':' + webargs.port + '.'); try { this.ws.end(); } catch (e) { } });
907
+ ws.forwardclient.ws = ws;
908
+ } else {
909
+ // If TLS is going to be used, setup a TLS socket
910
+ var tls = require('tls');
911
+ var tlsoptions = { host: webargs.host, port: webargs.port, secureProtocol: ((webargs.tls1only == 1) ? 'TLSv1_method' : 'SSLv23_method'), rejectUnauthorized: false };
912
+ ws.forwardclient = tls.connect(tlsoptions, function () { debug(1, 'Connected TLS to ' + webargs.host + ':' + webargs.port + '.'); this.pipe(this.ws, { end: false }); this.ws.pipe(this, { end: false }); });
913
+ ws.forwardclient.on('error', function () { debug(1, 'TLS connection error to ' + webargs.host + ':' + webargs.port + '.'); try { this.ws.end(); } catch (e) { } });
914
+ ws.forwardclient.ws = ws;
915
+ }
916
+
917
+ // Handle pipe closure
918
+ ws.on('end', function () { debug(1, 'Disconnected from ' + webargs.host + ':' + webargs.port + '.'); try { this.forwardclient.end(); } catch (e) { } delete webServer.wsList[this.wsIndex]; });
919
+ ws.forwardclient.on('end', function () { try { this.ws.end(); } catch (e) { } });
920
+
921
+ break;
922
+ default:
923
+ socket.end();
924
+ break;
925
+ }
926
+ });
927
+ webServer.on('request', function (req, rsp) {
928
+ //console.log("WebRequest for " + req.url.split('?')[0]);
929
+ switch (req.url.split('?')[0]) {
930
+ case '/': // Serve MeshCommander Web Application
931
+ var meshcommander = null;
932
+ try { meshcommander = fs.readFileSync('meshcommander.htm'); } catch (e) { }
933
+ if (meshcommander != null) {
934
+ rsp.writeHead(200, 'OK', { Server: 'JSLMS', 'Cache-Control': 'max-age=0, no-cache', 'X-Frame-Options': 'DENY', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked' });
935
+ rsp.end(meshcommander);
936
+ } else {
937
+ rsp.writeHead(200, 'OK', { Server: 'JSLMS', 'Cache-Control': 'max-age=0, no-cache', 'X-Frame-Options': 'DENY', 'Content-Type': 'text/html', 'Content-Encoding': 'gzip', 'Transfer-Encoding': 'chunked', ETag: FullSite_IntelAmtLocalWebApp_etag });
938
+ rsp.end(Buffer.from(FullSite_IntelAmtLocalWebApp, 'base64'));
939
+ }
940
+ break;
941
+ default: // Unknown request
942
+ rsp.statusCode = 404;
943
+ rsp.statusMessage = "Not Found";
944
+ rsp.end();
945
+ break;
946
+ }
947
+ });
948
+ console.log('MeshCommander running on HTTP port ' + settings.localport + '.');
949
+ console.log('Press ctrl-c to exit.');
950
+}
951
+
952
+
953
+//
954
+// Deactivate Intel AMT CCM
955
+//
956
+
957
+// When called, this will use MEI to deactivate Intel AMT when it's in CCM mode. Simply calls "unprovision" on MEI and checks the return code.
958
+function deactivateCCM() {
959
+ var amtMeiModule, amtMei;
960
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
961
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
962
+ amtMei.unprovision(1, function (status) { if (status == 0) { console.log('Success'); } else { console.log('Error ' + status); } exit(1); });
963
+}
964
+
965
+
966
+//
967
+// Activate Intel AMT to CCM
968
+//
969
+
970
+function activeToCCM() {
971
+ // See if MicroLMS needs to be started and setup the $$OsAdmin wsman stack
972
+ settings.noconsole = true;
973
+ startLms(activeToCCMEx); // TODO: Fix this so that it works even if LMS already running.
974
+}
975
+
976
+function activeToCCMEx(state) {
977
+ osamtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], activeToCCMEx2);
978
+}
979
+
980
+function activeToCCMEx2(stack, name, responses, status) {
981
+ if (status != 200) { console.log('Failed to fetch activation status, status ' + status); exit(1); }
982
+ else if (responses['IPS_HostBasedSetupService'].response['AllowedControlModes'].length != 2) { console.log('Client control mode activation not allowed'); exit(1); }
983
+ else { osamtstack.IPS_HostBasedSetupService_Setup(2, md5hex('admin:' + responses['AMT_GeneralSettings'].response['DigestRealm'] + ':' + settings.password).substring(0, 32), null, null, null, null, activeToCCMEx3); }
984
+}
985
+
986
+function activeToCCMEx3(stack, name, responses, status) {
987
+ if (status != 200) { console.log('Failed to activate, status ' + status); }
988
+ else if (responses.Body.ReturnValue != 0) { console.log('Client control mode activation failed: ' + responses.Body.ReturnValueStr); }
989
+ else { console.log('Success'); exit(0); }
990
+ exit(1);
991
+}
992
+
993
+
994
+
995
+
996
+//
997
+// Deactivate Intel AMT ACM
998
+//
999
+
1000
+// When called, this will use MEI to deactivate Intel AMT when it's in ACM mode. Calls "unprovision" on MEI and checks the return code.
1001
+function deactivateACM() {
1002
+ settings.noconsole = true;
1003
+ startLms(deactivateACMEx);
1004
+}
1005
+
1006
+function deactivateACMEx() {
1007
+ var transport = require('amt-wsman-duk');
1008
+ var wsman = require('amt-wsman');
1009
+ var amt = require('amt');
1010
+ wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
1011
+ amtstack = new amt(wsstack);
1012
+ amtstack.Get("AMT_SetupAndConfigurationService", function (stack, name, responses, status) {
1013
+ if (status !== 200) {
1014
+ console.log('Command not allowed. Status: ' + status);
1015
+ exit(1);
1016
+ } else {
1017
+ var sacs = responses.Body;
1018
+ if (sacs.ZeroTouchConfigurationEnabled == true) { sacs.ZeroTouchConfigurationEnabled = true; }
1019
+ amtstack.Put("AMT_SetupAndConfigurationService", sacs, function (stack, name, responses, status) {
1020
+ if (settings.type == 'full') {
1021
+ amtstack.AMT_SetupAndConfigurationService_Unprovision(2, function (stack, name, responses, status) {
1022
+ if (status != 200) { console.log('Failed to fully unconfigure AMT, status ' + status); exit(1); }
1023
+ else if (responses.Body.ReturnValue != 0) { console.log('Unprovision failed: ' + responses.Body.ReturnValueStr); exit(1); }
1024
+ else { console.log('AMT fully unprovisioned.'); exit(0); }
1025
+ });
1026
+ } else {
1027
+ console.log('Only full unprovision is currently supported.');
1028
+ exit(0);
1029
+ }
1030
+ //} else if (settings.type == 'partial') {
1031
+ // amtstack.AMT_SetupAndConfigurationService_PartialUnprovision(null, function (stack, name, responses, status) {
1032
+ // if (status != 200) { console.log('Failed to partially unconfigure AMT, status ' + status); exit(1); }
1033
+ // else if (responses.Body.ReturnValue != 0) { console.log('Unprovision failed: ' + responses.Body.ReturnValueStr); exit(1); }
1034
+ // else { console.log('AMT partially unprovisioned.'); exit(0); }
1035
+ // });
1036
+ //}
1037
+ });
1038
+ }
1039
+ });
1040
+}
1041
+
1042
+//
1043
+// Get Intel AMT activation hashes
1044
+//
1045
+
1046
+var trustedHashes = null;
1047
+function getTrustedHashes(amtMei, func, tag) {
1048
+ if (trustedHashes != null) { func(tag); }
1049
+ trustedHashes = [];
1050
+ amtMei.getHashHandles(function (handles) {
1051
+ var exitOnCount = handles.length;
1052
+ for (var i = 0; i < handles.length; ++i) {
1053
+ this.getCertHashEntry(handles[i], function (result) {
1054
+ if (result.isActive == 1) { trustedHashes.push(result.certificateHash.toLowerCase()); }
1055
+ if (--exitOnCount == 0) { func(tag); }
1056
+ });
1057
+ }
1058
+ });
1059
+}
1060
+
1061
+//
1062
+// Activate Intel AMT to with server (ACM or CCM)
1063
+//
1064
+
1065
+function activeToACM() {
1066
+ console.log('Starting Intel AMT activation attempt...');
1067
+ settings.noconsole = true;
1068
+
1069
+ // Display Intel AMT version and activation state
1070
+ mestate = {};
1071
+ var amtMeiModule, amtMei;
1072
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
1073
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
1074
+ amtMei.getProvisioningState(function (result) { if (result) { mestate.ProvisioningState = result; } });
1075
+ amtMei.getVersion(function (val) { mestate.vers = {}; if (val != null) { for (var version in val.Versions) { mestate.vers[val.Versions[version].Description] = val.Versions[version].Version; } } });
1076
+ amtMei.getLanInterfaceSettings(0, function (result) { if (result) { mestate.net0 = result; } });
1077
+ amtMei.getUuid(function (result) { if ((result != null) && (result.uuid != null)) { mestate.uuid = result.uuid; } });
1078
+ amtMei.getControlMode(function (result) { if (result != null) { mestate.controlMode = result.controlMode; } }); // controlMode: 0 = NoActivated, 1 = CCM, 2 = ACM
1079
+ amtMei.getDnsSuffix(function (result) {
1080
+ if ((mestate.vers == null) || (mestate.vers['AMT'] == null)) { console.log("Unable to get Intel AMT version."); exit(100); return; }
1081
+ if (mestate.ProvisioningState == null) { console.log("Unable to read Intel AMT activation state."); exit(100); return; }
1082
+ if ((settings.action != 'amtdiscover') && (mestate.controlMode == 2)) { console.log("Intel AMT already activation in admin control mode."); exit(100); return; }
1083
+ if (mestate.uuid == null) { console.log("Unable to get Intel AMT UUID."); exit(100); return; }
1084
+ var fqdn = null;
1085
+ if ((mestate.net0 == null) && (meinfo.net0.enabled != 0)) { console.log("No Intel AMT wired interface, can't perform ACM activation."); exit(100); return; }
1086
+ if (result) { fqdn = result; } // If Intel AMT has a trusted DNS suffix set, use that one.
1087
+ else {
1088
+ // Look for the DNS suffix for the Intel AMT Ethernet interface
1089
+ var interfaces = require('os').networkInterfaces();
1090
+ for (var i in interfaces) {
1091
+ for (var j in interfaces[i]) {
1092
+ if ((interfaces[i][j].mac == mestate.net0.mac) && (interfaces[i][j].fqdn != null) && (interfaces[i][j].fqdn != '')) { fqdn = interfaces[i][j].fqdn; }
1093
+ }
1094
+ }
1095
+ }
1096
+ if (fqdn != null) {
1097
+ settings.fqdn = fqdn;
1098
+ settings.uuid = mestate.uuid;
1099
+ getTrustedHashes(amtMei, function () { startLms(getFwNonce, amtMei); });
1100
+ } else {
1101
+ console.log("Trusted DNS suffix not set, can't perform ACM activation."); exit(100); return;
1102
+ }
1103
+ });
1104
+}
1105
+
1106
+// Gets the FWNonce from AMT and saves it to a file.
1107
+function getFwNonce() {
1108
+ osamtstack.BatchEnum(null, ['*AMT_GeneralSettings', '*IPS_HostBasedSetupService'], function (stack, name, responses, status) {
1109
+ if (status != 200) { console.log("Unable to get firmware activation nonce, status=" + status); exit(100); return; }
1110
+ var fwNonce = responses['IPS_HostBasedSetupService'].response['ConfigurationNonce'];
1111
+ var digestRealm = responses['AMT_GeneralSettings'].response['DigestRealm'];
1112
+ var allowedModes = responses['IPS_HostBasedSetupService'].response['AllowedControlModes']; // 1 = CCM, 2 = ACM
1113
+ activeToACMEx(fwNonce, settings.fqdn, digestRealm, settings.uuid, allowedModes);
1114
+ });
1115
+}
1116
+
1117
+// Connect to the activation server and perform ACM activation
1118
+function activeToACMEx(fwNonce, dnsSuffix, digestRealm, uuid, allowedModes) {
1119
+ console.log('FQDN: ' + dnsSuffix);
1120
+ console.log('UUID: ' + uuid);
1121
+ console.log('Realm: ' + digestRealm);
1122
+ console.log('Nonce: ' + fwNonce);
1123
+ console.log('Connecting to ' + settings.url);
1124
+
1125
+ // Establish WebSocket connection to activation server
1126
+ var options = http.parseUri(settings.url);
1127
+ options.checkServerIdentity = onVerifyServer;
1128
+ options.rejectUnauthorized = false;
1129
+ var connection = http.request(options);
1130
+ connection.on('upgrade', function (response, socket) {
1131
+ settings.xxsocket = socket;
1132
+ console.log('Connected, requesting activation...');
1133
+ socket.on('end', function () { console.log('Connection closed'); exit(0); });
1134
+ socket.on('error', function () { console.log('Connection error'); exit(100); });
1135
+ socket.on('data', function (data) {
1136
+ // Parse and check the response
1137
+ var cmd = null;
1138
+ try { cmd = JSON.parse(data); } catch (ex) { console.log('Unable to parse server response: ' + data); exit(100); return; }
1139
+ if (typeof cmd != 'object') { console.log('Invalid server response: ' + cmd); exit(100); return; }
1140
+ if (typeof cmd.errorText == 'string') { console.log('Server error: ' + cmd.errorText); exit(100); return; }
1141
+ switch (cmd.action) {
1142
+ case 'acmactivate': {
1143
+ // Server responded with ACM activation response
1144
+ if (typeof cmd.signature != 'string') { console.log('Invalid server signature'); exit(100); return; }
1145
+ if (typeof cmd.password != 'string') { console.log('Invalid server password'); exit(100); return; }
1146
+ if (typeof cmd.nonce != 'string') { console.log('Invalid server nonce'); exit(100); return; }
1147
+ if (typeof cmd.certs != 'object') { console.log('Invalid server certificates'); exit(100); return; }
1148
+ settings.xxprofileScript = cmd.profileScript;
1149
+ settings.xxrawpassword = cmd.rawpassword;
1150
+
1151
+ cmd.index = 0;
1152
+ // If we are in CCM mode, deactivate.
1153
+ if (mestate.controlMode == 1) {
1154
+ amtMei.unprovision(1, function (status) {
1155
+ if (status == 0) {
1156
+ console.log('Intel AMT CCM deactivated, holding 10 seconds...');
1157
+ // We are ready to go, perform ACM activation.
1158
+ settings.xxTimer = setTimeout(function () { performAcmActivation(cmd, AcmActivationCompleted); }, 10000);
1159
+ } else {
1160
+ console.log('Intel AMT CCM deactivation error ' + status); exit(1); return;
1161
+ }
1162
+ });
1163
+ } else {
1164
+ // We are ready to go, perform ACM activation.
1165
+ performAcmActivation(cmd, AcmActivationCompleted);
1166
+ }
1167
+ break;
1168
+ }
1169
+ case 'ccmactivate': {
1170
+ // Server responded with CCM activation response
1171
+ if (typeof cmd.password != 'string') { console.log('Invalid server password'); exit(100); return; }
1172
+ settings.xxprofileScript = cmd.profileScript;
1173
+ settings.xxrawpassword = cmd.rawpassword;
1174
+
1175
+ // If we are already in CCM mode, deactivate.
1176
+ if (mestate.controlMode == 1) {
1177
+ amtMei.unprovision(1, function (status) {
1178
+ if (status == 0) {
1179
+ console.log('Intel AMT CCM deactivated, holding 10 seconds...');
1180
+ // We are ready to go, perform CCM activation.
1181
+ settings.xxTimer = setTimeout(function () { osamtstack.IPS_HostBasedSetupService_Setup(2, cmd.password, null, null, null, null, performCcmActivation); }, 10000);
1182
+ } else {
1183
+ console.log('Intel AMT CCM deactivation error ' + status); exit(1); return;
1184
+ }
1185
+ });
1186
+ } else {
1187
+ // We are ready to go, perform CCM activation.
1188
+ osamtstack.IPS_HostBasedSetupService_Setup(2, cmd.password, null, null, null, null, performCcmActivation);
1189
+ }
1190
+ break;
1191
+ }
1192
+ case 'amtdiscover': {
1193
+ console.log('Done.');
1194
+ exit(0);
1195
+ break;
1196
+ }
1197
+ default: {
1198
+ console.log('Invalid server response, command: ' + cmd.action); exit(100);
1199
+ break;
1200
+ }
1201
+ }
1202
+ });
1203
+
1204
+ var action = 'acmactivate';
1205
+ if (settings.action == 'amtccm') { action = 'ccmactivate'; }
1206
+ if (settings.action == 'amtdiscover') { action = 'amtdiscover'; }
1207
+ socket.write({ client: 'meshcmd', version: 1, action: action, fqdn: dnsSuffix, realm: digestRealm, nonce: fwNonce, uuid: uuid, profile: settings.profile, hashes: trustedHashes, tag: settings.tag, name: settings.name, ver: mestate.vers['AMT'], build: mestate.vers['Build Number'], modes: allowedModes, currentMode: mestate.controlMode });
1208
+ });
1209
+ connection.end();
1210
+}
1211
+
1212
+function performCcmActivation(stack, name, responses, status) {
1213
+ if (status != 200) {
1214
+ settings.xxsocket.write({ client: 'meshcmd', version: 1, action: 'ccmactivate-failed', uuid: mestate.uuid });
1215
+ console.log('Failed to activate, status ' + status);
1216
+ } else if (responses.Body.ReturnValue != 0) {
1217
+ settings.xxsocket.write({ client: 'meshcmd', version: 1, action: 'ccmactivate-failed', uuid: mestate.uuid });
1218
+ console.log('Intel AMT CCM activation failed: ' + responses.Body.ReturnValueStr);
1219
+ } else {
1220
+ settings.xxsocket.write({ client: 'meshcmd', version: 1, action: 'ccmactivate-success', uuid: mestate.uuid });
1221
+ if ((settings.xxprofileScript !== null) && (settings.xxrawpassword != null)) {
1222
+ console.log("Intel AMT CCM activation success, applying profile...");
1223
+ settings.scriptjson = settings.xxprofileScript;
1224
+ settings.password = settings.xxrawpassword; // This is only going to work if the server sends the raw password
1225
+ settings.username = 'admin';
1226
+ startMeScriptEx(function () { console.log('Intel AMT profile applied.'); socket.end(); exit(0); }, stack);
1227
+ return;
1228
+ } else {
1229
+ console.log('Intel AMT CCM activation success.');
1230
+ settings.xxsocket.end();
1231
+ exit(0);
1232
+ return;
1233
+ }
1234
+ }
1235
+ settings.xxsocket.end();
1236
+ exit(1);
1237
+}
1238
+
1239
+function AcmActivationCompleted(result) {
1240
+ if (result == false) {
1241
+ console.log('Intel AMT ACM activation failed.');
1242
+ settings.xxsocket.write({ client: 'meshcmd', version: 1, action: 'acmactivate-failed', uuid: mestate.uuid });
1243
+ settings.xxsocket.end();
1244
+ exit(1);
1245
+ } else {
1246
+ if ((settings.xxprofileScript !== null) && (settings.xxrawpassword != null)) {
1247
+ console.log('Intel AMT ACM activation success, applying profile...');
1248
+ settings.scriptjson = settings.xxprofileScript;
1249
+ settings.password = settings.xxrawpassword; // This is only going to work if the server sends the raw password
1250
+ settings.username = 'admin';
1251
+ startMeScriptEx(function () { console.log('Intel AMT profile applied.'); settings.xxsocket.end(); exit(0); }, stack);
1252
+ } else {
1253
+ console.log('Intel AMT ACM activation success.');
1254
+ settings.xxsocket.write({ client: 'meshcmd', version: 1, action: 'acmactivate-success', uuid: mestate.uuid });
1255
+ settings.xxsocket.end();
1256
+ exit(0);
1257
+ }
1258
+ }
1259
+}
1260
+
1261
+// Recursive function to inject the provisioning certificates into AMT in the proper order and completes ACM activation
1262
+function performAcmActivation(acmdata, func) {
1263
+ var leaf = (acmdata.index == 0), root = (acmdata.index == (acmdata.certs.length - 1));
1264
+ if ((acmdata.index < acmdata.certs.length) && (acmdata.certs[acmdata.index] != null)) {
1265
+ osamtstack.IPS_HostBasedSetupService_AddNextCertInChain(acmdata.certs[acmdata.index], leaf, root, function (stack, name, responses, status) {
1266
+ if (status !== 200) { console.log('AddNextCertInChain error, status=' + status); exit(1); return; }
1267
+ else if (responses['Body']['ReturnValue'] !== 0) { console.log('AddNextCertInChain error: ' + responses['Body']['ReturnValue']); exit(1); return; }
1268
+ else { acmdata.index++; performAcmActivation(acmdata, func); }
1269
+ });
1270
+ } else {
1271
+ //console.log(acmdata.password, acmdata.nonce, acmdata.signature);
1272
+ osamtstack.IPS_HostBasedSetupService_AdminSetup(2, acmdata.password, acmdata.nonce, 2, acmdata.signature,
1273
+ function (stack, name, responses, status) {
1274
+ if (status !== 200) { console.log('Error, AdminSetup status: ' + status); }
1275
+ else if (responses['Body']['ReturnValue'] != 0) { console.log('Error, AdminSetup return value: ' + responses['Body']['ReturnValue']); }
1276
+ func((status == 200) && (responses['Body']['ReturnValue'] == 0));
1277
+ }
1278
+ );
1279
+ }
1280
+}
1281
+
1282
+//
1283
+// Get AMT UUID
1284
+//
1285
+
1286
+// Called to get the UUID of Intel AMT, start by setting up MicroLMS if we are doing the operation on the local computer
1287
+function getAmtUuid() {
1288
+ if (settings.hostname == null) {
1289
+ var amtMeiModule, amtMei;
1290
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
1291
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
1292
+ amtMei.getUuid(function (result) { if ((result == null) || (result.uuid == null)) { console.log('Failed.'); } else { console.log(result.uuid); } exit(1); });
1293
+ } else {
1294
+ if ((settings.hostname == '127.0.0.1') || (settings.hostname.toLowerCase() == 'localhost')) { settings.noconsole = true; startLms(getAmtUuidEx); return; } else { getAmtUuidEx(); }
1295
+ }
1296
+}
1297
+
1298
+// Fetch the computer's UUID by fetching the CIM_ComputerSystemPackage WSMAN object.
1299
+function getAmtUuidEx() {
1300
+ var transport = require('amt-wsman-duk');
1301
+ var wsman = require('amt-wsman');
1302
+ var amt = require('amt');
1303
+ wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
1304
+ amtstack = new amt(wsstack);
1305
+ amtstack.Get("CIM_ComputerSystemPackage", function (obj, name, response, xstatus, tag) {
1306
+ if (xstatus == 200) { console.log("GUID: " + guidToStr(response.Body.PlatformGUID.toLowerCase())); } else { console.log("Intel AMT is not available or not activated."); } exit(1);
1307
+ });
1308
+}
1309
+
1310
+
1311
+//
1312
+// Run MESCRIPT
1313
+//
1314
+
1315
+// Run a .mescript targeting local or remote Intel AMT.
1316
+function startMeScript() {
1317
+ // See if MicroLMS needs to be started
1318
+ if ((settings.hostname == '127.0.0.1') || (settings.hostname.toLowerCase() == 'localhost')) { settings.noconsole = true; startLms(startMeScriptEx); return; } else { startMeScriptEx(); }
1319
+}
1320
+
1321
+function startMeScriptEx(callback, amtstack) {
1322
+ //console.log('Running script...');
1323
+ var transport = require('amt-wsman-duk');
1324
+ var wsman = require('amt-wsman');
1325
+ var amt = require('amt');
1326
+ if (!wsstack) { wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls); }
1327
+ if (!amtstack) { amtstack = new amt(wsstack); }
1328
+ //IntelAmtEntireStateProgress = 101;
1329
+ //amtstack.onProcessChanged = onWsmanProcessChanged;
1330
+
1331
+ var scriptData = null;
1332
+ if (settings.script != null) {
1333
+ try { scriptData = fs.readFileSync(settings.script); } catch (e) { console.log('Unable to read script file (1): ' + settings.script + '.'); exit(1); return; }
1334
+ } else {
1335
+ scriptData = settings.scriptjson;
1336
+ }
1337
+ if (scriptData == null) { console.log('Unable to read script file (2): ' + settings.script + '.'); exit(1); return; }
1338
+ try { scriptData = JSON.parse(scriptData); } catch (e) { console.log('Unable to read script file (3): ' + settings.script + '.'); exit(1); return; }
1339
+ if (scriptData.mescript == null) { console.log('Unable to read script file (4): ' + settings.script + '.'); exit(1); return; }
1340
+ var scriptData = Buffer.from(scriptData.mescript, 'base64');
1341
+
1342
+ var scriptModule = require('amt-script');
1343
+ var script = scriptModule.setup(scriptData, {})
1344
+ script.amtstack = amtstack;
1345
+ script.start();
1346
+ script.onCompleted = function () { if (callback) { callback(); } exit(1); }
1347
+}
1348
+
1349
+
1350
+//
1351
+// FETCH ALL INTEL AMT STATE
1352
+//
1353
+
1354
+function saveEntireAmtState2() {
1355
+ console.log('Fetching all Intel AMT state, this may take a few minutes...');
1356
+ var transport = require('amt-wsman-duk');
1357
+ var wsman = require('amt-wsman');
1358
+ var amt = require('amt');
1359
+ wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
1360
+ amtstack = new amt(wsstack);
1361
+ amtstack.onProcessChanged = onWsmanProcessChanged;
1362
+ //var AllWsman = "AMT_GeneralSystemDefenseCapabilities".split(',');
1363
+ var AllWsman = "AMT_8021xCredentialContext,AMT_8021XProfile,AMT_ActiveFilterStatistics,AMT_AgentPresenceCapabilities,AMT_AgentPresenceInterfacePolicy,AMT_AgentPresenceService,AMT_AgentPresenceWatchdog,AMT_AgentPresenceWatchdogAction,AMT_AlarmClockService,IPS_AlarmClockOccurrence,AMT_AssetTable,AMT_AssetTableService,AMT_AuditLog,AMT_AuditPolicyRule,AMT_AuthorizationService,AMT_BootCapabilities,AMT_BootSettingData,AMT_ComplexFilterEntryBase,AMT_CRL,AMT_CryptographicCapabilities,AMT_EACCredentialContext,AMT_EndpointAccessControlService,AMT_EnvironmentDetectionInterfacePolicy,AMT_EnvironmentDetectionSettingData,AMT_EthernetPortSettings,AMT_EventLogEntry,AMT_EventManagerService,AMT_EventSubscriber,AMT_FilterEntryBase,AMT_FilterInSystemDefensePolicy,AMT_GeneralSettings,AMT_GeneralSystemDefenseCapabilities,AMT_Hdr8021Filter,AMT_HeuristicPacketFilterInterfacePolicy,AMT_HeuristicPacketFilterSettings,AMT_HeuristicPacketFilterStatistics,AMT_InterfacePolicy,AMT_IPHeadersFilter,AMT_KerberosSettingData,AMT_ManagementPresenceRemoteSAP,AMT_MessageLog,AMT_MPSUsernamePassword,AMT_NetworkFilter,AMT_NetworkPortDefaultSystemDefensePolicy,AMT_NetworkPortSystemDefenseCapabilities,AMT_NetworkPortSystemDefensePolicy,AMT_PCIDevice,AMT_PETCapabilities,AMT_PETFilterForTarget,AMT_PETFilterSetting,AMT_ProvisioningCertificateHash,AMT_PublicKeyCertificate,AMT_PublicKeyManagementCapabilities,AMT_PublicKeyManagementService,AMT_PublicPrivateKeyPair,AMT_RedirectionService,AMT_RemoteAccessCapabilities,AMT_RemoteAccessCredentialContext,AMT_RemoteAccessPolicyAppliesToMPS,AMT_RemoteAccessPolicyRule,AMT_RemoteAccessService,AMT_SetupAndConfigurationService,AMT_SNMPEventSubscriber,AMT_StateTransitionCondition,AMT_SystemDefensePolicy,AMT_SystemDefensePolicyInService,AMT_SystemDefenseService,AMT_SystemPowerScheme,AMT_ThirdPartyDataStorageAdministrationService,AMT_ThirdPartyDataStorageService,AMT_TimeSynchronizationService,AMT_TLSCredentialContext,AMT_TLSProtocolEndpoint,AMT_TLSProtocolEndpointCollection,AMT_TLSSettingData,AMT_TrapTargetForService,AMT_UserInitiatedConnectionService,AMT_WebUIService,AMT_WiFiPortConfigurationService,CIM_AbstractIndicationSubscription,CIM_Account,CIM_AccountManagementCapabilities,CIM_AccountManagementService,CIM_AccountOnSystem,CIM_AdminDomain,CIM_AlertIndication,CIM_AssignedIdentity,CIM_AssociatedPowerManagementService,CIM_AuthenticationService,CIM_AuthorizationService,CIM_BIOSElement,CIM_BIOSFeature,CIM_BIOSFeatureBIOSElements,CIM_BootConfigSetting,CIM_BootService,CIM_BootSettingData,CIM_BootSourceSetting,CIM_Capabilities,CIM_Card,CIM_Chassis,CIM_Chip,CIM_Collection,CIM_Component,CIM_ComputerSystem,CIM_ComputerSystemPackage,CIM_ConcreteComponent,CIM_ConcreteDependency,CIM_Controller,CIM_CoolingDevice,CIM_Credential,CIM_CredentialContext,CIM_CredentialManagementService,CIM_Dependency,CIM_DeviceSAPImplementation,CIM_ElementCapabilities,CIM_ElementConformsToProfile,CIM_ElementLocation,CIM_ElementSettingData,CIM_ElementSoftwareIdentity,CIM_ElementStatisticalData,CIM_EnabledLogicalElement,CIM_EnabledLogicalElementCapabilities,CIM_EthernetPort,CIM_Fan,CIM_FilterCollection,CIM_FilterCollectionSubscription,CIM_HostedAccessPoint,CIM_HostedDependency,CIM_HostedService,CIM_Identity,CIM_IEEE8021xCapabilities,CIM_IEEE8021xSettings,CIM_Indication,CIM_IndicationService,CIM_InstalledSoftwareIdentity,CIM_KVMRedirectionSAP,CIM_LANEndpoint,CIM_ListenerDestination,CIM_ListenerDestinationWSManagement,CIM_Location,CIM_Log,CIM_LogEntry,CIM_LogicalDevice,CIM_LogicalElement,CIM_LogicalPort,CIM_LogicalPortCapabilities,CIM_LogManagesRecord,CIM_ManagedCredential,CIM_ManagedElement,CIM_ManagedSystemElement,CIM_MediaAccessDevice,CIM_MemberOfCollection,CIM_Memory,CIM_MessageLog,CIM_NetworkPort,CIM_NetworkPortCapabilities,CIM_NetworkPortConfigurationService,CIM_OrderedComponent,CIM_OwningCollectionElement,CIM_OwningJobElement,CIM_PCIController,CIM_PhysicalComponent,CIM_PhysicalElement,CIM_PhysicalElementLocation,CIM_PhysicalFrame,CIM_PhysicalMemory,CIM_PhysicalPackage,CIM_Policy,CIM_PolicyAction,CIM_PolicyCondition,CIM_PolicyInSystem,CIM_PolicyRule,CIM_PolicyRuleInSystem,CIM_PolicySet,CIM_PolicySetAppliesToElement,CIM_PolicySetInSystem,CIM_PowerManagementCapabilities,CIM_PowerManagementService,CIM_PowerSupply,CIM_Privilege,CIM_PrivilegeManagementCapabilities,CIM_PrivilegeManagementService,CIM_ProcessIndication,CIM_Processor,CIM_ProtocolEndpoint,CIM_ProvidesServiceToElement,CIM_Realizes,CIM_RecordForLog,CIM_RecordLog,CIM_RedirectionService,CIM_ReferencedProfile,CIM_RegisteredProfile,CIM_RemoteAccessAvailableToElement,CIM_RemoteIdentity,CIM_RemotePort,CIM_RemoteServiceAccessPoint,CIM_Role,CIM_RoleBasedAuthorizationService,CIM_RoleBasedManagementCapabilities,CIM_RoleLimitedToTarget,CIM_SAPAvailableForElement,CIM_SecurityService,CIM_Sensor,CIM_Service,CIM_ServiceAccessBySAP,CIM_ServiceAccessPoint,CIM_ServiceAffectsElement,CIM_ServiceAvailableToElement,CIM_ServiceSAPDependency,CIM_ServiceServiceDependency,CIM_SettingData,CIM_SharedCredential,CIM_SoftwareElement,CIM_SoftwareFeature,CIM_SoftwareFeatureSoftwareElements,CIM_SoftwareIdentity,CIM_StatisticalData,CIM_StorageExtent,CIM_System,CIM_SystemBIOS,CIM_SystemComponent,CIM_SystemDevice,CIM_SystemPackaging,CIM_UseOfLog,CIM_Watchdog,CIM_WiFiEndpoint,CIM_WiFiEndpointCapabilities,CIM_WiFiEndpointSettings,CIM_WiFiPort,CIM_WiFiPortCapabilities,IPS_AdminProvisioningRecord,IPS_ClientProvisioningRecord,IPS_HostBasedSetupService,IPS_HostIPSettings,IPS_IderSessionUsingPort,IPS_IPv6PortSettings,IPS_KVMRedirectionSettingData,IPS_KvmSessionUsingPort,IPS_ManualProvisioningRecord,IPS_OptInService,IPS_ProvisioningAuditRecord,IPS_ProvisioningRecordLog,IPS_RasSessionUsingPort,IPS_ScreenSettingData,IPS_SecIOService,IPS_SessionUsingPort,IPS_SolSessionUsingPort,IPS_TLSProvisioningRecord".split(',');
1364
+ IntelAmtEntireStateProgress = 101;
1365
+ IntelAmtEntireStateCalls = 3;
1366
+ IntelAmtEntireState = { 'localtime': Date(), 'utctime': new Date().toUTCString(), 'isotime': new Date().toISOString() };
1367
+ amtstack.BatchEnum(null, AllWsman, saveEntireAmtStateOk2, null, true);
1368
+ amtstack.GetAuditLog(saveEntireAmtStateOk3);
1369
+ amtstack.GetMessageLog(saveEntireAmtStateOk4);
1370
+
1371
+}
1372
+
1373
+// Save the entire Intel AMT state
1374
+function saveEntireAmtState() {
1375
+ // See if MicroLMS needs to be started
1376
+ if ((settings.hostname == '127.0.0.1') || (settings.hostname.toLowerCase() == 'localhost')) {
1377
+ settings.noconsole = true;
1378
+ startLms().then(saveEntireAmtState2);
1379
+ }
1380
+ else {
1381
+ saveEntireAmtState2();
1382
+ }
1383
+}
1384
+
1385
+function onWsmanProcessChanged(a, b) { var x = Math.floor((a * 100) / b); if (x < IntelAmtEntireStateProgress) { IntelAmtEntireStateProgress = x; console.log((100 - x) + '%'); } }
1386
+function saveEntireAmtStateOk2(stack, name, responses, status) { if (status == 600) { console.log('ERROR: Unable to connect to Intel(R) AMT.'); exit(2); } IntelAmtEntireState['wsmanenums'] = responses; saveEntireAmtStateDone(); }
1387
+function saveEntireAmtStateOk3(stack, messages, status) { if (status == 600) { console.log('ERROR: Unable to connect to Intel(R) AMT.'); exit(2); } IntelAmtEntireState['auditlog'] = messages; saveEntireAmtStateDone(); }
1388
+function saveEntireAmtStateOk4(stack, messages, tag, status) { if (status == 600) { console.log('ERROR: Unable to connect to Intel(R) AMT.'); exit(2); } IntelAmtEntireState['eventlog'] = messages; saveEntireAmtStateDone(); }
1389
+
1390
+// Called when the entire state of Intel AMT is fetched.
1391
+function saveEntireAmtStateDone() {
1392
+ if (--IntelAmtEntireStateCalls != 0) return;
1393
+ var out = fs.openSync(settings.output, 'w');
1394
+ fs.writeSync(out, Buffer.from(JSON.stringify(IntelAmtEntireState)));
1395
+ fs.closeSync(out);
1396
+ console.log('Done, results written to ' + settings.output + '.');
1397
+ exit(1);
1398
+}
1399
+
1400
+
1401
+//
1402
+// FETCH ALL INTEL AMT MEI STATE
1403
+//
1404
+
1405
+// Get Intel AMT information using MEI
1406
+// TODO: If this call is called many time at once, it's going to cause issues.
1407
+var getAmtInfoFetching = null;
1408
+var getAmtInfoFetchingTimer = null;
1409
+function getAmtInfo(func, tag) {
1410
+ if (amtMei == null) { if (func != null) { func(null, tag); } return; }
1411
+ if (getAmtInfoFetching != null) { getAmtInfoFetching.push({ f: func, t: tag }); return; }
1412
+ getAmtInfoFetching = [{ f: func, t: tag }];
1413
+ amtMeiTmpState = { Flags: 0, TrustedHashes: [] }; // Flags: 1=EHBC, 2=CCM, 4=ACM
1414
+ getAmtInfoFetchingTimer = setTimeout(function () {
1415
+ // MEI failed to respond, break out and reset everthing.
1416
+ for (var i in getAmtInfoFetching) { if (getAmtInfoFetching[i].f != null) { getAmtInfoFetching[i].f(amtMeiTmpState, getAmtInfoFetching[i].t); } }
1417
+ getAmtInfoFetching = null;
1418
+ getAmtInfoFetchingTimer = null;
1419
+ var amtMeiModule, amtMei;
1420
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
1421
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
1422
+ }, 3000);
1423
+ amtMei.getProtocolVersion(function (result) { if (result != null) { amtMeiTmpState.MeiVersion = result; } });
1424
+ amtMei.getVersion(function (val) {
1425
+ amtMeiTmpState.Versions = {};
1426
+ if (val != null) {
1427
+ for (var version in val.Versions) { amtMeiTmpState.Versions[val.Versions[version].Description] = val.Versions[version].Version; }
1428
+ amtMei.getProvisioningMode(function (result) { if (result != null) { amtMeiTmpState.ProvisioningMode = result.mode; } });
1429
+ amtMei.getProvisioningState(function (result) { if (result != null) { amtMeiTmpState.ProvisioningState = result.state; } });
1430
+ amtMei.getEHBCState(function (result) { if ((result != null) && (result.EHBC == true)) { amtMeiTmpState.Flags += 1; } });
1431
+ amtMei.getControlMode(function (result) { if (result != null) { if (result.controlMode == 1) { amtMeiTmpState.Flags += 2; } if (result.controlMode == 2) { amtMeiTmpState.Flags += 4; } } });
1432
+ //amtMei.getMACAddresses(function (result) { if (result != null) { amtMeiTmpState.mac = result; } });
1433
+ amtMei.getDnsSuffix(function (result) { if (result != null) { amtMeiTmpState.dns = result; } });
1434
+ amtMei.getHashHandles(function (handles) {
1435
+ exitOnCount = handles.length;
1436
+ for (var i = 0; i < handles.length; ++i) {
1437
+ amtMei.getCertHashEntry(handles[i], function (result) {
1438
+ amtMeiTmpState.TrustedHashes.push({ Active: result.isActive, Default: result.isDefault, HashAlgorithm: result.hashAlgorithm, Name: result.name, Hash: result.certificateHash });
1439
+ if (--exitOnCount == 0) {
1440
+ amtMeiTmpState.Notifications = lmsNotifications; amtMeiState = amtMeiTmpState;
1441
+ for (var i in getAmtInfoFetching) { if (getAmtInfoFetching[i].f != null) { getAmtInfoFetching[i].f(amtMeiTmpState, getAmtInfoFetching[i].t); } }
1442
+ getAmtInfoFetching = null;
1443
+ clearTimeout(getAmtInfoFetchingTimer);
1444
+ getAmtInfoFetchingTimer = null;
1445
+ }
1446
+ });
1447
+ }
1448
+ });
1449
+ } else {
1450
+ amtMeiState = amtMeiTmpState;
1451
+ amtMeiState.ProvisioningMode = -858993460;
1452
+ amtMeiState.TrustedHashes = {};
1453
+ amtMeiState.Notifications = lmsNotifications;
1454
+ //console.log('getAmtInfo3', JSON.stringify(amtMeiState));
1455
+ if (func != null) { func(amtMeiState, tag); }
1456
+ }
1457
+ });
1458
+}
1459
+
1460
+
1461
+//
1462
+// MicroLMS
1463
+//
1464
+
1465
+var lmsControlSockets = {};
1466
+var lmsControlSocketsNextId = 1;
1467
+var lmsNotifications = [];
1468
+var amtLms = null;
1469
+var promise = require('promise');
1470
+
1471
+function startLms(func, lmscommander, tag) {
1472
+ var ret = new promise(function (res, rej) { this._res = res; this._rej = rej; });
1473
+ var lme_heci = null
1474
+ try { lme_heci = require('amt-lme'); } catch (ex) { }
1475
+ if (lme_heci == null) { if (func != null) { func(0, tag); } this.promise._res(); return; }
1476
+
1477
+ //var amtLms = null;
1478
+ var http = require('http');
1479
+
1480
+ console.log('Setting up MEI...');
1481
+ try { amtMeiModule = require('amt-mei'); amtMei = new amtMeiModule(); } catch (ex) { console.log(ex); exit(1); return; }
1482
+ amtMei.on('error', function (e) { console.log('ERROR: ' + e); exit(1); return; });
1483
+ //console.log("PTHI Connected.");
1484
+
1485
+ console.log('Setting up LME...');
1486
+ amtLms = new lme_heci({ debug: settings.lmsdebug });
1487
+ amtLms.promise = ret;
1488
+ amtLms.on('error', function (e) {
1489
+ //console.log('LME connection failed', e);
1490
+ if (lmscommander === true) { //settings.noconsole !== true) {
1491
+ startMeshCommanderLms();
1492
+ //console.log("LMS started, MeshCommander on HTTP/16994.");
1493
+ tempTimer = setTimeout(function () { delete tempTimer; setupMeiOsAdmin(func, 2, tag); }, 100);
1494
+ } else {
1495
+ //console.log('LME connection failed: ' + JSON.stringify(e));
1496
+ tempTimer = setTimeout(function () { delete tempTimer; setupMeiOsAdmin(func, 0, tag); }, 100);
1497
+ }
1498
+ this.promise._res();
1499
+ });
1500
+ amtLms.on('notify', function (data, options, str, code) {
1501
+ if (code == 'iAMT0052-3') {
1502
+ kvmGetData();
1503
+ } else if (str != null) {
1504
+ var notify = { date: Date.now(), str: str, code: code };
1505
+ lmsNotifications.push(notify);
1506
+ while (lmsNotifications.length > 100) { lmsNotifications.shift(); }
1507
+ var notifyBuf = Buffer.concat([Buffer.from('0900', 'hex'), Buffer.from(JSON.stringify(notify))]) // Add a notification
1508
+ for (var i in lmsControlSockets) { lmsControlSockets[i].write(notifyBuf); }
1509
+ }
1510
+ });
1511
+ //console.log('LME Connecting...');
1512
+ amtLms.on('bind', function (mapping) {
1513
+ if (mapping[16992]) { this.removeAllListeners('bind'); } else { return; }
1514
+ //console.log('LMS Bounded');
1515
+ amtLms.connected = true;
1516
+ this.promise._res();
1517
+
1518
+ //console.log("LME Connected.");
1519
+ if (settings.noconsole !== true) {
1520
+ startMeshCommanderLms();
1521
+ //console.log("LMS started, MeshCommander on HTTP/16994.");
1522
+ tempTimer = setTimeout(function () { delete tempTimer; setupMeiOsAdmin(func, 2, tag); }, 100);
1523
+ //console.logReferenceCount(tempTimer);
1524
+ } else {
1525
+ //console.log("LMS started.");
1526
+ tempTimer = setTimeout(function () { delete tempTimer; setupMeiOsAdmin(func, 1, tag); }, 100);
1527
+ //console.logReferenceCount(tempTimer);
1528
+ }
1529
+
1530
+ });
1531
+ return (ret);
1532
+}
1533
+
1534
+function startMeshCommanderLms() {
1535
+
1536
+ amtLms.meshCommander = http.createServer();
1537
+ amtLms.meshCommander.listen(16994);
1538
+ amtLms.meshCommander.on('upgrade', function (req, socket, head) {
1539
+ //console.log("WebSocket for " + req.url.split('?')[0]);
1540
+ switch (req.url.split('?')[0]) {
1541
+ case '/lms.ashx': // MeshCommander control channel (PTHI)
1542
+ socket.ws = socket.upgradeWebSocket();
1543
+ socket.ws.on('data', processLmsControlData);
1544
+ socket.ws.on('end', function () { if (lmsControlSockets[this.id]) { delete lmsControlSockets[this.id]; /*console.log('removeControl', JSON.stringify(lmsControlSockets));*/ } });
1545
+ var id = lmsControlSocketsNextId++;
1546
+ lmsControlSockets[id] = socket.ws;
1547
+ socket.ws.id = id;
1548
+ //socket.ws.write(Buffer.concat([Buffer.from('0900', 'hex'), Buffer.from(JSON.stringify(lmsNotifications))])); // Send out full list of notifications
1549
+ //console.log('addControl', JSON.stringify(lmsControlSockets));
1550
+ break;
1551
+ case '/webrelay.ashx': // MeshCommander data channel (LME)
1552
+ socket.ws = socket.upgradeWebSocket();
1553
+ if (amtLms.connected == true) {
1554
+ // Route traffic directly into MicroLMS
1555
+ amtLms.bindDuplexStream(socket.ws, 'IPv4', 16992);
1556
+ } else {
1557
+ // Route traffic to real LMS service
1558
+ var net = require('net');
1559
+ socket.relay = net.connect({ host: '127.0.0.1', port: 16992 })
1560
+ socket.relay.on('connect', function () {
1561
+ socket.ws.on('data', function (data) { socket.relay.write(data); });
1562
+ socket.ws.on('end', function () { socket.relay.end(); });
1563
+ });
1564
+ socket.relay.on('data', function (data) { socket.ws.write(data); });
1565
+ socket.relay.on('close', function () { socket.ws.end(); });
1566
+ }
1567
+ break;
1568
+ default:
1569
+ socket.end();
1570
+ break;
1571
+ }
1572
+ });
1573
+ amtLms.meshCommander.on('request', function (req, rsp) {
1574
+ //console.log("WebRequest for " + req.url.split('?')[0]);
1575
+ switch (req.url.split('?')[0]) {
1576
+ case '/': // Serve MeshCommander Web Application for LMS
1577
+ var lmscommander = null;
1578
+ try { lmscommander = fs.readFileSync('lmscommander.htm'); } catch (e) { }
1579
+ if (lmscommander != null) {
1580
+ rsp.writeHead(200, 'OK', { Server: 'JSLMS', 'Cache-Control': 'max-age=0, no-cache', 'X-Frame-Options': 'DENY', 'Content-Type': 'text/html', 'Transfer-Encoding': 'chunked' });
1581
+ rsp.end(lmscommander);
1582
+ } else {
1583
+ rsp.writeHead(200, 'OK', { Server: 'JSLMS', 'Cache-Control': 'max-age=0, no-cache', 'X-Frame-Options': 'DENY', 'Content-Type': 'text/html', 'Content-Encoding': 'gzip', 'Transfer-Encoding': 'chunked', ETag: _IntelAmtWebApp_etag });
1584
+ rsp.end(Buffer.from(_IntelAmtWebApp, "base64"));
1585
+ }
1586
+ break;
1587
+ default: // Unknown request
1588
+ rsp.statusCode = 404;
1589
+ rsp.statusMessage = "Not Found";
1590
+ rsp.end();
1591
+ break;
1592
+ }
1593
+
1594
+ });
1595
+}
1596
+
1597
+function setupMeiOsAdmin(func, state, tag) {
1598
+ if (amtMei == null) {
1599
+ if (func) { func(state, tag); }
1600
+ } else {
1601
+ amtMei.getLocalSystemAccount(function (x) {
1602
+ var transport = require('amt-wsman-duk');
1603
+ var wsman = require('amt-wsman');
1604
+ var amt = require('amt');
1605
+ oswsstack = new wsman(transport, '127.0.0.1', 16992, x.user, x.pass, false);
1606
+ osamtstack = new amt(oswsstack);
1607
+ if (func) { func(state, tag); }
1608
+
1609
+ //var AllWsman = "CIM_SoftwareIdentity,IPS_SecIOService,IPS_ScreenSettingData,IPS_ProvisioningRecordLog,IPS_HostBasedSetupService,IPS_HostIPSettings,IPS_IPv6PortSettings".split(',');
1610
+ //osamtstack.BatchEnum(null, AllWsman, startLmsWsmanResponse, null, true);
1611
+ //*************************************
1612
+
1613
+ // Setup KVM data channel if this is Intel AMT 12 or above
1614
+ amtMei.getVersion(function (x) {
1615
+ var amtver = null;
1616
+ try { for (var i in x.Versions) { if (x.Versions[i].Description == 'AMT') amtver = parseInt(x.Versions[i].Version.split('.')[0]); } } catch (e) { }
1617
+ if ((amtver != null) && (amtver >= 12)) {
1618
+ kvmGetData('skip'); // Clear any previous data, this is a dummy read to about handling old data.
1619
+ tempTimer = setInterval(function () { kvmGetData(); }, 2000); // Start polling for KVM data.
1620
+ kvmSetData(JSON.stringify({ action: 'restart', ver: 1 })); // Send a restart command to advise the console if present that MicroLMS just started.
1621
+ }
1622
+ });
1623
+ });
1624
+ }
1625
+}
1626
+
1627
+function kvmGetData(tag) {
1628
+ osamtstack.IPS_KVMRedirectionSettingData_DataChannelRead(kvmDataGetResponse, tag);
1629
+}
1630
+
1631
+function kvmDataGetResponse(stack, name, response, status, tag) {
1632
+ if ((tag != 'skip') && (status == 200) && (response.Body.ReturnValue == 0)) {
1633
+ var val = null;
1634
+ try { val = Buffer.from(response.Body.DataMessage, 'base64').toString(); } catch (e) { return }
1635
+ if (val != null) { kvmProcessData(response.Body.RealmsBitmap, response.Body.MessageId, val); }
1636
+ }
1637
+}
1638
+
1639
+var webRtcDesktop = null;
1640
+function kvmProcessData(realms, messageId, val) {
1641
+ var data = null;
1642
+ try { data = JSON.parse(val) } catch (e) { }
1643
+ if ((data != null) && (data.action)) {
1644
+ if (data.action == 'present') { kvmSetData(JSON.stringify({ action: 'present', ver: 1, platform: process.platform })); }
1645
+ if (data.action == 'offer') {
1646
+ webRtcDesktop = {};
1647
+ var rtc = require('ILibWebRTC');
1648
+ webRtcDesktop.webrtc = rtc.createConnection();
1649
+ webRtcDesktop.webrtc.on('connected', function () { });
1650
+ webRtcDesktop.webrtc.on('disconnected', function () { webRtcCleanUp(); });
1651
+ webRtcDesktop.webrtc.on('dataChannel', function (rtcchannel) {
1652
+ webRtcDesktop.rtcchannel = rtcchannel;
1653
+ var kvmmodule = require('meshDesktop');
1654
+ webRtcDesktop.kvm = kvmmodule.getRemoteDesktopStream();
1655
+ webRtcDesktop.kvm.pipe(webRtcDesktop.rtcchannel, { dataTypeSkip: 1, end: false });
1656
+ webRtcDesktop.rtcchannel.on('end', function () { webRtcCleanUp(); });
1657
+ webRtcDesktop.rtcchannel.on('data', function (x) { kvmCtrlData(this, x); });
1658
+ webRtcDesktop.rtcchannel.pipe(webRtcDesktop.kvm, { dataTypeSkip: 1, end: false });
1659
+ //webRtcDesktop.kvm.on('end', function () { console.log('WebRTC DataChannel closed2'); webRtcCleanUp(); });
1660
+ //webRtcDesktop.rtcchannel.on('data', function (data) { console.log('WebRTC data: ' + data); });
1661
+ });
1662
+ kvmSetData(JSON.stringify({ action: 'answer', ver: 1, sdp: webRtcDesktop.webrtc.setOffer(data.sdp) }));
1663
+ }
1664
+ }
1665
+}
1666
+
1667
+// Polyfill path.join
1668
+var path = {
1669
+ join: function () {
1670
+ var x = [];
1671
+ for (var i in arguments) {
1672
+ var w = arguments[i];
1673
+ if (w != null) {
1674
+ while (w.endsWith('/') || w.endsWith('\\')) { w = w.substring(0, w.length - 1); }
1675
+ if (i != 0) {
1676
+ while (w.startsWith('/') || w.startsWith('\\')) { w = w.substring(1); }
1677
+ }
1678
+ x.push(w);
1679
+ }
1680
+ }
1681
+ if (x.length == 0) return '/';
1682
+ return x.join('/');
1683
+ }
1684
+};
1685
+
1686
+// Get a formated response for a given directory path
1687
+function getDirectoryInfo(reqpath) {
1688
+ var response = { path: reqpath, dir: [] };
1689
+ if (((reqpath == undefined) || (reqpath == '')) && (process.platform == 'win32')) {
1690
+ // List all the drives in the root, or the root itself
1691
+ var results = null;
1692
+ try { results = fs.readDrivesSync(); } catch (e) { } // TODO: Anyway to get drive total size and free space? Could draw a progress bar.
1693
+ //console.log('a', objToString(results, 0, ' '));
1694
+ if (results != null) {
1695
+ for (var i = 0; i < results.length; ++i) {
1696
+ var drive = { n: results[i].name, t: 1 };
1697
+ if (results[i].type == 'REMOVABLE') { drive.dt = 'removable'; } // TODO: See if this is USB/CDROM or something else, we can draw icons.
1698
+ response.dir.push(drive);
1699
+ }
1700
+ }
1701
+ } else {
1702
+ // List all the files and folders in this path
1703
+ if (reqpath == '') { reqpath = '/'; }
1704
+ var xpath = path.join(reqpath, '*');
1705
+ var results = null;
1706
+
1707
+ try { results = fs.readdirSync(xpath); } catch (e) { }
1708
+ if (results != null) {
1709
+ for (var i = 0; i < results.length; ++i) {
1710
+ if ((results[i] != '.') && (results[i] != '..')) {
1711
+ var stat = null, p = path.join(reqpath, results[i]);
1712
+ try { stat = fs.statSync(p); } catch (e) { } // TODO: Get file size/date
1713
+ if ((stat != null) && (stat != undefined)) {
1714
+ if (stat.isDirectory() == true) {
1715
+ response.dir.push({ n: results[i], t: 2, d: stat.mtime });
1716
+ } else {
1717
+ response.dir.push({ n: results[i], t: 3, s: stat.size, d: stat.mtime });
1718
+ }
1719
+ }
1720
+ }
1721
+ }
1722
+ }
1723
+ }
1724
+ return response;
1725
+}
1726
+
1727
+// Process KVM control channel data
1728
+function kvmCtrlData(channel, cmd) {
1729
+ if (cmd.length > 0 && cmd.charCodeAt(0) != 123) {
1730
+ // This is upload data
1731
+ if (this.fileupload != null) {
1732
+ cmd = Buffer.from(cmd, 'base64');
1733
+ var header = cmd.readUInt32BE(0);
1734
+ if ((header == 0x01000000) || (header == 0x01000001)) {
1735
+ fs.writeSync(this.fileupload.fp, cmd.slice(4));
1736
+ channel.write({ action: 'upload', sub: 'ack', reqid: this.fileupload.reqid });
1737
+ if (header == 0x01000001) { fs.closeSync(this.fileupload.fp); this.fileupload = null; } // Close the file
1738
+ }
1739
+ }
1740
+ return;
1741
+ }
1742
+ //console.log('KVM Ctrl Data', cmd);
1743
+
1744
+ try { cmd = JSON.parse(cmd); } catch (ex) { console.error('Invalid JSON: ' + cmd); return; }
1745
+ if ((cmd.path != null) && (process.platform != 'win32') && (cmd.path[0] != '/')) { cmd.path = '/' + cmd.path; } // Add '/' to paths on non-windows
1746
+ switch (cmd.action) {
1747
+ case 'ping': {
1748
+ // This is a keep alive
1749
+ channel.write({ action: 'pong' });
1750
+ break;
1751
+ }
1752
+ case 'ls': {
1753
+ /*
1754
+ // Close the watcher if required
1755
+ var samepath = ((this.httprequest.watcher != undefined) && (cmd.path == this.httprequest.watcher.path));
1756
+ if ((this.httprequest.watcher != undefined) && (samepath == false)) {
1757
+ //console.log('Closing watcher: ' + this.httprequest.watcher.path);
1758
+ //this.httprequest.watcher.close(); // TODO: This line causes the agent to crash!!!!
1759
+ delete this.httprequest.watcher;
1760
+ }
1761
+ */
1762
+
1763
+ // Send the folder content to the browser
1764
+ var response = getDirectoryInfo(cmd.path);
1765
+ if (cmd.reqid != undefined) { response.reqid = cmd.reqid; }
1766
+ channel.write(response);
1767
+
1768
+ /*
1769
+ // Start the directory watcher
1770
+ if ((cmd.path != '') && (samepath == false)) {
1771
+ var watcher = fs.watch(cmd.path, onFileWatcher);
1772
+ watcher.tunnel = this.httprequest;
1773
+ watcher.path = cmd.path;
1774
+ this.httprequest.watcher = watcher;
1775
+ //console.log('Starting watcher: ' + this.httprequest.watcher.path);
1776
+ }
1777
+ */
1778
+ break;
1779
+ }
1780
+ case 'mkdir': {
1781
+ // Create a new empty folder
1782
+ fs.mkdirSync(cmd.path);
1783
+ break;
1784
+ }
1785
+ case 'rm': {
1786
+ // Remove many files or folders
1787
+ for (var i in cmd.delfiles) {
1788
+ var fullpath = path.join(cmd.path, cmd.delfiles[i]);
1789
+ try { fs.unlinkSync(fullpath); } catch (e) { console.log(e); }
1790
+ }
1791
+ break;
1792
+ }
1793
+ case 'rename': {
1794
+ // Rename a file or folder
1795
+ var oldfullpath = path.join(cmd.path, cmd.oldname);
1796
+ var newfullpath = path.join(cmd.path, cmd.newname);
1797
+ try { fs.renameSync(oldfullpath, newfullpath); } catch (e) { console.log(e); }
1798
+ break;
1799
+ }
1800
+ case 'download': {
1801
+ // Download a file, to browser
1802
+ var sendNextBlock = 0;
1803
+ if (cmd.sub == 'start') { // Setup the download
1804
+ if (this.filedownload != null) { channel.write({ action: 'download', sub: 'cancel', id: this.filedownload.id }); delete this.filedownload; }
1805
+ this.filedownload = { id: cmd.id, path: cmd.path, ptr: 0 }
1806
+ try { this.filedownload.f = fs.openSync(this.filedownload.path, 'rbN'); } catch (e) { channel.write({ action: 'download', sub: 'cancel', id: this.filedownload.id }); delete this.filedownload; }
1807
+ if (this.filedownload) { channel.write({ action: 'download', sub: 'start', id: cmd.id }); }
1808
+ } else if ((this.filedownload != null) && (cmd.id == this.filedownload.id)) { // Download commands
1809
+ if (cmd.sub == 'startack') { sendNextBlock = 8; } else if (cmd.sub == 'stop') { delete this.filedownload; } else if (cmd.sub == 'ack') { sendNextBlock = 1; }
1810
+ }
1811
+ // Send the next download block(s)
1812
+ while (sendNextBlock > 0) {
1813
+ sendNextBlock--;
1814
+ var buf = Buffer.alloc(4096);
1815
+ var len = fs.readSync(this.filedownload.f, buf, 4, 4092, null);
1816
+ this.filedownload.ptr += len;
1817
+ if (len < 4092) { buf.writeInt32BE(0x01000001, 0); fs.closeSync(this.filedownload.f); delete this.filedownload; sendNextBlock = 0; } else { buf.writeInt32BE(0x01000000, 0); }
1818
+ channel.write(buf.slice(0, len + 4).toString('base64')); // Write as Base64
1819
+ }
1820
+ break;
1821
+ }
1822
+ case 'upload': {
1823
+ // Upload a file, from browser
1824
+ if (cmd.sub == 'start') { // Start the upload
1825
+ if (this.fileupload != null) { fs.closeSync(this.fileupload.fp); }
1826
+ if (!cmd.path || !cmd.name) break;
1827
+ this.fileupload = { reqid: cmd.reqid };
1828
+ var filepath = path.join(cmd.path, cmd.name);
1829
+ try { this.fileupload.fp = fs.openSync(filepath, 'wbN'); } catch (e) { }
1830
+ if (this.fileupload.fp) { channel.write({ action: 'upload', sub: 'start', reqid: this.fileupload.reqid }); } else { this.fileupload = null; channel.write({ action: 'upload', sub: 'error', reqid: this.fileupload.reqid }); }
1831
+ }
1832
+ else if (cmd.sub == 'cancel') { // Stop the upload
1833
+ if (this.fileupload != null) { fs.closeSync(this.fileupload.fp); this.fileupload = null; }
1834
+ }
1835
+ break;
1836
+ }
1837
+ case 'copy': {
1838
+ // Copy a bunch of files from scpath to dspath
1839
+ for (var i in cmd.names) {
1840
+ var sc = path.join(cmd.scpath, cmd.names[i]), ds = path.join(cmd.dspath, cmd.names[i]);
1841
+ if (sc != ds) { try { fs.copyFileSync(sc, ds); } catch (e) { } }
1842
+ }
1843
+ break;
1844
+ }
1845
+ case 'move': {
1846
+ // Move a bunch of files from scpath to dspath
1847
+ for (var i in cmd.names) {
1848
+ var sc = path.join(cmd.scpath, cmd.names[i]), ds = path.join(cmd.dspath, cmd.names[i]);
1849
+ if (sc != ds) { try { fs.copyFileSync(sc, ds); fs.unlinkSync(sc); } catch (e) { } }
1850
+ }
1851
+ break;
1852
+ }
1853
+ default:
1854
+ // Unknown action, ignore it.
1855
+ break;
1856
+ }
1857
+}
1858
+
1859
+function webRtcCleanUp() {
1860
+ if (webRtcDesktop == null) return;
1861
+ if (webRtcDesktop.rtcchannel) {
1862
+ try { webRtcDesktop.rtcchannel.close(); } catch (e) { }
1863
+ try { webRtcDesktop.rtcchannel.removeAllListeners('data'); } catch (e) { }
1864
+ try { webRtcDesktop.rtcchannel.removeAllListeners('end'); } catch (e) { }
1865
+ delete webRtcDesktop.rtcchannel;
1866
+ }
1867
+ if (webRtcDesktop.webrtc) {
1868
+ try { webRtcDesktop.webrtc.close(); } catch (e) { }
1869
+ try { webRtcDesktop.webrtc.removeAllListeners('connected'); } catch (e) { }
1870
+ try { webRtcDesktop.webrtc.removeAllListeners('disconnected'); } catch (e) { }
1871
+ try { webRtcDesktop.webrtc.removeAllListeners('dataChannel'); } catch (e) { }
1872
+ delete webRtcDesktop.webrtc;
1873
+ }
1874
+ if (webRtcDesktop.kvm) {
1875
+ try { webRtcDesktop.kvm.end(); } catch (e) { }
1876
+ delete webRtcDesktop.kvm;
1877
+ }
1878
+ webRtcDesktop = null;
1879
+}
1880
+
1881
+function kvmSetData(x) {
1882
+ osamtstack.IPS_KVMRedirectionSettingData_DataChannelWrite(Buffer.from(x).toString('base64'), function () { });
1883
+}
1884
+
1885
+function startLmsWsmanResponse(stack, name, responses, status) {
1886
+ if (status == 600) { console.log('ERROR: Unable to connect to Intel(R) AMT.'); }
1887
+ else if (status != 200) { console.log('ERROR: Unable to get object from Intel(R) AMT, status = ' + status + '.'); }
1888
+ else {
1889
+ //console.log(JSON.stringify(responses), status);
1890
+ var amtlogicalelements = responses["CIM_SoftwareIdentity"].responses;
1891
+ if (amtlogicalelements.length > 0) {
1892
+ var v = getInstance(amtlogicalelements, "AMT")["VersionString"];
1893
+ amtversion = parseInt(v.split('.')[0]);
1894
+ amtversionmin = parseInt(v.split('.')[1]);
1895
+ //console.log(amtversion, amtversionmin);
1896
+ }
1897
+ }
1898
+}
1899
+
1900
+
1901
+// Process commands in the LMS control channel
1902
+// Command 9 is add a notification.
1903
+function processLmsControlData(data) {
1904
+ if (data.length < 2) return;
1905
+ var cmdid = data.readUInt16LE(0);
1906
+ switch (cmdid) {
1907
+ case 1: // Request basic Intel AMT information (CMD = 1)
1908
+ { getAmtInfo(function (meinfo, socket) { meinfo.LoginMode = 2; socket.write(Buffer.concat([Buffer.from('0100', 'hex'), Buffer.from(JSON.stringify(meinfo))])); }, this); break; }
1909
+ case 2: // Intel AMT MEI Unprovision (CMD = 2)
1910
+ { if (data.length < 6) break; amtMei.unprovision(data.readUInt32LE(2), function (status, socket) { var data = Buffer.alloc(6); data.writeUInt16LE(2, 0); data.writeUInt32LE(status, 2); socket.write(data); }, this); break; }
1911
+ case 3: // Intel AMT MEI GetLocalSystemAccount (CMD = 3)
1912
+ { amtMei.getLocalSystemAccount(function (account, socket) { socket.write(Buffer.concat([Buffer.from('030000000000', 'hex'), account.raw])); }, this); break; }
1913
+ case 4: // Instruct Intel AMT to start remote configuration (CMD = 4)
1914
+ { amtMei.startConfiguration(function (status, socket) { var data = Buffer.alloc(6); data.writeUInt16LE(7, 0); data.writeUInt32LE(status, 2); socket.write(data); }, this); break; }
1915
+ case 5: // Instruct Intel AMT to stop remote configuration (CMD = 5)
1916
+ { amtMei.stopConfiguration(function (status, socket) { var data = Buffer.alloc(6); data.writeUInt16LE(7, 0); data.writeUInt32LE(status, 2); socket.write(data); }, this); break; }
1917
+ case 6: // Instruct Intel AMT connect CIRA (CMD = 6)
1918
+ { amtMei.openUserInitiatedConnection(function (status, socket) { var data = Buffer.alloc(6); data.writeUInt16LE(7, 0); data.writeUInt32LE(status, 2); socket.write(data); }, this); break; }
1919
+ case 7: // Instruct Intel AMT disconnect CIRA (CMD = 7)
1920
+ { amtMei.closeUserInitiatedConnection(function (status, socket) { var data = Buffer.alloc(6); data.writeUInt16LE(7, 0); data.writeUInt32LE(status, 2); socket.write(data); }, this); break; }
1921
+ case 8: // Get Intel AMT CIRA State (CMD = 8)
1922
+ { amtMei.getRemoteAccessConnectionStatus(function (state, socket) { var data = Buffer.alloc(6); data.writeUInt16LE(8, 0); data.writeUInt32LE(state.status, 2); socket.write(Buffer.concat([data, state.raw])); }, this); break; }
1923
+ default:
1924
+ // Unknown action, ignore it.
1925
+ break;
1926
+ }
1927
+}
1928
+
1929
+
1930
+//
1931
+// MeshCentral TCP port router
1932
+//
1933
+
1934
+function startRouter() {
1935
+ tcpserver = net.createServer(OnTcpClientConnected);
1936
+ tcpserver.on('error', function (e) { console.log('ERROR: ' + JSON.stringify(e)); exit(0); return; });
1937
+ tcpserver.listen(settings.localport, function () {
1938
+ // We started listening.
1939
+ if (settings.remotename == null) {
1940
+ console.log('Redirecting local port ' + settings.localport + ' to remote port ' + settings.remoteport + '.');
1941
+ } else {
1942
+ console.log('Redirecting local port ' + settings.localport + ' to ' + settings.remotename + ':' + settings.remoteport + '.');
1943
+ }
1944
+ console.log('Press ctrl-c to exit.');
1945
+
1946
+ // If settings has a "cmd", run it now.
1947
+ //process.exec("notepad.exe");
1948
+ });
1949
+}
1950
+
1951
+// Called when a TCP connect is received on the local port. Launch a tunnel.
1952
+function OnTcpClientConnected(c) {
1953
+ try {
1954
+ // 'connection' listener
1955
+ debug(1, 'Client connected');
1956
+ c.on('end', function () { disconnectTunnel(this, this.websocket, 'Client closed'); });
1957
+ c.pause();
1958
+ try {
1959
+ options = http.parseUri(settings.serverurl + '?user=' + settings.username + '&pass=' + settings.password + '&nodeid=' + settings.remotenodeid + '&tcpport=' + settings.remoteport);
1960
+ } catch (e) { console.log('Unable to parse \"serverUrl\".'); process.exit(1); return; }
1961
+ options.checkServerIdentity = onVerifyServer;
1962
+ options.rejectUnauthorized = false;
1963
+ c.websocket = http.request(options);
1964
+ c.websocket.tcp = c;
1965
+ c.websocket.tunneling = false;
1966
+ c.websocket.upgrade = OnWebSocket;
1967
+ c.websocket.on('error', function (e) { console.log('ERROR: ' + JSON.stringify(e)); });
1968
+ c.websocket.end();
1969
+ } catch (e) { debug(2, e); }
1970
+}
1971
+
1972
+// Disconnect both TCP & WebSocket connections and display a message.
1973
+function disconnectTunnel(tcp, ws, msg) {
1974
+ if (ws != null) { try { ws.end(); } catch (e) { debug(2, e); } }
1975
+ if (tcp != null) { try { tcp.end(); } catch (e) { debug(2, e); } }
1976
+ debug(1, 'Tunnel disconnected: ' + msg);
1977
+}
1978
+
1979
+// Called when the web socket gets connected
1980
+function OnWebSocket(msg, s, head) {
1981
+ debug(1, 'Websocket connected');
1982
+ s.on('data', function (msg) {
1983
+ if (this.parent.tunneling == false) {
1984
+ msg = msg.toString();
1985
+ if ((msg == 'c') || (msg == 'cr')) {
1986
+ this.parent.tunneling = true; this.pipe(this.parent.tcp); this.parent.tcp.pipe(this); debug(1, 'Tunnel active');
1987
+ } else if ((msg.length > 6) && (msg.substring(0, 6) == 'error:')) {
1988
+ console.log(msg.substring(6));
1989
+ disconnectTunnel(this.tcp, this, msg.substring(6));
1990
+ }
1991
+ }
1992
+ });
1993
+ s.on('error', function (msg) { disconnectTunnel(this.tcp, this, 'Websocket error'); });
1994
+ s.on('close', function (msg) { disconnectTunnel(this.tcp, this, 'Websocket closed'); });
1995
+ s.parent = this;
1996
+}
1997
+
1998
+// Try to discover the location of the mesh server
1999
+function discoverMeshServer() { console.log('Looking for server...'); discoveryInterval = setInterval(discoverMeshServerOnce, 5000); discoverMeshServerOnce(); }
2000
+
2001
+// Try to discover the location of the mesh server only once
2002
+function discoverMeshServerOnce() {
2003
+ var interfaces = os.networkInterfaces();
2004
+ for (var adapter in interfaces) {
2005
+ if (interfaces.hasOwnProperty(adapter)) {
2006
+ for (var i = 0; i < interfaces[adapter].length; ++i) {
2007
+ var addr = interfaces[adapter][i];
2008
+ multicastSockets[i] = dgram.createSocket({ type: (addr.family == "IPv4" ? "udp4" : "udp6") });
2009
+ multicastSockets[i].bind({ address: addr.address, exclusive: false });
2010
+ if (addr.family == "IPv4") {
2011
+ try {
2012
+ multicastSockets[i].addMembership(membershipIPv4);
2013
+ //multicastSockets[i].setMulticastLoopback(true);
2014
+ multicastSockets[i].once('message', OnMulticastMessage);
2015
+ multicastSockets[i].send(settings.serverid, 16989, membershipIPv4);
2016
+ } catch (e) { }
2017
+ }
2018
+ }
2019
+ }
2020
+ }
2021
+}
2022
+
2023
+// Called when a multicast packet is received
2024
+function OnMulticastMessage(msg, rinfo) {
2025
+ var m = msg.toString().split('|');
2026
+ if ((m.length == 3) && (m[0] == 'MeshCentral2') && (m[1] == settings.serverid)) {
2027
+ settings.serverurl = m[2].replace('%s', rinfo.address).replace('/agent.ashx', '/meshrelay.ashx');
2028
+ console.log('Found server at ' + settings.serverurl + '.');
2029
+ if (discoveryInterval != null) { clearInterval(discoveryInterval); discoveryInterval = null; }
2030
+ startRouter();
2031
+ }
2032
+}
2033
+
2034
+
2035
+//
2036
+// PUSH MESHCOMMANDER INTO FIRMWARE
2037
+//
2038
+
2039
+function nextStepStorageUpload() {
2040
+ debug(3, "nextStepStorageUpload");
2041
+ getAmtStorage(function (statusCode, data) {
2042
+ if (statusCode == 200) {
2043
+ debug(2, "getAmtStorage: " + JSON.stringify(data, null, 2));
2044
+ if ((data['content'] != null) && (data['content']['index.htm'] != null)) { nextStepStorageUpload3('index.htm'); }
2045
+ else if ((data['content'] != null) && (data['content']['logon.htm'] != null)) { nextStepStorageUpload3('logon.htm'); }
2046
+ else if ((data['content'] != null) && (data['content']['logon.htm'] != null)) { nextStepStorageUpload3('logon.htm'); }
2047
+ else { nextStepStorageUpload2('index.htm', null); }
2048
+ } else {
2049
+ console.log("Unable to read storage state.");
2050
+ exit();
2051
+ return;
2052
+ }
2053
+ });
2054
+}
2055
+
2056
+function nextStepStorageUpload2(uploadName, linkName) {
2057
+ debug(3, "nextStepStorageUpload2");
2058
+ if (settings.webapp == null) { console.log("Done."); exit(); return; } else {
2059
+ console.log("Uploading MeshCommander...");
2060
+ pushToStorage(uploadName, linkName, Buffer.from(settings.webapp, 'base64'), function (statusCode) {
2061
+ if (statusCode == 500) { console.log("Error, check that computer is powered on."); exit(); return; }
2062
+ if (statusCode != 200) {
2063
+ if (uploadName == 'index.htm') {
2064
+ nextStepStorageUpload2('mesh/commander/console', 'MeshCommander');
2065
+ } else {
2066
+ console.log("Unable to upload MeshCommander, status = " + statusCode + "."); exit(); return;
2067
+ }
2068
+ } else {
2069
+ console.log("Verifying MeshCommander...");
2070
+ verifyStorage(uploadName, Buffer.from(settings.webapp, 'base64'), function (verified) {
2071
+ if (verified == true) { console.log('Done.'); } else { console.log('MeshCommander verification failed.'); }
2072
+ exit(); return;
2073
+ });
2074
+ }
2075
+ });
2076
+ }
2077
+}
2078
+
2079
+function nextStepStorageUpload3(deleteName) {
2080
+ console.log("Deleting " + deleteName + " from storage...");
2081
+ deleteStorage(deleteName, function (statusCode) {
2082
+ if (statusCode == 500) { console.log("Error, check that computer is powered on."); exit(); return; }
2083
+ if (statusCode == 200) { nextStepStorageUpload(); } else { console.log("Unable to delete " + deleteName + "."); exit(); return; }
2084
+ });
2085
+}
2086
+
2087
+// Fetch the Intel AMT storage document
2088
+function getAmtStorage(func, noretry) {
2089
+ var req = digest.request({ protocol: settings.protocol, method: "GET", host: settings.hostname, path: "/amt-storage/", port: settings.localport },
2090
+ function (response) {
2091
+ if (response.statusCode != 200) { console.log("Unable to connect to Intel(R) AMT."); func(response.statusCode, null); }
2092
+ response.on('data', function (chunk) { if (response.acc == null) { response.acc = chunk; } else { response.acc += chunk; } });
2093
+ response.on('end', function () {
2094
+ var data = response.acc.toString(), len, data2, amtstorage = null;
2095
+ data = data.split('\t').join('').split('\r').join('').split('\n').join('');
2096
+ try {
2097
+ do { len = data.length; data2 = data; data = data2.replace('": ', '":'); } while (data != data2); // Remove all zero's, this is needed because firmware sometimes returns garbage we must fix.
2098
+ do { len = data.length; data2 = data; data = data2.replace('\x00', ''); } while (data != data2); // Remove all zero's, this is needed because firmware sometimes returns garbage we must fix.
2099
+ do { len = data.length; data2 = data; data = data2.replace('\x22\x01\x22', '\x22\x22'); } while (data != data2); // "\x01", this is needed because firmware sometimes returns garbage we must fix.
2100
+ var xopen = data.split("{").length, xclose = data.split("}").length, xadd = '';
2101
+ while (xopen > xclose) { data += '}'; xclose++; } // Close any missing close brackets
2102
+ amtstorage = JSON.parse(data);
2103
+ } catch (e) { console.log("Error: Unable to parse Intel AMT response: " + data, e); func(null); }
2104
+ if (func != null) { func(response.statusCode, amtstorage); }
2105
+ });
2106
+ });
2107
+ req.on('error', function (e) { console.log("Error occured: " + JSON.stringify(e)); if (noretry == true) { if (func != null) { func(null); } } else { getAmtStorage(func, true); } });
2108
+ req.end();
2109
+}
2110
+
2111
+// Fetch the Intel AMT storage document
2112
+function pushToStorage(name, linkname, data, func, ptr) {
2113
+ if (ptr == null) { ptr = 0; }
2114
+ var req = digest.request({ protocol: settings.protocol, method: "PUT", host: settings.hostname, path: ("/amt-storage/" + name + ((ptr != 0) ? '?append=' : '')), port: settings.localport });
2115
+ req.on('error', function (e) { console.log("Error occured: " + JSON.stringify(e)); if (func != null) { func(null); } });
2116
+ req.on('response', function (response) {
2117
+ debug(1, 'Chunk Done', data.length, ptr);
2118
+ if ((response.statusCode == 200) && (ptr < data.length)) { pushToStorage(name, linkname, data, func, ptr); } else { if (func != null) { func(response.statusCode); } }
2119
+ });
2120
+ var header = (ptr > 0) ? '<metadata></metadata>' : '<metadata><headers><h>Content-Encoding:gzip</h><h>Content-Type:text/html</h></headers>' + ((linkname != null) ? ('<link>' + linkname + '</link>') : '') + '</metadata>';
2121
+ var blocklen = ((data.length - ptr) > (7000 - header.length)) ? (7000 - header.length) : (data.length - ptr);
2122
+ req.write(Buffer.concat([new Buffer(header), data.slice(ptr, ptr + blocklen)]));
2123
+ ptr += blocklen;
2124
+ req.end();
2125
+}
2126
+
2127
+// Fetch the Intel AMT storage document
2128
+function verifyStorage(name, data, func) {
2129
+ var req = digest.request({ protocol: settings.protocol, method: "GET", host: settings.hostname, path: ("/amt-storage/" + name), port: settings.localport });
2130
+ req.on('error', function (e) { console.log("Verify error occured: " + JSON.stringify(e)); if (func != null) { func(null); } });
2131
+ req.on('response', function (response) {
2132
+ response.ptr = 0;
2133
+ response.ok = true;
2134
+ response.on('data', function (data2) { if (data2.toString('hex') != data.slice(response.ptr, response.ptr + data2.length).toString('hex')) { response.ok = false; console.log('Verifiy failed (' + response.ptr + ', ' + data2.length + ').'); } response.ptr += data2.length; });
2135
+ response.on('end', function () { if (func != null) { func(response.ok); } });
2136
+ });
2137
+ req.end();
2138
+}
2139
+
2140
+// Fetch the Intel AMT storage document
2141
+function deleteStorage(name, func, noretry) {
2142
+ var req = digest.request({ protocol: settings.protocol, method: "DELETE", host: settings.hostname, path: "/amt-storage/" + name, port: settings.localport });
2143
+ req.on('error', function (e) { if ((e == 'Error: Socket was unexpectedly closed') && (noretry != true)) { deleteStorage(name, func, true); } else { if (func != null) { if (e.statusCode) { func(e.statusCode); } else { func(null); } } } });
2144
+ req.on('response', function (response) { if (func != null) { func(response.statusCode); } });
2145
+ req.end();
2146
+}
2147
+
2148
+
2149
+//
2150
+// IDER
2151
+//
2152
+
2153
+ider = null;
2154
+iderIdleTimer = null;
2155
+
2156
+// Perform IDER
2157
+function performIder() {
2158
+ if ((settings.floppy != null) && fs.existsSync(settings.floppy) == false) { console.log("Unable to floppy image file: " + settings.floppy); process.exit(); return; }
2159
+ if ((settings.cdrom != null) && fs.existsSync(settings.cdrom) == false) { console.log("Unable to CDROM image file: " + settings.cdrom); process.exit(); return; }
2160
+ try {
2161
+ var sfloppy = null, scdrom = null;
2162
+ if (settings.floppy) { try { if (sfloppy = fs.statSync(settings.floppy)) { sfloppy.file = fs.openSync(settings.floppy, 'rbN'); } } catch (ex) { console.log(ex); process.exit(1); return; } }
2163
+ if (settings.cdrom) { try { scdrom = fs.statSync(settings.cdrom); if (scdrom) { scdrom.file = fs.openSync(settings.cdrom, 'rbN'); } } catch (ex) { console.log(ex); process.exit(1); return; } }
2164
+
2165
+ ider = require('amt-redir-duk')(require('amt-ider')());
2166
+ ider.onStateChanged = onIderStateChange;
2167
+ ider.m.floppy = sfloppy;
2168
+ ider.m.cdrom = scdrom;
2169
+ ider.m.iderStart = 1; // OnReboot = 0, Graceful = 1, Now = 2
2170
+ ider.m.debug = (settings.debuglevel > 0);
2171
+ if (settings.timeout > 0) { ider.m.sectorStats = iderSectorStats; }
2172
+ //ider.digestRealmMatch = wsstack.comm.digestRealm;
2173
+ //ider.tlsv1only = amtstack.wsman.comm.tlsv1only;
2174
+ ider.Start(settings.hostname, (settings.tls == true) ? 16995 : 16994, settings.username ? 'admin' : settings.username, settings.password, settings.tls);
2175
+ } catch (ex) { console.log(ex); }
2176
+}
2177
+
2178
+function onIderStateChange(stack, state) { console.log(['Disconnected', 'Connecting...', 'Connected...', 'Started IDER...'][state]); }
2179
+
2180
+function iderSectorStats(mode, dev, mediaBlocks, lba, len) {
2181
+ if (iderIdleTimer != null) { clearTimeout(iderIdleTimer); }
2182
+ iderIdleTimer = setTimeout(function () { console.log('Idle timeout'); process.exit(1); }, 1000 * settings.timeout);
2183
+}
2184
+
2185
+//
2186
+// Intel AMT IPv4 wired configuration
2187
+//
2188
+
2189
+function performAmtNetConfig(args) {
2190
+ if ((settings.hostname == '127.0.0.1') || (settings.hostname.toLowerCase() == 'localhost')) {
2191
+ settings.noconsole = true; startLms(performAmtNetConfig0, false, args);
2192
+ } else {
2193
+ performAmtNetConfig0(1, args);
2194
+ }
2195
+}
2196
+
2197
+function performAmtNetConfig0(state, args) {
2198
+ var transport = require('amt-wsman-duk');
2199
+ var wsman = require('amt-wsman');
2200
+ var amt = require('amt');
2201
+ wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
2202
+ amtstack = new amt(wsstack);
2203
+ amtstack.BatchEnum(null, ['AMT_EthernetPortSettings'], performAmtNetConfig1, args);
2204
+}
2205
+
2206
+function performAmtNetConfig1(stack, name, response, status, args) {
2207
+ if (status == 200) {
2208
+ // Set wired and wireless interfaces
2209
+ var amtwirelessif = -1;
2210
+ var amtwiredif = -1;
2211
+ for (var y in response['AMT_EthernetPortSettings'].responses) {
2212
+ var z = response['AMT_EthernetPortSettings'].responses[y];
2213
+ if (z['WLANLinkProtectionLevel'] || (y == 1)) { amtwirelessif = y; } // Set the wireless interface, this seems to cover new wireless only computers and older computers with dual interfaces.
2214
+ if (y == 0) { if ((amtwirelessif != y) && (z["MACAddress"] != "00-00-00-00-00-00")) { amtwiredif = y; } } // On computers with only wireless, the wired interface will have a null MAC
2215
+ }
2216
+
2217
+ // Check if configuration change is required
2218
+ if (args) {
2219
+ var docall = false;
2220
+ var x = JSON.parse(JSON.stringify(response['AMT_EthernetPortSettings'].responses[amtwiredif]));
2221
+ var y = response['AMT_EthernetPortSettings'].responses[amtwiredif];
2222
+ delete x["IpSyncEnabled"];
2223
+ delete x["LinkIsUp"];
2224
+ delete x["LinkPolicy"];
2225
+ delete x["MACAddress"];
2226
+ delete x["SharedDynamicIP"];
2227
+ delete x["SharedMAC"];
2228
+ delete x["SharedStaticIp"];
2229
+
2230
+ if ((y['IpSyncEnabled'] == false) && (args.ipsync === '1')) { x['IpSyncEnabled'] = true; docall = true; }
2231
+ if ((y['IpSyncEnabled'] == true) && (args.ipsync === '0')) { x['IpSyncEnabled'] = false; docall = true; }
2232
+ if (args.dhcp && (amtwiredif != -1) && (response['AMT_EthernetPortSettings'].responses[amtwiredif].DHCPEnabled == false)) {
2233
+ // Change to DHCP
2234
+ x['DHCPEnabled'] = true;
2235
+ docall = true;
2236
+ }
2237
+ else if (args.static && (amtwiredif != -1) && (response['AMT_EthernetPortSettings'].responses[amtwiredif].DHCPEnabled == true)) {
2238
+ // Change to STATIC
2239
+ x['DHCPEnabled'] = false;
2240
+ if (args.ip) { x["IPAddress"] = args.ip; } else { console.log('Missing IPv4 address, use --ip 1.2.3.4'); process.exit(1); }
2241
+ if (args.subnet) { x["SubnetMask"] = args.subnet; } else { console.log('Missing IPv4 subnet, use --subnet 255.255.255.0'); process.exit(1); }
2242
+ if (args.gateway) { x["DefaultGateway"] = args.gateway; }
2243
+ if (args.dns) { x["PrimaryDNS"] = args.dns; }
2244
+ if (args.dns2) { x["SecondaryDNS"] = args.dns2; }
2245
+ docall = true;
2246
+ }
2247
+ if (docall) {
2248
+ if (x["DHCPEnabled"] == true) {
2249
+ delete x["IPAddress"];
2250
+ delete x["DefaultGateway"];
2251
+ delete x["PrimaryDNS"];
2252
+ delete x["SecondaryDNS"];
2253
+ delete x["SubnetMask"];
2254
+ }
2255
+ pendingAmtConfigActions++;
2256
+ //console.log(JSON.stringify(x, 4, ' '));
2257
+ amtstack.Put("AMT_EthernetPortSettings", x, function (stack, name, response, status) { if (status != 200) { console.log('Error, status ' + status + '.'); } if (--pendingAmtConfigActions == 0) { performAmtNetConfig0(); } }, null, 0, x);
2258
+ }
2259
+ }
2260
+
2261
+ if (pendingAmtConfigActions == 0) {
2262
+ var maxlen = 0;
2263
+ if (amtwiredif != -1) { for (var i in response['AMT_EthernetPortSettings'].responses[amtwiredif]) { if (i.length > maxlen) { maxlen = i.length; } } }
2264
+ if (amtwirelessif != -1) { for (var i in response['AMT_EthernetPortSettings'].responses[amtwirelessif]) { if (i.length > maxlen) { maxlen = i.length; } } }
2265
+
2266
+ if (amtwiredif != -1) { // Wired
2267
+ var z = response['AMT_EthernetPortSettings'].responses[amtwiredif];
2268
+ console.log('--WIRED---');
2269
+ for (var i in z) {
2270
+ if (['ElementName', 'InstanceID'].indexOf(i) == -1) {
2271
+ var name = i;
2272
+ while (name.length < maxlen) { name += ' '; }
2273
+ console.log(name + ' : ' + z[i]);
2274
+ }
2275
+ }
2276
+ }
2277
+ if (amtwirelessif != -1) { // Wireless
2278
+ var z = response['AMT_EthernetPortSettings'].responses[amtwirelessif];
2279
+ console.log('--WIRELESS---');
2280
+ for (var i in z) {
2281
+ if (['ElementName', 'InstanceID'].indexOf(i) == -1) {
2282
+ var name = i;
2283
+ while (name.length < maxlen) { name += ' '; }
2284
+ console.log(name + ' : ' + z[i]);
2285
+ }
2286
+ }
2287
+ }
2288
+ process.exit(0);
2289
+ }
2290
+ } else {
2291
+ console.log('Error, status ' + status + '.');
2292
+ process.exit(1);
2293
+ }
2294
+}
2295
+
2296
+
2297
+//
2298
+// Intel AMT feature configuration action
2299
+//
2300
+
2301
+function performAmtFeatureConfig(args) {
2302
+ if ((settings.hostname == '127.0.0.1') || (settings.hostname.toLowerCase() == 'localhost')) {
2303
+ settings.noconsole = true; startLms(performAmtFeatureConfig0, false, args);
2304
+ } else {
2305
+ performAmtFeatureConfig0(1, args);
2306
+ }
2307
+}
2308
+
2309
+function performAmtFeatureConfig0(state, args) {
2310
+ var transport = require('amt-wsman-duk');
2311
+ var wsman = require('amt-wsman');
2312
+ var amt = require('amt');
2313
+ wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
2314
+ amtstack = new amt(wsstack);
2315
+ amtstack.BatchEnum(null, ['*IPS_OptInService', '*AMT_RedirectionService', '*CIM_KVMRedirectionSAP'], performAmtFeatureConfig1, args);
2316
+}
2317
+
2318
+function performAmtFeatureConfig1(stack, name, response, status, args) {
2319
+ if (status == 200) {
2320
+ // User consent
2321
+ var optinrequired = response['IPS_OptInService'].response["OptInRequired"];
2322
+ if (args) {
2323
+ if ((args.userconsent == 'none') && (optinrequired != 0)) {
2324
+ pendingAmtConfigActions++;
2325
+ response['IPS_OptInService'].response["OptInRequired"] = 0;
2326
+ amtstack.Put("IPS_OptInService", response['IPS_OptInService'].response, function (stack, name, response, status) { if (--pendingAmtConfigActions == 0) { performAmtFeatureConfig0(); } });
2327
+ }
2328
+ else if ((args.userconsent == 'kvm') && (optinrequired != 1)) {
2329
+ pendingAmtConfigActions++;
2330
+ response['IPS_OptInService'].response["OptInRequired"] = 1;
2331
+ amtstack.Put("IPS_OptInService", response['IPS_OptInService'].response, function (stack, name, response, status) { if (--pendingAmtConfigActions == 0) { performAmtFeatureConfig0(); } });
2332
+ }
2333
+ else if ((args.userconsent == 'all') && (optinrequired != 0xFFFFFFFF)) {
2334
+ pendingAmtConfigActions++;
2335
+ response['IPS_OptInService'].response["OptInRequired"] = 0xFFFFFFFF;
2336
+ amtstack.Put("IPS_OptInService", response['IPS_OptInService'].response, function (stack, name, response, status) { if (--pendingAmtConfigActions == 0) { performAmtFeatureConfig0(); } });
2337
+ }
2338
+ }
2339
+
2340
+ // Redirection ports
2341
+ var redirportchange = false;
2342
+ var redirchange = false;
2343
+ var redir = (response['AMT_RedirectionService'].response["ListenerEnabled"] == true);
2344
+
2345
+ var sol = ((response['AMT_RedirectionService'].response["EnabledState"] & 2) != 0);
2346
+ var ider = ((response['AMT_RedirectionService'].response["EnabledState"] & 1) != 0);
2347
+ if (args) {
2348
+ if ((redir == false) && ((args.redir == 'enabled') || (args.redir == 1))) { response['AMT_RedirectionService'].response["ListenerEnabled"] = true; redirportchange = true; }
2349
+ if ((redir == true) && ((args.redir == 'disabled') || (args.redir == 0))) { response['AMT_RedirectionService'].response["ListenerEnabled"] = false; redirportchange = true; }
2350
+ if ((sol == false) && ((args.sol == 'enabled') || (args.sol == 1))) { sol = true; redirchange = true; }
2351
+ if ((sol == true) && ((args.sol == 'disabled') || (args.sol == 0))) { sol = false; redirchange = true; }
2352
+ if ((ider == false) && ((args.ider == 'enabled') || (args.ider == 1))) { ider = true; redirchange = true; }
2353
+ if ((ider == true) && ((args.ider == 'disabled') || (args.ider == 0))) { ider = false; redirchange = true; }
2354
+ if (redirportchange) { pendingAmtConfigActions++; amtstack.Put("AMT_RedirectionService", response['AMT_RedirectionService'].response, function (stack, name, response, status) { if (--pendingAmtConfigActions == 0) { performAmtFeatureConfig0(); } }); }
2355
+ if (redirchange) { pendingAmtConfigActions++; amtstack.AMT_RedirectionService_RequestStateChange((32768 + ((ider ? 1 : 0) + (sol ? 2 : 0))), function (stack, name, response, status) { if (--pendingAmtConfigActions == 0) { performAmtFeatureConfig0(); } }); }
2356
+ }
2357
+
2358
+ // KVM
2359
+ var kvm = false;
2360
+ var kvmchange = false;
2361
+ if (response['CIM_KVMRedirectionSAP'] != null) {
2362
+ kvm = ((response['CIM_KVMRedirectionSAP'].response["EnabledState"] == 6 && response['CIM_KVMRedirectionSAP'].response["RequestedState"] == 2) || response['CIM_KVMRedirectionSAP'].response["EnabledState"] == 2 || response['CIM_KVMRedirectionSAP'].response["EnabledState"] == 6);
2363
+ if (args) {
2364
+ if ((kvm == false) && ((args.kvm == 'enabled') || (args.kvm == 1))) { kvm = true; kvmchange = true; }
2365
+ if ((kvm == true) && ((args.kvm == 'disabled') || (args.kvm == 0))) { kvm = false; kvmchange = true; }
2366
+ if (kvmchange) { pendingAmtConfigActions++; amtstack.CIM_KVMRedirectionSAP_RequestStateChange(kvm ? 2 : 3, 0, function (stack, name, response, status) { if (--pendingAmtConfigActions == 0) { performAmtFeatureConfig0(); } }); }
2367
+ }
2368
+ }
2369
+
2370
+ if (pendingAmtConfigActions == 0) {
2371
+ if (optinrequired == 0) { console.log('User Consent : None'); }
2372
+ else if (optinrequired == 1) { console.log('User Consent : KVM'); }
2373
+ else if (optinrequired == 0xFFFFFFFF) { console.log('User Consent : All'); }
2374
+ else { console.log('User Consent : ' + optinrequired); }
2375
+ console.log('Redirection Port : ' + (redir ? 'Enabled' : 'Disabled'));
2376
+ console.log('Serial-over-LAN : ' + (sol ? 'Enabled' : 'Disabled'));
2377
+ console.log('IDE Redirection : ' + (ider ? 'Enabled' : 'Disabled'));
2378
+ if (response['CIM_KVMRedirectionSAP'] != null) { console.log('Remote desktop (KVM) : ' + (kvm ? 'Enabled' : 'Disabled')); }
2379
+ process.exit(0);
2380
+ }
2381
+ } else {
2382
+ console.log('Error, status ' + status + '.');
2383
+ process.exit(1);
2384
+ }
2385
+}
2386
+
2387
+
2388
+//
2389
+// Intel AMT Remote Power Action
2390
+//
2391
+
2392
+function performAmtPowerAction() {
2393
+ var transport = require('amt-wsman-duk');
2394
+ var wsman = require('amt-wsman');
2395
+ var amt = require('amt');
2396
+ wsstack = new wsman(transport, settings.hostname, settings.tls ? 16993 : 16992, settings.username, settings.password, settings.tls);
2397
+ amtstack = new amt(wsstack);
2398
+ if (settings.poweraction != 0) {
2399
+ // Set the power state
2400
+ amtstack.RequestPowerStateChange(settings.poweraction, performAmtPowerActionEx);
2401
+ } else {
2402
+ // Get the power state
2403
+ amtstack.Get("CIM_AssociatedPowerManagementService", performAmtPowerActionEx2, 0, 1);
2404
+ }
2405
+}
2406
+
2407
+function performAmtPowerActionEx(stack, name, response, status) {
2408
+ if (status == 200) {
2409
+ console.log(response.Body.ReturnValueStr.split('_').join(' '));
2410
+ process.exit(0);
2411
+ } else {
2412
+ console.log('Error, status ' + status + '.');
2413
+ process.exit(1);
2414
+ }
2415
+}
2416
+
2417
+var DMTFPowerStates = ["", "", "Power on", "Light sleep", "Deep sleep", "Power cycle (Soft off)", "Off - Hard", "Hibernate (Off soft)", "Soft off", "Power cycle (Off-hard)", "Master bus reset", "Diagnostic interrupt (NMI)", "Not applicable", "Off - Soft graceful", "Off - Hard graceful", "Master bus reset graceful", "Power cycle (Off - Soft graceful)", "Power cycle (Off - Hard graceful)", "Diagnostic interrupt (INIT)"];
2418
+function performAmtPowerActionEx2(stack, name, response, status) {
2419
+ if (status == 200) {
2420
+ var powerNumber = parseInt(response.Body.PowerState);
2421
+ if ((powerNumber >= DMTFPowerStates.length) && (powerNumber > 1)) {
2422
+ console.log('Unknown power state: ' + response.Body.PowerState);
2423
+ } else {
2424
+ console.log('Current power state: ' + DMTFPowerStates[powerNumber]);
2425
+ }
2426
+ process.exit(0);
2427
+ } else {
2428
+ console.log('Error, status ' + status + '.');
2429
+ process.exit(1);
2430
+ }
2431
+}
2432
+
2433
+
2434
+//
2435
+// Startup
2436
+//
2437
+
2438
+// Parse URL arguments
2439
+function parseUrlArguments(url) {
2440
+ var r = {}, x = url.split('?');
2441
+ if (x.length < 2) return r;
2442
+ x = x[1].split('&');
2443
+ for (var i in x) { var j = x[i].indexOf('='); if (j > 0) { r[x[i].substring(0, j).toLowerCase()] = x[i].substring(j + 1); } }
2444
+ return r;
2445
+}
2446
+
2447
+// Remove a element from a array
2448
+function removeItemFromArray(array, element) {
2449
+ var index = array.indexOf(element);
2450
+ if (index !== -1) { array.splice(index, 1); }
2451
+}
2452
+
2453
+// Run MeshCmd, but before we do, we need to see if what type of service we are going to be
2454
+var serviceName = null;
2455
+var serviceOpSpecified = 0;
2456
+var serviceInstall = 0;
2457
+
2458
+for (var i in process.argv) {
2459
+ if (process.argv[i].toLowerCase() == 'install') { serviceInstall = 1 } else if (process.argv[i].toLowerCase() == 'uninstall') { serviceInstall = -1 }
2460
+ if ((process.argv[i].toLowerCase() == 'microlms') || (process.argv[i].toLowerCase() == 'amtlms') || (process.argv[i].toLowerCase() == 'lms')) { serviceName = 'MicroLMS'; break; }
2461
+ if ((process.argv[i].toLowerCase() == 'meshcommander') || (process.argv[i].toLowerCase() == 'commander')) { serviceName = 'MeshCommander'; break; }
2462
+}
2463
+
2464
+if (serviceName == null) {
2465
+ for (var i in process.argv) {
2466
+ if ((process.argv[i].toLowerCase() == 'install') || (process.argv[i].toLowerCase() == 'uninstall')) {
2467
+ console.log('In order to install/uninstall, a service type must be specified.');
2468
+ process.exit();
2469
+ }
2470
+ }
2471
+ if (process.execPath.includes('MicroLMS')) { serviceName = 'MicroLMS'; }
2472
+ else if (process.execPath.includes('MeshCommander')) { serviceName = 'MeshCommander'; }
2473
+ else { serviceName = 'not_a_service'; }
2474
+}
2475
+
2476
+if (serviceInstall == 0) {
2477
+ run(process.argv);
2478
+} else {
2479
+ var serviceHost = require('service-host');
2480
+ var meshcmdService = new serviceHost({ name: serviceName, startType: 'AUTO_START' });
2481
+
2482
+ // Called when the background service is started.
2483
+ meshcmdService.on('serviceStart', function onStart() {
2484
+ console.setDestination(console.Destinations.DISABLED); // Disable console.log().
2485
+ if (process.execPath.includes('MicroLMS')) { run([process.execPath, 'microlms']); } //
2486
+ else if (process.execPath.includes('MeshCommander')) { run([process.execPath, 'meshcommander']); }
2487
+ else { console.log('Aborting Service Start, because unknown binary: ' + process.execPath); process.exit(1); }
2488
+ });
2489
+
2490
+ // Called when the background service is stopping
2491
+ meshcmdService.on('serviceStop', function onStop() { console.log('Stopping service'); process.exit(); }); // The console.log() is for debugging, will be ignored unless "console.setDestination()" is set.
2492
+
2493
+ // Called when the executable is not running as a service, run normally.
2494
+ meshcmdService.on('normalStart', function onNormalStart() { try { run(process.argv); } catch (e) { console.log('ERROR: ' + e); } });
2495
+ meshcmdService.run();
2496
+}
agents/meshcore.min.js
new
+2518
@@ -0,0 +1,2518 @@
1
+/*
2
+Copyright 2018-2019 Intel Corporation
3
+
4
+Licensed under the Apache License, Version 2.0 (the "License");
5
+you may not use this file except in compliance with the License.
6
+You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+Unless required by applicable law or agreed to in writing, software
11
+distributed under the License is distributed on an "AS IS" BASIS,
12
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+See the License for the specific language governing permissions and
14
+limitations under the License.
15
+*/
16
+
17
+process.on('uncaughtException', function (ex) {
18
+ require('MeshAgent').SendCommand({ "action": "msg", "type": "console", "value": "uncaughtException1: " + ex });
19
+});
20
+
21
+// NOTE: This seems to cause big problems, don't enable the debugger in the server's meshcore.
22
+//attachDebugger({ webport: 9999, wait: 1 }).then(function (prt) { console.log('Point Browser for Debug to port: ' + prt); });
23
+
24
+// Mesh Rights
25
+var MNG_ERROR = 65;
26
+var MESHRIGHT_EDITMESH = 1;
27
+var MESHRIGHT_MANAGEUSERS = 2;
28
+var MESHRIGHT_MANAGECOMPUTERS = 4;
29
+var MESHRIGHT_REMOTECONTROL = 8;
30
+var MESHRIGHT_AGENTCONSOLE = 16;
31
+var MESHRIGHT_SERVERFILES = 32;
32
+var MESHRIGHT_WAKEDEVICE = 64;
33
+var MESHRIGHT_SETNOTES = 128;
34
+var MESHRIGHT_REMOTEVIEW = 256;
35
+var MESHRIGHT_NOTERMINAL = 512;
36
+var MESHRIGHT_NOFILES = 1024;
37
+var MESHRIGHT_NOAMT = 2048;
38
+var MESHRIGHT_LIMITEDINPUT = 4096;
39
+
40
+function createMeshCore(agent)
41
+{
42
+ var obj = {};
43
+
44
+ if (process.platform == 'darwin' && !process.versions)
45
+ {
46
+ // This is an older MacOS Agent, so we'll need to check the service definition so that Auto-Update will function correctly
47
+ var child = require('child_process').execFile('/bin/sh', ['sh']);
48
+ child.stdout.str = '';
49
+ child.stdout.on('data', function (chunk) { this.str += chunk.toString(); });
50
+ child.stdin.write("cat /Library/LaunchDaemons/meshagent_osx64_LaunchDaemon.plist | tr '\n' '\.' | awk '{split($0, a, \"<key>KeepAlive</key>\"); split(a[2], b, \"<\"); split(b[2], c, \">\"); ");
51
+ child.stdin.write(" if(c[1]==\"dict\"){ split(a[2], d, \"</dict>\"); if(split(d[1], truval, \"<true/>\")>1) { split(truval[1], kn1, \"<key>\"); split(kn1[2], kn2, \"</key>\"); print kn2[1]; } }");
52
+ child.stdin.write(" else { split(c[1], ka, \"/\"); if(ka[1]==\"true\") {print \"ALWAYS\";} } }'\nexit\n");
53
+ child.waitExit();
54
+ if (child.stdout.str.trim() == 'Crashed')
55
+ {
56
+ child = require('child_process').execFile('/bin/sh', ['sh']);
57
+ child.stdout.str = '';
58
+ child.stdout.on('data', function (chunk) { this.str += chunk.toString(); });
59
+ child.stdin.write("launchctl list | grep 'meshagent' | awk '{ if($3==\"meshagent\"){print $1;}}'\nexit\n");
60
+ child.waitExit();
61
+
62
+ if (parseInt(child.stdout.str.trim()) == process.pid)
63
+ {
64
+ // The currently running MeshAgent is us, so we can continue with the update
65
+ var plist = require('fs').readFileSync('/Library/LaunchDaemons/meshagent_osx64_LaunchDaemon.plist').toString();
66
+ var tokens = plist.split('<key>KeepAlive</key>');
67
+ if (tokens[1].split('>')[0].split('<')[1] == 'dict')
68
+ {
69
+ var tmp = tokens[1].split('</dict>');
70
+ tmp.shift();
71
+ tokens[1] = '\n <true/>' + tmp.join('</dict>');
72
+ tokens = tokens.join('<key>KeepAlive</key>');
73
+
74
+ require('fs').writeFileSync('/Library/LaunchDaemons/meshagent_osx64_LaunchDaemon.plist', tokens);
75
+
76
+ var fix = '';
77
+ fix += ("function macosRepair()\n");
78
+ fix += ("{\n");
79
+ fix += (" var child = require('child_process').execFile('/bin/sh', ['sh']);\n");
80
+ fix += (" child.stdout.str = '';\n");
81
+ fix += (" child.stdout.on('data', function (chunk) { this.str += chunk.toString(); });\n");
82
+ fix += (" child.stderr.on('data', function (chunk) { });\n");
83
+ fix += (" child.stdin.write('launchctl unload /Library/LaunchDaemons/meshagent_osx64_LaunchDaemon.plist\\n');\n");
84
+ fix += (" child.stdin.write('launchctl load /Library/LaunchDaemons/meshagent_osx64_LaunchDaemon.plist\\n');\n");
85
+ fix += (" child.stdin.write('rm /Library/LaunchDaemons/meshagentRepair.plist\\n');\n");
86
+ fix += (" child.stdin.write('rm " + process.cwd() + "/macosRepair.js\\n');\n");
87
+ fix += (" child.stdin.write('launchctl stop meshagentRepair\\nexit\\n');\n");
88
+ fix += (" child.waitExit();\n");
89
+ fix += ("}\n");
90
+ fix += ("macosRepair();\n");
91
+ fix += ("process.exit();\n");
92
+ require('fs').writeFileSync(process.cwd() + '/macosRepair.js', fix);
93
+
94
+ var plist = '<?xml version="1.0" encoding="UTF-8"?>\n';
95
+ plist += '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n';
96
+ plist += '<plist version="1.0">\n';
97
+ plist += ' <dict>\n';
98
+ plist += ' <key>Label</key>\n';
99
+ plist += (' <string>meshagentRepair</string>\n');
100
+ plist += ' <key>ProgramArguments</key>\n';
101
+ plist += ' <array>\n';
102
+ plist += (' <string>' + process.execPath + '</string>\n');
103
+ plist += ' <string>macosRepair.js</string>\n';
104
+ plist += ' </array>\n';
105
+ plist += ' <key>WorkingDirectory</key>\n';
106
+ plist += (' <string>' + process.cwd() + '</string>\n');
107
+ plist += ' <key>RunAtLoad</key>\n';
108
+ plist += ' <true/>\n';
109
+ plist += ' </dict>\n';
110
+ plist += '</plist>';
111
+ require('fs').writeFileSync('/Library/LaunchDaemons/meshagentRepair.plist', plist);
112
+
113
+ child = require('child_process').execFile('/bin/sh', ['sh']);
114
+ child.stdout.str = '';
115
+ child.stdout.on('data', function (chunk) { this.str += chunk.toString(); });
116
+ child.stdin.write("launchctl load /Library/LaunchDaemons/meshagentRepair.plist\nexit\n");
117
+ child.waitExit();
118
+ }
119
+ }
120
+ }
121
+ }
122
+
123
+ // Create Secure IPC for Diagnostic Agent Communications
124
+ obj.DAIPC = require('net').createServer();
125
+ if (process.platform != 'win32') { try { require('fs').unlinkSync(process.cwd() + '/DAIPC'); } catch (ee) { } }
126
+ obj.DAIPC.IPCPATH = process.platform == 'win32' ? ('\\\\.\\pipe\\' + require('_agentNodeId')() + '-DAIPC') : (process.cwd() + '/DAIPC');
127
+ try { obj.DAIPC.listen({ path: obj.DAIPC.IPCPATH }); } catch (e) { }
128
+ obj.DAIPC.on('connection', function (c)
129
+ {
130
+ c._send = function (j)
131
+ {
132
+ var data = JSON.stringify(j);
133
+ var packet = Buffer.alloc(data.length + 4);
134
+ packet.writeUInt32LE(data.length + 4, 0);
135
+ Buffer.from(data).copy(packet, 4);
136
+ this.end(packet);
137
+ };
138
+ this._daipc = c;
139
+ c.parent = this;
140
+ c.on('end', function () { console.log('Connection Closed'); this.parent._daipc = null; });
141
+ c.on('data', function (chunk)
142
+ {
143
+ if (chunk.length < 4) { this.unshift(chunk); return; }
144
+ var len = chunk.readUInt32LE(0);
145
+ if (len > 8192) { this.parent._daipc = null; this.end(); return; }
146
+ if (chunk.length < len) { this.unshift(chunk); return; }
147
+
148
+ var data = chunk.slice(4, len);
149
+ try
150
+ {
151
+ data = JSON.parse(data.toString());
152
+ }
153
+ catch(de)
154
+ {
155
+ this.parent._daipc = null; this.end(); return;
156
+ }
157
+
158
+ if (!data.cmd) { this.parent._daipc = null; this.end(); return; }
159
+
160
+ try
161
+ {
162
+ switch(data.cmd)
163
+ {
164
+ case 'query':
165
+ switch(data.value)
166
+ {
167
+ case 'connection':
168
+ data.result = require('MeshAgent').ConnectedServer;
169
+ this._send(data);
170
+ break;
171
+ }
172
+ break;
173
+ default:
174
+ this.parent._daipc = null;
175
+ this.end();
176
+ return;
177
+ }
178
+ }
179
+ catch(xe)
180
+ {
181
+ this.parent._daipc = null; this.end(); return;
182
+ }
183
+ });
184
+ });
185
+ function diagnosticAgent_uninstall()
186
+ {
187
+ require('service-manager').manager.uninstallService('meshagentDiagnostic');
188
+ require('task-scheduler').delete('meshagentDiagnostic/periodicStart');
189
+ };
190
+ function diagnosticAgent_installCheck(install)
191
+ {
192
+ try
193
+ {
194
+ var diag = require('service-manager').manager.getService('meshagentDiagnostic');
195
+ return (diag);
196
+ }
197
+ catch (e)
198
+ {
199
+ }
200
+ if (!install) { return (null); }
201
+
202
+ var svc = null;
203
+ try
204
+ {
205
+ require('service-manager').manager.installService(
206
+ {
207
+ name: 'meshagentDiagnostic',
208
+ displayName: 'Mesh Agent Diagnostic Service',
209
+ description: 'Mesh Agent Diagnostic Service',
210
+ servicePath: process.execPath,
211
+ parameters: ['-recovery']
212
+ //files: [{ newName: 'diagnostic.js', _buffer: Buffer.from('LyoNCkNvcHlyaWdodCAyMDE5IEludGVsIENvcnBvcmF0aW9uDQoNCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQoNCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCg0KVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQoqLw0KDQp2YXIgaG9zdCA9IHJlcXVpcmUoJ3NlcnZpY2UtaG9zdCcpLmNyZWF0ZSgnbWVzaGFnZW50RGlhZ25vc3RpYycpOw0KdmFyIFJlY292ZXJ5QWdlbnQgPSByZXF1aXJlKCdNZXNoQWdlbnQnKTsNCg0KaG9zdC5vbignc2VydmljZVN0YXJ0JywgZnVuY3Rpb24gKCkNCnsNCiAgICBjb25zb2xlLnNldERlc3RpbmF0aW9uKGNvbnNvbGUuRGVzdGluYXRpb25zLkxPR0ZJTEUpOw0KICAgIGhvc3Quc3RvcCA9IGZ1bmN0aW9uKCkNCiAgICB7DQogICAgICAgIHJlcXVpcmUoJ3NlcnZpY2UtbWFuYWdlcicpLm1hbmFnZXIuZ2V0U2VydmljZSgnbWVzaGFnZW50RGlhZ25vc3RpYycpLnN0b3AoKTsNCiAgICB9DQogICAgUmVjb3ZlcnlBZ2VudC5vbignQ29ubmVjdGVkJywgZnVuY3Rpb24gKHN0YXR1cykNCiAgICB7DQogICAgICAgIGlmIChzdGF0dXMgPT0gMCkNCiAgICAgICAgew0KICAgICAgICAgICAgY29uc29sZS5sb2coJ0RpYWdub3N0aWMgQWdlbnQ6IFNlcnZlciBjb25uZWN0aW9uIGxvc3QuLi4nKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBjb25zb2xlLmxvZygnRGlhZ25vc3RpYyBBZ2VudDogQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCB3aXRoIFNlcnZlcicpOw0KICAgICAgICBzdGFydCgpOw0KICAgIH0pOw0KfSk7DQpob3N0Lm9uKCdub3JtYWxTdGFydCcsIGZ1bmN0aW9uICgpDQp7DQogICAgaG9zdC5zdG9wID0gZnVuY3Rpb24gKCkNCiAgICB7DQogICAgICAgIHByb2Nlc3MuZXhpdCgpOw0KICAgIH0NCiAgICBjb25zb2xlLmxvZygnTm9uIFNlcnZpY2UgTW9kZScpOw0KICAgIFJlY292ZXJ5QWdlbnQub24oJ0Nvbm5lY3RlZCcsIGZ1bmN0aW9uIChzdGF0dXMpDQogICAgew0KICAgICAgICBpZiAoc3RhdHVzID09IDApDQogICAgICAgIHsNCiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEaWFnbm9zdGljIEFnZW50OiBTZXJ2ZXIgY29ubmVjdGlvbiBsb3N0Li4uJyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgY29uc29sZS5sb2coJ0RpYWdub3N0aWMgQWdlbnQ6IENvbm5lY3Rpb24gRXN0YWJsaXNoZWQgd2l0aCBTZXJ2ZXInKTsNCiAgICAgICAgc3RhcnQoKTsNCiAgICB9KTsNCn0pOw0KaG9zdC5vbignc2VydmljZVN0b3AnLCBmdW5jdGlvbiAoKSB7IHByb2Nlc3MuZXhpdCgpOyB9KTsNCmhvc3QucnVuKCk7DQoNCg0KZnVuY3Rpb24gc3RhcnQoKQ0Kew0KDQp9Ow0K', 'base64') }]
213
+ });
214
+ svc = require('service-manager').manager.getService('meshagentDiagnostic');
215
+ }
216
+ catch (e)
217
+ {
218
+ return (null);
219
+ }
220
+ var proxyConfig = require('global-tunnel').proxyConfig;
221
+ var cert = require('MeshAgent').GenerateAgentCertificate('CN=MeshNodeDiagnosticCertificate');
222
+ var nodeid = require('tls').loadCertificate(cert.root).getKeyHash().toString('base64');
223
+ ddb = require('SimpleDataStore').Create(svc.appWorkingDirectory().replace('\\', '/') + '/meshagentDiagnostic.db');
224
+ ddb.Put('disableUpdate', '1');
225
+ ddb.Put('MeshID', Buffer.from(require('MeshAgent').ServerInfo.MeshID, 'hex'));
226
+ ddb.Put('ServerID', require('MeshAgent').ServerInfo.ServerID);
227
+ ddb.Put('MeshServer', require('MeshAgent').ServerInfo.ServerUri);
228
+ if (cert.root.pfx) { ddb.Put('SelfNodeCert', cert.root.pfx); }
229
+ if (cert.tls) { ddb.Put('SelfNodeTlsCert', cert.tls.pfx); }
230
+ if (proxyConfig)
231
+ {
232
+ ddb.Put('WebProxy', proxyConfig.host + ':' + proxyConfig.port);
233
+ }
234
+ else
235
+ {
236
+ ddb.Put('ignoreProxyFile', '1');
237
+ }
238
+
239
+ require('MeshAgent').SendCommand({ action: 'diagnostic', value: { command: 'register', value: nodeid } });
240
+ require('MeshAgent').SendCommand({ action: 'msg', type: 'console', value: 'Diagnostic Agent Registered [' + nodeid.length + '/' + nodeid + ']' });
241
+
242
+ delete ddb;
243
+
244
+ // Set a recurrent task, to run the Diagnostic Agent every 2 days
245
+ require('task-scheduler').create({name: 'meshagentDiagnostic/periodicStart', daily: 2, time: require('tls').generateRandomInteger('0', '23') + ':' + require('tls').generateRandomInteger('0', '59').padStart(2, '0'), service: 'meshagentDiagnostic'});
246
+ //require('task-scheduler').create({ name: 'meshagentDiagnostic/periodicStart', daily: '1', time: '17:16', service: 'meshagentDiagnostic' });
247
+
248
+ return (svc);
249
+ }
250
+
251
+ /*
252
+ function borderController() {
253
+ this.container = null;
254
+ this.Start = function Start(user) {
255
+ if (this.container == null) {
256
+ if (process.platform == 'win32') {
257
+ try {
258
+ this.container = require('ScriptContainer').Create({ processIsolation: 1, sessionId: user.SessionId });
259
+ } catch (ex) {
260
+ this.container = require('ScriptContainer').Create({ processIsolation: 1 });
261
+ }
262
+ } else {
263
+ this.container = require('ScriptContainer').Create({ processIsolation: 1, sessionId: user.uid });
264
+ }
265
+ this.container.parent = this;
266
+ this.container.addModule('monitor-info', getJSModule('monitor-info'));
267
+ this.container.addModule('monitor-border', getJSModule('monitor-border'));
268
+ this.container.addModule('promise', getJSModule('promise'));
269
+ this.container.once('exit', function (code) { sendConsoleText('Border Process Exited with code: ' + code); this.parent.container = this.parent._container = null; });
270
+ this.container.ExecuteString("var border = require('monitor-border'); border.Start();");
271
+ }
272
+ }
273
+ this.Stop = function Stop() {
274
+ if (this.container != null) {
275
+ this._container = this.container;
276
+ this._container.parent = this;
277
+ this.container = null;
278
+ this._container.exit();
279
+ }
280
+ }
281
+ }
282
+ obj.borderManager = new borderController();
283
+ */
284
+
285
+ // MeshAgent JavaScript Core Module. This code is sent to and running on the mesh agent.
286
+ var meshCoreObj = { "action": "coreinfo", "value": "MeshCore v6", "caps": 14 }; // Capability bitmask: 1 = Desktop, 2 = Terminal, 4 = Files, 8 = Console, 16 = JavaScript, 32 = Temporary Agent, 64 = Recovery Agent
287
+
288
+ // Get the operating system description string
289
+ try { require('os').name().then(function (v) { meshCoreObj.osdesc = v; }); } catch (ex) { }
290
+
291
+ var meshServerConnectionState = 0;
292
+ var tunnels = {};
293
+ var lastMeInfo = null;
294
+ var lastNetworkInfo = null;
295
+ var lastPublicLocationInfo = null;
296
+ var selfInfoUpdateTimer = null;
297
+ var http = require('http');
298
+ var net = require('net');
299
+ var fs = require('fs');
300
+ var rtc = require('ILibWebRTC');
301
+ var amt = null;
302
+ var processManager = require('process-manager');
303
+ var wifiScannerLib = null;
304
+ var wifiScanner = null;
305
+ var networkMonitor = null;
306
+ var amtscanner = null;
307
+ var nextTunnelIndex = 1;
308
+ var amtPolicy = null;
309
+ var apftunnel = null;
310
+
311
+ // Add to the server event log
312
+ function MeshServerLog(msg, state) {
313
+ if (typeof msg == 'string') { msg = { 'action': 'log', 'msg': msg }; } else { msg.action = 'log'; }
314
+ if (state) {
315
+ if (state.userid) { msg.userid = state.userid; }
316
+ if (state.username) { msg.username = state.username; }
317
+ if (state.sessionid) { msg.sessionid = state.sessionid; }
318
+ }
319
+ mesh.SendCommand(msg);
320
+ }
321
+
322
+ // If we are running in Duktape, agent will be null
323
+ if (agent == null) {
324
+ // Running in native agent, Import libraries
325
+ db = require('SimpleDataStore').Shared();
326
+ sha = require('SHA256Stream');
327
+ mesh = require('MeshAgent');
328
+ childProcess = require('child_process');
329
+ if (mesh.hasKVM == 1) { // if the agent is compiled with KVM support
330
+ // Check if this computer supports a desktop
331
+ try { if ((process.platform == 'win32') || (process.platform == 'darwin') || (require('monitor-info').kvm_x11_support)) { meshCoreObj.caps |= 1; } } catch (ex) { }
332
+ }
333
+ } else {
334
+ // Running in nodejs
335
+ meshCoreObj.value += '-NodeJS';
336
+ meshCoreObj.caps = 8;
337
+ mesh = agent.getMeshApi();
338
+ }
339
+
340
+ mesh.DAIPC = obj.DAIPC;
341
+
342
+ /*
343
+ var AMTScanner = require("AMTScanner");
344
+ var scan = new AMTScanner();
345
+
346
+ scan.on("found", function (data) {
347
+ if (typeof data === 'string') {
348
+ console.log(data);
349
+ } else {
350
+ console.log(JSON.stringify(data, null, " "));
351
+ }
352
+ });
353
+ scan.scan("10.2.55.140", 1000);
354
+ scan.scan("10.2.55.139-10.2.55.145", 1000);
355
+ scan.scan("10.2.55.128/25", 2000);
356
+ */
357
+
358
+ /*
359
+ // Try to load up the network monitor
360
+ try {
361
+ networkMonitor = require('NetworkMonitor');
362
+ networkMonitor.on('change', function () { sendNetworkUpdateNagle(); });
363
+ networkMonitor.on('add', function (addr) { sendNetworkUpdateNagle(); });
364
+ networkMonitor.on('remove', function (addr) { sendNetworkUpdateNagle(); });
365
+ } catch (e) { networkMonitor = null; }
366
+ */
367
+
368
+ // Try to load up the Intel AMT scanner
369
+ try {
370
+ var AMTScannerModule = require('amt-scanner');
371
+ amtscanner = new AMTScannerModule();
372
+ //amtscanner.on('found', function (data) { if (typeof data != 'string') { data = JSON.stringify(data, null, " "); } sendConsoleText(data); });
373
+ } catch (ex) { amtscanner = null; }
374
+
375
+ // Fetch the SMBios Tables
376
+ var SMBiosTables = null;
377
+ var SMBiosTablesRaw = null;
378
+ try {
379
+ var SMBiosModule = null;
380
+ try { SMBiosModule = require('smbios'); } catch (ex) { }
381
+ if (SMBiosModule != null) {
382
+ SMBiosModule.get(function (data) {
383
+ if (data != null) {
384
+ SMBiosTablesRaw = data;
385
+ SMBiosTables = require('smbios').parse(data)
386
+ if (mesh.isControlChannelConnected) { mesh.SendCommand({ "action": "smbios", "value": SMBiosTablesRaw }); }
387
+
388
+ // If SMBios tables say that AMT is present, try to connect MEI
389
+ if (SMBiosTables.amtInfo && (SMBiosTables.amtInfo.AMT == true)) {
390
+ var amtmodule = require('amt-manage');
391
+ amt = new amtmodule(mesh, db, true);
392
+ amt.onStateChange = function (state) { if (state == 2) { sendPeriodicServerUpdate(1); } }
393
+ if (amtPolicy != null) { amt.setPolicy(amtPolicy); }
394
+ amt.start();
395
+ }
396
+ }
397
+ });
398
+ }
399
+ } catch (ex) { sendConsoleText("ex1: " + ex); }
400
+
401
+ // Try to load up the WIFI scanner
402
+ try {
403
+ var wifiScannerLib = require('wifi-scanner');
404
+ wifiScanner = new wifiScannerLib();
405
+ wifiScanner.on('accessPoint', function (data) { sendConsoleText("wifiScanner: " + data); });
406
+ } catch (ex) { wifiScannerLib = null; wifiScanner = null; }
407
+
408
+ // Get our location (lat/long) using our public IP address
409
+ var getIpLocationDataExInProgress = false;
410
+ var getIpLocationDataExCounts = [0, 0];
411
+ function getIpLocationDataEx(func) {
412
+ if (getIpLocationDataExInProgress == true) { return false; }
413
+ try {
414
+ getIpLocationDataExInProgress = true;
415
+ getIpLocationDataExCounts[0]++;
416
+ var options = http.parseUri("http://ipinfo.io/json");
417
+ options.method = 'GET';
418
+ http.request(options, function (resp) {
419
+ if (resp.statusCode == 200) {
420
+ var geoData = '';
421
+ resp.data = function (geoipdata) { geoData += geoipdata; };
422
+ resp.end = function () {
423
+ var location = null;
424
+ try {
425
+ if (typeof geoData == 'string') {
426
+ var result = JSON.parse(geoData);
427
+ if (result.ip && result.loc) { location = result; }
428
+ }
429
+ } catch (e) { }
430
+ if (func) { getIpLocationDataExCounts[1]++; func(location); }
431
+ }
432
+ } else { func(null); }
433
+ getIpLocationDataExInProgress = false;
434
+ }).end();
435
+ return true;
436
+ }
437
+ catch (e) { return false; }
438
+ }
439
+
440
+ // Remove all Gateway MAC addresses for interface list. This is useful because the gateway MAC is not always populated reliably.
441
+ function clearGatewayMac(str) {
442
+ if (str == null) return null;
443
+ var x = JSON.parse(str);
444
+ for (var i in x.netif) { if (x.netif[i].gatewaymac) { delete x.netif[i].gatewaymac } }
445
+ return JSON.stringify(x);
446
+ }
447
+
448
+ function getIpLocationData(func) {
449
+ // Get the location information for the cache if possible
450
+ var publicLocationInfo = db.Get('publicLocationInfo');
451
+ if (publicLocationInfo != null) { publicLocationInfo = JSON.parse(publicLocationInfo); }
452
+ if (publicLocationInfo == null) {
453
+ // Nothing in the cache, fetch the data
454
+ getIpLocationDataEx(function (locationData) {
455
+ if (locationData != null) {
456
+ publicLocationInfo = {};
457
+ publicLocationInfo.netInfoStr = lastNetworkInfo;
458
+ publicLocationInfo.locationData = locationData;
459
+ var x = db.Put('publicLocationInfo', JSON.stringify(publicLocationInfo)); // Save to database
460
+ if (func) func(locationData); // Report the new location
461
+ } else {
462
+ if (func) func(null); // Report no location
463
+ }
464
+ });
465
+ } else {
466
+ // Check the cache
467
+ if (clearGatewayMac(publicLocationInfo.netInfoStr) == clearGatewayMac(lastNetworkInfo)) {
468
+ // Cache match
469
+ if (func) func(publicLocationInfo.locationData);
470
+ } else {
471
+ // Cache mismatch
472
+ getIpLocationDataEx(function (locationData) {
473
+ if (locationData != null) {
474
+ publicLocationInfo = {};
475
+ publicLocationInfo.netInfoStr = lastNetworkInfo;
476
+ publicLocationInfo.locationData = locationData;
477
+ var x = db.Put('publicLocationInfo', JSON.stringify(publicLocationInfo)); // Save to database
478
+ if (func) func(locationData); // Report the new location
479
+ } else {
480
+ if (func) func(publicLocationInfo.locationData); // Can't get new location, report the old location
481
+ }
482
+ });
483
+ }
484
+ }
485
+ }
486
+
487
+ // Polyfill String.endsWith
488
+ if (!String.prototype.endsWith) {
489
+ String.prototype.endsWith = function (searchString, position) {
490
+ var subjectString = this.toString();
491
+ if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) { position = subjectString.length; }
492
+ position -= searchString.length;
493
+ var lastIndex = subjectString.lastIndexOf(searchString, position);
494
+ return lastIndex !== -1 && lastIndex === position;
495
+ };
496
+ }
497
+
498
+ // Polyfill path.join
499
+ obj.path = {
500
+ join: function () {
501
+ var x = [];
502
+ for (var i in arguments) {
503
+ var w = arguments[i];
504
+ if (w != null) {
505
+ while (w.endsWith('/') || w.endsWith('\\')) { w = w.substring(0, w.length - 1); }
506
+ if (i != 0) {
507
+ while (w.startsWith('/') || w.startsWith('\\')) { w = w.substring(1); }
508
+ }
509
+ x.push(w);
510
+ }
511
+ }
512
+ if (x.length == 0) return '/';
513
+ return x.join('/');
514
+ }
515
+ };
516
+
517
+ // Replace a string with a number if the string is an exact number
518
+ function toNumberIfNumber(x) { if ((typeof x == 'string') && (+parseInt(x) === x)) { x = parseInt(x); } return x; }
519
+
520
+ // Convert decimal to hex
521
+ function char2hex(i) { return (i + 0x100).toString(16).substr(-2).toUpperCase(); }
522
+
523
+ // Convert a raw string to a hex string
524
+ function rstr2hex(input) { var r = '', i; for (i = 0; i < input.length; i++) { r += char2hex(input.charCodeAt(i)); } return r; }
525
+
526
+ // Convert a buffer into a string
527
+ function buf2rstr(buf) { var r = ''; for (var i = 0; i < buf.length; i++) { r += String.fromCharCode(buf[i]); } return r; }
528
+
529
+ // Convert a hex string to a raw string // TODO: Do this using Buffer(), will be MUCH faster
530
+ function hex2rstr(d) {
531
+ if (typeof d != "string" || d.length == 0) return '';
532
+ var r = '', m = ('' + d).match(/../g), t;
533
+ while (t = m.shift()) r += String.fromCharCode('0x' + t);
534
+ return r
535
+ }
536
+
537
+ // Convert an object to string with all functions
538
+ function objToString(x, p, pad, ret) {
539
+ if (ret == undefined) ret = '';
540
+ if (p == undefined) p = 0;
541
+ if (x == null) { return '[null]'; }
542
+ if (p > 8) { return '[...]'; }
543
+ if (x == undefined) { return '[undefined]'; }
544
+ if (typeof x == 'string') { if (p == 0) return x; return '"' + x + '"'; }
545
+ if (typeof x == 'buffer') { return '[buffer]'; }
546
+ if (typeof x != 'object') { return x; }
547
+ var r = '{' + (ret ? '\r\n' : ' ');
548
+ for (var i in x) { if (i != '_ObjectID') { r += (addPad(p + 2, pad) + i + ': ' + objToString(x[i], p + 2, pad, ret) + (ret ? '\r\n' : ' ')); } }
549
+ return r + addPad(p, pad) + '}';
550
+ }
551
+
552
+ // Return p number of spaces
553
+ function addPad(p, ret) { var r = ''; for (var i = 0; i < p; i++) { r += ret; } return r; }
554
+
555
+ // Split a string taking into account the quoats. Used for command line parsing
556
+ function splitArgs(str) {
557
+ var myArray = [], myRegexp = /[^\s"]+|"([^"]*)"/gi;
558
+ do { var match = myRegexp.exec(str); if (match != null) { myArray.push(match[1] ? match[1] : match[0]); } } while (match != null);
559
+ return myArray;
560
+ }
561
+
562
+ // Parse arguments string array into an object
563
+ function parseArgs(argv) {
564
+ var results = { '_': [] }, current = null;
565
+ for (var i = 1, len = argv.length; i < len; i++) {
566
+ var x = argv[i];
567
+ if (x.length > 2 && x[0] == '-' && x[1] == '-') {
568
+ if (current != null) { results[current] = true; }
569
+ current = x.substring(2);
570
+ } else {
571
+ if (current != null) { results[current] = toNumberIfNumber(x); current = null; } else { results['_'].push(toNumberIfNumber(x)); }
572
+ }
573
+ }
574
+ if (current != null) { results[current] = true; }
575
+ return results;
576
+ }
577
+
578
+ // Get server target url with a custom path
579
+ function getServerTargetUrl(path) {
580
+ var x = mesh.ServerUrl;
581
+ //sendConsoleText("mesh.ServerUrl: " + mesh.ServerUrl);
582
+ if (x == null) { return null; }
583
+ if (path == null) { path = ''; }
584
+ x = http.parseUri(x);
585
+ if (x == null) return null;
586
+ return x.protocol + '//' + x.host + ':' + x.port + '/' + path;
587
+ }
588
+
589
+ // Get server url. If the url starts with "*/..." change it, it not use the url as is.
590
+ function getServerTargetUrlEx(url) {
591
+ if (url.substring(0, 2) == '*/') { return getServerTargetUrl(url.substring(2)); }
592
+ return url;
593
+ }
594
+
595
+ // Send a wake-on-lan packet
596
+ function sendWakeOnLan(hexMac) {
597
+ var count = 0;
598
+ try {
599
+ var interfaces = require('os').networkInterfaces();
600
+ var magic = 'FFFFFFFFFFFF';
601
+ for (var x = 1; x <= 16; ++x) { magic += hexMac; }
602
+ var magicbin = Buffer.from(magic, 'hex');
603
+
604
+ for (var adapter in interfaces) {
605
+ if (interfaces.hasOwnProperty(adapter)) {
606
+ for (var i = 0; i < interfaces[adapter].length; ++i) {
607
+ var addr = interfaces[adapter][i];
608
+ if ((addr.family == 'IPv4') && (addr.mac != '00:00:00:00:00:00')) {
609
+ var socket = require('dgram').createSocket({ type: "udp4" });
610
+ socket.bind({ address: addr.address });
611
+ socket.setBroadcast(true);
612
+ socket.send(magicbin, 7, "255.255.255.255");
613
+ count++;
614
+ }
615
+ }
616
+ }
617
+ }
618
+ } catch (e) { }
619
+ return count;
620
+ }
621
+
622
+ // Handle a mesh agent command
623
+ function handleServerCommand(data) {
624
+ if (typeof data == 'object') {
625
+ // If this is a console command, parse it and call the console handler
626
+ switch (data.action) {
627
+ case 'msg': {
628
+ switch (data.type) {
629
+ case 'console': { // Process a console command
630
+ if (data.value && data.sessionid) {
631
+ MeshServerLog('Processing console command: ' + data.value, data);
632
+ var args = splitArgs(data.value);
633
+ processConsoleCommand(args[0].toLowerCase(), parseArgs(args), data.rights, data.sessionid);
634
+ }
635
+ break;
636
+ }
637
+ case 'tunnel': {
638
+ if (data.value != null) { // Process a new tunnel connection request
639
+ // Create a new tunnel object
640
+ var xurl = getServerTargetUrlEx(data.value);
641
+ if (xurl != null) {
642
+ var woptions = http.parseUri(xurl);
643
+ woptions.rejectUnauthorized = 0;
644
+ //sendConsoleText(JSON.stringify(woptions));
645
+ //sendConsoleText('TUNNEL: ' + JSON.stringify(data));
646
+ var tunnel = http.request(woptions);
647
+ tunnel.upgrade = onTunnelUpgrade;
648
+ tunnel.on('error', function (e) { sendConsoleText('ERROR: ' + JSON.stringify(e)); });
649
+ tunnel.sessionid = data.sessionid;
650
+ tunnel.rights = data.rights;
651
+ tunnel.consent = data.consent;
652
+ tunnel.username = data.username;
653
+ tunnel.userid = data.userid;
654
+ tunnel.remoteaddr = data.remoteaddr;
655
+ tunnel.state = 0;
656
+ tunnel.url = xurl;
657
+ tunnel.protocol = 0;
658
+ tunnel.tcpaddr = data.tcpaddr;
659
+ tunnel.tcpport = data.tcpport;
660
+ tunnel.udpaddr = data.udpaddr;
661
+ tunnel.udpport = data.udpport;
662
+ tunnel.end();
663
+ // Put the tunnel in the tunnels list
664
+ var index = nextTunnelIndex++;
665
+ tunnel.index = index;
666
+ tunnels[index] = tunnel;
667
+
668
+ //sendConsoleText('New tunnel connection #' + index + ': ' + tunnel.url + ', rights: ' + tunnel.rights, data.sessionid);
669
+ }
670
+ }
671
+ break;
672
+ }
673
+ case 'ps': {
674
+ // Return the list of running processes
675
+ if (data.sessionid) {
676
+ processManager.getProcesses(function (plist) {
677
+ mesh.SendCommand({ "action": "msg", "type": "ps", "value": JSON.stringify(plist), "sessionid": data.sessionid });
678
+ });
679
+ }
680
+ break;
681
+ }
682
+ case 'pskill': {
683
+ // Kill a process
684
+ if (data.value) {
685
+ MeshServerLog('Killing process ' + data.value, data);
686
+ try { process.kill(data.value); } catch (e) { sendConsoleText("pskill: " + JSON.stringify(e)); }
687
+ }
688
+ break;
689
+ }
690
+ case 'services': {
691
+ // Return the list of installed services
692
+ var services = null;
693
+ try { services = require('service-manager').manager.enumerateService(); } catch (e) { }
694
+ if (services != null) { mesh.SendCommand({ "action": "msg", "type": "services", "value": JSON.stringify(services), "sessionid": data.sessionid }); }
695
+ break;
696
+ }
697
+ case 'serviceStop': {
698
+ // Stop a service
699
+ try {
700
+ var service = require('service-manager').manager.getService(data.serviceName);
701
+ if (service != null) { service.stop(); }
702
+ } catch (e) { }
703
+ break;
704
+ }
705
+ case 'serviceStart': {
706
+ // Start a service
707
+ try {
708
+ var service = require('service-manager').manager.getService(data.serviceName);
709
+ if (service != null) { service.start(); }
710
+ } catch (e) { }
711
+ break;
712
+ }
713
+ case 'serviceRestart': {
714
+ // Restart a service
715
+ try {
716
+ var service = require('service-manager').manager.getService(data.serviceName);
717
+ if (service != null) { service.restart(); }
718
+ } catch (e) { }
719
+ break;
720
+ }
721
+ case 'openUrl': {
722
+ // Open a local web browser and return success/fail
723
+ MeshServerLog('Opening: ' + data.url, data);
724
+ sendConsoleText('OpenURL: ' + data.url);
725
+ if (data.url) { mesh.SendCommand({ "action": "msg", "type":"openUrl", "url": data.url, "sessionid": data.sessionid, "success": (openUserDesktopUrl(data.url) != null) }); }
726
+ break;
727
+ }
728
+ case 'getclip': {
729
+ // Send the load clipboard back to the user
730
+ //sendConsoleText('getClip: ' + JSON.stringify(data));
731
+ if (require('MeshAgent').isService) {
732
+ require('clipboard').dispatchRead().then(function (str) {
733
+ if (str) {
734
+ MeshServerLog('Getting clipboard content, ' + str.length + ' byte(s)', data);
735
+ mesh.SendCommand({ "action": "msg", "type": "getclip", "sessionid": data.sessionid, "data": str });
736
+ }
737
+ });
738
+ } else {
739
+ require("clipboard").read().then(function (str) {
740
+ if (str) {
741
+ MeshServerLog('Getting clipboard content, ' + str.length + ' byte(s)', data);
742
+ mesh.SendCommand({ "action": "msg", "type": "getclip", "sessionid": data.sessionid, "data": str });
743
+ }
744
+ });
745
+ }
746
+ break;
747
+ }
748
+ case 'setclip': {
749
+ // Set the load clipboard to a user value
750
+ //sendConsoleText('setClip: ' + JSON.stringify(data));
751
+ if (typeof data.data == 'string') {
752
+ MeshServerLog('Setting clipboard content, ' + data.data.length + ' byte(s)', data);
753
+ if (typeof data.data == 'string') {
754
+ if (require('MeshAgent').isService) { require('clipboard').dispatchWrite(data.data); } else { require("clipboard")(data.data); } // Set the clipboard
755
+ mesh.SendCommand({ "action": "msg", "type": "setclip", "sessionid": data.sessionid, "success": true });
756
+ }
757
+ }
758
+ break;
759
+ }
760
+ default:
761
+ // Unknown action, ignore it.
762
+ break;
763
+ }
764
+ break;
765
+ }
766
+ case 'acmactivate': {
767
+ if (amt != null) {
768
+ MeshServerLog('Attempting Intel AMT ACM mode activation', data);
769
+ amt.setAcmResponse(data);
770
+ }
771
+ break;
772
+ }
773
+ case 'wakeonlan': {
774
+ // Send wake-on-lan on all interfaces for all MAC addresses in data.macs array. The array is a list of HEX MAC addresses.
775
+ sendConsoleText('Server requesting wake-on-lan for: ' + data.macs.join(', '));
776
+ for (var i in data.macs) { sendWakeOnLan(data.macs[i]); }
777
+ break;
778
+ }
779
+ case 'poweraction': {
780
+ // Server telling us to execute a power action
781
+ if ((mesh.ExecPowerState != undefined) && (data.actiontype)) {
782
+ var forced = 0;
783
+ if (data.forced == 1) { forced = 1; }
784
+ data.actiontype = parseInt(data.actiontype);
785
+ MeshServerLog('Performing power action=' + data.actiontype + ', forced=' + forced, data);
786
+ sendConsoleText('Performing power action=' + data.actiontype + ', forced=' + forced + '.');
787
+ var r = mesh.ExecPowerState(data.actiontype, forced);
788
+ sendConsoleText('ExecPowerState returned code: ' + r);
789
+ }
790
+ break;
791
+ }
792
+ case 'iplocation': {
793
+ // Update the IP location information of this node. Only do this when requested by the server since we have a limited amount of time we can call this per day
794
+ getIpLocationData(function (location) { mesh.SendCommand({ "action": "iplocation", "type": "publicip", "value": location }); });
795
+ break;
796
+ }
797
+ case 'toast': {
798
+ // Display a toast message
799
+ if (data.title && data.msg) {
800
+ MeshServerLog('Displaying toast message, title=' + data.title + ', message=' + data.msg, data);
801
+ try { require('toaster').Toast(data.title, data.msg); } catch (ex) { }
802
+ }
803
+ break;
804
+ }
805
+ case 'openUrl': {
806
+ // Open a local web browser and return success/fail
807
+ //sendConsoleText('OpenURL: ' + data.url);
808
+ MeshServerLog('Opening: ' + data.url, data);
809
+ if (data.url) { mesh.SendCommand({ "action": "openUrl", "url": data.url, "sessionid": data.sessionid, "success": (openUserDesktopUrl(data.url) != null) }); }
810
+ break;
811
+ }
812
+ case 'amtPolicy': {
813
+ // Store the latest Intel AMT policy
814
+ amtPolicy = data.amtPolicy;
815
+ if (data.amtPolicy != null) { db.Put('amtPolicy', JSON.stringify(data.amtPolicy)); } else { db.Put('amtPolicy', null); }
816
+ if (amt != null) { amt.setPolicy(amtPolicy, true); }
817
+ break;
818
+ }
819
+ case 'getScript': {
820
+ // Received a configuration script from the server
821
+ sendConsoleText('getScript: ' + JSON.stringify(data));
822
+ break;
823
+ }
824
+ case 'sysinfo': {
825
+ // Fetch system information
826
+ getSystemInformation(function (results) {
827
+ if ((results != null) && (data.hash != results.hash)) { mesh.SendCommand({ "action": "sysinfo", "sessionid": this.sessionid, "data": results }); }
828
+ });
829
+ break;
830
+ }
831
+ case 'ping': { mesh.SendCommand('{"action":"pong"}'); break; }
832
+ case 'pong': { break; }
833
+ default:
834
+ // Unknown action, ignore it.
835
+ break;
836
+ }
837
+ }
838
+ }
839
+
840
+ // Called when a file changed in the file system
841
+ /*
842
+ function onFileWatcher(a, b) {
843
+ console.log('onFileWatcher', a, b, this.path);
844
+ var response = getDirectoryInfo(this.path);
845
+ if ((response != undefined) && (response != null)) { this.tunnel.s.write(JSON.stringify(response)); }
846
+ }
847
+ */
848
+
849
+ function getSystemInformation(func) {
850
+ try {
851
+ var results = { hardware: require('identifiers').get() }; // Hardware info
852
+ if (results.hardware && results.hardware.windows) {
853
+ // Remove extra entries and things that change quickly
854
+ var x = results.hardware.windows.osinfo;
855
+ try { delete x.FreePhysicalMemory; } catch (ex) { }
856
+ try { delete x.FreeSpaceInPagingFiles; } catch (ex) { }
857
+ try { delete x.FreeVirtualMemory; } catch (ex) { }
858
+ try { delete x.LocalDateTime; } catch (ex) { }
859
+ try { delete x.MaxProcessMemorySize; } catch (ex) { }
860
+ try { delete x.TotalVirtualMemorySize; } catch (ex) { }
861
+ try { delete x.TotalVisibleMemorySize; } catch (ex) { }
862
+ try {
863
+ if (results.hardware.windows.memory) { for (var i in results.hardware.windows.memory) { delete results.hardware.windows.memory[i].Node; } }
864
+ if (results.hardware.windows.osinfo) { delete results.hardware.windows.osinfo.Node; }
865
+ if (results.hardware.windows.partitions) { for (var i in results.hardware.windows.partitions) { delete results.hardware.windows.partitions[i].Node; } }
866
+ } catch (ex) { }
867
+ }
868
+ if (process.platform == 'win32') { results.pendingReboot = require('win-info').pendingReboot(); } // Pending reboot
869
+ /*
870
+ if (process.platform == 'win32') {
871
+ var defragResult = function (r) {
872
+ if (typeof r == 'object') { results[this.callname] = r; }
873
+ if (this.callname == 'defrag') {
874
+ var pr = require('win-info').installedApps(); // Installed apps
875
+ pr.callname = 'installedApps';
876
+ pr.sessionid = data.sessionid;
877
+ pr.then(defragResult, defragResult);
878
+ }
879
+ else {
880
+ results.winpatches = require('win-info').qfe(); // Windows patches
881
+ results.hash = require('SHA384Stream').create().syncHash(JSON.stringify(results)).toString('hex');
882
+ func(results);
883
+ }
884
+ }
885
+ var pr = require('win-info').defrag({ volume: 'C:' }); // Defrag TODO
886
+ pr.callname = 'defrag';
887
+ pr.sessionid = data.sessionid;
888
+ pr.then(defragResult, defragResult);
889
+ } else {
890
+ */
891
+ results.hash = require('SHA384Stream').create().syncHash(JSON.stringify(results)).toString('hex');
892
+ func(results);
893
+ //}
894
+ } catch (ex) { func(null, ex); }
895
+ }
896
+
897
+ // Get a formated response for a given directory path
898
+ function getDirectoryInfo(reqpath) {
899
+ var response = { path: reqpath, dir: [] };
900
+ if (((reqpath == undefined) || (reqpath == '')) && (process.platform == 'win32')) {
901
+ // List all the drives in the root, or the root itself
902
+ var results = null;
903
+ try { results = fs.readDrivesSync(); } catch (e) { } // TODO: Anyway to get drive total size and free space? Could draw a progress bar.
904
+ if (results != null) {
905
+ for (var i = 0; i < results.length; ++i) {
906
+ var drive = { n: results[i].name, t: 1 };
907
+ if (results[i].type == 'REMOVABLE') { drive.dt = 'removable'; } // TODO: See if this is USB/CDROM or something else, we can draw icons.
908
+ response.dir.push(drive);
909
+ }
910
+ }
911
+ } else {
912
+ // List all the files and folders in this path
913
+ if (reqpath == '') { reqpath = '/'; }
914
+ var results = null, xpath = obj.path.join(reqpath, '*');
915
+ //if (process.platform == "win32") { xpath = xpath.split('/').join('\\'); }
916
+ try { results = fs.readdirSync(xpath); } catch (e) { }
917
+ if (results != null) {
918
+ for (var i = 0; i < results.length; ++i) {
919
+ if ((results[i] != '.') && (results[i] != '..')) {
920
+ var stat = null, p = obj.path.join(reqpath, results[i]);
921
+ //if (process.platform == "win32") { p = p.split('/').join('\\'); }
922
+ try { stat = fs.statSync(p); } catch (e) { } // TODO: Get file size/date
923
+ if ((stat != null) && (stat != undefined)) {
924
+ if (stat.isDirectory() == true) {
925
+ response.dir.push({ n: results[i], t: 2, d: stat.mtime });
926
+ } else {
927
+ response.dir.push({ n: results[i], t: 3, s: stat.size, d: stat.mtime });
928
+ }
929
+ }
930
+ }
931
+ }
932
+ }
933
+ }
934
+ return response;
935
+ }
936
+
937
+ // Tunnel callback operations
938
+ function onTunnelUpgrade(response, s, head) {
939
+ this.s = s;
940
+ s.httprequest = this;
941
+ s.end = onTunnelClosed;
942
+ s.tunnel = this;
943
+
944
+ //sendConsoleText('onTunnelUpgrade - ' + this.tcpport + ' - ' + this.udpport);
945
+
946
+ if (this.tcpport != null) {
947
+ // This is a TCP relay connection, pause now and try to connect to the target.
948
+ s.pause();
949
+ s.data = onTcpRelayServerTunnelData;
950
+ var connectionOptions = { port: parseInt(this.tcpport) };
951
+ if (this.tcpaddr != null) { connectionOptions.host = this.tcpaddr; } else { connectionOptions.host = '127.0.0.1'; }
952
+ s.tcprelay = net.createConnection(connectionOptions, onTcpRelayTargetTunnelConnect);
953
+ s.tcprelay.peerindex = this.index;
954
+ } if (this.udpport != null) {
955
+ // This is a UDP relay connection, get the UDP socket setup. // TODO: ***************
956
+ s.data = onUdpRelayServerTunnelData;
957
+ s.udprelay = require('dgram').createSocket({ type: 'udp4' });
958
+ s.udprelay.bind({ port: 0 });
959
+ s.udprelay.peerindex = this.index;
960
+ s.udprelay.on('message', onUdpRelayTargetTunnelConnect);
961
+ s.udprelay.udpport = this.udpport;
962
+ s.udprelay.udpaddr = this.udpaddr;
963
+ s.udprelay.first = true;
964
+ } else {
965
+ // This is a normal connect for KVM/Terminal/Files
966
+ s.data = onTunnelData;
967
+ }
968
+ }
969
+
970
+ // Called when UDP relay data is received // TODO****
971
+ function onUdpRelayTargetTunnelConnect(data) {
972
+ var peerTunnel = tunnels[this.peerindex];
973
+ peerTunnel.s.write(data);
974
+ }
975
+
976
+ // Called when we get data from the server for a TCP relay (We have to skip the first received 'c' and pipe the rest)
977
+ function onUdpRelayServerTunnelData(data) {
978
+ if (this.udprelay.first === true) {
979
+ delete this.udprelay.first; // Skip the first 'c' that is received.
980
+ } else {
981
+ this.udprelay.send(data, parseInt(this.udprelay.udpport), this.udprelay.udpaddr ? this.udprelay.udpaddr : '127.0.0.1');
982
+ }
983
+ }
984
+
985
+ // Called when the TCP relay target is connected
986
+ function onTcpRelayTargetTunnelConnect() {
987
+ var peerTunnel = tunnels[this.peerindex];
988
+ this.pipe(peerTunnel.s); // Pipe Target --> Server
989
+ peerTunnel.s.first = true;
990
+ peerTunnel.s.resume();
991
+ }
992
+
993
+ // Called when we get data from the server for a TCP relay (We have to skip the first received 'c' and pipe the rest)
994
+ function onTcpRelayServerTunnelData(data) {
995
+ if (this.first == true) { this.first = false; this.pipe(this.tcprelay); } // Pipe Server --> Target
996
+ }
997
+
998
+ function onTunnelClosed() {
999
+ if (tunnels[this.httprequest.index] == null) return; // Stop duplicate calls.
1000
+ //sendConsoleText("Tunnel #" + this.httprequest.index + " closed.", this.httprequest.sessionid);
1001
+ delete tunnels[this.httprequest.index];
1002
+
1003
+ /*
1004
+ // Close the watcher if required
1005
+ if (this.httprequest.watcher != undefined) {
1006
+ //console.log('Closing watcher: ' + this.httprequest.watcher.path);
1007
+ //this.httprequest.watcher.close(); // TODO: This line causes the agent to crash!!!!
1008
+ delete this.httprequest.watcher;
1009
+ }
1010
+ */
1011
+
1012
+ // If there is a upload or download active on this connection, close the file
1013
+ if (this.httprequest.uploadFile) { fs.closeSync(this.httprequest.uploadFile); this.httprequest.uploadFile = undefined; }
1014
+ if (this.httprequest.downloadFile) { fs.closeSync(this.httprequest.downloadFile); this.httprequest.downloadFile = undefined; }
1015
+
1016
+ // Clean up WebRTC
1017
+ if (this.webrtc != null) {
1018
+ if (this.webrtc.rtcchannel) { try { this.webrtc.rtcchannel.close(); } catch (e) { } this.webrtc.rtcchannel.removeAllListeners('data'); this.webrtc.rtcchannel.removeAllListeners('end'); delete this.webrtc.rtcchannel; }
1019
+ if (this.webrtc.websocket) { delete this.webrtc.websocket; }
1020
+ try { this.webrtc.close(); } catch (e) { }
1021
+ this.webrtc.removeAllListeners('connected');
1022
+ this.webrtc.removeAllListeners('disconnected');
1023
+ this.webrtc.removeAllListeners('dataChannel');
1024
+ delete this.webrtc;
1025
+ }
1026
+
1027
+ // Clean up WebSocket
1028
+ this.removeAllListeners('data');
1029
+ }
1030
+ function onTunnelSendOk() { /*sendConsoleText("Tunnel #" + this.index + " SendOK.", this.sessionid);*/ }
1031
+ function onTunnelData(data) {
1032
+ //console.log("OnTunnelData");
1033
+ //sendConsoleText('OnTunnelData, ' + data.length + ', ' + typeof data + ', ' + data);
1034
+
1035
+ // If this is upload data, save it to file
1036
+ if (this.httprequest.uploadFile) {
1037
+ try { fs.writeSync(this.httprequest.uploadFile, data); } catch (e) { this.write(new Buffer(JSON.stringify({ action: 'uploaderror' }))); return; } // Write to the file, if there is a problem, error out.
1038
+ this.write(new Buffer(JSON.stringify({ action: 'uploadack', reqid: this.httprequest.uploadFileid }))); // Ask for more data
1039
+ return;
1040
+ }
1041
+ /*
1042
+ // If this is a download, send more of the file
1043
+ if (this.httprequest.downloadFile) {
1044
+ var buf = new Buffer(4096);
1045
+ var len = fs.readSync(this.httprequest.downloadFile, buf, 0, 4096, null);
1046
+ this.httprequest.downloadFilePtr += len;
1047
+ if (len > 0) { this.write(buf.slice(0, len)); } else { fs.closeSync(this.httprequest.downloadFile); this.httprequest.downloadFile = undefined; this.end(); }
1048
+ return;
1049
+ }
1050
+ */
1051
+
1052
+ if (this.httprequest.state == 0) {
1053
+ // Check if this is a relay connection
1054
+ if ((data == 'c') || (data == 'cr')) { this.httprequest.state = 1; /*sendConsoleText("Tunnel #" + this.httprequest.index + " now active", this.httprequest.sessionid);*/ }
1055
+ } else {
1056
+ // Handle tunnel data
1057
+ if (this.httprequest.protocol == 0) { // 1 = Terminal, 2 = Desktop, 5 = Files, 6 = PowerShell
1058
+ // Take a look at the protocol
1059
+ this.httprequest.protocol = parseInt(data);
1060
+ if (typeof this.httprequest.protocol != 'number') { this.httprequest.protocol = 0; }
1061
+ if ((this.httprequest.protocol == 1) || (this.httprequest.protocol == 6)) {
1062
+ // Check user access rights for terminal
1063
+ if (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) || ((this.httprequest.rights != 0xFFFFFFFF) && ((this.httprequest.rights & MESHRIGHT_NOTERMINAL) != 0))) {
1064
+ // Disengage this tunnel, user does not have the rights to do this!!
1065
+ this.httprequest.protocol = 999999;
1066
+ this.httprequest.s.end();
1067
+ sendConsoleText('Error: No Terminal Control Rights.');
1068
+ return;
1069
+ }
1070
+
1071
+ this.end = function ()
1072
+ {
1073
+ if (process.platform == "win32")
1074
+ {
1075
+ // Unpipe the web socket
1076
+ this.unpipe(this.httprequest._term);
1077
+ if (this.httprequest._term) { this.httprequest._term.unpipe(this); }
1078
+
1079
+ // Unpipe the WebRTC channel if needed (This will also be done when the WebRTC channel ends).
1080
+ if (this.rtcchannel)
1081
+ {
1082
+ this.rtcchannel.unpipe(this.httprequest._term);
1083
+ if (this.httprequest._term) { this.httprequest._term.unpipe(this.rtcchannel); }
1084
+ }
1085
+
1086
+ // Clean up
1087
+ if (this.httprequest._term) { this.httprequest._term.end(); }
1088
+ this.httprequest._term = null;
1089
+ } else
1090
+ {
1091
+ // TODO!!
1092
+ }
1093
+ };
1094
+
1095
+ // Remote terminal using native pipes
1096
+ if (process.platform == "win32")
1097
+ {
1098
+ try
1099
+ {
1100
+ if ((this.httprequest.protocol == 6) && (require('win-terminal').PowerShellCapable() == true))
1101
+ {
1102
+ this.httprequest._term = require('win-terminal').StartPowerShell(80, 25);
1103
+ } else
1104
+ {
1105
+ this.httprequest._term = require('win-terminal').Start(80, 25);
1106
+ }
1107
+ }
1108
+ catch(e)
1109
+ {
1110
+ MeshServerLog('Failed to start remote terminal session, ' + e.toString() + ' (' + this.httprequest.remoteaddr + ')', this.httprequest);
1111
+ this.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString() }));
1112
+ this.end();
1113
+ return;
1114
+ }
1115
+ this.httprequest._term.pipe(this, { dataTypeSkip: 1 });
1116
+ this.pipe(this.httprequest._term, { dataTypeSkip: 1, end: false });
1117
+ this.prependListener('end', function () { this.httprequest._term.end(function () { console.log('Terminal was closed'); }); });
1118
+ } else
1119
+ {
1120
+ if (fs.existsSync("/bin/bash"))
1121
+ {
1122
+ this.httprequest.process = childProcess.execFile("/bin/bash", ["bash", "-i"], { type: childProcess.SpawnTypes.TERM });
1123
+ if (process.platform == 'linux') { this.httprequest.process.stdin.write("alias ls='ls --color=auto'\nclear\n"); }
1124
+ } else
1125
+ {
1126
+ this.httprequest.process = childProcess.execFile("/bin/sh", ["sh"], { type: childProcess.SpawnTypes.TERM });
1127
+ if (process.platform == 'linux') { this.httprequest.process.stdin.write("stty erase ^H\nalias ls='ls --color=auto'\nPS1='\\u@\\h:\\w\\$ '\nclear\n"); }
1128
+ }
1129
+ this.httprequest.process.tunnel = this;
1130
+ this.httprequest.process.on('exit', function (ecode, sig) { this.tunnel.end(); });
1131
+ this.httprequest.process.stderr.on('data', function (chunk) { this.parent.tunnel.write(chunk); });
1132
+ this.httprequest.process.stdout.pipe(this, { dataTypeSkip: 1 }); // 0 = Binary, 1 = Text.
1133
+ this.pipe(this.httprequest.process.stdin, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text.
1134
+ this.prependListener('end', function () { this.httprequest.process.kill(); });
1135
+ }
1136
+
1137
+ // Perform notification if needed. Toast messages may not be supported on all platforms.
1138
+ if (this.httprequest.consent && (this.httprequest.consent & 16)) {
1139
+ // User Consent Prompt is required
1140
+ // Send a console message back using the console channel, "\n" is supported.
1141
+ this.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: 'Waiting for user to grant access...' }));
1142
+ var pr = require('message-box').create('MeshCentral', this.httprequest.username + ' requesting Terminal Access. Grant access?', 10);
1143
+ pr.ws = this;
1144
+ this.pause();
1145
+
1146
+ pr.then(
1147
+ function () {
1148
+ // Success
1149
+ MeshServerLog('Starting remote terminal after local user accepted (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1150
+ this.ws.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: null }));
1151
+ if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 2)) {
1152
+ // User Notifications is required
1153
+ try { require('toaster').Toast('MeshCentral', this.ws.httprequest.username + ' started a remote terminal session.'); } catch (ex) { }
1154
+ }
1155
+ this.ws.resume();
1156
+ },
1157
+ function (e) {
1158
+ // User Consent Denied/Failed
1159
+ MeshServerLog('Failed to start remote terminal after local user rejected (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1160
+ this.ws.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString() }));
1161
+ this.ws.end();
1162
+ });
1163
+ } else {
1164
+ // User Consent Prompt is not required
1165
+ if (this.httprequest.consent && (this.httprequest.consent & 2)) {
1166
+ // User Notifications is required
1167
+ MeshServerLog('Started remote terminal with toast notification (' + this.httprequest.remoteaddr + ')', this.httprequest);
1168
+ try { require('toaster').Toast('MeshCentral', this.httprequest.username + ' started a remote terminal session.'); } catch (ex) { }
1169
+ } else {
1170
+ MeshServerLog('Started remote terminal without notification (' + this.httprequest.remoteaddr + ')', this.httprequest);
1171
+ }
1172
+ this.resume();
1173
+ }
1174
+
1175
+ this.removeAllListeners('data');
1176
+ this.on('data', onTunnelControlData);
1177
+ //this.write('MeshCore Terminal Hello');
1178
+ } else if (this.httprequest.protocol == 2)
1179
+ {
1180
+ // Check user access rights for desktop
1181
+ if (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) && ((this.httprequest.rights & MESHRIGHT_REMOTEVIEW) == 0)) {
1182
+ // Disengage this tunnel, user does not have the rights to do this!!
1183
+ this.httprequest.protocol = 999999;
1184
+ this.httprequest.s.end();
1185
+ sendConsoleText('Error: No Desktop Control Rights.');
1186
+ return;
1187
+ }
1188
+
1189
+
1190
+ // Remote desktop using native pipes
1191
+ this.httprequest.desktop = { state: 0, kvm: mesh.getRemoteDesktopStream(), tunnel: this };
1192
+ this.httprequest.desktop.kvm.parent = this.httprequest.desktop;
1193
+ this.desktop = this.httprequest.desktop;
1194
+
1195
+ this.end = function () {
1196
+ --this.desktop.kvm.connectionCount;
1197
+
1198
+ // Unpipe the web socket
1199
+ this.unpipe(this.httprequest.desktop.kvm);
1200
+ this.httprequest.desktop.kvm.unpipe(this);
1201
+
1202
+ // Unpipe the WebRTC channel if needed (This will also be done when the WebRTC channel ends).
1203
+ if (this.rtcchannel) {
1204
+ this.rtcchannel.unpipe(this.httprequest.desktop.kvm);
1205
+ this.httprequest.desktop.kvm.unpipe(this.rtcchannel);
1206
+ }
1207
+
1208
+ if (this.desktop.kvm.connectionCount == 0) {
1209
+ // Display a toast message. This may not be supported on all platforms.
1210
+ // try { require('toaster').Toast('MeshCentral', 'Remote Desktop Control Ended.'); } catch (ex) { }
1211
+
1212
+ this.httprequest.desktop.kvm.end();
1213
+ }
1214
+ };
1215
+ if (this.httprequest.desktop.kvm.hasOwnProperty("connectionCount")) { this.httprequest.desktop.kvm.connectionCount++; } else { this.httprequest.desktop.kvm.connectionCount = 1; }
1216
+
1217
+ if ((this.httprequest.rights == 0xFFFFFFFF) || (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) != 0) && ((this.httprequest.rights & MESHRIGHT_REMOTEVIEW) == 0))) {
1218
+ // If we have remote control rights, pipe the KVM input
1219
+ this.pipe(this.httprequest.desktop.kvm, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text. Pipe the Browser --> KVM input.
1220
+ } else {
1221
+ // We need to only pipe non-mouse & non-keyboard inputs.
1222
+ //sendConsoleText('Warning: No Remote Desktop Input Rights.');
1223
+ // TODO!!!
1224
+ }
1225
+
1226
+ // Perform notification if needed. Toast messages may not be supported on all platforms.
1227
+ if (this.httprequest.consent && (this.httprequest.consent & 8))
1228
+ {
1229
+ // User Consent Prompt is required
1230
+ // Send a console message back using the console channel, "\n" is supported.
1231
+ this.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: 'Waiting for user to grant access...' }));
1232
+ var pr = require('message-box').create('MeshCentral', this.httprequest.username + ' requesting KVM Access. Grant access?', 10);
1233
+ pr.ws = this;
1234
+ this.pause();
1235
+
1236
+ pr.then(
1237
+ function ()
1238
+ {
1239
+ // Success
1240
+ MeshServerLog('Starting remote desktop after local user accepted (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1241
+ this.ws.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: null }));
1242
+ if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 1)) {
1243
+ // User Notifications is required
1244
+ try { require('toaster').Toast('MeshCentral', this.ws.httprequest.username + ' started a remote desktop session.'); } catch (ex) { }
1245
+ }
1246
+ this.ws.httprequest.desktop.kvm.pipe(this.ws, { dataTypeSkip: 1 });
1247
+ this.ws.resume();
1248
+ },
1249
+ function (e)
1250
+ {
1251
+ // User Consent Denied/Failed
1252
+ MeshServerLog('Failed to start remote desktop after local user rejected (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1253
+ this.ws.end(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString() }));
1254
+ });
1255
+ }
1256
+ else
1257
+ {
1258
+ // User Consent Prompt is not required
1259
+ if (this.httprequest.consent && (this.httprequest.consent & 1)) {
1260
+ // User Notifications is required
1261
+ MeshServerLog('Started remote desktop with toast notification (' + this.httprequest.remoteaddr + ')', this.httprequest);
1262
+ try { require('toaster').Toast('MeshCentral', this.httprequest.username + ' started a remote desktop session.'); } catch (ex) { }
1263
+ } else {
1264
+ MeshServerLog('Started remote desktop without notification (' + this.httprequest.remoteaddr + ')', this.httprequest);
1265
+ }
1266
+ this.httprequest.desktop.kvm.pipe(this, { dataTypeSkip: 1 });
1267
+ }
1268
+
1269
+ this.removeAllListeners('data');
1270
+ this.on('data', onTunnelControlData);
1271
+ //this.write('MeshCore KVM Hello!1');
1272
+
1273
+ } else if (this.httprequest.protocol == 5) {
1274
+
1275
+ // Check user access rights for files
1276
+ if (((this.httprequest.rights & MESHRIGHT_REMOTECONTROL) == 0) || ((this.httprequest.rights != 0xFFFFFFFF) && ((this.httprequest.rights & MESHRIGHT_NOFILES) != 0))) {
1277
+ // Disengage this tunnel, user does not have the rights to do this!!
1278
+ this.httprequest.protocol = 999999;
1279
+ this.httprequest.s.end();
1280
+ sendConsoleText('Error: No files control rights.');
1281
+ return;
1282
+ }
1283
+
1284
+ // Perform notification if needed. Toast messages may not be supported on all platforms.
1285
+ if (this.httprequest.consent && (this.httprequest.consent & 32))
1286
+ {
1287
+ // User Consent Prompt is required
1288
+ // Send a console message back using the console channel, "\n" is supported.
1289
+ this.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: 'Waiting for user to grant access...' }));
1290
+ var pr = require('message-box').create('MeshCentral', this.httprequest.username + ' requesting remote file access. Grant access?', 10);
1291
+ pr.ws = this;
1292
+ this.pause();
1293
+
1294
+ pr.then(
1295
+ function () {
1296
+ // Success
1297
+ MeshServerLog('Starting remote files after local user accepted (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1298
+ this.ws.write(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: null }));
1299
+ if (this.ws.httprequest.consent && (this.ws.httprequest.consent & 4)) {
1300
+ // User Notifications is required
1301
+ try { require('toaster').Toast('MeshCentral', this.ws.httprequest.username + ' started a remote file session.'); } catch (ex) { }
1302
+ }
1303
+ this.ws.resume();
1304
+ },
1305
+ function (e) {
1306
+ // User Consent Denied/Failed
1307
+ MeshServerLog('Failed to start remote files after local user rejected (' + this.ws.httprequest.remoteaddr + ')', this.ws.httprequest);
1308
+ this.ws.end(JSON.stringify({ ctrlChannel: '102938', type: 'console', msg: e.toString() }));
1309
+ });
1310
+ } else {
1311
+ // User Consent Prompt is not required
1312
+ if (this.httprequest.consent && (this.httprequest.consent & 4)) {
1313
+ // User Notifications is required
1314
+ MeshServerLog('Started remote files with toast notification (' + this.httprequest.remoteaddr + ')', this.httprequest);
1315
+ try { require('toaster').Toast('MeshCentral', this.httprequest.username + ' started a remote file session.'); } catch (ex) { }
1316
+ } else {
1317
+ MeshServerLog('Started remote files without notification (' + this.httprequest.remoteaddr + ')', this.httprequest);
1318
+ }
1319
+ this.resume();
1320
+ }
1321
+
1322
+ // Setup files
1323
+ // NOP
1324
+ }
1325
+ } else if (this.httprequest.protocol == 1) {
1326
+ // Send data into terminal stdin
1327
+ //this.write(data); // Echo back the keys (Does not seem to be a good idea)
1328
+ } else if (this.httprequest.protocol == 2) {
1329
+ // Send data into remote desktop
1330
+ if (this.httprequest.desktop.state == 0) {
1331
+ this.write(new Buffer(String.fromCharCode(0x11, 0xFE, 0x00, 0x00, 0x4D, 0x45, 0x53, 0x48, 0x00, 0x00, 0x00, 0x00, 0x02)));
1332
+ this.httprequest.desktop.state = 1;
1333
+ } else {
1334
+ this.httprequest.desktop.write(data);
1335
+ }
1336
+ } else if (this.httprequest.protocol == 5) {
1337
+ // Process files commands
1338
+ var cmd = null;
1339
+ try { cmd = JSON.parse(data); } catch (e) { };
1340
+ if (cmd == null) { return; }
1341
+ if ((cmd.ctrlChannel == '102938') || ((cmd.type == 'offer') && (cmd.sdp != null))) { onTunnelControlData(cmd, this); return; } // If this is control data, handle it now.
1342
+ if (cmd.action == undefined) { return; }
1343
+ //sendConsoleText('CMD: ' + JSON.stringify(cmd));
1344
+
1345
+ if ((cmd.path != null) && (process.platform != 'win32') && (cmd.path[0] != '/')) { cmd.path = '/' + cmd.path; } // Add '/' to paths on non-windows
1346
+ //console.log(objToString(cmd, 0, ' '));
1347
+ switch (cmd.action) {
1348
+ case 'ls': {
1349
+ /*
1350
+ // Close the watcher if required
1351
+ var samepath = ((this.httprequest.watcher != undefined) && (cmd.path == this.httprequest.watcher.path));
1352
+ if ((this.httprequest.watcher != undefined) && (samepath == false)) {
1353
+ //console.log('Closing watcher: ' + this.httprequest.watcher.path);
1354
+ //this.httprequest.watcher.close(); // TODO: This line causes the agent to crash!!!!
1355
+ delete this.httprequest.watcher;
1356
+ }
1357
+ */
1358
+
1359
+ // Send the folder content to the browser
1360
+ var response = getDirectoryInfo(cmd.path);
1361
+ if (cmd.reqid != undefined) { response.reqid = cmd.reqid; }
1362
+ this.write(new Buffer(JSON.stringify(response)));
1363
+
1364
+ /*
1365
+ // Start the directory watcher
1366
+ if ((cmd.path != '') && (samepath == false)) {
1367
+ var watcher = fs.watch(cmd.path, onFileWatcher);
1368
+ watcher.tunnel = this.httprequest;
1369
+ watcher.path = cmd.path;
1370
+ this.httprequest.watcher = watcher;
1371
+ //console.log('Starting watcher: ' + this.httprequest.watcher.path);
1372
+ }
1373
+ */
1374
+ break;
1375
+ }
1376
+ case 'mkdir': {
1377
+ // Create a new empty folder
1378
+ fs.mkdirSync(cmd.path);
1379
+ MeshServerLog('Create folder: \"' + cmd.path + '\"', this.httprequest);
1380
+ break;
1381
+ }
1382
+ case 'rm': {
1383
+ // Delete, possibly recursive delete
1384
+ for (var i in cmd.delfiles) {
1385
+ var p = obj.path.join(cmd.path, cmd.delfiles[i]), delcount = 0;
1386
+ try { delcount = deleteFolderRecursive(p, cmd.rec); } catch (e) { }
1387
+ if ((delcount == 1) && !cmd.rec) {
1388
+ MeshServerLog('Delete: \"' + p + '\"', this.httprequest);
1389
+ } else {
1390
+ MeshServerLog((cmd.rec ? 'Delete recursive: \"' : 'Delete: \"') + p + '\", ' + delcount + ' element(s) removed', this.httprequest);
1391
+ }
1392
+ }
1393
+ break;
1394
+ }
1395
+ case 'rename': {
1396
+ // Rename a file or folder
1397
+ var oldfullpath = obj.path.join(cmd.path, cmd.oldname);
1398
+ var newfullpath = obj.path.join(cmd.path, cmd.newname);
1399
+ MeshServerLog('Rename: \"' + oldfullpath + '\" to \"' + cmd.newname + '\"', this.httprequest);
1400
+ try { fs.renameSync(oldfullpath, newfullpath); } catch (e) { console.log(e); }
1401
+ break;
1402
+ }
1403
+ case 'download': {
1404
+ // Download a file
1405
+ var sendNextBlock = 0;
1406
+ if (cmd.sub == 'start') { // Setup the download
1407
+ MeshServerLog('Download: \"' + cmd.path + '\"', this.httprequest);
1408
+ if (this.filedownload != null) { this.write({ action: 'download', sub: 'cancel', id: this.filedownload.id }); delete this.filedownload; }
1409
+ this.filedownload = { id: cmd.id, path: cmd.path, ptr: 0 }
1410
+ try { this.filedownload.f = fs.openSync(this.filedownload.path, 'rbN'); } catch (e) { this.write({ action: 'download', sub: 'cancel', id: this.filedownload.id }); delete this.filedownload; }
1411
+ if (this.filedownload) { this.write({ action: 'download', sub: 'start', id: cmd.id }); }
1412
+ } else if ((this.filedownload != null) && (cmd.id == this.filedownload.id)) { // Download commands
1413
+ if (cmd.sub == 'startack') { sendNextBlock = 8; } else if (cmd.sub == 'stop') { delete this.filedownload; } else if (cmd.sub == 'ack') { sendNextBlock = 1; }
1414
+ }
1415
+ // Send the next download block(s)
1416
+ while (sendNextBlock > 0) {
1417
+ sendNextBlock--;
1418
+ var buf = new Buffer(4096);
1419
+ var len = fs.readSync(this.filedownload.f, buf, 4, 4092, null);
1420
+ this.filedownload.ptr += len;
1421
+ if (len < 4092) { buf.writeInt32BE(0x01000001, 0); fs.closeSync(this.filedownload.f); delete this.filedownload; sendNextBlock = 0; } else { buf.writeInt32BE(0x01000000, 0); }
1422
+ this.write(buf.slice(0, len + 4)); // Write as binary
1423
+ }
1424
+ break;
1425
+ }
1426
+ /*
1427
+ case 'download': {
1428
+ // Packet download of a file, agent to browser
1429
+ if (cmd.path == undefined) break;
1430
+ var filepath = cmd.name ? obj.path.join(cmd.path, cmd.name) : cmd.path;
1431
+ //console.log('Download: ' + filepath);
1432
+ try { this.httprequest.downloadFile = fs.openSync(filepath, 'rbN'); } catch (e) { this.write(new Buffer(JSON.stringify({ action: 'downloaderror', reqid: cmd.reqid }))); break; }
1433
+ this.httprequest.downloadFileId = cmd.reqid;
1434
+ this.httprequest.downloadFilePtr = 0;
1435
+ if (this.httprequest.downloadFile) { this.write(new Buffer(JSON.stringify({ action: 'downloadstart', reqid: this.httprequest.downloadFileId }))); }
1436
+ break;
1437
+ }
1438
+ case 'download2': {
1439
+ // Stream download of a file, agent to browser
1440
+ if (cmd.path == undefined) break;
1441
+ var filepath = cmd.name ? obj.path.join(cmd.path, cmd.name) : cmd.path;
1442
+ try { this.httprequest.downloadFile = fs.createReadStream(filepath, { flags: 'rbN' }); } catch (e) { console.log(e); }
1443
+ this.httprequest.downloadFile.pipe(this);
1444
+ this.httprequest.downloadFile.end = function () { }
1445
+ break;
1446
+ }
1447
+ */
1448
+ case 'upload': {
1449
+ // Upload a file, browser to agent
1450
+ if (this.httprequest.uploadFile != undefined) { fs.closeSync(this.httprequest.uploadFile); this.httprequest.uploadFile = undefined; }
1451
+ if (cmd.path == undefined) break;
1452
+ var filepath = cmd.name ? obj.path.join(cmd.path, cmd.name) : cmd.path;
1453
+ MeshServerLog('Upload: \"' + filepath + '\"', this.httprequest);
1454
+ try { this.httprequest.uploadFile = fs.openSync(filepath, 'wbN'); } catch (e) { this.write(new Buffer(JSON.stringify({ action: 'uploaderror', reqid: cmd.reqid }))); break; }
1455
+ this.httprequest.uploadFileid = cmd.reqid;
1456
+ if (this.httprequest.uploadFile) { this.write(new Buffer(JSON.stringify({ action: 'uploadstart', reqid: this.httprequest.uploadFileid }))); }
1457
+ break;
1458
+ }
1459
+ case 'copy': {
1460
+ // Copy a bunch of files from scpath to dspath
1461
+ for (var i in cmd.names) {
1462
+ var sc = obj.path.join(cmd.scpath, cmd.names[i]), ds = obj.path.join(cmd.dspath, cmd.names[i]);
1463
+ MeshServerLog('Copy: \"' + sc + '\" to \"' + ds + '\"', this.httprequest);
1464
+ if (sc != ds) { try { fs.copyFileSync(sc, ds); } catch (e) { } }
1465
+ }
1466
+ break;
1467
+ }
1468
+ case 'move': {
1469
+ // Move a bunch of files from scpath to dspath
1470
+ for (var i in cmd.names) {
1471
+ var sc = obj.path.join(cmd.scpath, cmd.names[i]), ds = obj.path.join(cmd.dspath, cmd.names[i]);
1472
+ MeshServerLog('Move: \"' + sc + '\" to \"' + ds + '\"', this.httprequest);
1473
+ if (sc != ds) { try { fs.copyFileSync(sc, ds); fs.unlinkSync(sc); } catch (e) { } }
1474
+ }
1475
+ break;
1476
+ }
1477
+ default:
1478
+ // Unknown action, ignore it.
1479
+ break;
1480
+ }
1481
+ }
1482
+ //sendConsoleText("Got tunnel #" + this.httprequest.index + " data: " + data, this.httprequest.sessionid);
1483
+ }
1484
+ }
1485
+
1486
+ // Delete a directory with a files and directories within it
1487
+ function deleteFolderRecursive(path, rec) {
1488
+ var count = 0;
1489
+ if (fs.existsSync(path)) {
1490
+ if (rec == true) {
1491
+ fs.readdirSync(obj.path.join(path, '*')).forEach(function (file, index) {
1492
+ var curPath = obj.path.join(path, file);
1493
+ if (fs.statSync(curPath).isDirectory()) { // recurse
1494
+ count += deleteFolderRecursive(curPath, true);
1495
+ } else { // delete file
1496
+ fs.unlinkSync(curPath);
1497
+ count++;
1498
+ }
1499
+ });
1500
+ }
1501
+ fs.unlinkSync(path);
1502
+ count++;
1503
+ }
1504
+ return count;
1505
+ };
1506
+
1507
+ // Called when receiving control data on WebRTC
1508
+ function onTunnelWebRTCControlData(data) {
1509
+ if (typeof data != 'string') return;
1510
+ var obj;
1511
+ try { obj = JSON.parse(data); } catch (e) { sendConsoleText('Invalid control JSON on WebRTC: ' + data); return; }
1512
+ if (obj.type == 'close') {
1513
+ //sendConsoleText('Tunnel #' + this.xrtc.websocket.tunnel.index + ' WebRTC control close');
1514
+ try { this.close(); } catch (e) { }
1515
+ try { this.xrtc.close(); } catch (e) { }
1516
+ }
1517
+ }
1518
+
1519
+ // Called when receiving control data on websocket
1520
+ function onTunnelControlData(data, ws) {
1521
+ var obj;
1522
+ if (ws == null) { ws = this; }
1523
+ if (typeof data == 'string') { try { obj = JSON.parse(data); } catch (e) { sendConsoleText('Invalid control JSON: ' + data); return; } }
1524
+ else if (typeof data == 'object') { obj = data; } else { return; }
1525
+ //sendConsoleText('onTunnelControlData(' + ws.httprequest.protocol + '): ' + JSON.stringify(data));
1526
+ //console.log('onTunnelControlData: ' + JSON.stringify(data));
1527
+
1528
+ if (obj.action) {
1529
+ switch (obj.action) {
1530
+ case 'lock': {
1531
+ // Lock the current user out of the desktop
1532
+ try {
1533
+ if (process.platform == 'win32') {
1534
+ MeshServerLog('Locking remote user out of desktop', ws.httprequest);
1535
+ var child = require('child_process');
1536
+ child.execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/c', 'RunDll32.exe user32.dll,LockWorkStation'], { type: 1 });
1537
+ }
1538
+ } catch (e) { }
1539
+ break;
1540
+ }
1541
+ default:
1542
+ // Unknown action, ignore it.
1543
+ break;
1544
+ }
1545
+ return;
1546
+ }
1547
+
1548
+ if (obj.type == 'close') {
1549
+ // We received the close on the websocket
1550
+ //sendConsoleText('Tunnel #' + ws.tunnel.index + ' WebSocket control close');
1551
+ try { ws.close(); } catch (e) { }
1552
+ } else if (obj.type == 'webrtc0') { // Browser indicates we can start WebRTC switch-over.
1553
+ if (ws.httprequest.protocol == 1) { // Terminal
1554
+ // This is a terminal data stream, unpipe the terminal now and indicate to the other side that terminal data will no longer be received over WebSocket
1555
+ if (process.platform == 'win32')
1556
+ {
1557
+ ws.httprequest._term.unpipe(ws);
1558
+ }
1559
+ else
1560
+ {
1561
+ ws.httprequest.process.stdout.unpipe(ws);
1562
+ ws.httprequest.process.stderr.unpipe(ws);
1563
+ }
1564
+ } else if (ws.httprequest.protocol == 2) { // Desktop
1565
+ // This is a KVM data stream, unpipe the KVM now and indicate to the other side that KVM data will no longer be received over WebSocket
1566
+ ws.httprequest.desktop.kvm.unpipe(ws);
1567
+ } else {
1568
+ // Switch things around so all WebRTC data goes to onTunnelData().
1569
+ ws.rtcchannel.httprequest = ws.httprequest;
1570
+ ws.rtcchannel.removeAllListeners('data');
1571
+ ws.rtcchannel.on('data', onTunnelData);
1572
+ }
1573
+ ws.write("{\"ctrlChannel\":\"102938\",\"type\":\"webrtc1\"}"); // End of data marker
1574
+ } else if (obj.type == 'webrtc1') {
1575
+ if ((ws.httprequest.protocol == 1) || (ws.httprequest.protocol == 6)) { // Terminal
1576
+ // Switch the user input from websocket to webrtc at this point.
1577
+ if (process.platform == 'win32')
1578
+ {
1579
+ ws.unpipe(ws.httprequest._term);
1580
+ ws.rtcchannel.pipe(ws.httprequest._term, { dataTypeSkip: 1 }); // 0 = Binary, 1 = Text.
1581
+ }
1582
+ else
1583
+ {
1584
+ ws.unpipe(ws.httprequest.process.stdin);
1585
+ ws.rtcchannel.pipe(ws.httprequest.process.stdin, { dataTypeSkip: 1 }); // 0 = Binary, 1 = Text.
1586
+ }
1587
+ ws.resume(); // Resume the websocket to keep receiving control data
1588
+ } else if (ws.httprequest.protocol == 2) { // Desktop
1589
+ // Switch the user input from websocket to webrtc at this point.
1590
+ ws.unpipe(ws.httprequest.desktop.kvm);
1591
+ try { ws.webrtc.rtcchannel.pipe(ws.httprequest.desktop.kvm, { dataTypeSkip: 1, end: false }); } catch (e) { sendConsoleText('EX2'); } // 0 = Binary, 1 = Text.
1592
+ ws.resume(); // Resume the websocket to keep receiving control data
1593
+ }
1594
+ ws.write("{\"ctrlChannel\":\"102938\",\"type\":\"webrtc2\"}"); // Indicates we will no longer get any data on websocket, switching to WebRTC at this point.
1595
+ } else if (obj.type == 'webrtc2') {
1596
+ // Other side received websocket end of data marker, start sending data on WebRTC channel
1597
+ if ((ws.httprequest.protocol == 1) || (ws.httprequest.protocol == 6)) { // Terminal
1598
+ if (process.platform == 'win32')
1599
+ {
1600
+ ws.httprequest._term.pipe(ws.webrtc.rtcchannel, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text.
1601
+ }
1602
+ else
1603
+ {
1604
+ ws.httprequest.process.stdout.pipe(ws.webrtc.rtcchannel, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text.
1605
+ ws.httprequest.process.stderr.pipe(ws.webrtc.rtcchannel, { dataTypeSkip: 1, end: false }); // 0 = Binary, 1 = Text.
1606
+ }
1607
+ } else if (ws.httprequest.protocol == 2) { // Desktop
1608
+ ws.httprequest.desktop.kvm.pipe(ws.webrtc.rtcchannel, { dataTypeSkip: 1 }); // 0 = Binary, 1 = Text.
1609
+ }
1610
+ } else if (obj.type == 'offer') {
1611
+ // This is a WebRTC offer.
1612
+ if ((ws.httprequest.protocol == 1) || (ws.httprequest.protocol == 6)) return; // TODO: Terminal is currently broken with WebRTC. Reject WebRTC upgrade for now.
1613
+ ws.webrtc = rtc.createConnection();
1614
+ ws.webrtc.websocket = ws;
1615
+ ws.webrtc.on('connected', function () { /*sendConsoleText('Tunnel #' + this.websocket.tunnel.index + ' WebRTC connected');*/ });
1616
+ ws.webrtc.on('disconnected', function () { /*sendConsoleText('Tunnel #' + this.websocket.tunnel.index + ' WebRTC disconnected');*/ });
1617
+ ws.webrtc.on('dataChannel', function (rtcchannel) {
1618
+ //sendConsoleText('WebRTC Datachannel open, protocol: ' + this.websocket.httprequest.protocol);
1619
+ rtcchannel.xrtc = this;
1620
+ rtcchannel.websocket = this.websocket;
1621
+ this.rtcchannel = rtcchannel;
1622
+ this.websocket.rtcchannel = rtcchannel;
1623
+ this.websocket.rtcchannel.on('data', onTunnelWebRTCControlData);
1624
+ this.websocket.rtcchannel.on('end', function () {
1625
+ // The WebRTC channel closed, unpipe the KVM now. This is also done when the web socket closes.
1626
+ //sendConsoleText('Tunnel #' + this.websocket.tunnel.index + ' WebRTC data channel closed');
1627
+ if (this.websocket.desktop && this.websocket.desktop.kvm) {
1628
+ this.unpipe(this.websocket.desktop.kvm);
1629
+ this.websocket.httprequest.desktop.kvm.unpipe(this);
1630
+ }
1631
+ });
1632
+ this.websocket.write("{\"ctrlChannel\":\"102938\",\"type\":\"webrtc0\"}"); // Indicate we are ready for WebRTC switch-over.
1633
+ });
1634
+ var sdp = null;
1635
+ try { sdp = ws.webrtc.setOffer(obj.sdp); } catch (ex) { }
1636
+ if (sdp != null) { ws.write({ type: 'answer', ctrlChannel: '102938', sdp: sdp }); }
1637
+ }
1638
+ }
1639
+
1640
+ // Console state
1641
+ var consoleWebSockets = {};
1642
+ var consoleHttpRequest = null;
1643
+
1644
+ // Console HTTP response
1645
+ function consoleHttpResponse(response) {
1646
+ response.data = function (data) { sendConsoleText(rstr2hex(buf2rstr(data)), this.sessionid); consoleHttpRequest = null; }
1647
+ response.close = function () { sendConsoleText('httprequest.response.close', this.sessionid); consoleHttpRequest = null; }
1648
+ };
1649
+
1650
+ // Open a web browser to a specified URL on current user's desktop
1651
+ function openUserDesktopUrl(url) {
1652
+ var child = null;
1653
+ try {
1654
+ switch (process.platform) {
1655
+ case 'win32':
1656
+ var user = require('user-sessions').getUsername(require('user-sessions').consoleUid());
1657
+ child = require('child_process').execFile(process.env['windir'] + '\\system32\\cmd.exe', ['cmd']);
1658
+ child.stderr.on('data', function () { });
1659
+ child.stdout.on('data', function () { });
1660
+ child.stdin.write('SCHTASKS /CREATE /F /TN MeshChatTask /SC ONCE /ST 00:00 /RU ' + user + ' /TR "' + process.env['windir'] + '\\system32\\cmd.exe /C START ' + url + '"\r\n');
1661
+ child.stdin.write('SCHTASKS /RUN /TN MeshChatTask\r\n');
1662
+ child.stdin.write('SCHTASKS /DELETE /F /TN MeshChatTask\r\n');
1663
+ child.stdin.write('exit\r\n');
1664
+ child.waitExit();
1665
+ break;
1666
+ case 'linux':
1667
+ child = require('child_process').execFile('/usr/bin/xdg-open', ['xdg-open', url], { uid: require('user-sessions').consoleUid() });
1668
+ break;
1669
+ case 'darwin':
1670
+ child = require('child_process').execFile('/usr/bin/open', ['open', url], { uid: require('user-sessions').consoleUid() });
1671
+ break;
1672
+ default:
1673
+ // Unknown platform, ignore this command.
1674
+ break;
1675
+ }
1676
+ } catch (ex) { }
1677
+ return child;
1678
+ }
1679
+
1680
+ // Process a mesh agent console command
1681
+ function processConsoleCommand(cmd, args, rights, sessionid) {
1682
+ try {
1683
+ var response = null;
1684
+ switch (cmd) {
1685
+ case 'help': { // Displays available commands
1686
+ response = 'Available commands: help, info, osinfo, args, print, type, dbget, dbset, dbcompact, eval, parseuri, httpget,\r\nwslist, wsconnect, wssend, wsclose, notify, ls, ps, kill, amt, netinfo, location, power, wakeonlan, scanwifi,\r\nscanamt, setdebug, smbios, rawsmbios, toast, lock, users, sendcaps, openurl, amtreset, amtccm, amtacm,\r\namtdeactivate, amtpolicy, getscript, getclip, setclip, log, av, cpuinfo, sysinfo, apf.';
1687
+ break;
1688
+ }
1689
+ /*
1690
+ case 'border':
1691
+ {
1692
+ if ((args['_'].length == 1) && (args['_'][0] == 'on')) {
1693
+ if (meshCoreObj.users.length > 0) {
1694
+ obj.borderManager.Start(meshCoreObj.users[0]);
1695
+ response = 'Border blinking is on.';
1696
+ } else {
1697
+ response = 'Cannot turn on border blinking, no logged in users.';
1698
+ }
1699
+ } else if ((args['_'].length == 1) && (args['_'][0] == 'off')) {
1700
+ obj.borderManager.Stop();
1701
+ response = 'Border blinking is off.';
1702
+ } else {
1703
+ response = 'Proper usage: border "on|off"'; // Display correct command usage
1704
+ }
1705
+ }
1706
+ break;
1707
+ */
1708
+ case 'av':
1709
+ if (process.platform == 'win32') {
1710
+ response = JSON.stringify(require('win-info').av(), null, 1);
1711
+ } else {
1712
+ response = 'Not supported on the platform';
1713
+ }
1714
+ break;
1715
+ case 'log':
1716
+ if (args['_'].length != 1) { response = 'Proper usage: log "sample text"'; } else { MeshServerLog(args['_'][0]); response = 'ok'; }
1717
+ break;
1718
+ case 'getclip':
1719
+ if (require('MeshAgent').isService) {
1720
+ require('clipboard').dispatchRead().then(function (str) { sendConsoleText(str, sessionid); });
1721
+ } else {
1722
+ require("clipboard").read().then(function (str) { sendConsoleText(str, sessionid); });
1723
+ }
1724
+ break;
1725
+ case 'setclip': {
1726
+ if (args['_'].length != 1) {
1727
+ response = 'Proper usage: setclip "sample text"';
1728
+ } else {
1729
+ if (require('MeshAgent').isService) {
1730
+ require('clipboard').dispatchWrite(args['_'][0]);
1731
+ response = 'Setting clipboard to: "' + args['_'][0] + '"';
1732
+ }
1733
+ else {
1734
+ require("clipboard")(args['_'][0]); response = 'Setting clipboard to: "' + args['_'][0] + '"';
1735
+ }
1736
+ }
1737
+ break;
1738
+ }
1739
+ case 'amtreset': {
1740
+ if (amt != null) { amt.reset(); response = 'Done.'; }
1741
+ break;
1742
+ }
1743
+ case 'amtlmsreset': {
1744
+ if (amt != null) { amt.lmsreset(); response = 'Done.'; }
1745
+ break;
1746
+ }
1747
+ case 'amtccm': {
1748
+ if (amt == null) { response = 'Intel AMT not supported.'; } else {
1749
+ if (args['_'].length != 1) { response = 'Proper usage: amtccm (adminPassword)'; } // Display usage
1750
+ else { amt.setPolicy({ type: 0 }); amt.activeToCCM(args['_'][0]); }
1751
+ }
1752
+ break;
1753
+ }
1754
+ case 'amtacm': {
1755
+ if (amt == null) { response = 'Intel AMT not supported.'; } else {
1756
+ amt.setPolicy({ type: 0 });
1757
+ amt.getAmtInfo(function (meinfo) { amt.activeToACM(meinfo); });
1758
+ }
1759
+ break;
1760
+ }
1761
+ case 'amtdeactivate': {
1762
+ if (amt == null) { response = 'Intel AMT not supported.'; } else { amt.setPolicy({ type: 0 }); amt.deactivateCCM(); }
1763
+ break;
1764
+ }
1765
+ case 'amtpolicy': {
1766
+ if (amtPolicy == null) {
1767
+ response = 'No Intel(R) AMT policy.';
1768
+ } else {
1769
+ response = JSON.stringify(amtPolicy);
1770
+ }
1771
+ break;
1772
+ }
1773
+ case 'openurl': {
1774
+ if (args['_'].length != 1) { response = 'Proper usage: openurl (url)'; } // Display usage
1775
+ else { if (openUserDesktopUrl(args['_'][0]) == null) { response = 'Failed.'; } else { response = 'Success.'; } }
1776
+ break;
1777
+ }
1778
+ case 'users': {
1779
+ if (meshCoreObj.users == null) { response = 'Active users are unknown.'; } else { response = 'Active Users: ' + meshCoreObj.users.join(', ') + '.'; }
1780
+ require('user-sessions').enumerateUsers().then(function (u) { for (var i in u) { sendConsoleText(u[i]); } });
1781
+ break;
1782
+ }
1783
+ case 'toast': {
1784
+ if (args['_'].length < 1) { response = 'Proper usage: toast "message"'; } else
1785
+ {
1786
+ require('toaster').Toast('MeshCentral', args['_'][0]).then(sendConsoleText, sendConsoleText);
1787
+ }
1788
+ break;
1789
+ }
1790
+ case 'setdebug': {
1791
+ if (args['_'].length < 1) { response = 'Proper usage: setdebug (target), 0 = Disabled, 1 = StdOut, 2 = This Console, * = All Consoles, 4 = WebLog, 8 = Logfile'; } // Display usage
1792
+ else { if (args['_'][0] == '*') { console.setDestination(2); } else { console.setDestination(parseInt(args['_'][0]), sessionid); } }
1793
+ break;
1794
+ }
1795
+ case 'ps': {
1796
+ processManager.getProcesses(function (plist) {
1797
+ var x = '';
1798
+ for (var i in plist) { x += i + ', ' + plist[i].cmd + ((plist[i].user) ? (', ' + plist[i].user):'') + '\r\n'; }
1799
+ sendConsoleText(x, sessionid);
1800
+ });
1801
+ break;
1802
+ }
1803
+ case 'kill': {
1804
+ if ((args['_'].length < 1)) {
1805
+ response = 'Proper usage: kill [pid]'; // Display correct command usage
1806
+ } else {
1807
+ process.kill(parseInt(args['_'][0]));
1808
+ response = 'Killed process ' + args['_'][0] + '.';
1809
+ }
1810
+ break;
1811
+ }
1812
+ case 'smbios': {
1813
+ if (SMBiosTables == null) { response = 'SMBios tables not available.'; } else { response = objToString(SMBiosTables, 0, ' ', true); }
1814
+ break;
1815
+ }
1816
+ case 'rawsmbios': {
1817
+ if (SMBiosTablesRaw == null) { response = 'SMBios tables not available.'; } else {
1818
+ response = '';
1819
+ for (var i in SMBiosTablesRaw) {
1820
+ var header = false;
1821
+ for (var j in SMBiosTablesRaw[i]) {
1822
+ if (SMBiosTablesRaw[i][j].length > 0) {
1823
+ if (header == false) { response += ('Table type #' + i + ((require('smbios').smTableTypes[i] == null) ? '' : (', ' + require('smbios').smTableTypes[i]))) + '\r\n'; header = true; }
1824
+ response += (' ' + SMBiosTablesRaw[i][j].toString('hex')) + '\r\n';
1825
+ }
1826
+ }
1827
+ }
1828
+ }
1829
+ break;
1830
+ }
1831
+ case 'dump':
1832
+ if (args['_'].length < 1)
1833
+ {
1834
+ response = 'Proper usage: dump [on/off/status]'; // Display correct command usage
1835
+ }
1836
+ else
1837
+ {
1838
+ switch(args['_'][0].toLowerCase())
1839
+ {
1840
+ case 'on':
1841
+ process.coreDumpLocation = process.platform == 'win32' ? process.execPath.replace('.exe', '.dmp') : (process.execPath + '.dmp');
1842
+ response = 'enabled';
1843
+ break;
1844
+ case 'off':
1845
+ process.coreDumpLocation = null;
1846
+ response = 'disabled';
1847
+ break;
1848
+ case 'status':
1849
+ if (process.coreDumpLocation)
1850
+ {
1851
+ response = 'Core Dump: [ENABLED' + (require('fs').existsSync(process.coreDumpLocation) ? (', (DMP file exists)]') : (']'));
1852
+ }
1853
+ else
1854
+ {
1855
+ response = 'Core Dump: [DISABLED]';
1856
+ }
1857
+ break;
1858
+ default:
1859
+ response = 'Proper usage: dump [on/off/status]'; // Display correct command usage
1860
+ break;
1861
+ }
1862
+ }
1863
+ break;
1864
+ case 'eval': { // Eval JavaScript
1865
+ if (args['_'].length < 1) {
1866
+ response = 'Proper usage: eval "JavaScript code"'; // Display correct command usage
1867
+ } else {
1868
+ response = JSON.stringify(mesh.eval(args['_'][0]));
1869
+ }
1870
+ break;
1871
+ }
1872
+ case 'uninstallagent':
1873
+ var agentName = process.platform == 'win32' ? 'Mesh Agent' : 'meshagent';
1874
+ if (!require('service-manager').manager.getService(agentName).isMe())
1875
+ {
1876
+ response = 'Uininstall failed, this instance is not the service instance';
1877
+ }
1878
+ else
1879
+ {
1880
+ try
1881
+ {
1882
+ diagnosticAgent_uninstall();
1883
+ }
1884
+ catch(x)
1885
+ {
1886
+ }
1887
+ var js = "require('service-manager').manager.getService('" + agentName + "').stop(); require('service-manager').manager.uninstallService('" + agentName + "'); process.exit();";
1888
+ this.child = require('child_process').execFile(process.execPath, [process.platform == 'win32' ? (process.execPath.split('\\').pop()) : (process.execPath.split('/').pop()), '-b64exec', Buffer.from(js).toString('base64')], { type: 4, detached: true });
1889
+ }
1890
+ break;
1891
+ case 'notify': { // Send a notification message to the mesh
1892
+ if (args['_'].length != 1) {
1893
+ response = 'Proper usage: notify "message" [--session]'; // Display correct command usage
1894
+ } else {
1895
+ var notification = { "action": "msg", "type": "notify", "value": args['_'][0], "tag": "console" };
1896
+ if (args.session) { notification.sessionid = sessionid; } // If "--session" is specified, notify only this session, if not, the server will notify the mesh
1897
+ mesh.SendCommand(notification); // no sessionid or userid specified, notification will go to the entire mesh
1898
+ response = 'ok';
1899
+ }
1900
+ break;
1901
+ }
1902
+ case 'cpuinfo': { // Return system information
1903
+ // CPU & memory utilization
1904
+ pr = require('sysinfo').cpuUtilization();
1905
+ pr.sessionid = sessionid;
1906
+ pr.then(function (data) {
1907
+ sendConsoleText(JSON.stringify({ cpu: data, memory: require('sysinfo').memUtilization() }, null, 1), this.sessionid);
1908
+ }, function (e) {
1909
+ sendConsoleText(e);
1910
+ });
1911
+ break;
1912
+ }
1913
+ case 'sysinfo': { // Return system information
1914
+ getSystemInformation(function (results, err) {
1915
+ if (results == null) { sendConsoleText(err, this.sessionid); } else { sendConsoleText(JSON.stringify(results, null, 1), this.sessionid); }
1916
+ });
1917
+ break;
1918
+ }
1919
+ case 'info': { // Return information about the agent and agent core module
1920
+ response = 'Current Core: ' + meshCoreObj.value + '.\r\nAgent Time: ' + Date() + '.\r\nUser Rights: 0x' + rights.toString(16) + '.\r\nPlatform: ' + process.platform + '.\r\nCapabilities: ' + meshCoreObj.caps + '.\r\nServer URL: ' + mesh.ServerUrl + '.';
1921
+ if (amt != null) { response += '\r\nBuilt-in LMS: ' + ['Disabled', 'Connecting..', 'Connected'][amt.lmsstate] + '.'; }
1922
+ if (meshCoreObj.osdesc) { response += '\r\nOS: ' + meshCoreObj.osdesc + '.'; }
1923
+ response += '\r\nModules: ' + addedModules.join(', ') + '.';
1924
+ response += '\r\nServer Connection: ' + mesh.isControlChannelConnected + ', State: ' + meshServerConnectionState + '.';
1925
+ response += '\r\lastMeInfo: ' + lastMeInfo + '.';
1926
+ var oldNodeId = db.Get('OldNodeId');
1927
+ if (oldNodeId != null) { response += '\r\nOldNodeID: ' + oldNodeId + '.'; }
1928
+ if (process.platform == 'linux' || process.platform == 'freebsd') { response += '\r\nX11 support: ' + require('monitor-info').kvm_x11_support + '.'; }
1929
+ break;
1930
+ }
1931
+ case 'osinfo': { // Return the operating system information
1932
+ var i = 1;
1933
+ if (args['_'].length > 0) { i = parseInt(args['_'][0]); if (i > 8) { i = 8; } response = 'Calling ' + i + ' times.'; }
1934
+ for (var j = 0; j < i; j++) {
1935
+ var pr = require('os').name();
1936
+ pr.sessionid = sessionid;
1937
+ pr.then(function (v) { sendConsoleText("OS: " + v, this.sessionid); });
1938
+ }
1939
+ break;
1940
+ }
1941
+ case 'sendcaps': { // Send capability flags to the server
1942
+ if (args['_'].length == 0) {
1943
+ response = 'Proper usage: sendcaps (number)'; // Display correct command usage
1944
+ } else {
1945
+ meshCoreObj.caps = parseInt(args['_'][0]);
1946
+ mesh.SendCommand(meshCoreObj);
1947
+ response = JSON.stringify(meshCoreObj);
1948
+ }
1949
+ break;
1950
+ }
1951
+ case 'sendosdesc': { // Send OS description
1952
+ if (args['_'].length > 0) {
1953
+ meshCoreObj.osdesc = args['_'][0];
1954
+ mesh.SendCommand(meshCoreObj);
1955
+ response = JSON.stringify(meshCoreObj);
1956
+ } else {
1957
+ response = 'Proper usage: sendosdesc [os description]'; // Display correct command usage
1958
+ }
1959
+ break;
1960
+ }
1961
+ case 'args': { // Displays parsed command arguments
1962
+ response = 'args ' + objToString(args, 0, ' ', true);
1963
+ break;
1964
+ }
1965
+ case 'print': { // Print a message on the mesh agent console, does nothing when running in the background
1966
+ var r = [];
1967
+ for (var i in args['_']) { r.push(args['_'][i]); }
1968
+ console.log(r.join(' '));
1969
+ response = 'Message printed on agent console.';
1970
+ break;
1971
+ }
1972
+ case 'type': { // Returns the content of a file
1973
+ if (args['_'].length == 0) {
1974
+ response = 'Proper usage: type (filepath) [maxlength]'; // Display correct command usage
1975
+ } else {
1976
+ var max = 4096;
1977
+ if ((args['_'].length > 1) && (typeof args['_'][1] == 'number')) { max = args['_'][1]; }
1978
+ if (max > 4096) max = 4096;
1979
+ var buf = Buffer.alloc(max), fd = fs.openSync(args['_'][0], "r"), r = fs.readSync(fd, buf, 0, max); // Read the file content
1980
+ response = buf.toString();
1981
+ var i = response.indexOf('\n');
1982
+ if ((i > 0) && (response[i - 1] != '\r')) { response = response.split('\n').join('\r\n'); }
1983
+ if (r == max) response += '...';
1984
+ fs.closeSync(fd);
1985
+ }
1986
+ break;
1987
+ }
1988
+ case 'dbkeys': { // Return all data store keys
1989
+ response = JSON.stringify(db.Keys);
1990
+ break;
1991
+ }
1992
+ case 'dbget': { // Return the data store value for a given key
1993
+ if (db == null) { response = 'Database not accessible.'; break; }
1994
+ if (args['_'].length != 1) {
1995
+ response = 'Proper usage: dbget (key)'; // Display the value for a given database key
1996
+ } else {
1997
+ response = db.Get(args['_'][0]);
1998
+ }
1999
+ break;
2000
+ }
2001
+ case 'dbset': { // Set a data store key and value pair
2002
+ if (db == null) { response = 'Database not accessible.'; break; }
2003
+ if (args['_'].length != 2) {
2004
+ response = 'Proper usage: dbset (key) (value)'; // Set a database key
2005
+ } else {
2006
+ var r = db.Put(args['_'][0], args['_'][1]);
2007
+ response = 'Key set: ' + r;
2008
+ }
2009
+ break;
2010
+ }
2011
+ case 'dbcompact': { // Compact the data store
2012
+ if (db == null) { response = 'Database not accessible.'; break; }
2013
+ var r = db.Compact();
2014
+ response = 'Database compacted: ' + r;
2015
+ break;
2016
+ }
2017
+ case 'httpget': {
2018
+ if (consoleHttpRequest != null) {
2019
+ response = 'HTTP operation already in progress.';
2020
+ } else {
2021
+ if (args['_'].length != 1) {
2022
+ response = 'Proper usage: httpget (url)';
2023
+ } else {
2024
+ var options = http.parseUri(args['_'][0]);
2025
+ options.method = 'GET';
2026
+ if (options == null) {
2027
+ response = 'Invalid url.';
2028
+ } else {
2029
+ try { consoleHttpRequest = http.request(options, consoleHttpResponse); } catch (e) { response = 'Invalid HTTP GET request'; }
2030
+ consoleHttpRequest.sessionid = sessionid;
2031
+ if (consoleHttpRequest != null) {
2032
+ consoleHttpRequest.end();
2033
+ response = 'HTTPGET ' + options.protocol + '//' + options.host + ':' + options.port + options.path;
2034
+ }
2035
+ }
2036
+ }
2037
+ }
2038
+ break;
2039
+ }
2040
+ case 'wslist': { // List all web sockets
2041
+ response = '';
2042
+ for (var i in consoleWebSockets) {
2043
+ var httprequest = consoleWebSockets[i];
2044
+ response += 'Websocket #' + i + ', ' + httprequest.url + '\r\n';
2045
+ }
2046
+ if (response == '') { response = 'no websocket sessions.'; }
2047
+ break;
2048
+ }
2049
+ case 'wsconnect': { // Setup a web socket
2050
+ if (args['_'].length == 0) {
2051
+ response = 'Proper usage: wsconnect (url)\r\nFor example: wsconnect wss://localhost:443/meshrelay.ashx?id=abc'; // Display correct command usage
2052
+ } else {
2053
+ var httprequest = null;
2054
+ try {
2055
+ var options = http.parseUri(args['_'][0]);
2056
+ options.rejectUnauthorized = 0;
2057
+ httprequest = http.request(options);
2058
+ } catch (e) { response = 'Invalid HTTP websocket request'; }
2059
+ if (httprequest != null) {
2060
+ httprequest.upgrade = onWebSocketUpgrade;
2061
+ httprequest.on('error', function (e) { sendConsoleText('ERROR: ' + JSON.stringify(e)); });
2062
+
2063
+ var index = 1;
2064
+ while (consoleWebSockets[index]) { index++; }
2065
+ httprequest.sessionid = sessionid;
2066
+ httprequest.index = index;
2067
+ httprequest.url = args['_'][0];
2068
+ consoleWebSockets[index] = httprequest;
2069
+ response = 'New websocket session #' + index;
2070
+ }
2071
+ }
2072
+ break;
2073
+ }
2074
+ case 'wssend': { // Send data on a web socket
2075
+ if (args['_'].length == 0) {
2076
+ response = 'Proper usage: wssend (socketnumber)\r\n'; // Display correct command usage
2077
+ for (var i in consoleWebSockets) {
2078
+ var httprequest = consoleWebSockets[i];
2079
+ response += 'Websocket #' + i + ', ' + httprequest.url + '\r\n';
2080
+ }
2081
+ } else {
2082
+ var i = parseInt(args['_'][0]);
2083
+ var httprequest = consoleWebSockets[i];
2084
+ if (httprequest != undefined) {
2085
+ httprequest.s.write(args['_'][1]);
2086
+ response = 'ok';
2087
+ } else {
2088
+ response = 'Invalid web socket number';
2089
+ }
2090
+ }
2091
+ break;
2092
+ }
2093
+ case 'wsclose': { // Close a websocket
2094
+ if (args['_'].length == 0) {
2095
+ response = 'Proper usage: wsclose (socketnumber)'; // Display correct command usage
2096
+ } else {
2097
+ var i = parseInt(args['_'][0]);
2098
+ var httprequest = consoleWebSockets[i];
2099
+ if (httprequest != undefined) {
2100
+ if (httprequest.s != null) { httprequest.s.end(); } else { httprequest.end(); }
2101
+ response = 'ok';
2102
+ } else {
2103
+ response = 'Invalid web socket number';
2104
+ }
2105
+ }
2106
+ break;
2107
+ }
2108
+ case 'tunnels': { // Show the list of current tunnels
2109
+ response = '';
2110
+ for (var i in tunnels) { response += 'Tunnel #' + i + ', ' + tunnels[i].url + '\r\n'; }
2111
+ if (response == '') { response = 'No websocket sessions.'; }
2112
+ break;
2113
+ }
2114
+ case 'ls': { // Show list of files and folders
2115
+ response = '';
2116
+ var xpath = '*';
2117
+ if (args['_'].length > 0) { xpath = obj.path.join(args['_'][0], '*'); }
2118
+ response = 'List of ' + xpath + '\r\n';
2119
+ var results = fs.readdirSync(xpath);
2120
+ for (var i = 0; i < results.length; ++i) {
2121
+ var stat = null, p = obj.path.join(args['_'][0], results[i]);
2122
+ try { stat = fs.statSync(p); } catch (e) { }
2123
+ if ((stat == null) || (stat == undefined)) {
2124
+ response += (results[i] + "\r\n");
2125
+ } else {
2126
+ response += (results[i] + " " + ((stat.isDirectory()) ? "(Folder)" : "(File)") + "\r\n");
2127
+ }
2128
+ }
2129
+ break;
2130
+ }
2131
+ case 'lsx': { // Show list of files and folders
2132
+ response = objToString(getDirectoryInfo(args['_'][0]), 0, ' ', true);
2133
+ break;
2134
+ }
2135
+ case 'lock': { // Lock the current user out of the desktop
2136
+ if (process.platform == 'win32') { var child = require('child_process'); child.execFile(process.env['windir'] + '\\system32\\cmd.exe', ['/c', 'RunDll32.exe user32.dll,LockWorkStation'], { type: 1 }); response = 'Ok'; }
2137
+ else { response = 'Not supported on the platform'; }
2138
+ break;
2139
+ }
2140
+ case 'amt': { // Show Intel AMT status
2141
+ if (amt != null) {
2142
+ amt.getAmtInfo(function (state) {
2143
+ var resp = 'Intel AMT not detected.';
2144
+ if (state != null) { resp = objToString(state, 0, ' ', true); }
2145
+ sendConsoleText(resp, sessionid);
2146
+ });
2147
+ } else {
2148
+ response = 'Intel AMT not detected.';
2149
+ }
2150
+ break;
2151
+ }
2152
+ case 'netinfo': { // Show network interface information
2153
+ //response = objToString(mesh.NetInfo, 0, ' ');
2154
+ var interfaces = require('os').networkInterfaces();
2155
+ response = objToString(interfaces, 0, ' ', true);
2156
+ break;
2157
+ }
2158
+ case 'netinfo2': { // Show network interface information
2159
+ response = objToString(mesh.NetInfo, 0, ' ', true);
2160
+ break;
2161
+ }
2162
+ case 'wakeonlan': { // Send wake-on-lan
2163
+ if ((args['_'].length != 1) || (args['_'][0].length != 12)) {
2164
+ response = 'Proper usage: wakeonlan [mac], for example "wakeonlan 010203040506".';
2165
+ } else {
2166
+ var count = sendWakeOnLan(args['_'][0]);
2167
+ response = 'Sent wake-on-lan on ' + count + ' interface(s).';
2168
+ }
2169
+ break;
2170
+ }
2171
+ case 'sendall': { // Send a message to all consoles on this mesh
2172
+ sendConsoleText(args['_'].join(' '));
2173
+ break;
2174
+ }
2175
+ case 'power': { // Execute a power action on this computer
2176
+ if (mesh.ExecPowerState == undefined) {
2177
+ response = 'Power command not supported on this agent.';
2178
+ } else {
2179
+ if ((args['_'].length == 0) || (typeof args['_'][0] != 'number')) {
2180
+ response = 'Proper usage: power (actionNumber), where actionNumber is:\r\n LOGOFF = 1\r\n SHUTDOWN = 2\r\n REBOOT = 3\r\n SLEEP = 4\r\n HIBERNATE = 5\r\n DISPLAYON = 6\r\n KEEPAWAKE = 7\r\n BEEP = 8\r\n CTRLALTDEL = 9\r\n VIBRATE = 13\r\n FLASH = 14'; // Display correct command usage
2181
+ } else {
2182
+ var r = mesh.ExecPowerState(args['_'][0], args['_'][1]);
2183
+ response = 'Power action executed with return code: ' + r + '.';
2184
+ }
2185
+ }
2186
+ break;
2187
+ }
2188
+ case 'location': {
2189
+ getIpLocationData(function (location) {
2190
+ sendConsoleText(objToString({ "action": "iplocation", "type": "publicip", "value": location }, 0, ' '));
2191
+ });
2192
+ break;
2193
+ }
2194
+ case 'parseuri': {
2195
+ response = JSON.stringify(http.parseUri(args['_'][0]));
2196
+ break;
2197
+ }
2198
+ case 'scanwifi': {
2199
+ if (wifiScanner != null) {
2200
+ var wifiPresent = wifiScanner.hasWireless;
2201
+ if (wifiPresent) { response = "Perfoming Wifi scan..."; wifiScanner.Scan(); } else { response = "Wifi absent."; }
2202
+ } else { response = "Wifi module not present."; }
2203
+ break;
2204
+ }
2205
+ case 'scanamt': {
2206
+ if (amtscanner != null) {
2207
+ if (args['_'].length != 1) {
2208
+ response = 'Usage examples:\r\n scanamt 1.2.3.4\r\n scanamt 1.2.3.0-1.2.3.255\r\n scanamt 1.2.3.0/24\r\n'; // Display correct command usage
2209
+ } else {
2210
+ response = 'Scanning: ' + args['_'][0] + '...';
2211
+ amtscanner.scan(args['_'][0], 2000, function (data) {
2212
+ if (data.length > 0) {
2213
+ var r = '', pstates = ['NotActivated', 'InActivation', 'Activated'];
2214
+ for (var i in data) {
2215
+ var x = data[i];
2216
+ if (r != '') { r += '\r\n'; }
2217
+ r += x.address + ' - Intel AMT v' + x.majorVersion + '.' + x.minorVersion;
2218
+ if (x.provisioningState < 3) { r += (', ' + pstates[x.provisioningState]); }
2219
+ if (x.provisioningState == 2) { r += (', ' + x.openPorts.join(', ')); }
2220
+ r += '.';
2221
+ }
2222
+ } else {
2223
+ r = 'No Intel AMT found.';
2224
+ }
2225
+ sendConsoleText(r);
2226
+ });
2227
+ }
2228
+ } else { response = "Intel AMT scanner module not present."; }
2229
+ break;
2230
+ }
2231
+ case 'modules': {
2232
+ response = JSON.stringify(addedModules);
2233
+ break;
2234
+ }
2235
+ case 'listservices': {
2236
+ var services = require('service-manager').manager.enumerateService();
2237
+ response = JSON.stringify(services, null, 1);
2238
+ break;
2239
+ }
2240
+ case 'getscript': {
2241
+ if (args['_'].length != 1) {
2242
+ response = 'Proper usage: getscript [scriptNumber].';
2243
+ } else {
2244
+ mesh.SendCommand({ "action": "getScript", "type": args['_'][0] });
2245
+ }
2246
+ break;
2247
+ }
2248
+ case 'diagnostic':
2249
+ {
2250
+ if (!mesh.DAIPC.listening)
2251
+ {
2252
+ response = 'Unable to bind to Diagnostic IPC, most likely because the path (' + process.cwd() + ') is not on a local file system';
2253
+ break;
2254
+ }
2255
+ var diag = diagnosticAgent_installCheck();
2256
+ if (diag)
2257
+ {
2258
+ if (args['_'].length == 1 && args['_'][0] == 'uninstall')
2259
+ {
2260
+ diagnosticAgent_uninstall();
2261
+ response = 'Diagnostic Agent uninstalled';
2262
+ }
2263
+ else
2264
+ {
2265
+ response = 'Diagnostic Agent installed at: ' + diag.appLocation();
2266
+ }
2267
+ }
2268
+ else
2269
+ {
2270
+ if (args['_'].length == 1 && args['_'][0] == 'install')
2271
+ {
2272
+ diag = diagnosticAgent_installCheck(true);
2273
+ if (diag)
2274
+ {
2275
+ response = 'Diagnostic agent was installed at: ' + diag.appLocation();
2276
+ }
2277
+ else
2278
+ {
2279
+ response = 'Diagnostic agent installation failed';
2280
+ }
2281
+ }
2282
+ else
2283
+ {
2284
+ response = 'Diagnostic Agent Not installed. To install: diagnostic install';
2285
+ }
2286
+ }
2287
+ if (diag) { diag.close(); diag = null; }
2288
+ break;
2289
+ }
2290
+ case 'apf': {
2291
+ if (meshCoreObj.intelamt!==null) {
2292
+ if (args['_'].length == 1) {
2293
+ if (args['_'][0] == 'on') {
2294
+ response = 'Starting APF tunnel'
2295
+ var apfarg = {
2296
+ mpsurl: mesh.ServerUrl.replace('agent.ashx','apf.ashx'),
2297
+ mpsuser: Buffer.from(mesh.ServerInfo.MeshID,'hex').toString('base64').substring(0,16),
2298
+ mpspass: Buffer.from(mesh.ServerInfo.MeshID,'hex').toString('base64').substring(0,16),
2299
+ mpskeepalive: 60000,
2300
+ clientname: require('os').hostname(),
2301
+ clientaddress: '127.0.0.1',
2302
+ clientuuid: meshCoreObj.intelamt.uuid
2303
+ };
2304
+ var tobj = { debug: false }; //
2305
+ apftunnel= require('apfclient')(tobj,apfarg);
2306
+ try {
2307
+ apftunnel.connect();
2308
+ response += "..success";
2309
+ } catch (e) {
2310
+ response += JSON.stringify(e);
2311
+ }
2312
+ } else if (args['_'][0] == 'off') {
2313
+ response = 'Stopping APF tunnel';
2314
+ try {
2315
+ apftunnel.disconnect();
2316
+ response += "..success";
2317
+ } catch (e) {
2318
+ response += JSON.stringify(e);
2319
+ }
2320
+ apftunnel=null;
2321
+ } else {
2322
+ response = 'Invalid command.\r\nCmd syntax: apf on|off';
2323
+ }
2324
+ } else {
2325
+ response = 'APF tunnel is '+ (apftunnel == null ? 'off': 'on' );
2326
+ }
2327
+
2328
+ } else {
2329
+ response = 'APF tunnel requires Intel AMT';
2330
+ }
2331
+ break;
2332
+ }
2333
+ default: { // This is an unknown command, return an error message
2334
+ response = 'Unknown command \"' + cmd + '\", type \"help\" for list of avaialble commands.';
2335
+ break;
2336
+ }
2337
+ }
2338
+ } catch (e) { response = 'Command returned an exception error: ' + e; console.log(e); }
2339
+ if (response != null) { sendConsoleText(response, sessionid); }
2340
+ }
2341
+
2342
+ // Send a mesh agent console command
2343
+ function sendConsoleText(text, sessionid) {
2344
+ if (typeof text == 'object') { text = JSON.stringify(text); }
2345
+ mesh.SendCommand({ "action": "msg", "type": "console", "value": text, "sessionid": sessionid });
2346
+ }
2347
+
2348
+ // Called before the process exits
2349
+ //process.exit = function (code) { console.log("Exit with code: " + code.toString()); }
2350
+
2351
+ // Called when the server connection state changes
2352
+ function handleServerConnection(state) {
2353
+ meshServerConnectionState = state;
2354
+ if (meshServerConnectionState == 0) {
2355
+ // Server disconnected
2356
+ if (selfInfoUpdateTimer != null) { clearInterval(selfInfoUpdateTimer); selfInfoUpdateTimer = null; }
2357
+ lastSelfInfo = null;
2358
+ } else {
2359
+ // Server connected, send mesh core information
2360
+ var oldNodeId = db.Get('OldNodeId');
2361
+ if (oldNodeId != null) { mesh.SendCommand({ action: 'mc1migration', oldnodeid: oldNodeId }); }
2362
+
2363
+ // Update the server with basic info, logged in users and more.
2364
+ mesh.SendCommand(meshCoreObj);
2365
+
2366
+ // Send SMBios tables if present
2367
+ if (SMBiosTablesRaw != null) { mesh.SendCommand({ "action": "smbios", "value": SMBiosTablesRaw }); }
2368
+
2369
+ // Update the server on more advanced stuff, like Intel ME and Network Settings
2370
+ meInfoStr = null;
2371
+ sendPeriodicServerUpdate();
2372
+ if (selfInfoUpdateTimer == null) { selfInfoUpdateTimer = setInterval(sendPeriodicServerUpdate, 1200000); } // 20 minutes
2373
+ }
2374
+ }
2375
+
2376
+ // Update the server with the latest network interface information
2377
+ var sendNetworkUpdateNagleTimer = null;
2378
+ function sendNetworkUpdateNagle() { if (sendNetworkUpdateNagleTimer != null) { clearTimeout(sendNetworkUpdateNagleTimer); sendNetworkUpdateNagleTimer = null; } sendNetworkUpdateNagleTimer = setTimeout(sendNetworkUpdate, 5000); }
2379
+ function sendNetworkUpdate(force) {
2380
+ sendNetworkUpdateNagleTimer = null;
2381
+
2382
+ // Update the network interfaces information data
2383
+ var netInfo = mesh.NetInfo;
2384
+ if (netInfo) {
2385
+ netInfo.action = 'netinfo';
2386
+ var netInfoStr = JSON.stringify(netInfo);
2387
+ if ((force == true) || (clearGatewayMac(netInfoStr) != clearGatewayMac(lastNetworkInfo))) { mesh.SendCommand(netInfo); lastNetworkInfo = netInfoStr; }
2388
+ }
2389
+ }
2390
+
2391
+ // Called periodically to check if we need to send updates to the server
2392
+ function sendPeriodicServerUpdate(flags) {
2393
+ if (meshServerConnectionState == 0) return; // Not connected to server, do nothing.
2394
+ if (!flags) { flags = 0xFFFFFFFF; }
2395
+
2396
+ if ((flags & 1) && (amt != null)) {
2397
+ // If we have a connected MEI, get Intel ME information
2398
+ amt.getAmtInfo(function (meinfo) {
2399
+ try {
2400
+ if (meinfo == null) return;
2401
+ var intelamt = {}, p = false;
2402
+ if ((meinfo.Versions != null) && (meinfo.Versions.AMT != null)) { intelamt.ver = meinfo.Versions.AMT; p = true; }
2403
+ if (meinfo.ProvisioningState != null) { intelamt.state = meinfo.ProvisioningState; p = true; }
2404
+ if (meinfo.Flags != null) { intelamt.flags = meinfo.Flags; p = true; }
2405
+ if (meinfo.OsHostname != null) { intelamt.host = meinfo.OsHostname; p = true; }
2406
+ if (meinfo.UUID != null) { intelamt.uuid = meinfo.UUID; p = true; }
2407
+ if ((meinfo.ProvisioningState == 0) && (meinfo.net0 != null) && (meinfo.net0.enabled == 1)) { // If not activated, look to see if we have wired net working.
2408
+ // Not activated and we have wired ethernet, look for the trusted DNS
2409
+ var dns = meinfo.DNS;
2410
+ if (dns == null) {
2411
+ // Trusted DNS not set, let's look for the OS network DNS suffix
2412
+ var interfaces = require('os').networkInterfaces();
2413
+ for (var i in interfaces) {
2414
+ for (var j in interfaces[i]) {
2415
+ if ((interfaces[i][j].mac == mestate.net0.mac) && (interfaces[i][j].fqdn != null) && (interfaces[i][j].fqdn != '')) { dns = interfaces[i][j].fqdn; }
2416
+ }
2417
+ }
2418
+ }
2419
+ if (intelamt.dns != dns) { intelamt.dns = dns; p = true; }
2420
+ } else { if (intelamt.dns != null) { delete intelamt.dns; p = true; } }
2421
+ if (p == true) {
2422
+ var meInfoStr = JSON.stringify(intelamt);
2423
+ if (meInfoStr != lastMeInfo) {
2424
+ meshCoreObj.intelamt = intelamt;
2425
+ mesh.SendCommand(meshCoreObj);
2426
+ lastMeInfo = meInfoStr;
2427
+ }
2428
+ }
2429
+ } catch (ex) { }
2430
+ });
2431
+ }
2432
+
2433
+ if (flags & 2) {
2434
+ // Update network information
2435
+ sendNetworkUpdateNagle(false);
2436
+ }
2437
+
2438
+ if ((flags & 4) && (process.platform == 'win32')) {
2439
+ // Update anti-virus information
2440
+ var av, pr;
2441
+ try { av = require('win-info').av(); } catch (ex) { av = []; } // Antivirus
2442
+ //if (process.platform == 'win32') { try { pr = require('win-info').pendingReboot(); } catch (ex) { pr = null; } } // Pending reboot
2443
+ if ((meshCoreObj.av == null) || (JSON.stringify(meshCoreObj.av) != JSON.stringify(av))) { meshCoreObj.av = av; mesh.SendCommand(meshCoreObj); }
2444
+ }
2445
+ }
2446
+
2447
+
2448
+ // Starting function
2449
+ obj.start = function () {
2450
+ // Setup the mesh agent event handlers
2451
+ mesh.AddCommandHandler(handleServerCommand);
2452
+ mesh.AddConnectHandler(handleServerConnection);
2453
+
2454
+ // Parse input arguments
2455
+ //var args = parseArgs(process.argv);
2456
+ //console.log(args);
2457
+
2458
+ //resetMicroLms();
2459
+
2460
+ // Setup logged in user monitoring (THIS IS BROKEN IN WIN7)
2461
+ try {
2462
+ var userSession = require('user-sessions');
2463
+ userSession.on('changed', function onUserSessionChanged() {
2464
+ userSession.enumerateUsers().then(function (users) {
2465
+ var u = [], a = users.Active;
2466
+ for (var i = 0; i < a.length; i++) {
2467
+ var un = a[i].Domain ? (a[i].Domain + '\\' + a[i].Username) : (a[i].Username);
2468
+ if (u.indexOf(un) == -1) { u.push(un); } // Only push users in the list once.
2469
+ }
2470
+ meshCoreObj.users = u;
2471
+ mesh.SendCommand(meshCoreObj);
2472
+ });
2473
+ });
2474
+ userSession.emit('changed');
2475
+ //userSession.on('locked', function (user) { sendConsoleText('[' + (user.Domain ? user.Domain + '\\' : '') + user.Username + '] has LOCKED the desktop'); });
2476
+ //userSession.on('unlocked', function (user) { sendConsoleText('[' + (user.Domain ? user.Domain + '\\' : '') + user.Username + '] has UNLOCKED the desktop'); });
2477
+ } catch (ex) { }
2478
+ }
2479
+
2480
+ obj.stop = function () {
2481
+ mesh.AddCommandHandler(null);
2482
+ mesh.AddConnectHandler(null);
2483
+ }
2484
+
2485
+ function onWebSocketClosed() { sendConsoleText("WebSocket #" + this.httprequest.index + " closed.", this.httprequest.sessionid); delete consoleWebSockets[this.httprequest.index]; }
2486
+ function onWebSocketData(data) { sendConsoleText("Got WebSocket #" + this.httprequest.index + " data: " + data, this.httprequest.sessionid); }
2487
+ function onWebSocketSendOk() { sendConsoleText("WebSocket #" + this.index + " SendOK.", this.sessionid); }
2488
+
2489
+ function onWebSocketUpgrade(response, s, head) {
2490
+ sendConsoleText("WebSocket #" + this.index + " connected.", this.sessionid);
2491
+ this.s = s;
2492
+ s.httprequest = this;
2493
+ s.end = onWebSocketClosed;
2494
+ s.data = onWebSocketData;
2495
+ }
2496
+
2497
+ return obj;
2498
+}
2499
+
2500
+//
2501
+// Module startup
2502
+//
2503
+
2504
+try {
2505
+ var xexports = null, mainMeshCore = null;
2506
+ try { xexports = module.exports; } catch (e) { }
2507
+
2508
+ if (xexports != null) {
2509
+ // If we are running within NodeJS, export the core
2510
+ module.exports.createMeshCore = createMeshCore;
2511
+ } else {
2512
+ // If we are not running in NodeJS, launch the core
2513
+ mainMeshCore = createMeshCore();
2514
+ mainMeshCore.start(null);
2515
+ }
2516
+} catch (ex) {
2517
+ require('MeshAgent').SendCommand({ "action": "msg", "type": "console", "value": "uncaughtException2: " + ex });
2518
+}
\ No newline at end of file
agents/modules_meshcmd_min/amt-ider.min.js
new
+1
@@ -0,0 +1 @@
1
+module.exports=function CreateAmtRemoteIder(){var B={};B.protocol=3;B.bytesToAmt=0;B.bytesFromAmt=0;B.rx_timeout=30000;B.tx_timeout=0;B.heartbeat=20000;B.version=1;B.acc=null;B.inSequence=0;B.outSequence=0;B.iderinfo=null;B.enabled=false;B.iderStart=0;B.floppy=null;B.cdrom=null;B.floppyReady=false;B.cdromReady=false;B.sectorStats=null;B.debug=false;var z=new Buffer([0,38,49,128,0,0,0,0,5,30,16,169,8,32,2,0,3,195,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,2,208,0,0]);var s=new Buffer([0,92,36,128,0,0,0,0,1,10,0,1,0,0,0,0,2,0,0,0,3,22,0,160,0,0,0,0,0,18,2,0,0,0,0,0,0,0,160,0,0,0,5,30,16,169,8,32,2,0,3,195,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,2,208,0,0,8,10,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,17,36,49]);var x=new Buffer([0,38,36,128,0,0,0,0,5,30,4,176,2,18,2,0,0,80,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,2,208,0,0]);var r=new Buffer([0,92,36,128,0,0,0,0,1,10,0,1,0,0,0,0,2,0,0,0,3,22,0,160,0,0,0,0,0,18,2,0,0,0,0,0,0,0,160,0,0,0,5,30,4,176,2,18,2,0,0,80,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,2,208,0,0,8,10,0,0,0,0,0,0,0,0,0,0,11,6,0,0,0,17,36,49]);var t=new Buffer([0,18,1,128,0,0,0,0,26,10,0,0,0,0,0,0,0,0,0,0]);var u=new Buffer([0,18,1,128,0,0,0,0,29,10,0,0,0,0,0,0,0,0,0,0]);var v=new Buffer([0,32,1,128,0,0,0,0,42,24,0,0,0,0,32,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0]);var q=new Buffer([0,40,1,128,0,0,0,0,1,6,0,255,0,0,0,0,42,24,0,0,0,0,2,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0]);var i=new Buffer([0,0,0,40,0,0,0,8]);var j=new Buffer([0,0,3,4,0,8,1,0]);var h=new Buffer([0,1,3,4,0,0,0,2]);var m=new Buffer([0,2,3,4,0,0,0,0]);var l=new Buffer([0,3,3,4,41,0,0,2]);var k=new Buffer([0,16,1,8,0,0,8,0,0,1,0,0]);var o=new Buffer([0,30,3,0]);var n=new Buffer([1,0,3,0]);var p=new Buffer([1,5,3,0]);var y=new Buffer([0,18,36,128,0,0,0,0,1,10,0,1,0,0,0,0,2,0,0,0]);var A=new Buffer([0,18,49,128,0,0,0,0,1,10,0,1,0,0,0,0,2,0,0,0]);var w=new Buffer([0,14,1,128,0,0,0,0,1,6,0,255,0,0,0,0]);B.xxStateChange=function(E){if(B.debug){console.log("IDER-StateChange",E)}if(E==0){B.Stop()}if(E==3){B.Start()}};B.Start=function(){if(B.debug){console.log("IDER-Start");console.log(B.floppy,B.cdrom)}B.bytesToAmt=0;B.bytesFromAmt=0;B.inSequence=0;B.outSequence=0;e=[];B.SendCommand(64,Buffer.concat([ShortToStrX(B.rx_timeout),ShortToStrX(B.tx_timeout),ShortToStrX(B.heartbeat),IntToStrX(B.version)]));if(B.sectorStats){B.sectorStats(0,0,B.floppy?(B.floppy.size>>9):0);B.sectorStats(0,1,B.cdrom?(B.cdrom.size>>11):0)}};B.Stop=function(){if(B.debug){console.log("IDER-Stop")}B.parent.Stop()};B.ProcessData=function(E){B.bytesFromAmt+=E.length;if(B.acc==null){B.acc=E}else{B.acc=Buffer.concat(B.acc,E)}if(B.debug){console.log("IDER-ProcessData",B.acc.length,B.acc.toString("hex"))}while(B.acc!=null){var F=B.ProcessDataEx();if(F==0){return}if(B.inSequence!=ReadIntX(B.acc,4)){if(B.debug){console.log("ERROR: Out of sequence",B.inSequence,ReadIntX(B.acc,4))}B.Stop();return}B.inSequence++;if(F==B.acc.length){B.acc=null}else{B.acc=B.acc.slice(F)}}};B.SendCommand=function(F,H,G,I){if(H==null){H=new Buffer(0)}var E=((F>50)&&(G==true))?2:0;if(I){E+=1}var J=Buffer.concat([Buffer([F,0,0,E]),IntToStrX(B.outSequence++),H]);B.parent.xxSend(J);B.bytesToAmt+=J.length};B.SendCommandEndResponse=function(H,I,G,E,F){if(H){B.SendCommand(81,new Buffer([0,0,0,0,0,0,0,0,0,0,0,0,197,0,3,0,0,0,G,80,0,0,0]),true)}else{B.SendCommand(81,new Buffer([0,0,0,0,0,0,0,0,0,0,0,0,135,(I<<4),3,0,0,0,G,81,I,E,F]),true)}};B.SendDataToHost=function(G,E,F,H){var I=(H)?0:F.length;if(E==true){B.SendCommand(84,Buffer.concat([new Buffer([0,(F.length&255),(F.length>>8),0,H?180:181,0,2,0,(I&255),(I>>8),G,88,133,0,3,0,0,0,G,80,0,0,0,0,0,0]),F]),E,H)}else{B.SendCommand(84,Buffer.concat([new Buffer([0,(F.length&255),(F.length>>8),0,H?180:181,0,2,0,(I&255),(I>>8),G,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),F]),E,H)}};B.SendGetDataFromHost=function(F,E){B.SendCommand(82,new Buffer([0,(E&255),(E>>8),0,181,0,0,0,(E&255),(E>>8),F,88,0,0,0,0,0,0,0,0,0,0,0]),false)};B.SendDisableEnableFeatures=function(F,E){if(E==null){E=""}B.SendCommand(72,Buffer.concat([new Buffer([F]),E]))};B.ProcessDataEx=function(){if(B.acc.length<8){return 0}switch(B.acc[0]){case 65:if(B.acc.length<30){return 0}var I=B.acc[29];if(B.acc.length<(30+I)){return 0}B.iderinfo={};B.iderinfo.major=B.acc[8];B.iderinfo.minor=B.acc[9];B.iderinfo.fwmajor=B.acc[10];B.iderinfo.fwminor=B.acc[11];B.iderinfo.readbfr=ReadShortX(B.acc,16);B.iderinfo.writebfr=ReadShortX(B.acc,18);B.iderinfo.proto=B.acc[21];B.iderinfo.iana=ReadIntX(B.acc,25);if(B.debug){console.log(B.iderinfo)}if(B.iderinfo.proto!=0){if(B.debug){console.log("Unknown proto",B.iderinfo.proto)}B.Stop()}if(B.iderinfo.readbfr>8192){if(B.debug){console.log("Illegal read buffer size",B.iderinfo.readbfr)}B.Stop()}if(B.iderinfo.writebfr>8192){if(B.debug){console.log("Illegal write buffer size",B.iderinfo.writebfr)}B.Stop()}if(B.iderStart==0){B.SendDisableEnableFeatures(3,IntToStrX(1+8))}else{if(B.iderStart==1){B.SendDisableEnableFeatures(3,IntToStrX(1+16))}else{if(B.iderStart==2){B.SendDisableEnableFeatures(3,IntToStrX(1+24))}}}return 30+I;case 67:if(B.debug){console.log("CLOSE")}B.Stop();return 8;case 68:B.SendCommand(69);return 8;case 69:if(B.debug){console.log("PONG")}return 8;case 70:if(B.acc.length<9){return 0}var J=B.acc[8];if(d===null){B.SendCommand(71);if(B.debug){console.log("RESETOCCURED1",J)}}else{f=true;if(B.debug){console.log("RESETOCCURED2",J)}}return 9;case 73:if(B.acc.length<13){return 0}var K=B.acc[8];var L=ReadIntX(B.acc,9);if(B.debug){console.log("STATUS_DATA",K,L)}switch(K){case 1:if(L&1){if(B.iderStart==0){B.SendDisableEnableFeatures(3,IntToStrX(1+8))}else{if(B.iderStart==1){B.SendDisableEnableFeatures(3,IntToStrX(1+16))}else{if(B.iderStart==2){B.SendDisableEnableFeatures(3,IntToStrX(1+24))}}}}break;case 2:B.enabled=(L&2)?true:false;if(B.debug){console.log("IDER Status: "+B.enabled)}break;case 3:if(L!=1){if(B.debug){console.log("Register toggle failure")}}break}return 13;case 74:if(B.acc.length<11){return 0}if(B.debug){console.log("IDER: ABORT",B.acc[8])}return 11;case 75:return 8;case 80:if(B.acc.length<28){return 0}var F=(B.acc[14]&16)?176:160;var G=B.acc[14];var E=B.acc.slice(16,28);var H=B.acc[9];if(B.debug){console.log("SCSI_CMD",F,E.toString("hex"),H,G)}g(F,E,H,G);return 28;case 83:if(B.acc.length<14){return 0}var I=ReadShortX(B.acc,9);if(B.acc.length<(14+I)){return 0}if(B.debug){console.log("SCSI_WRITE, len = "+(14+I))}B.SendCommand(81,new Buffer([0,0,0,0,0,0,0,0,0,0,0,0,135,112,3,0,0,0,160,81,7,39,0]),true);return 14+I;default:if(B.debug){console.log("Unknown IDER command",B.acc[0])}B.Stop();break}return 0};function g(I,H,K,J){var N;var O;switch(H[0]){case 0:if(B.debug){console.log("SCSI: TEST_UNIT_READY",I)}switch(I){case 160:if(B.floppy==null){B.SendCommandEndResponse(1,2,I,58,0);return -1}if(B.floppyReady==false){B.floppyReady=true;B.SendCommandEndResponse(1,6,I,40,0);return -1}break;case 176:if(B.cdrom==null){B.SendCommandEndResponse(1,2,I,58,0);return -1}if(B.cdromReady==false){B.cdromReady=true;B.SendCommandEndResponse(1,6,I,40,0);return -1}break;default:if(B.debug){console.log("SCSI Internal error 3",I)}return -1}B.SendCommandEndResponse(1,0,I,0,0);break;case 8:N=((H[1]&31)<<16)+(H[2]<<8)+H[3];O=H[4];if(O==0){O=256}if(B.debug){console.log("SCSI: READ_6",I,N,O)}C(I,N,O,K);break;case 10:N=((H[1]&31)<<16)+(H[2]<<8)+H[3];O=H[4];if(O==0){O=256}if(B.debug){console.log("SCSI: WRITE_6",I,N,O)}B.SendCommandEndResponse(1,2,I,58,0);return -1;case 26:if(B.debug){console.log("SCSI: MODE_SENSE_6",I)}if((H[2]==63)&&(H[3]==0)){var E=0,F=0;switch(I){case 160:if(B.floppy==null){B.SendCommandEndResponse(1,2,I,58,0);return -1}E=0;F=128;break;case 176:if(B.cdrom==null){B.SendCommandEndResponse(1,2,I,58,0);return -1}E=5;F=128;break;default:if(B.debug){console.log("SCSI Internal error 6",I)}return -1}B.SendDataToHost(I,true,new Buffer([0,E,F,0]),K&1);return}B.SendCommandEndResponse(1,5,I,36,0);break;case 27:B.SendCommandEndResponse(1,0,I);break;case 30:if(B.debug){console.log("SCSI: ALLOW_MEDIUM_REMOVAL",I)}if((I==160)&&(B.floppy==null)){B.SendCommandEndResponse(1,2,I,58,0);return -1}if((I==176)&&(B.cdrom==null)){B.SendCommandEndResponse(1,2,I,58,0);return -1}B.SendCommandEndResponse(1,0,I,0,0);break;case 35:if(B.debug){console.log("SCSI: READ_FORMAT_CAPACITIES",I)}var G=ReadShort(H,7);var Q=0,V;var P=G/8;switch(I){case 160:if((B.floppy==null)||(B.floppy.size==0)){B.SendCommandEndResponse(0,5,I,36,0);return -1}V=(B.floppy.size>>9)-1;break;case 176:if((B.cdrom==null)||(B.cdrom.size==0)){B.SendCommandEndResponse(0,5,I,36,0);return -1}V=(B.cdrom.size>>11)-1;break;default:if(B.debug){console.log("SCSI Internal error 4",I)}return -1}B.SendDataToHost(I,true,Buffer.concat([IntToStr(8),new Buffer([0,0,11,64,2,0,2,0])]),K&1);break;case 37:if(B.debug){console.log("SCSI: READ_CAPACITY",I)}var O=0;switch(I){case 160:if((B.floppy==null)||(B.floppy.size==0)){B.SendCommandEndResponse(0,2,I,58,0);return -1}if(B.floppy!=null){O=(B.floppy.size>>9)-1}if(B.debug){console.log("DEV_FLOPPY",O)}break;case 176:if((B.cdrom==null)||(B.cdrom.size==0)){B.SendCommandEndResponse(0,2,I,58,0);return -1}if(B.cdrom!=null){O=(B.cdrom.size>>11)-1}if(B.debug){console.log("DEV_CDDVD",O)}break;default:if(B.debug){console.log("SCSI Internal error 4",I)}return -1}if(B.debug){console.log("SCSI: READ_CAPACITY2",I,J)}B.SendDataToHost(J,true,Buffer.concat([IntToStr(O),new Buffer([0,0,((I==176)?8:2),0])]),K&1);break;case 40:N=ReadInt(H,2);O=ReadShort(H,7);if(B.debug){console.log("SCSI: READ_10",I,N,O)}C(I,N,O,K);break;case 42:case 46:N=ReadInt(H,2);O=ReadShort(H,7);if(B.debug){console.log("SCSI: WRITE_10",I,N,O)}B.SendGetDataFromHost(I,512*O);break;case 67:var G=ReadShort(H,7);var R=H[1]&2;var M=H[2]&7;if(M==0){M=H[9]>>6}if(B.debug){console.log("SCSI: READ_TOC, dev="+I+", buflen="+G+", msf="+R+", format="+M)}switch(I){case 160:B.SendCommandEndResponse(1,5,I,32,0);return -1;case 176:break;default:if(B.debug){console.log("SCSI Internal error 9",I)}return -1}if(M==1){B.SendDataToHost(I,true,new Buffer([0,10,1,1,0,20,1,0,0,0,0,0]),K&1)}else{if(M==0){if(R){B.SendDataToHost(I,true,new Buffer([0,18,1,1,0,20,1,0,0,0,2,0,0,20,170,0,0,0,52,19]),K&1)}else{B.SendDataToHost(I,true,new Buffer([0,18,1,1,0,20,1,0,0,0,0,0,0,20,170,0,0,0,0,0]),K&1)}}}break;case 70:var W=(H[1]!=2);var L=ReadShort(H,2);var G=ReadShort(H,7);if(B.debug){console.log("SCSI: GET_CONFIGURATION",I,W,L,G)}if(G==0){B.SendDataToHost(I,true,Buffer.concat([IntToStr(60),IntToStr(8)]),K&1);return -1}var T=null;if(L==0){T=j}if((L==1)||(W&&(L<1))){T=h}if((L==2)||(W&&(L<2))){T=m}if((L==3)||(W&&(L<3))){T=l}if((L==16)||(W&&(L<16))){T=k}if((L==30)||(W&&(L<30))){T=o}if((L==256)||(W&&(L<256))){T=n}if((L==261)||(W&&(L<261))){T=p}if(T==null){T=Buffer.concat([IntToStr(8),IntToStr(4)])}else{T=Buffer.concat([IntToStr(8),IntToStr(T.length+4),T])}if(T.length>G){T=T.slice(0,G)}B.SendDataToHost(I,true,T,K&1);return -1;case 74:if(B.debug){console.log("SCSI: GET_EVENT_STATUS_NOTIFICATION",I,H[1],H[4],H[9])}if((H[1]!=1)&&(H[4]!=16)){if(B.debug){console.log("SCSI ERROR")}B.SendCommandEndResponse(1,5,I,38,1);break}var S=0;if((I==160)&&(B.floppy!=null)){S=2}else{if((I==176)&&(B.cdrom!=null)){S=2}}B.SendDataToHost(I,true,new Buffer([0,S,128,0]),K&1);break;case 76:B.SendCommand(81,Buffer.concat([IntToStrX(0),IntToStrX(0),IntToStrX(0),new Buffer([135,80,3,0,0,0,176,81,5,32,0])]),true);break;case 81:if(B.debug){console.log("SCSI READ_DISC_INFO",I)}B.SendCommandEndResponse(0,5,I,32,0);return -1;case 85:if(B.debug){console.log("SCSI ERROR: MODE_SELECT_10",I)}B.SendCommandEndResponse(1,5,I,32,0);return -1;case 90:if(B.debug){console.log("SCSI: MODE_SENSE_10",I,H[2]&63)}var G=ReadShort(H,7);var T=null;if(G==0){B.SendDataToHost(I,true,Buffer.concat([IntToStr(60),IntToStr(8)]),K&1);return -1}var U=0;if(I==160){if(B.floppy!=null){U=(B.floppy.size>>9)}}else{if(B.cdrom!=null){U=(B.cdrom.size>>11)}}switch(H[2]&63){case 1:if(I==160){T=(U<=2880)?y:A}else{T=w}break;case 5:if(I==160){T=(U<=2880)?x:z}break;case 63:if(I==160){T=(U<=2880)?r:s}else{T=q}break;case 26:if(I==176){T=t}break;case 29:if(I==176){T=u}break;case 42:if(I==176){T=v}break}if(T==null){B.SendCommandEndResponse(0,5,I,32,0)}else{B.SendDataToHost(I,true,T,K&1)}break;default:if(B.debug){console.log("IDER: Unknown SCSI command",H[0])}B.SendCommandEndResponse(0,5,I,32,0);return -1}return 0}function C(E,G,H,F){var I=null;var J=0;if(E==160){I=B.floppy;if(B.floppy!=null){J=(B.floppy.size>>9)}}if(E==176){I=B.cdrom;if(B.cdrom!=null){J=(B.cdrom.size>>11)}}if((H<0)||(G+H>J)){B.SendCommandEndResponse(1,5,E,33,0);return 0}if(H==0){B.SendCommandEndResponse(1,0,E,0,0);return 0}if(I!=null){if(B.sectorStats){B.sectorStats(1,(E==160)?0:1,J,G,H)}if(E==160){G<<=9;H<<=9}else{G<<=11;H<<=11}if(d!==null){e.push({media:I,dev:E,lba:G,len:H,fr:F})}else{d=I;a=E;b=G;c=H;D(F)}}}var e=[];var f=false;var d=null;var a;var b;var c;function D(E){var G=c,F=b;if(c>B.iderinfo.readbfr){G=B.iderinfo.readbfr}c-=G;b+=G;var I=new Buffer(G);fs.readSync(d.file,I,0,G,F);B.SendDataToHost(a,(c==0),I,E&1);if((c>0)&&(f==false)){D(E)}else{d=null;if(f){B.SendCommand(71);e=[];f=false}else{if(e.length>0){var H=e.shift();d=H.media;a=H.dev;b=H.lba;c=H.len;D(H.fr)}}}}return B};function ShortToStr(a){return new Buffer([(a>>8)&255,a&255])}function ShortToStrX(a){return new Buffer([a&255,(a>>8)&255])}function IntToStr(a){return new Buffer([(a>>24)&255,(a>>16)&255,(a>>8)&255,a&255])}function IntToStrX(a){return new Buffer([a&255,(a>>8)&255,(a>>16)&255,(a>>24)&255])}function ReadShort(b,a){return(b[a]<<8)+b[a+1]}function ReadShortX(b,a){return(b[a+1]<<8)+b[a]}function ReadInt(b,a){return(b[a]*16777216)+(b[a+1]<<16)+(b[a+2]<<8)+b[a+3]}function ReadSInt(b,a){return(b[a]<<24)+(b[a+1]<<16)+(b[a+2]<<8)+b[a+3]}function ReadIntX(b,a){return(b[a+3]*16777216)+(b[a+2]<<16)+(b[a+1]<<8)+b[a]};
\ No newline at end of file
agents/modules_meshcmd_min/amt-lme.min.js
new
+1
@@ -0,0 +1 @@
1
+var MemoryStream=require("MemoryStream");var lme_id=0;var lme_port_offset=0;var xmlParser=require("amt-xml");var APF_DISCONNECT=1;var APF_SERVICE_REQUEST=5;var APF_SERVICE_ACCEPT=6;var APF_USERAUTH_REQUEST=50;var APF_USERAUTH_FAILURE=51;var APF_USERAUTH_SUCCESS=52;var APF_GLOBAL_REQUEST=80;var APF_REQUEST_SUCCESS=81;var APF_REQUEST_FAILURE=82;var APF_CHANNEL_OPEN=90;var APF_CHANNEL_OPEN_CONFIRMATION=91;var APF_CHANNEL_OPEN_FAILURE=92;var APF_CHANNEL_WINDOW_ADJUST=93;var APF_CHANNEL_DATA=94;var APF_CHANNEL_CLOSE=97;var APF_PROTOCOLVERSION=192;function lme_object(){this.ourId=++lme_id;this.amtId=-1;this.LME_CHANNEL_STATUS="LME_CS_FREE";this.txWindow=0;this.rxWindow=0;this.localPort=0;this.errorCount=0}function stream_bufferedWrite(){var a=require("events").inherits(this);this.buffer=[];this._readCheckImmediate=undefined;this._ObjectID="bufferedWriteStream";a.createEvent("close");a.createEvent("drain");a.createEvent("error");a.createEvent("finish");a.createEvent("pipe");a.createEvent("unpipe");a.createEvent("readable");this.isEmpty=function(){return(this.buffer.length==0)};this.isWaiting=function(){return(this._readCheckImmediate==undefined)};this.write=function(c){for(var b in arguments){if(typeof(arguments[b])=="function"){this.once("drain",arguments[b]);break}}var d=Buffer.alloc(c.length);c.copy(d);this.buffer.push({offset:0,data:d});this.emit("readable");return(this.buffer.length==0?true:false)};this.read=function(){var f=arguments.length==0?undefined:arguments[0];var b=0;var d=[];while((f==undefined||b<f)&&this.buffer.length>0){var c=this.buffer[0].data.length-this.buffer[0].offset;var e=this.buffer[0].offset;if(c>(f-b)){d.push(this.buffer[0].data.slice(e,e+f-b));this.buffer[0].offset+=(f-b);b+=(f-b)}else{d.push(this.buffer[0].data.slice(e));b+=c;this.buffer.shift()}}this._readCheckImmediate=setImmediate(function(g){g._readCheckImmediate=undefined;if(g.buffer.length==0){g.emit("drain")}else{g.emit("readable")}},this);return(Buffer.concat(d))}}function lme_heci(c){var a=require("events").inherits(this);a.createEvent("error");a.createEvent("connect");a.createEvent("notify");a.createEvent("bind");if((c!=null)&&(c.debug==true)){lme_port_offset=-100}var b=require("heci");this.INITIAL_RXWINDOW_SIZE=4096;this._ObjectID="lme";this._LME=b.create();this._LME._binded={};this._LME.LMS=this;this._LME.on("error",function(d){this.LMS.emit("error",d)});this._LME.on("connect",function(){this.on("data",function(k){var l=k.readUInt8(0);switch(l){default:console.log("Unhandled LME Command "+l+", "+k.length+" byte(s).");break;case APF_SERVICE_REQUEST:var A=k.readUInt32BE(1);var z=k.slice(5,A+5);if(z=="pfwd@amt.intel.com"||z=="auth@amt.intel.com"){var G=Buffer.alloc(5+A);G.writeUInt8(6,0);G.writeUInt32BE(A,1);G.write(z.toString(),5);this.write(G)}else{}break;case APF_GLOBAL_REQUEST:var A=k.readUInt32BE(1);var z=k.slice(5,A+5).toString();switch(z){case"tcpip-forward":var w=k.readUInt32BE(A+6);var H=k.readUInt32BE(A+10+w);if(this[z]==undefined){this[z]={}}if(this[z][H]!=null){for(var t in this.sockets){var h=this.sockets[t];if(h.localPort==H){this.sockets[t].end();delete this.sockets[t]}}}if(this[z][H]==null){try{this[z][H]=require("net").createServer();this[z][H].HECI=this;if(lme_port_offset==0){this[z][H].listen({port:H,host:"127.0.0.1"})}else{this[z][H].listen({port:(H+lme_port_offset)})}this[z][H].on("connection",function(e){this.HECI.LMS.bindDuplexStream(e,e.remoteFamily,e.localPort-lme_port_offset)});this._binded[H]=true;this.LMS.emit("bind",this._binded)}catch(p){console.log(p,"Port "+H)}}var G=Buffer.alloc(5);G.writeUInt8(81,0);G.writeUInt32BE(H,1);this.write(G);break;case"cancel-tcpip-forward":var G=Buffer.alloc(1);G.writeUInt8(APF_REQUEST_SUCCESS,0);this.write(G);break;case"udp-send-to@amt.intel.com":var G=Buffer.alloc(1);G.writeUInt8(APF_REQUEST_FAILURE,0);this.write(G);break;default:break}break;case APF_CHANNEL_OPEN_CONFIRMATION:var J=k.readUInt32BE(1);var N=k.readUInt32BE(5);var O=k.readUInt32BE(9);if(this.sockets[J]!=undefined){this.sockets[J].lme.amtId=N;this.sockets[J].lme.rxWindow=O;this.sockets[J].lme.txWindow=O;this.sockets[J].lme.LME_CHANNEL_STATUS="LME_CS_CONNECTED";this.sockets[J].bufferedStream=new stream_bufferedWrite();this.sockets[J].bufferedStream.socket=this.sockets[J];this.sockets[J].bufferedStream.on("readable",function(){if(this.socket.lme.txWindow>0){var e=this.read(this.socket.lme.txWindow);var i=Buffer.alloc(9+e.length);i.writeUInt8(APF_CHANNEL_DATA,0);i.writeUInt32BE(this.socket.lme.amtId,1);i.writeUInt32BE(e.length,5);e.copy(i,9);this.socket.lme.txWindow-=e.length;this.socket.HECI.write(i)}});this.sockets[J].bufferedStream.on("drain",function(){this.socket.resume()});this.sockets[J].on("data",function(e){if(!this.bufferedStream.write(e)){this.pause()}});this.sockets[J].on("end",function(){var e=Buffer.alloc(5);e.writeUInt8(APF_CHANNEL_CLOSE,0);e.writeUInt32BE(this.lme.amtId,1);this.HECI.write(e)});this.sockets[J].resume()}break;case APF_PROTOCOLVERSION:var x=k.readUInt32BE(1);var y=k.readUInt32BE(5);var L=k.readUInt32BE(9);var G=Buffer.alloc(93);G.writeUInt8(192,0);G.writeUInt32BE(1,1);G.writeUInt32BE(0,5);G.writeUInt32BE(L,9);this.write(G);break;case APF_CHANNEL_WINDOW_ADJUST:var K=k.readUInt32BE(1);var g=k.readUInt32BE(5);if(this.sockets[K]!=undefined){this.sockets[K].lme.txWindow+=g;if(!this.sockets[K].bufferedStream.isEmpty()&&this.sockets[K].bufferedStream.isWaiting()){this.sockets[K].bufferedStream.emit("readable")}}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_WINDOW_ADJUST")}break;case APF_CHANNEL_DATA:var K=k.readUInt32BE(1);var n=k.readUInt32BE(5);var m=k.slice(9,9+n);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].pendingBytes.push(m.length);this.sockets[K].write(m,function(){var i=this.pendingBytes.shift();var e=Buffer.alloc(9);e.writeUInt8(APF_CHANNEL_WINDOW_ADJUST,0);e.writeUInt32BE(this.lme.amtId,1);e.writeUInt32BE(i,5);this.HECI.write(e)})}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){var h=this.insockets[K];if(h.data==null){h.data=m.toString()}else{h.data+=m.toString()}h.rxWindow+=n;var s=parseHttp(h.data);if((s!=null)||(h.data.length>=8000)){var B=null;try{B=xmlParser.ParseWsman(s)}catch(o){}if(B!=null){this.LMS.emit("notify",B,h.options,_lmsNotifyToString(B),_lmsNotifyToCode(B))}var f=Buffer.alloc(5);f.writeUInt8(APF_CHANNEL_CLOSE,0);f.writeUInt32BE(d,1);this.write(f)}else{if(h.rxWindow>6000){var f=Buffer.alloc(9);f.writeUInt8(APF_CHANNEL_WINDOW_ADJUST,0);f.writeUInt32BE(h.amtId,1);f.writeUInt32BE(h.rxWindow,5);this.write(f);h.rxWindow=0}}}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_DATA")}}break;case APF_CHANNEL_OPEN_FAILURE:var K=k.readUInt32BE(1);var M=k.readUInt32BE(5);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].end();delete this.sockets[K]}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){delete this.insockets[K]}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_OPEN_FAILURE")}}break;case APF_CHANNEL_CLOSE:var K=k.readUInt32BE(1);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].end();var d=this.sockets[K].lme.amtId;var f=Buffer.alloc(5);delete this.sockets[K];f.writeUInt8(APF_CHANNEL_CLOSE,0);f.writeUInt32BE(d,1);this.write(f)}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){delete this.insockets[K]}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_CLOSE")}}break;case APF_CHANNEL_OPEN:var A=k.readUInt32BE(1);var z=k.slice(5,A+5).toString();var j=k.readUInt32BE(A+5);var u=k.readUInt32BE(A+9);var r=k.readUInt32BE(A+17);var q=k.slice(A+21,A+21+r).toString();var I=k.readUInt32BE(A+21+r);var D=k.readUInt32BE(A+25+r);var C=k.slice(A+29+r,A+29+r+D).toString();var E=k.readUInt32BE(A+29+r+D);if(this.insockets==null){this.insockets={}}var F=++lme_id;var v=new lme_object();v.ourId=F;v.amtId=j;v.txWindow=u;v.rxWindow=0;v.options={target:q,targetPort:I,source:C,sourcePort:E};this.insockets[F]=v;var f=Buffer.alloc(17);f.writeUInt8(APF_CHANNEL_OPEN_CONFIRMATION,0);f.writeUInt32BE(j,1);f.writeUInt32BE(F,5);f.writeUInt32BE(4000,9);f.writeUInt32BE(4294967295,13);this.write(f);break}});this.LMS.emit("connect");this.resume()});this.bindDuplexStream=function(e,h,g){var j=e;j.pendingBytes=[];j.HECI=this._LME;j.LMS=this;j.lme=new lme_object();j.lme.Socket=j;j.localPort=g;var d=new MemoryStream();d.writeUInt8(90);d.writeUInt32BE(15);d.write("forwarded-tcpip");d.writeUInt32BE(j.lme.ourId);d.writeUInt32BE(this.INITIAL_RXWINDOW_SIZE);d.writeUInt32BE(4294967295);for(var f=0;f<2;++f){if(h=="IPv6"){d.writeUInt32BE(3);d.write("::1")}else{d.writeUInt32BE(9);d.write("127.0.0.1")}d.writeUInt32BE(g)}this._LME.write(d.buffer);if(this._LME.sockets==undefined){this._LME.sockets={}}this._LME.sockets[j.lme.ourId]=j;j.pause()};this._LME.connect(b.GUIDS.LME,{noPipeline:0})}function parseHttp(c){var d=c.indexOf("\r\n\r\n");if((d==-1)||(c.length<(d+2))){return null}var b=require("http-headers")(c.substring(0,d),true);var a=parseInt(b["content-length"]);if(c.length>=a+d+4){return c.substring(d+4,d+4+a)}return null}function _lmsNotifyToCode(c){if((c==null)||(c.Body==null)||(c.Body.MessageID==null)){return null}var b=c.Body.MessageID;try{b+="-"+c.Body.MessageArguments[0]}catch(a){}return b}function _lmsNotifyToString(c){if((c==null)||(c.Body==null)||(c.Body.MessageID==null)){return null}var b=c.Body.MessageID;try{b+="-"+c.Body.MessageArguments[0]}catch(a){}if(lmsEvents[b]){return lmsEvents[b]}return null}var lmsEvents={iAMT0001:"System Defense Policy %1s triggered.",iAMT0002:"Agent Presence Agent %1s not started.",iAMT0003:"Agent Presence Agent %1s stopped.",iAMT0004:"Agent Presence Agent %1s running.",iAMT0005:"Agent Presence Agent %1s expired.",iAMT0006:"Agent Presence Agent %1s suspended.",iAMT0007:"Host software attempt to disable AMT Network link detected.",iAMT0008:"Host software attempt to disable AMT Network link detected -- Host Network link blocked.",iAMT0009:"AMT clock or FLASH wear-out protection disabled.",iAMT0010:"Intel(R) AMT Network Interface %1s heuristics defense slow threshold trespassed.",iAMT0011:"Intel(R) AMT Network Interface %1s heuristics defense fast threshold trespassed.",iAMT0012:"Intel(R) AMT Network Interface %1s heuristics defense factory defined threshold trespassed.",iAMT0013:"Intel(R) AMT Network Interface %1s heuristics defense Encounter timeout expired.",iAMT0014:"General certificate error.",iAMT0015:"Certificate expired.",iAMT0016:"No trusted root certificate.",iAMT0017:"Not configured to work with server certificate.",iAMT0018:"Certificate revoked.",iAMT0019:"RSA exponent too large.",iAMT0020:"RSA modulus too large.",iAMT0021:"Unsupported digest.",iAMT0022:"Distinguished name too long.",iAMT0023:"Key usage missing.",iAMT0024:"General SSL handshake error.",iAMT0025:"General 802.1x error.",iAMT0026:"AMT Diagnostic AlertEAC error - General NAC error.",iAMT0027:"AMT Diagnostic AlertEAC error - attempt to get a NAC posture while AMT NAC is disabled.",iAMT0028:"AMT Diagnostic AlertEAC error - attempt to get a posture of an unsupported type.",iAMT0029:"Audit log storage is 50% full.",iAMT0030:"Audit log storage is 75% full.",iAMT0031:"Audit log storage is 85% full.",iAMT0032:"Audit log storage is 95% full.",iAMT0033:"Audit log storage is full.",iAMT0034:"Firmware Update Event - Partial.",iAMT0035:"Firmware Update Event - Failure.",iAMT0036:"Remote connectivity initiated.",iAMT0037:"ME Presence event.","iAMT0038-0":"AMT is being unprovisioned using BIOS command.","iAMT0038-1":"AMT is being unprovisioned using Local MEI command.","iAMT0038-2":"AMT is being unprovisioned using Local WS-MAN/SOAP command.","iAMT0038-3":"AMT is being unprovisioned using Remote WS-MAN/SOAP command.",iAMT0039:"HW Asset Error.",iAMT0050:"User Notification Alert - General Notification.","iAMT0050-16":"User Notification Alert - Circuit Breaker notification (CB Drop TX filter hit.).","iAMT0050-17":"User Notification Alert - Circuit Breaker notification (CB Rate Limit TX filter hit.).","iAMT0050-18":"User Notification Alert - Circuit Breaker notification (CB Drop RX filter hit.).","iAMT0050-19":"User Notification Alert - Circuit Breaker notification (CB Rate Limit RX filter hit.).","iAMT0050-32":"User Notification Alert - EAC notification.","iAMT0050-48":"User Notification Alert - Remote diagnostics - (Remote Redirection session started - SOL).","iAMT0050-49":"User Notification Alert - Remote diagnostics - (Remote Redirection session stopped - SOL).","iAMT0050-50":"User Notification Alert - Remote diagnostics. (Remote Redirection session started - IDE-R).","iAMT0050-51":"User Notification Alert - Remote diagnostics. (Remote Redirection session stopped - IDE-R).","iAMT0050-66":"User Notification Alert - WLAN notification (Host profile mismatch - Management Interface ignored).","iAMT0050-67":"User Notification Alert - WLAN notification (Management device overrides host radio).","iAMT0050-68":"User Notification Alert - WLAN notification (Host profile security mismatch).","iAMT0050-69":"User Notification Alert - WLAN notification (Management device relinquishes control over host Radio).",iAMT0051:"User Notification Alert - SecIo event.","iAMT0051-0":"User Notification Alert - SecIo event semaphore at host.","iAMT0051-1":"User Notification Alert - semaphore at ME.","iAMT0051-2":"User Notification Alert - SecIo event - semaphore timeout.",iAMT0052:"User Notification Alert - KVM session event.","iAMT0052-0":"User Notification Alert - KVM session requested.","iAMT0052-1":"User Notification Alert - KVM session started.","iAMT0052-2":"User Notification Alert - KVM session stopped.","iAMT0052-3":"User Notification Alert - KVM data channel.",iAMT0053:"User Notification Alert - RCS notification.","iAMT0053-50":"User Notification Alert - RCS notification (HW button pressed. Connection initiated automatically).","iAMT0053-52":"User Notification Alert - RCS notification (HW button pressed. Connection wasn't initiated automatically).","iAMT0053-53":"User Notification Alert - RCS notification (Contracts updated).",iAMT0054:"User Notification Alert - WLAN notification. Wireless Profile sync enablement state changed.",iAMT0055:"User Notification Alert - Provisioning state change notification.","iAMT0055-0":"User Notification Alert - Provisioning state change notification - Pre-configuration.","iAMT0055-1":"User Notification Alert - Provisioning state change notification - In configuration.","iAMT0055-2":"User Notification Alert - Provisioning state change notification - Post-configuration.","iAMT0055-3":"User Notification Alert - Provisioning state change notification - Unprovision process has started.",iAMT0056:"User Notification Alert - System Defense change notification.",iAMT0057:"User Notification Alert - Network State change notification.",iAMT0058:"User Notification Alert - Remote Access change notification.","iAMT0058-1":"User Notification Alert - Remote Access change notification - tunnel is closed.",iAMT0059:"User Notification Alert - KVM enabled event.","iAMT0059-0":"User Notification Alert - KVM enabled event - KVM disabled.","iAMT0059-1":"User Notification Alert - KVM enabled event - KVM enabled (both from MEBx and PTNI).",iAMT0060:"User Notification Alert - SecIO configuration event.",iAMT0061:"ME FW reset occurred.",iAMT0062:"User Notification Alert - IpSyncEnabled event.","iAMT0062-0":"User Notification Alert - IpSyncEnabled event - IpSync disabled.","iAMT0062-1":"User Notification Alert - IpSyncEnabled event - IpSync enabled.",iAMT0063:"User Notification Alert - HTTP Proxy sync enabled event.","iAMT0063-0":"User Notification Alert - HTTP Proxy sync enabled event - HTTP Proxy Sync disabled.","iAMT0063-1":"User Notification Alert - HTTP Proxy sync enabled event - HTTP Proxy Sync enabled.",iAMT0064:"User Notification Alert - User Consent event.","iAMT0064-1":"User Notification Alert - User Consent event - User Consent granted.","iAMT0064-2":"User Notification Alert - User Consent event - User Consent ended.","iAMT0067-0":"Graceful Remote Control Operation - Shutdown.","iAMT0067-1":"Graceful Remote Control Operation - Reset.","iAMT0067-2":"Graceful Remote Control Operation - Hibernate.","iAMT0068-0":"Link Protection Notification - No link protection.","iAMT0068-1":"Link Protection Notification - Passive link protection.","iAMT0068-2":"Link Protection Notification - High link protection.","iAMT0069-0":"Local Time Sync Enablement Notification - Local Time Sync Disabled.","iAMT0069-1":"Local Time Sync Enablement Notification - Local Time Sync Enabled.",iAMT0070:"Host Reset Triggered by WD Expiration Notification.",PLAT0004:"The chassis %1s was opened.",PLAT0005:"The chassis %1s was closed.",PLAT0006:"The drive bay %1s was opened.",PLAT0007:"The drive bay %1s was closed.",PLAT0008:"The I/O card area %1s was opened.",PLAT0009:"The I/O card area %1s was closed.",PLAT0010:"The processor area %1s was opened.",PLAT0011:"The processor area %1s was closed.",PLAT0012:"The LAN %1s has been disconnected.",PLAT0013:"The LAN %1s has been connected.",PLAT0016:"The permission to insert package %1s has been granted.",PLAT0017:"The permission to insert package %1s has been removed.",PLAT0018:"The fan card area %1s is open.",PLAT0019:"The fan card area %1s is closed.",PLAT0022:"The computer system %1s has detected a secure mode violation.",PLAT0024:"The computer system %1s has detected a pre-boot user password violation.",PLAT0026:"The computer system %1s has detected a pre-boot setup password violation.",PLAT0028:"The computer system %1s has detected a network boot password violation.",PLAT0030:"The computer system %1s has detected a password violation.",PLAT0032:"The management controller %1s has detected an out-of-band password violation.",PLAT0034:"The processor %1s has been added.",PLAT0035:"The processor %1s has been removed.",PLAT0036:"An over-temperature condition has been detected on the processor %1s.",PLAT0037:"An over-temperature condition has been removed on the processor %1s.",PLAT0038:"The processor %1s is operating in a degraded State.",PLAT0039:"The processor %1s is no longer operating in a degraded State.",PLAT0040:"The processor %1s has failed.",PLAT0042:"The processor %1s has failed.",PLAT0044:"The processor %1s has failed.",PLAT0046:"The processor %1s has failed.",PLAT0048:"The processor %1s has failed.",PLAT0060:"The processor %1s has been enabled.",PLAT0061:"The processor %1s has been disabled.",PLAT0062:"The processor %1s has a configuration mismatch.",PLAT0064:"A terminator has been detected on the processor %1s.",PLAT0084:"The Power Supply %1s has been added.",PLAT0085:"The Power Supply %1s has been removed.",PLAT0086:"The Power Supply %1s has failed.",PLAT0088:"Failure predicted on power supply %1s.",PLAT0096:"The input to power supply %1s has been lost or fallen out of range.",PLAT0098:"The power supply %1s is operating in an input state that is out of range.",PLAT0099:"The power supply %1s has returned to a normal input state.",PLAT0100:"The power supply %1s has lost input.",PLAT0104:"The power supply %1s has a configuration mismatch.",PLAT0106:"Power supply %1s has been disabled.",PLAT0107:"Power supply %1s has been enabled.",PLAT0108:"Power supply %1s has been power cycled.",PLAT0110:"Power supply %1s has encountered an error during power down.",PLAT0112:"Power supply %1s has lost power.",PLAT0114:"Soft power control has failed for power supply %1s.",PLAT0116:"Power supply %1s has failed.",PLAT0118:"Failure predicted on power supply %1s.",PLAT0120:"Memory subsystem failure.",PLAT0122:"DIMM missing.",PLAT0124:"Memory error detected & corrected for DIMM %1s.",PLAT0128:"Memory DIMM %1s added.",PLAT0129:"Memory DIMM %1s removed.",PLAT0130:"Memory DIMM %1s enabled.",PLAT0131:"Memory DIMM %1s disabled.",PLAT0134:"Memory parity error for DIMM %1s.",PLAT0136:"Memory scrub failure for DIMM %1s.",PLAT0138:"Memory uncorrectable error detected for DIMM %1s.",PLAT0140:"Memory sparing initiated for DIMM %1s.",PLAT0141:"Memory sparing concluded for DIMM %1s.",PLAT0142:"Memory DIMM %1s Throttled.",PLAT0144:"Memory logging limit reached for DIMM %1s.",PLAT0145:"Memory logging limit removed for DIMM %1s.",PLAT0146:"An over-temperature condition has been detected on the Memory DIMM %1s.",PLAT0147:"An over-temperature condition has been removed on the Memory DIMM %1s.",PLAT0162:"The drive %1s has been added.",PLAT0163:"The drive %1s has been removed.",PLAT0164:"The drive %1s has been disabled due to a detected fault.",PLAT0167:"The drive %1s has been enabled.",PLAT0168:"Failure predicted on drive %1s.",PLAT0170:"Hot spare enabled for %1s.",PLAT0171:"Hot spare disabled for %1s.",PLAT0172:"Consistency check has begun for %1s.",PLAT0173:"Consistency check completed for %1s.",PLAT0174:"Array %1s is in critical condition.",PLAT0176:"Array %1s has failed.",PLAT0177:"Array %1s has been restored.",PLAT0178:"Rebuild in progress for array %1s.",PLAT0179:"Rebuild completed for array %1s.",PLAT0180:"Rebuild Aborted for array %1s.",PLAT0184:"The system %1s encountered a POST error.",PLAT0186:"The system %1s encountered a firmware hang.",PLAT0188:"The system %1s encountered firmware progress.",PLAT0192:"The log %1s has been disabled.",PLAT0193:"The log %1s has been enabled.",PLAT0194:"The log %1s has been disabled.",PLAT0195:"The log %1s has been enabled.",PLAT0196:"The log %1s has been disabled.",PLAT0198:"The log %1s has been enabled.",PLAT0200:"The log %1s has been cleared.",PLAT0202:"The log %1s is full.",PLAT0203:"The log %1s is no longer full.",PLAT0204:"The log %1s is almost full.",PLAT0208:"The log %1s has a configuration error.",PLAT0210:"The system %1s has been reconfigured.",PLAT0212:"The system %1s has encountered an OEM system boot event.",PLAT0214:"The system %1s has encountered an unknown system hardware fault.",PLAT0216:"The system %1s has generated an auxiliary log entry.",PLAT0218:"The system %1s has executed a PEF action.",PLAT0220:"The system %1s has synchronized the system clock.",PLAT0222:"A diagnostic interrupt has occurred on system %1s.",PLAT0224:"A bus timeout has occurred on system %1s.",PLAT0226:"An I/O channel check NMI has occurred on system %1s.",PLAT0228:"A software NMI has occurred on system %1s.",PLAT0230:"System %1s has recovered from an NMI.",PLAT0232:"A PCI PERR has occurred on system %1s.",PLAT0234:"A PCI SERR has occurred on system %1s.",PLAT0236:"An EISA fail safe timeout occurred on system %1s.",PLAT0238:"A correctable bus error has occurred on system %1s.",PLAT0240:"An uncorrectable bus error has occurred on system %1s.",PLAT0242:"A fatal NMI error has occurred on system %1s.",PLAT0244:"A fatal bus error has occurred on system %1s.",PLAT0246:"A bus on system %1s is operating in a degraded state.",PLAT0247:"A bus on system %1s is no longer operating in a degraded state.",PLAT0248:"The power button %1s has been pressed.",PLAT0249:"The power button %1s has been released.",PLAT0250:"The sleep button %1s has been pressed.",PLAT0251:"The sleep button %1s has been released.",PLAT0252:"The reset button %1s has been pressed.",PLAT0253:"The reset button %1s has been released.",PLAT0254:"The latch to %1s has been opened.",PLAT0255:"The latch to %1s has been closed.",PLAT0256:"The service request %1s has been enabled.",PLAT0257:"The service request %1s has been completed.",PLAT0258:"Power control of system %1s has failed.",PLAT0262:"The network port %1s has been connected.",PLAT0263:"The network port %1s has been disconnected.",PLAT0266:"The connector %1s has encountered a configuration error.",PLAT0267:"The connector %1s configuration error has been repaired.",PLAT0272:"Power on for system %1s.",PLAT0274:"Power cycle hard requested for system %1s.",PLAT0276:"Power cycle soft requested for system %1s.",PLAT0278:"PXE boot requested for system %1s.",PLAT0280:"Diagnostics boot requested for system %1s.",PLAT0282:"System restart requested for system %1s.",PLAT0284:"System restart begun for system %1s.",PLAT0286:"No bootable media available for system %1s.",PLAT0288:"Non-bootable media selected for system %1s.",PLAT0290:"PXE server not found for system %1s.",PLAT0292:"User timeout on boot for system %1s.",PLAT0296:"System %1s boot from floppy initiated.",PLAT0298:"System %1s boot from local drive initiated.",PLAT0300:"System %1s boot from PXE on network port initiated.",PLAT0302:"System %1s boot diagnostics initiated.",PLAT0304:"System %1s boot from CD initiated.",PLAT0306:"System %1s boot from ROM initiated.",PLAT0312:"System %1s boot initiated.",PLAT0320:"Critical stop during OS load on system %1s.",PLAT0322:"Run-time critical stop on system %1s.",PLAT0324:"OS graceful stop on system %1s.",PLAT0326:"OS graceful shutdown begun on system %1s.",PLAT0327:"OS graceful shutdown completed on system %1s.",PLAT0328:"Agent not responding on system %1s.",PLAT0329:"Agent has begun responding on system %1s.",PLAT0330:"Fault in slot on system %1s.",PLAT0331:"Fault condition removed on system %1s.",PLAT0332:"Identifying slot on system %1s.",PLAT0333:"Identify stopped on slot for system %1s.",PLAT0334:"Package installed in slot for system %1s.",PLAT0336:"Slot empty system %1s.",PLAT0338:"Slot in system %1s is ready for installation.",PLAT0340:"Slot in system %1s is ready for removal.",PLAT0342:"Power is off on slot of system %1s.",PLAT0344:"Power is on for slot of system %1s.",PLAT0346:"Removal requested for slot of system %1s.",PLAT0348:"Interlock activated on slot of system %1s.",PLAT0349:"Interlock de-asserted on slot of system %1s.",PLAT0350:"Slot disabled on system %1s.",PLAT0351:"Slot enabled on system %1s.",PLAT0352:"Slot of system %1s holds spare.",PLAT0353:"Slot of system %1s no longer holds spare.",PLAT0354:"Computer system %1s enabled.",PLAT0356:"Computer system %1s is in sleep - light mode.",PLAT0358:"Computer system %1s is in hibernate.",PLAT0360:"Computer system %1s is in standby.",PLAT0362:"Computer system %1s is in soft off mode.",PLAT0364:"Computer system %1s is in hard off mode.",PLAT0366:"Computer system %1s is sleeping.",PLAT0368:"Watchdog timer expired for %1s.",PLAT0370:"Reboot of system initiated by watchdog %1s.",PLAT0372:"Powering off system initiated by watchdog %1s.",PLAT0374:"Power cycle of system initiated by watchdog %1s.",PLAT0376:"Watchdog timer interrupt occurred for %1s.",PLAT0378:"A page alert has been generated for system %1s.",PLAT0380:"A LAN alert has been generated for system %1s.",PLAT0382:"An event trap has been generated for system %1s.",PLAT0384:"An SNMP trap has been generated for system %1s.",PLAT0390:"%1s detected as present.",PLAT0392:"%1s detected as absent.",PLAT0394:"%1s has been disabled.",PLAT0395:"%1s has been enabled.",PLAT0396:"Heartbeat lost for LAN %1s.",PLAT0397:"Heartbeat detected for LAN %1s.",PLAT0398:"Sensor %1s is unavailable or degraded on management system.",PLAT0399:"Sensor %1s has returned to normal on management system.",PLAT0400:"Controller %1s is unavailable or degraded on management system.",PLAT0401:"Controller %1s has returned to normal on management system.",PLAT0402:"Management system %1s is off-line.",PLAT0404:"Management system %1s is disabled.",PLAT0405:"Management system %1s is enabled.",PLAT0406:"Sensor %1s has failed on management system.",PLAT0408:"FRU %1s has failed on management system.",PLAT0424:"The battery %1s is critically low.",PLAT0427:"The battery %1s is no longer critically low.",PLAT0430:"The battery %1s has been removed from unit.",PLAT0431:"The battery %1s has been added.",PLAT0432:"The battery %1s has failed.",PLAT0434:"Session audit is deactivated on system %1s.",PLAT0435:"Session audit is activated on system %1s.",PLAT0436:"A hardware change occurred on system %1s.",PLAT0438:"A firmware or software change occurred on system %1s.",PLAT0440:"A hardware incompatibility was detected on system %1s.",PLAT0442:"A firmware or software incompatibility was detected on system %1s.",PLAT0444:"Invalid or unsupported hardware was detected on system %1s.",PLAT0446:"Invalid or unsupported firmware or software was detected on system %1s.",PLAT0448:"A successful hardware change was detected on system %1s.",PLAT0450:"A successful software or firmware change was detected on system %1s.",PLAT0464:"FRU %1s not installed on system.",PLAT0465:"FRU %1s installed on system.",PLAT0466:"Activation requested for FRU %1s on system.",PLAT0467:"FRU %1s on system is active.",PLAT0468:"Activation in progress for FRU %1s on system.",PLAT0470:"Deactivation request for FRU %1s on system.",PLAT0471:'FRU %1s on system is in standby or "hot spare" state.',PLAT0472:"Deactivation in progress for FRU %1s on system.",PLAT0474:"Communication lost with FRU %1s on system.",PLAT0476:"Numeric sensor %1s going low (lower non-critical).",PLAT0478:"Numeric sensor %1s going high (lower non-critical).",PLAT0480:"Numeric sensor %1s going low (lower critical).",PLAT0482:"Numeric sensor %1s going high (lower critical).",PLAT0484:"Numeric sensor %1s going low (lower non-recoverable).",PLAT0486:"Numeric sensor %1s going high (lower non-critical).",PLAT0488:"Numeric sensor %1s going low (upper non-critical).",PLAT0490:"Numeric sensor %1s going high (upper non-critical).",PLAT0492:"Numeric sensor %1s going low (upper critical).",PLAT0494:"Numeric sensor %1s going high (upper critical).",PLAT0496:"Numeric sensor %1s going low (upper non-recoverable).",PLAT0498:"Numeric sensor %1s going high (upper non-recoverable).",PLAT0500:"Sensor %1s has transitioned to idle.",PLAT0502:"Sensor %1s has transitioned to active.",PLAT0504:"Sensor %1s has transitioned to busy.",PLAT0508:"Sensor %1s has asserted.",PLAT0509:"Sensor %1s has de-asserted.",PLAT0510:"Sensor %1s is asserting predictive failure.",PLAT0511:"Sensor %1s is de-asserting predictive failure.",PLAT0512:"Sensor %1s has indicated limit exceeded.",PLAT0513:"Sensor %1s has indicated limit no longer exceeded.",PLAT0514:"Sensor %1s has indicated performance met.",PLAT0516:"Sensor %1s has indicated performance lags.",PLAT0518:"Sensor %1s has transitioned to normal state.",PLAT0520:"Sensor %1s has transitioned from normal to non-critical state.",PLAT0522:"Sensor %1s has transitioned to critical from a less severe state.",PLAT0524:"Sensor %1s has transitioned to non-recoverable from a less severe state.",PLAT0526:"Sensor %1s has transitioned to non-critical from a more severe state.",PLAT0528:"Sensor %1s has transitioned to critical from a non-recoverable state.",PLAT0530:"Sensor %1s has transitioned to non-recoverable.",PLAT0532:"Sensor %1s indicates a monitor state.",PLAT0534:"Sensor %1s has an informational state.",PLAT0536:"Device %1s has been added.",PLAT0537:"Device %1s has been removed from unit.",PLAT0538:"Device %1s has been enabled.",PLAT0539:"Device %1s has been disabled.",PLAT0540:"Sensor %1s has indicated a running state.",PLAT0544:"Sensor %1s has indicated a power off state.",PLAT0546:"Sensor %1s has indicated an on-line state.",PLAT0548:"Sensor %1s has indicated an off-line state.",PLAT0550:"Sensor %1s has indicated an off-duty state.",PLAT0552:"Sensor %1s has indicated a degraded state.",PLAT0554:"Sensor %1s has indicated a power save state.",PLAT0556:"Sensor %1s has indicated an install error.",PLAT0558:"Redundancy %1s has been lost.",PLAT0560:"Redundancy %1s has been reduced.",PLAT0561:"Redundancy %1s has been restored.",PLAT0562:"%1s has transitioned to a D0 power state.",PLAT0564:"%1s has transitioned to a D1 power state.",PLAT0566:"%1s has transitioned to a D2 power state.",PLAT0568:"%1s has transitioned to a D3 power state.",PLAT0720:"The System %1s encountered firmware progress - memory initialization entry.",PLAT0721:"The System %1s encountered firmware progress - memory initialization exit.",PLAT0722:"The System %1s encountered firmware progress - hard drive initialization entry.",PLAT0723:"The System %1s encountered firmware progress - hard drive initialization exit.",PLAT0724:"The System %1s encountered firmware progress - user authentication.",PLAT0728:"The System %1s encountered firmware progress - USR resource configuration entry.",PLAT0729:"The System %1s encountered firmware progress - USR resource configuration exit.",PLAT0730:"The System %1s encountered firmware progress - PCI recource configuration entry.",PLAT0731:"The System %1s encountered firmware progress - PCI recource configuration exit.",PLAT0732:"The System %1s encountered firmware progress - Option ROM initialization entry.",PLAT0733:"The System %1s encountered firmware progress - Option ROM initialization entry exit.",PLAT0734:"The System %1s encountered firmware progress -video initialization entry entry.",PLAT0735:"The System %1s encountered firmware progress - video initialization entry exit.",PLAT0736:"The System %1s encountered firmware progress - cache initialization entry.",PLAT0737:"The System %1s encountered firmware progress - cache initialization exit.",PLAT0738:"The System %1s encountered firmware progress - keyboard controller initialization entry.",PLAT0739:"The System %1s encountered firmware progress - keyboard controller initialization exit.",PLAT0740:"The System %1s encountered firmware progress - motherboard initialization entry.",PLAT0741:"The System %1s encountered firmware progress - motherboard initialization exit.",PLAT0742:"The System %1s encountered firmware progress - floppy disk initialization entry.",PLAT0743:"The System %1s encountered firmware progress - floppy disk initialization exit.",PLAT0744:"The System %1s encountered firmware progress - keyboard test entry.",PLAT0745:"The System %1s encountered firmware progress - keyboard test exit.",PLAT0746:"The System %1s encountered firmware progress - pointing device test entry.",PLAT0747:"The System %1s encountered firmware progress - pointing device test exit.",PLAT0750:"The System %1s encountered firmware progress - dock enable entry.",PLAT0751:"The System %1s encountered firmware progress - dock enable exit.",PLAT0752:"The System %1s encountered firmware progress - dock disable entry.",PLAT0753:"The System %1s encountered firmware progress - dock disable exit.",PLAT0760:"The System %1s encountered firmware progress - start OS boot process.",PLAT0762:"The System %1s encountered firmware progress - call OS wake vector.",PLAT0764:"The System %1s encountered firmware progress - unrecoverable keyboard failure.",PLAT0766:"The System %1s encountered firmware progress - no video device detected.",PLAT0768:"The System %1s encountered firmware progress - SMART alert detected on drive.",PLAT0770:"The System %1s encountered firmware progress - unrecoverable boot device failure.",PLAT0789:"Corrupt BIOS detected.",PLAT0790:"The System %1s encountered PCI configuration failure.",PLAT0791:"The System %1s encountered a video subsystem failure.",PLAT0792:"The System %1s encountered a storage subsystem failure.",PLAT0793:"The System %1s encountered a USB subsystem failure.",PLAT0794:"The System %1s has detected no memory in the system.",PLAT0795:"The System %1s encountered a motherboard failure.",PLAT0796:"The System %1s encountered a memory Regulator Voltage Bad.",PLAT0797:"%1s PCI reset is not deasserting.",PLAT0798:"%1s Non-Motherboard Regulator Failure.",PLAT0799:"%1s Power Supply Cable failure.",PLAT0800:"%1s Motherboard regulator failure.",PLAT0801:"%1s System component compatibility mismatch."};module.exports=lme_heci;
\ No newline at end of file
agents/modules_meshcmd_min/amt-mei.min.js
new
+1
@@ -0,0 +1 @@
1
+var Q=require("queue");function amt_heci(){var d=require("events").inherits(this);d.createEvent("error");var u=require("heci");var y=function(F){try{require("MeshAgent").SendCommand({action:"msg",type:"console",value:F})}catch(E){}};this._ObjectID="pthi";this._rq=new Q();this._setupPTHI=function b(){this._amt=u.create();this._amt.BiosVersionLen=65;this._amt.UnicodeStringLen=20;this._amt.Parent=this;this._amt.on("error",function F(H){if(this.Parent._rq.isEmpty()){this.Parent.emit("error",H)}else{var J=this.Parent._rq.deQueue();var I=J.optional;var G=J.func;I.unshift({Status:-1});G.apply(this.Parent,I);if(!this.Parent._rq.isEmpty()){this.connect(u.GUIDS.AMT,{noPipeline:1})}}});this._amt.on("connect",function E(){this.on("data",function G(I){var J=this.Parent.getCommand(I);var L=this.Parent._rq.deQueue();var K=L.optional;var H=L.func;K.unshift(J);H.apply(this.Parent,K);if(this.Parent._rq.isEmpty()){this.Parent._amt.disconnect();this.Parent._amt=null}else{this.write(this.Parent._rq.peekQueue().send)}});this.write(this.Parent._rq.peekQueue().send)})};function B(E){var F=E.indexOf("\0");if(F>=0){return E.substring(0,F)}else{return E}}this.getCommand=function g(E){var F=E.length==0?(this._rq.peekQueue().cmd|8388608):E.readUInt32LE(4);var G={IsResponse:(F&8388608)==8388608?true:false,Command:(F&8388607),Status:E.length!=0?E.readUInt32LE(12):-1,Data:E.length!=0?E.slice(16):null};return(G)};this.sendCommand=function x(){if(arguments.length<3||typeof(arguments[0])!="number"||typeof(arguments[1])!="object"||typeof(arguments[2])!="function"){throw ("invalid parameters")}var E=[];for(var G=3;G<arguments.length;++G){E.push(arguments[G])}var F=Buffer.from("010100000000000000000000","hex");F.writeUInt32LE(arguments[0]|67108864,4);F.writeUInt32LE(arguments[1]==null?0:arguments[1].length,8);this._rq.enQueue({cmd:arguments[0],func:arguments[2],optional:E,send:(arguments[1]==null?F:Buffer.concat([F,arguments[1]]))});if(!this._amt){this._setupPTHI();this._amt.connect(u.GUIDS.AMT,{noPipeline:1})}};this.getVersion=function t(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(26,null,function(J,I,L){if(J.Status==0){var K,H=J.Data,N={BiosVersion:H.slice(0,this._amt.BiosVersionLen).toString(),Versions:[]},M=H.slice(this._amt.BiosVersionLen+4);for(K=0;K<H.readUInt32LE(this._amt.BiosVersionLen);++K){N.Versions[K]={Description:M.slice(2,M.readUInt16LE(0)+2).toString(),Version:M.slice(4+this._amt.UnicodeStringLen,4+this._amt.UnicodeStringLen+M.readUInt16LE(2+this._amt.UnicodeStringLen)).toString()};M=M.slice(4+(2*this._amt.UnicodeStringLen))}if(N.BiosVersion.indexOf("\0")>0){N.BiosVersion=N.BiosVersion.substring(0,N.BiosVersion.indexOf("\0"))}L.unshift(N)}else{L.unshift(null)}I.apply(this,L)},E,G)};function D(G,F){if((F==null)&&(typeof(F)!="number")){return null}if(G==null){G=""}var H="";for(var E=0;E<F-G.length;E++){H+="0"}return H+G}this.getUuid=function s(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(92,null,function(I,H,J){if(I.Status==0){var K={};K.uuid=[D(I.Data.readUInt32LE(0).toString(16),8),D(I.Data.readUInt16LE(4).toString(16),4),D(I.Data.readUInt16LE(6).toString(16),4),D(I.Data.readUInt16BE(8).toString(16),4),D(I.Data.slice(10).toString("hex").toLowerCase(),12)].join("-");J.unshift(K)}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getProvisioningState=function q(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(17,null,function(I,H,J){if(I.Status==0){var K={};K.state=I.Data.readUInt32LE(0);if(K.state<3){K.stateStr=["PRE","IN","POST"][K.state]}J.unshift(K)}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getProvisioningMode=function p(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(8,null,function(I,H,J){if(I.Status==0){var K={};K.mode=I.Data.readUInt32LE(0);if(K.mode<4){K.modeStr=["NONE","ENTERPRISE","SMALL_BUSINESS","REMOTE_ASSISTANCE"][K.mode]}K.legacy=I.Data.readUInt32LE(4)==0?false:true;J.unshift(K)}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getEHBCState=function j(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(132,null,function(I,H,J){if(I.Status==0){J.unshift({EHBC:I.Data.readUInt32LE(0)!=0})}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getControlMode=function h(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(107,null,function(I,H,J){if(I.Status==0){var K={};K.controlMode=I.Data.readUInt32LE(0);if(K.controlMode<3){K.controlModeStr=["NONE_RPAT","CLIENT","ADMIN","REMOTE_ASSISTANCE"][K.controlMode]}J.unshift(K)}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getMACAddresses=function n(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(37,null,function(I,H,J){if(I.Status==0){J.unshift({DedicatedMAC:I.Data.slice(0,6).toString("hex:"),HostMAC:I.Data.slice(6,12).toString("hex:")})}else{J.unshift({DedicatedMAC:null,HostMAC:null})}H.apply(this,J)},E,G)};this.getDnsSuffix=function i(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(54,null,function(I,H,J){if(I.Status==0){var K=I.Data.readUInt16LE(0);if(K>0){J.unshift(I.Data.slice(2,2+K).toString())}else{J.unshift(null)}}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getHashHandles=function k(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(44,null,function(I,H,K){var L=[];if(I.Status==0){var M=I.Data.readUInt32LE(0);for(var J=0;J<M;++J){L.push(I.Data.readUInt32LE(4+(4*J)))}}K.unshift(L);H.apply(this,K)},E,G)};this.getCertHashEntry=function f(G,E){var I=[];for(var H=2;H<arguments.length;++H){I.push(arguments[H])}var F=Buffer.alloc(4);F.writeUInt32LE(G,0);this.sendCommand(45,F,function(K,J,L){if(K.Status==0){var M={};M.isDefault=K.Data.readUInt32LE(0);M.isActive=K.Data.readUInt32LE(4);M.hashAlgorithm=K.Data.readUInt8(72);if(M.hashAlgorithm<4){M.hashAlgorithmStr=["MD5","SHA1","SHA256","SHA512"][M.hashAlgorithm];M.hashAlgorithmSize=[16,20,32,64][M.hashAlgorithm];M.certificateHash=K.Data.slice(8,8+M.hashAlgorithmSize).toString("hex")}M.name=K.Data.slice(73+2,73+2+K.Data.readUInt16LE(73)).toString();L.unshift(M)}else{L.unshift(null)}J.apply(this,L)},E,I)};this.getCertHashEntries=function e(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.getHashHandles(function(J,I,K){var H=[];this.getCertHashEntry(J.shift(),this._getHashEntrySink,I,K,H,J)},E,G)};this._getHashEntrySink=function a(I,F,H,E,G){E.push(I);if(G.length>0){this.getCertHashEntry(G.shift(),this._getHashEntrySink,F,H,E,G)}else{H.unshift(E);F.apply(this,H)}};this.getLocalSystemAccount=function m(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(103,Buffer.alloc(40),function(I,H,J){if(I.Status==0&&I.Data.length==68){J.unshift({user:B(I.Data.slice(0,33).toString()),pass:B(I.Data.slice(33,67).toString()),raw:I.Data})}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getLanInterfaceSettings=function l(H,E){var J=[];for(var F=2;F<arguments.length;++F){J.push(arguments[F])}var G=Buffer.alloc(4);G.writeUInt32LE(H);this.sendCommand(72,G,function I(M,L,O){if(M.Status==0){var N={};N.enabled=M.Data.readUInt32LE(0);N.dhcpEnabled=M.Data.readUInt32LE(8);switch(M.Data[12]){case 1:N.dhcpMode="ACTIVE";break;case 2:N.dhcpMode="PASSIVE";break;default:N.dhcpMode="UNKNOWN";break}N.mac=M.Data.slice(14).toString("hex:");var K=M.Data.readUInt32LE(4);N.address=((K>>24)&255)+"."+((K>>16)&255)+"."+((K>>8)&255)+"."+(K&255);O.unshift(N);L.apply(this,O)}else{O.unshift(null);L.apply(this,O)}},E,J)};this.unprovision=function C(H,E){var I=[];for(var G=2;G<arguments.length;++G){I.push(arguments[G])}var F=Buffer.alloc(4);F.writeUInt32LE(H,0);this.sendCommand(16,F,function(K,J,L){L.unshift(K.Status);J.apply(this,L)},E,I)};this.startConfiguration=function z(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(41,data,function(H,G,I){I.unshift(H.Status);G.apply(this,I)},callback,F)};this.stopConfiguration=function A(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(94,data,function(H,G,I){I.unshift(H.Status);G.apply(this,I)},callback,F)};this.openUserInitiatedConnection=function w(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(68,data,function(H,G,I){I.unshift(H.Status);G.apply(this,I)},callback,F)};this.closeUserInitiatedConnection=function c(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(69,data,function(H,G,I){I.unshift(H.Status);G.apply(this,I)},callback,F)};this.getRemoteAccessConnectionStatus=function r(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(70,data,function(H,G,J){if(H.Status==0){var I=v.slice(14,H.Data.readUInt16LE(12)+14).toString();J.unshift({status:H.Status,networkStatus:H.Data.readUInt32LE(0),remoteAccessStatus:H.Data.readUInt32LE(4),remoteAccessTrigger:H.Data.readUInt32LE(8),mpsHostname:I,raw:H.Data})}else{J.unshift({status:H.Status})}G.apply(this,J)},callback,F)};this.getProtocolVersion=function o(E){var G=[];for(var F=1;F<arguments.length;++F){opt.push(arguments[F])}u.doIoctl(u.IOCTL.HECI_VERSION,Buffer.alloc(5),Buffer.alloc(5),function(M,H,L,I,J){if(M==0){var K=H.readUInt8(0).toString()+"."+H.readUInt8(1).toString()+"."+H.readUInt8(2).toString()+"."+H.readUInt16BE(3).toString();J.unshift(K);I.apply(L,J)}else{J.unshift(null);I.apply(L,J)}},this,E,G)}}module.exports=amt_heci;
\ No newline at end of file
agents/modules_meshcmd_min/amt-redir-duk.min.js
new
+1
@@ -0,0 +1 @@
1
+module.exports=function CreateAmtRedirect(a){var b={};b.m=a;a.parent=b;b.State=0;b.net=require("net");b.tls=require("tls");b.socket=null;b.host=null;b.port=0;b.user=null;b.pass=null;b.connectstate=0;b.protocol=a.protocol;b.xtlsoptions=null;b.amtaccumulator=null;b.amtsequence=1;b.amtkeepalivetimer=null;b.authuri="/RedirectionService";b.digestRealmMatch=null;b.onStateChanged=null;b.Debug=function(d){console.log(d)};var c=null;b.Start=function(d,f,k,e,g,h,j){b.host=d;b.port=f;b.user=k;b.pass=e;b.xtls=g;b.xtlsoptions=j;b.xtlsFingerprint=h;b.connectstate=0;if(g==true){b.socket=b.tls.connect({host:d,port:f,rejectUnauthorized:false,checkServerIdentity:b.onCheckServerIdentity},b.xxOnSocketConnected)}else{b.socket=b.net.createConnection({host:d,port:f},b.xxOnSocketConnected)}b.socket.on("data",b.xxOnSocketData);b.socket.on("close",b.xxOnSocketClosed);b.socket.on("error",b.xxOnSocketClosed);b.xxStateChange(1)};b.onCheckServerIdentity=function(d){var e=d[0].fingerprint.split(":").join("").toLowerCase();if((b.xtlsFingerprint!=null)&&(b.xtlsFingerprint!=e)){console.log("Invalid TLS Cert, SHA384: "+e);process.exit(2);return}else{if(b.xtlsFingerprint==null){b.xtlsFingerprint=e;console.log("TLS Cert SHA384: "+e)}}};b.xxOnSocketConnected=function(){if(b.socket==null){return}if(c&&c.redirtrace){console.log("REDIR-CONNECTED")}b.xxStateChange(2);if(b.protocol==1){b.xxSend(b.RedirectStartSol)}else{if(b.protocol==2){b.xxSend(b.RedirectStartKvm)}else{if(b.protocol==3){b.xxSend(b.RedirectStartIder)}}}};b.xxOnSocketData=function(n){if(!n||b.connectstate==-1){return}if(c&&c.redirtrace){console.log("REDIR-RECV("+n.length+"): "+n.toString("hex"))}if((b.protocol==2||b.protocol==3)&&b.connectstate==1){return b.m.ProcessData(n)}if(b.amtaccumulator==null){b.amtaccumulator=n}else{b.amtaccumulator=Buffer.concat(b.amtaccumulator,n)}while(b.amtaccumulator!=null){var j=0;switch(b.amtaccumulator[0]){case 17:if(b.amtaccumulator.length<4){return}var z=b.amtaccumulator[1];switch(z){case 0:if(b.amtaccumulator.length<13){return}var s=b.amtaccumulator[12];if(b.amtaccumulator.length<13+s){return}b.xxSend(String.fromCharCode(19,0,0,0,0,0,0,0,0));j=(13+s);break;default:b.Stop();break}break;case 20:if(b.amtaccumulator.length<9){return}var f=b.amtaccumulator.readInt32LE(5);if(b.amtaccumulator.length<9+f){return}var y=b.amtaccumulator[1];var g=b.amtaccumulator[4];var d=[];for(i=0;i<f;i++){d.push(b.amtaccumulator[9+i])}var e=b.amtaccumulator.slice(9,9+f);j=9+f;if(g==0){if(d.indexOf(4)>=0){b.xxSend(String.fromCharCode(19,0,0,0,4)+IntToStrX(b.user.length+b.authuri.length+8)+String.fromCharCode(b.user.length)+b.user+String.fromCharCode(0,0)+String.fromCharCode(b.authuri.length)+b.authuri+String.fromCharCode(0,0,0,0))}else{if(d.indexOf(3)>=0){b.xxSend(String.fromCharCode(19,0,0,0,3)+IntToStrX(b.user.length+b.authuri.length+7)+String.fromCharCode(b.user.length)+b.user+String.fromCharCode(0,0)+String.fromCharCode(b.authuri.length)+b.authuri+String.fromCharCode(0,0,0))}else{if(d.indexOf(1)>=0){b.xxSend(String.fromCharCode(19,0,0,0,1)+IntToStrX(b.user.length+b.pass.length+2)+String.fromCharCode(b.user.length)+b.user+String.fromCharCode(b.pass.length)+b.pass)}else{b.Stop()}}}}else{if((g==3||g==4)&&y==1){var m=0;var w=e[m];var v=e.slice(m+1,m+1+w).toString();m+=(w+1);if(b.digestRealmMatch&&(b.digestRealmMatch!=v)){b.Stop();return}var r=e[m];var q=e.slice(m+1,m+1+r).toString();m+=(r+1);var u=0;var t=null;var k=b.xxRandomValueHex(32);var x="00000002";var p="";if(g==4){u=e[m];t=e.slice(m+1,m+1+u).toString();m+=(u+1);p=x+":"+k+":"+t+":"}var o=hex_md5(hex_md5(b.user+":"+v+":"+b.pass)+":"+q+":"+p+hex_md5("POST:"+b.authuri));var A=b.user.length+v.length+q.length+b.authuri.length+k.length+x.length+o.length+7;if(g==4){A+=(t.length+1)}var h=Buffer.concat([new Buffer([19,0,0,0,g]),new Buffer([A&255,(A>>8)&255,0,0]),new Buffer([b.user.length]),new Buffer(b.user),new Buffer([v.length]),new Buffer(v),new Buffer([q.length]),new Buffer(q),new Buffer([b.authuri.length]),new Buffer(b.authuri),new Buffer([k.length]),new Buffer(k),new Buffer([x.length]),new Buffer(x),new Buffer([o.length]),new Buffer(o)]);if(g==4){h=Buffer.concat([h,new Buffer([t.length]),new Buffer(t)])}b.xxSend(h)}else{if(y==0){if(b.protocol==1){}if(b.protocol==2){b.xxSend(new Buffer([64,0,0,0,0,0,0,0]))}if(b.protocol==3){b.connectstate=1;b.xxStateChange(3)}}else{b.Stop()}}}break;case 33:if(b.amtaccumulator.length<23){break}j=23;b.xxSend(String.fromCharCode(39,0,0,0)+ToIntStr(b.amtsequence++)+String.fromCharCode(0,0,27,0,0,0));if(b.protocol==1){b.amtkeepalivetimer=setInterval(b.xxSendAmtKeepAlive,2000)}b.connectstate=1;b.xxStateChange(3);break;case 41:if(b.amtaccumulator.length<10){break}j=10;break;case 42:if(b.amtaccumulator.length<10){break}var l=(10+((b.amtaccumulator[9]&255)<<8)+(b.amtaccumulator[8]&255));if(b.amtaccumulator.length<l){break}b.m.ProcessData(b.amtaccumulator.substring(10,l));j=l;break;case 43:if(b.amtaccumulator.length<8){break}j=8;break;case 65:if(b.amtaccumulator.length<8){break}b.connectstate=1;b.m.Start();if(b.amtaccumulator.length>8){b.m.ProcessData(b.amtaccumulator.substring(8))}j=b.amtaccumulator.length;break;default:console.log("Unknown Intel AMT command: "+b.amtaccumulator[0]+" acclen="+b.amtaccumulator.length);b.Stop();return}if(j==0){return}if(j==b.amtaccumulator.length){b.amtaccumulator=null}else{b.amtaccumulator=b.amtaccumulator.slice(j)}}};b.xxSend=function(d){if(c&&c.redirtrace){console.log("REDIR-SEND("+d.length+"): "+rstr2hex(d))}if(typeof d=="string"){b.socket.write(new Buffer(d,"binary"))}else{b.socket.write(d)}};b.Send=function(d){if(b.socket==null||b.connectstate!=1){return}if(b.protocol==1){b.xxSend(String.fromCharCode(40,0,0,0)+ToIntStr(b.amtsequence++)+ToShortStr(d.length)+d)}else{b.xxSend(d)}};b.xxSendAmtKeepAlive=function(){if(b.socket==null){return}b.xxSend(String.fromCharCode(43,0,0,0)+ToIntStr(b.amtsequence++))};b.xxRandomValueHex=function(f){var g=[],e=Math.floor(f/2);for(var d=0;d<e;d++){g.push(b.tls.generateRandomInteger("0","255"))}return new Buffer(g).toString("hex")};b.xxOnSocketClosed=function(){b.socket=null;if(c&&c.redirtrace){console.log("REDIR-CLOSED")}b.Stop()};b.xxStateChange=function(d){if(b.State==d){return}b.State=d;b.m.xxStateChange(b.State);if(b.onStateChanged!=null){b.onStateChanged(b,b.State)}};b.Stop=function(){if(c&&c.redirtrace){console.log("REDIR-CLOSED")}b.xxStateChange(0);b.connectstate=-1;b.amtaccumulator="";if(b.socket!=null){b.socket.destroy();b.socket=null}if(b.amtkeepalivetimer!=null){clearInterval(b.amtkeepalivetimer);b.amtkeepalivetimer=null}};b.RedirectStartSol=new Buffer([16,0,0,0,83,79,76,32]);b.RedirectStartKvm=new Buffer([16,1,0,0,75,86,77,82]);b.RedirectStartIder=new Buffer([16,0,0,0,73,68,69,82]);return b};function ToIntStr(a){return String.fromCharCode((a&255),((a>>8)&255),((a>>16)&255),((a>>24)&255))}function ToShortStr(a){return String.fromCharCode((a&255),((a>>8)&255))}function ShortToStr(a){return String.fromCharCode((a>>8)&255,a&255)}function ShortToStrX(a){return String.fromCharCode(a&255,(a>>8)&255)}function IntToStr(a){return String.fromCharCode((a>>24)&255,(a>>16)&255,(a>>8)&255,a&255)}function IntToStrX(a){return String.fromCharCode(a&255,(a>>8)&255,(a>>16)&255,(a>>24)&255)}var md5hasher=require("MD5Stream").create();function hex_md5(b){return md5hasher.syncHash(b).toString("hex").toLowerCase()};
\ No newline at end of file
agents/modules_meshcmd_min/amt-scanner.min.js
new
+1
@@ -0,0 +1 @@
1
+function AMTScanner(){var a=require("events").inherits(this);a.createEvent("found");this.dgram=require("dgram");this.buildRmcpPing=function(c){var b=Buffer.from("06000006000011BE80000000","hex");b[9]=c;return b};this.parseRmcpPacket=function(h,b,g,d){if(b==null||b.length<20){return}var f={};if(((b[12]==0)||(b[13]!=0)||(b[14]!=1)||(b[15]!=87))&&(b[21]&32)){f.servertag=b[9];f.minorVersion=b[18]&15;f.majorVersion=(b[18]>>4)&15;f.provisioningState=b[19]&3;var e=(b[16]*256)+b[17];var c=((b[19]&4)!=0)?true:false;f.openPorts=[e];f.address=g.address;if(c==true){f.openPorts=[16992,16993]}if(d!==undefined){d(h,f)}}};this.parseIPv4Range=function(f){if(f==undefined||f==null){return null}var g=f.split("-");if(g.length==2){return{min:this.parseIpv4Addr(g[0]),max:this.parseIpv4Addr(g[1])}}g=f.split("/");if(g.length==2){var c=this.parseIpv4Addr(g[0]),e=parseInt(g[1]),d=0;if(e<=16||e>32){return null}e=32-e;for(var b=0;b<e;b++){d=(d<<1);d++}return{min:c&(4294967295-d),max:(c&(4294967295-d))+d}}g=this.parseIpv4Addr(f);if(g==null){return null}return{min:g,max:g}};this.parseIpv4Addr=function(b){var c=b.split(".");if(c.length==4){return(parseInt(c[0])<<24)+(parseInt(c[1])<<16)+(parseInt(c[2])<<8)+(parseInt(c[3])<<0)}return null};this.IPv4NumToStr=function(b){return((b>>24)&255)+"."+((b>>16)&255)+"."+((b>>8)&255)+"."+(b&255)};this.scan=function(d,g){var c=this.parseIPv4Range(d);var e=this.buildRmcpPing(0);var f=this.dgram.createSocket({type:"udp4"});f.parent=this;f.scanResults=[];f.on("error",function(i){console.log("Error:"+i)});f.on("message",function(i,j){if(j.size>4){this.parent.parseRmcpPacket(this,i,j,function(l,k){l.scanResults.push(k)})}});f.on("listening",function(){for(var j=c.min;j<=c.max;j++){f.send(e,623,f.parent.IPv4NumToStr(j))}});f.bind({address:"0.0.0.0",port:0,exclusive:true});var h=setTimeout(function b(){f.close();f.parent.emit("found",f.scanResults);delete f},g)}}module.exports=AMTScanner;
\ No newline at end of file
agents/modules_meshcmd_min/amt-script.min.js
new
+1
@@ -0,0 +1 @@
1
+script_functionTable1=["nop","jump","set","print","dialog","getitem","substr","indexof","split","join","length","jsonparse","jsonstr","add","substract","parseint","wsbatchenum","wsput","wscreate","wsdelete","wsexec","scriptspeed","wssubscribe","wsunsubscribe","readchar","signwithdummyca"];script_functionTable2=["encodeuri","decodeuri","passwordcheck","atob","btoa","hex2str","str2hex","random","md5","maketoarray","readshort","readshortx","readint","readsint","readintx","shorttostr","shorttostrx","inttostr","inttostrx"];script_functionTableX2=[encodeURI,decodeURI,passwordcheck,atob,btoa,hex2rstr,rstr2hex,random,rstr_md5,MakeToArray,ReadShort,ReadShortX,ReadInt,ReadSInt,ReadIntX,ShortToStr,ShortToStrX,IntToStr,IntToStrX];function MakeToArray(a){if(!a||a==null||typeof a=="object"){return a}return[a]}function ReadShort(b,a){return(b[a]<<8)+b[a+1]}function ReadShortX(b,a){return(b[a+1]<<8)+b[a]}function ReadInt(b,a){return(b[a]*16777216)+(b[a+1]<<16)+(b[a+2]<<8)+b[a+3]}function ReadSInt(b,a){return(b[a]<<24)+(b[a+1]<<16)+(b[a+2]<<8)+b[a+3]}function ReadIntX(b,a){return(b[a+3]*16777216)+(b[a+2]<<16)+(b[a+1]<<8)+b[a]}function ShortToStr(a){return String.fromCharCode((a>>8)&255,a&255)}function ShortToStrX(a){return String.fromCharCode(a&255,(a>>8)&255)}function IntToStr(a){return String.fromCharCode((a>>24)&255,(a>>16)&255,(a>>8)&255,a&255)}function IntToStrX(a){return String.fromCharCode(a&255,(a>>8)&255,(a>>16)&255,(a>>24)&255)}function btoa(a){return Buffer.from(a).toString("base64")}function atob(b){var c=null;try{c=Buffer.from(b,"base64").toString()}catch(a){console.log(a)}return c}function passwordcheck(g){if(g.length<8){return false}var h=0,d=0,f=0,e=0;for(var b in g){var a=g.charCodeAt(b);if((a>64)&&(a<91)){h=1}else{if((a>96)&&(a<123)){d=1}else{if((a>47)&&(a<58)){f=1}else{e=1}}}}return((h+d+f+e)==4)}function hex2rstr(a){Buffer.from(a,"hex").toString()}function rstr2hex(a){Buffer.from(a).toString("hex")}function random(){return Math.floor(Math.random()*max)}function rstr_md5(a){return hex2rstr(hex_md5(a))}function getItem(b,c,d){for(var a in b){if(b[a][c]==d){return b[a]}}return null}var httpErrorTable={200:"OK",401:"Authentication Error",408:"Timeout Error",601:"WSMAN Parsing Error",602:"Unable to parse HTTP response header",603:"Unexpected HTTP enum response",604:"Unexpected HTTP pull response",998:"Invalid TLS certificate"};module.exports.setup=function(a,c){var b={startvars:c,onCompleted:null};if(a.length<6){console.error("Invalid script length");return null}if(ReadInt(a,0)!=612182341){console.error("Invalid binary script");return null}if(ReadShort(a,4)>1){console.error("Unsupported script version");return null}b.script=a.slice(6);b.reset=function(d){b.stop();b.ip=0;b.variables=c;b.state=1};b.start=function(d){b.stop();if(d==null){b.stepspeed=10}else{b.stepspeed=d}if(b.stepspeed>0){b.timer=setInterval(function(){b.step()},b.stepspeed)}};b.stop=function(){if(b.timer!=null){clearInterval(b.timer)}b.timer=null;b.stepspeed=0};b.getVar=function(d){if(d==undefined){return undefined}return b.getVarEx(d.split("."),b.variables)};b.getVarEx=function(f,g){try{if(f==undefined){return undefined}if(f.length==0){return g}return b.getVarEx(f.slice(1),g[f[0]])}catch(d){return null}};b.setVar=function(d,e){b.setVarEx(d.split("."),b.variables,e)};b.setVarEx=function(d,f,e){if(d.length==1){f[d[0]]=e}else{b.setVarEx(d.slice(1),f[d[0]],e)}};b.step=function(){if(b.state!=1){return}if(b.ip<b.script.length){var m=ReadShort(b.script,b.ip);var n=ReadShort(b.script,b.ip+2);var d=ReadShort(b.script,b.ip+4);var g=b.ip+6;var h=[];for(var p in b.variables){if(p.startsWith("__")){delete b.variables[p]}}for(var p=0;p<d;p++){var f=ReadShort(b.script,g);var l=b.script.slice(g+2,g+2+f);var k=l[0];l=l.slice(1);if(k<2){l=l.toString();if(l!=null){while(l.split("{").length>1){var r=l.split("{").pop().split("}").shift();l=l.replace("{"+r+"}",b.getVar(r))}}if(k==1){b.variables["__"+p]=decodeURI(l);l="__"+p}h.push(l)}if(k==2||k==3){b.variables["__"+p]=ReadSInt(l,0);h.push("__"+p)}g+=(2+f)}b.ip+=n;var j=[];for(var p=0;p<10;p++){j.push(b.getVar(h[p]))}var q;try{if(m<10000){switch(m){case 0:break;case 1:if(j[2]){if((j[2]=="<"&&j[1]<j[3])||(j[2]=="<="&&j[1]<=j[3])||(j[2]=="!="&&j[1]!=j[3])||(j[2]=="="&&j[1]==j[3])||(j[2]==">="&&j[1]>=j[3])||(j[2]==">"&&j[1]>j[3])){b.ip=j[0]}}else{b.ip=j[0]}break;case 2:if(h[1]==undefined){delete b.variables[h[0]]}else{b.setVar(h[0],j[1])}break;case 3:var s=b.toString(j[0]);if(s.indexOf("INFO: ")==0){s=s.substring(6)}if(s.indexOf("SUCCESS: ")==0){s=s.substring(9)}if(b.onConsole){b.onConsole(s,b)}else{console.log(s)}break;case 4:b.state=2;b.dialog=true;setDialogMode(11,j[0],j[2],b.xxStepDialogOk,j[1],b);break;case 5:for(var p in j[1]){if(j[1][p][j[2]]==j[3]){q=p}}break;case 6:q=j[1].substr(j[2],j[3]);break;case 7:q=j[1].indexOf(j[2]);break;case 8:q=j[1].split(j[2]);break;case 9:q=j[1].join(j[2]);break;case 10:if(j[1]==null){q=0}else{q=j[1].length}break;case 11:q=JSON.parse(j[1]);break;case 12:q=JSON.stringify(j[1]);break;case 13:q=(j[1]+j[2]);break;case 14:q=(j[1]-j[2]);break;case 15:q=parseInt(j[1]);break;case 16:b.state=2;b.amtstack.BatchEnum(j[0],j[1],b.xxWsmanReturn,b);break;case 17:b.state=2;b.amtstack.Put(j[0],j[1],b.xxWsmanReturn,b);break;case 18:b.state=2;b.amtstack.Create(j[0],j[1],b.xxWsmanReturn,b);break;case 19:b.state=2;b.amtstack.Delete(j[0],j[1],b.xxWsmanReturn,b);break;case 20:b.state=2;b.amtstack.Exec(j[0],j[1],j[2],b.xxWsmanReturn,b,0,j[3]);break;case 21:b.stepspeed=j[0];if(b.timer!=null){clearInterval(b.timer);b.timer=setInterval(function(){b.step()},b.stepspeed)}break;case 22:b.state=2;b.amtstack.Subscribe(j[0],j[1],j[2],b.xxWsmanReturn,b,0,j[3],j[4],j[5],j[6]);break;case 23:b.state=2;b.amtstack.UnSubscribe(j[0],b.xxWsmanReturn,b,0,j[1]);break;case 24:console.log(j[1],j[2],j[1].charCodeAt(j[2]));q=j[1].charCodeAt(j[2]);break;case 25:break;default:b.state=9;console.error("Script Error, unknown command: "+m)}}else{if(m<20000){q=script_functionTableX2[m-10000](j[1],j[2],j[3],j[4],j[5],j[6])}else{}}if(q!=undefined){b.setVar(h[0],q)}}catch(o){if(typeof o=="object"){o=o.message}b.setVar("_exception",o)}}if(b.state==1&&b.ip>=b.script.length){b.state=0;b.stop();if(b.onCompleted){b.onCompleted()}}if(b.onStep){b.onStep(b)}return b};b.xxStepDialogOk=function(d){b.variables.DialogSelect=d;b.state=1;b.dialog=false;if(b.onStep){b.onStep(b)}};b.xxWsmanReturn=function(f,d,e,g){b.setVar(d,e);b.setVar("wsman_result",g);b.setVar("wsman_result_str",((httpErrorTable[g])?(httpErrorTable[g]):("Error #"+g)));b.state=1;if(b.onStep){b.onStep(b)}};b.toString=function(d){if(typeof d=="object"){return JSON.stringify(d)}return d};b.reset();return b};module.exports.compile=function(o,l){var n="",q=o.split("\n"),h={},k=[],s=[];for(var d in q){var p=q[d];if(p.startsWith("##SWAP ")){var u=p.split(" ");if(u.length==3){s[u[1]]=u[2]}}if(p[0]=="#"||p.length==0){continue}for(var u in s){p=p.split(u).join(s[u])}var f=p.match(/"[^"]*"|[^\s"]+/g);if(f.length==0){continue}if(p[0]==":"){h[f[0].toUpperCase()]=n.length;continue}var c=script_functionTable1.indexOf(f[0].toLowerCase());if(c==-1){c=script_functionTable2.indexOf(f[0].toLowerCase());if(c>=0){c+=10000}}if(c==-1){if(l){l("Unabled to compile, unknown command: "+f[0])}return""}var b=ShortToStr(f.length-1);for(var e in f){if(e==0){continue}if(f[e][0]==":"){k.push([f[e],n.length+b.length+7]);b+=ShortToStr(5)+String.fromCharCode(3)+IntToStr(4294967295)}else{var a=parseInt(f[e]);if(a==f[e]){b+=ShortToStr(5)+String.fromCharCode(2)+IntToStr(a)}else{if(f[e][0]=='"'&&f[e][f[e].length-1]=='"'){b+=ShortToStr(f[e].length-1)+String.fromCharCode(1)+f[e].substring(1,f[e].length-1)}else{b+=ShortToStr(f[e].length+1)+String.fromCharCode(0)+f[e]}}}}b=ShortToStr(c)+ShortToStr(b.length+4)+b;n+=b}for(d in k){var g=k[d][0].toUpperCase(),m=k[d][1],t=h[g];if(t==undefined){if(l){l("Unabled to compile, unknown label: "+g)}return""}n=n.substr(0,m)+IntToStr(t)+n.substr(m+4)}return IntToStr(612182341)+ShortToStr(1)+n};module.exports.decompile=function(g,q){var t="",s=6,m=0,n={};if(q>=0){s=q}else{if(g.length<6){return"# Invalid script length"}var p=ReadInt(g,0);var w=ReadShort(g,4);if(p!=612182341){return"# Invalid binary script: "+p}if(w!=1){return"# Invalid script version"}}while(s<g.length){var h=ReadShort(g,s);var j=ReadShort(g,s+2);var a=ReadShort(g,s+4);var c=s+6;var d="";if(!(q>=0)){t+=":label"+(s-6)+"\n"}for(var k=0;k<a;k++){var b=ReadShort(g,c);var f=g.substring(c+2,c+2+b);var e=f.charCodeAt(0);if(e==0){d+=" "+f.substring(1)}else{if(e==1){d+=' "'+f.substring(1)+'"'}else{if(e==2){d+=" "+ReadInt(f,1)}else{if(e==3){var v=ReadInt(f,1);var l=n[v];if(!l){l=":label"+v;n[l]=v}d+=" "+l}}}}c+=(2+b)}if(h<10000){t+=script_functionTable1[h]+d+"\n"}else{if((h>=10000)&&(h<10000)){t+=script_functionTable2[h-10000]+d+"\n"}}s+=j;if(q>=0){return t}}var u=t.split("\n");t="";for(var k in u){var o=u[k];if(o[0]!=":"){t+=o+"\n"}else{if(n[o]){t+=o+"\n"}}}return t};
\ No newline at end of file
agents/modules_meshcmd_min/amt-wsman-duk.min.js
new
+1
@@ -0,0 +1 @@
1
+function CreateWsmanComm(){var a={};a.PendingAjax=[];a.ActiveAjaxCount=0;a.MaxActiveAjaxCount=1;a.FailAllError=0;a.digest=null;a.RequestCount=0;if(arguments.length==1&&typeof(arguments[0]=="object")){a.host=arguments[0].host;a.port=arguments[0].port;a.authToken=arguments[0].authToken;a.tls=arguments[0].tls}else{a.host=arguments[0];a.port=arguments[1];a.user=arguments[2];a.pass=arguments[3];a.tls=arguments[4]}a.PerformAjax=function(d,c,f,e,g,b){if((a.ActiveAjaxCount==0||((a.ActiveAjaxCount<a.MaxActiveAjaxCount)&&(a.challengeParams!=null)))&&a.PendingAjax.length==0){a.PerformAjaxEx(d,c,f,g,b)}else{if(e==1){a.PendingAjax.unshift([d,c,f,g,b])}else{a.PendingAjax.push([d,c,f,g,b])}}};a.PerformNextAjax=function(){if(a.ActiveAjaxCount>=a.MaxActiveAjaxCount||a.PendingAjax.length==0){return}var b=a.PendingAjax.shift();a.PerformAjaxEx(b[0],b[1],b[2],b[3],b[4]);a.PerformNextAjax()};a.PerformAjaxEx=function(d,c,g,h,b){if(a.FailAllError!=0){if(a.FailAllError!=999){a.gotNextMessagesError({status:a.FailAllError},"error",null,[d,c,g])}return}if(!d){d=""}if(globalDebugFlags&1){console.log("SEND: "+d+"\r\n\r\n")}if(a.digest==null){if(a.authToken){a.digest=require("http-digest").create({authToken:a.authToken})}else{a.digest=require("http-digest").create(a.user,a.pass)}a.digest.http=require("http")}var f={protocol:(a.tls==1?"https:":"http:"),method:"POST",host:a.host,path:"/wsman",port:a.port,rejectUnauthorized:false,checkServerIdentity:function(i){console.log("checkServerIdentity",JSON.stringify(i))}};var e=a.digest.request(f);e.on("error",function(i){a.gotNextMessagesError({status:600},"error",null,[d,c,g])});e.on("response",function(i){if(globalDebugFlags&1){console.log("Response: "+i.statusCode)}if(i.statusCode!=200){if(globalDebugFlags&1){console.log("ERR:"+JSON.stringify(i))}a.gotNextMessagesError({status:i.statusCode},"error",null,[d,c,g])}else{i.acc="";i.on("data",function(j){this.acc+=j});i.on("end",function(){a.gotNextMessages(i.acc,"success",{status:i.statusCode},[d,c,g])})}});e.end(d);a.ActiveAjaxCount++;return e};a.pendingAjaxCall=[];a.gotNextMessages=function(c,e,d,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(globalDebugFlags&1){console.log("RECV: "+c+"\r\n\r\n")}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(d.status!=200){b[1](null,d.status,b[2]);return}b[1](c,200,b[2]);a.PerformNextAjax()};a.gotNextMessagesError=function(d,e,c,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(a.FailAllError!=999){b[1]({Header:{HttpError:d.status}},d.status,b[2])}a.PerformNextAjax()};a.CancelAllQueries=function(b){while(a.PendingAjax.length>0){var c=a.PendingAjax.shift();c[1](null,b,c[2])}};return a}module.exports=CreateWsmanComm;
\ No newline at end of file
agents/modules_meshcmd_min/amt-wsman.min.js
new
+1
@@ -0,0 +1 @@
1
+function WsmanStackCreateService(){var p={_ObjectID:"WSMAN"};p.NextMessageId=1;p.Address="/wsman";p.xmlParser=require("amt-xml");if(arguments.length==1&&typeof(arguments[0]=="object")){var e=arguments[0].transport;if(e){p.comm=new e(arguments[0])}}else{var e=arguments[0];if(e){p.comm=new e(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6])}}p.PerformAjax=function q(t,r,v,u,s){if(s==null){s=""}p.comm.PerformAjax('<?xml version="1.0" encoding="utf-8"?><Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns="http://www.w3.org/2003/05/soap-envelope" '+s+"><Header><a:Action>"+t,function(w,x,y){if(x!=200){r(p,null,{Header:{HttpError:x}},x,y);return}var z=p.xmlParser.ParseWsman(w);if(!z||z==null){r(p,null,{Header:{HttpError:x}},601,y)}else{r(p,z.Header.ResourceURI,z,200,y)}},v,u)};p.CancelAllQueries=function d(r){p.comm.CancelAllQueries(r)};p.GetNameFromUrl=function(r){var s=r.lastIndexOf("/");return(s==-1)?r:r.substring(s+1)};p.ExecSubscribe=function n(z,t,C,r,B,y,A,w,D,x){var u="",v="",w="";if(D!=null&&x!=null){u='<t:IssuedTokens xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:se="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><t:RequestSecurityTokenResponse><t:TokenType>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken</t:TokenType><t:RequestedSecurityToken><se:UsernameToken><se:Username>'+D+'</se:Username><se:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordText">'+x+"</se:Password></se:UsernameToken></t:RequestedSecurityToken></t:RequestSecurityTokenResponse></t:IssuedTokens>";v='<w:Auth Profile="http://schemas.dmtf.org/wbem/wsman/1/wsman/secprofile/http/digest"/>'}if(w!=null){w="<a:ReferenceParameters><m:arg>"+w+"</m:arg></a:ReferenceParameters>"}if(t=="PushWithAck"){t="dmtf.org/wbem/wsman/1/wsman/PushWithAck"}else{if(t=="Push"){t="xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push"}}var s="http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+z+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+c(A)+u+'</Header><Body><e:Subscribe><e:Delivery Mode="http://schemas.'+t+'"><e:NotifyTo><a:Address>'+C+"</a:Address>"+w+"</e:NotifyTo>"+v+"</e:Delivery></e:Subscribe>";p.PerformAjax(s+"</Body></Envelope>",r,B,y,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:m="http://x.com"')};p.ExecUnSubscribe=function o(u,r,w,t,v){var s="http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+u+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+c(v)+"</Header><Body><e:Unsubscribe/>";p.PerformAjax(s+"</Body></Envelope>",r,w,t,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing"')};p.ExecPut=function m(v,u,r,x,t,w){var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+v+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout>"+c(w)+"</Header><Body>"+b(v,u);p.PerformAjax(s+"</Body></Envelope>",r,x,t)};p.ExecCreate=function f(x,w,r,z,v,y){var u=p.GetNameFromUrl(x);var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+x+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+c(y)+"</Header><Body><g:"+u+' xmlns:g="'+x+'">';for(var t in w){s+="<g:"+t+">"+w[t]+"</g:"+t+">"}p.PerformAjax(s+"</g:"+u+"></Body></Envelope>",r,z,v)};p.ExecDelete=function g(v,u,r,w,t){var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+v+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+c(u)+"</Header><Body /></Envelope>";p.PerformAjax(s,r,w,t)};p.ExecGet=function i(t,r,u,s){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+t+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body /></Envelope>",r,u,s)};p.ExecMethod=function j(y,v,r,t,A,w,z){var s="";for(var u in r){if(r[u]!=null){if(Array.isArray(r[u])){for(var B in r[u]){s+="<r:"+u+">"+r[u][B]+"</r:"+u+">"}}else{s+="<r:"+u+">"+r[u]+"</r:"+u+">"}}}p.ExecMethodXml(y,v,s,t,A,w,z)};p.ExecMethodXml=function k(v,t,r,s,x,u,w){p.PerformAjax(v+"/"+t+"</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+v+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+c(w)+"</Header><Body><r:"+t+'_INPUT xmlns:r="'+v+'">'+r+"</r:"+t+"_INPUT></Body></Envelope>",s,x,u)};p.ExecEnum=function h(t,r,u,s){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+t+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Enumerate xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration" /></Body></Envelope>',r,u,s)};p.ExecPull=function l(u,s,r,v,t){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+u+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Pull xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration"><EnumerationContext>'+s+"</EnumerationContext><MaxElements>999</MaxElements><MaxCharacters>99999</MaxCharacters></Pull></Body></Envelope>",r,v,t)};function b(w,u){if(!w||u==null){return""}var s=p.GetNameFromUrl(w);var v="<r:"+s+' xmlns:r="'+w+'">';for(var t in u){if(!u.hasOwnProperty(t)||t.indexOf("__")===0||t.indexOf("@")===0){continue}if(u[t]==null||typeof u[t]==="function"){continue}if(typeof u[t]==="object"&&u[t]["ReferenceParameters"]){v+="<r:"+t+"><a:Address>"+u[t].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+u[t]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var x=u[t]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(x)){for(var r=0;r<x.length;r++){v+="<w:Selector"+a(x[r])+">"+x[r]["Value"]+"</w:Selector>"}}else{v+="<w:Selector"+a(x)+">"+x.Value+"</w:Selector>"}v+="</w:SelectorSet></a:ReferenceParameters></r:"+t+">"}else{if(Array.isArray(u[t])){for(var r=0;r<u[t].length;r++){v+="<r:"+t+">"+u[t][r].toString()+"</r:"+t+">"}}else{v+="<r:"+t+">"+u[t].toString()+"</r:"+t+">"}}}v+="</r:"+s+">";return v}function a(r){if(!r){return""}var t=" ";for(var s in r){if(!r.hasOwnProperty(s)||s.indexOf("@")!==0){continue}t+=s.substring(1)+'="'+r[s]+'" '}return t}function c(v){if((v==null)||(v=="null")){return""}if(typeof v=="string"){return v}if(v.InstanceID){return'<w:SelectorSet><w:Selector Name="InstanceID">'+v.InstanceID+"</w:Selector></w:SelectorSet>"}var t="<w:SelectorSet>";for(var s in v){if(!v.hasOwnProperty(s)){continue}t+='<w:Selector Name="'+s+'">';if(v[s]["ReferenceParameters"]){t+="<a:EndpointReference>";t+="<a:Address>"+v[s]["Address"]+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+v[s]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var u=v[s]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(u)){for(var r=0;r<u.length;r++){t+="<w:Selector"+a(u[r])+">"+u[r]["Value"]+"</w:Selector>"}}else{t+="<w:Selector"+a(u)+">"+u.Value+"</w:Selector>"}t+="</w:SelectorSet></a:ReferenceParameters></a:EndpointReference>"}else{t+=v[s]}t+="</w:Selector>"}t+="</w:SelectorSet>";return t}return p}module.exports=WsmanStackCreateService;
\ No newline at end of file
agents/modules_meshcmd_min/amt-xml.min.js
new
+1
@@ -0,0 +1 @@
1
+try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}module.exports.ParseWsman=function(j){try{if(!j.childNodes){j=_turnToXml(j)}var g={Header:{}},d=j.getElementsByTagName("Header")[0],h;if(!d){d=j.getElementsByTagName("a:Header")[0]}if(!d){return null}for(var f=0;f<d.childNodes.length;f++){var b=d.childNodes[f];g.Header[b.localName]=b.textContent}var a=j.getElementsByTagName("Body")[0];if(!a){a=j.getElementsByTagName("a:Body")[0]}if(!a){return null}if(a.childNodes.length>0){h=a.childNodes[0].localName;if(h.indexOf("_OUTPUT")==h.length-7){h=h.substring(0,h.length-7)}g.Header.Method=h;g.Body=_ParseWsmanRec(a.childNodes[0])}return g}catch(c){console.error("Unable to parse XML: "+j,c);return null}};function _ParseWsmanRec(g){var c,h={};for(var d=0;d<g.childNodes.length;d++){var a=g.childNodes[d];if((a.childElementCount==null)||(a.childElementCount==0)){c=a.textContent}else{c=_ParseWsmanRec(a)}if(c=="true"){c=true}if(c=="false"){c=false}if((parseInt(c)+"")===c){c=parseInt(c)}var b=c;if((a.attributes!=null)&&(a.attributes.length>0)){b={Value:c};for(var f=0;f<a.attributes.length;f++){b["@"+a.attributes[f].name]=a.attributes[f].value}}if(h[a.localName] instanceof Array){h[a.localName].push(b)}else{if(h[a.localName]==null){h[a.localName]=b}else{h[a.localName]=[h[a.localName],b]}}}return h}function _PutObjToBodyXml(g,d){if(!g||d==null){return""}var b=obj.GetNameFromUrl(g);var f="<r:"+b+' xmlns:r="'+g+'">';for(var c in d){if(!d.hasOwnProperty(c)||c.indexOf("__")===0||c.indexOf("@")===0){continue}if(d[c]==null||typeof d[c]==="function"){continue}if(typeof d[c]==="object"&&d[c]["ReferenceParameters"]){f+="<r:"+c+"><a:Address>"+d[c].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+d[c]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var h=d[c]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(h)){for(var a=0;a<h.length;a++){f+="<w:Selector"+_ObjectToXmlAttributes(h[a])+">"+h[a]["Value"]+"</w:Selector>"}}else{f+="<w:Selector"+_ObjectToXmlAttributes(h)+">"+h.Value+"</w:Selector>"}f+="</w:SelectorSet></a:ReferenceParameters></r:"+c+">"}else{if(Array.isArray(d[c])){for(var a=0;a<d[c].length;a++){f+="<r:"+c+">"+d[c][a].toString()+"</r:"+c+">"}}else{f+="<r:"+c+">"+d[c].toString()+"</r:"+c+">"}}}f+="</r:"+b+">";return f}function _treeBuilder(){this.tree=[];this.push=function(a){this.tree.push(a)};this.pop=function(){var a=this.tree.pop();if(this.tree.length>0){var b=this.tree.peek();b.childNodes.push(a);b.childElementCount=b.childNodes.length}return(a)};this.peek=function(){return(this.tree.peek())};this.addNamespace=function(g,d){this.tree.peek().nsTable[g]=d;if(this.tree.peek().attributes.length>0){for(var c=0;c<this.tree.peek().attributes;++c){var b=this.tree.peek().attributes[c];if(g=="*"&&b.name==b.localName){b.namespace=d}else{if(g!="*"&&b.name!=b.localName){var f=b.name.split(":")[0];if(f==g){b.namespace=d}}}}}};this.getNamespace=function(b){for(var a=this.tree.length-1;a>=0;--a){if(this.tree[a].nsTable[b]!=null){return(this.tree[a].nsTable[b])}}return null}}function _turnToXml(a){if(a==null){return null}return({childNodes:[_turnToXmlRec(a)],getElementsByTagName:_getElementsByTagName,getChildElementsByTagName:_getChildElementsByTagName,getElementsByTagNameNS:_getElementsByTagNameNS})}function _getElementsByTagNameNS(b,a){var c=[];_xmlTraverseAllRec(this.childNodes,function(d){if(d.localName==a&&(d.namespace==b||b=="*")){c.push(d)}});return c}function _getElementsByTagName(a){var b=[];_xmlTraverseAllRec(this.childNodes,function(c){if(c.localName==a){b.push(c)}});return b}function _getChildElementsByTagName(a){var c=[];if(this.childNodes!=null){for(var b in this.childNodes){if(this.childNodes[b].localName==a){c.push(this.childNodes[b])}}}return(c)}function _getChildElementsByTagNameNS(c,a){var d=[];if(this.childNodes!=null){for(var b in this.childNodes){if(this.childNodes[b].localName==a&&(c=="*"||this.childNodes[b].namespace==c)){d.push(this.childNodes[b])}}}return(d)}function _xmlTraverseAllRec(c,a){for(var b in c){a(c[b]);if(c[b].childNodes){_xmlTraverseAllRec(c[b].childNodes,a)}}}function _turnToXmlRec(w){try{if(w==null){return null}var m=new _treeBuilder(),r=null,z=w.split("<"),u=[],h=null,g=null;for(var o in z){var A=z[o].split(">"),B=A[0].split(" "),l=B[0];if((l.length>0)&&(l[0]!="?")){if(l[0]!="/"){var a=[],s,t=l.split(" ")[0].split(":"),s=(t.length>1)?t[1]:t[0];Object.defineProperty(a,"get",{value:function(){if(arguments.length==1){for(var i in this){if(this[i].name==arguments[0]){return(this[i])}}}else{if(arguments.length==2){for(var i in this){if(this[i].name==arguments[1]&&(arguments[0]=="*"||this[i].namespace==arguments[0])){return(this[i])}}}else{throw ("attributes.get(): Invalid number of parameters")}}}});m.push({name:l,localName:s,getChildElementsByTagName:_getChildElementsByTagName,getElementsByTagNameNS:_getElementsByTagNameNS,getChildElementsByTagNameNS:_getChildElementsByTagNameNS,attributes:a,childNodes:[],nsTable:{}});if(B.length>0){var v=false;for(var p in B){if(B[p]=="/"){m.peek().namespace=m.peek().name==m.peek().localName?m.getNamespace("*"):m.getNamespace(m.peek().name.substring(0,m.peek().name.indexOf(":")));m.peek().textContent="";r=m.pop();v=true;break}var q=B[p].indexOf("=");if(q>0){var b=B[p].substring(0,q);var d=B[p].substring(q+2,B[p].length-1);var c=m.getNamespace("*");if(b=="xmlns"){m.addNamespace("*",d);c=d}else{if(b.startsWith("xmlns:")){m.addNamespace(b.substring(6),d)}else{var f=b.split(":");if(f.length==2){b=f[1];c=m.getNamespace(f[0])}}}var y={name:b,value:d};if(c!=null){y.namespace=c}m.peek().attributes.push(y)}}if(v){continue}}m.peek().namespace=m.peek().name==m.peek().localName?m.getNamespace("*"):m.getNamespace(m.peek().name.substring(0,m.peek().name.indexOf(":")));if(A[1]){m.peek().textContent=A[1]}}else{r=m.pop()}}}}catch(n){return null}return r};
\ No newline at end of file
agents/modules_meshcmd_min/amt.min.js
new
+1
@@ -0,0 +1 @@
1
+function AmtStackCreateService(R){var J=new Object();J._ObjectID="AMT";J.wsman=R;J.pfx=["http://intel.com/wbem/wscim/1/amt-schema/1/","http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/","http://intel.com/wbem/wscim/1/ips-schema/1/"];J.PendingEnums=[];J.PendingBatchOperations=0;J.ActiveEnumsCount=0;J.MaxActiveEnumsCount=1;J.onProcessChanged=null;var n=0;var m=0;J.GetPendingActions=function(){return(J.PendingEnums.length*2)+(J.ActiveEnumsCount)+J.wsman.comm.PendingAjax.length+J.wsman.comm.ActiveAjaxCount+J.PendingBatchOperations};function r(){var S=J.GetPendingActions();if(n<S){n=S}if(J.onProcessChanged!=null&&m!=S){m=S;J.onProcessChanged(S,n)}if(S==0){n=0}}J.Subscribe=function P(U,T,aa,S,Z,X,Y,V,ab,W){J.wsman.ExecSubscribe(J.CompleteName(U),T,aa,function(ae,ad,ac,af){r();S.call(J,J,U,ac,af,Z)},0,X,Y,V,ab,W);r()};J.UnSubscribe=function Q(T,S,W,U,V){J.wsman.ExecUnSubscribe(J.CompleteName(T),function(Z,Y,X,aa){r();S.call(J,J,T,X,aa,W)},0,U,V);r()};J.Get=function E(T,S,V,U){J.wsman.ExecGet(J.CompleteName(T),function(Y,X,W,Z){r();S.call(J,J,T,W,Z,V)},0,U);r()};J.Put=function K(T,V,S,X,U,W){J.wsman.ExecPut(J.CompleteName(T),V,function(aa,Z,Y,ab){r();S.call(J,J,T,Y,ab,X)},0,U,W);r()};J.Create=function y(T,V,S,W,U){J.wsman.ExecCreate(J.CompleteName(T),V,function(Z,Y,X,aa){r();S.call(J,J,T,X,aa,W)},0,U);r()};J.Delete=function z(T,V,S,W,U){J.wsman.ExecDelete(J.CompleteName(T),V,function(Z,Y,X,aa){r();S.call(J,J,T,X,aa,W)},0,U);r()};J.Exec=function B(V,U,S,T,Y,W,X){J.wsman.ExecMethod(J.CompleteName(V),U,S,function(ab,aa,Z,ac){r();T.call(J,J,V,J.CompleteExecResponse(Z),ac,Y)},0,W,X);r()};J.ExecWithXml=function D(V,U,S,T,Y,W,X){J.wsman.ExecMethodXml(J.CompleteName(V),U,C(S),function(ab,aa,Z,ac){r();T.call(J,J,V,J.CompleteExecResponse(Z),ac,Y)},0,W,X);r()};J.Enum=function A(T,S,V,U){if(J.ActiveEnumsCount<J.MaxActiveEnumsCount){J.ActiveEnumsCount++;J.wsman.ExecEnum(J.CompleteName(T),function(Z,X,W,aa,Y){r();e(T,W,S,X,aa,Y)},V,U)}else{J.PendingEnums.push([T,S,V,U])}r()};function e(U,W,S,X,Y,Z,V){if(Y!=200){S.call(J,J,U,null,Y,Z);d(1);return}if(W==null||W.Header.Method!="EnumerateResponse"||!W.Body.EnumerationContext){S.call(J,J,U,null,603,Z);d(1);return}var T=W.Body.EnumerationContext;J.wsman.ExecPull(X,T,function(ac,ab,aa,ad){c(U,aa,S,ab,[],ad,Z,V)})}function c(X,Z,S,aa,V,ab,ac,Y){if(ab!=200){S.call(J,J,X,null,ab,ac);d(1);return}if(Z==null||Z.Header.Method!="PullResponse"){S.call(J,J,X,null,604,ac);d(1);return}for(var U in Z.Body.Items){if(Z.Body.Items[U] instanceof Array){for(var W in Z.Body.Items[U]){V.push(Z.Body.Items[U][W])}}else{V.push(Z.Body.Items[U])}}if(Z.Body.EnumerationContext){var T=Z.Body.EnumerationContext;J.wsman.ExecPull(aa,T,function(af,ae,ad,ag){c(X,ad,S,ae,V,ag,ac,1)})}else{d(1);S.call(J,J,X,V,ab,ac);r()}}function d(S){J.ActiveEnumsCount-=S;if(J.ActiveEnumsCount>=J.MaxActiveEnumsCount||J.PendingEnums.length==0){return}var T=J.PendingEnums.shift();J.Enum(T[0],T[1],T[2]);d(0)}J.BatchEnum=function(S,V,T,X,U,W){J.PendingBatchOperations+=(V.length*2);b(S,x(V),T,X,{},U,W);r()};function x(S){return JSON.parse(JSON.stringify(S))}function b(S,X,T,aa,Z,U,Y){J.PendingBatchOperations-=2;var W=X.shift(),V=J.Enum;if(W[0]=="*"){V=J.Get;W=W.substring(1)}V(W,function(ad,ab,ac,ae,af){af[2][ab]={response:(ac==null?null:ac.Body),responses:ac,status:ae};if(af[1].length==0||ae==401||(U!=true&&ae!=200&&ae!=400)){J.PendingBatchOperations-=(X.length*2);r();T.call(J,J,S,af[2],ae,aa)}else{r();b(S,X,T,aa,af[2],Y)}},[S,X,Z],Y);r()}J.BatchGet=function(S,U,T,W,V){h({name:S,names:U,callback:T,current:0,responses:{},tag:W,pri:V});r()};function h(S){if(S.names.length<=S.current){S.callback.call(J,J,S.name,S.responses,200,S.tag)}else{J.wsman.ExecGet(J.CompleteName(S.names[S.current]),function(V,U,T,W){g(S,T,W)},S.pri);S.current++}r()}function g(S,T,U){if(T==null||U!=200){S.callback.call(J,J,S.name,null,U,S.tag)}else{S.responses[T.Header.Method]=T;h(S)}}J.CompleteName=function(S){if(S.indexOf("AMT_")==0){return J.pfx[0]+S}if(S.indexOf("CIM_")==0){return J.pfx[1]+S}if(S.indexOf("IPS_")==0){return J.pfx[2]+S}};J.CompleteExecResponse=function(S){if(S&&S!=null&&S.Body&&(S.Body.ReturnValue!=undefined)){S.Body.ReturnValueStr=J.AmtStatusToStr(S.Body.ReturnValue)}return S};J.RequestPowerStateChange=function(T,S){J.CIM_PowerManagementService_RequestPowerStateChange(T,'<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ComputerSystem</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="CreationClassName">CIM_ComputerSystem</Selector><Selector Name="Name">ManagedSystem</Selector></SelectorSet></ReferenceParameters>',null,null,S)};J.SetBootConfigRole=function(T,S){J.CIM_BootService_SetBootConfigRole('<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootConfigSetting</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="InstanceID">Intel(r) AMT: Boot Configuration 0</Selector></SelectorSet></ReferenceParameters>',T,S)};J.CancelAllQueries=function(S){J.wsman.CancelAllQueries(S)};J.AMT_AgentPresenceWatchdog_RegisterAgent=function(S,V,T,U){J.Exec("AMT_AgentPresenceWatchdog","RegisterAgent",{},S,V,T,U)};J.AMT_AgentPresenceWatchdog_AssertPresence=function(V,S,W,T,U){J.Exec("AMT_AgentPresenceWatchdog","AssertPresence",{SequenceNumber:V},S,W,T,U)};J.AMT_AgentPresenceWatchdog_AssertShutdown=function(V,S,W,T,U){J.Exec("AMT_AgentPresenceWatchdog","AssertShutdown",{SequenceNumber:V},S,W,T,U)};J.AMT_AgentPresenceWatchdog_AddAction=function(X,W,V,T,S,U,aa,Y,Z){J.Exec("AMT_AgentPresenceWatchdog","AddAction",{OldState:X,NewState:W,EventOnTransition:V,ActionSd:T,ActionEac:S},U,aa,Y,Z)};J.AMT_AgentPresenceWatchdog_DeleteAllActions=function(S,V,T,U){J.Exec("AMT_AgentPresenceWatchdog","DeleteAllActions",{},S,V,T,U)};J.AMT_AgentPresenceWatchdogAction_GetActionEac=function(S){J.Exec("AMT_AgentPresenceWatchdogAction","GetActionEac",{},S)};J.AMT_AgentPresenceWatchdogVA_RegisterAgent=function(S){J.Exec("AMT_AgentPresenceWatchdogVA","RegisterAgent",{},S)};J.AMT_AgentPresenceWatchdogVA_AssertPresence=function(T,S){J.Exec("AMT_AgentPresenceWatchdogVA","AssertPresence",{SequenceNumber:T},S)};J.AMT_AgentPresenceWatchdogVA_AssertShutdown=function(T,S){J.Exec("AMT_AgentPresenceWatchdogVA","AssertShutdown",{SequenceNumber:T},S)};J.AMT_AgentPresenceWatchdogVA_AddAction=function(X,W,V,T,S,U){J.Exec("AMT_AgentPresenceWatchdogVA","AddAction",{OldState:X,NewState:W,EventOnTransition:V,ActionSd:T,ActionEac:S},U)};J.AMT_AgentPresenceWatchdogVA_DeleteAllActions=function(S,T){J.Exec("AMT_AgentPresenceWatchdogVA","DeleteAllActions",{_method_dummy:S},T)};J.AMT_AlarmClockService_AddAlarm=function s(S,T){var V=S.InstanceID;var X=S.ElementName;var Y=S.StartTime.Datetime;var W=S.Interval?S.Interval.Datetime:undefined;var U=S.DeleteOnCompletion;var Z='<d:AlarmTemplate xmlns:d="http://intel.com/wbem/wscim/1/amt-schema/1/AMT_AlarmClockService" xmlns:s="http://intel.com/wbem/wscim/1/ips-schema/1/IPS_AlarmClockOccurrence"><s:InstanceID>'+V+"</s:InstanceID><s:ElementName>"+X+'</s:ElementName><s:StartTime><p:Datetime xmlns:p="http://schemas.dmtf.org/wbem/wscim/1/common">'+Y+"</p:Datetime></s:StartTime>"+((W!=undefined)?('<s:Interval><p:Interval xmlns:p="http://schemas.dmtf.org/wbem/wscim/1/common">'+W+"</p:Interval></s:Interval>"):"")+"<s:DeleteOnCompletion>"+U+"</s:DeleteOnCompletion></d:AlarmTemplate>";J.wsman.ExecMethodXml(J.CompleteName("AMT_AlarmClockService"),"AddAlarm",Z,T)};J.AMT_AuditLog_ClearLog=function(S){J.Exec("AMT_AuditLog","ClearLog",{},S)};J.AMT_AuditLog_RequestStateChange=function(T,U,S){J.Exec("AMT_AuditLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_AuditLog_ReadRecords=function(T,S,U){J.Exec("AMT_AuditLog","ReadRecords",{StartIndex:T},S,U)};J.AMT_AuditLog_SetAuditLock=function(V,T,U,S){J.Exec("AMT_AuditLog","SetAuditLock",{LockTimeoutInSeconds:V,Flag:T,Handle:U},S)};J.AMT_AuditLog_ExportAuditLogSignature=function(T,S){J.Exec("AMT_AuditLog","ExportAuditLogSignature",{SigningMechanism:T},S)};J.AMT_AuditLog_SetSigningKeyMaterial=function(W,V,U,T,S){J.Exec("AMT_AuditLog","SetSigningKeyMaterial",{SigningMechanismType:W,SigningKey:V,LengthOfCertificates:U,Certificates:T},S)};J.AMT_AuditPolicyRule_SetAuditPolicy=function(U,S,V,W,T){J.Exec("AMT_AuditPolicyRule","SetAuditPolicy",{Enable:U,AuditedAppID:S,EventID:V,PolicyType:W},T)};J.AMT_AuditPolicyRule_SetAuditPolicyBulk=function(U,S,V,W,T){J.Exec("AMT_AuditPolicyRule","SetAuditPolicyBulk",{Enable:U,AuditedAppID:S,EventID:V,PolicyType:W},T)};J.AMT_AuthorizationService_AddUserAclEntryEx=function(V,U,W,S,X,T){J.Exec("AMT_AuthorizationService","AddUserAclEntryEx",{DigestUsername:V,DigestPassword:U,KerberosUserSid:W,AccessPermission:S,Realms:X},T)};J.AMT_AuthorizationService_EnumerateUserAclEntries=function(T,S){J.Exec("AMT_AuthorizationService","EnumerateUserAclEntries",{StartIndex:T},S)};J.AMT_AuthorizationService_GetUserAclEntryEx=function(T,S,U){J.Exec("AMT_AuthorizationService","GetUserAclEntryEx",{Handle:T},S,U)};J.AMT_AuthorizationService_UpdateUserAclEntryEx=function(W,V,U,X,S,Y,T){J.Exec("AMT_AuthorizationService","UpdateUserAclEntryEx",{Handle:W,DigestUsername:V,DigestPassword:U,KerberosUserSid:X,AccessPermission:S,Realms:Y},T)};J.AMT_AuthorizationService_RemoveUserAclEntry=function(T,S){J.Exec("AMT_AuthorizationService","RemoveUserAclEntry",{Handle:T},S)};J.AMT_AuthorizationService_SetAdminAclEntryEx=function(U,T,S){J.Exec("AMT_AuthorizationService","SetAdminAclEntryEx",{Username:U,DigestPassword:T},S)};J.AMT_AuthorizationService_GetAdminAclEntry=function(S){J.Exec("AMT_AuthorizationService","GetAdminAclEntry",{},S)};J.AMT_AuthorizationService_GetAdminAclEntryStatus=function(S){J.Exec("AMT_AuthorizationService","GetAdminAclEntryStatus",{},S)};J.AMT_AuthorizationService_GetAdminNetAclEntryStatus=function(S){J.Exec("AMT_AuthorizationService","GetAdminNetAclEntryStatus",{},S)};J.AMT_AuthorizationService_SetAclEnabledState=function(U,T,S,V){J.Exec("AMT_AuthorizationService","SetAclEnabledState",{Handle:U,Enabled:T},S,V)};J.AMT_AuthorizationService_GetAclEnabledState=function(T,S,U){J.Exec("AMT_AuthorizationService","GetAclEnabledState",{Handle:T},S,U)};J.AMT_EndpointAccessControlService_RequestStateChange=function(T,U,S){J.Exec("AMT_EndpointAccessControlService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_EndpointAccessControlService_GetPosture=function(T,S){J.Exec("AMT_EndpointAccessControlService","GetPosture",{PostureType:T},S)};J.AMT_EndpointAccessControlService_GetPostureHash=function(T,S){J.Exec("AMT_EndpointAccessControlService","GetPostureHash",{PostureType:T},S)};J.AMT_EndpointAccessControlService_UpdatePostureState=function(T,S){J.Exec("AMT_EndpointAccessControlService","UpdatePostureState",{UpdateType:T},S)};J.AMT_EndpointAccessControlService_GetEacOptions=function(S){J.Exec("AMT_EndpointAccessControlService","GetEacOptions",{},S)};J.AMT_EndpointAccessControlService_SetEacOptions=function(T,U,S){J.Exec("AMT_EndpointAccessControlService","SetEacOptions",{EacVendors:T,PostureHashAlgorithm:U},S)};J.AMT_EnvironmentDetectionSettingData_SetSystemDefensePolicy=function(T,S){J.Exec("AMT_EnvironmentDetectionSettingData","SetSystemDefensePolicy",{Policy:T},S)};J.AMT_EnvironmentDetectionSettingData_EnableVpnRouting=function(T,S){J.Exec("AMT_EnvironmentDetectionSettingData","EnableVpnRouting",{Enable:T},S)};J.AMT_EthernetPortSettings_SetLinkPreference=function(T,U,S){J.Exec("AMT_EthernetPortSettings","SetLinkPreference",{LinkPreference:T,Timeout:U},S)};J.AMT_HeuristicPacketFilterStatistics_ResetSelectedStats=function(T,S){J.Exec("AMT_HeuristicPacketFilterStatistics","ResetSelectedStats",{SelectedStatistics:T},S)};J.AMT_KerberosSettingData_GetCredentialCacheState=function(S){J.Exec("AMT_KerberosSettingData","GetCredentialCacheState",{},S)};J.AMT_KerberosSettingData_SetCredentialCacheState=function(T,S){J.Exec("AMT_KerberosSettingData","SetCredentialCacheState",{Enable:T},S)};J.AMT_MessageLog_CancelIteration=function(T,S){J.Exec("AMT_MessageLog","CancelIteration",{IterationIdentifier:T},S)};J.AMT_MessageLog_RequestStateChange=function(T,U,S){J.Exec("AMT_MessageLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_MessageLog_ClearLog=function(S){J.Exec("AMT_MessageLog","ClearLog",{},S)};J.AMT_MessageLog_GetRecords=function(T,U,S,V){J.Exec("AMT_MessageLog","GetRecords",{IterationIdentifier:T,MaxReadRecords:U},S,V)};J.AMT_MessageLog_GetRecord=function(T,U,S){J.Exec("AMT_MessageLog","GetRecord",{IterationIdentifier:T,PositionToNext:U},S)};J.AMT_MessageLog_PositionAtRecord=function(T,U,V,S){J.Exec("AMT_MessageLog","PositionAtRecord",{IterationIdentifier:T,MoveAbsolute:U,RecordNumber:V},S)};J.AMT_MessageLog_PositionToFirstRecord=function(S,T){J.Exec("AMT_MessageLog","PositionToFirstRecord",{},S,T)};J.AMT_MessageLog_FreezeLog=function(T,S){J.Exec("AMT_MessageLog","FreezeLog",{Freeze:T},S)};J.AMT_PublicKeyManagementService_AddCRL=function(U,T,S){J.Exec("AMT_PublicKeyManagementService","AddCRL",{Url:U,SerialNumbers:T},S)};J.AMT_PublicKeyManagementService_ResetCRLList=function(S,T){J.Exec("AMT_PublicKeyManagementService","ResetCRLList",{_method_dummy:S},T)};J.AMT_PublicKeyManagementService_AddCertificate=function(T,S,U){J.Exec("AMT_PublicKeyManagementService","AddCertificate",{CertificateBlob:T},S,U)};J.AMT_PublicKeyManagementService_AddTrustedRootCertificate=function(T,S){J.Exec("AMT_PublicKeyManagementService","AddTrustedRootCertificate",{CertificateBlob:T},S)};J.AMT_PublicKeyManagementService_AddKey=function(T,S){J.Exec("AMT_PublicKeyManagementService","AddKey",{KeyBlob:T},S)};J.AMT_PublicKeyManagementService_GeneratePKCS10Request=function(U,T,V,S){J.Exec("AMT_PublicKeyManagementService","GeneratePKCS10Request",{KeyPair:U,DNName:T,Usage:V},S)};J.AMT_PublicKeyManagementService_GeneratePKCS10RequestEx=function(T,V,U,S){J.Exec("AMT_PublicKeyManagementService","GeneratePKCS10RequestEx",{KeyPair:T,SigningAlgorithm:V,NullSignedCertificateRequest:U},S)};J.AMT_PublicKeyManagementService_GenerateKeyPair=function(T,U,S){J.Exec("AMT_PublicKeyManagementService","GenerateKeyPair",{KeyAlgorithm:T,KeyLength:U},S)};J.AMT_RedirectionService_RequestStateChange=function(T,S){J.Exec("AMT_RedirectionService","RequestStateChange",{RequestedState:T},S)};J.AMT_RedirectionService_TerminateSession=function(T,S){J.Exec("AMT_RedirectionService","TerminateSession",{SessionType:T},S)};J.AMT_RemoteAccessService_AddMpServer=function(S,X,Z,T,V,aa,Y,W,U){J.Exec("AMT_RemoteAccessService","AddMpServer",{AccessInfo:S,InfoFormat:X,Port:Z,AuthMethod:T,Certificate:V,Username:aa,Password:Y,CN:W},U)};J.AMT_RemoteAccessService_AddRemoteAccessPolicyRule=function(V,W,T,U,S){J.Exec("AMT_RemoteAccessService","AddRemoteAccessPolicyRule",{Trigger:V,TunnelLifeTime:W,ExtendedData:T,MpServer:U},S)};J.AMT_RemoteAccessService_CloseRemoteAccessConnection=function(S,T){J.Exec("AMT_RemoteAccessService","CloseRemoteAccessConnection",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_CommitChanges=function(S,T,U){J.Exec("AMT_SetupAndConfigurationService","CommitChanges",{_method_dummy:S},T,U)};J.AMT_SetupAndConfigurationService_Unprovision=function(T,S){J.Exec("AMT_SetupAndConfigurationService","Unprovision",{ProvisioningMode:T},S)};J.AMT_SetupAndConfigurationService_PartialUnprovision=function(S,T){J.Exec("AMT_SetupAndConfigurationService","PartialUnprovision",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_ResetFlashWearOutProtection=function(S,T){J.Exec("AMT_SetupAndConfigurationService","ResetFlashWearOutProtection",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_ExtendProvisioningPeriod=function(T,S){J.Exec("AMT_SetupAndConfigurationService","ExtendProvisioningPeriod",{Duration:T},S)};J.AMT_SetupAndConfigurationService_SetMEBxPassword=function(T,S){J.Exec("AMT_SetupAndConfigurationService","SetMEBxPassword",{Password:T},S)};J.AMT_SetupAndConfigurationService_SetTLSPSK=function(T,U,S){J.Exec("AMT_SetupAndConfigurationService","SetTLSPSK",{PID:T,PPS:U},S)};J.AMT_SetupAndConfigurationService_GetProvisioningAuditRecord=function(S){J.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecord",{},S)};J.AMT_SetupAndConfigurationService_GetUuid=function(S){J.Exec("AMT_SetupAndConfigurationService","GetUuid",{},S)};J.AMT_SetupAndConfigurationService_GetUnprovisionBlockingComponents=function(S){J.Exec("AMT_SetupAndConfigurationService","GetUnprovisionBlockingComponents",{},S)};J.AMT_SetupAndConfigurationService_GetProvisioningAuditRecordV2=function(S){J.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecordV2",{},S)};J.AMT_SystemDefensePolicy_GetTimeout=function(S){J.Exec("AMT_SystemDefensePolicy","GetTimeout",{},S)};J.AMT_SystemDefensePolicy_SetTimeout=function(T,S){J.Exec("AMT_SystemDefensePolicy","SetTimeout",{Timeout:T},S)};J.AMT_SystemDefensePolicy_UpdateStatistics=function(T,V,S,X,U,W){J.Exec("AMT_SystemDefensePolicy","UpdateStatistics",{NetworkInterface:T,ResetOnRead:V},S,X,U,W)};J.AMT_SystemPowerScheme_SetPowerScheme=function(S,T,U){J.Exec("AMT_SystemPowerScheme","SetPowerScheme",{},S,U,0,{InstanceID:T})};J.AMT_TimeSynchronizationService_GetLowAccuracyTimeSynch=function(S,T){J.Exec("AMT_TimeSynchronizationService","GetLowAccuracyTimeSynch",{},S,T)};J.AMT_TimeSynchronizationService_SetHighAccuracyTimeSynch=function(T,V,W,S,U){J.Exec("AMT_TimeSynchronizationService","SetHighAccuracyTimeSynch",{Ta0:T,Tm1:V,Tm2:W},S,U)};J.AMT_TLSCredentialContext_Create=function t(T,U,S,V){J.Create("AMT_TLSCredentialContext",{ElementInContext:T,ElementProvidingContext:U},S,V)};J.AMT_UserInitiatedConnectionService_RequestStateChange=function(T,U,S){J.Exec("AMT_UserInitiatedConnectionService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_WebUIService_RequestStateChange=function(T,V,S,U){J.Exec("AMT_WebUIService","RequestStateChange",{RequestedState:T,TimeoutPeriod:V},S,U)};J.AMT_WiFiPortConfigurationService_AddWiFiSettings=function(W,X,V,U,S,T){J.ExecWithXml("AMT_WiFiPortConfigurationService","AddWiFiSettings",{WiFiEndpoint:W,WiFiEndpointSettingsInput:X,IEEE8021xSettingsInput:V,ClientCredential:U,CACredential:S},T)};J.AMT_WiFiPortConfigurationService_UpdateWiFiSettings=function(W,X,V,U,S,T){J.ExecWithXml("AMT_WiFiPortConfigurationService","UpdateWiFiSettings",{WiFiEndpointSettings:W,WiFiEndpointSettingsInput:X,IEEE8021xSettingsInput:V,ClientCredential:U,CACredential:S},T)};J.AMT_WiFiPortConfigurationService_DeleteAllITProfiles=function(S,T){J.Exec("AMT_WiFiPortConfigurationService","DeleteAllITProfiles",{_method_dummy:S},T)};J.AMT_WiFiPortConfigurationService_DeleteAllUserProfiles=function(S,T){J.Exec("AMT_WiFiPortConfigurationService","DeleteAllUserProfiles",{_method_dummy:S},T)};J.CIM_Account_RequestStateChange=function(T,U,S){J.Exec("CIM_Account","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_AccountManagementService_CreateAccount=function(U,S,T){J.Exec("CIM_AccountManagementService","CreateAccount",{System:U,AccountTemplate:S},T)};J.CIM_BootConfigSetting_ChangeBootOrder=function(T,S){J.Exec("CIM_BootConfigSetting","ChangeBootOrder",{Source:T},S)};J.CIM_BootService_SetBootConfigRole=function(S,U,T){J.Exec("CIM_BootService","SetBootConfigRole",{BootConfigSetting:S,Role:U},T,0,1)};J.CIM_Card_ConnectorPower=function(T,U,S){J.Exec("CIM_Card","ConnectorPower",{Connector:T,PoweredOn:U},S)};J.CIM_Card_IsCompatible=function(T,S){J.Exec("CIM_Card","IsCompatible",{ElementToCheck:T},S)};J.CIM_Chassis_IsCompatible=function(T,S){J.Exec("CIM_Chassis","IsCompatible",{ElementToCheck:T},S)};J.CIM_Fan_SetSpeed=function(T,S){J.Exec("CIM_Fan","SetSpeed",{DesiredSpeed:T},S)};J.CIM_KVMRedirectionSAP_RequestStateChange=function(T,U,S){J.Exec("CIM_KVMRedirectionSAP","RequestStateChange",{RequestedState:T},S)};J.CIM_MediaAccessDevice_LockMedia=function(T,S){J.Exec("CIM_MediaAccessDevice","LockMedia",{Lock:T},S)};J.CIM_MediaAccessDevice_SetPowerState=function(T,U,S){J.Exec("CIM_MediaAccessDevice","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_MediaAccessDevice_Reset=function(S){J.Exec("CIM_MediaAccessDevice","Reset",{},S)};J.CIM_MediaAccessDevice_EnableDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","EnableDevice",{Enabled:T},S)};J.CIM_MediaAccessDevice_OnlineDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","OnlineDevice",{Online:T},S)};J.CIM_MediaAccessDevice_QuiesceDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","QuiesceDevice",{Quiesce:T},S)};J.CIM_MediaAccessDevice_SaveProperties=function(S){J.Exec("CIM_MediaAccessDevice","SaveProperties",{},S)};J.CIM_MediaAccessDevice_RestoreProperties=function(S){J.Exec("CIM_MediaAccessDevice","RestoreProperties",{},S)};J.CIM_MediaAccessDevice_RequestStateChange=function(T,U,S){J.Exec("CIM_MediaAccessDevice","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_PhysicalFrame_IsCompatible=function(T,S){J.Exec("CIM_PhysicalFrame","IsCompatible",{ElementToCheck:T},S)};J.CIM_PhysicalPackage_IsCompatible=function(T,S){J.Exec("CIM_PhysicalPackage","IsCompatible",{ElementToCheck:T},S)};J.CIM_PowerManagementService_RequestPowerStateChange=function(U,T,V,W,S){J.Exec("CIM_PowerManagementService","RequestPowerStateChange",{PowerState:U,ManagedElement:T,Time:V,TimeoutPeriod:W},S,0,1)};J.CIM_PowerSupply_SetPowerState=function(T,U,S){J.Exec("CIM_PowerSupply","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_PowerSupply_Reset=function(S){J.Exec("CIM_PowerSupply","Reset",{},S)};J.CIM_PowerSupply_EnableDevice=function(T,S){J.Exec("CIM_PowerSupply","EnableDevice",{Enabled:T},S)};J.CIM_PowerSupply_OnlineDevice=function(T,S){J.Exec("CIM_PowerSupply","OnlineDevice",{Online:T},S)};J.CIM_PowerSupply_QuiesceDevice=function(T,S){J.Exec("CIM_PowerSupply","QuiesceDevice",{Quiesce:T},S)};J.CIM_PowerSupply_SaveProperties=function(S){J.Exec("CIM_PowerSupply","SaveProperties",{},S)};J.CIM_PowerSupply_RestoreProperties=function(S){J.Exec("CIM_PowerSupply","RestoreProperties",{},S)};J.CIM_PowerSupply_RequestStateChange=function(T,U,S){J.Exec("CIM_PowerSupply","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_Processor_SetPowerState=function(T,U,S){J.Exec("CIM_Processor","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Processor_Reset=function(S){J.Exec("CIM_Processor","Reset",{},S)};J.CIM_Processor_EnableDevice=function(T,S){J.Exec("CIM_Processor","EnableDevice",{Enabled:T},S)};J.CIM_Processor_OnlineDevice=function(T,S){J.Exec("CIM_Processor","OnlineDevice",{Online:T},S)};J.CIM_Processor_QuiesceDevice=function(T,S){J.Exec("CIM_Processor","QuiesceDevice",{Quiesce:T},S)};J.CIM_Processor_SaveProperties=function(S){J.Exec("CIM_Processor","SaveProperties",{},S)};J.CIM_Processor_RestoreProperties=function(S){J.Exec("CIM_Processor","RestoreProperties",{},S)};J.CIM_Processor_RequestStateChange=function(T,U,S){J.Exec("CIM_Processor","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_RecordLog_ClearLog=function(S){J.Exec("CIM_RecordLog","ClearLog",{},S)};J.CIM_RecordLog_RequestStateChange=function(T,U,S){J.Exec("CIM_RecordLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_RedirectionService_RequestStateChange=function(T,U,S){J.Exec("CIM_RedirectionService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_Sensor_SetPowerState=function(T,U,S){J.Exec("CIM_Sensor","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Sensor_Reset=function(S){J.Exec("CIM_Sensor","Reset",{},S)};J.CIM_Sensor_EnableDevice=function(T,S){J.Exec("CIM_Sensor","EnableDevice",{Enabled:T},S)};J.CIM_Sensor_OnlineDevice=function(T,S){J.Exec("CIM_Sensor","OnlineDevice",{Online:T},S)};J.CIM_Sensor_QuiesceDevice=function(T,S){J.Exec("CIM_Sensor","QuiesceDevice",{Quiesce:T},S)};J.CIM_Sensor_SaveProperties=function(S){J.Exec("CIM_Sensor","SaveProperties",{},S)};J.CIM_Sensor_RestoreProperties=function(S){J.Exec("CIM_Sensor","RestoreProperties",{},S)};J.CIM_Sensor_RequestStateChange=function(T,U,S){J.Exec("CIM_Sensor","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_StatisticalData_ResetSelectedStats=function(T,S){J.Exec("CIM_StatisticalData","ResetSelectedStats",{SelectedStatistics:T},S)};J.CIM_Watchdog_KeepAlive=function(S){J.Exec("CIM_Watchdog","KeepAlive",{},S)};J.CIM_Watchdog_SetPowerState=function(T,U,S){J.Exec("CIM_Watchdog","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Watchdog_Reset=function(S){J.Exec("CIM_Watchdog","Reset",{},S)};J.CIM_Watchdog_EnableDevice=function(T,S){J.Exec("CIM_Watchdog","EnableDevice",{Enabled:T},S)};J.CIM_Watchdog_OnlineDevice=function(T,S){J.Exec("CIM_Watchdog","OnlineDevice",{Online:T},S)};J.CIM_Watchdog_QuiesceDevice=function(T,S){J.Exec("CIM_Watchdog","QuiesceDevice",{Quiesce:T},S)};J.CIM_Watchdog_SaveProperties=function(S){J.Exec("CIM_Watchdog","SaveProperties",{},S)};J.CIM_Watchdog_RestoreProperties=function(S){J.Exec("CIM_Watchdog","RestoreProperties",{},S)};J.CIM_Watchdog_RequestStateChange=function(T,U,S){J.Exec("CIM_Watchdog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_WiFiPort_SetPowerState=function(T,U,S){J.Exec("CIM_WiFiPort","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_WiFiPort_Reset=function(S){J.Exec("CIM_WiFiPort","Reset",{},S)};J.CIM_WiFiPort_EnableDevice=function(T,S){J.Exec("CIM_WiFiPort","EnableDevice",{Enabled:T},S)};J.CIM_WiFiPort_OnlineDevice=function(T,S){J.Exec("CIM_WiFiPort","OnlineDevice",{Online:T},S)};J.CIM_WiFiPort_QuiesceDevice=function(T,S){J.Exec("CIM_WiFiPort","QuiesceDevice",{Quiesce:T},S)};J.CIM_WiFiPort_SaveProperties=function(S){J.Exec("CIM_WiFiPort","SaveProperties",{},S)};J.CIM_WiFiPort_RestoreProperties=function(S){J.Exec("CIM_WiFiPort","RestoreProperties",{},S)};J.CIM_WiFiPort_RequestStateChange=function(T,U,S){J.Exec("CIM_WiFiPort","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_HostBasedSetupService_Setup=function(W,X,V,T,Y,U,S){J.Exec("IPS_HostBasedSetupService","Setup",{NetAdminPassEncryptionType:W,NetworkAdminPassword:X,McNonce:V,Certificate:T,SigningAlgorithm:Y,DigitalSignature:U},S)};J.IPS_HostBasedSetupService_AddNextCertInChain=function(V,T,U,S){J.Exec("IPS_HostBasedSetupService","AddNextCertInChain",{NextCertificate:V,IsLeafCertificate:T,IsRootCertificate:U},S)};J.IPS_HostBasedSetupService_AdminSetup=function(V,W,U,X,T,S){J.Exec("IPS_HostBasedSetupService","AdminSetup",{NetAdminPassEncryptionType:V,NetworkAdminPassword:W,McNonce:U,SigningAlgorithm:X,DigitalSignature:T},S)};J.IPS_HostBasedSetupService_UpgradeClientToAdmin=function(U,V,T,S){J.Exec("IPS_HostBasedSetupService","UpgradeClientToAdmin",{McNonce:U,SigningAlgorithm:V,DigitalSignature:T},S)};J.IPS_HostBasedSetupService_DisableClientControlMode=function(S,T){J.Exec("IPS_HostBasedSetupService","DisableClientControlMode",{_method_dummy:S},T)};J.IPS_KVMRedirectionSettingData_TerminateSession=function(S){J.Exec("IPS_KVMRedirectionSettingData","TerminateSession",{},S)};J.IPS_KVMRedirectionSettingData_DataChannelRead=function(S){J.Exec("IPS_KVMRedirectionSettingData","DataChannelRead",{},S)};J.IPS_KVMRedirectionSettingData_DataChannelWrite=function(T,S){J.Exec("IPS_KVMRedirectionSettingData","DataChannelWrite",{DataMessage:T},S)};J.IPS_OptInService_StartOptIn=function(S){J.Exec("IPS_OptInService","StartOptIn",{},S)};J.IPS_OptInService_CancelOptIn=function(S){J.Exec("IPS_OptInService","CancelOptIn",{},S)};J.IPS_OptInService_SendOptInCode=function(T,S){J.Exec("IPS_OptInService","SendOptInCode",{OptInCode:T},S)};J.IPS_OptInService_StartService=function(S){J.Exec("IPS_OptInService","StartService",{},S)};J.IPS_OptInService_StopService=function(S){J.Exec("IPS_OptInService","StopService",{},S)};J.IPS_OptInService_RequestStateChange=function(T,U,S){J.Exec("IPS_OptInService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_ProvisioningRecordLog_RequestStateChange=function(T,U,S){J.Exec("IPS_ProvisioningRecordLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_ProvisioningRecordLog_ClearLog=function(S,T){J.Exec("IPS_ProvisioningRecordLog","ClearLog",{_method_dummy:S},T)};J.IPS_SecIOService_RequestStateChange=function(T,U,S){J.Exec("IPS_SecIOService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AmtStatusToStr=function(S){if(J.AmtStatusCodes[S]){return J.AmtStatusCodes[S]}else{return"UNKNOWN_ERROR"}};J.AmtStatusCodes={0:"SUCCESS",1:"INTERNAL_ERROR",2:"NOT_READY",3:"INVALID_PT_MODE",4:"INVALID_MESSAGE_LENGTH",5:"TABLE_FINGERPRINT_NOT_AVAILABLE",6:"INTEGRITY_CHECK_FAILED",7:"UNSUPPORTED_ISVS_VERSION",8:"APPLICATION_NOT_REGISTERED",9:"INVALID_REGISTRATION_DATA",10:"APPLICATION_DOES_NOT_EXIST",11:"NOT_ENOUGH_STORAGE",12:"INVALID_NAME",13:"BLOCK_DOES_NOT_EXIST",14:"INVALID_BYTE_OFFSET",15:"INVALID_BYTE_COUNT",16:"NOT_PERMITTED",17:"NOT_OWNER",18:"BLOCK_LOCKED_BY_OTHER",19:"BLOCK_NOT_LOCKED",20:"INVALID_GROUP_PERMISSIONS",21:"GROUP_DOES_NOT_EXIST",22:"INVALID_MEMBER_COUNT",23:"MAX_LIMIT_REACHED",24:"INVALID_AUTH_TYPE",25:"AUTHENTICATION_FAILED",26:"INVALID_DHCP_MODE",27:"INVALID_IP_ADDRESS",28:"INVALID_DOMAIN_NAME",29:"UNSUPPORTED_VERSION",30:"REQUEST_UNEXPECTED",31:"INVALID_TABLE_TYPE",32:"INVALID_PROVISIONING_STATE",33:"UNSUPPORTED_OBJECT",34:"INVALID_TIME",35:"INVALID_INDEX",36:"INVALID_PARAMETER",37:"INVALID_NETMASK",38:"FLASH_WRITE_LIMIT_EXCEEDED",39:"INVALID_IMAGE_LENGTH",40:"INVALID_IMAGE_SIGNATURE",41:"PROPOSE_ANOTHER_VERSION",42:"INVALID_PID_FORMAT",43:"INVALID_PPS_FORMAT",44:"BIST_COMMAND_BLOCKED",45:"CONNECTION_FAILED",46:"CONNECTION_TOO_MANY",47:"RNG_GENERATION_IN_PROGRESS",48:"RNG_NOT_READY",49:"CERTIFICATE_NOT_READY",1024:"DISABLED_BY_POLICY",2048:"NETWORK_IF_ERROR_BASE",2049:"UNSUPPORTED_OEM_NUMBER",2050:"UNSUPPORTED_BOOT_OPTION",2051:"INVALID_COMMAND",2052:"INVALID_SPECIAL_COMMAND",2053:"INVALID_HANDLE",2054:"INVALID_PASSWORD",2055:"INVALID_REALM",2056:"STORAGE_ACL_ENTRY_IN_USE",2057:"DATA_MISSING",2058:"DUPLICATE",2059:"EVENTLOG_FROZEN",2060:"PKI_MISSING_KEYS",2061:"PKI_GENERATING_KEYS",2062:"INVALID_KEY",2063:"INVALID_CERT",2064:"CERT_KEY_NOT_MATCH",2065:"MAX_KERB_DOMAIN_REACHED",2066:"UNSUPPORTED",2067:"INVALID_PRIORITY",2068:"NOT_FOUND",2069:"INVALID_CREDENTIALS",2070:"INVALID_PASSPHRASE",2072:"NO_ASSOCIATION",2075:"AUDIT_FAIL",2076:"BLOCKING_COMPONENT",2081:"USER_CONSENT_REQUIRED",4096:"APP_INTERNAL_ERROR",4097:"NOT_INITIALIZED",4098:"LIB_VERSION_UNSUPPORTED",4099:"INVALID_PARAM",4100:"RESOURCES",4101:"HARDWARE_ACCESS_ERROR",4102:"REQUESTOR_NOT_REGISTERED",4103:"NETWORK_ERROR",4104:"PARAM_BUFFER_TOO_SHORT",4105:"COM_NOT_INITIALIZED_IN_THREAD",4106:"URL_REQUIRED"};J.GetMessageLog=function(S,T){J.AMT_MessageLog_PositionToFirstRecord(k,[S,T,[]])};function k(U,S,T,V,W){if(V!=200||T.Body.ReturnValue!="0"){W[0](J,null,W[2],V);return}J.AMT_MessageLog_GetRecords(T.Body.IterationIdentifier,390,l,W)}function l(Z,W,Y,aa,ac){if(aa!=200||Y.Body.ReturnValue!="0"){ac[0](J,null,ac[2],aa);return}var U,V,ae,T,S=ac[2],ab=new Date(),ad,X=Y.Body.RecordArray;if(typeof X==="string"){Y.Body.RecordArray=[Y.Body.RecordArray]}for(U in X){T=Buffer.from(X[U],"base64");if(T!=null){ad=M(T,0);if((ad>0)&&(ad<4294967295)){ae={DeviceAddress:T[4],EventSensorType:T[5],EventType:T[6],EventOffset:T[7],EventSourceType:T[8],EventSeverity:T[9],SensorNumber:T[10],Entity:T[11],EntityInstance:T[12],EventData:[],Time:new Date((ad+(ab.getTimezoneOffset()*60))*1000)};for(V=13;V<21;V++){ae.EventData.push(T[V])}ae.EntityStr=o[ae.Entity];ae.Desc=j(ae.EventSensorType,ae.EventOffset,ae.EventData,ae.Entity);if(!ae.EntityStr){ae.EntityStr="Unknown"}S.push(ae)}}}if(Y.Body.NoMoreRecords!=true){J.AMT_MessageLog_GetRecords(Y.Body.IterationIdentifier,390,l,[ac[0],S,ac[2]])}else{ac[0](J,S,ac[2])}}var f="Platform firmware (e.g. BIOS)|SMI handler|ISV system management software|Alert ASIC|IPMI|BIOS vendor|System board set vendor|System integrator|Third party add-in|OSV|NIC|System management card".split("|");var p="Unspecified.|No system memory is physically installed in the system.|No usable system memory, all installed memory has experienced an unrecoverable failure.|Unrecoverable hard-disk/ATAPI/IDE device failure.|Unrecoverable system-board failure.|Unrecoverable diskette subsystem failure.|Unrecoverable hard-disk controller failure.|Unrecoverable PS/2 or USB keyboard failure.|Removable boot media not found.|Unrecoverable video controller failure.|No video device detected.|Firmware (BIOS) ROM corruption detected.|CPU voltage mismatch (processors that share same supply have mismatched voltage requirements)|CPU speed matching failure".split("|");var q="Unspecified.|Memory initialization.|Starting hard-disk initialization and test|Secondary processor(s) initialization|User authentication|User-initiated system setup|USB resource configuration|PCI resource configuration|Option ROM initialization|Video initialization|Cache initialization|SM Bus initialization|Keyboard controller initialization|Embedded controller/management controller initialization|Docking station attachment|Enabling docking station|Docking station ejection|Disabling docking station|Calling operating system wake-up vector|Starting operating system boot process|Baseboard or motherboard initialization|reserved|Floppy initialization|Keyboard test|Pointing device test|Primary processor initialization".split("|");var o="Unspecified|Other|Unknown|Processor|Disk|Peripheral|System management module|System board|Memory module|Processor module|Power supply|Add in card|Front panel board|Back panel board|Power system board|Drive backplane|System internal expansion board|Other system board|Processor board|Power unit|Power module|Power management board|Chassis back panel board|System chassis|Sub chassis|Other chassis board|Disk drive bay|Peripheral bay|Device bay|Fan cooling|Cooling unit|Cable interconnect|Memory device|System management software|BIOS|Intel(r) ME|System bus|Group|Intel(r) ME|External environment|Battery|Processing blade|Connectivity switch|Processor/memory module|I/O module|Processor I/O module|Management controller firmware|IPMI channel|PCI bus|PCI express bus|SCSI bus|SATA/SAS bus|Processor front side bus".split("|");J.RealmNames="||Redirection|PT Administration|Hardware Asset|Remote Control|Storage|Event Manager|Storage Admin|Agent Presence Local|Agent Presence Remote|Circuit Breaker|Network Time|General Information|Firmware Update|EIT|LocalUN|Endpoint Access Control|Endpoint Access Control Admin|Event Log Reader|Audit Log|ACL Realm|||Local System".split("|");J.WatchdogCurrentStates={1:"Not Started",2:"Stopped",4:"Running",8:"Expired",16:"Suspended"};function j(V,U,T,S){if(V==15){if(T[0]==235){return"Invalid Data"}if(U==0){return p[T[1]]}return q[T[1]]}if(V==18&&T[0]==170){return"Agent watchdog "+char2hex(T[4])+char2hex(T[3])+char2hex(T[2])+char2hex(T[1])+"-"+char2hex(T[6])+char2hex(T[5])+"-... changed to "+J.WatchdogCurrentStates[T[7]]}if(V==6){return"Authentication failed "+(T[1]+(T[2]<<8))+" times. The system may be under attack."}if(V==30){return"No bootable media"}if(V==32){return"Operating system lockup or power interrupt"}if(V==35){return"System boot failure"}if(V==37){return"System firmware started (at least one CPU is properly executing)."}return"Unknown Sensor Type #"+V}var a={16:"Security Admin",17:"RCO",18:"Redirection Manager",19:"Firmware Update Manager",20:"Security Audit Log",21:"Network Time",22:"Network Administration",23:"Storage Administration",24:"Event Manager",25:"Circuit Breaker Manager",26:"Agent Presence Manager",27:"Wireless Configuration",28:"EAC",29:"KVM",30:"User Opt-In Events",32:"Screen Blanking",33:"Watchdog Events",1600:"Provisioning Started",1601:"Provisioning Completed",1602:"ACL Entry Added",1603:"ACL Entry Modified",1604:"ACL Entry Removed",1605:"ACL Access with Invalid Credentials",1606:"ACL Entry State",1607:"TLS State Changed",1608:"TLS Server Certificate Set",1609:"TLS Server Certificate Remove",1610:"TLS Trusted Root Certificate Added",1611:"TLS Trusted Root Certificate Removed",1612:"TLS Preshared Key Set",1613:"Kerberos Settings Modified",1614:"Kerberos Master Key Modified",1615:"Flash Wear out Counters Reset",1616:"Power Package Modified",1617:"Set Realm Authentication Mode",1618:"Upgrade Client to Admin Control Mode",1619:"Unprovisioning Started",1700:"Performed Power Up",1701:"Performed Power Down",1702:"Performed Power Cycle",1703:"Performed Reset",1704:"Set Boot Options",1800:"IDER Session Opened",1801:"IDER Session Closed",1802:"IDER Enabled",1803:"IDER Disabled",1804:"SoL Session Opened",1805:"SoL Session Closed",1806:"SoL Enabled",1807:"SoL Disabled",1808:"KVM Session Started",1809:"KVM Session Ended",1810:"KVM Enabled",1811:"KVM Disabled",1812:"VNC Password Failed 3 Times",1900:"Firmware Updated",1901:"Firmware Update Failed",2000:"Security Audit Log Cleared",2001:"Security Audit Policy Modified",2002:"Security Audit Log Disabled",2003:"Security Audit Log Enabled",2004:"Security Audit Log Exported",2005:"Security Audit Log Recovered",2100:"Intel(R) ME Time Set",2200:"TCPIP Parameters Set",2201:"Host Name Set",2202:"Domain Name Set",2203:"VLAN Parameters Set",2204:"Link Policy Set",2205:"IPv6 Parameters Set",2300:"Global Storage Attributes Set",2301:"Storage EACL Modified",2302:"Storage FPACL Modified",2303:"Storage Write Operation",2400:"Alert Subscribed",2401:"Alert Unsubscribed",2402:"Event Log Cleared",2403:"Event Log Frozen",2500:"CB Filter Added",2501:"CB Filter Removed",2502:"CB Policy Added",2503:"CB Policy Removed",2504:"CB Default Policy Set",2505:"CB Heuristics Option Set",2506:"CB Heuristics State Cleared",2600:"Agent Watchdog Added",2601:"Agent Watchdog Removed",2602:"Agent Watchdog Action Set",2700:"Wireless Profile Added",2701:"Wireless Profile Removed",2702:"Wireless Profile Updated",2800:"EAC Posture Signer SET",2801:"EAC Enabled",2802:"EAC Disabled",2803:"EAC Posture State",2804:"EAC Set Options",2900:"KVM Opt-in Enabled",2901:"KVM Opt-in Disabled",2902:"KVM Password Changed",2903:"KVM Consent Succeeded",2904:"KVM Consent Failed",3000:"Opt-In Policy Change",3001:"Send Consent Code Event",3002:"Start Opt-In Blocked Event"};J.GetAuditLogExtendedDataStr=function(T,S){if((T==1602||T==1604)&&S[0]==0){return w(S).splice(2,2+S[1]).toString()}if(T==1603){if(S[1]==0){return w(S).splice(3).toString()}return null}if(T==1605){return["Invalid ME access","Invalid MEBx access"][S[0]]}if(T==1606){var U=["Disabled","Enabled"][S[0]];if(S[1]==0){U+=", "+S[3]}return U}if(T==1607){return"Remote "+["NoAuth","ServerAuth","MutualAuth"][S[0]]+", Local "+["NoAuth","ServerAuth","MutualAuth"][S[1]]}if(T==1617){return J.RealmNames[L(S,0)]+", "+["NoAuth","Auth","Disabled"][S[4]]}if(T==1619){return["BIOS","MEBx","Local MEI","Local WSMAN","Remote WSAMN"][S[0]]}if(T==1900){return"From "+N(S,0)+"."+N(S,2)+"."+N(S,4)+"."+N(S,6)+" to "+N(S,8)+"."+N(S,10)+"."+N(S,12)+"."+N(S,14)}if(T==2100){var V=new Date();V.setTime(L(S,0)*1000+(new Date().getTimezoneOffset()*60000));return V.toLocaleString()}if(T==3000){return"From "+["None","KVM","All"][S[0]]+" to "+["None","KVM","All"][S[1]]}if(T==3001){return["Success","Failed 3 times"][S[0]]}return null};J.GetAuditLog=function(S){J.AMT_AuditLog_ReadRecords(1,i,[S,[]])};function I(S){if(!S||S==null||typeof S=="object"){return S}return[S]}function N(T,S){return(T[S]<<8)+T[S+1]}function L(T,S){return(T[S]*16777216)+(T[S+1]<<16)+(T[S+2]<<8)+T[S+3]}function M(T,S){return(T[S+3]*16777216)+(T[S+2]<<16)+(T[S+1]<<8)+T[S]}function v(S){return Buffer.from(S).toString("base64")}function u(T){var U=null;try{U=Buffer.from(T,"base64").toString()}catch(S){console.log(S)}return U}function w(S){var U=[];for(var T in S){U.push(S[T])}return U}function i(ab,W,aa,ac,ae){if(ac!=200){ae[0](J,[],ac);return}var Y,V,S,ah,Z=ae[1],ad=new Date(),af;if(aa.Body.RecordsReturned>0){aa.Body.EventRecords=I(aa.Body.EventRecords);for(V in aa.Body.EventRecords){S=null;try{S=Buffer.from(aa.Body.EventRecords[V],"base64")}catch(T){console.log(T+" "+aa.Body.EventRecords[V])}ah={AuditAppID:N(S,0),EventID:N(S,2),InitiatorType:S[4]};ah.AuditApp=a[ah.AuditAppID];ah.Event=a[(ah.AuditAppID*100)+ah.EventID];if(!ah.Event){ah.Event="#"+ah.EventID}if(ah.InitiatorType==0){var ag=S[5];ah.Initiator=S.slice(6,6+ag).toString();Y=6+ag}if(ah.InitiatorType==1){ah.KerberosUserInDomain=L(S,5);var ag=S[9];ah.Initiator=G(S.slice(10,10+ag));Y=10+ag}if(ah.InitiatorType==2){ah.Initiator="Local";Y=5}if(ah.InitiatorType==3){ah.Initiator="KVM Default Port";Y=5}af=L(S,Y);ah.Time=new Date((af+(ad.getTimezoneOffset()*60))*1000);Y+=4;ah.MCLocationType=S[Y++];var X=S[Y++];ah.NetAddress=S.slice(Y,Y+X).toString();Y+=X;var U=S[Y++];ah.Ex=S.slice(Y,Y+U);ah.ExStr=J.GetAuditLogExtendedDataStr((ah.AuditAppID*100)+ah.EventID,ah.Ex);Z.push(ah)}}if(aa.Body.TotalRecordCount>Z.length){J.AMT_AuditLog_ReadRecords(Z.length+1,i,[ae[0],Z])}else{ae[0](J,Z,ac)}}function C(U){if(U===undefined||U===null){return null}var V="";for(var T in U){var S=U[T];if(!S){continue}if(S.__parameterType==="reference"){V+=O(T,S)}else{V+=H(T,S)}}return V}function H(V,U){if(U===undefined||U===null){return null}var T=!!U.__namespace;var Z=T?"<q:":"<";var S=T?"</q:":"</";var W=T?(' xmlns:q="'+U.__namespace+'"'):"";var Y="<r:"+V+W+">";for(var X in U){if(!U.hasOwnProperty(X)||X.indexOf("__")===0){continue}if(typeof U[X]==="function"||Array.isArray(U[X])){continue}if(typeof U[X]==="object"){console.error("only convert one level down...")}else{Y+=Z+X+">"+U[X].toString()+S+X+">"}}Y+="</r:"+V+">";return Y}function O(T,S){if(S===undefined||S===null){return null}var U="<r:"+T+"><a:Address>/wsman</a:Address><a:ReferenceParameters><w:ResourceURI>"+S.__resourceUri+"</w:ResourceURI><w:SelectorSet>";for(var V in S){if(!S.hasOwnProperty(V)||V.indexOf("__")===0){continue}if(typeof S[V]==="function"||typeof S[V]==="object"||Array.isArray(S[V])){continue}U+='<w:Selector Name="'+V+'">'+S[V].toString()+"</w:Selector>"}U+="</w:SelectorSet></a:ReferenceParameters></r:"+T+">";return U}function G(U){var T="S-"+U.charCodeAt(0)+"-"+U.charCodeAt(7);for(var S=2;S<(U.length/4);S++){T+="-"+M(U,S*4)}return T}function F(V){if(!V||V==null){return null}var U=V.split("-");if(U.length<4||(U[0]!="s"&&U[0]!="S")){return null}for(var S=1;S<U.length;S++){var W=parseInt(U[S]);if(W!=U[S]){return null}U[S]=W}var T=String.fromCharCode(U[1])+String.fromCharCode(U.length-3)+ShortToStr(Math.floor(U[2]/Math.pow(2,32)))+IntToStr((U[2])&65535);for(var S=3;S<U.length;S++){T+=IntToStrX(U[S])}return T}return J}module.exports=AmtStackCreateService;
\ No newline at end of file
agents/modules_meshcmd_min/identifiers.min.js
new
+1
@@ -0,0 +1 @@
1
+function trimIdentifiers(b){for(var a in b){if(!b[a]||b[a]=="None"||b[a]==""){delete b[a]}}}function linux_identifiers(){var c={};var d={};var e={};if(!require("fs").existsSync("/sys/class/dmi/id")){throw ("this platform does not have DMI statistics")}var a=require("fs").readdirSync("/sys/class/dmi/id");for(var b in a){if(require("fs").statSync("/sys/class/dmi/id/"+a[b]).isFile()){d[a[b]]=require("fs").readFileSync("/sys/class/dmi/id/"+a[b]).toString().trim();if(d[a[b]]=="None"){delete d[a[b]]}}}c.bios_date=d.bios_date;c.bios_vendor=d.bios_vendor;c.bios_version=d.bios_version;c.board_name=d.board_name;c.board_serial=d.board_serial;c.board_vendor=d.board_vendor;c.board_version=d.board_version;c.product_uuid=d.product_uuid;e.identifiers=c;e.linux=d;trimIdentifiers(e.identifiers);return(e)}function windows_wmic_results(h){var e=h.trim().split("\r\n");var c=e[0].split(",");var a,b,d;var j;var g=[];for(a=1;a<e.length;++a){var f={};j=e[a].split(",");for(b=0;b<c.length;++b){if(j[b].trim()){f[c[b].trim()]=j[b].trim()}}g.push(f)}return(g)}function windows_identifiers(){var e={windows:{}};values={};var d;var b;var c;var a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","bios","get","/VALUE"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();var d=a.stdout.str.split("\r\r\n");for(b in d){c=d[b].split("=");values[c[0]]=c[1]}e.identifiers={};e.identifiers["bios_date"]=values.ReleaseDate;e.identifiers["bios_vendor"]=values.Manufacturer;e.identifiers["bios_version"]=values.SMBIOSBIOSVersion;a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","BASEBOARD","get","/VALUE"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();var d=a.stdout.str.split("\r\r\n");for(b in d){c=d[b].split("=");values[c[0]]=c[1]}e.identifiers["board_name"]=values.Product;e.identifiers["board_serial"]=values.SerialNumber;e.identifiers["board_vendor"]=values.Manufacturer;e.identifiers["board_version"]=values.Version;a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","CSProduct","get","/VALUE"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();var d=a.stdout.str.split("\r\r\n");for(b in d){c=d[b].split("=");values[c[0]]=c[1]}e.identifiers["product_uuid"]=values.UUID;trimIdentifiers(e.identifiers);a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","MEMORYCHIP","LIST","/FORMAT:CSV"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();e.windows.memory=windows_wmic_results(a.stdout.str);a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","OS","GET","/FORMAT:CSV"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();e.windows.osinfo=windows_wmic_results(a.stdout.str)[0];a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","PARTITION","LIST","/FORMAT:CSV"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();e.windows.partitions=windows_wmic_results(a.stdout.str);return(e)}function macos_identifiers(){var b={identifiers:{}};var a;a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep board-id | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.board_name=a.stdout.str.trim();a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep IOPlatformSerialNumber | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.board_serial=a.stdout.str.trim();a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep manufacturer | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.board_vendor=a.stdout.str.trim();a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep version | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.board_version=a.stdout.str.trim();a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep IOPlatformUUID | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.product_uuid=a.stdout.str.trim();trimIdentifiers(b.identifiers);return(b)}switch(process.platform){case"linux":module.exports={_ObjectID:"identifiers",get:linux_identifiers};break;case"win32":module.exports={_ObjectID:"identifiers",get:windows_identifiers};break;case"darwin":module.exports={_ObjectID:"identifiers",get:macos_identifiers};break;default:module.exports={get:function(){throw ("Unsupported Platform")}};break};
\ No newline at end of file
agents/modules_meshcmd_min/service-host.min.js
new
+1
@@ -0,0 +1 @@
1
+var SERVICE_WIN32=16|32;var SERVICE_STATE={STOPPED:1,SERVICE_START_PENDING:2,SERVICE_STOP_PENDING:3,RUNNING:4};var SERVICE_ACCEPT={SERVICE_ACCEPT_STOP:1,SERVICE_ACCEPT_SHUTDOWN:4,SERVICE_ACCEPT_POWEREVENT:64,SERVICE_ACCEPT_SESSIONCHANGE:128};var SERVICE_CONTROL={SERVICE_CONTROL_SHUTDOWN:5,SERVICE_CONTROL_STOP:1,SERVICE_CONTROL_POWEREVENT:13,SERVICE_CONTROL_SESSIONCHANGE:14};var SESSION_CHANGE_TYPE={WTS_CONSOLE_CONNECT:1,WTS_CONSOLE_DISCONNECT:2,WTS_REMOTE_CONNECT:3,WTS_REMOTE_DISCONNECT:4,WTS_SESSION_LOGON:5,WTS_SESSION_LOGOFF:6,WTS_SESSION_LOCK:7,WTS_SESSION_UNLOCK:8,WTS_SESSION_REMOTE_CONTROL:9,WTS_SESSION_CREATE:10,WTS_SESSION_TERMINATE:11};var NO_ERROR=0;var serviceManager=require("service-manager");function serviceHost(e){this._ObjectID="service-host";var a=require("events").inherits(this);a.createEvent("serviceStart");a.createEvent("serviceStop");a.createEvent("normalStart");a.createEvent("session");a.createEvent("powerStateChange");if(process.platform=="win32"){this.GM=require("_GenericMarshal");this.Advapi=this.GM.CreateNativeProxy("Advapi32.dll");this.Advapi.CreateMethod({method:"StartServiceCtrlDispatcherA",threadDispatch:1});this.Advapi.CreateMethod("RegisterServiceCtrlHandlerExA");this.Advapi.CreateMethod("SetServiceStatus");this.Kernel32=this.GM.CreateNativeProxy("Kernel32.dll");this.Kernel32.CreateMethod("GetLastError");this.Ole32=this.GM.CreateNativeProxy("Ole32.dll");this.Ole32.CreateMethod("CoInitializeEx");this.Ole32.CreateMethod("CoUninitialize");this._ServiceName=this.GM.CreateVariable(typeof(e)=="string"?e:e.name);this._ServiceMain=this.GM.GetGenericGlobalCallback(2);this._ServiceMain.Parent=this;this._ServiceMain.GM=this.GM;this._ServiceMain.on("GlobalCallback",function b(f,g){this.Parent._ServiceStatus=this.GM.CreateVariable(28);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_WIN32);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.SERVICE_STOPPED,4);this.Parent._ServiceStatusHandle=this.Parent.Advapi.RegisterServiceCtrlHandlerExA(this.Parent._ServiceName,this.Parent._ServiceControlHandler,this.Parent.GM.StashObject(this.Parent._ServiceControlHandler));if(this.Parent._ServiceStatusHandle.Val==0){process.exit(1)}this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.SERVICE_START_PENDING,4);this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_STATE.RUNNING,4);this.Parent._ServiceStatus.toBuffer().writeUInt32LE(SERVICE_ACCEPT.SERVICE_ACCEPT_STOP|SERVICE_ACCEPT.SERVICE_ACCEPT_POWEREVENT|SERVICE_ACCEPT.SERVICE_ACCEPT_SESSIONCHANGE,8);this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus);this.Parent.Ole32.CoInitializeEx(0,2);this.Parent.on("~",function h(){var j=require("_GenericMarshal");var i=j.CreateNativeProxy("Advapi32.dll");i.CreateMethod("SetServiceStatus");Kernel32=this.GM.CreateNativeProxy("Kernel32.dll");Kernel32.CreateMethod("GetLastError");var k=j.CreateVariable(28);k.toBuffer().writeUInt32LE(SERVICE_WIN32);k.toBuffer().writeUInt32LE(1,4);k.toBuffer().writeUInt32LE(0,8);i.SetServiceStatus(this._ServiceStatusHandle,k);this.Ole32.CoUninitialize()});this.Parent.emit("serviceStart")});this._ServiceControlHandler=this.GM.GetGenericGlobalCallback(4);this._ServiceControlHandler.Parent=this;this._ServiceControlHandler.GM=this.GM;this._ServiceControlHandler.on("GlobalCallback",function c(f,i,h,g){var k=this.Parent.GM.UnstashObject(g);if(k!=null&&k==this){switch(f.Val){case SERVICE_CONTROL.SERVICE_CONTROL_SHUTDOWN:case SERVICE_CONTROL.SERVICE_CONTROL_STOP:this.Parent.emit("serviceStop");return;case SERVICE_CONTROL.SERVICE_CONTROL_SESSIONCHANGE:var l=h.Deref(4,4).toBuffer().readUInt32LE();switch(i.Val){case SESSION_CHANGE_TYPE.WTS_SESSION_LOGON:case SESSION_CHANGE_TYPE.WTS_SESSION_LOGOFF:require("user-sessions").emit("changed");break}break;default:break}this.Parent.Advapi.SetServiceStatus(this.Parent._ServiceStatusHandle,this.Parent._ServiceStatus)}})}if(e){this._ServiceOptions=typeof(e)=="object"?e:{name:e}}else{throw ("Must specify either ServiceName or Options")}if(!this._ServiceOptions.servicePath){this._ServiceOptions.servicePath=process.execPath}this.run=function d(){var r=0;for(var h=0;h<process.argv.length;++h){switch(process.argv[h]){case"-install":if(!this._svcManager){this._svcManager=new serviceManager()}try{this._svcManager.installService(this._ServiceOptions)}catch(g){console.log(g);process.exit()}console.log(this._ServiceOptions.name+" installed");process.exit();break;case"-uninstall":if(!this._svcManager){this._svcManager=new serviceManager()}try{this._svcManager.uninstallService(this._ServiceOptions)}catch(g){console.log(g);process.exit()}if(process.platform=="win32"||process.platform=="darwin"){console.log(this._ServiceOptions.name+" uninstalled");process.exit()}h=process.argv.length;r=1;break;case"start":case"-d":if(process.platform!="win32"){break}if(!this._svcManager){this._svcManager=new serviceManager()}this._svcManager.getService(this._ServiceOptions.name).start();console.log(this._ServiceOptions.name+" starting...");process.exit();break;case"stop":case"-s":if(process.platform!="win32"){break}if(!this._svcManager){this._svcManager=new serviceManager()}this._svcManager.getService(this._ServiceOptions.name).stop();console.log(this._ServiceOptions.name+" stopping...");process.exit();break}}if(process.platform=="win32"){var s=this.GM.CreateVariable(4*this.GM.PointerSize);this._ServiceName.pointerBuffer().copy(s.toBuffer());this._ServiceMain.pointerBuffer().copy(s.toBuffer(),this.GM.PointerSize);this._sscd=this.Advapi.StartServiceCtrlDispatcherA(s);this._sscd.parent=this;this._sscd.on("done",function m(i){if(i.Val==0){this.parent.emit("normalStart")}});return}else{if(process.platform=="linux"){var k=this._ServiceOptions?this._ServiceOptions.name:process.execPath.substring(1+process.execPath.lastIndexOf("/"));for(var h=0;h<process.argv.length;++h){switch(process.argv[h]){case"start":case"-d":var f=require("child_process").execFile(process.execPath,[k],{type:require("child_process").SpawnTypes.DETACHED});var q=null;try{q=require("fs").createWriteStream("/var/run/"+k+".pid",{flags:"w"})}catch(g){}if(q==null){q=require("fs").createWriteStream("."+k+".pid",{flags:"w"})}q.end(f.pid.toString());console.log(k+" started!");process.exit();break;case"stop":case"-s":var o=null;try{o=parseInt(require("fs").readFileSync("/var/run/"+k+".pid",{flags:"r"}));require("fs").unlinkSync("/var/run/"+k+".pid")}catch(g){}if(o==null){try{o=parseInt(require("fs").readFileSync("."+k+".pid",{flags:"r"}));require("fs").unlinkSync("."+k+".pid")}catch(g){}}if(o){process.kill(o);console.log(k+" stopped")}else{console.log(k+" not running")}process.exit();break}}if(r==0){var o=null;try{o=parseInt(require("fs").readFileSync("/var/run/"+k+".pid",{flags:"r"}))}catch(g){}if(o==null){try{o=parseInt(require("fs").readFileSync("."+k+".pid",{flags:"r"}))}catch(g){}}if(o!=null&&o==process.pid){this.emit("serviceStart")}else{if(require("process-manager").getProcessInfo(1).Name=="systemd"){this._checkpid=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._checkpid.result="";this._checkpid.parent=this;this._checkpid.on("exit",function l(){var i=this.result.split("\r\n");for(h in i){if(i[h].startsWith(" Main PID:")){var p=i[h].split(" ");if(parseInt(p[3])==process.pid){this.parent.emit("serviceStart")}else{this.parent.emit("normalStart")}delete this.parent._checkpid;return}}this.parent.emit("normalStart");delete this.parent._checkpid});this._checkpid.stdout.on("data",function(i){this.parent.result+=i.toString()});this._checkpid.stdin.write("systemctl status "+k+" | grep 'Main PID:'\n");this._checkpid.stdin.write("exit\n")}else{this.emit("normalStart")}}}}else{if(process.platform=="darwin"){var f=require("child_process").execFile("/bin/sh",["sh"]);f.stdout.str="";f.stdout.on("data",function(i){this.str+=i.toString()});f.stdin.write("launchctl list\nexit\n");f.waitExit();var j=f.stdout.str.split("\n");var t,h;var n={};for(h=1;h<j.length;++h){t=j[h].split("\t");if(t[0]&&t[0]!="-"){n[t[0]]=t[0]}}if(n[process.pid.toString()]){this.emit("serviceStart")}else{this.emit("normalStart")}}}}}}module.exports=serviceHost;
\ No newline at end of file
agents/modules_meshcmd_min/service-manager.min.js
new
+1
@@ -0,0 +1 @@
1
+function parseServiceStatus(d){var b={};var c=d.Deref(0,4).IntVal;b.isFileSystemDriver=((c&2)==2);b.isKernelDriver=((c&1)==1);b.isSharedProcess=((c&32)==32);b.isOwnProcess=((c&16)==16);b.isInteractive=((c&256)==256);switch(d.Deref((1*4),4).toBuffer().readUInt32LE()){case 5:b.state="CONTINUE_PENDING";break;case 6:b.state="PAUSE_PENDING";break;case 7:b.state="PAUSED";break;case 4:b.state="RUNNING";break;case 2:b.state="START_PENDING";break;case 3:b.state="STOP_PENDING";break;case 1:b.state="STOPPED";break}var a=d.Deref((2*4),4).toBuffer().readUInt32LE();b.controlsAccepted=[];if((a&16)==16){b.controlsAccepted.push("SERVICE_CONTROL_NETBINDADD");b.controlsAccepted.push("SERVICE_CONTROL_NETBINDREMOVE");b.controlsAccepted.push("SERVICE_CONTROL_NETBINDENABLE");b.controlsAccepted.push("SERVICE_CONTROL_NETBINDDISABLE")}if((a&8)==8){b.controlsAccepted.push("SERVICE_CONTROL_PARAMCHANGE")}if((a&2)==2){b.controlsAccepted.push("SERVICE_CONTROL_PAUSE");b.controlsAccepted.push("SERVICE_CONTROL_CONTINUE")}if((a&256)==256){b.controlsAccepted.push("SERVICE_CONTROL_PRESHUTDOWN")}if((a&4)==4){b.controlsAccepted.push("SERVICE_CONTROL_SHUTDOWN")}if((a&1)==1){b.controlsAccepted.push("SERVICE_CONTROL_STOP")}if((a&32)==32){b.controlsAccepted.push("SERVICE_CONTROL_HARDWAREPROFILECHANGE")}if((a&64)==64){b.controlsAccepted.push("SERVICE_CONTROL_POWEREVENT")}if((a&128)==128){b.controlsAccepted.push("SERVICE_CONTROL_SESSIONCHANGE")}b.pid=d.Deref((7*4),4).toBuffer().readUInt32LE();return(b)}function serviceManager(){this._ObjectID="service-manager";if(process.platform=="win32"){this.GM=require("_GenericMarshal");this.proxy=this.GM.CreateNativeProxy("Advapi32.dll");this.proxy.CreateMethod("OpenSCManagerA");this.proxy.CreateMethod("EnumServicesStatusExA");this.proxy.CreateMethod("OpenServiceA");this.proxy.CreateMethod("QueryServiceStatusEx");this.proxy.CreateMethod("ControlService");this.proxy.CreateMethod("StartServiceA");this.proxy.CreateMethod("CloseServiceHandle");this.proxy.CreateMethod("CreateServiceA");this.proxy.CreateMethod("ChangeServiceConfig2A");this.proxy.CreateMethod("DeleteService");this.proxy.CreateMethod("AllocateAndInitializeSid");this.proxy.CreateMethod("CheckTokenMembership");this.proxy.CreateMethod("FreeSid");this.proxy2=this.GM.CreateNativeProxy("Kernel32.dll");this.proxy2.CreateMethod("GetLastError");this.isAdmin=function e(){var j=this.GM.CreateVariable(6);j.toBuffer().writeInt8(5,5);var h=this.GM.CreatePointer();var g=false;if(this.proxy.AllocateAndInitializeSid(j,2,32,544,0,0,0,0,0,0,h).Val!=0){var i=this.GM.CreateInteger();if(this.proxy.CheckTokenMembership(0,h.Deref(),i).Val!=0){if(i.toBuffer().readUInt32LE()!=0){g=true}}this.proxy.FreeSid(h.Deref())}return g};this.getProgramFolder=function a(){if(require("os").arch()=="x64"){if(this.GM.PointerSize==4){return process.env["ProgramFiles(x86)"]}return process.env.ProgramFiles}return process.env.ProgramFiles};this.getServiceFolder=function b(){return this.getProgramFolder()+"\\mesh"};this.enumerateService=function(){var o=this.GM.CreatePointer();var k=this.GM.CreatePointer();var l=this.proxy.OpenSCManagerA(0,0,1|4);var h=this.GM.CreatePointer();var t=this.GM.CreatePointer();var q=this.GM.CreatePointer();var u=this.proxy.EnumServicesStatusExA(l,0,48,3,0,0,h,t,q,0);if(h.IntVal<=0){throw ("error enumerating services")}var v=h.IntVal;var s=this.GM.CreateVariable(v);this.proxy.EnumServicesStatusExA(l,0,48,3,s,v,h,t,q,0);console.log("servicesReturned",t.IntVal);var p=k._size;var g=36+(2*p);g+=((p-(g%p))%p);var r=[];for(var m=0;m<t.IntVal;++m){var w=s.Deref(m*g,g);var n={};n.name=w.Deref(0,p).Deref().String;n.displayName=w.Deref(p,p).Deref().String;n.status=parseServiceStatus(w.Deref(2*p,36));r.push(n)}this.proxy.CloseServiceHandle(l);return(r)};this.getService=function(k){var m=this.GM.CreateVariable(k);var l=this.GM.CreatePointer();var g=this.GM.CreateVariable(l._size);var j=this.proxy.OpenSCManagerA(0,0,1|4|32|16);if(j.Val==0){throw ("could not open ServiceManager")}var i=this.proxy.OpenServiceA(j,m,4|32|16|65536);if(i.Val!=0){var o=this.proxy.QueryServiceStatusEx(i,0,0,0,g);var n=this.GM.CreateVariable(g.toBuffer().readUInt32LE());o=this.proxy.QueryServiceStatusEx(i,0,n,n._size,g);if(o!=0){retVal={};retVal.status=parseServiceStatus(n);retVal._scm=j;retVal._service=i;retVal._GM=this.GM;retVal._proxy=this.proxy;require("events").inherits(retVal);retVal.on("~",function(){this._proxy.CloseServiceHandle(this);this._proxy.CloseServiceHandle(this._scm)});retVal.name=k;retVal.stop=function(){if(this.status.state=="RUNNING"){var h=this._GM.CreateVariable(36);var p=this._proxy.ControlService(this._service,1,h);if(p==0){throw (this.name+".stop() failed")}}else{throw ("cannot call "+this.name+".stop(), when current state is: "+this.status.state)}};retVal.start=function(){if(this.status.state=="STOPPED"){var h=this._proxy.StartServiceA(this._service,0,0);if(h==0){throw (this.name+".start() failed")}}else{throw ("cannot call "+this.name+".start(), when current state is: "+this.status.state)}};return(retVal)}else{}}this.proxy.CloseServiceHandle(j);throw ("could not find service: "+k)}}else{this.isAdmin=function e(){return(require("user-sessions").isRoot())}}this.installService=function d(r){if(process.platform=="win32"){if(!this.isAdmin()){throw ("Installing as Service, requires admin")}var l=this.getServiceFolder();if(!require("fs").existsSync(l)){require("fs").mkdirSync(l)}require("fs").copyFileSync(r.servicePath,l+"\\"+r.name+".exe");r.servicePath=l+"\\"+r.name+".exe";var w=this.GM.CreateVariable('"'+r.servicePath+'"');var o=this.proxy.OpenSCManagerA(0,0,2);if(o.Val==0){throw ("error opening SCManager")}var v=this.GM.CreateVariable(r.name);var j=this.GM.CreateVariable(r.name);var g=983551;var x;switch(r.startType){case"BOOT_START":x=0;break;case"SYSTEM_START":x=1;break;case"AUTO_START":x=2;break;case"DEMAND_START":x=3;break;default:x=4;break}var n=this.proxy.CreateServiceA(o,v,j,g,16|256,x,0,w,0,0,0,0,0);if(n.Val==0){this.proxy.CloseServiceHandle(o);throw ("Error Creating Service: "+this.proxy2.GetLastError().Val)}if(r.description){console.log(r.description);var k=this.GM.CreatePointer();k.Val=this.GM.CreateVariable(r.description);if(this.proxy.ChangeServiceConfig2A(n,1,k)==0){this.proxy.CloseServiceHandle(n);this.proxy.CloseServiceHandle(o);throw ("Unable to set description")}}this.proxy.CloseServiceHandle(n);this.proxy.CloseServiceHandle(o);return(this.getService(r.name))}if(process.platform=="linux"){if(!this.isAdmin()){throw ("Installing as Service, requires root")}switch(this.getServiceType()){case"init":require("fs").copyFileSync(r.servicePath,"/etc/init.d/"+r.name);console.log("copying "+r.servicePath);var q=require("fs").statSync("/etc/init.d/"+r.name).mode;q|=(require("fs").CHMOD_MODES.S_IXUSR|require("fs").CHMOD_MODES.S_IXGRP);require("fs").chmodSync("/etc/init.d/"+r.name,q);this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update._moduleName=r.name;this._update.stdout.on("data",function(h){});this._update.stdin.write("update-rc.d "+r.name+" defaults\n");this._update.stdin.write("exit\n");this._update.waitExit();break;case"systemd":var u=r.description?r.description:"MeshCentral Agent";if(!require("fs").existsSync("/usr/local/mesh")){require("fs").mkdirSync("/usr/local/mesh")}require("fs").copyFileSync(r.servicePath,"/usr/local/mesh/"+r.name);var q=require("fs").statSync("/usr/local/mesh/"+r.name).mode;q|=(require("fs").CHMOD_MODES.S_IXUSR|require("fs").CHMOD_MODES.S_IXGRP);require("fs").chmodSync("/usr/local/mesh/"+r.name,q);require("fs").writeFileSync("/lib/systemd/system/"+r.name+".service","[Unit]\nDescription="+u+"\n[Service]\nExecStart=/usr/local/mesh/"+r.name+"\nStandardOutput=null\nRestart=always\nRestartSec=3\n[Install]\nWantedBy=multi-user.target\nAlias="+r.name+".service\n",{flags:"w"});this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update._moduleName=r.name;this._update.stdout.on("data",function(h){});this._update.stdin.write("systemctl enable "+r.name+".service\n");this._update.stdin.write("exit\n");this._update.waitExit();break;default:break}}if(process.platform=="darwin"){if(!this.isAdmin()){throw ("Installing as Service, requires root")}var y=(r.stdout?("<key>StandardOutPath</key>\n<string>"+r.stdout+"</string>"):"");var i=(r.startType=="AUTO_START"?"<true/>":"<false/>");var s=" <key>ProgramArguments</key>\n";s+=" <array>\n";s+=(" <string>/usr/local/mesh_services/"+r.name+"/"+r.name+"</string>\n");if(r.parameters){for(var p in r.parameters){s+=(" <string>"+r.parameters[p]+"</string>\n")}}s+=" </array>\n";var t='<?xml version="1.0" encoding="UTF-8"?>\n';t+='<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n';t+='<plist version="1.0">\n';t+=" <dict>\n";t+=" <key>Label</key>\n";t+=(" <string>"+r.name+"</string>\n");t+=(s+"\n");t+=" <key>WorkingDirectory</key>\n";t+=(" <string>/usr/local/mesh_services/"+r.name+"</string>\n");t+=(y+"\n");t+=" <key>RunAtLoad</key>\n";t+=(i+"\n");t+=" </dict>\n";t+="</plist>";if(!require("fs").existsSync("/usr/local/mesh_services")){require("fs").mkdirSync("/usr/local/mesh_services")}if(!require("fs").existsSync("/Library/LaunchDaemons/"+r.name+".plist")){if(!require("fs").existsSync("/usr/local/mesh_services/"+r.name)){require("fs").mkdirSync("/usr/local/mesh_services/"+r.name)}if(r.binary){require("fs").writeFileSync("/usr/local/mesh_services/"+r.name+"/"+r.name,r.binary)}else{require("fs").copyFileSync(r.servicePath,"/usr/local/mesh_services/"+r.name+"/"+r.name)}require("fs").writeFileSync("/Library/LaunchDaemons/"+r.name+".plist",t);var q=require("fs").statSync("/usr/local/mesh_services/"+r.name+"/"+r.name).mode;q|=(require("fs").CHMOD_MODES.S_IXUSR|require("fs").CHMOD_MODES.S_IXGRP);require("fs").chmodSync("/usr/local/mesh_services/"+r.name+"/"+r.name,q)}else{throw ("Service: "+r.name+" already exists")}}};this.uninstallService=function f(i){if(!this.isAdmin()){throw ("Uninstalling a service, requires admin")}if(typeof(i)=="object"){i=i.name}if(process.platform=="win32"){var j=this.getService(i);if(j.status.state==undefined||j.status.state=="STOPPED"){if(this.proxy.DeleteService(j._service)==0){throw ("Uninstall Service for: "+i+", failed with error: "+this.proxy2.GetLastError())}else{try{require("fs").unlinkSync(this.getServiceFolder()+"\\"+i+".exe")}catch(h){}}}else{throw ("Cannot uninstall service: "+i+", because it is: "+j.status.state)}}else{if(process.platform=="linux"){switch(this.getServiceType()){case"init":this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update.stdout.on("data",function(k){});this._update.stdin.write("service "+i+" stop\n");this._update.stdin.write("update-rc.d -f "+i+" remove\n");this._update.stdin.write("exit\n");this._update.waitExit();try{require("fs").unlinkSync("/etc/init.d/"+i);console.log(i+" uninstalled")}catch(h){console.log(i+" could not be uninstalled",h)}break;case"systemd":this._update=require("child_process").execFile("/bin/sh",["sh"],{type:require("child_process").SpawnTypes.TERM});this._update.stdout.on("data",function(k){});this._update.stdin.write("systemctl stop "+i+".service\n");this._update.stdin.write("systemctl disable "+i+".service\n");this._update.stdin.write("exit\n");this._update.waitExit();try{require("fs").unlinkSync("/usr/local/mesh/"+i);require("fs").unlinkSync("/lib/systemd/system/"+i+".service");console.log(i+" uninstalled")}catch(h){console.log(i+" could not be uninstalled",h)}break;default:break}}else{if(process.platform=="darwin"){if(require("fs").existsSync("/Library/LaunchDaemons/"+i+".plist")){var g=require("child_process").execFile("/bin/sh",["sh"]);g.stdout.on("data",function(k){});g.stdin.write("launchctl stop "+i+"\n");g.stdin.write("launchctl unload /Library/LaunchDaemons/"+i+".plist\n");g.stdin.write("exit\n");g.waitExit();try{require("fs").unlinkSync("/usr/local/mesh_services/"+i+"/"+i);require("fs").unlinkSync("/Library/LaunchDaemons/"+i+".plist")}catch(h){throw ("Error uninstalling service: "+i+" => "+h)}try{require("fs").rmdirSync("/usr/local/mesh_services/"+i)}catch(h){}}else{throw ("Service: "+i+" does not exist")}}}}};if(process.platform=="linux"){this.getServiceType=function c(){return(require("process-manager").getProcessInfo(1).Name)}}}module.exports=serviceManager;
\ No newline at end of file
agents/modules_meshcmd_min/smbios.min.js
new
+1
@@ -0,0 +1 @@
1
+try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}try{Object.defineProperty(String.prototype,"replaceAll",{value:function replaceAll(b,a){return(this.split(b).join(a))}})}catch(e){}var RSMB=1381190978;var memoryLocation={1:"Other",2:"Unknown",3:"System Board",4:"ISA",5:"EISA",6:"PCI",7:"MCA",8:"PCMCIA",9:"Proprietary",10:"NuBus",160:"PC-98/C20",161:"PC-98/C24",162:"PC-98/E",163:"PC-98/LB"};var wakeReason=["Reserved","Other","Unknown","APM Timer","Modem Ring","LAN","Power Switch","PCI","AC Power"];function zeroLeftPad(c,b){if((b==null)&&(typeof(b)!="number")){return null}if(c==null){c=""}var d="";for(var a=0;a<b-c.length;a++){d+="0"}return d+c}function SMBiosTables(){this._ObjectID="SMBiosTable";if(process.platform=="win32"){this._marshal=require("_GenericMarshal");this._native=this._marshal.CreateNativeProxy("Kernel32.dll");this._native.CreateMethod("EnumSystemFirmwareTables");this._native.CreateMethod("GetSystemFirmwareTable")}if(process.platform=="linux"){this._canonicalizeData=function a(k){var n=k.toString().split("Header and Data:\x0A");var o=require("MemoryStream");var p=new o();for(var m=1;m<n.length;++m){var v=n[m].split("Strings:\x0A");var l=v[0].split("\x0A\x0A")[0].replaceAll("\x0A","").trim().replaceAll(" ","").replaceAll("\x09","");p.write(Buffer.from(l,"hex"));if(v.length>1){var r=v[1].split("\x0A\x0A")[0].split("\x0A");var s=[];for(var t in r){var u=r[t].trim().replaceAll(" ","").replaceAll("\x09","");if(!(u[0]=='"')){s.push(u)}}p.write(Buffer.from(s.join(""),"hex"));p.write(Buffer.from("00","hex"))}else{p.write(Buffer.from("0000","hex"))}}var q=p.buffer;q.ms=p;return(q)}}this._parse=function b(o){var n={};var m;var l=0;var o;var s=0;while(o&&l<o.length){var q=o[l];var p=o[l+1];if(!n[q]){n[q]=[]}n[q].push(o.slice(l+4,l+p));if(process.platform=="win32"){n[q].peek()._ext=m}l+=p;n[q].peek()._strings=[];while(o[l]!=0&&l<=o.length){var r=l;while(o[l++]!=0&&l<=o.length){}try{n[q].peek()._strings.push(o.slice(r,l).toString().trim())}catch(k){console.log("oops")}}l+=(n[q].peek()._strings.length==0)?2:1;++s}return(n)};this.get=function d(l){if(process.platform=="win32"){var q=this._native.GetSystemFirmwareTable(RSMB,0,0,0).Val;var o=this._marshal.CreatePointer()._size;var k=this._marshal.CreateVariable(q);var r=this._native.GetSystemFirmwareTable(RSMB,0,k,q).Val;var p=k.toBuffer();var m=k.Deref(4,4).toBuffer().readUInt32LE(0);pbyte=k.Deref(8,m);SMData=pbyte.toBuffer();if(l){l.apply(this,[this._parse(SMData)]);return}else{return(this._parse(SMData))}}if(process.platform=="linux"){var n=require("MemoryStream");this.child=require("child_process").execFile("/usr/sbin/dmidecode",["dmidecode","-u"]);this.child.SMBiosTable=this;this.child.ms=new n();this.child.ms.callback=l;this.child.ms.child=this.child;this.child.stdout.on("data",function(s){this.parent.ms.write(s)});this.child.on("exit",function(){this.ms.end()});this.child.ms.on("end",function(){if(this.buffer.length<300){if(this.callback){this.callback.apply(this.child.SMBiosTable,[])}}else{var t=this.child.SMBiosTable._canonicalizeData(this.buffer);var s=this.child.SMBiosTable._parse(t);if(this.callback){this.callback.apply(this.child.SMBiosTable,[s])}}});return}if(l){l.apply(this,[null]);return}else{return(null)}};this.parse=function g(k){var m={};try{m.processorInfo=this.processorInfo(k)}catch(l){}try{m.memoryInfo=this.memoryInfo(k)}catch(l){}try{m.systemInfo=this.systemInfo(k)}catch(l){}try{m.systemSlots=this.systemInfo(k)}catch(l){}try{m.amtInfo=this.amtInfo(k)}catch(l){}return m};this.processorInfo=function h(l){if(!l){throw ("no data")}var r=[];var q=["ERROR","Other","Unknown","CPU","ALU","DSP","GPU"];var t=["Unknown","Enabled","Disabled by user","Disabled by BIOS","Idle","Reserved","Reserved","Other"];var k=0;while(l[4]&&l[4].length>0){var n=l[4].pop();var o=n[20]&64;var s=n[20]&7;if(o){var m={_ObjectID:"SMBiosTables.processorInfo"};m.Processor=q[n[1]];m.MaxSpeed=n.readUInt16LE(16)+" Mhz";if(n[31]){m.Cores=n[31]}if(n[33]){m.Threads=n[33]}m.Populated=1;m.Status=t[s];m.Socket=n._strings[n[0]-1];m.Manufacturer=n._strings[n[3]-1];m.Version=n._strings[n[12]-1];r.push(m)}}return(r)};this.memoryInfo=function f(k){if(!k){throw ("no data")}var n={_ObjectID:"SMBiosTables.memoryInfo"};if(k[16]){var l=k[16].peek();n.location=memoryLocation[l[0]];if((n.maxCapacityKb=l.readUInt32LE(3))==2147483648){n.maxCapacityKb="A really big number"}}return(n)};this.systemInfo=function i(k){if(!k){throw ("no data")}var l={_ObjectID:"SMBiosTables.systemInfo"};if(k[1]){var m=k[1].peek();var n=m.slice(4,20);l.uuid=[zeroLeftPad(n.readUInt32LE(0).toString(16),8),zeroLeftPad(n.readUInt16LE(4).toString(16),4),zeroLeftPad(n.readUInt16LE(6).toString(16),4),zeroLeftPad(n.readUInt16BE(8).toString(16),4),zeroLeftPad(n.slice(10).toString("hex").toLowerCase(),12)].join("-");l.wakeReason=wakeReason[m[20]]}return(l)};this.systemSlots=function j(k){if(!k){throw ("no data")}var l=[];if(k[9]){while(k[9].length>0){var m=k[9].pop();l.push({name:m._strings[m[0]-1]})}}return(l)};this.amtInfo=function c(l){if(!l){throw ("no data")}var n={AMT:false};if(l[130]&&l[130].peek().slice(0,4).toString()=="$AMT"){var k=l[130].peek();n.AMT=k[4]?true:false;if(n.AMT){n.enabled=k[5]?true:false;n.storageRedirection=k[6]?true:false;n.serialOverLan=k[7]?true:false;n.kvm=k[14]?true:false;if(l[131].peek()&&l[131].peek().slice(52,56).toString()=="vPro"){var o=l[131].peek();if(o[0]&4){n.TXT=(o[0]&8)?true:false}if(o[0]&16){n.VMX=(o[0]&32)?true:false}n.MEBX=o.readUInt16LE(4).toString()+"."+o.readUInt16LE(6).toString()+"."+o.readUInt16LE(8).toString()+"."+o.readUInt16LE(10).toString();var m=o.slice(20,32);n.ManagementEngine=m.readUInt16LE(6).toString()+"."+m.readUInt16LE(4).toString()+"."+m.readUInt16LE(10).toString()+"."+m.readUInt16LE(8).toString()}}}return(n)};this.smTableTypes={0:"BIOS information",1:"System information",2:"Baseboard (or Module) information",4:"Processor information",5:"memory controller information",6:"Memory module information",7:"Cache information",8:"Port connector information",9:"System slots",10:"On board devices information",11:"OEM strings",12:"System configuration options",13:"BIOS language information",14:"Group associations",15:"System event log",16:"Physical memory array",17:"Memory device",18:"32bit memory error information",19:"Memory array mapped address",20:"Memory device mapped address",21:"Built-in pointing device",22:"Portable battery",23:"System reset",24:"Hardware security",25:"System power controls",26:"Voltage probe",27:"Cooling device",28:"Temperature probe",29:"Electrical current probe",30:"Out-of-band remote access",31:"Boot integrity services (BIS) entry point",32:"System boot information",33:"64bit memory error information",34:"Management device",35:"Management device component",36:"Management device threshold data",37:"Memory channel",38:"IPMI device information",39:"System power supply",40:"Additional information",41:"Onboard devices extended information",42:"Management controller host interface",126:"Inactive",127:"End-of-table"}}module.exports=new SMBiosTables();
\ No newline at end of file
agents/modules_meshcmd_min/sysinfo.min.js
new
+1
@@ -0,0 +1 @@
1
+var PDH_FMT_LONG=256;var PDH_FMT_DOUBLE=512;var promise=require("promise");if(process.platform=="win32"){var GM=require("_GenericMarshal");GM.kernel32=GM.CreateNativeProxy("kernel32.dll");GM.kernel32.CreateMethod("GlobalMemoryStatusEx");GM.pdh=GM.CreateNativeProxy("pdh.dll");GM.pdh.CreateMethod("PdhAddEnglishCounterA");GM.pdh.CreateMethod("PdhCloseQuery");GM.pdh.CreateMethod("PdhCollectQueryData");GM.pdh.CreateMethod("PdhGetFormattedCounterValue");GM.pdh.CreateMethod("PdhGetFormattedCounterArrayA");GM.pdh.CreateMethod("PdhOpenQueryA");GM.pdh.CreateMethod("PdhRemoveCounter")}function windows_cpuUtilization(){var b=new promise(function(d,c){this._res=d;this._rej=c});b.counter=GM.CreateVariable(16);b.cpu=GM.CreatePointer();b.cpuTotal=GM.CreatePointer();var a=0;if((a=GM.pdh.PdhOpenQueryA(0,0,b.cpu).Val)!=0){b._rej(a);return}if((a=GM.pdh.PdhAddEnglishCounterA(b.cpu.Deref(),GM.CreateVariable("\\Processor(*)\\% Processor Time"),0,b.cpuTotal).Val)!=0){b._rej(a);return}if((a=GM.pdh.PdhCollectQueryData(b.cpu.Deref()).Val!=0)){b._rej(a);return}b._timeout=setTimeout(function(k){var m={cpus:[]};var d=GM.CreateVariable(4);var j=GM.CreateVariable(4);var c,l,h;var f;if((f=GM.pdh.PdhCollectQueryData(k.cpu.Deref()).Val!=0)){k._rej(f);return}if((f=GM.pdh.PdhGetFormattedCounterArrayA(k.cpuTotal.Deref(),PDH_FMT_DOUBLE,d,j,0).Val)==-2147481646){c=GM.CreateVariable(d.toBuffer().readUInt32LE())}else{k._rej(f);return}if((f=GM.pdh.PdhGetFormattedCounterArrayA(k.cpuTotal.Deref(),PDH_FMT_DOUBLE,d,j,c).Val)!=0){k._rej(f);return}for(var g=0;g<j.toBuffer().readUInt32LE();++g){h=c.Deref(g*24,24);l=h.Deref(0,GM.PointerSize).Deref();if(l.String=="_Total"){m.total=h.Deref(16,8).toBuffer().readDoubleLE().toFixed(2)}else{m.cpus[parseInt(l.String)]=h.Deref(16,8).toBuffer().readDoubleLE().toFixed(2)}}GM.pdh.PdhRemoveCounter(k.cpuTotal.Deref());GM.pdh.PdhCloseQuery(k.cpu.Deref());b._res(m)},100,b);return(b)}function windows_memUtilization(){var a=GM.CreateVariable(64);a.Deref(0,4).toBuffer().writeUInt32LE(64);GM.kernel32.GlobalMemoryStatusEx(a);var b={MemTotal:require("bignum").fromBuffer(a.Deref(8,8).toBuffer(),{endian:"little"}),MemFree:require("bignum").fromBuffer(a.Deref(16,8).toBuffer(),{endian:"little"})};b.percentFree=((b.MemFree.div(require("bignum")("1048576")).toNumber()/b.MemTotal.div(require("bignum")("1048576")).toNumber())*100).toFixed(2);b.percentConsumed=((b.MemTotal.sub(b.MemFree).div(require("bignum")("1048576")).toNumber()/b.MemTotal.div(require("bignum")("1048576")).toNumber())*100).toFixed(2);b.MemTotal=b.MemTotal.toString();b.MemFree=b.MemFree.toString();return(b)}function linux_cpuUtilization(){var g={cpus:[]};var d=require("fs").readFileSync("/proc/stat");var e=d.toString().split("\n");var a;var k,l;var h,c,j;for(var b in e){a=e[b].split(" ");if(!a[0].startsWith("cpu")){break}k=0,h=0;while(a[++k]==""){}for(l=k;l<a.length;++l){h+=parseInt(a[l])}c=parseInt(a[3+k]);j=(100-((c/h)*100)).toFixed(2);if(!g.total){g.total=j}else{g.cpus.push(j)}}var f=new promise(function(m,i){this._res=m;this._rej=i});f._res(g);return(f)}function linux_memUtilization(){var c={};var b=require("fs").readFileSync("/proc/meminfo").toString().split("\n");var d;for(var a in b){d=b[a].split(" ");switch(d[0]){case"MemTotal:":c.total=parseInt(d[d.length-2]);break;case"MemFree:":c.free=parseInt(d[d.length-2]);break}}c.percentFree=((c.free/c.total)*100).toFixed(2);c.percentConsumed=(((c.total-c.free)/c.total)*100).toFixed(2);return(c)}function macos_cpuUtilization(){var d=new promise(function(h,g){this._res=h;this._rej=g});var b=require("child_process").execFile("/bin/sh",["sh"]);b.stdout.str="";b.stdout.on("data",function(g){this.str+=g.toString()});b.stdin.write('top -l 1 | grep -E "^CPU"\nexit\n');b.waitExit();var c=b.stdout.str.split("\n");if(c[0].length>0){var f=c[0].split(":")[1];var a=f.split(",");var e=parseFloat(a[0].split("%")[0].trim())+parseFloat(a[1].split("%")[0].trim());d._res({total:e,cpus:[]})}else{d._rej("parse error")}return(d)}function macos_memUtilization(){var d={};var e=new promise(function(h,g){this._res=h;this._rej=g});var b=require("child_process").execFile("/bin/sh",["sh"]);b.stdout.str="";b.stdout.on("data",function(g){this.str+=g.toString()});b.stdin.write('top -l 1 | grep -E "^Phys"\nexit\n');b.waitExit();var c=b.stdout.str.split("\n");if(c[0].length>0){var f=c[0].split(":")[1];var a=f.split(",");d.MemTotal=parseInt(a[0].trim().split(" ")[0]);d.MemFree=parseInt(a[1].trim().split(" ")[0]);d.percentFree=((d.MemFree/d.MemTotal)*100).toFixed(2);d.percentConsumed=(((d.MemTotal-d.MemFree)/d.MemTotal)*100).toFixed(2);return(d)}else{throw ("Parse Error")}}switch(process.platform){case"linux":module.exports={cpuUtilization:linux_cpuUtilization,memUtilization:linux_memUtilization};break;case"win32":module.exports={cpuUtilization:windows_cpuUtilization,memUtilization:windows_memUtilization};break;case"darwin":module.exports={cpuUtilization:macos_cpuUtilization,memUtilization:macos_memUtilization};break};
\ No newline at end of file
agents/modules_meshcmd_min/user-sessions.min.js
new
+1
@@ -0,0 +1 @@
1
+var NOTIFY_FOR_THIS_SESSION=0;var NOTIFY_FOR_ALL_SESSIONS=1;var WM_WTSSESSION_CHANGE=689;var WM_POWERBROADCAST=536;var PBT_POWERSETTINGCHANGE=32787;var PBT_APMSUSPEND=4;var PBT_APMRESUMESUSPEND=7;var PBT_APMRESUMEAUTOMATIC=18;var PBT_APMPOWERSTATUSCHANGE=10;var WTS_CONSOLE_CONNECT=(1);var WTS_CONSOLE_DISCONNECT=(2);var WTS_REMOTE_CONNECT=(3);var WTS_REMOTE_DISCONNECT=(4);var WTS_SESSION_LOGON=(5);var WTS_SESSION_LOGOFF=(6);var WTS_SESSION_LOCK=(7);var WTS_SESSION_UNLOCK=(8);var WTS_SESSION_REMOTE_CONTROL=(9);var WTS_SESSION_CREATE=(10);var WTS_SESSION_TERMINATE=(11);var GUID_ACDC_POWER_SOURCE;var GUID_BATTERY_PERCENTAGE_REMAINING;var GUID_CONSOLE_DISPLAY_STATE;function UserSessions(){this._ObjectID="user-sessions";require("events").EventEmitter.call(this,true).createEvent("changed").createEvent("locked").createEvent("unlocked");this.enumerateUsers=function h(){var s=require("promise");var r=new s(function(t,p){this.__resolver=t;this.__rejector=p});r.__handler=function o(p){r.__resolver(p)};try{this.Current(r.__handler)}catch(q){r.__rejector(q)}r.parent=this;return(r)};if(process.platform=="win32"){this._serviceHooked=false;this._marshal=require("_GenericMarshal");this._kernel32=this._marshal.CreateNativeProxy("Kernel32.dll");this._kernel32.CreateMethod("GetLastError");try{this._wts=this._marshal.CreateNativeProxy("Wtsapi32.dll");this._wts.CreateMethod("WTSEnumerateSessionsA");this._wts.CreateMethod("WTSQuerySessionInformationA");this._wts.CreateMethod("WTSRegisterSessionNotification");this._wts.CreateMethod("WTSUnRegisterSessionNotification");this._wts.CreateMethod("WTSFreeMemory")}catch(i){}this._advapi=this._marshal.CreateNativeProxy("Advapi32.dll");this._advapi.CreateMethod("AllocateAndInitializeSid");this._advapi.CreateMethod("CheckTokenMembership");this._advapi.CreateMethod("FreeSid");this._user32=this._marshal.CreateNativeProxy("user32.dll");this._user32.CreateMethod({method:"RegisterPowerSettingNotification",threadDispatch:1});this._user32.CreateMethod("UnregisterPowerSettingNotification");this._rpcrt=this._marshal.CreateNativeProxy("Rpcrt4.dll");this._rpcrt.CreateMethod("UuidFromStringA");this._rpcrt.StringToUUID=function n(o){var p=n.us._marshal.CreateVariable(16);if(n.us._rpcrt.UuidFromStringA(n.us._marshal.CreateVariable(o),p).Val==0){return(p)}else{throw ("Could not convert string to UUID")}};this._rpcrt.StringToUUID.us=this;GUID_ACDC_POWER_SOURCE=this._rpcrt.StringToUUID("5d3e9a59-e9D5-4b00-a6bd-ff34ff516548");GUID_BATTERY_PERCENTAGE_REMAINING=this._rpcrt.StringToUUID("a7ad8041-b45a-4cae-87a3-eecbb468a9e1");GUID_CONSOLE_DISPLAY_STATE=this._rpcrt.StringToUUID("6fe69556-704a-47a0-8f24-c28d936fda47");this.SessionStates=["Active","Connected","ConnectQuery","Shadow","Disconnected","Idle","Listening","Reset","Down","Init"];this.InfoClass={WTSInitialProgram:0,WTSApplicationName:1,WTSWorkingDirectory:2,WTSOEMId:3,WTSSessionId:4,WTSUserName:5,WTSWinStationName:6,WTSDomainName:7,WTSConnectState:8,WTSClientBuildNumber:9,WTSClientName:10,WTSClientDirectory:11,WTSClientProductId:12,WTSClientHardwareId:13,WTSClientAddress:14,WTSClientDisplay:15,WTSClientProtocolType:16,WTSIdleTime:17,WTSLogonTime:18,WTSIncomingBytes:19,WTSOutgoingBytes:20,WTSIncomingFrames:21,WTSOutgoingFrames:22,WTSClientInfo:23,WTSSessionInfo:24,WTSSessionInfoEx:25,WTSConfigInfo:26,WTSValidationInfo:27,WTSSessionAddressV4:28,WTSIsRemoteSession:29};this.isRoot=function k(){var r=this._marshal.CreateVariable(6);r.toBuffer().writeInt8(5,5);var p=this._marshal.CreatePointer();var o=false;if(this._advapi.AllocateAndInitializeSid(r,2,32,544,0,0,0,0,0,0,p).Val!=0){var q=this._marshal.CreateInteger();if(this._advapi.CheckTokenMembership(0,p.Deref(),q).Val!=0){if(q.toBuffer().readUInt32LE()!=0){o=true}}this._advapi.FreeSid(p.Deref())}return o};this.getSessionAttribute=function j(s,o){var p=this._marshal.CreatePointer();var q=this._marshal.CreateVariable(4);if(this._wts.WTSQuerySessionInformationA(0,s,o,p,q).Val==0){throw ("Error calling WTSQuerySessionInformation: "+this._kernel32.GetLastError.Val)}var r=p.Deref().String;this._wts.WTSFreeMemory(p.Deref());return(r)};this.Current=function f(o){var u={};var t=this._marshal.CreatePointer();var p=this._marshal.CreateVariable(4);if(this._wts.WTSEnumerateSessionsA(0,0,1,t,p).Val==0){throw ("Error calling WTSEnumerateSessionsA: "+this._kernel32.GetLastError().Val)}for(var q=0;q<p.toBuffer().readUInt32LE();++q){var r=t.Deref().Deref(q*(this._marshal.PointerSize==4?12:24),this._marshal.PointerSize==4?12:24);var s={SessionId:r.toBuffer().readUInt32LE()};s.StationName=r.Deref(this._marshal.PointerSize==4?4:8,this._marshal.PointerSize).Deref().String;s.State=this.SessionStates[r.Deref(this._marshal.PointerSize==4?8:16,4).toBuffer().readUInt32LE()];if(s.State=="Active"){s.Username=this.getSessionAttribute(s.SessionId,this.InfoClass.WTSUserName);s.Domain=this.getSessionAttribute(s.SessionId,this.InfoClass.WTSDomainName)}u[s.SessionId]=s}this._wts.WTSFreeMemory(t.Deref());Object.defineProperty(u,"Active",{value:showActiveOnly(u)});if(o){o(u)}return(u)};var l=require("win-message-pump");this._messagepump=new l({filter:WM_WTSSESSION_CHANGE});this._messagepump.parent=this;this._messagepump.on("exit",function(o){this.parent._wts.WTSUnRegisterSessionNotification(this.parent.hwnd)});this._messagepump.on("hwnd",function(o){this.parent.hwnd=o;this.immediate=setImmediate(function(p){if(p.parent._wts){p.parent._wts.WTSRegisterSessionNotification(p.parent.hwnd,NOTIFY_FOR_ALL_SESSIONS)}p.parent._user32.ACDC_H=p.parent._user32.RegisterPowerSettingNotification(p.parent.hwnd,GUID_ACDC_POWER_SOURCE,0);p.parent._user32.BATT_H=p.parent._user32.RegisterPowerSettingNotification(p.parent.hwnd,GUID_BATTERY_PERCENTAGE_REMAINING,0);p.parent._user32.DISP_H=p.parent._user32.RegisterPowerSettingNotification(p.parent.hwnd,GUID_CONSOLE_DISPLAY_STATE,0)},this)});this._messagepump.on("message",function(q){switch(q.message){case WM_WTSSESSION_CHANGE:switch(q.wparam){case WTS_SESSION_LOCK:this.parent.enumerateUsers().then(function(r){if(r[q.lparam]){this.parent.emit("locked",r[q.lparam])}});break;case WTS_SESSION_UNLOCK:this.parent.enumerateUsers().then(function(r){if(r[q.lparam]){this.parent.emit("unlocked",r[q.lparam])}});break;case WTS_SESSION_LOGON:case WTS_SESSION_LOGOFF:this.parent.emit("changed");break}break;case WM_POWERBROADCAST:switch(q.wparam){default:console.log("WM_POWERBROADCAST [UNKNOWN wparam]: "+q.wparam);break;case PBT_APMSUSPEND:require("power-monitor").emit("sx","SLEEP");break;case PBT_APMRESUMEAUTOMATIC:require("power-monitor").emit("sx","RESUME_NON_INTERACTIVE");break;case PBT_APMRESUMESUSPEND:require("power-monitor").emit("sx","RESUME_INTERACTIVE");break;case PBT_APMPOWERSTATUSCHANGE:require("power-monitor").emit("changed");break;case PBT_POWERSETTINGCHANGE:var p=this.parent._marshal.CreatePointer(Buffer.from(q.lparam_hex,"hex"));var o=p.Deref(20,p.Deref(16,4).toBuffer().readUInt32LE(0)).toBuffer();switch(p.Deref(0,16).toBuffer().toString("hex")){case GUID_ACDC_POWER_SOURCE.Deref(0,16).toBuffer().toString("hex"):switch(o.readUInt32LE(0)){case 0:require("power-monitor").emit("acdc","AC");break;case 1:require("power-monitor").emit("acdc","BATTERY");break;case 2:require("power-monitor").emit("acdc","HOT");break}break;case GUID_BATTERY_PERCENTAGE_REMAINING.Deref(0,16).toBuffer().toString("hex"):require("power-monitor").emit("batteryLevel",o.readUInt32LE(0));break;case GUID_CONSOLE_DISPLAY_STATE.Deref(0,16).toBuffer().toString("hex"):switch(o.readUInt32LE(0)){case 0:require("power-monitor").emit("display","OFF");break;case 1:require("power-monitor").emit("display","ON");break;case 2:require("power-monitor").emit("display","DIMMED");break}break}break}break;default:break}})}else{if(process.platform=="linux"){var g=require("linux-dbus");this._linuxWatcher=require("fs").watch("/var/run/utmp");this._linuxWatcher.user_session=this;this._linuxWatcher.on("change",function(o,p){this.user_session.emit("changed")});this._users=function d(){var o=require("child_process").execFile("/bin/sh",["sh"]);o.stdout.str="";o.stdout.on("data",function(t){this.str+=t.toString()});o.stdin.write("awk -F: '($3 >= 0) {printf \"%s:%s\\n\", $1, $3}' /etc/passwd\nexit\n");o.waitExit();var p=o.stdout.str.split("\n");var r={},s;for(var q in p){s=p[q].split(":");if(s[0]){r[s[0]]=s[1]}}return(r)};this._uids=function c(){var o=require("child_process").execFile("/bin/sh",["sh"]);o.stdout.str="";o.stdout.on("data",function(t){this.str+=t.toString()});o.stdin.write("awk -F: '($3 >= 0) {printf \"%s:%s\\n\", $1, $3}' /etc/passwd\nexit\n");o.waitExit();var p=o.stdout.str.split("\n");var r={},s;for(var q in p){s=p[q].split(":");if(s[0]){r[s[1]]=s[0]}}return(r)};this.Self=function m(){var q=require("promise");var o=new q(function(r,p){this.__resolver=r;this.__rejector=p;this.__child=require("child_process").execFile("/usr/bin/id",["id","-u"]);this.__child.promise=this;this.__child.stdout._txt="";this.__child.stdout.on("data",function(s){this._txt+=s.toString()});this.__child.on("exit",function(s){try{parseInt(this.stdout._txt)}catch(t){this.promise.__rejector("invalid uid");return}var u=parseInt(this.stdout._txt);this.promise.__resolver(u)})});return(o)};this.Current=function f(o){var p={};p._ObjectID="UserSession";Object.defineProperty(p,"_callback",{value:o});Object.defineProperty(p,"_child",{value:require("child_process").execFile("/usr/bin/last",["last","-f","/var/run/utmp"])});p._child.Parent=p;p._child._txt="";p._child.on("exit",function(q){var u=this._txt.split("\n");var A=[];var D={};for(var t in u){if(u[t]){var B=getTokens(u[t]);var z={Username:B[0],SessionId:B[1]};if(B[3].includes("still logged in")){z.State="Active"}else{z.LastActive=B[3]}A.push(z)}}A.pop();var C={};var y=[];for(var t in A){if(A[t].Username!="reboot"){D[A[t].SessionId]=A[t];if(C[A[t].Username]==null){C[A[t].Username]=-1}}}try{require("promise")}catch(r){Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(this.Parent._callback){this.Parent._callback.call(this.Parent,D)}return}var x=require("promise");for(var v in C){var w=new x(function(E,s){this.__username=v;this.__resolver=E;this.__rejector=s;this.__child=require("child_process").execFile("/usr/bin/id",["id","-u",v]);this.__child.promise=this;this.__child.stdout._txt="";this.__child.stdout.on("data",function(F){this._txt+=F.toString()});this.__child.on("exit",function(F){try{parseInt(this.stdout._txt)}catch(G){this.promise.__rejector("invalid uid");return}var H=parseInt(this.stdout._txt);this.promise.__resolver(H)})});y.push(w)}x.all(y).then(function(E){var F={};for(var s in E){F[E[s].__username]=E[s]._internal.completedArgs[0]}for(var s in D){D[s].uid=F[D[s].Username]}Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(p._callback){p._callback.call(p,D)}},function(s){Object.defineProperty(D,"Active",{value:showActiveOnly(D)});if(p._callback){p._callback.call(p,D)}})});p._child.stdout.Parent=p._child;p._child.stdout.on("data",function(q){this.Parent._txt+=q.toString()});return(p)};this._recheckLoggedInUsers=function a(){this.enumerateUsers().then(function(o){if(o.Active.length>0){if(this.parent._linux_lock_watcher!=null&&this.parent._linux_lock_watcher.uid!=o.Active[0].uid){delete this.parent._linux_lock_watcher}this.parent._linux_lock_watcher=new g(process.env.XDG_CURRENT_DESKTOP=="Unity"?"com.ubuntu.Upstart0_6":"org.gnome.ScreenSaver",o.Active[0].uid);this.parent._linux_lock_watcher.user_session=this.parent;this.parent._linux_lock_watcher.on("signal",function(r){var q=this.user_session.enumerateUsers();q.signalData=r.data[0];q.then(function(p){switch(this.signalData){case true:case"desktop-lock":this.parent.emit("locked",p.Active[0]);break;case false:case"desktop-unlock":this.parent.emit("unlocked",p.Active[0]);break}})})}else{if(this.parent._linux_lock_watcher!=null){delete this.parent._linux_lock_watcher}}})};this.on("changed",this._recheckLoggedInUsers);this._recheckLoggedInUsers()}else{if(process.platform=="darwin"){this._users=function(){var o=require("child_process").execFile("/usr/bin/dscl",["dscl",".","list","/Users","UniqueID"]);o.stdout.str="";o.stdout.on("data",function(t){this.str+=t.toString()});o.stdin.write("exit\n");o.waitExit();var q=o.stdout.str.split("\n");var r,p;var s={};for(p=0;p<q.length;++p){r=q[p].split(" ");if(r[0]){s[r[0]]=r[r.length-1]}}return(s)};this._uids=function(){var o=require("child_process").execFile("/usr/bin/dscl",["dscl",".","list","/Users","UniqueID"]);o.stdout.str="";o.stdout.on("data",function(t){this.str+=t.toString()});o.stdin.write("exit\n");o.waitExit();var q=o.stdout.str.split("\n");var r,p;var s={};for(p=0;p<q.length;++p){r=q[p].split(" ");if(r[0]){s[r[r.length-1]]=r[0]}}return(s)};this._idTable=function(){var v={};var o=require("child_process").execFile("/usr/bin/id",["id"]);o.stdout.str="";o.stdout.on("data",function(y){this.str+=y.toString()});o.waitExit();var t=o.stdout.str.split("\n")[0].split(" ");for(var p=0;p<t.length;++p){var x=t[p].split("=");var w=x[1].split(",");v[x[0]]={};for(var s in w){var r=w[s].split("(");var q=r[0];var u=r[1].substring(0,r[1].length-1).trim();v[x[0]][u]=q;v[x[0]][q]=u}}return(v)};this.Current=function(o){var u={};var t=this._idTable();var p=require("child_process").execFile("/usr/bin/last",["last"]);p.stdout.str="";p.stdout.on("data",function(v){this.str+=v.toString()});p.waitExit();var s=p.stdout.str.split("\n");for(var r=0;r<s.length&&s[r].length>0;++r){if(!u[s[r].split(" ")[0]]){try{u[s[r].split(" ")[0]]={Username:s[r].split(" ")[0],State:s[r].split("still logged in").length>1?"Active":"Inactive",uid:t.uid[s[r].split(" ")[0]]}}catch(q){}}else{if(u[s[r].split(" ")[0]].State!="Active"&&s[r].split("still logged in").length>1){u[s[r].split(" ")[0]].State="Active"}}}Object.defineProperty(u,"Active",{value:showActiveOnly(u)});if(o){o.call(this,u)}}}}}if(process.platform=="linux"||process.platform=="darwin"){this._self=function b(){var o=require("child_process").execFile("/usr/bin/id",["id","-u"]);o.stdout.str="";o.stdout.on("data",function(p){this.str+=p.toString()});o.waitExit();return(parseInt(o.stdout.str))};this.isRoot=function k(){return(this._self()==0)};this.consoleUid=function e(){var o=process.platform=="darwin"?"console":((process.env.DISPLAY)?process.env.DISPLAY:":0");var p=require("child_process").execFile("/bin/sh",["sh"]);p.stdout.str="";p.stdout.on("data",function(u){this.str+=u.toString()});p.stdin.write("who\nexit\n");p.waitExit();var s=p.stdout.str.split("\n");var t,q,r;for(q in s){t=s[q].split(" ");for(r=1;r<t.length;++r){if(t[r].length>0){return(parseInt(this._users()[t[0]]))}}}throw ("nobody logged into console")}}}function showActiveOnly(c){var b=[];var e={};var f=[];var d;for(var a in c){if(c[a].State=="Active"){b.push(c[a]);d=(c[a].Domain?(c[a].Domain+"\\"):"")+c[a].Username;if(!e[d]){e[d]=d}}}for(var a in e){f.push(a)}Object.defineProperty(b,"usernames",{value:f});return(b)}function getTokens(d){var a=[];var b;a.push(d.substring(0,(b=d.indexOf(" "))));while(d[++b]==" "){}a.push(d.substring(b,(b=d.substring(b).indexOf(" ")+b)));while(d[++b]==" "){}a.push(d.substring(b,(b=d.substring(b).indexOf(" ")+b)));while(d[++b]==" "){}var c=d.substring(b).trim();a.push(c);return(a)}module.exports=new UserSessions();
\ No newline at end of file
agents/modules_meshcore_min/amt-lme.min.js
new
+1
@@ -0,0 +1 @@
1
+var MemoryStream=require("MemoryStream");var lme_id=0;var lme_port_offset=0;var xmlParser=require("amt-xml");var APF_DISCONNECT=1;var APF_SERVICE_REQUEST=5;var APF_SERVICE_ACCEPT=6;var APF_USERAUTH_REQUEST=50;var APF_USERAUTH_FAILURE=51;var APF_USERAUTH_SUCCESS=52;var APF_GLOBAL_REQUEST=80;var APF_REQUEST_SUCCESS=81;var APF_REQUEST_FAILURE=82;var APF_CHANNEL_OPEN=90;var APF_CHANNEL_OPEN_CONFIRMATION=91;var APF_CHANNEL_OPEN_FAILURE=92;var APF_CHANNEL_WINDOW_ADJUST=93;var APF_CHANNEL_DATA=94;var APF_CHANNEL_CLOSE=97;var APF_PROTOCOLVERSION=192;function lme_object(){this.ourId=++lme_id;this.amtId=-1;this.LME_CHANNEL_STATUS="LME_CS_FREE";this.txWindow=0;this.rxWindow=0;this.localPort=0;this.errorCount=0}function stream_bufferedWrite(){var a=require("events").inherits(this);this.buffer=[];this._readCheckImmediate=undefined;this._ObjectID="bufferedWriteStream";a.createEvent("close");a.createEvent("drain");a.createEvent("error");a.createEvent("finish");a.createEvent("pipe");a.createEvent("unpipe");a.createEvent("readable");this.isEmpty=function(){return(this.buffer.length==0)};this.isWaiting=function(){return(this._readCheckImmediate==undefined)};this.write=function(c){for(var b in arguments){if(typeof(arguments[b])=="function"){this.once("drain",arguments[b]);break}}var d=Buffer.alloc(c.length);c.copy(d);this.buffer.push({offset:0,data:d});this.emit("readable");return(this.buffer.length==0?true:false)};this.read=function(){var f=arguments.length==0?undefined:arguments[0];var b=0;var d=[];while((f==undefined||b<f)&&this.buffer.length>0){var c=this.buffer[0].data.length-this.buffer[0].offset;var e=this.buffer[0].offset;if(c>(f-b)){d.push(this.buffer[0].data.slice(e,e+f-b));this.buffer[0].offset+=(f-b);b+=(f-b)}else{d.push(this.buffer[0].data.slice(e));b+=c;this.buffer.shift()}}this._readCheckImmediate=setImmediate(function(g){g._readCheckImmediate=undefined;if(g.buffer.length==0){g.emit("drain")}else{g.emit("readable")}},this);return(Buffer.concat(d))}}function lme_heci(c){var a=require("events").inherits(this);a.createEvent("error");a.createEvent("connect");a.createEvent("notify");a.createEvent("bind");if((c!=null)&&(c.debug==true)){lme_port_offset=-100}var b=require("heci");this.INITIAL_RXWINDOW_SIZE=4096;this._ObjectID="lme";this._LME=b.create();this._LME._binded={};this._LME.LMS=this;this._LME.on("error",function(d){this.LMS.emit("error",d)});this._LME.on("connect",function(){this.on("data",function(k){var l=k.readUInt8(0);switch(l){default:console.log("Unhandled LME Command "+l+", "+k.length+" byte(s).");break;case APF_SERVICE_REQUEST:var A=k.readUInt32BE(1);var z=k.slice(5,A+5);if(z=="pfwd@amt.intel.com"||z=="auth@amt.intel.com"){var G=Buffer.alloc(5+A);G.writeUInt8(6,0);G.writeUInt32BE(A,1);G.write(z.toString(),5);this.write(G)}else{}break;case APF_GLOBAL_REQUEST:var A=k.readUInt32BE(1);var z=k.slice(5,A+5).toString();switch(z){case"tcpip-forward":var w=k.readUInt32BE(A+6);var H=k.readUInt32BE(A+10+w);if(this[z]==undefined){this[z]={}}if(this[z][H]!=null){for(var t in this.sockets){var h=this.sockets[t];if(h.localPort==H){this.sockets[t].end();delete this.sockets[t]}}}if(this[z][H]==null){try{this[z][H]=require("net").createServer();this[z][H].HECI=this;if(lme_port_offset==0){this[z][H].listen({port:H,host:"127.0.0.1"})}else{this[z][H].listen({port:(H+lme_port_offset)})}this[z][H].on("connection",function(e){this.HECI.LMS.bindDuplexStream(e,e.remoteFamily,e.localPort-lme_port_offset)});this._binded[H]=true;this.LMS.emit("bind",this._binded)}catch(p){console.log(p,"Port "+H)}}var G=Buffer.alloc(5);G.writeUInt8(81,0);G.writeUInt32BE(H,1);this.write(G);break;case"cancel-tcpip-forward":var G=Buffer.alloc(1);G.writeUInt8(APF_REQUEST_SUCCESS,0);this.write(G);break;case"udp-send-to@amt.intel.com":var G=Buffer.alloc(1);G.writeUInt8(APF_REQUEST_FAILURE,0);this.write(G);break;default:break}break;case APF_CHANNEL_OPEN_CONFIRMATION:var J=k.readUInt32BE(1);var N=k.readUInt32BE(5);var O=k.readUInt32BE(9);if(this.sockets[J]!=undefined){this.sockets[J].lme.amtId=N;this.sockets[J].lme.rxWindow=O;this.sockets[J].lme.txWindow=O;this.sockets[J].lme.LME_CHANNEL_STATUS="LME_CS_CONNECTED";this.sockets[J].bufferedStream=new stream_bufferedWrite();this.sockets[J].bufferedStream.socket=this.sockets[J];this.sockets[J].bufferedStream.on("readable",function(){if(this.socket.lme.txWindow>0){var e=this.read(this.socket.lme.txWindow);var i=Buffer.alloc(9+e.length);i.writeUInt8(APF_CHANNEL_DATA,0);i.writeUInt32BE(this.socket.lme.amtId,1);i.writeUInt32BE(e.length,5);e.copy(i,9);this.socket.lme.txWindow-=e.length;this.socket.HECI.write(i)}});this.sockets[J].bufferedStream.on("drain",function(){this.socket.resume()});this.sockets[J].on("data",function(e){if(!this.bufferedStream.write(e)){this.pause()}});this.sockets[J].on("end",function(){var e=Buffer.alloc(5);e.writeUInt8(APF_CHANNEL_CLOSE,0);e.writeUInt32BE(this.lme.amtId,1);this.HECI.write(e)});this.sockets[J].resume()}break;case APF_PROTOCOLVERSION:var x=k.readUInt32BE(1);var y=k.readUInt32BE(5);var L=k.readUInt32BE(9);var G=Buffer.alloc(93);G.writeUInt8(192,0);G.writeUInt32BE(1,1);G.writeUInt32BE(0,5);G.writeUInt32BE(L,9);this.write(G);break;case APF_CHANNEL_WINDOW_ADJUST:var K=k.readUInt32BE(1);var g=k.readUInt32BE(5);if(this.sockets[K]!=undefined){this.sockets[K].lme.txWindow+=g;if(!this.sockets[K].bufferedStream.isEmpty()&&this.sockets[K].bufferedStream.isWaiting()){this.sockets[K].bufferedStream.emit("readable")}}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_WINDOW_ADJUST")}break;case APF_CHANNEL_DATA:var K=k.readUInt32BE(1);var n=k.readUInt32BE(5);var m=k.slice(9,9+n);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].pendingBytes.push(m.length);this.sockets[K].write(m,function(){var i=this.pendingBytes.shift();var e=Buffer.alloc(9);e.writeUInt8(APF_CHANNEL_WINDOW_ADJUST,0);e.writeUInt32BE(this.lme.amtId,1);e.writeUInt32BE(i,5);this.HECI.write(e)})}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){var h=this.insockets[K];if(h.data==null){h.data=m.toString()}else{h.data+=m.toString()}h.rxWindow+=n;var s=parseHttp(h.data);if((s!=null)||(h.data.length>=8000)){var B=null;try{B=xmlParser.ParseWsman(s)}catch(o){}if(B!=null){this.LMS.emit("notify",B,h.options,_lmsNotifyToString(B),_lmsNotifyToCode(B))}var f=Buffer.alloc(5);f.writeUInt8(APF_CHANNEL_CLOSE,0);f.writeUInt32BE(d,1);this.write(f)}else{if(h.rxWindow>6000){var f=Buffer.alloc(9);f.writeUInt8(APF_CHANNEL_WINDOW_ADJUST,0);f.writeUInt32BE(h.amtId,1);f.writeUInt32BE(h.rxWindow,5);this.write(f);h.rxWindow=0}}}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_DATA")}}break;case APF_CHANNEL_OPEN_FAILURE:var K=k.readUInt32BE(1);var M=k.readUInt32BE(5);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].end();delete this.sockets[K]}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){delete this.insockets[K]}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_OPEN_FAILURE")}}break;case APF_CHANNEL_CLOSE:var K=k.readUInt32BE(1);if((this.sockets!=null)&&(this.sockets[K]!=undefined)){this.sockets[K].end();var d=this.sockets[K].lme.amtId;var f=Buffer.alloc(5);delete this.sockets[K];f.writeUInt8(APF_CHANNEL_CLOSE,0);f.writeUInt32BE(d,1);this.write(f)}else{if((this.insockets!=null)&&(this.insockets[K]!=undefined)){delete this.insockets[K]}else{console.log("Unknown Recipient ID/"+K+" for APF_CHANNEL_CLOSE")}}break;case APF_CHANNEL_OPEN:var A=k.readUInt32BE(1);var z=k.slice(5,A+5).toString();var j=k.readUInt32BE(A+5);var u=k.readUInt32BE(A+9);var r=k.readUInt32BE(A+17);var q=k.slice(A+21,A+21+r).toString();var I=k.readUInt32BE(A+21+r);var D=k.readUInt32BE(A+25+r);var C=k.slice(A+29+r,A+29+r+D).toString();var E=k.readUInt32BE(A+29+r+D);if(this.insockets==null){this.insockets={}}var F=++lme_id;var v=new lme_object();v.ourId=F;v.amtId=j;v.txWindow=u;v.rxWindow=0;v.options={target:q,targetPort:I,source:C,sourcePort:E};this.insockets[F]=v;var f=Buffer.alloc(17);f.writeUInt8(APF_CHANNEL_OPEN_CONFIRMATION,0);f.writeUInt32BE(j,1);f.writeUInt32BE(F,5);f.writeUInt32BE(4000,9);f.writeUInt32BE(4294967295,13);this.write(f);break}});this.LMS.emit("connect");this.resume()});this.bindDuplexStream=function(e,h,g){var j=e;j.pendingBytes=[];j.HECI=this._LME;j.LMS=this;j.lme=new lme_object();j.lme.Socket=j;j.localPort=g;var d=new MemoryStream();d.writeUInt8(90);d.writeUInt32BE(15);d.write("forwarded-tcpip");d.writeUInt32BE(j.lme.ourId);d.writeUInt32BE(this.INITIAL_RXWINDOW_SIZE);d.writeUInt32BE(4294967295);for(var f=0;f<2;++f){if(h=="IPv6"){d.writeUInt32BE(3);d.write("::1")}else{d.writeUInt32BE(9);d.write("127.0.0.1")}d.writeUInt32BE(g)}this._LME.write(d.buffer);if(this._LME.sockets==undefined){this._LME.sockets={}}this._LME.sockets[j.lme.ourId]=j;j.pause()};this._LME.connect(b.GUIDS.LME,{noPipeline:0})}function parseHttp(c){var d=c.indexOf("\r\n\r\n");if((d==-1)||(c.length<(d+2))){return null}var b=require("http-headers")(c.substring(0,d),true);var a=parseInt(b["content-length"]);if(c.length>=a+d+4){return c.substring(d+4,d+4+a)}return null}function _lmsNotifyToCode(c){if((c==null)||(c.Body==null)||(c.Body.MessageID==null)){return null}var b=c.Body.MessageID;try{b+="-"+c.Body.MessageArguments[0]}catch(a){}return b}function _lmsNotifyToString(c){if((c==null)||(c.Body==null)||(c.Body.MessageID==null)){return null}var b=c.Body.MessageID;try{b+="-"+c.Body.MessageArguments[0]}catch(a){}if(lmsEvents[b]){return lmsEvents[b]}return null}var lmsEvents={iAMT0001:"System Defense Policy %1s triggered.",iAMT0002:"Agent Presence Agent %1s not started.",iAMT0003:"Agent Presence Agent %1s stopped.",iAMT0004:"Agent Presence Agent %1s running.",iAMT0005:"Agent Presence Agent %1s expired.",iAMT0006:"Agent Presence Agent %1s suspended.",iAMT0007:"Host software attempt to disable AMT Network link detected.",iAMT0008:"Host software attempt to disable AMT Network link detected -- Host Network link blocked.",iAMT0009:"AMT clock or FLASH wear-out protection disabled.",iAMT0010:"Intel(R) AMT Network Interface %1s heuristics defense slow threshold trespassed.",iAMT0011:"Intel(R) AMT Network Interface %1s heuristics defense fast threshold trespassed.",iAMT0012:"Intel(R) AMT Network Interface %1s heuristics defense factory defined threshold trespassed.",iAMT0013:"Intel(R) AMT Network Interface %1s heuristics defense Encounter timeout expired.",iAMT0014:"General certificate error.",iAMT0015:"Certificate expired.",iAMT0016:"No trusted root certificate.",iAMT0017:"Not configured to work with server certificate.",iAMT0018:"Certificate revoked.",iAMT0019:"RSA exponent too large.",iAMT0020:"RSA modulus too large.",iAMT0021:"Unsupported digest.",iAMT0022:"Distinguished name too long.",iAMT0023:"Key usage missing.",iAMT0024:"General SSL handshake error.",iAMT0025:"General 802.1x error.",iAMT0026:"AMT Diagnostic AlertEAC error - General NAC error.",iAMT0027:"AMT Diagnostic AlertEAC error - attempt to get a NAC posture while AMT NAC is disabled.",iAMT0028:"AMT Diagnostic AlertEAC error - attempt to get a posture of an unsupported type.",iAMT0029:"Audit log storage is 50% full.",iAMT0030:"Audit log storage is 75% full.",iAMT0031:"Audit log storage is 85% full.",iAMT0032:"Audit log storage is 95% full.",iAMT0033:"Audit log storage is full.",iAMT0034:"Firmware Update Event - Partial.",iAMT0035:"Firmware Update Event - Failure.",iAMT0036:"Remote connectivity initiated.",iAMT0037:"ME Presence event.","iAMT0038-0":"AMT is being unprovisioned using BIOS command.","iAMT0038-1":"AMT is being unprovisioned using Local MEI command.","iAMT0038-2":"AMT is being unprovisioned using Local WS-MAN/SOAP command.","iAMT0038-3":"AMT is being unprovisioned using Remote WS-MAN/SOAP command.",iAMT0039:"HW Asset Error.",iAMT0050:"User Notification Alert - General Notification.","iAMT0050-16":"User Notification Alert - Circuit Breaker notification (CB Drop TX filter hit.).","iAMT0050-17":"User Notification Alert - Circuit Breaker notification (CB Rate Limit TX filter hit.).","iAMT0050-18":"User Notification Alert - Circuit Breaker notification (CB Drop RX filter hit.).","iAMT0050-19":"User Notification Alert - Circuit Breaker notification (CB Rate Limit RX filter hit.).","iAMT0050-32":"User Notification Alert - EAC notification.","iAMT0050-48":"User Notification Alert - Remote diagnostics - (Remote Redirection session started - SOL).","iAMT0050-49":"User Notification Alert - Remote diagnostics - (Remote Redirection session stopped - SOL).","iAMT0050-50":"User Notification Alert - Remote diagnostics. (Remote Redirection session started - IDE-R).","iAMT0050-51":"User Notification Alert - Remote diagnostics. (Remote Redirection session stopped - IDE-R).","iAMT0050-66":"User Notification Alert - WLAN notification (Host profile mismatch - Management Interface ignored).","iAMT0050-67":"User Notification Alert - WLAN notification (Management device overrides host radio).","iAMT0050-68":"User Notification Alert - WLAN notification (Host profile security mismatch).","iAMT0050-69":"User Notification Alert - WLAN notification (Management device relinquishes control over host Radio).",iAMT0051:"User Notification Alert - SecIo event.","iAMT0051-0":"User Notification Alert - SecIo event semaphore at host.","iAMT0051-1":"User Notification Alert - semaphore at ME.","iAMT0051-2":"User Notification Alert - SecIo event - semaphore timeout.",iAMT0052:"User Notification Alert - KVM session event.","iAMT0052-0":"User Notification Alert - KVM session requested.","iAMT0052-1":"User Notification Alert - KVM session started.","iAMT0052-2":"User Notification Alert - KVM session stopped.","iAMT0052-3":"User Notification Alert - KVM data channel.",iAMT0053:"User Notification Alert - RCS notification.","iAMT0053-50":"User Notification Alert - RCS notification (HW button pressed. Connection initiated automatically).","iAMT0053-52":"User Notification Alert - RCS notification (HW button pressed. Connection wasn't initiated automatically).","iAMT0053-53":"User Notification Alert - RCS notification (Contracts updated).",iAMT0054:"User Notification Alert - WLAN notification. Wireless Profile sync enablement state changed.",iAMT0055:"User Notification Alert - Provisioning state change notification.","iAMT0055-0":"User Notification Alert - Provisioning state change notification - Pre-configuration.","iAMT0055-1":"User Notification Alert - Provisioning state change notification - In configuration.","iAMT0055-2":"User Notification Alert - Provisioning state change notification - Post-configuration.","iAMT0055-3":"User Notification Alert - Provisioning state change notification - Unprovision process has started.",iAMT0056:"User Notification Alert - System Defense change notification.",iAMT0057:"User Notification Alert - Network State change notification.",iAMT0058:"User Notification Alert - Remote Access change notification.","iAMT0058-1":"User Notification Alert - Remote Access change notification - tunnel is closed.",iAMT0059:"User Notification Alert - KVM enabled event.","iAMT0059-0":"User Notification Alert - KVM enabled event - KVM disabled.","iAMT0059-1":"User Notification Alert - KVM enabled event - KVM enabled (both from MEBx and PTNI).",iAMT0060:"User Notification Alert - SecIO configuration event.",iAMT0061:"ME FW reset occurred.",iAMT0062:"User Notification Alert - IpSyncEnabled event.","iAMT0062-0":"User Notification Alert - IpSyncEnabled event - IpSync disabled.","iAMT0062-1":"User Notification Alert - IpSyncEnabled event - IpSync enabled.",iAMT0063:"User Notification Alert - HTTP Proxy sync enabled event.","iAMT0063-0":"User Notification Alert - HTTP Proxy sync enabled event - HTTP Proxy Sync disabled.","iAMT0063-1":"User Notification Alert - HTTP Proxy sync enabled event - HTTP Proxy Sync enabled.",iAMT0064:"User Notification Alert - User Consent event.","iAMT0064-1":"User Notification Alert - User Consent event - User Consent granted.","iAMT0064-2":"User Notification Alert - User Consent event - User Consent ended.","iAMT0067-0":"Graceful Remote Control Operation - Shutdown.","iAMT0067-1":"Graceful Remote Control Operation - Reset.","iAMT0067-2":"Graceful Remote Control Operation - Hibernate.","iAMT0068-0":"Link Protection Notification - No link protection.","iAMT0068-1":"Link Protection Notification - Passive link protection.","iAMT0068-2":"Link Protection Notification - High link protection.","iAMT0069-0":"Local Time Sync Enablement Notification - Local Time Sync Disabled.","iAMT0069-1":"Local Time Sync Enablement Notification - Local Time Sync Enabled.",iAMT0070:"Host Reset Triggered by WD Expiration Notification.",PLAT0004:"The chassis %1s was opened.",PLAT0005:"The chassis %1s was closed.",PLAT0006:"The drive bay %1s was opened.",PLAT0007:"The drive bay %1s was closed.",PLAT0008:"The I/O card area %1s was opened.",PLAT0009:"The I/O card area %1s was closed.",PLAT0010:"The processor area %1s was opened.",PLAT0011:"The processor area %1s was closed.",PLAT0012:"The LAN %1s has been disconnected.",PLAT0013:"The LAN %1s has been connected.",PLAT0016:"The permission to insert package %1s has been granted.",PLAT0017:"The permission to insert package %1s has been removed.",PLAT0018:"The fan card area %1s is open.",PLAT0019:"The fan card area %1s is closed.",PLAT0022:"The computer system %1s has detected a secure mode violation.",PLAT0024:"The computer system %1s has detected a pre-boot user password violation.",PLAT0026:"The computer system %1s has detected a pre-boot setup password violation.",PLAT0028:"The computer system %1s has detected a network boot password violation.",PLAT0030:"The computer system %1s has detected a password violation.",PLAT0032:"The management controller %1s has detected an out-of-band password violation.",PLAT0034:"The processor %1s has been added.",PLAT0035:"The processor %1s has been removed.",PLAT0036:"An over-temperature condition has been detected on the processor %1s.",PLAT0037:"An over-temperature condition has been removed on the processor %1s.",PLAT0038:"The processor %1s is operating in a degraded State.",PLAT0039:"The processor %1s is no longer operating in a degraded State.",PLAT0040:"The processor %1s has failed.",PLAT0042:"The processor %1s has failed.",PLAT0044:"The processor %1s has failed.",PLAT0046:"The processor %1s has failed.",PLAT0048:"The processor %1s has failed.",PLAT0060:"The processor %1s has been enabled.",PLAT0061:"The processor %1s has been disabled.",PLAT0062:"The processor %1s has a configuration mismatch.",PLAT0064:"A terminator has been detected on the processor %1s.",PLAT0084:"The Power Supply %1s has been added.",PLAT0085:"The Power Supply %1s has been removed.",PLAT0086:"The Power Supply %1s has failed.",PLAT0088:"Failure predicted on power supply %1s.",PLAT0096:"The input to power supply %1s has been lost or fallen out of range.",PLAT0098:"The power supply %1s is operating in an input state that is out of range.",PLAT0099:"The power supply %1s has returned to a normal input state.",PLAT0100:"The power supply %1s has lost input.",PLAT0104:"The power supply %1s has a configuration mismatch.",PLAT0106:"Power supply %1s has been disabled.",PLAT0107:"Power supply %1s has been enabled.",PLAT0108:"Power supply %1s has been power cycled.",PLAT0110:"Power supply %1s has encountered an error during power down.",PLAT0112:"Power supply %1s has lost power.",PLAT0114:"Soft power control has failed for power supply %1s.",PLAT0116:"Power supply %1s has failed.",PLAT0118:"Failure predicted on power supply %1s.",PLAT0120:"Memory subsystem failure.",PLAT0122:"DIMM missing.",PLAT0124:"Memory error detected & corrected for DIMM %1s.",PLAT0128:"Memory DIMM %1s added.",PLAT0129:"Memory DIMM %1s removed.",PLAT0130:"Memory DIMM %1s enabled.",PLAT0131:"Memory DIMM %1s disabled.",PLAT0134:"Memory parity error for DIMM %1s.",PLAT0136:"Memory scrub failure for DIMM %1s.",PLAT0138:"Memory uncorrectable error detected for DIMM %1s.",PLAT0140:"Memory sparing initiated for DIMM %1s.",PLAT0141:"Memory sparing concluded for DIMM %1s.",PLAT0142:"Memory DIMM %1s Throttled.",PLAT0144:"Memory logging limit reached for DIMM %1s.",PLAT0145:"Memory logging limit removed for DIMM %1s.",PLAT0146:"An over-temperature condition has been detected on the Memory DIMM %1s.",PLAT0147:"An over-temperature condition has been removed on the Memory DIMM %1s.",PLAT0162:"The drive %1s has been added.",PLAT0163:"The drive %1s has been removed.",PLAT0164:"The drive %1s has been disabled due to a detected fault.",PLAT0167:"The drive %1s has been enabled.",PLAT0168:"Failure predicted on drive %1s.",PLAT0170:"Hot spare enabled for %1s.",PLAT0171:"Hot spare disabled for %1s.",PLAT0172:"Consistency check has begun for %1s.",PLAT0173:"Consistency check completed for %1s.",PLAT0174:"Array %1s is in critical condition.",PLAT0176:"Array %1s has failed.",PLAT0177:"Array %1s has been restored.",PLAT0178:"Rebuild in progress for array %1s.",PLAT0179:"Rebuild completed for array %1s.",PLAT0180:"Rebuild Aborted for array %1s.",PLAT0184:"The system %1s encountered a POST error.",PLAT0186:"The system %1s encountered a firmware hang.",PLAT0188:"The system %1s encountered firmware progress.",PLAT0192:"The log %1s has been disabled.",PLAT0193:"The log %1s has been enabled.",PLAT0194:"The log %1s has been disabled.",PLAT0195:"The log %1s has been enabled.",PLAT0196:"The log %1s has been disabled.",PLAT0198:"The log %1s has been enabled.",PLAT0200:"The log %1s has been cleared.",PLAT0202:"The log %1s is full.",PLAT0203:"The log %1s is no longer full.",PLAT0204:"The log %1s is almost full.",PLAT0208:"The log %1s has a configuration error.",PLAT0210:"The system %1s has been reconfigured.",PLAT0212:"The system %1s has encountered an OEM system boot event.",PLAT0214:"The system %1s has encountered an unknown system hardware fault.",PLAT0216:"The system %1s has generated an auxiliary log entry.",PLAT0218:"The system %1s has executed a PEF action.",PLAT0220:"The system %1s has synchronized the system clock.",PLAT0222:"A diagnostic interrupt has occurred on system %1s.",PLAT0224:"A bus timeout has occurred on system %1s.",PLAT0226:"An I/O channel check NMI has occurred on system %1s.",PLAT0228:"A software NMI has occurred on system %1s.",PLAT0230:"System %1s has recovered from an NMI.",PLAT0232:"A PCI PERR has occurred on system %1s.",PLAT0234:"A PCI SERR has occurred on system %1s.",PLAT0236:"An EISA fail safe timeout occurred on system %1s.",PLAT0238:"A correctable bus error has occurred on system %1s.",PLAT0240:"An uncorrectable bus error has occurred on system %1s.",PLAT0242:"A fatal NMI error has occurred on system %1s.",PLAT0244:"A fatal bus error has occurred on system %1s.",PLAT0246:"A bus on system %1s is operating in a degraded state.",PLAT0247:"A bus on system %1s is no longer operating in a degraded state.",PLAT0248:"The power button %1s has been pressed.",PLAT0249:"The power button %1s has been released.",PLAT0250:"The sleep button %1s has been pressed.",PLAT0251:"The sleep button %1s has been released.",PLAT0252:"The reset button %1s has been pressed.",PLAT0253:"The reset button %1s has been released.",PLAT0254:"The latch to %1s has been opened.",PLAT0255:"The latch to %1s has been closed.",PLAT0256:"The service request %1s has been enabled.",PLAT0257:"The service request %1s has been completed.",PLAT0258:"Power control of system %1s has failed.",PLAT0262:"The network port %1s has been connected.",PLAT0263:"The network port %1s has been disconnected.",PLAT0266:"The connector %1s has encountered a configuration error.",PLAT0267:"The connector %1s configuration error has been repaired.",PLAT0272:"Power on for system %1s.",PLAT0274:"Power cycle hard requested for system %1s.",PLAT0276:"Power cycle soft requested for system %1s.",PLAT0278:"PXE boot requested for system %1s.",PLAT0280:"Diagnostics boot requested for system %1s.",PLAT0282:"System restart requested for system %1s.",PLAT0284:"System restart begun for system %1s.",PLAT0286:"No bootable media available for system %1s.",PLAT0288:"Non-bootable media selected for system %1s.",PLAT0290:"PXE server not found for system %1s.",PLAT0292:"User timeout on boot for system %1s.",PLAT0296:"System %1s boot from floppy initiated.",PLAT0298:"System %1s boot from local drive initiated.",PLAT0300:"System %1s boot from PXE on network port initiated.",PLAT0302:"System %1s boot diagnostics initiated.",PLAT0304:"System %1s boot from CD initiated.",PLAT0306:"System %1s boot from ROM initiated.",PLAT0312:"System %1s boot initiated.",PLAT0320:"Critical stop during OS load on system %1s.",PLAT0322:"Run-time critical stop on system %1s.",PLAT0324:"OS graceful stop on system %1s.",PLAT0326:"OS graceful shutdown begun on system %1s.",PLAT0327:"OS graceful shutdown completed on system %1s.",PLAT0328:"Agent not responding on system %1s.",PLAT0329:"Agent has begun responding on system %1s.",PLAT0330:"Fault in slot on system %1s.",PLAT0331:"Fault condition removed on system %1s.",PLAT0332:"Identifying slot on system %1s.",PLAT0333:"Identify stopped on slot for system %1s.",PLAT0334:"Package installed in slot for system %1s.",PLAT0336:"Slot empty system %1s.",PLAT0338:"Slot in system %1s is ready for installation.",PLAT0340:"Slot in system %1s is ready for removal.",PLAT0342:"Power is off on slot of system %1s.",PLAT0344:"Power is on for slot of system %1s.",PLAT0346:"Removal requested for slot of system %1s.",PLAT0348:"Interlock activated on slot of system %1s.",PLAT0349:"Interlock de-asserted on slot of system %1s.",PLAT0350:"Slot disabled on system %1s.",PLAT0351:"Slot enabled on system %1s.",PLAT0352:"Slot of system %1s holds spare.",PLAT0353:"Slot of system %1s no longer holds spare.",PLAT0354:"Computer system %1s enabled.",PLAT0356:"Computer system %1s is in sleep - light mode.",PLAT0358:"Computer system %1s is in hibernate.",PLAT0360:"Computer system %1s is in standby.",PLAT0362:"Computer system %1s is in soft off mode.",PLAT0364:"Computer system %1s is in hard off mode.",PLAT0366:"Computer system %1s is sleeping.",PLAT0368:"Watchdog timer expired for %1s.",PLAT0370:"Reboot of system initiated by watchdog %1s.",PLAT0372:"Powering off system initiated by watchdog %1s.",PLAT0374:"Power cycle of system initiated by watchdog %1s.",PLAT0376:"Watchdog timer interrupt occurred for %1s.",PLAT0378:"A page alert has been generated for system %1s.",PLAT0380:"A LAN alert has been generated for system %1s.",PLAT0382:"An event trap has been generated for system %1s.",PLAT0384:"An SNMP trap has been generated for system %1s.",PLAT0390:"%1s detected as present.",PLAT0392:"%1s detected as absent.",PLAT0394:"%1s has been disabled.",PLAT0395:"%1s has been enabled.",PLAT0396:"Heartbeat lost for LAN %1s.",PLAT0397:"Heartbeat detected for LAN %1s.",PLAT0398:"Sensor %1s is unavailable or degraded on management system.",PLAT0399:"Sensor %1s has returned to normal on management system.",PLAT0400:"Controller %1s is unavailable or degraded on management system.",PLAT0401:"Controller %1s has returned to normal on management system.",PLAT0402:"Management system %1s is off-line.",PLAT0404:"Management system %1s is disabled.",PLAT0405:"Management system %1s is enabled.",PLAT0406:"Sensor %1s has failed on management system.",PLAT0408:"FRU %1s has failed on management system.",PLAT0424:"The battery %1s is critically low.",PLAT0427:"The battery %1s is no longer critically low.",PLAT0430:"The battery %1s has been removed from unit.",PLAT0431:"The battery %1s has been added.",PLAT0432:"The battery %1s has failed.",PLAT0434:"Session audit is deactivated on system %1s.",PLAT0435:"Session audit is activated on system %1s.",PLAT0436:"A hardware change occurred on system %1s.",PLAT0438:"A firmware or software change occurred on system %1s.",PLAT0440:"A hardware incompatibility was detected on system %1s.",PLAT0442:"A firmware or software incompatibility was detected on system %1s.",PLAT0444:"Invalid or unsupported hardware was detected on system %1s.",PLAT0446:"Invalid or unsupported firmware or software was detected on system %1s.",PLAT0448:"A successful hardware change was detected on system %1s.",PLAT0450:"A successful software or firmware change was detected on system %1s.",PLAT0464:"FRU %1s not installed on system.",PLAT0465:"FRU %1s installed on system.",PLAT0466:"Activation requested for FRU %1s on system.",PLAT0467:"FRU %1s on system is active.",PLAT0468:"Activation in progress for FRU %1s on system.",PLAT0470:"Deactivation request for FRU %1s on system.",PLAT0471:'FRU %1s on system is in standby or "hot spare" state.',PLAT0472:"Deactivation in progress for FRU %1s on system.",PLAT0474:"Communication lost with FRU %1s on system.",PLAT0476:"Numeric sensor %1s going low (lower non-critical).",PLAT0478:"Numeric sensor %1s going high (lower non-critical).",PLAT0480:"Numeric sensor %1s going low (lower critical).",PLAT0482:"Numeric sensor %1s going high (lower critical).",PLAT0484:"Numeric sensor %1s going low (lower non-recoverable).",PLAT0486:"Numeric sensor %1s going high (lower non-critical).",PLAT0488:"Numeric sensor %1s going low (upper non-critical).",PLAT0490:"Numeric sensor %1s going high (upper non-critical).",PLAT0492:"Numeric sensor %1s going low (upper critical).",PLAT0494:"Numeric sensor %1s going high (upper critical).",PLAT0496:"Numeric sensor %1s going low (upper non-recoverable).",PLAT0498:"Numeric sensor %1s going high (upper non-recoverable).",PLAT0500:"Sensor %1s has transitioned to idle.",PLAT0502:"Sensor %1s has transitioned to active.",PLAT0504:"Sensor %1s has transitioned to busy.",PLAT0508:"Sensor %1s has asserted.",PLAT0509:"Sensor %1s has de-asserted.",PLAT0510:"Sensor %1s is asserting predictive failure.",PLAT0511:"Sensor %1s is de-asserting predictive failure.",PLAT0512:"Sensor %1s has indicated limit exceeded.",PLAT0513:"Sensor %1s has indicated limit no longer exceeded.",PLAT0514:"Sensor %1s has indicated performance met.",PLAT0516:"Sensor %1s has indicated performance lags.",PLAT0518:"Sensor %1s has transitioned to normal state.",PLAT0520:"Sensor %1s has transitioned from normal to non-critical state.",PLAT0522:"Sensor %1s has transitioned to critical from a less severe state.",PLAT0524:"Sensor %1s has transitioned to non-recoverable from a less severe state.",PLAT0526:"Sensor %1s has transitioned to non-critical from a more severe state.",PLAT0528:"Sensor %1s has transitioned to critical from a non-recoverable state.",PLAT0530:"Sensor %1s has transitioned to non-recoverable.",PLAT0532:"Sensor %1s indicates a monitor state.",PLAT0534:"Sensor %1s has an informational state.",PLAT0536:"Device %1s has been added.",PLAT0537:"Device %1s has been removed from unit.",PLAT0538:"Device %1s has been enabled.",PLAT0539:"Device %1s has been disabled.",PLAT0540:"Sensor %1s has indicated a running state.",PLAT0544:"Sensor %1s has indicated a power off state.",PLAT0546:"Sensor %1s has indicated an on-line state.",PLAT0548:"Sensor %1s has indicated an off-line state.",PLAT0550:"Sensor %1s has indicated an off-duty state.",PLAT0552:"Sensor %1s has indicated a degraded state.",PLAT0554:"Sensor %1s has indicated a power save state.",PLAT0556:"Sensor %1s has indicated an install error.",PLAT0558:"Redundancy %1s has been lost.",PLAT0560:"Redundancy %1s has been reduced.",PLAT0561:"Redundancy %1s has been restored.",PLAT0562:"%1s has transitioned to a D0 power state.",PLAT0564:"%1s has transitioned to a D1 power state.",PLAT0566:"%1s has transitioned to a D2 power state.",PLAT0568:"%1s has transitioned to a D3 power state.",PLAT0720:"The System %1s encountered firmware progress - memory initialization entry.",PLAT0721:"The System %1s encountered firmware progress - memory initialization exit.",PLAT0722:"The System %1s encountered firmware progress - hard drive initialization entry.",PLAT0723:"The System %1s encountered firmware progress - hard drive initialization exit.",PLAT0724:"The System %1s encountered firmware progress - user authentication.",PLAT0728:"The System %1s encountered firmware progress - USR resource configuration entry.",PLAT0729:"The System %1s encountered firmware progress - USR resource configuration exit.",PLAT0730:"The System %1s encountered firmware progress - PCI recource configuration entry.",PLAT0731:"The System %1s encountered firmware progress - PCI recource configuration exit.",PLAT0732:"The System %1s encountered firmware progress - Option ROM initialization entry.",PLAT0733:"The System %1s encountered firmware progress - Option ROM initialization entry exit.",PLAT0734:"The System %1s encountered firmware progress -video initialization entry entry.",PLAT0735:"The System %1s encountered firmware progress - video initialization entry exit.",PLAT0736:"The System %1s encountered firmware progress - cache initialization entry.",PLAT0737:"The System %1s encountered firmware progress - cache initialization exit.",PLAT0738:"The System %1s encountered firmware progress - keyboard controller initialization entry.",PLAT0739:"The System %1s encountered firmware progress - keyboard controller initialization exit.",PLAT0740:"The System %1s encountered firmware progress - motherboard initialization entry.",PLAT0741:"The System %1s encountered firmware progress - motherboard initialization exit.",PLAT0742:"The System %1s encountered firmware progress - floppy disk initialization entry.",PLAT0743:"The System %1s encountered firmware progress - floppy disk initialization exit.",PLAT0744:"The System %1s encountered firmware progress - keyboard test entry.",PLAT0745:"The System %1s encountered firmware progress - keyboard test exit.",PLAT0746:"The System %1s encountered firmware progress - pointing device test entry.",PLAT0747:"The System %1s encountered firmware progress - pointing device test exit.",PLAT0750:"The System %1s encountered firmware progress - dock enable entry.",PLAT0751:"The System %1s encountered firmware progress - dock enable exit.",PLAT0752:"The System %1s encountered firmware progress - dock disable entry.",PLAT0753:"The System %1s encountered firmware progress - dock disable exit.",PLAT0760:"The System %1s encountered firmware progress - start OS boot process.",PLAT0762:"The System %1s encountered firmware progress - call OS wake vector.",PLAT0764:"The System %1s encountered firmware progress - unrecoverable keyboard failure.",PLAT0766:"The System %1s encountered firmware progress - no video device detected.",PLAT0768:"The System %1s encountered firmware progress - SMART alert detected on drive.",PLAT0770:"The System %1s encountered firmware progress - unrecoverable boot device failure.",PLAT0789:"Corrupt BIOS detected.",PLAT0790:"The System %1s encountered PCI configuration failure.",PLAT0791:"The System %1s encountered a video subsystem failure.",PLAT0792:"The System %1s encountered a storage subsystem failure.",PLAT0793:"The System %1s encountered a USB subsystem failure.",PLAT0794:"The System %1s has detected no memory in the system.",PLAT0795:"The System %1s encountered a motherboard failure.",PLAT0796:"The System %1s encountered a memory Regulator Voltage Bad.",PLAT0797:"%1s PCI reset is not deasserting.",PLAT0798:"%1s Non-Motherboard Regulator Failure.",PLAT0799:"%1s Power Supply Cable failure.",PLAT0800:"%1s Motherboard regulator failure.",PLAT0801:"%1s System component compatibility mismatch."};module.exports=lme_heci;
\ No newline at end of file
agents/modules_meshcore_min/amt-manage.min.js
new
+1
@@ -0,0 +1 @@
1
+function AmtManager(d,q,v){var M=function(T){d.SendCommand({action:"msg",type:"console",value:T})};var r=function(T){if(v){M("amt-manager: "+T+"<br />")}};var h=null,i=0;var f=null,g=0;var e=null;var H=null;var G=null;var k=null;var F=this;var E;var O=null;F.state=0;F.lmsstate=0;F.onStateChange=null;F.setDebug=function(T){v=T};F.setPolicy=function(U,T){if(T||(JSON.stringify(k)!=JSON.stringify(U))){k=U;if(m==null){m=setTimeout(F.applyPolicy,8000)}}};var L=0;F.reset=function(){++L;h=null,i=0,f=null,g=0,F.state=0,F.lmsstate=0;try{var T=require("amt-mei");h=new T();h.on("error",function(V){r("MEI error");h=null;i=-1;F.state=-1;if(F.onStateChange!=null){F.onStateChange(i)}});h.getVersion(function(V){if(V==null){i=-1;F.state=-1;if(F.onStateChange!=null){F.onStateChange(i)}if(L<10){setTimeout(F.reset,10000)}}else{e=V;i=2;F.state=2;L=0;if(F.onStateChange!=null){F.onStateChange(i)}F.lmsreset()}})}catch(U){r("MEI exception: "+U);h=null;i=-1;F.state=-1}};var j=null;F.getAmtInfo=function(U){if((h==null)||(i<2)){if(U!=null){U(null)}return}try{j={Flags:0};h.getProtocolVersion(function(V){if(V!=null){j.MeiVersion=V}});h.getVersion(function(V){if(V){j.Versions={};for(var W in V.Versions){j.Versions[V.Versions[W].Description]=V.Versions[W].Version}}});h.getProvisioningMode(function(V){if(V){j.ProvisioningMode=V.mode}});h.getProvisioningState(function(V){if(V){j.ProvisioningState=V.state}});h.getEHBCState(function(V){if((V!=null)&&(V.EHBC==true)){j.Flags+=1}});h.getControlMode(function(V){if(V!=null){if(V.controlMode==1){j.Flags+=2}if(V.controlMode==2){j.Flags+=4}}});h.getLanInterfaceSettings(0,function(V){if(V){j.net0=V}});h.getLanInterfaceSettings(1,function(V){if(V){j.net1=V}});h.getUuid(function(V){if((V!=null)&&(V.uuid!=null)){j.UUID=V.uuid}});h.getDnsSuffix(function(V){if(V!=null){j.DNS=V}if(U!=null){U(j)}})}catch(T){if(U!=null){U(null)}return}};var t=function(W){if((W==null)||(W.Body==null)||(W.Body.MessageID==null)||(W.Body.MessageArguments==null)){return null}var T=W.Body.MessageID,U=W.Body.MessageArguments[0],V=null;switch(T){case"iAMT0050":if(U=="48"){V="Intel® AMT Serial-over-LAN connected"}else{if(U=="49"){V="Intel® AMT Serial-over-LAN disconnected"}}break;case"iAMT0052":if(U=="1"){V="Intel® AMT KVM connected"}else{if(U=="2"){V="Intel® AMT KVM disconnected"}}break;default:break}if(V!=null){d.SendCommand({action:"msg",type:"notify",value:V,tag:"general",amtMessage:T})}};F.lmsreset=function(){var T=null,U=0;F.lmsstate=0;try{var W=require("amt-lme");U=1;F.lmsstate=1;T=new W();T.on("error",function(X){U=0;F.lmsstate=0;T=null;r("LMS error");N(1)});T.on("connect",function(){U=2;F.lmsstate=2;r("LMS connected");N(2)});T.on("notify",function(Y,Z,aa,X){if(X=="iAMT0052-3"){y()}else{t(Y)}})}catch(V){U=-1;F.lmsstate=-1;T=null}};var N=function(T){if((h==null)||(i<2)||(e==null)){return}h.getLocalSystemAccount(function(aa){if(aa==null){return}var Y=require("amt-wsman-duk");var Z=require("amt-wsman");var U=require("amt");H=new Z(Y,"127.0.0.1",16992,aa.user,aa.pass,false);G=new U(H);i=3;F.state=3;if(F.onStateChange!=null){F.onStateChange(i)}if(m==null){F.applyPolicy()}var V=null;try{for(var X in e.Versions){if(e.Versions[X].Description=="AMT"){V=parseInt(e.Versions[X].Version.split(".")[0])}}}catch(W){}if((V!=null)&&(V>=12)){y("skip");F.kvmTempTimer=setInterval(function(){y()},2000);A(JSON.stringify({action:"restart",ver:1}))}})};var y=function(T){G.IPS_KVMRedirectionSettingData_DataChannelRead(F.kvmDataGetResponse,T)};var x=function(W,U,V,X,Y){if((Y!="skip")&&(X==200)&&(V.Body.ReturnValue==0)){var Z=null;try{Z=Buffer.from(V.Body.DataMessage,"base64").toString()}catch(T){return}if(Z!=null){F.kvmProcessData(V.Body.RealmsBitmap,V.Body.MessageId,Z)}}};var Q=null;var z=function(W,V,Y){var T=null;try{T=JSON.parse(Y)}catch(U){}if((T!=null)&&(T.action)){if(T.action=="present"){A(JSON.stringify({action:"present",ver:1,platform:process.platform}))}if(T.action=="offer"){Q={};var X=require("ILibWebRTC");Q.webrtc=X.createConnection();Q.webrtc.on("connected",function(){});Q.webrtc.on("disconnected",function(){F.webRtcCleanUp()});Q.webrtc.on("dataChannel",function(Z){Q.rtcchannel=Z;Q.kvm=mesh.getRemoteDesktopStream();Q.kvm.pipe(Q.rtcchannel,{dataTypeSkip:1,end:false});Q.rtcchannel.on("end",function(){F.webRtcCleanUp()});Q.rtcchannel.on("data",function(aa){F.kvmCtrlData(this,aa)});Q.rtcchannel.pipe(Q.kvm,{dataTypeSkip:1,end:false})});A(JSON.stringify({action:"answer",ver:1,sdp:Q.webrtc.setOffer(T.sdp)}))}}};var w=function(U,W){if(W.length>0&&W.charCodeAt(0)!=123){if(F.fileupload!=null){W=Buffer.from(W,"base64");var ac=W.readUInt32BE(0);if((ac==16777216)||(ac==16777217)){fs.writeSync(F.fileupload.fp,W.slice(4));U.write({action:"upload",sub:"ack",reqid:F.fileupload.reqid});if(ac==16777217){fs.closeSync(F.fileupload.fp);F.fileupload=null}}}return}r("KVM Ctrl Data: "+W);try{W=JSON.parse(W)}catch(Z){r("Invalid JSON: "+W);return}if((W.path!=null)&&(process.platform!="win32")&&(W.path[0]!="/")){W.path="/"+W.path}switch(W.action){case"ping":U.write({action:"pong"});break;case"lock":if(process.platform=="win32"){var V=require("child_process");V.execFile(process.env.windir+"\\system32\\cmd.exe",["/c","RunDll32.exe user32.dll,LockWorkStation"],{type:1})}break;case"ls":var af=getDirectoryInfo(W.path);if(W.reqid!=undefined){af.reqid=W.reqid}U.write(af);break;case"mkdir":fs.mkdirSync(W.path);break;case"rm":for(var ad in W.delfiles){var ab=I.join(W.path,W.delfiles[ad]);try{fs.unlinkSync(ab)}catch(Y){r(Y)}}break;case"rename":try{fs.renameSync(I.join(W.path,W.oldname),I.join(W.path,W.newname))}catch(Y){r(Y)}break;case"download":var ah=0;if(W.sub=="start"){if(F.filedownload!=null){U.write({action:"download",sub:"cancel",id:F.filedownload.id});delete F.filedownload}F.filedownload={id:W.id,path:W.path,ptr:0};try{F.filedownload.f=fs.openSync(F.filedownload.path,"rbN")}catch(Y){U.write({action:"download",sub:"cancel",id:F.filedownload.id});delete F.filedownload}if(F.filedownload){U.write({action:"download",sub:"start",id:W.id})}}else{if((F.filedownload!=null)&&(W.id==F.filedownload.id)){if(W.sub=="startack"){ah=8}else{if(W.sub=="stop"){delete F.filedownload}else{if(W.sub=="ack"){ah=1}}}}}while(ah>0){ah--;var T=Buffer.alloc(4096);var ae=fs.readSync(F.filedownload.f,T,4,4092,null);F.filedownload.ptr+=ae;if(ae<4092){T.writeInt32BE(16777217,0);fs.closeSync(F.filedownload.f);delete F.filedownload;ah=0}else{T.writeInt32BE(16777216,0)}U.write(T.slice(0,ae+4).toString("base64"))}break;case"upload":if(W.sub=="start"){if(F.fileupload!=null){fs.closeSync(F.fileupload.fp)}if(!W.path||!W.name){break}F.fileupload={reqid:W.reqid};var aa=I.join(W.path,W.name);try{F.fileupload.fp=fs.openSync(aa,"wbN")}catch(Y){}if(F.fileupload.fp){U.write({action:"upload",sub:"start",reqid:F.fileupload.reqid})}else{F.fileupload=null;U.write({action:"upload",sub:"error",reqid:F.fileupload.reqid})}}else{if(W.sub=="cancel"){if(F.fileupload!=null){fs.closeSync(F.fileupload.fp);F.fileupload=null}}}break;case"copy":for(var ad in W.names){var ag=I.join(W.scpath,W.names[ad]),X=I.join(W.dspath,W.names[ad]);if(ag!=X){try{fs.copyFileSync(ag,X)}catch(Y){}}}break;case"move":for(var ad in W.names){var ag=I.join(W.scpath,W.names[ad]),X=I.join(W.dspath,W.names[ad]);if(ag!=X){try{fs.copyFileSync(ag,X);fs.unlinkSync(ag)}catch(Y){}}}break;default:r("Invalid KVM command: "+W);break}};var P=function(){r("webRtcCleanUp");if(Q==null){return}if(Q.rtcchannel){try{Q.rtcchannel.close()}catch(T){}try{Q.rtcchannel.removeAllListeners("data")}catch(T){}try{Q.rtcchannel.removeAllListeners("end")}catch(T){}delete Q.rtcchannel}if(Q.webrtc){try{Q.webrtc.close()}catch(T){}try{Q.webrtc.removeAllListeners("connected")}catch(T){}try{Q.webrtc.removeAllListeners("disconnected")}catch(T){}try{Q.webrtc.removeAllListeners("dataChannel")}catch(T){}delete Q.webrtc}if(Q.kvm){try{Q.kvm.end()}catch(T){}delete Q.kvm}Q=null};var A=function(T){G.IPS_KVMRedirectionSettingData_DataChannelWrite(Buffer.from(T).toString("base64"),function(){})};var s=function(T,U){if(fs.existsSync(T)){if(U==true){fs.readdirSync(F.path.join(T,"*")).forEach(function(W,X){var V=F.path.join(T,W);if(fs.statSync(V).isDirectory()){s(V,true)}else{fs.unlinkSync(V)}})}fs.unlinkSync(T)}};var I={join:function(){var V=[];for(var T in arguments){var U=arguments[T];if(U!=null){while(U.endsWith("/")||U.endsWith("\\")){U=U.substring(0,U.length-1)}if(T!=0){while(U.startsWith("/")||U.startsWith("\\")){U=U.substring(1)}}V.push(U)}}if(V.length==0){return"/"}return V.join("/")}};function D(T){return require("MD5Stream").create().syncHash(T).toString("hex")}F.deactivateCCM=function(){h.unprovision(1,function(T){if(T==0){r("Success deactivating Intel AMT CCM.");d.SendCommand({action:"coreinfo",intelamt:{state:0,flags:0}});m=setTimeout(F.applyPolicy,8000)}else{r("Intel AMT CCM deactivation error: "+T)}})};F.getTrustedHashes=function(T,U){if(O!=null){T(U)}O=[];h.getHashHandles(function(W){var V=W.length;for(var X=0;X<W.length;++X){this.getCertHashEntry(W[X],function(Y){if(Y.isActive==1){O.push(Y.certificateHash.toLowerCase())}if(--V==0){T(U)}})}})};F.activeToACM=function(Y){if((Y.ProvisioningState!=0)||(k==null)||(k.match==null)){return}var Z=null;if((Y.net0==null)&&(Y.net0.enabled!=0)){return}if(Y.DNS){Z=Y.DNS}else{var V=require("os").networkInterfaces();for(var U in V){for(var W in V[U]){if((V[U][W].mac==Y.net0.mac)&&(V[U][W].fqdn!=null)&&(V[U][W].fqdn!="")){Z=V[U][W].fqdn.toLowerCase()}}}}if(Z==null){return}var T=null;for(var U in k.match){var X=k.match[U];if(X.cn==Z){for(var W in O){if((O[W]==X.sha256)||(O[W]==X.sha1)){T=O[W]}}}}if(T==null){return}if(G!=null){G.BatchEnum(null,["*AMT_GeneralSettings","*IPS_HostBasedSetupService"],a,{fqdn:Z,hash:T,uuid:Y.UUID})}else{h.getLocalSystemAccount(function(ad){if((ad!=null)&&ad.user&&ad.pass){var ab=require("amt-wsman-duk");var ac=require("amt-wsman");var aa=require("amt");H=new ac(ab,"127.0.0.1",16992,ad.user,ad.pass,false);G=new aa(H);G.BatchEnum(null,["*AMT_GeneralSettings","*IPS_HostBasedSetupService"],a,{fqdn:Z,hash:T,uuid:Y.UUID})}})}};function a(X,V,W,Y,Z){if(Y!=200){return}var U=W.IPS_HostBasedSetupService.response.ConfigurationNonce;var T=W.AMT_GeneralSettings.response.DigestRealm;d.SendCommand({action:"acmactivate",nonce:U,realm:T,fqdn:Z.fqdn,hash:Z.hash,uuid:Z.uuid})}F.setAcmResponse=function(T){T.index=0;J(T)};function J(T){var U=(T.index==0),V=(T.index==(T.certs.length-1));if((T.index<T.certs.length)&&(T.certs[T.index]!=null)){G.IPS_HostBasedSetupService_AddNextCertInChain(T.certs[T.index],U,V,function(Y,W,X,Z){if(Z!==200){r("AddNextCertInChain status="+Z);return}else{if(X.Body["ReturnValue"]!==0){r("AddNextCertInChain error="+X.Body["ReturnValue"]);return}else{T.index++;J(T)}}})}else{G.IPS_HostBasedSetupService_AdminSetup(2,T.password,T.nonce,2,T.signature,function(Y,W,X,Z){if((Z==200)&&(X.Body["ReturnValue"]==0)){if(F.onStateChange!=null){F.onStateChange(2)}}})}}function B(U){var W="",V="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";for(var T=0;T<U;T++){W+=V.charAt(Math.floor(Math.random()*V.length))}return W}F.activeToCCM=function(T){if((T==null)||(T=="")){T="P@0s"+B(23)}u=T;if(G!=null){G.BatchEnum(null,["*AMT_GeneralSettings","*IPS_HostBasedSetupService"],b,T)}else{h.getLocalSystemAccount(function(X){if((X!=null)&&X.user&&X.pass){var V=require("amt-wsman-duk");var W=require("amt-wsman");var U=require("amt");H=new W(V,"127.0.0.1",16992,X.user,X.pass,false);G=new U(H);G.BatchEnum(null,["*AMT_GeneralSettings","*IPS_HostBasedSetupService"],b,T)}else{}})}};var b=function(W,U,V,X,T){if(X!=200){r("Failed to fetch activation information, status "+X)}else{if(V.IPS_HostBasedSetupService.response.AllowedControlModes.length!=2){r("Client control mode activation not allowed")}else{W.IPS_HostBasedSetupService_Setup(2,D("admin:"+V.AMT_GeneralSettings.response.DigestRealm+":"+T).substring(0,32),null,null,null,null,c)}}};var c=function(V,T,U,W){if(W!=200){r("Failed to activate, status "+W)}else{if(U.Body.ReturnValue!=0){r("Client control mode activation failed: "+U.Body.ReturnValueStr)}else{r("Intel AMT CCM activation success.");q.Put("amtCCMPass",u);d.SendCommand({action:"coreinfo",intelamt:{state:2,flags:2,user:"admin",pass:u}})}}m=setTimeout(F.applyPolicy,8000)};F.start=function(){var T=null;try{T=JSON.parse(q.Get("amtPolicy"))}catch(U){r("Exception loading amtPolicy")}try{u=q.Get("amtCCMPass")}catch(U){}if(typeof u!="string"){u=null}F.reset()};var u,S,l,m,K=0;F.applyPolicy=function(){m=null;if((i!=3)||(k==null)||(typeof k!="object")||(typeof k.type!="number")||(k.type==0)){return}if((k.password!=null)&&(k.password!="")){u=k.password}F.getAmtInfo(function(V){if((k.type==1)&&(V.ProvisioningState==2)&&((V.Flags&2)!=0)){S=l=null;F.deactivateCCM()}else{if((k.type==2)&&(V.ProvisioningState==0)){S=l=null;if((k.password==null)||(k.password=="")){u=null}F.activeToCCM(u)}else{if((k.type==2)&&(V.ProvisioningState==2)&&(u!=null)&&((V.Flags&2)!=0)){var W=require("amt-wsman-duk");var X=require("amt-wsman");var T=require("amt");S=new X(W,"127.0.0.1",16992,"admin",u,false);l=new T(S);var Y=["*AMT_GeneralSettings","*IPS_HostBasedSetupService","*AMT_RedirectionService","*CIM_KVMRedirectionSAP","AMT_PublicKeyCertificate","*AMT_EnvironmentDetectionSettingData"];if(k.cirasetup==2){Y.push("AMT_ManagementPresenceRemoteSAP","AMT_RemoteAccessCredentialContext","AMT_RemoteAccessPolicyAppliesToMPS","AMT_RemoteAccessPolicyRule","*AMT_UserInitiatedConnectionService","AMT_MPSUsernamePassword")}try{l.BatchEnum(null,Y,R)}catch(U){r(U)}}else{if((k.type==3)&&(V.ProvisioningState==0)&&(d.isControlChannelConnected)){F.getTrustedHashes(F.activeToACM,V)}else{}}}}})};function R(ab,V,X,ac){if(ac!=200){if(ac==401){if(k.badpass==1){F.deactivateCCM()}}else{if(++K<20){if(K==10){r("WSMAN fault, MEI Reset");F.reset()}var ad=["*AMT_GeneralSettings","*IPS_HostBasedSetupService","*AMT_RedirectionService","*CIM_KVMRedirectionSAP","AMT_PublicKeyCertificate","*AMT_EnvironmentDetectionSettingData"];if(k.cirasetup==2){ad.push("AMT_ManagementPresenceRemoteSAP","AMT_RemoteAccessCredentialContext","AMT_RemoteAccessPolicyAppliesToMPS","AMT_RemoteAccessPolicyRule","*AMT_UserInitiatedConnectionService","AMT_MPSUsernamePassword")}try{l.BatchEnum(null,ad,R)}catch(T){r(T)}}else{r("WSMAN fault, status="+ac);K=0}}}else{K=0;var Z={};Z.redir=(X.AMT_RedirectionService.response.ListenerEnabled==true);Z.sol=((X.AMT_RedirectionService.response.EnabledState&2)!=0);Z.ider=((X.AMT_RedirectionService.response.EnabledState&1)!=0);Z.kvm=(X.CIM_KVMRedirectionSAP!=null)&&((X.CIM_KVMRedirectionSAP.response.EnabledState==6&&X.CIM_KVMRedirectionSAP.response.RequestedState==2)||X.CIM_KVMRedirectionSAP.response.EnabledState==2||X.CIM_KVMRedirectionSAP.response.EnabledState==6);if((X.AMT_GeneralSettings.response.PingResponseEnabled!=true)||(X.AMT_GeneralSettings.response.RmcpPingResponseEnabled!=true)){X.AMT_GeneralSettings.response.PingResponseEnabled=true;X.AMT_GeneralSettings.response.RmcpPingResponseEnabled=true;l.Put("AMT_GeneralSettings",X.AMT_GeneralSettings.response,function(ai,ag,ah,aj){if(aj!=200){r("Enable PING PUT Error "+aj)}},0,1)}if((Z.redir==false)||(Z.sol==false)||(Z.ider==false)){var W=X.AMT_RedirectionService.response;W.ListenerEnabled=true;W.EnabledState=32768+1+2;l.AMT_RedirectionService_RequestStateChange(W.EnabledState,function(ai,ag,ah,aj){if(aj!=200){r("Enable Redirection EXEC Error "+aj)}})}if((X.CIM_KVMRedirectionSAP!=null)&&(Z.kvm==false)){l.CIM_KVMRedirectionSAP_RequestStateChange(2,0,function(ai,ag,ah,aj){if(aj!=200){messagebox("Error","KVMRedirectionSAP, RequestStateChange Error "+aj);return}l.Put("AMT_RedirectionService",W,function(am,ak,al,an){if(an!=200){r("Enable KVM PUT Error "+an)}},0,1)})}if(typeof k.rootcert=="string"){var Y=false,ae=X.AMT_PublicKeyCertificate.responses;for(var U in ae){if((ae[U]["X509Certificate"]==k.rootcert)&&(ae[U]["TrustedRootCertficate"]==true)){Y=true}}if(Y==false){l.AMT_PublicKeyManagementService_AddTrustedRootCertificate(k.rootcert,function(ai,ag,ah,aj){if(aj!=200){r("Add root cert EXEC Error "+aj)}})}}if((k.cirasetup==2)&&(k.ciraserver!=null)){var aa=false,af=X.AMT_ManagementPresenceRemoteSAP.responses;for(var U in af){if((af[U].AccessInfo==k.ciraserver.name)&&(af[U].Port==k.ciraserver.port)){aa=af[U].Name}}if(aa==false){l.AMT_RemoteAccessService_AddMpServer(k.ciraserver.name,201,k.ciraserver.port,2,null,k.ciraserver.user,k.ciraserver.pass,null,function(aj,ah,ai,ak){if(ak!=200){r("Add MPS server EXEC Error "+ak)}else{aa=false;var al=ai.Body.MpServer.ReferenceParameters.SelectorSet.Selector;for(var ag in al){if(al[ag]["@Name"]=="Name"){aa=al[ag]["Value"]}}if(aa!=false){n(X,aa)}}})}else{n(X,aa)}}else{if(k.cirasetup==1){o(X)}}}}function n(T,V){var U='<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://intel.com/wbem/wscim/1/amt-schema/1/AMT_ManagementPresenceRemoteSAP</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="Name">'+V+"</Selector></SelectorSet></ReferenceParameters>";l.AMT_RemoteAccessService_AddRemoteAccessPolicyRule(2,0,"AAAAAAAAAAo=",[U],null,function(Y,W,X,Z){if(Z!=200){r("Add AddRemoteAccessPolicyRule Error "+Z)}else{o(T)}})}function o(T){var V=[];if((k.ciraserver!=null)&&(k.ciraserver.home!=null)){V=k.ciraserver.home}var U=T.AMT_EnvironmentDetectionSettingData.response;U.DetectionStrings=C(U.DetectionStrings);if(p(U.DetectionStrings,V)==false){U.DetectionStrings=V;l.Put("AMT_EnvironmentDetectionSettingData",U,function(Y,W,X,Z){if(Z!=200){r("Put AMT_EnvironmentDetectionSettingData Error "+Z)}},0,1)}}function p(T,U){if(T==U){return true}if(T==null){T=[]}if(U==null){U=[]}if(T.length!=U.length){return false}for(var V in T){if(U.indexOf(T[V])==-1){return false}}return true}function C(T){if(!T||T==null||typeof T=="object"){return T}return[T]}}module.exports=AmtManager;
\ No newline at end of file
agents/modules_meshcore_min/amt-mei.min.js
new
+1
@@ -0,0 +1 @@
1
+var Q=require("queue");function amt_heci(){var d=require("events").inherits(this);d.createEvent("error");var u=require("heci");var y=function(F){try{require("MeshAgent").SendCommand({action:"msg",type:"console",value:F})}catch(E){}};this._ObjectID="pthi";this._rq=new Q();this._setupPTHI=function b(){this._amt=u.create();this._amt.BiosVersionLen=65;this._amt.UnicodeStringLen=20;this._amt.Parent=this;this._amt.on("error",function F(H){if(this.Parent._rq.isEmpty()){this.Parent.emit("error",H)}else{var J=this.Parent._rq.deQueue();var I=J.optional;var G=J.func;I.unshift({Status:-1});G.apply(this.Parent,I);if(!this.Parent._rq.isEmpty()){this.connect(u.GUIDS.AMT,{noPipeline:1})}}});this._amt.on("connect",function E(){this.on("data",function G(I){var J=this.Parent.getCommand(I);var L=this.Parent._rq.deQueue();var K=L.optional;var H=L.func;K.unshift(J);H.apply(this.Parent,K);if(this.Parent._rq.isEmpty()){this.Parent._amt.disconnect();this.Parent._amt=null}else{this.write(this.Parent._rq.peekQueue().send)}});this.write(this.Parent._rq.peekQueue().send)})};function B(E){var F=E.indexOf("\0");if(F>=0){return E.substring(0,F)}else{return E}}this.getCommand=function g(E){var F=E.length==0?(this._rq.peekQueue().cmd|8388608):E.readUInt32LE(4);var G={IsResponse:(F&8388608)==8388608?true:false,Command:(F&8388607),Status:E.length!=0?E.readUInt32LE(12):-1,Data:E.length!=0?E.slice(16):null};return(G)};this.sendCommand=function x(){if(arguments.length<3||typeof(arguments[0])!="number"||typeof(arguments[1])!="object"||typeof(arguments[2])!="function"){throw ("invalid parameters")}var E=[];for(var G=3;G<arguments.length;++G){E.push(arguments[G])}var F=Buffer.from("010100000000000000000000","hex");F.writeUInt32LE(arguments[0]|67108864,4);F.writeUInt32LE(arguments[1]==null?0:arguments[1].length,8);this._rq.enQueue({cmd:arguments[0],func:arguments[2],optional:E,send:(arguments[1]==null?F:Buffer.concat([F,arguments[1]]))});if(!this._amt){this._setupPTHI();this._amt.connect(u.GUIDS.AMT,{noPipeline:1})}};this.getVersion=function t(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(26,null,function(J,I,L){if(J.Status==0){var K,H=J.Data,N={BiosVersion:H.slice(0,this._amt.BiosVersionLen).toString(),Versions:[]},M=H.slice(this._amt.BiosVersionLen+4);for(K=0;K<H.readUInt32LE(this._amt.BiosVersionLen);++K){N.Versions[K]={Description:M.slice(2,M.readUInt16LE(0)+2).toString(),Version:M.slice(4+this._amt.UnicodeStringLen,4+this._amt.UnicodeStringLen+M.readUInt16LE(2+this._amt.UnicodeStringLen)).toString()};M=M.slice(4+(2*this._amt.UnicodeStringLen))}if(N.BiosVersion.indexOf("\0")>0){N.BiosVersion=N.BiosVersion.substring(0,N.BiosVersion.indexOf("\0"))}L.unshift(N)}else{L.unshift(null)}I.apply(this,L)},E,G)};function D(G,F){if((F==null)&&(typeof(F)!="number")){return null}if(G==null){G=""}var H="";for(var E=0;E<F-G.length;E++){H+="0"}return H+G}this.getUuid=function s(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(92,null,function(I,H,J){if(I.Status==0){var K={};K.uuid=[D(I.Data.readUInt32LE(0).toString(16),8),D(I.Data.readUInt16LE(4).toString(16),4),D(I.Data.readUInt16LE(6).toString(16),4),D(I.Data.readUInt16BE(8).toString(16),4),D(I.Data.slice(10).toString("hex").toLowerCase(),12)].join("-");J.unshift(K)}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getProvisioningState=function q(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(17,null,function(I,H,J){if(I.Status==0){var K={};K.state=I.Data.readUInt32LE(0);if(K.state<3){K.stateStr=["PRE","IN","POST"][K.state]}J.unshift(K)}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getProvisioningMode=function p(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(8,null,function(I,H,J){if(I.Status==0){var K={};K.mode=I.Data.readUInt32LE(0);if(K.mode<4){K.modeStr=["NONE","ENTERPRISE","SMALL_BUSINESS","REMOTE_ASSISTANCE"][K.mode]}K.legacy=I.Data.readUInt32LE(4)==0?false:true;J.unshift(K)}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getEHBCState=function j(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(132,null,function(I,H,J){if(I.Status==0){J.unshift({EHBC:I.Data.readUInt32LE(0)!=0})}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getControlMode=function h(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(107,null,function(I,H,J){if(I.Status==0){var K={};K.controlMode=I.Data.readUInt32LE(0);if(K.controlMode<3){K.controlModeStr=["NONE_RPAT","CLIENT","ADMIN","REMOTE_ASSISTANCE"][K.controlMode]}J.unshift(K)}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getMACAddresses=function n(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(37,null,function(I,H,J){if(I.Status==0){J.unshift({DedicatedMAC:I.Data.slice(0,6).toString("hex:"),HostMAC:I.Data.slice(6,12).toString("hex:")})}else{J.unshift({DedicatedMAC:null,HostMAC:null})}H.apply(this,J)},E,G)};this.getDnsSuffix=function i(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(54,null,function(I,H,J){if(I.Status==0){var K=I.Data.readUInt16LE(0);if(K>0){J.unshift(I.Data.slice(2,2+K).toString())}else{J.unshift(null)}}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getHashHandles=function k(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(44,null,function(I,H,K){var L=[];if(I.Status==0){var M=I.Data.readUInt32LE(0);for(var J=0;J<M;++J){L.push(I.Data.readUInt32LE(4+(4*J)))}}K.unshift(L);H.apply(this,K)},E,G)};this.getCertHashEntry=function f(G,E){var I=[];for(var H=2;H<arguments.length;++H){I.push(arguments[H])}var F=Buffer.alloc(4);F.writeUInt32LE(G,0);this.sendCommand(45,F,function(K,J,L){if(K.Status==0){var M={};M.isDefault=K.Data.readUInt32LE(0);M.isActive=K.Data.readUInt32LE(4);M.hashAlgorithm=K.Data.readUInt8(72);if(M.hashAlgorithm<4){M.hashAlgorithmStr=["MD5","SHA1","SHA256","SHA512"][M.hashAlgorithm];M.hashAlgorithmSize=[16,20,32,64][M.hashAlgorithm];M.certificateHash=K.Data.slice(8,8+M.hashAlgorithmSize).toString("hex")}M.name=K.Data.slice(73+2,73+2+K.Data.readUInt16LE(73)).toString();L.unshift(M)}else{L.unshift(null)}J.apply(this,L)},E,I)};this.getCertHashEntries=function e(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.getHashHandles(function(J,I,K){var H=[];this.getCertHashEntry(J.shift(),this._getHashEntrySink,I,K,H,J)},E,G)};this._getHashEntrySink=function a(I,F,H,E,G){E.push(I);if(G.length>0){this.getCertHashEntry(G.shift(),this._getHashEntrySink,F,H,E,G)}else{H.unshift(E);F.apply(this,H)}};this.getLocalSystemAccount=function m(E){var G=[];for(var F=1;F<arguments.length;++F){G.push(arguments[F])}this.sendCommand(103,Buffer.alloc(40),function(I,H,J){if(I.Status==0&&I.Data.length==68){J.unshift({user:B(I.Data.slice(0,33).toString()),pass:B(I.Data.slice(33,67).toString()),raw:I.Data})}else{J.unshift(null)}H.apply(this,J)},E,G)};this.getLanInterfaceSettings=function l(H,E){var J=[];for(var F=2;F<arguments.length;++F){J.push(arguments[F])}var G=Buffer.alloc(4);G.writeUInt32LE(H);this.sendCommand(72,G,function I(M,L,O){if(M.Status==0){var N={};N.enabled=M.Data.readUInt32LE(0);N.dhcpEnabled=M.Data.readUInt32LE(8);switch(M.Data[12]){case 1:N.dhcpMode="ACTIVE";break;case 2:N.dhcpMode="PASSIVE";break;default:N.dhcpMode="UNKNOWN";break}N.mac=M.Data.slice(14).toString("hex:");var K=M.Data.readUInt32LE(4);N.address=((K>>24)&255)+"."+((K>>16)&255)+"."+((K>>8)&255)+"."+(K&255);O.unshift(N);L.apply(this,O)}else{O.unshift(null);L.apply(this,O)}},E,J)};this.unprovision=function C(H,E){var I=[];for(var G=2;G<arguments.length;++G){I.push(arguments[G])}var F=Buffer.alloc(4);F.writeUInt32LE(H,0);this.sendCommand(16,F,function(K,J,L){L.unshift(K.Status);J.apply(this,L)},E,I)};this.startConfiguration=function z(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(41,data,function(H,G,I){I.unshift(H.Status);G.apply(this,I)},callback,F)};this.stopConfiguration=function A(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(94,data,function(H,G,I){I.unshift(H.Status);G.apply(this,I)},callback,F)};this.openUserInitiatedConnection=function w(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(68,data,function(H,G,I){I.unshift(H.Status);G.apply(this,I)},callback,F)};this.closeUserInitiatedConnection=function c(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(69,data,function(H,G,I){I.unshift(H.Status);G.apply(this,I)},callback,F)};this.getRemoteAccessConnectionStatus=function r(){var F=[];for(var E=2;E<arguments.length;++E){F.push(arguments[E])}this.sendCommand(70,data,function(H,G,J){if(H.Status==0){var I=v.slice(14,H.Data.readUInt16LE(12)+14).toString();J.unshift({status:H.Status,networkStatus:H.Data.readUInt32LE(0),remoteAccessStatus:H.Data.readUInt32LE(4),remoteAccessTrigger:H.Data.readUInt32LE(8),mpsHostname:I,raw:H.Data})}else{J.unshift({status:H.Status})}G.apply(this,J)},callback,F)};this.getProtocolVersion=function o(E){var G=[];for(var F=1;F<arguments.length;++F){opt.push(arguments[F])}u.doIoctl(u.IOCTL.HECI_VERSION,Buffer.alloc(5),Buffer.alloc(5),function(M,H,L,I,J){if(M==0){var K=H.readUInt8(0).toString()+"."+H.readUInt8(1).toString()+"."+H.readUInt8(2).toString()+"."+H.readUInt16BE(3).toString();J.unshift(K);I.apply(L,J)}else{J.unshift(null);I.apply(L,J)}},this,E,G)}}module.exports=amt_heci;
\ No newline at end of file
agents/modules_meshcore_min/amt-scanner.min.js
new
+1
@@ -0,0 +1 @@
1
+function AMTScanner(){var a=require("events").inherits(this);a.createEvent("found");this.dgram=require("dgram");this.buildRmcpPing=function(c){var b=Buffer.from("06000006000011BE80000000","hex");b[9]=c;return b};this.parseRmcpPacket=function(h,b,g,d){if(b==null||b.length<20){return}var f={};if(((b[12]==0)||(b[13]!=0)||(b[14]!=1)||(b[15]!=87))&&(b[21]&32)){f.servertag=b[9];f.minorVersion=b[18]&15;f.majorVersion=(b[18]>>4)&15;f.provisioningState=b[19]&3;var e=(b[16]*256)+b[17];var c=((b[19]&4)!=0)?true:false;f.openPorts=[e];f.address=g.address;if(c==true){f.openPorts=[16992,16993]}if(d!==undefined){d(h,f)}}};this.parseIPv4Range=function(f){if(f==undefined||f==null){return null}var g=f.split("-");if(g.length==2){return{min:this.parseIpv4Addr(g[0]),max:this.parseIpv4Addr(g[1])}}g=f.split("/");if(g.length==2){var c=this.parseIpv4Addr(g[0]),e=parseInt(g[1]),d=0;if(e<=16||e>32){return null}e=32-e;for(var b=0;b<e;b++){d=(d<<1);d++}return{min:c&(4294967295-d),max:(c&(4294967295-d))+d}}g=this.parseIpv4Addr(f);if(g==null){return null}return{min:g,max:g}};this.parseIpv4Addr=function(b){var c=b.split(".");if(c.length==4){return(parseInt(c[0])<<24)+(parseInt(c[1])<<16)+(parseInt(c[2])<<8)+(parseInt(c[3])<<0)}return null};this.IPv4NumToStr=function(b){return((b>>24)&255)+"."+((b>>16)&255)+"."+((b>>8)&255)+"."+(b&255)};this.scan=function(d,g){var c=this.parseIPv4Range(d);var e=this.buildRmcpPing(0);var f=this.dgram.createSocket({type:"udp4"});f.parent=this;f.scanResults=[];f.on("error",function(i){console.log("Error:"+i)});f.on("message",function(i,j){if(j.size>4){this.parent.parseRmcpPacket(this,i,j,function(l,k){l.scanResults.push(k)})}});f.on("listening",function(){for(var j=c.min;j<=c.max;j++){f.send(e,623,f.parent.IPv4NumToStr(j))}});f.bind({address:"0.0.0.0",port:0,exclusive:true});var h=setTimeout(function b(){f.close();f.parent.emit("found",f.scanResults);delete f},g)}}module.exports=AMTScanner;
\ No newline at end of file
agents/modules_meshcore_min/amt-wsman-duk.min.js
new
+1
@@ -0,0 +1 @@
1
+function CreateWsmanComm(){var a={};a.PendingAjax=[];a.ActiveAjaxCount=0;a.MaxActiveAjaxCount=1;a.FailAllError=0;a.digest=null;a.RequestCount=0;if(arguments.length==1&&typeof(arguments[0]=="object")){a.host=arguments[0].host;a.port=arguments[0].port;a.authToken=arguments[0].authToken;a.tls=arguments[0].tls}else{a.host=arguments[0];a.port=arguments[1];a.user=arguments[2];a.pass=arguments[3];a.tls=arguments[4]}a.PerformAjax=function(d,c,f,e,g,b){if((a.ActiveAjaxCount==0||((a.ActiveAjaxCount<a.MaxActiveAjaxCount)&&(a.challengeParams!=null)))&&a.PendingAjax.length==0){a.PerformAjaxEx(d,c,f,g,b)}else{if(e==1){a.PendingAjax.unshift([d,c,f,g,b])}else{a.PendingAjax.push([d,c,f,g,b])}}};a.PerformNextAjax=function(){if(a.ActiveAjaxCount>=a.MaxActiveAjaxCount||a.PendingAjax.length==0){return}var b=a.PendingAjax.shift();a.PerformAjaxEx(b[0],b[1],b[2],b[3],b[4]);a.PerformNextAjax()};a.PerformAjaxEx=function(d,c,g,h,b){if(a.FailAllError!=0){if(a.FailAllError!=999){a.gotNextMessagesError({status:a.FailAllError},"error",null,[d,c,g])}return}if(!d){d=""}if(a.digest==null){if(a.authToken){a.digest=require("http-digest").create({authToken:a.authToken})}else{a.digest=require("http-digest").create(a.user,a.pass)}a.digest.http=require("http")}var f={protocol:(a.tls==1?"https:":"http:"),method:"POST",host:a.host,path:"/wsman",port:a.port,rejectUnauthorized:false,checkServerIdentity:function(i){console.log("checkServerIdentity",JSON.stringify(i))}};var e=a.digest.request(f);e.on("error",function(i){a.gotNextMessagesError({status:600},"error",null,[d,c,g])});e.on("response",function(i){if(i.statusCode!=200){a.gotNextMessagesError({status:i.statusCode},"error",null,[d,c,g])}else{i.acc="";i.on("data",function(j){this.acc+=j});i.on("end",function(){a.gotNextMessages(i.acc,"success",{status:i.statusCode},[d,c,g])})}});e.end(d);a.ActiveAjaxCount++;return e};a.pendingAjaxCall=[];a.gotNextMessages=function(c,e,d,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(d.status!=200){b[1](null,d.status,b[2]);return}b[1](c,200,b[2]);a.PerformNextAjax()};a.gotNextMessagesError=function(d,e,c,b){a.ActiveAjaxCount--;if(a.FailAllError==999){return}if(a.FailAllError!=0){b[1](null,a.FailAllError,b[2]);return}if(a.FailAllError!=999){b[1]({Header:{HttpError:d.status}},d.status,b[2])}a.PerformNextAjax()};a.CancelAllQueries=function(b){while(a.PendingAjax.length>0){var c=a.PendingAjax.shift();c[1](null,b,c[2])}};return a}module.exports=CreateWsmanComm;
\ No newline at end of file
agents/modules_meshcore_min/amt-wsman.min.js
new
+1
@@ -0,0 +1 @@
1
+function WsmanStackCreateService(){var p={_ObjectID:"WSMAN"};p.NextMessageId=1;p.Address="/wsman";p.xmlParser=require("amt-xml");if(arguments.length==1&&typeof(arguments[0]=="object")){var e=arguments[0].transport;if(e){p.comm=new e(arguments[0])}}else{var e=arguments[0];if(e){p.comm=new e(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5],arguments[6])}}p.PerformAjax=function q(t,r,v,u,s){if(s==null){s=""}p.comm.PerformAjax('<?xml version="1.0" encoding="utf-8"?><Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns="http://www.w3.org/2003/05/soap-envelope" '+s+"><Header><a:Action>"+t,function(w,x,y){if(x!=200){r(p,null,{Header:{HttpError:x}},x,y);return}var z=p.xmlParser.ParseWsman(w);if(!z||z==null){r(p,null,{Header:{HttpError:x}},601,y)}else{r(p,z.Header.ResourceURI,z,200,y)}},v,u)};p.CancelAllQueries=function d(r){p.comm.CancelAllQueries(r)};p.GetNameFromUrl=function(r){var s=r.lastIndexOf("/");return(s==-1)?r:r.substring(s+1)};p.ExecSubscribe=function n(z,t,C,r,B,y,A,w,D,x){var u="",v="",w="";if(D!=null&&x!=null){u='<t:IssuedTokens xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:se="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><t:RequestSecurityTokenResponse><t:TokenType>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken</t:TokenType><t:RequestedSecurityToken><se:UsernameToken><se:Username>'+D+'</se:Username><se:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordText">'+x+"</se:Password></se:UsernameToken></t:RequestedSecurityToken></t:RequestSecurityTokenResponse></t:IssuedTokens>";v='<w:Auth Profile="http://schemas.dmtf.org/wbem/wsman/1/wsman/secprofile/http/digest"/>'}if(w!=null){w="<a:ReferenceParameters><m:arg>"+w+"</m:arg></a:ReferenceParameters>"}if(t=="PushWithAck"){t="dmtf.org/wbem/wsman/1/wsman/PushWithAck"}else{if(t=="Push"){t="xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push"}}var s="http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+z+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+c(A)+u+'</Header><Body><e:Subscribe><e:Delivery Mode="http://schemas.'+t+'"><e:NotifyTo><a:Address>'+C+"</a:Address>"+w+"</e:NotifyTo>"+v+"</e:Delivery></e:Subscribe>";p.PerformAjax(s+"</Body></Envelope>",r,B,y,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:m="http://x.com"')};p.ExecUnSubscribe=function o(u,r,w,t,v){var s="http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+u+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+c(v)+"</Header><Body><e:Unsubscribe/>";p.PerformAjax(s+"</Body></Envelope>",r,w,t,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing"')};p.ExecPut=function m(v,u,r,x,t,w){var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+v+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout>"+c(w)+"</Header><Body>"+b(v,u);p.PerformAjax(s+"</Body></Envelope>",r,x,t)};p.ExecCreate=function f(x,w,r,z,v,y){var u=p.GetNameFromUrl(x);var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+x+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+c(y)+"</Header><Body><g:"+u+' xmlns:g="'+x+'">';for(var t in w){s+="<g:"+t+">"+w[t]+"</g:"+t+">"}p.PerformAjax(s+"</g:"+u+"></Body></Envelope>",r,z,v)};p.ExecDelete=function g(v,u,r,w,t){var s="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+v+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+c(u)+"</Header><Body /></Envelope>";p.PerformAjax(s,r,w,t)};p.ExecGet=function i(t,r,u,s){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+t+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body /></Envelope>",r,u,s)};p.ExecMethod=function j(y,v,r,t,A,w,z){var s="";for(var u in r){if(r[u]!=null){if(Array.isArray(r[u])){for(var B in r[u]){s+="<r:"+u+">"+r[u][B]+"</r:"+u+">"}}else{s+="<r:"+u+">"+r[u]+"</r:"+u+">"}}}p.ExecMethodXml(y,v,s,t,A,w,z)};p.ExecMethodXml=function k(v,t,r,s,x,u,w){p.PerformAjax(v+"/"+t+"</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+v+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+c(w)+"</Header><Body><r:"+t+'_INPUT xmlns:r="'+v+'">'+r+"</r:"+t+"_INPUT></Body></Envelope>",s,x,u)};p.ExecEnum=function h(t,r,u,s){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+t+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Enumerate xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration" /></Body></Envelope>',r,u,s)};p.ExecPull=function l(u,s,r,v,t){p.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull</a:Action><a:To>"+p.Address+"</a:To><w:ResourceURI>"+u+"</w:ResourceURI><a:MessageID>"+(p.NextMessageId++)+'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Pull xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration"><EnumerationContext>'+s+"</EnumerationContext><MaxElements>999</MaxElements><MaxCharacters>99999</MaxCharacters></Pull></Body></Envelope>",r,v,t)};function b(w,u){if(!w||u==null){return""}var s=p.GetNameFromUrl(w);var v="<r:"+s+' xmlns:r="'+w+'">';for(var t in u){if(!u.hasOwnProperty(t)||t.indexOf("__")===0||t.indexOf("@")===0){continue}if(u[t]==null||typeof u[t]==="function"){continue}if(typeof u[t]==="object"&&u[t]["ReferenceParameters"]){v+="<r:"+t+"><a:Address>"+u[t].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+u[t]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var x=u[t]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(x)){for(var r=0;r<x.length;r++){v+="<w:Selector"+a(x[r])+">"+x[r]["Value"]+"</w:Selector>"}}else{v+="<w:Selector"+a(x)+">"+x.Value+"</w:Selector>"}v+="</w:SelectorSet></a:ReferenceParameters></r:"+t+">"}else{if(Array.isArray(u[t])){for(var r=0;r<u[t].length;r++){v+="<r:"+t+">"+u[t][r].toString()+"</r:"+t+">"}}else{v+="<r:"+t+">"+u[t].toString()+"</r:"+t+">"}}}v+="</r:"+s+">";return v}function a(r){if(!r){return""}var t=" ";for(var s in r){if(!r.hasOwnProperty(s)||s.indexOf("@")!==0){continue}t+=s.substring(1)+'="'+r[s]+'" '}return t}function c(v){if((v==null)||(v=="null")){return""}if(typeof v=="string"){return v}if(v.InstanceID){return'<w:SelectorSet><w:Selector Name="InstanceID">'+v.InstanceID+"</w:Selector></w:SelectorSet>"}var t="<w:SelectorSet>";for(var s in v){if(!v.hasOwnProperty(s)){continue}t+='<w:Selector Name="'+s+'">';if(v[s]["ReferenceParameters"]){t+="<a:EndpointReference>";t+="<a:Address>"+v[s]["Address"]+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+v[s]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var u=v[s]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(u)){for(var r=0;r<u.length;r++){t+="<w:Selector"+a(u[r])+">"+u[r]["Value"]+"</w:Selector>"}}else{t+="<w:Selector"+a(u)+">"+u.Value+"</w:Selector>"}t+="</w:SelectorSet></a:ReferenceParameters></a:EndpointReference>"}else{t+=v[s]}t+="</w:Selector>"}t+="</w:SelectorSet>";return t}return p}module.exports=WsmanStackCreateService;
\ No newline at end of file
agents/modules_meshcore_min/amt-xml.min.js
new
+1
@@ -0,0 +1 @@
1
+try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}module.exports.ParseWsman=function(j){try{if(!j.childNodes){j=_turnToXml(j)}var g={Header:{}},d=j.getElementsByTagName("Header")[0],h;if(!d){d=j.getElementsByTagName("a:Header")[0]}if(!d){return null}for(var f=0;f<d.childNodes.length;f++){var b=d.childNodes[f];g.Header[b.localName]=b.textContent}var a=j.getElementsByTagName("Body")[0];if(!a){a=j.getElementsByTagName("a:Body")[0]}if(!a){return null}if(a.childNodes.length>0){h=a.childNodes[0].localName;if(h.indexOf("_OUTPUT")==h.length-7){h=h.substring(0,h.length-7)}g.Header.Method=h;g.Body=_ParseWsmanRec(a.childNodes[0])}return g}catch(c){console.error("Unable to parse XML: "+j,c);return null}};function _ParseWsmanRec(g){var c,h={};for(var d=0;d<g.childNodes.length;d++){var a=g.childNodes[d];if((a.childElementCount==null)||(a.childElementCount==0)){c=a.textContent}else{c=_ParseWsmanRec(a)}if(c=="true"){c=true}if(c=="false"){c=false}if((parseInt(c)+"")===c){c=parseInt(c)}var b=c;if((a.attributes!=null)&&(a.attributes.length>0)){b={Value:c};for(var f=0;f<a.attributes.length;f++){b["@"+a.attributes[f].name]=a.attributes[f].value}}if(h[a.localName] instanceof Array){h[a.localName].push(b)}else{if(h[a.localName]==null){h[a.localName]=b}else{h[a.localName]=[h[a.localName],b]}}}return h}function _PutObjToBodyXml(g,d){if(!g||d==null){return""}var b=obj.GetNameFromUrl(g);var f="<r:"+b+' xmlns:r="'+g+'">';for(var c in d){if(!d.hasOwnProperty(c)||c.indexOf("__")===0||c.indexOf("@")===0){continue}if(d[c]==null||typeof d[c]==="function"){continue}if(typeof d[c]==="object"&&d[c]["ReferenceParameters"]){f+="<r:"+c+"><a:Address>"+d[c].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+d[c]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var h=d[c]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(h)){for(var a=0;a<h.length;a++){f+="<w:Selector"+_ObjectToXmlAttributes(h[a])+">"+h[a]["Value"]+"</w:Selector>"}}else{f+="<w:Selector"+_ObjectToXmlAttributes(h)+">"+h.Value+"</w:Selector>"}f+="</w:SelectorSet></a:ReferenceParameters></r:"+c+">"}else{if(Array.isArray(d[c])){for(var a=0;a<d[c].length;a++){f+="<r:"+c+">"+d[c][a].toString()+"</r:"+c+">"}}else{f+="<r:"+c+">"+d[c].toString()+"</r:"+c+">"}}}f+="</r:"+b+">";return f}function _treeBuilder(){this.tree=[];this.push=function(a){this.tree.push(a)};this.pop=function(){var a=this.tree.pop();if(this.tree.length>0){var b=this.tree.peek();b.childNodes.push(a);b.childElementCount=b.childNodes.length}return(a)};this.peek=function(){return(this.tree.peek())};this.addNamespace=function(g,d){this.tree.peek().nsTable[g]=d;if(this.tree.peek().attributes.length>0){for(var c=0;c<this.tree.peek().attributes;++c){var b=this.tree.peek().attributes[c];if(g=="*"&&b.name==b.localName){b.namespace=d}else{if(g!="*"&&b.name!=b.localName){var f=b.name.split(":")[0];if(f==g){b.namespace=d}}}}}};this.getNamespace=function(b){for(var a=this.tree.length-1;a>=0;--a){if(this.tree[a].nsTable[b]!=null){return(this.tree[a].nsTable[b])}}return null}}function _turnToXml(a){if(a==null){return null}return({childNodes:[_turnToXmlRec(a)],getElementsByTagName:_getElementsByTagName,getChildElementsByTagName:_getChildElementsByTagName,getElementsByTagNameNS:_getElementsByTagNameNS})}function _getElementsByTagNameNS(b,a){var c=[];_xmlTraverseAllRec(this.childNodes,function(d){if(d.localName==a&&(d.namespace==b||b=="*")){c.push(d)}});return c}function _getElementsByTagName(a){var b=[];_xmlTraverseAllRec(this.childNodes,function(c){if(c.localName==a){b.push(c)}});return b}function _getChildElementsByTagName(a){var c=[];if(this.childNodes!=null){for(var b in this.childNodes){if(this.childNodes[b].localName==a){c.push(this.childNodes[b])}}}return(c)}function _getChildElementsByTagNameNS(c,a){var d=[];if(this.childNodes!=null){for(var b in this.childNodes){if(this.childNodes[b].localName==a&&(c=="*"||this.childNodes[b].namespace==c)){d.push(this.childNodes[b])}}}return(d)}function _xmlTraverseAllRec(c,a){for(var b in c){a(c[b]);if(c[b].childNodes){_xmlTraverseAllRec(c[b].childNodes,a)}}}function _turnToXmlRec(w){try{if(w==null){return null}var m=new _treeBuilder(),r=null,z=w.split("<"),u=[],h=null,g=null;for(var o in z){var A=z[o].split(">"),B=A[0].split(" "),l=B[0];if((l.length>0)&&(l[0]!="?")){if(l[0]!="/"){var a=[],s,t=l.split(" ")[0].split(":"),s=(t.length>1)?t[1]:t[0];Object.defineProperty(a,"get",{value:function(){if(arguments.length==1){for(var i in this){if(this[i].name==arguments[0]){return(this[i])}}}else{if(arguments.length==2){for(var i in this){if(this[i].name==arguments[1]&&(arguments[0]=="*"||this[i].namespace==arguments[0])){return(this[i])}}}else{throw ("attributes.get(): Invalid number of parameters")}}}});m.push({name:l,localName:s,getChildElementsByTagName:_getChildElementsByTagName,getElementsByTagNameNS:_getElementsByTagNameNS,getChildElementsByTagNameNS:_getChildElementsByTagNameNS,attributes:a,childNodes:[],nsTable:{}});if(B.length>0){var v=false;for(var p in B){if(B[p]=="/"){m.peek().namespace=m.peek().name==m.peek().localName?m.getNamespace("*"):m.getNamespace(m.peek().name.substring(0,m.peek().name.indexOf(":")));m.peek().textContent="";r=m.pop();v=true;break}var q=B[p].indexOf("=");if(q>0){var b=B[p].substring(0,q);var d=B[p].substring(q+2,B[p].length-1);var c=m.getNamespace("*");if(b=="xmlns"){m.addNamespace("*",d);c=d}else{if(b.startsWith("xmlns:")){m.addNamespace(b.substring(6),d)}else{var f=b.split(":");if(f.length==2){b=f[1];c=m.getNamespace(f[0])}}}var y={name:b,value:d};if(c!=null){y.namespace=c}m.peek().attributes.push(y)}}if(v){continue}}m.peek().namespace=m.peek().name==m.peek().localName?m.getNamespace("*"):m.getNamespace(m.peek().name.substring(0,m.peek().name.indexOf(":")));if(A[1]){m.peek().textContent=A[1]}}else{r=m.pop()}}}}catch(n){return null}return r};
\ No newline at end of file
agents/modules_meshcore_min/amt.min.js
new
+1
@@ -0,0 +1 @@
1
+function AmtStackCreateService(R){var J=new Object();J._ObjectID="AMT";J.wsman=R;J.pfx=["http://intel.com/wbem/wscim/1/amt-schema/1/","http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/","http://intel.com/wbem/wscim/1/ips-schema/1/"];J.PendingEnums=[];J.PendingBatchOperations=0;J.ActiveEnumsCount=0;J.MaxActiveEnumsCount=1;J.onProcessChanged=null;var n=0;var m=0;J.GetPendingActions=function(){return(J.PendingEnums.length*2)+(J.ActiveEnumsCount)+J.wsman.comm.PendingAjax.length+J.wsman.comm.ActiveAjaxCount+J.PendingBatchOperations};function r(){var S=J.GetPendingActions();if(n<S){n=S}if(J.onProcessChanged!=null&&m!=S){m=S;J.onProcessChanged(S,n)}if(S==0){n=0}}J.Subscribe=function P(U,T,aa,S,Z,X,Y,V,ab,W){J.wsman.ExecSubscribe(J.CompleteName(U),T,aa,function(ae,ad,ac,af){r();S.call(J,J,U,ac,af,Z)},0,X,Y,V,ab,W);r()};J.UnSubscribe=function Q(T,S,W,U,V){J.wsman.ExecUnSubscribe(J.CompleteName(T),function(Z,Y,X,aa){r();S.call(J,J,T,X,aa,W)},0,U,V);r()};J.Get=function E(T,S,V,U){J.wsman.ExecGet(J.CompleteName(T),function(Y,X,W,Z){r();S.call(J,J,T,W,Z,V)},0,U);r()};J.Put=function K(T,V,S,X,U,W){J.wsman.ExecPut(J.CompleteName(T),V,function(aa,Z,Y,ab){r();S.call(J,J,T,Y,ab,X)},0,U,W);r()};J.Create=function y(T,V,S,W,U){J.wsman.ExecCreate(J.CompleteName(T),V,function(Z,Y,X,aa){r();S.call(J,J,T,X,aa,W)},0,U);r()};J.Delete=function z(T,V,S,W,U){J.wsman.ExecDelete(J.CompleteName(T),V,function(Z,Y,X,aa){r();S.call(J,J,T,X,aa,W)},0,U);r()};J.Exec=function B(V,U,S,T,Y,W,X){J.wsman.ExecMethod(J.CompleteName(V),U,S,function(ab,aa,Z,ac){r();T.call(J,J,V,J.CompleteExecResponse(Z),ac,Y)},0,W,X);r()};J.ExecWithXml=function D(V,U,S,T,Y,W,X){J.wsman.ExecMethodXml(J.CompleteName(V),U,C(S),function(ab,aa,Z,ac){r();T.call(J,J,V,J.CompleteExecResponse(Z),ac,Y)},0,W,X);r()};J.Enum=function A(T,S,V,U){if(J.ActiveEnumsCount<J.MaxActiveEnumsCount){J.ActiveEnumsCount++;J.wsman.ExecEnum(J.CompleteName(T),function(Z,X,W,aa,Y){r();e(T,W,S,X,aa,Y)},V,U)}else{J.PendingEnums.push([T,S,V,U])}r()};function e(U,W,S,X,Y,Z,V){if(Y!=200){S.call(J,J,U,null,Y,Z);d(1);return}if(W==null||W.Header.Method!="EnumerateResponse"||!W.Body.EnumerationContext){S.call(J,J,U,null,603,Z);d(1);return}var T=W.Body.EnumerationContext;J.wsman.ExecPull(X,T,function(ac,ab,aa,ad){c(U,aa,S,ab,[],ad,Z,V)})}function c(X,Z,S,aa,V,ab,ac,Y){if(ab!=200){S.call(J,J,X,null,ab,ac);d(1);return}if(Z==null||Z.Header.Method!="PullResponse"){S.call(J,J,X,null,604,ac);d(1);return}for(var U in Z.Body.Items){if(Z.Body.Items[U] instanceof Array){for(var W in Z.Body.Items[U]){V.push(Z.Body.Items[U][W])}}else{V.push(Z.Body.Items[U])}}if(Z.Body.EnumerationContext){var T=Z.Body.EnumerationContext;J.wsman.ExecPull(aa,T,function(af,ae,ad,ag){c(X,ad,S,ae,V,ag,ac,1)})}else{d(1);S.call(J,J,X,V,ab,ac);r()}}function d(S){J.ActiveEnumsCount-=S;if(J.ActiveEnumsCount>=J.MaxActiveEnumsCount||J.PendingEnums.length==0){return}var T=J.PendingEnums.shift();J.Enum(T[0],T[1],T[2]);d(0)}J.BatchEnum=function(S,V,T,X,U,W){J.PendingBatchOperations+=(V.length*2);b(S,x(V),T,X,{},U,W);r()};function x(S){return JSON.parse(JSON.stringify(S))}function b(S,X,T,aa,Z,U,Y){J.PendingBatchOperations-=2;var W=X.shift(),V=J.Enum;if(W[0]=="*"){V=J.Get;W=W.substring(1)}V(W,function(ad,ab,ac,ae,af){af[2][ab]={response:(ac==null?null:ac.Body),responses:ac,status:ae};if(af[1].length==0||ae==401||(U!=true&&ae!=200&&ae!=400)){J.PendingBatchOperations-=(X.length*2);r();T.call(J,J,S,af[2],ae,aa)}else{r();b(S,X,T,aa,af[2],Y)}},[S,X,Z],Y);r()}J.BatchGet=function(S,U,T,W,V){h({name:S,names:U,callback:T,current:0,responses:{},tag:W,pri:V});r()};function h(S){if(S.names.length<=S.current){S.callback.call(J,J,S.name,S.responses,200,S.tag)}else{J.wsman.ExecGet(J.CompleteName(S.names[S.current]),function(V,U,T,W){g(S,T,W)},S.pri);S.current++}r()}function g(S,T,U){if(T==null||U!=200){S.callback.call(J,J,S.name,null,U,S.tag)}else{S.responses[T.Header.Method]=T;h(S)}}J.CompleteName=function(S){if(S.indexOf("AMT_")==0){return J.pfx[0]+S}if(S.indexOf("CIM_")==0){return J.pfx[1]+S}if(S.indexOf("IPS_")==0){return J.pfx[2]+S}};J.CompleteExecResponse=function(S){if(S&&S!=null&&S.Body&&(S.Body.ReturnValue!=undefined)){S.Body.ReturnValueStr=J.AmtStatusToStr(S.Body.ReturnValue)}return S};J.RequestPowerStateChange=function(T,S){J.CIM_PowerManagementService_RequestPowerStateChange(T,'<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ComputerSystem</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="CreationClassName">CIM_ComputerSystem</Selector><Selector Name="Name">ManagedSystem</Selector></SelectorSet></ReferenceParameters>',null,null,S)};J.SetBootConfigRole=function(T,S){J.CIM_BootService_SetBootConfigRole('<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootConfigSetting</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="InstanceID">Intel(r) AMT: Boot Configuration 0</Selector></SelectorSet></ReferenceParameters>',T,S)};J.CancelAllQueries=function(S){J.wsman.CancelAllQueries(S)};J.AMT_AgentPresenceWatchdog_RegisterAgent=function(S,V,T,U){J.Exec("AMT_AgentPresenceWatchdog","RegisterAgent",{},S,V,T,U)};J.AMT_AgentPresenceWatchdog_AssertPresence=function(V,S,W,T,U){J.Exec("AMT_AgentPresenceWatchdog","AssertPresence",{SequenceNumber:V},S,W,T,U)};J.AMT_AgentPresenceWatchdog_AssertShutdown=function(V,S,W,T,U){J.Exec("AMT_AgentPresenceWatchdog","AssertShutdown",{SequenceNumber:V},S,W,T,U)};J.AMT_AgentPresenceWatchdog_AddAction=function(X,W,V,T,S,U,aa,Y,Z){J.Exec("AMT_AgentPresenceWatchdog","AddAction",{OldState:X,NewState:W,EventOnTransition:V,ActionSd:T,ActionEac:S},U,aa,Y,Z)};J.AMT_AgentPresenceWatchdog_DeleteAllActions=function(S,V,T,U){J.Exec("AMT_AgentPresenceWatchdog","DeleteAllActions",{},S,V,T,U)};J.AMT_AgentPresenceWatchdogAction_GetActionEac=function(S){J.Exec("AMT_AgentPresenceWatchdogAction","GetActionEac",{},S)};J.AMT_AgentPresenceWatchdogVA_RegisterAgent=function(S){J.Exec("AMT_AgentPresenceWatchdogVA","RegisterAgent",{},S)};J.AMT_AgentPresenceWatchdogVA_AssertPresence=function(T,S){J.Exec("AMT_AgentPresenceWatchdogVA","AssertPresence",{SequenceNumber:T},S)};J.AMT_AgentPresenceWatchdogVA_AssertShutdown=function(T,S){J.Exec("AMT_AgentPresenceWatchdogVA","AssertShutdown",{SequenceNumber:T},S)};J.AMT_AgentPresenceWatchdogVA_AddAction=function(X,W,V,T,S,U){J.Exec("AMT_AgentPresenceWatchdogVA","AddAction",{OldState:X,NewState:W,EventOnTransition:V,ActionSd:T,ActionEac:S},U)};J.AMT_AgentPresenceWatchdogVA_DeleteAllActions=function(S,T){J.Exec("AMT_AgentPresenceWatchdogVA","DeleteAllActions",{_method_dummy:S},T)};J.AMT_AlarmClockService_AddAlarm=function s(S,T){var V=S.InstanceID;var X=S.ElementName;var Y=S.StartTime.Datetime;var W=S.Interval?S.Interval.Datetime:undefined;var U=S.DeleteOnCompletion;var Z='<d:AlarmTemplate xmlns:d="http://intel.com/wbem/wscim/1/amt-schema/1/AMT_AlarmClockService" xmlns:s="http://intel.com/wbem/wscim/1/ips-schema/1/IPS_AlarmClockOccurrence"><s:InstanceID>'+V+"</s:InstanceID><s:ElementName>"+X+'</s:ElementName><s:StartTime><p:Datetime xmlns:p="http://schemas.dmtf.org/wbem/wscim/1/common">'+Y+"</p:Datetime></s:StartTime>"+((W!=undefined)?('<s:Interval><p:Interval xmlns:p="http://schemas.dmtf.org/wbem/wscim/1/common">'+W+"</p:Interval></s:Interval>"):"")+"<s:DeleteOnCompletion>"+U+"</s:DeleteOnCompletion></d:AlarmTemplate>";J.wsman.ExecMethodXml(J.CompleteName("AMT_AlarmClockService"),"AddAlarm",Z,T)};J.AMT_AuditLog_ClearLog=function(S){J.Exec("AMT_AuditLog","ClearLog",{},S)};J.AMT_AuditLog_RequestStateChange=function(T,U,S){J.Exec("AMT_AuditLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_AuditLog_ReadRecords=function(T,S,U){J.Exec("AMT_AuditLog","ReadRecords",{StartIndex:T},S,U)};J.AMT_AuditLog_SetAuditLock=function(V,T,U,S){J.Exec("AMT_AuditLog","SetAuditLock",{LockTimeoutInSeconds:V,Flag:T,Handle:U},S)};J.AMT_AuditLog_ExportAuditLogSignature=function(T,S){J.Exec("AMT_AuditLog","ExportAuditLogSignature",{SigningMechanism:T},S)};J.AMT_AuditLog_SetSigningKeyMaterial=function(W,V,U,T,S){J.Exec("AMT_AuditLog","SetSigningKeyMaterial",{SigningMechanismType:W,SigningKey:V,LengthOfCertificates:U,Certificates:T},S)};J.AMT_AuditPolicyRule_SetAuditPolicy=function(U,S,V,W,T){J.Exec("AMT_AuditPolicyRule","SetAuditPolicy",{Enable:U,AuditedAppID:S,EventID:V,PolicyType:W},T)};J.AMT_AuditPolicyRule_SetAuditPolicyBulk=function(U,S,V,W,T){J.Exec("AMT_AuditPolicyRule","SetAuditPolicyBulk",{Enable:U,AuditedAppID:S,EventID:V,PolicyType:W},T)};J.AMT_AuthorizationService_AddUserAclEntryEx=function(V,U,W,S,X,T){J.Exec("AMT_AuthorizationService","AddUserAclEntryEx",{DigestUsername:V,DigestPassword:U,KerberosUserSid:W,AccessPermission:S,Realms:X},T)};J.AMT_AuthorizationService_EnumerateUserAclEntries=function(T,S){J.Exec("AMT_AuthorizationService","EnumerateUserAclEntries",{StartIndex:T},S)};J.AMT_AuthorizationService_GetUserAclEntryEx=function(T,S,U){J.Exec("AMT_AuthorizationService","GetUserAclEntryEx",{Handle:T},S,U)};J.AMT_AuthorizationService_UpdateUserAclEntryEx=function(W,V,U,X,S,Y,T){J.Exec("AMT_AuthorizationService","UpdateUserAclEntryEx",{Handle:W,DigestUsername:V,DigestPassword:U,KerberosUserSid:X,AccessPermission:S,Realms:Y},T)};J.AMT_AuthorizationService_RemoveUserAclEntry=function(T,S){J.Exec("AMT_AuthorizationService","RemoveUserAclEntry",{Handle:T},S)};J.AMT_AuthorizationService_SetAdminAclEntryEx=function(U,T,S){J.Exec("AMT_AuthorizationService","SetAdminAclEntryEx",{Username:U,DigestPassword:T},S)};J.AMT_AuthorizationService_GetAdminAclEntry=function(S){J.Exec("AMT_AuthorizationService","GetAdminAclEntry",{},S)};J.AMT_AuthorizationService_GetAdminAclEntryStatus=function(S){J.Exec("AMT_AuthorizationService","GetAdminAclEntryStatus",{},S)};J.AMT_AuthorizationService_GetAdminNetAclEntryStatus=function(S){J.Exec("AMT_AuthorizationService","GetAdminNetAclEntryStatus",{},S)};J.AMT_AuthorizationService_SetAclEnabledState=function(U,T,S,V){J.Exec("AMT_AuthorizationService","SetAclEnabledState",{Handle:U,Enabled:T},S,V)};J.AMT_AuthorizationService_GetAclEnabledState=function(T,S,U){J.Exec("AMT_AuthorizationService","GetAclEnabledState",{Handle:T},S,U)};J.AMT_EndpointAccessControlService_RequestStateChange=function(T,U,S){J.Exec("AMT_EndpointAccessControlService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_EndpointAccessControlService_GetPosture=function(T,S){J.Exec("AMT_EndpointAccessControlService","GetPosture",{PostureType:T},S)};J.AMT_EndpointAccessControlService_GetPostureHash=function(T,S){J.Exec("AMT_EndpointAccessControlService","GetPostureHash",{PostureType:T},S)};J.AMT_EndpointAccessControlService_UpdatePostureState=function(T,S){J.Exec("AMT_EndpointAccessControlService","UpdatePostureState",{UpdateType:T},S)};J.AMT_EndpointAccessControlService_GetEacOptions=function(S){J.Exec("AMT_EndpointAccessControlService","GetEacOptions",{},S)};J.AMT_EndpointAccessControlService_SetEacOptions=function(T,U,S){J.Exec("AMT_EndpointAccessControlService","SetEacOptions",{EacVendors:T,PostureHashAlgorithm:U},S)};J.AMT_EnvironmentDetectionSettingData_SetSystemDefensePolicy=function(T,S){J.Exec("AMT_EnvironmentDetectionSettingData","SetSystemDefensePolicy",{Policy:T},S)};J.AMT_EnvironmentDetectionSettingData_EnableVpnRouting=function(T,S){J.Exec("AMT_EnvironmentDetectionSettingData","EnableVpnRouting",{Enable:T},S)};J.AMT_EthernetPortSettings_SetLinkPreference=function(T,U,S){J.Exec("AMT_EthernetPortSettings","SetLinkPreference",{LinkPreference:T,Timeout:U},S)};J.AMT_HeuristicPacketFilterStatistics_ResetSelectedStats=function(T,S){J.Exec("AMT_HeuristicPacketFilterStatistics","ResetSelectedStats",{SelectedStatistics:T},S)};J.AMT_KerberosSettingData_GetCredentialCacheState=function(S){J.Exec("AMT_KerberosSettingData","GetCredentialCacheState",{},S)};J.AMT_KerberosSettingData_SetCredentialCacheState=function(T,S){J.Exec("AMT_KerberosSettingData","SetCredentialCacheState",{Enable:T},S)};J.AMT_MessageLog_CancelIteration=function(T,S){J.Exec("AMT_MessageLog","CancelIteration",{IterationIdentifier:T},S)};J.AMT_MessageLog_RequestStateChange=function(T,U,S){J.Exec("AMT_MessageLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_MessageLog_ClearLog=function(S){J.Exec("AMT_MessageLog","ClearLog",{},S)};J.AMT_MessageLog_GetRecords=function(T,U,S,V){J.Exec("AMT_MessageLog","GetRecords",{IterationIdentifier:T,MaxReadRecords:U},S,V)};J.AMT_MessageLog_GetRecord=function(T,U,S){J.Exec("AMT_MessageLog","GetRecord",{IterationIdentifier:T,PositionToNext:U},S)};J.AMT_MessageLog_PositionAtRecord=function(T,U,V,S){J.Exec("AMT_MessageLog","PositionAtRecord",{IterationIdentifier:T,MoveAbsolute:U,RecordNumber:V},S)};J.AMT_MessageLog_PositionToFirstRecord=function(S,T){J.Exec("AMT_MessageLog","PositionToFirstRecord",{},S,T)};J.AMT_MessageLog_FreezeLog=function(T,S){J.Exec("AMT_MessageLog","FreezeLog",{Freeze:T},S)};J.AMT_PublicKeyManagementService_AddCRL=function(U,T,S){J.Exec("AMT_PublicKeyManagementService","AddCRL",{Url:U,SerialNumbers:T},S)};J.AMT_PublicKeyManagementService_ResetCRLList=function(S,T){J.Exec("AMT_PublicKeyManagementService","ResetCRLList",{_method_dummy:S},T)};J.AMT_PublicKeyManagementService_AddCertificate=function(T,S,U){J.Exec("AMT_PublicKeyManagementService","AddCertificate",{CertificateBlob:T},S,U)};J.AMT_PublicKeyManagementService_AddTrustedRootCertificate=function(T,S){J.Exec("AMT_PublicKeyManagementService","AddTrustedRootCertificate",{CertificateBlob:T},S)};J.AMT_PublicKeyManagementService_AddKey=function(T,S){J.Exec("AMT_PublicKeyManagementService","AddKey",{KeyBlob:T},S)};J.AMT_PublicKeyManagementService_GeneratePKCS10Request=function(U,T,V,S){J.Exec("AMT_PublicKeyManagementService","GeneratePKCS10Request",{KeyPair:U,DNName:T,Usage:V},S)};J.AMT_PublicKeyManagementService_GeneratePKCS10RequestEx=function(T,V,U,S){J.Exec("AMT_PublicKeyManagementService","GeneratePKCS10RequestEx",{KeyPair:T,SigningAlgorithm:V,NullSignedCertificateRequest:U},S)};J.AMT_PublicKeyManagementService_GenerateKeyPair=function(T,U,S){J.Exec("AMT_PublicKeyManagementService","GenerateKeyPair",{KeyAlgorithm:T,KeyLength:U},S)};J.AMT_RedirectionService_RequestStateChange=function(T,S){J.Exec("AMT_RedirectionService","RequestStateChange",{RequestedState:T},S)};J.AMT_RedirectionService_TerminateSession=function(T,S){J.Exec("AMT_RedirectionService","TerminateSession",{SessionType:T},S)};J.AMT_RemoteAccessService_AddMpServer=function(S,X,Z,T,V,aa,Y,W,U){J.Exec("AMT_RemoteAccessService","AddMpServer",{AccessInfo:S,InfoFormat:X,Port:Z,AuthMethod:T,Certificate:V,Username:aa,Password:Y,CN:W},U)};J.AMT_RemoteAccessService_AddRemoteAccessPolicyRule=function(V,W,T,U,S){J.Exec("AMT_RemoteAccessService","AddRemoteAccessPolicyRule",{Trigger:V,TunnelLifeTime:W,ExtendedData:T,MpServer:U},S)};J.AMT_RemoteAccessService_CloseRemoteAccessConnection=function(S,T){J.Exec("AMT_RemoteAccessService","CloseRemoteAccessConnection",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_CommitChanges=function(S,T,U){J.Exec("AMT_SetupAndConfigurationService","CommitChanges",{_method_dummy:S},T,U)};J.AMT_SetupAndConfigurationService_Unprovision=function(T,S){J.Exec("AMT_SetupAndConfigurationService","Unprovision",{ProvisioningMode:T},S)};J.AMT_SetupAndConfigurationService_PartialUnprovision=function(S,T){J.Exec("AMT_SetupAndConfigurationService","PartialUnprovision",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_ResetFlashWearOutProtection=function(S,T){J.Exec("AMT_SetupAndConfigurationService","ResetFlashWearOutProtection",{_method_dummy:S},T)};J.AMT_SetupAndConfigurationService_ExtendProvisioningPeriod=function(T,S){J.Exec("AMT_SetupAndConfigurationService","ExtendProvisioningPeriod",{Duration:T},S)};J.AMT_SetupAndConfigurationService_SetMEBxPassword=function(T,S){J.Exec("AMT_SetupAndConfigurationService","SetMEBxPassword",{Password:T},S)};J.AMT_SetupAndConfigurationService_SetTLSPSK=function(T,U,S){J.Exec("AMT_SetupAndConfigurationService","SetTLSPSK",{PID:T,PPS:U},S)};J.AMT_SetupAndConfigurationService_GetProvisioningAuditRecord=function(S){J.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecord",{},S)};J.AMT_SetupAndConfigurationService_GetUuid=function(S){J.Exec("AMT_SetupAndConfigurationService","GetUuid",{},S)};J.AMT_SetupAndConfigurationService_GetUnprovisionBlockingComponents=function(S){J.Exec("AMT_SetupAndConfigurationService","GetUnprovisionBlockingComponents",{},S)};J.AMT_SetupAndConfigurationService_GetProvisioningAuditRecordV2=function(S){J.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecordV2",{},S)};J.AMT_SystemDefensePolicy_GetTimeout=function(S){J.Exec("AMT_SystemDefensePolicy","GetTimeout",{},S)};J.AMT_SystemDefensePolicy_SetTimeout=function(T,S){J.Exec("AMT_SystemDefensePolicy","SetTimeout",{Timeout:T},S)};J.AMT_SystemDefensePolicy_UpdateStatistics=function(T,V,S,X,U,W){J.Exec("AMT_SystemDefensePolicy","UpdateStatistics",{NetworkInterface:T,ResetOnRead:V},S,X,U,W)};J.AMT_SystemPowerScheme_SetPowerScheme=function(S,T,U){J.Exec("AMT_SystemPowerScheme","SetPowerScheme",{},S,U,0,{InstanceID:T})};J.AMT_TimeSynchronizationService_GetLowAccuracyTimeSynch=function(S,T){J.Exec("AMT_TimeSynchronizationService","GetLowAccuracyTimeSynch",{},S,T)};J.AMT_TimeSynchronizationService_SetHighAccuracyTimeSynch=function(T,V,W,S,U){J.Exec("AMT_TimeSynchronizationService","SetHighAccuracyTimeSynch",{Ta0:T,Tm1:V,Tm2:W},S,U)};J.AMT_TLSCredentialContext_Create=function t(T,U,S,V){J.Create("AMT_TLSCredentialContext",{ElementInContext:T,ElementProvidingContext:U},S,V)};J.AMT_UserInitiatedConnectionService_RequestStateChange=function(T,U,S){J.Exec("AMT_UserInitiatedConnectionService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AMT_WebUIService_RequestStateChange=function(T,V,S,U){J.Exec("AMT_WebUIService","RequestStateChange",{RequestedState:T,TimeoutPeriod:V},S,U)};J.AMT_WiFiPortConfigurationService_AddWiFiSettings=function(W,X,V,U,S,T){J.ExecWithXml("AMT_WiFiPortConfigurationService","AddWiFiSettings",{WiFiEndpoint:W,WiFiEndpointSettingsInput:X,IEEE8021xSettingsInput:V,ClientCredential:U,CACredential:S},T)};J.AMT_WiFiPortConfigurationService_UpdateWiFiSettings=function(W,X,V,U,S,T){J.ExecWithXml("AMT_WiFiPortConfigurationService","UpdateWiFiSettings",{WiFiEndpointSettings:W,WiFiEndpointSettingsInput:X,IEEE8021xSettingsInput:V,ClientCredential:U,CACredential:S},T)};J.AMT_WiFiPortConfigurationService_DeleteAllITProfiles=function(S,T){J.Exec("AMT_WiFiPortConfigurationService","DeleteAllITProfiles",{_method_dummy:S},T)};J.AMT_WiFiPortConfigurationService_DeleteAllUserProfiles=function(S,T){J.Exec("AMT_WiFiPortConfigurationService","DeleteAllUserProfiles",{_method_dummy:S},T)};J.CIM_Account_RequestStateChange=function(T,U,S){J.Exec("CIM_Account","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_AccountManagementService_CreateAccount=function(U,S,T){J.Exec("CIM_AccountManagementService","CreateAccount",{System:U,AccountTemplate:S},T)};J.CIM_BootConfigSetting_ChangeBootOrder=function(T,S){J.Exec("CIM_BootConfigSetting","ChangeBootOrder",{Source:T},S)};J.CIM_BootService_SetBootConfigRole=function(S,U,T){J.Exec("CIM_BootService","SetBootConfigRole",{BootConfigSetting:S,Role:U},T,0,1)};J.CIM_Card_ConnectorPower=function(T,U,S){J.Exec("CIM_Card","ConnectorPower",{Connector:T,PoweredOn:U},S)};J.CIM_Card_IsCompatible=function(T,S){J.Exec("CIM_Card","IsCompatible",{ElementToCheck:T},S)};J.CIM_Chassis_IsCompatible=function(T,S){J.Exec("CIM_Chassis","IsCompatible",{ElementToCheck:T},S)};J.CIM_Fan_SetSpeed=function(T,S){J.Exec("CIM_Fan","SetSpeed",{DesiredSpeed:T},S)};J.CIM_KVMRedirectionSAP_RequestStateChange=function(T,U,S){J.Exec("CIM_KVMRedirectionSAP","RequestStateChange",{RequestedState:T},S)};J.CIM_MediaAccessDevice_LockMedia=function(T,S){J.Exec("CIM_MediaAccessDevice","LockMedia",{Lock:T},S)};J.CIM_MediaAccessDevice_SetPowerState=function(T,U,S){J.Exec("CIM_MediaAccessDevice","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_MediaAccessDevice_Reset=function(S){J.Exec("CIM_MediaAccessDevice","Reset",{},S)};J.CIM_MediaAccessDevice_EnableDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","EnableDevice",{Enabled:T},S)};J.CIM_MediaAccessDevice_OnlineDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","OnlineDevice",{Online:T},S)};J.CIM_MediaAccessDevice_QuiesceDevice=function(T,S){J.Exec("CIM_MediaAccessDevice","QuiesceDevice",{Quiesce:T},S)};J.CIM_MediaAccessDevice_SaveProperties=function(S){J.Exec("CIM_MediaAccessDevice","SaveProperties",{},S)};J.CIM_MediaAccessDevice_RestoreProperties=function(S){J.Exec("CIM_MediaAccessDevice","RestoreProperties",{},S)};J.CIM_MediaAccessDevice_RequestStateChange=function(T,U,S){J.Exec("CIM_MediaAccessDevice","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_PhysicalFrame_IsCompatible=function(T,S){J.Exec("CIM_PhysicalFrame","IsCompatible",{ElementToCheck:T},S)};J.CIM_PhysicalPackage_IsCompatible=function(T,S){J.Exec("CIM_PhysicalPackage","IsCompatible",{ElementToCheck:T},S)};J.CIM_PowerManagementService_RequestPowerStateChange=function(U,T,V,W,S){J.Exec("CIM_PowerManagementService","RequestPowerStateChange",{PowerState:U,ManagedElement:T,Time:V,TimeoutPeriod:W},S,0,1)};J.CIM_PowerSupply_SetPowerState=function(T,U,S){J.Exec("CIM_PowerSupply","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_PowerSupply_Reset=function(S){J.Exec("CIM_PowerSupply","Reset",{},S)};J.CIM_PowerSupply_EnableDevice=function(T,S){J.Exec("CIM_PowerSupply","EnableDevice",{Enabled:T},S)};J.CIM_PowerSupply_OnlineDevice=function(T,S){J.Exec("CIM_PowerSupply","OnlineDevice",{Online:T},S)};J.CIM_PowerSupply_QuiesceDevice=function(T,S){J.Exec("CIM_PowerSupply","QuiesceDevice",{Quiesce:T},S)};J.CIM_PowerSupply_SaveProperties=function(S){J.Exec("CIM_PowerSupply","SaveProperties",{},S)};J.CIM_PowerSupply_RestoreProperties=function(S){J.Exec("CIM_PowerSupply","RestoreProperties",{},S)};J.CIM_PowerSupply_RequestStateChange=function(T,U,S){J.Exec("CIM_PowerSupply","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_Processor_SetPowerState=function(T,U,S){J.Exec("CIM_Processor","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Processor_Reset=function(S){J.Exec("CIM_Processor","Reset",{},S)};J.CIM_Processor_EnableDevice=function(T,S){J.Exec("CIM_Processor","EnableDevice",{Enabled:T},S)};J.CIM_Processor_OnlineDevice=function(T,S){J.Exec("CIM_Processor","OnlineDevice",{Online:T},S)};J.CIM_Processor_QuiesceDevice=function(T,S){J.Exec("CIM_Processor","QuiesceDevice",{Quiesce:T},S)};J.CIM_Processor_SaveProperties=function(S){J.Exec("CIM_Processor","SaveProperties",{},S)};J.CIM_Processor_RestoreProperties=function(S){J.Exec("CIM_Processor","RestoreProperties",{},S)};J.CIM_Processor_RequestStateChange=function(T,U,S){J.Exec("CIM_Processor","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_RecordLog_ClearLog=function(S){J.Exec("CIM_RecordLog","ClearLog",{},S)};J.CIM_RecordLog_RequestStateChange=function(T,U,S){J.Exec("CIM_RecordLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_RedirectionService_RequestStateChange=function(T,U,S){J.Exec("CIM_RedirectionService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_Sensor_SetPowerState=function(T,U,S){J.Exec("CIM_Sensor","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Sensor_Reset=function(S){J.Exec("CIM_Sensor","Reset",{},S)};J.CIM_Sensor_EnableDevice=function(T,S){J.Exec("CIM_Sensor","EnableDevice",{Enabled:T},S)};J.CIM_Sensor_OnlineDevice=function(T,S){J.Exec("CIM_Sensor","OnlineDevice",{Online:T},S)};J.CIM_Sensor_QuiesceDevice=function(T,S){J.Exec("CIM_Sensor","QuiesceDevice",{Quiesce:T},S)};J.CIM_Sensor_SaveProperties=function(S){J.Exec("CIM_Sensor","SaveProperties",{},S)};J.CIM_Sensor_RestoreProperties=function(S){J.Exec("CIM_Sensor","RestoreProperties",{},S)};J.CIM_Sensor_RequestStateChange=function(T,U,S){J.Exec("CIM_Sensor","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_StatisticalData_ResetSelectedStats=function(T,S){J.Exec("CIM_StatisticalData","ResetSelectedStats",{SelectedStatistics:T},S)};J.CIM_Watchdog_KeepAlive=function(S){J.Exec("CIM_Watchdog","KeepAlive",{},S)};J.CIM_Watchdog_SetPowerState=function(T,U,S){J.Exec("CIM_Watchdog","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_Watchdog_Reset=function(S){J.Exec("CIM_Watchdog","Reset",{},S)};J.CIM_Watchdog_EnableDevice=function(T,S){J.Exec("CIM_Watchdog","EnableDevice",{Enabled:T},S)};J.CIM_Watchdog_OnlineDevice=function(T,S){J.Exec("CIM_Watchdog","OnlineDevice",{Online:T},S)};J.CIM_Watchdog_QuiesceDevice=function(T,S){J.Exec("CIM_Watchdog","QuiesceDevice",{Quiesce:T},S)};J.CIM_Watchdog_SaveProperties=function(S){J.Exec("CIM_Watchdog","SaveProperties",{},S)};J.CIM_Watchdog_RestoreProperties=function(S){J.Exec("CIM_Watchdog","RestoreProperties",{},S)};J.CIM_Watchdog_RequestStateChange=function(T,U,S){J.Exec("CIM_Watchdog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.CIM_WiFiPort_SetPowerState=function(T,U,S){J.Exec("CIM_WiFiPort","SetPowerState",{PowerState:T,Time:U},S)};J.CIM_WiFiPort_Reset=function(S){J.Exec("CIM_WiFiPort","Reset",{},S)};J.CIM_WiFiPort_EnableDevice=function(T,S){J.Exec("CIM_WiFiPort","EnableDevice",{Enabled:T},S)};J.CIM_WiFiPort_OnlineDevice=function(T,S){J.Exec("CIM_WiFiPort","OnlineDevice",{Online:T},S)};J.CIM_WiFiPort_QuiesceDevice=function(T,S){J.Exec("CIM_WiFiPort","QuiesceDevice",{Quiesce:T},S)};J.CIM_WiFiPort_SaveProperties=function(S){J.Exec("CIM_WiFiPort","SaveProperties",{},S)};J.CIM_WiFiPort_RestoreProperties=function(S){J.Exec("CIM_WiFiPort","RestoreProperties",{},S)};J.CIM_WiFiPort_RequestStateChange=function(T,U,S){J.Exec("CIM_WiFiPort","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_HostBasedSetupService_Setup=function(W,X,V,T,Y,U,S){J.Exec("IPS_HostBasedSetupService","Setup",{NetAdminPassEncryptionType:W,NetworkAdminPassword:X,McNonce:V,Certificate:T,SigningAlgorithm:Y,DigitalSignature:U},S)};J.IPS_HostBasedSetupService_AddNextCertInChain=function(V,T,U,S){J.Exec("IPS_HostBasedSetupService","AddNextCertInChain",{NextCertificate:V,IsLeafCertificate:T,IsRootCertificate:U},S)};J.IPS_HostBasedSetupService_AdminSetup=function(V,W,U,X,T,S){J.Exec("IPS_HostBasedSetupService","AdminSetup",{NetAdminPassEncryptionType:V,NetworkAdminPassword:W,McNonce:U,SigningAlgorithm:X,DigitalSignature:T},S)};J.IPS_HostBasedSetupService_UpgradeClientToAdmin=function(U,V,T,S){J.Exec("IPS_HostBasedSetupService","UpgradeClientToAdmin",{McNonce:U,SigningAlgorithm:V,DigitalSignature:T},S)};J.IPS_HostBasedSetupService_DisableClientControlMode=function(S,T){J.Exec("IPS_HostBasedSetupService","DisableClientControlMode",{_method_dummy:S},T)};J.IPS_KVMRedirectionSettingData_TerminateSession=function(S){J.Exec("IPS_KVMRedirectionSettingData","TerminateSession",{},S)};J.IPS_KVMRedirectionSettingData_DataChannelRead=function(S){J.Exec("IPS_KVMRedirectionSettingData","DataChannelRead",{},S)};J.IPS_KVMRedirectionSettingData_DataChannelWrite=function(T,S){J.Exec("IPS_KVMRedirectionSettingData","DataChannelWrite",{DataMessage:T},S)};J.IPS_OptInService_StartOptIn=function(S){J.Exec("IPS_OptInService","StartOptIn",{},S)};J.IPS_OptInService_CancelOptIn=function(S){J.Exec("IPS_OptInService","CancelOptIn",{},S)};J.IPS_OptInService_SendOptInCode=function(T,S){J.Exec("IPS_OptInService","SendOptInCode",{OptInCode:T},S)};J.IPS_OptInService_StartService=function(S){J.Exec("IPS_OptInService","StartService",{},S)};J.IPS_OptInService_StopService=function(S){J.Exec("IPS_OptInService","StopService",{},S)};J.IPS_OptInService_RequestStateChange=function(T,U,S){J.Exec("IPS_OptInService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_ProvisioningRecordLog_RequestStateChange=function(T,U,S){J.Exec("IPS_ProvisioningRecordLog","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.IPS_ProvisioningRecordLog_ClearLog=function(S,T){J.Exec("IPS_ProvisioningRecordLog","ClearLog",{_method_dummy:S},T)};J.IPS_SecIOService_RequestStateChange=function(T,U,S){J.Exec("IPS_SecIOService","RequestStateChange",{RequestedState:T,TimeoutPeriod:U},S)};J.AmtStatusToStr=function(S){if(J.AmtStatusCodes[S]){return J.AmtStatusCodes[S]}else{return"UNKNOWN_ERROR"}};J.AmtStatusCodes={0:"SUCCESS",1:"INTERNAL_ERROR",2:"NOT_READY",3:"INVALID_PT_MODE",4:"INVALID_MESSAGE_LENGTH",5:"TABLE_FINGERPRINT_NOT_AVAILABLE",6:"INTEGRITY_CHECK_FAILED",7:"UNSUPPORTED_ISVS_VERSION",8:"APPLICATION_NOT_REGISTERED",9:"INVALID_REGISTRATION_DATA",10:"APPLICATION_DOES_NOT_EXIST",11:"NOT_ENOUGH_STORAGE",12:"INVALID_NAME",13:"BLOCK_DOES_NOT_EXIST",14:"INVALID_BYTE_OFFSET",15:"INVALID_BYTE_COUNT",16:"NOT_PERMITTED",17:"NOT_OWNER",18:"BLOCK_LOCKED_BY_OTHER",19:"BLOCK_NOT_LOCKED",20:"INVALID_GROUP_PERMISSIONS",21:"GROUP_DOES_NOT_EXIST",22:"INVALID_MEMBER_COUNT",23:"MAX_LIMIT_REACHED",24:"INVALID_AUTH_TYPE",25:"AUTHENTICATION_FAILED",26:"INVALID_DHCP_MODE",27:"INVALID_IP_ADDRESS",28:"INVALID_DOMAIN_NAME",29:"UNSUPPORTED_VERSION",30:"REQUEST_UNEXPECTED",31:"INVALID_TABLE_TYPE",32:"INVALID_PROVISIONING_STATE",33:"UNSUPPORTED_OBJECT",34:"INVALID_TIME",35:"INVALID_INDEX",36:"INVALID_PARAMETER",37:"INVALID_NETMASK",38:"FLASH_WRITE_LIMIT_EXCEEDED",39:"INVALID_IMAGE_LENGTH",40:"INVALID_IMAGE_SIGNATURE",41:"PROPOSE_ANOTHER_VERSION",42:"INVALID_PID_FORMAT",43:"INVALID_PPS_FORMAT",44:"BIST_COMMAND_BLOCKED",45:"CONNECTION_FAILED",46:"CONNECTION_TOO_MANY",47:"RNG_GENERATION_IN_PROGRESS",48:"RNG_NOT_READY",49:"CERTIFICATE_NOT_READY",1024:"DISABLED_BY_POLICY",2048:"NETWORK_IF_ERROR_BASE",2049:"UNSUPPORTED_OEM_NUMBER",2050:"UNSUPPORTED_BOOT_OPTION",2051:"INVALID_COMMAND",2052:"INVALID_SPECIAL_COMMAND",2053:"INVALID_HANDLE",2054:"INVALID_PASSWORD",2055:"INVALID_REALM",2056:"STORAGE_ACL_ENTRY_IN_USE",2057:"DATA_MISSING",2058:"DUPLICATE",2059:"EVENTLOG_FROZEN",2060:"PKI_MISSING_KEYS",2061:"PKI_GENERATING_KEYS",2062:"INVALID_KEY",2063:"INVALID_CERT",2064:"CERT_KEY_NOT_MATCH",2065:"MAX_KERB_DOMAIN_REACHED",2066:"UNSUPPORTED",2067:"INVALID_PRIORITY",2068:"NOT_FOUND",2069:"INVALID_CREDENTIALS",2070:"INVALID_PASSPHRASE",2072:"NO_ASSOCIATION",2075:"AUDIT_FAIL",2076:"BLOCKING_COMPONENT",2081:"USER_CONSENT_REQUIRED",4096:"APP_INTERNAL_ERROR",4097:"NOT_INITIALIZED",4098:"LIB_VERSION_UNSUPPORTED",4099:"INVALID_PARAM",4100:"RESOURCES",4101:"HARDWARE_ACCESS_ERROR",4102:"REQUESTOR_NOT_REGISTERED",4103:"NETWORK_ERROR",4104:"PARAM_BUFFER_TOO_SHORT",4105:"COM_NOT_INITIALIZED_IN_THREAD",4106:"URL_REQUIRED"};J.GetMessageLog=function(S,T){J.AMT_MessageLog_PositionToFirstRecord(k,[S,T,[]])};function k(U,S,T,V,W){if(V!=200||T.Body.ReturnValue!="0"){W[0](J,null,W[2],V);return}J.AMT_MessageLog_GetRecords(T.Body.IterationIdentifier,390,l,W)}function l(Z,W,Y,aa,ac){if(aa!=200||Y.Body.ReturnValue!="0"){ac[0](J,null,ac[2],aa);return}var U,V,ae,T,S=ac[2],ab=new Date(),ad,X=Y.Body.RecordArray;if(typeof X==="string"){Y.Body.RecordArray=[Y.Body.RecordArray]}for(U in X){T=Buffer.from(X[U],"base64");if(T!=null){ad=M(T,0);if((ad>0)&&(ad<4294967295)){ae={DeviceAddress:T[4],EventSensorType:T[5],EventType:T[6],EventOffset:T[7],EventSourceType:T[8],EventSeverity:T[9],SensorNumber:T[10],Entity:T[11],EntityInstance:T[12],EventData:[],Time:new Date((ad+(ab.getTimezoneOffset()*60))*1000)};for(V=13;V<21;V++){ae.EventData.push(T[V])}ae.EntityStr=o[ae.Entity];ae.Desc=j(ae.EventSensorType,ae.EventOffset,ae.EventData,ae.Entity);if(!ae.EntityStr){ae.EntityStr="Unknown"}S.push(ae)}}}if(Y.Body.NoMoreRecords!=true){J.AMT_MessageLog_GetRecords(Y.Body.IterationIdentifier,390,l,[ac[0],S,ac[2]])}else{ac[0](J,S,ac[2])}}var f="Platform firmware (e.g. BIOS)|SMI handler|ISV system management software|Alert ASIC|IPMI|BIOS vendor|System board set vendor|System integrator|Third party add-in|OSV|NIC|System management card".split("|");var p="Unspecified.|No system memory is physically installed in the system.|No usable system memory, all installed memory has experienced an unrecoverable failure.|Unrecoverable hard-disk/ATAPI/IDE device failure.|Unrecoverable system-board failure.|Unrecoverable diskette subsystem failure.|Unrecoverable hard-disk controller failure.|Unrecoverable PS/2 or USB keyboard failure.|Removable boot media not found.|Unrecoverable video controller failure.|No video device detected.|Firmware (BIOS) ROM corruption detected.|CPU voltage mismatch (processors that share same supply have mismatched voltage requirements)|CPU speed matching failure".split("|");var q="Unspecified.|Memory initialization.|Starting hard-disk initialization and test|Secondary processor(s) initialization|User authentication|User-initiated system setup|USB resource configuration|PCI resource configuration|Option ROM initialization|Video initialization|Cache initialization|SM Bus initialization|Keyboard controller initialization|Embedded controller/management controller initialization|Docking station attachment|Enabling docking station|Docking station ejection|Disabling docking station|Calling operating system wake-up vector|Starting operating system boot process|Baseboard or motherboard initialization|reserved|Floppy initialization|Keyboard test|Pointing device test|Primary processor initialization".split("|");var o="Unspecified|Other|Unknown|Processor|Disk|Peripheral|System management module|System board|Memory module|Processor module|Power supply|Add in card|Front panel board|Back panel board|Power system board|Drive backplane|System internal expansion board|Other system board|Processor board|Power unit|Power module|Power management board|Chassis back panel board|System chassis|Sub chassis|Other chassis board|Disk drive bay|Peripheral bay|Device bay|Fan cooling|Cooling unit|Cable interconnect|Memory device|System management software|BIOS|Intel(r) ME|System bus|Group|Intel(r) ME|External environment|Battery|Processing blade|Connectivity switch|Processor/memory module|I/O module|Processor I/O module|Management controller firmware|IPMI channel|PCI bus|PCI express bus|SCSI bus|SATA/SAS bus|Processor front side bus".split("|");J.RealmNames="||Redirection|PT Administration|Hardware Asset|Remote Control|Storage|Event Manager|Storage Admin|Agent Presence Local|Agent Presence Remote|Circuit Breaker|Network Time|General Information|Firmware Update|EIT|LocalUN|Endpoint Access Control|Endpoint Access Control Admin|Event Log Reader|Audit Log|ACL Realm|||Local System".split("|");J.WatchdogCurrentStates={1:"Not Started",2:"Stopped",4:"Running",8:"Expired",16:"Suspended"};function j(V,U,T,S){if(V==15){if(T[0]==235){return"Invalid Data"}if(U==0){return p[T[1]]}return q[T[1]]}if(V==18&&T[0]==170){return"Agent watchdog "+char2hex(T[4])+char2hex(T[3])+char2hex(T[2])+char2hex(T[1])+"-"+char2hex(T[6])+char2hex(T[5])+"-... changed to "+J.WatchdogCurrentStates[T[7]]}if(V==6){return"Authentication failed "+(T[1]+(T[2]<<8))+" times. The system may be under attack."}if(V==30){return"No bootable media"}if(V==32){return"Operating system lockup or power interrupt"}if(V==35){return"System boot failure"}if(V==37){return"System firmware started (at least one CPU is properly executing)."}return"Unknown Sensor Type #"+V}var a={16:"Security Admin",17:"RCO",18:"Redirection Manager",19:"Firmware Update Manager",20:"Security Audit Log",21:"Network Time",22:"Network Administration",23:"Storage Administration",24:"Event Manager",25:"Circuit Breaker Manager",26:"Agent Presence Manager",27:"Wireless Configuration",28:"EAC",29:"KVM",30:"User Opt-In Events",32:"Screen Blanking",33:"Watchdog Events",1600:"Provisioning Started",1601:"Provisioning Completed",1602:"ACL Entry Added",1603:"ACL Entry Modified",1604:"ACL Entry Removed",1605:"ACL Access with Invalid Credentials",1606:"ACL Entry State",1607:"TLS State Changed",1608:"TLS Server Certificate Set",1609:"TLS Server Certificate Remove",1610:"TLS Trusted Root Certificate Added",1611:"TLS Trusted Root Certificate Removed",1612:"TLS Preshared Key Set",1613:"Kerberos Settings Modified",1614:"Kerberos Master Key Modified",1615:"Flash Wear out Counters Reset",1616:"Power Package Modified",1617:"Set Realm Authentication Mode",1618:"Upgrade Client to Admin Control Mode",1619:"Unprovisioning Started",1700:"Performed Power Up",1701:"Performed Power Down",1702:"Performed Power Cycle",1703:"Performed Reset",1704:"Set Boot Options",1800:"IDER Session Opened",1801:"IDER Session Closed",1802:"IDER Enabled",1803:"IDER Disabled",1804:"SoL Session Opened",1805:"SoL Session Closed",1806:"SoL Enabled",1807:"SoL Disabled",1808:"KVM Session Started",1809:"KVM Session Ended",1810:"KVM Enabled",1811:"KVM Disabled",1812:"VNC Password Failed 3 Times",1900:"Firmware Updated",1901:"Firmware Update Failed",2000:"Security Audit Log Cleared",2001:"Security Audit Policy Modified",2002:"Security Audit Log Disabled",2003:"Security Audit Log Enabled",2004:"Security Audit Log Exported",2005:"Security Audit Log Recovered",2100:"Intel(R) ME Time Set",2200:"TCPIP Parameters Set",2201:"Host Name Set",2202:"Domain Name Set",2203:"VLAN Parameters Set",2204:"Link Policy Set",2205:"IPv6 Parameters Set",2300:"Global Storage Attributes Set",2301:"Storage EACL Modified",2302:"Storage FPACL Modified",2303:"Storage Write Operation",2400:"Alert Subscribed",2401:"Alert Unsubscribed",2402:"Event Log Cleared",2403:"Event Log Frozen",2500:"CB Filter Added",2501:"CB Filter Removed",2502:"CB Policy Added",2503:"CB Policy Removed",2504:"CB Default Policy Set",2505:"CB Heuristics Option Set",2506:"CB Heuristics State Cleared",2600:"Agent Watchdog Added",2601:"Agent Watchdog Removed",2602:"Agent Watchdog Action Set",2700:"Wireless Profile Added",2701:"Wireless Profile Removed",2702:"Wireless Profile Updated",2800:"EAC Posture Signer SET",2801:"EAC Enabled",2802:"EAC Disabled",2803:"EAC Posture State",2804:"EAC Set Options",2900:"KVM Opt-in Enabled",2901:"KVM Opt-in Disabled",2902:"KVM Password Changed",2903:"KVM Consent Succeeded",2904:"KVM Consent Failed",3000:"Opt-In Policy Change",3001:"Send Consent Code Event",3002:"Start Opt-In Blocked Event"};J.GetAuditLogExtendedDataStr=function(T,S){if((T==1602||T==1604)&&S[0]==0){return w(S).splice(2,2+S[1]).toString()}if(T==1603){if(S[1]==0){return w(S).splice(3).toString()}return null}if(T==1605){return["Invalid ME access","Invalid MEBx access"][S[0]]}if(T==1606){var U=["Disabled","Enabled"][S[0]];if(S[1]==0){U+=", "+S[3]}return U}if(T==1607){return"Remote "+["NoAuth","ServerAuth","MutualAuth"][S[0]]+", Local "+["NoAuth","ServerAuth","MutualAuth"][S[1]]}if(T==1617){return J.RealmNames[L(S,0)]+", "+["NoAuth","Auth","Disabled"][S[4]]}if(T==1619){return["BIOS","MEBx","Local MEI","Local WSMAN","Remote WSAMN"][S[0]]}if(T==1900){return"From "+N(S,0)+"."+N(S,2)+"."+N(S,4)+"."+N(S,6)+" to "+N(S,8)+"."+N(S,10)+"."+N(S,12)+"."+N(S,14)}if(T==2100){var V=new Date();V.setTime(L(S,0)*1000+(new Date().getTimezoneOffset()*60000));return V.toLocaleString()}if(T==3000){return"From "+["None","KVM","All"][S[0]]+" to "+["None","KVM","All"][S[1]]}if(T==3001){return["Success","Failed 3 times"][S[0]]}return null};J.GetAuditLog=function(S){J.AMT_AuditLog_ReadRecords(1,i,[S,[]])};function I(S){if(!S||S==null||typeof S=="object"){return S}return[S]}function N(T,S){return(T[S]<<8)+T[S+1]}function L(T,S){return(T[S]*16777216)+(T[S+1]<<16)+(T[S+2]<<8)+T[S+3]}function M(T,S){return(T[S+3]*16777216)+(T[S+2]<<16)+(T[S+1]<<8)+T[S]}function v(S){return Buffer.from(S).toString("base64")}function u(T){var U=null;try{U=Buffer.from(T,"base64").toString()}catch(S){console.log(S)}return U}function w(S){var U=[];for(var T in S){U.push(S[T])}return U}function i(ab,W,aa,ac,ae){if(ac!=200){ae[0](J,[],ac);return}var Y,V,S,ah,Z=ae[1],ad=new Date(),af;if(aa.Body.RecordsReturned>0){aa.Body.EventRecords=I(aa.Body.EventRecords);for(V in aa.Body.EventRecords){S=null;try{S=Buffer.from(aa.Body.EventRecords[V],"base64")}catch(T){console.log(T+" "+aa.Body.EventRecords[V])}ah={AuditAppID:N(S,0),EventID:N(S,2),InitiatorType:S[4]};ah.AuditApp=a[ah.AuditAppID];ah.Event=a[(ah.AuditAppID*100)+ah.EventID];if(!ah.Event){ah.Event="#"+ah.EventID}if(ah.InitiatorType==0){var ag=S[5];ah.Initiator=S.slice(6,6+ag).toString();Y=6+ag}if(ah.InitiatorType==1){ah.KerberosUserInDomain=L(S,5);var ag=S[9];ah.Initiator=G(S.slice(10,10+ag));Y=10+ag}if(ah.InitiatorType==2){ah.Initiator="Local";Y=5}if(ah.InitiatorType==3){ah.Initiator="KVM Default Port";Y=5}af=L(S,Y);ah.Time=new Date((af+(ad.getTimezoneOffset()*60))*1000);Y+=4;ah.MCLocationType=S[Y++];var X=S[Y++];ah.NetAddress=S.slice(Y,Y+X).toString();Y+=X;var U=S[Y++];ah.Ex=S.slice(Y,Y+U);ah.ExStr=J.GetAuditLogExtendedDataStr((ah.AuditAppID*100)+ah.EventID,ah.Ex);Z.push(ah)}}if(aa.Body.TotalRecordCount>Z.length){J.AMT_AuditLog_ReadRecords(Z.length+1,i,[ae[0],Z])}else{ae[0](J,Z,ac)}}function C(U){if(U===undefined||U===null){return null}var V="";for(var T in U){var S=U[T];if(!S){continue}if(S.__parameterType==="reference"){V+=O(T,S)}else{V+=H(T,S)}}return V}function H(V,U){if(U===undefined||U===null){return null}var T=!!U.__namespace;var Z=T?"<q:":"<";var S=T?"</q:":"</";var W=T?(' xmlns:q="'+U.__namespace+'"'):"";var Y="<r:"+V+W+">";for(var X in U){if(!U.hasOwnProperty(X)||X.indexOf("__")===0){continue}if(typeof U[X]==="function"||Array.isArray(U[X])){continue}if(typeof U[X]==="object"){console.error("only convert one level down...")}else{Y+=Z+X+">"+U[X].toString()+S+X+">"}}Y+="</r:"+V+">";return Y}function O(T,S){if(S===undefined||S===null){return null}var U="<r:"+T+"><a:Address>/wsman</a:Address><a:ReferenceParameters><w:ResourceURI>"+S.__resourceUri+"</w:ResourceURI><w:SelectorSet>";for(var V in S){if(!S.hasOwnProperty(V)||V.indexOf("__")===0){continue}if(typeof S[V]==="function"||typeof S[V]==="object"||Array.isArray(S[V])){continue}U+='<w:Selector Name="'+V+'">'+S[V].toString()+"</w:Selector>"}U+="</w:SelectorSet></a:ReferenceParameters></r:"+T+">";return U}function G(U){var T="S-"+U.charCodeAt(0)+"-"+U.charCodeAt(7);for(var S=2;S<(U.length/4);S++){T+="-"+M(U,S*4)}return T}function F(V){if(!V||V==null){return null}var U=V.split("-");if(U.length<4||(U[0]!="s"&&U[0]!="S")){return null}for(var S=1;S<U.length;S++){var W=parseInt(U[S]);if(W!=U[S]){return null}U[S]=W}var T=String.fromCharCode(U[1])+String.fromCharCode(U.length-3)+ShortToStr(Math.floor(U[2]/Math.pow(2,32)))+IntToStr((U[2])&65535);for(var S=3;S<U.length;S++){T+=IntToStrX(U[S])}return T}return J}module.exports=AmtStackCreateService;
\ No newline at end of file
agents/modules_meshcore_min/apfclient.min.js
new
+1
@@ -0,0 +1 @@
1
+function CreateAPFClient(q,e){var o={};o.parent=q;o.args=e;o.http=require("http");o.net=require("net");o.forwardClient=null;o.downlinks={};o.pfwd_idx=0;o.timer=null;function u(K,J){return(K.charCodeAt(J)*16777216)+(K.charCodeAt(J+1)<<16)+(K.charCodeAt(J+2)<<8)+K.charCodeAt(J+3)}function n(J){return String.fromCharCode((J>>24)&255,(J>>16)&255,(J>>8)&255,J&255)}function m(J){var L="",K=(""+J).match(/../g),M;while(M=K.shift()){L+=String.fromCharCode("0x"+M)}return L}function h(J){return(J+256).toString(16).substr(-2).toUpperCase()}function w(K){var L="",J;for(J=0;J<K.length;J++){L+=h(K.charCodeAt(J))}return L}function j(J){return(J/256+1/512).toString(16).substring(2,4)}function g(K){var L="",J;for(J=0;J<K.length;J++){L+=j(K[J])}return L}function k(J){if(o.parent.debug){console.log(J)}}var i={INITIAL:0,PROTOCOL_VERSION_SENT:1,AUTH_SERVICE_REQUEST_SENT:2,AUTH_REQUEST_SENT:3,PFWD_SERVICE_REQUEST_SENT:4,GLOBAL_REQUEST_SENT:5,FAILED:-1};o.cirastate=i.INITIAL;var v={REDIR_UNKNOWN:0,REDIR_SOL:1,REDIR_KVM:2,REDIR_IDER:3};o.RedirectStartSol=String.fromCharCode(16,0,0,0,83,79,76,32);o.RedirectStartKvm=String.fromCharCode(16,1,0,0,75,86,77,82);o.RedirectStartIder=String.fromCharCode(16,0,0,0,73,68,69,82);var s=[16992,623,16994,5900];var d={UNKNOWN:0,DISCONNECT:1,SERVICE_REQUEST:5,SERVICE_ACCEPT:6,USERAUTH_REQUEST:50,USERAUTH_FAILURE:51,USERAUTH_SUCCESS:52,GLOBAL_REQUEST:80,REQUEST_SUCCESS:81,REQUEST_FAILURE:82,CHANNEL_OPEN:90,CHANNEL_OPEN_CONFIRMATION:91,CHANNEL_OPEN_FAILURE:92,CHANNEL_WINDOW_ADJUST:93,CHANNEL_DATA:94,CHANNEL_CLOSE:97,PROTOCOLVERSION:192,KEEPALIVE_REQUEST:208,KEEPALIVE_REPLY:209,KEEPALIVE_OPTIONS_REQUEST:210,KEEPALIVE_OPTIONS_REPLY:211};var c={HOST_NOT_ALLOWED_TO_CONNECT:1,PROTOCOL_ERROR:2,KEY_EXCHANGE_FAILED:3,RESERVED:4,MAC_ERROR:5,COMPRESSION_ERROR:6,SERVICE_NOT_AVAILABLE:7,PROTOCOL_VERSION_NOT_SUPPORTED:8,HOST_KEY_NOT_VERIFIABLE:9,CONNECTION_LOST:10,BY_APPLICATION:11,TOO_MANY_CONNECTIONS:12,AUTH_CANCELLED_BY_USER:13,NO_MORE_AUTH_METHODS_AVAILABLE:14,INVALID_CREDENTIALS:15,CONNECTION_TIMED_OUT:16,BY_POLICY:17,TEMPORARILY_UNAVAILABLE:18};var a={ADMINISTRATIVELY_PROHIBITED:1,CONNECT_FAILED:2,UNKNOWN_CHANNEL_TYPE:3,RESOURCE_SHORTAGE:4,};var b={AdministrativelyProhibited:1,ConnectFailed:2,UnknownChannelType:3,ResourceShortage:4,};o.onSecureConnect=function p(K,L,J){k("APF Secure WebSocket connected.");o.forwardClient.tag={accumulator:[]};o.forwardClient.ws=L;o.forwardClient.ws.on("end",function(){k("APF: Connection is closing.");if(o.timer!=null){clearInterval(o.timer);o.timer=null}});o.forwardClient.ws.on("data",function(M){o.forwardClient.tag.accumulator+=m(g(M));try{var O=0;do{O=t(o.forwardClient);if(O>0){o.forwardClient.tag.accumulator=o.forwardClient.tag.accumulator.slice(O)}if(o.cirastate==i.FAILED){k("APF: in a failed state, destroying socket.");o.forwardClient.ws.end()}}while(O>0)}catch(N){k(N)}});o.forwardClient.ws.on("error",function(M){k("APF: Connection error, ending connecting.");if(o.timer!=null){clearInterval(o.timer);o.timer=null}});o.state=i.INITIAL;F(o.forwardClient.ws,o.args.clientuuid);G(o.forwardClient.ws,"auth@amt.intel.com")};function l(J){return J.substring(6,8)+J.substring(4,6)+J.substring(2,4)+J.substring(0,2)+"-"+J.substring(10,12)+J.substring(8,10)+"-"+J.substring(14,16)+J.substring(12,14)+"-"+J.substring(16,20)+"-"+J.substring(20)}function I(K){K=K.replace(/-/g,"");var J=K.substring(6,8)+K.substring(4,6)+K.substring(2,4)+K.substring(0,2);J+=K.substring(10,12)+K.substring(8,10)+K.substring(14,16)+K.substring(12,14)+K.substring(16,20)+K.substring(20);return J}function f(K){var L="";for(var J=0;J<K;J++){L+=String.fromCharCode(0&255)}return L}function F(L,M){var J=I(M);var K=String.fromCharCode(d.PROTOCOLVERSION)+""+n(1)+n(0)+n(0)+m(J)+f(64);L.write(K);k("APF: Send protocol version 1 0 "+M);o.cirastate=i.PROTOCOL_VERSION_SENT}function G(L,K){var J=String.fromCharCode(d.SERVICE_REQUEST)+n(K.length)+K;L.write(J);k("APF: Send service request "+K);if(K=="auth@amt.intel.com"){o.cirastate=i.AUTH_SERVICE_REQUEST_SENT}else{if(K=="pfwd@amt.intel.com"){o.cirastate=i.PFWD_SERVICE_REQUEST_SENT}}}function H(M,N,K){var L="pfwd@amt.intel.com";var J=String.fromCharCode(d.USERAUTH_REQUEST)+n(N.length)+N+n(L.length)+L;J+=n(8)+"password";J+=f(1)+n(K.length)+K;M.write(J);k("APF: Send username password authentication to MPS");o.cirastate=i.AUTH_REQUEST_SENT}function C(M,J,K){var N="tcpip-forward";var L=String.fromCharCode(d.GLOBAL_REQUEST)+n(N.length)+N+f(1,1);L+=n(J.length)+J+n(K);M.write(L);k("APF: Send tcpip-forward "+J+":"+K);o.cirastate=i.GLOBAL_REQUEST_SENT}function E(K){var J=String.fromCharCode(d.KEEPALIVE_REQUEST)+n(255);K.write(J);k("APF: Send keepalive request")}function D(L,J){var K=String.fromCharCode(d.KEEPALIVE_REPLY)+n(J);L.write(K);k("APF: Send keepalive reply")}function t(U){var L=U.tag.accumulator.charCodeAt(0);var O=U.tag.accumulator.length;var M=U.tag.accumulator;if(O==0){return 0}switch(L){case d.SERVICE_ACCEPT:var T=u(M,1);var S=M.substring(5,6+T);k("APF: Service request to "+S+" accepted.");if(S=="auth@amt.intel.com"){if(o.cirastate>=i.AUTH_SERVICE_REQUEST_SENT){H(U.ws,o.args.mpsuser,o.args.mpspass)}}else{if(S=="pfwd@amt.intel.com"){if(o.cirastate>=i.PFWD_SERVICE_REQUEST_SENT){C(U.ws,o.args.clientname,s[o.pfwd_idx++])}}}return 5+T;case d.REQUEST_SUCCESS:if(O>=5){var Q=u(M,1);k("APF: Request to port forward "+Q+" successful.");if(o.pfwd_idx<s.length){C(U.ws,o.args.clientname,s[o.pfwd_idx++])}else{k("APF: Start keep alive for every "+o.args.mpskeepalive+" ms.");o.timer=setInterval(function(){E(o.forwardClient.ws)},o.args.mpskeepalive)}return 5}k("APF: Request successful.");return 1;case d.USERAUTH_SUCCESS:k("APF: User Authentication successful");G(U.ws,"pfwd@amt.intel.com");return 1;case d.USERAUTH_FAILURE:k("APF: User Authentication failed");o.cirastate=i.FAILED;return 14;case d.KEEPALIVE_REQUEST:k("APF: Keep Alive Request with cookie: "+u(M,1));D(U.ws,u(M,1));return 5;case d.KEEPALIVE_REPLY:k("APF: Keep Alive Reply with cookie: "+u(M,1));return 5;case d.CHANNEL_OPEN:var P=r(M);k("APF: CHANNEL_OPEN request: "+JSON.stringify(P));if(s.indexOf(P.target_port)>=0){o.downlinks[P.sender_chan]=o.net.createConnection({host:o.args.clientaddress,port:P.target_port},function(){z(U.ws,P)});o.downlinks[P.sender_chan].on("data",function(V){y(U.ws,P.sender_chan,V.length,V)});o.downlinks[P.sender_chan].on("error",function(V){k("Downlink connection error: "+V)});o.downlinks[P.sender_chan].on("end",function(){if(o.downlinks[P.sender_chan]){try{k("Socket ends.");x(U.ws,P.sender_chan);setTimeout(function(){delete o.downlinks[P.sender_chan]},100)}catch(V){k("Downlink connection exception: "+V)}}})}else{A(U.ws,P)}return P.len;case d.CHANNEL_OPEN_CONFIRMATION:k("APF: CHANNEL_OPEN_CONFIRMATION");return 17;case d.CHANNEL_CLOSE:var R=u(M,1);k("APF: CHANNEL_CLOSE: "+R);x(U.ws,R);try{o.downlinks[R].end();delete o.downlinks[R]}catch(N){}return 5;case d.CHANNEL_DATA:k("APF: CHANNEL_DATA: "+JSON.stringify(w(M)));var R=u(M,1);var K=u(M,5);var J=M.substring(9,9+K);if(o.downlinks[R]){try{o.downlinks[R].write(J,"binary",function(){k("Write completed.");B(U.ws,R,K)})}catch(N){k("Cannot forward data to downlink socket.")}}return 9+K;case d.CHANNEL_WINDOW_ADJUST:k("APF: CHANNEL_WINDOW_ADJUST ");return 9;default:k("CMD: "+L+" is not implemented.");o.cirastate=i.FAILED;return 0}}function r(L){var N={len:0,cmd:d.CHANNEL_OPEN,chan_type:"",sender_chan:0,window_size:0,target_address:"",target_port:0,origin_address:"",origin_port:0,};var K=u(L,1);N.chan_type=L.substring(5,5+K);N.sender_chan=u(L,5+K);N.window_size=u(L,9+K);var J=u(L,17+K);N.target_address=L.substring(21+K,21+K+J);N.target_port=u(L,21+K+J);var M=u(L,25+K+J);N.origin_address=L.substring(29+K+J,29+K+J+M);N.origin_port=u(L,29+K+J+M);N.len=33+K+J+M;return N}function A(L,J){var K=String.fromCharCode(d.CHANNEL_OPEN_FAILURE)+n(J.sender_chan)+n(2)+n(0)+n(0);L.write(K);k("APF: Send ChannelOpenFailure")}function z(L,J){var K=String.fromCharCode(d.CHANNEL_OPEN_CONFIRMATION)+n(J.sender_chan)+n(J.sender_chan)+n(J.window_size)+n(4294967295);L.write(K);k("APF: Send ChannelOpenConfirmation")}function B(M,J,L){var K=String.fromCharCode(d.CHANNEL_WINDOW_ADJUST)+n(J)+n(L);M.write(K);k("APF: Send ChannelWindowAdjust: "+w(K))}function y(N,K,M,L){var J=String.fromCharCode(d.CHANNEL_DATA)+n(K)+n(M)+L;N.write(J);k("APF: Send ChannelData: "+w(J))}function x(L,K){var J=String.fromCharCode(d.CHANNEL_CLOSE)+n(K);L.write(J);k("APF: Send ChannelClose ")}o.connect=function(){if(o.forwardClient!=null){try{o.forwardClient.ws.end()}catch(J){k(J)}}o.cirastate=i.INITIAL;o.pfwd_idx=0;var K=o.http.parseUri(o.args.mpsurl);K.rejectUnauthorized=0;o.forwardClient=o.http.request(K);o.forwardClient.upgrade=o.onSecureConnect;o.forwardClient.end()};o.disconnect=function(){try{o.forwardClient.ws.end()}catch(J){k(J)}};return o}module.exports=CreateAPFClient;
\ No newline at end of file
agents/modules_meshcore_min/identifiers.min.js
new
+1
@@ -0,0 +1 @@
1
+function trimIdentifiers(b){for(var a in b){if(!b[a]||b[a]=="None"||b[a]==""){delete b[a]}}}function linux_identifiers(){var c={};var d={};var e={};if(!require("fs").existsSync("/sys/class/dmi/id")){throw ("this platform does not have DMI statistics")}var a=require("fs").readdirSync("/sys/class/dmi/id");for(var b in a){if(require("fs").statSync("/sys/class/dmi/id/"+a[b]).isFile()){d[a[b]]=require("fs").readFileSync("/sys/class/dmi/id/"+a[b]).toString().trim();if(d[a[b]]=="None"){delete d[a[b]]}}}c.bios_date=d.bios_date;c.bios_vendor=d.bios_vendor;c.bios_version=d.bios_version;c.board_name=d.board_name;c.board_serial=d.board_serial;c.board_vendor=d.board_vendor;c.board_version=d.board_version;c.product_uuid=d.product_uuid;e.identifiers=c;e.linux=d;trimIdentifiers(e.identifiers);return(e)}function windows_wmic_results(h){var e=h.trim().split("\r\n");var c=e[0].split(",");var a,b,d;var j;var g=[];for(a=1;a<e.length;++a){var f={};j=e[a].split(",");for(b=0;b<c.length;++b){if(j[b].trim()){f[c[b].trim()]=j[b].trim()}}g.push(f)}return(g)}function windows_identifiers(){var e={windows:{}};values={};var d;var b;var c;var a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","bios","get","/VALUE"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();var d=a.stdout.str.split("\r\r\n");for(b in d){c=d[b].split("=");values[c[0]]=c[1]}e.identifiers={};e.identifiers["bios_date"]=values.ReleaseDate;e.identifiers["bios_vendor"]=values.Manufacturer;e.identifiers["bios_version"]=values.SMBIOSBIOSVersion;a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","BASEBOARD","get","/VALUE"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();var d=a.stdout.str.split("\r\r\n");for(b in d){c=d[b].split("=");values[c[0]]=c[1]}e.identifiers["board_name"]=values.Product;e.identifiers["board_serial"]=values.SerialNumber;e.identifiers["board_vendor"]=values.Manufacturer;e.identifiers["board_version"]=values.Version;a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","CSProduct","get","/VALUE"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();var d=a.stdout.str.split("\r\r\n");for(b in d){c=d[b].split("=");values[c[0]]=c[1]}e.identifiers["product_uuid"]=values.UUID;trimIdentifiers(e.identifiers);a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","MEMORYCHIP","LIST","/FORMAT:CSV"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();e.windows.memory=windows_wmic_results(a.stdout.str);a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","OS","GET","/FORMAT:CSV"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();e.windows.osinfo=windows_wmic_results(a.stdout.str)[0];a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","PARTITION","LIST","/FORMAT:CSV"]);a.stdout.str="";a.stdout.on("data",function(f){this.str+=f.toString()});a.waitExit();e.windows.partitions=windows_wmic_results(a.stdout.str);return(e)}function macos_identifiers(){var b={identifiers:{}};var a;a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep board-id | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.board_name=a.stdout.str.trim();a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep IOPlatformSerialNumber | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.board_serial=a.stdout.str.trim();a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep manufacturer | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.board_vendor=a.stdout.str.trim();a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep version | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.board_version=a.stdout.str.trim();a=require("child_process").execFile("/bin/sh",["sh"]);a.stdout.str="";a.stdout.on("data",function(d){this.str+=d.toString()});a.stdin.write('ioreg -d2 -c IOPlatformExpertDevice | grep IOPlatformUUID | awk -F= \'{ split($2, res, "\\""); print res[2]; }\'\nexit\n');a.waitExit();b.identifiers.product_uuid=a.stdout.str.trim();trimIdentifiers(b.identifiers);return(b)}switch(process.platform){case"linux":module.exports={_ObjectID:"identifiers",get:linux_identifiers};break;case"win32":module.exports={_ObjectID:"identifiers",get:windows_identifiers};break;case"darwin":module.exports={_ObjectID:"identifiers",get:macos_identifiers};break;default:module.exports={get:function(){throw ("Unsupported Platform")}};break};
\ No newline at end of file
agents/modules_meshcore_min/monitor-border.min.js
new
+1
@@ -0,0 +1 @@
1
+var red=255;var yellow=65535;var GXxor=6;var GXclear=0;var ExposureMask=(1<<15);function windows_monitorborder(){this._ObjectID="monitor-info";var c=require("monitor-info");var b=require("_GenericMarshal");var g=b.CreateNativeProxy("user32.dll");c.monitors=[];g.CreateMethod("GetDC");g.CreateMethod("ReleaseDC");g.CreateMethod("FillRect");g.CreateMethod("InvalidateRect");var a=b.CreateNativeProxy("gdi32.dll");a.CreateMethod("CreateSolidBrush");var d=a.CreateSolidBrush(red);var h=a.CreateSolidBrush(yellow);require("events").EventEmitter.call(this);this.on("~",function(){this.Stop()});this.Stop=function f(){c.redInterval=null;var j=b.CreateVariable(16);var k=j.toBuffer();for(var l in c.monitors){k.writeInt32LE(c.monitors[l].left,0);k.writeInt32LE(c.monitors[l].top,4);k.writeInt32LE(c.monitors[l].left+(c.monitors[l].right-c.monitors[l].left),8);k.writeInt32LE(c.monitors[l].bottom-c.monitors[l].top,12);g.InvalidateRect(0,j,0)}};this.Start=function e(){c.getInfo().then(function(j){var i=b.CreateVariable(16);c.monitors=j;c.dc=g.GetDC(0);c.state=0;c.redInterval=setInterval(function(){c.state=(c.state+1)%8;var k=i.toBuffer();for(var l in c.monitors){k.writeInt32LE(c.monitors[l].left,0);k.writeInt32LE(c.monitors[l].top,4);k.writeInt32LE(c.monitors[l].left+(c.monitors[l].right-c.monitors[l].left)/2,8);k.writeInt32LE(5,12);g.FillRect(c.dc,i,(c.state==0||c.state==4)?h:d);k.writeInt32LE(c.monitors[l].left+(c.monitors[l].right-c.monitors[l].left)/2,0);k.writeInt32LE(c.monitors[l].top,4);k.writeInt32LE(c.monitors[l].right,8);k.writeInt32LE(5,12);g.FillRect(c.dc,i,(c.state==1||c.state==5)?h:d);k.writeInt32LE(c.monitors[l].right-5,0);k.writeInt32LE(c.monitors[l].top,4);k.writeInt32LE(c.monitors[l].right,8);k.writeInt32LE(c.monitors[l].top+(c.monitors[l].bottom-c.monitors[l].top)/2,12);g.FillRect(c.dc,i,(c.state==2||c.state==6)?h:d);k.writeInt32LE(c.monitors[l].right-5,0);k.writeInt32LE(c.monitors[l].top+(c.monitors[l].bottom-c.monitors[l].top)/2,4);k.writeInt32LE(c.monitors[l].right,8);k.writeInt32LE(c.monitors[l].bottom,12);g.FillRect(c.dc,i,(c.state==3||c.state==7)?h:d);k.writeInt32LE(c.monitors[l].left+(c.monitors[l].right-c.monitors[l].left)/2,0);k.writeInt32LE(c.monitors[l].bottom-5,4);k.writeInt32LE(c.monitors[l].right,8);k.writeInt32LE(c.monitors[l].bottom,12);g.FillRect(c.dc,i,(c.state==4||c.state==0)?h:d);k.writeInt32LE(c.monitors[l].left,0);k.writeInt32LE(c.monitors[l].bottom-5,4);k.writeInt32LE(c.monitors[l].left+(c.monitors[l].right-c.monitors[l].left)/2,8);k.writeInt32LE(c.monitors[l].bottom,12);g.FillRect(c.dc,i,(c.state==5||c.state==1)?h:d);k.writeInt32LE(c.monitors[l].left,0);k.writeInt32LE(c.monitors[l].top+(c.monitors[l].bottom-c.monitors[l].top)/2,4);k.writeInt32LE(c.monitors[l].left+5,8);k.writeInt32LE(c.monitors[l].bottom,12);g.FillRect(c.dc,i,(c.state==6||c.state==2)?h:d);k.writeInt32LE(c.monitors[l].left,0);k.writeInt32LE(c.monitors[l].top,4);k.writeInt32LE(c.monitors[l].left+5,8);k.writeInt32LE(c.monitors[l].top+(c.monitors[l].bottom-c.monitors[l].top)/2,12);g.FillRect(c.dc,i,(c.state==7||c.state==3)?h:d)}},450)})}}function linux_monitorborder(){var a=this;this.displays=[];this._ObjectID="monitor-info";this._info=require("monitor-info");this._isUnity=this._info.isUnity();console.log("isUnity = "+this._isUnity);require("events").EventEmitter.call(this);this.on("~",function(){this.Stop()});this.Stop=function c(){this._timeout=null;if(!this._isUnity){for(var e=0;e<this.displays.length;++e){if(this.displays[e].GC1&&this.displays[e].rootWindow){a._info._X11.XSetFunction(a.displays[e].display,a.displays[e].GC1,GXclear);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,0,0,a.displays[e].right,0);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,a.displays[e].right,0,a.displays[e].right,a.displays[e].bottom);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,0,a.displays[e].bottom,a.displays[e].right,a.displays[e].bottom);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,0,0,0,a.displays[e].bottom);this._info._X11.XFlush(this.displays[e].display)}}}};this.Start=function b(){this._info.getInfo().then(function(f){a.displays=f;console.log(f.length+" displays");for(var e=0;e<f.length;++e){console.log("Width: "+f[e].right+", Height: "+f[e].bottom);f[e].rootWindow=a._info._X11.XRootWindow(f[e].display,f[e].screenId);if(a._isUnity){var g=a._info._X11.XWhitePixel(f[e].display,f[e].screenId).Val;f[e].window_top=a._info._X11.XCreateSimpleWindow(f[e].display,f[e].rootWindow,0,0,f[e].right,5,0,g,g);f[e].window_top.gc=a._info._X11.XCreateGC(f[e].display,f[e].window_top,0,0);a._info._X11.XSetLineAttributes(f[e].display,f[e].window_top.gc,10,0,1,1);a._info._X11.XSetSubwindowMode(f[e].display,f[e].window_top.gc,1);a._info.unDecorateWindow(f[e].display,f[e].window_top);a._info.setWindowSizeHints(f[e].display,f[e].window_top,0,0,f[e].right,5);f[e].window_right=a._info._X11.XCreateSimpleWindow(f[e].display,f[e].rootWindow,f[e].right-5,0,5,f[e].bottom,0,g,g);f[e].window_right.gc=a._info._X11.XCreateGC(f[e].display,f[e].window_right,0,0);a._info._X11.XSetLineAttributes(f[e].display,f[e].window_right.gc,10,0,1,1);a._info._X11.XSetSubwindowMode(f[e].display,f[e].window_right.gc,1);a._info.unDecorateWindow(f[e].display,f[e].window_right);a._info.setWindowSizeHints(f[e].display,f[e].window_right,f[e].right-5,0,5,f[e].bottom);f[e].window_left=a._info._X11.XCreateSimpleWindow(f[e].display,f[e].rootWindow,0,0,5,f[e].bottom,0,g,g);f[e].window_left.gc=a._info._X11.XCreateGC(f[e].display,f[e].window_left,0,0);a._info._X11.XSetLineAttributes(f[e].display,f[e].window_left.gc,10,0,1,1);a._info._X11.XSetSubwindowMode(f[e].display,f[e].window_left.gc,1);a._info.unDecorateWindow(f[e].display,f[e].window_left);a._info.setWindowSizeHints(f[e].display,f[e].window_left,0,0,5,f[e].bottom);f[e].window_bottom=a._info._X11.XCreateSimpleWindow(f[e].display,f[e].rootWindow,0,f[e].bottom-5,f[e].right,5,0,g,g);f[e].window_bottom.gc=a._info._X11.XCreateGC(f[e].display,f[e].window_bottom,0,0);a._info._X11.XSetLineAttributes(f[e].display,f[e].window_bottom.gc,10,0,1,1);a._info._X11.XSetSubwindowMode(f[e].display,f[e].window_bottom.gc,1);a._info.unDecorateWindow(f[e].display,f[e].window_bottom);a._info.setWindowSizeHints(f[e].display,f[e].window_bottom,0,f[e].bottom-5,f[e].right,5);a._info._X11.XMapWindow(f[e].display,f[e].window_top);a._info._X11.XMapWindow(f[e].display,f[e].window_right);a._info._X11.XMapWindow(f[e].display,f[e].window_left);a._info._X11.XMapWindow(f[e].display,f[e].window_bottom);a._info.setAlwaysOnTop(f[e].display,f[e].rootWindow,f[e].window_top);a._info.hideWindowIcon(f[e].display,f[e].rootWindow,f[e].window_top);a._info.setAlwaysOnTop(f[e].display,f[e].rootWindow,f[e].window_right);a._info.hideWindowIcon(f[e].display,f[e].rootWindow,f[e].window_right);a._info.setAlwaysOnTop(f[e].display,f[e].rootWindow,f[e].window_left);a._info.hideWindowIcon(f[e].display,f[e].rootWindow,f[e].window_left);a._info.setAlwaysOnTop(f[e].display,f[e].rootWindow,f[e].window_bottom);a._info.hideWindowIcon(f[e].display,f[e].rootWindow,f[e].window_bottom);a._info._X11.XFlush(f[e].display);f[e].borderState=0}else{f[e].GC1=a._info._X11.XCreateGC(f[e].display,f[e].rootWindow,0,0);f[e].borderState=0;a._info._X11.XSetForeground(f[e].display,f[e].GC1,a._info._X11.XWhitePixel(f[e].display,f[e].screenId).Val);a._info._X11.XSetLineAttributes(f[e].display,f[e].GC1,10,0,1,1);a._info._X11.XSetSubwindowMode(f[e].display,f[e].GC1,1)}}a._info._XEvent=a._info._gm.CreateVariable(192);a._timeout=setTimeout(a._isUnity?a.unity_drawBorder:a.timeoutHandler,250)})};this.timeoutHandler=function(){for(var e=0;e<a.displays.length;++e){a.displays[e].borderState=(a.displays[e].borderState+1)%8;a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].GC1,(a.displays[e].borderState==0||a.displays[e].borderState==4)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,0,0,a.displays[e].right/2,0);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].GC1,(a.displays[e].borderState==1||a.displays[e].borderState==5)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,a.displays[e].right/2,0,a.displays[e].right,0);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].GC1,(a.displays[e].borderState==2||a.displays[e].borderState==6)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,a.displays[e].right,0,a.displays[e].right,a.displays[e].bottom/2);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].GC1,(a.displays[e].borderState==3||a.displays[e].borderState==7)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,a.displays[e].right,a.displays[e].bottom/2,a.displays[e].right,a.displays[e].bottom);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].GC1,(a.displays[e].borderState==5||a.displays[e].borderState==1)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,0,a.displays[e].bottom,a.displays[e].right/2,a.displays[e].bottom);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].GC1,(a.displays[e].borderState==4||a.displays[e].borderState==0)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,a.displays[e].right/2,a.displays[e].bottom,a.displays[e].right,a.displays[e].bottom);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].GC1,(a.displays[e].borderState==7||a.displays[e].borderState==3)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,0,0,0,a.displays[e].bottom/2);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].GC1,(a.displays[e].borderState==6||a.displays[e].borderState==2)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].rootWindow,a.displays[e].GC1,0,a.displays[e].bottom/2,0,a.displays[e].bottom);a._info._X11.XFlush(a.displays[e].display)}a._timeout=setTimeout(a._isUnity?a.unity_drawBorder:a.timeoutHandler,400)};this.unity_drawBorder=function d(){for(var e=0;e<a.displays.length;++e){a.displays[e].borderState=(a.displays[e].borderState+1)%8;a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].window_top.gc,(a.displays[e].borderState==0||a.displays[e].borderState==4)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].window_top,a.displays[e].window_top.gc,0,0,a.displays[e].right/2,0);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].window_top.gc,(a.displays[e].borderState==1||a.displays[e].borderState==5)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].window_top,a.displays[e].window_top.gc,a.displays[e].right/2,0,a.displays[e].right,0);a._info._X11.XFlush(a.displays[e].display);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].window_right.gc,(a.displays[e].borderState==2||a.displays[e].borderState==6)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].window_right,a.displays[e].window_right.gc,0,0,0,a.displays[e].bottom/2);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].window_right.gc,(a.displays[e].borderState==3||a.displays[e].borderState==7)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].window_right,a.displays[e].window_right.gc,0,a.displays[e].bottom/2,0,a.displays[e].bottom);a._info._X11.XFlush(a.displays[e].display);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].window_bottom.gc,(a.displays[e].borderState==5||a.displays[e].borderState==1)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].window_bottom,a.displays[e].window_bottom.gc,0,0,a.displays[e].right/2,0);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].window_bottom.gc,(a.displays[e].borderState==4||a.displays[e].borderState==0)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].window_bottom,a.displays[e].window_bottom.gc,a.displays[e].right/2,0,a.displays[e].right,0);a._info._X11.XFlush(a.displays[e].display);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].window_left.gc,(a.displays[e].borderState==7||a.displays[e].borderState==3)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].window_left,a.displays[e].window_left.gc,0,0,0,a.displays[e].bottom/2);a._info._X11.XSetForeground(a.displays[e].display,a.displays[e].window_left.gc,(a.displays[e].borderState==6||a.displays[e].borderState==2)?16776960:16711680);a._info._X11.XDrawLine(a.displays[e].display,a.displays[e].window_left,a.displays[e].window_left.gc,0,a.displays[e].bottom/2,0,a.displays[e].bottom);a._info._X11.XFlush(a.displays[e].display)}a._timeout=setTimeout(a._isUnity?a.unity_drawBorder:a.timeoutHandler,400)}}switch(process.platform){case"win32":module.exports=new windows_monitorborder();break;case"linux":module.exports=new linux_monitorborder();break;default:break};
\ No newline at end of file
agents/modules_meshcore_min/power-monitor.min.js
new
+1
@@ -0,0 +1 @@
1
+function powerMonitor(){this._ObjectID="power-monitor";require("events").EventEmitter.call(this,true).createEvent("changed").createEvent("sx").createEvent("batteryLevel").createEvent("acdc").createEvent("display");this._i=setImmediate(function(a){require("user-sessions");delete a._i},this)}module.exports=new powerMonitor();
\ No newline at end of file
agents/modules_meshcore_min/smbios.min.js
new
+1
@@ -0,0 +1 @@
1
+try{Object.defineProperty(Array.prototype,"peek",{value:function(){return(this.length>0?this[this.length-1]:undefined)}})}catch(e){}try{Object.defineProperty(String.prototype,"replaceAll",{value:function replaceAll(b,a){return(this.split(b).join(a))}})}catch(e){}var RSMB=1381190978;var memoryLocation={1:"Other",2:"Unknown",3:"System Board",4:"ISA",5:"EISA",6:"PCI",7:"MCA",8:"PCMCIA",9:"Proprietary",10:"NuBus",160:"PC-98/C20",161:"PC-98/C24",162:"PC-98/E",163:"PC-98/LB"};var wakeReason=["Reserved","Other","Unknown","APM Timer","Modem Ring","LAN","Power Switch","PCI","AC Power"];function zeroLeftPad(c,b){if((b==null)&&(typeof(b)!="number")){return null}if(c==null){c=""}var d="";for(var a=0;a<b-c.length;a++){d+="0"}return d+c}function SMBiosTables(){this._ObjectID="SMBiosTable";if(process.platform=="win32"){this._marshal=require("_GenericMarshal");this._native=this._marshal.CreateNativeProxy("Kernel32.dll");this._native.CreateMethod("EnumSystemFirmwareTables");this._native.CreateMethod("GetSystemFirmwareTable")}if(process.platform=="linux"){this._canonicalizeData=function a(k){var n=k.toString().split("Header and Data:\x0A");var o=require("MemoryStream");var p=new o();for(var m=1;m<n.length;++m){var v=n[m].split("Strings:\x0A");var l=v[0].split("\x0A\x0A")[0].replaceAll("\x0A","").trim().replaceAll(" ","").replaceAll("\x09","");p.write(Buffer.from(l,"hex"));if(v.length>1){var r=v[1].split("\x0A\x0A")[0].split("\x0A");var s=[];for(var t in r){var u=r[t].trim().replaceAll(" ","").replaceAll("\x09","");if(!(u[0]=='"')){s.push(u)}}p.write(Buffer.from(s.join(""),"hex"));p.write(Buffer.from("00","hex"))}else{p.write(Buffer.from("0000","hex"))}}var q=p.buffer;q.ms=p;return(q)}}this._parse=function b(o){var n={};var m;var l=0;var o;var s=0;while(o&&l<o.length){var q=o[l];var p=o[l+1];if(!n[q]){n[q]=[]}n[q].push(o.slice(l+4,l+p));if(process.platform=="win32"){n[q].peek()._ext=m}l+=p;n[q].peek()._strings=[];while(o[l]!=0&&l<=o.length){var r=l;while(o[l++]!=0&&l<=o.length){}try{n[q].peek()._strings.push(o.slice(r,l).toString().trim())}catch(k){console.log("oops")}}l+=(n[q].peek()._strings.length==0)?2:1;++s}return(n)};this.get=function d(l){if(process.platform=="win32"){var q=this._native.GetSystemFirmwareTable(RSMB,0,0,0).Val;var o=this._marshal.CreatePointer()._size;var k=this._marshal.CreateVariable(q);var r=this._native.GetSystemFirmwareTable(RSMB,0,k,q).Val;var p=k.toBuffer();var m=k.Deref(4,4).toBuffer().readUInt32LE(0);pbyte=k.Deref(8,m);SMData=pbyte.toBuffer();if(l){l.apply(this,[this._parse(SMData)]);return}else{return(this._parse(SMData))}}if(process.platform=="linux"){var n=require("MemoryStream");this.child=require("child_process").execFile("/usr/sbin/dmidecode",["dmidecode","-u"]);this.child.SMBiosTable=this;this.child.ms=new n();this.child.ms.callback=l;this.child.ms.child=this.child;this.child.stdout.on("data",function(s){this.parent.ms.write(s)});this.child.on("exit",function(){this.ms.end()});this.child.ms.on("end",function(){if(this.buffer.length<300){if(this.callback){this.callback.apply(this.child.SMBiosTable,[])}}else{var t=this.child.SMBiosTable._canonicalizeData(this.buffer);var s=this.child.SMBiosTable._parse(t);if(this.callback){this.callback.apply(this.child.SMBiosTable,[s])}}});return}if(l){l.apply(this,[null]);return}else{return(null)}};this.parse=function g(k){var m={};try{m.processorInfo=this.processorInfo(k)}catch(l){}try{m.memoryInfo=this.memoryInfo(k)}catch(l){}try{m.systemInfo=this.systemInfo(k)}catch(l){}try{m.systemSlots=this.systemInfo(k)}catch(l){}try{m.amtInfo=this.amtInfo(k)}catch(l){}return m};this.processorInfo=function h(l){if(!l){throw ("no data")}var r=[];var q=["ERROR","Other","Unknown","CPU","ALU","DSP","GPU"];var t=["Unknown","Enabled","Disabled by user","Disabled by BIOS","Idle","Reserved","Reserved","Other"];var k=0;while(l[4]&&l[4].length>0){var n=l[4].pop();var o=n[20]&64;var s=n[20]&7;if(o){var m={_ObjectID:"SMBiosTables.processorInfo"};m.Processor=q[n[1]];m.MaxSpeed=n.readUInt16LE(16)+" Mhz";if(n[31]){m.Cores=n[31]}if(n[33]){m.Threads=n[33]}m.Populated=1;m.Status=t[s];m.Socket=n._strings[n[0]-1];m.Manufacturer=n._strings[n[3]-1];m.Version=n._strings[n[12]-1];r.push(m)}}return(r)};this.memoryInfo=function f(k){if(!k){throw ("no data")}var n={_ObjectID:"SMBiosTables.memoryInfo"};if(k[16]){var l=k[16].peek();n.location=memoryLocation[l[0]];if((n.maxCapacityKb=l.readUInt32LE(3))==2147483648){n.maxCapacityKb="A really big number"}}return(n)};this.systemInfo=function i(k){if(!k){throw ("no data")}var l={_ObjectID:"SMBiosTables.systemInfo"};if(k[1]){var m=k[1].peek();var n=m.slice(4,20);l.uuid=[zeroLeftPad(n.readUInt32LE(0).toString(16),8),zeroLeftPad(n.readUInt16LE(4).toString(16),4),zeroLeftPad(n.readUInt16LE(6).toString(16),4),zeroLeftPad(n.readUInt16BE(8).toString(16),4),zeroLeftPad(n.slice(10).toString("hex").toLowerCase(),12)].join("-");l.wakeReason=wakeReason[m[20]]}return(l)};this.systemSlots=function j(k){if(!k){throw ("no data")}var l=[];if(k[9]){while(k[9].length>0){var m=k[9].pop();l.push({name:m._strings[m[0]-1]})}}return(l)};this.amtInfo=function c(l){if(!l){throw ("no data")}var n={AMT:false};if(l[130]&&l[130].peek().slice(0,4).toString()=="$AMT"){var k=l[130].peek();n.AMT=k[4]?true:false;if(n.AMT){n.enabled=k[5]?true:false;n.storageRedirection=k[6]?true:false;n.serialOverLan=k[7]?true:false;n.kvm=k[14]?true:false;if(l[131].peek()&&l[131].peek().slice(52,56).toString()=="vPro"){var o=l[131].peek();if(o[0]&4){n.TXT=(o[0]&8)?true:false}if(o[0]&16){n.VMX=(o[0]&32)?true:false}n.MEBX=o.readUInt16LE(4).toString()+"."+o.readUInt16LE(6).toString()+"."+o.readUInt16LE(8).toString()+"."+o.readUInt16LE(10).toString();var m=o.slice(20,32);n.ManagementEngine=m.readUInt16LE(6).toString()+"."+m.readUInt16LE(4).toString()+"."+m.readUInt16LE(10).toString()+"."+m.readUInt16LE(8).toString()}}}return(n)};this.smTableTypes={0:"BIOS information",1:"System information",2:"Baseboard (or Module) information",4:"Processor information",5:"memory controller information",6:"Memory module information",7:"Cache information",8:"Port connector information",9:"System slots",10:"On board devices information",11:"OEM strings",12:"System configuration options",13:"BIOS language information",14:"Group associations",15:"System event log",16:"Physical memory array",17:"Memory device",18:"32bit memory error information",19:"Memory array mapped address",20:"Memory device mapped address",21:"Built-in pointing device",22:"Portable battery",23:"System reset",24:"Hardware security",25:"System power controls",26:"Voltage probe",27:"Cooling device",28:"Temperature probe",29:"Electrical current probe",30:"Out-of-band remote access",31:"Boot integrity services (BIS) entry point",32:"System boot information",33:"64bit memory error information",34:"Management device",35:"Management device component",36:"Management device threshold data",37:"Memory channel",38:"IPMI device information",39:"System power supply",40:"Additional information",41:"Onboard devices extended information",42:"Management controller host interface",126:"Inactive",127:"End-of-table"}}module.exports=new SMBiosTables();
\ No newline at end of file
agents/modules_meshcore_min/sysinfo.min.js
new
+1
@@ -0,0 +1 @@
1
+var PDH_FMT_LONG=256;var PDH_FMT_DOUBLE=512;var promise=require("promise");if(process.platform=="win32"){var GM=require("_GenericMarshal");GM.kernel32=GM.CreateNativeProxy("kernel32.dll");GM.kernel32.CreateMethod("GlobalMemoryStatusEx");GM.pdh=GM.CreateNativeProxy("pdh.dll");GM.pdh.CreateMethod("PdhAddEnglishCounterA");GM.pdh.CreateMethod("PdhCloseQuery");GM.pdh.CreateMethod("PdhCollectQueryData");GM.pdh.CreateMethod("PdhGetFormattedCounterValue");GM.pdh.CreateMethod("PdhGetFormattedCounterArrayA");GM.pdh.CreateMethod("PdhOpenQueryA");GM.pdh.CreateMethod("PdhRemoveCounter")}function windows_cpuUtilization(){var b=new promise(function(d,c){this._res=d;this._rej=c});b.counter=GM.CreateVariable(16);b.cpu=GM.CreatePointer();b.cpuTotal=GM.CreatePointer();var a=0;if((a=GM.pdh.PdhOpenQueryA(0,0,b.cpu).Val)!=0){b._rej(a);return}if((a=GM.pdh.PdhAddEnglishCounterA(b.cpu.Deref(),GM.CreateVariable("\\Processor(*)\\% Processor Time"),0,b.cpuTotal).Val)!=0){b._rej(a);return}if((a=GM.pdh.PdhCollectQueryData(b.cpu.Deref()).Val!=0)){b._rej(a);return}b._timeout=setTimeout(function(k){var m={cpus:[]};var d=GM.CreateVariable(4);var j=GM.CreateVariable(4);var c,l,h;var f;if((f=GM.pdh.PdhCollectQueryData(k.cpu.Deref()).Val!=0)){k._rej(f);return}if((f=GM.pdh.PdhGetFormattedCounterArrayA(k.cpuTotal.Deref(),PDH_FMT_DOUBLE,d,j,0).Val)==-2147481646){c=GM.CreateVariable(d.toBuffer().readUInt32LE())}else{k._rej(f);return}if((f=GM.pdh.PdhGetFormattedCounterArrayA(k.cpuTotal.Deref(),PDH_FMT_DOUBLE,d,j,c).Val)!=0){k._rej(f);return}for(var g=0;g<j.toBuffer().readUInt32LE();++g){h=c.Deref(g*24,24);l=h.Deref(0,GM.PointerSize).Deref();if(l.String=="_Total"){m.total=h.Deref(16,8).toBuffer().readDoubleLE()}else{m.cpus[parseInt(l.String)]=h.Deref(16,8).toBuffer().readDoubleLE()}}GM.pdh.PdhRemoveCounter(k.cpuTotal.Deref());GM.pdh.PdhCloseQuery(k.cpu.Deref());b._res(m)},100,b);return(b)}function windows_memUtilization(){var a=GM.CreateVariable(64);a.Deref(0,4).toBuffer().writeUInt32LE(64);GM.kernel32.GlobalMemoryStatusEx(a);var b={MemTotal:require("bignum").fromBuffer(a.Deref(8,8).toBuffer(),{endian:"little"}),MemFree:require("bignum").fromBuffer(a.Deref(16,8).toBuffer(),{endian:"little"})};b.percentFree=((b.MemFree.div(require("bignum")("1048576")).toNumber()/b.MemTotal.div(require("bignum")("1048576")).toNumber())*100);b.percentConsumed=((b.MemTotal.sub(b.MemFree).div(require("bignum")("1048576")).toNumber()/b.MemTotal.div(require("bignum")("1048576")).toNumber())*100);b.MemTotal=b.MemTotal.toString();b.MemFree=b.MemFree.toString();return(b)}function linux_cpuUtilization(){var g={cpus:[]};var d=require("fs").readFileSync("/proc/stat");var e=d.toString().split("\n");var a;var k,l;var h,c,j;for(var b in e){a=e[b].split(" ");if(!a[0].startsWith("cpu")){break}k=0,h=0;while(a[++k]==""){}for(l=k;l<a.length;++l){h+=parseInt(a[l])}c=parseInt(a[3+k]);j=(100-((c/h)*100));if(!g.total){g.total=j}else{g.cpus.push(j)}}var f=new promise(function(m,i){this._res=m;this._rej=i});f._res(g);return(f)}function linux_memUtilization(){var c={};var b=require("fs").readFileSync("/proc/meminfo").toString().split("\n");var d;for(var a in b){d=b[a].split(" ");switch(d[0]){case"MemTotal:":c.total=parseInt(d[d.length-2]);break;case"MemFree:":c.free=parseInt(d[d.length-2]);break}}c.percentFree=((c.free/c.total)*100);c.percentConsumed=(((c.total-c.free)/c.total)*100);return(c)}function macos_cpuUtilization(){var d=new promise(function(h,g){this._res=h;this._rej=g});var b=require("child_process").execFile("/bin/sh",["sh"]);b.stdout.str="";b.stdout.on("data",function(g){this.str+=g.toString()});b.stdin.write('top -l 1 | grep -E "^CPU"\nexit\n');b.waitExit();var c=b.stdout.str.split("\n");if(c[0].length>0){var f=c[0].split(":")[1];var a=f.split(",");var e=parseFloat(a[0].split("%")[0].trim())+parseFloat(a[1].split("%")[0].trim());d._res({total:e,cpus:[]})}else{d._rej("parse error")}return(d)}function macos_memUtilization(){var d={};var e=new promise(function(h,g){this._res=h;this._rej=g});var b=require("child_process").execFile("/bin/sh",["sh"]);b.stdout.str="";b.stdout.on("data",function(g){this.str+=g.toString()});b.stdin.write('top -l 1 | grep -E "^Phys"\nexit\n');b.waitExit();var c=b.stdout.str.split("\n");if(c[0].length>0){var f=c[0].split(":")[1];var a=f.split(",");d.MemTotal=parseInt(a[0].trim().split(" ")[0]);d.MemFree=parseInt(a[1].trim().split(" ")[0]);d.percentFree=((d.MemFree/d.MemTotal)*100);d.percentConsumed=(((d.MemTotal-d.MemFree)/d.MemTotal)*100);return(d)}else{throw ("Parse Error")}}switch(process.platform){case"linux":module.exports={cpuUtilization:linux_cpuUtilization,memUtilization:linux_memUtilization};break;case"win32":module.exports={cpuUtilization:windows_cpuUtilization,memUtilization:windows_memUtilization};break;case"darwin":module.exports={cpuUtilization:macos_cpuUtilization,memUtilization:macos_memUtilization};break};
\ No newline at end of file
agents/modules_meshcore_min/wifi-scanner-windows.min.js
new
+1
@@ -0,0 +1 @@
1
+function _Scan(){var f=this.Marshal.CreatePointer();this.Native.WlanEnumInterfaces(this.Handle,0,f);var a=f.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var d=f.Deref().Deref(8,532);var c=d.Deref(16,512).AnsiString;var e;switch(d.Deref(528,4).toBuffer().readUInt32LE(0)){case 0:e="NOT READY";break;case 1:e="CONNECTED";break;case 2:e="AD-HOC";break;case 3:e="DISCONNECTING";break;case 4:e="DISCONNECTED";break;case 5:e="ASSOCIATING";break;case 6:e="DISCOVERING";break;case 7:e="AUTHENTICATING";break;default:e="UNKNOWN";break}var b=d.Deref(0,16);if(this.Native.WlanScan(this.Handle,b,0,0,0).Val==0){return(true)}else{return(false)}}function AccessPoint(d,a,c,b){this.ssid=d;this.bssid=a;this.rssi=c;this.lq=b}AccessPoint.prototype.toString=function(){return(this.ssid+" ["+this.bssid+"]: "+this.lq)};function OnNotify(g){var h=g.Deref(0,4).toBuffer().readUInt32LE(0);var f=g.Deref(4,4).toBuffer().readUInt32LE(0);var c=g.Deref(8,16);if((h&8)&&(f==7)){var a=this.Parent.Marshal.CreatePointer();var k=this.Parent.Native.GetBSSList(this.Parent.Handle,c,0,3,0,0,a).Val;if(k==0){var n=a.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var j=a.Deref().Deref(4,4).toBuffer().readUInt32LE(0);for(i=0;i<j;++i){var d=a.Deref().Deref(8+(360*i),360);var m=d.Deref(4,32).String.trim();var b=d.Deref(40,6).HexString2;var l=d.Deref(56,4).toBuffer().readUInt32LE(0);var e=d.Deref(60,4).toBuffer().readUInt32LE(0);this.Parent.emit("Scan",new AccessPoint(m,b,l,e))}}}}function Wireless(){var a=require("events").inherits(this);this.Marshal=require("_GenericMarshal");this.Native=this.Marshal.CreateNativeProxy("wlanapi.dll");this.Native.CreateMethod("WlanOpenHandle");this.Native.CreateMethod("WlanGetNetworkBssList","GetBSSList");this.Native.CreateMethod("WlanRegisterNotification");this.Native.CreateMethod("WlanEnumInterfaces");this.Native.CreateMethod("WlanScan");this.Native.CreateMethod("WlanQueryInterface");var c=this.Marshal.CreatePointer();var b=this.Marshal.CreatePointer();this.Native.WlanOpenHandle(2,0,c,b);this.Handle=b.Deref();this._NOTIFY_PROXY_OBJECT=this.Marshal.CreateCallbackProxy(OnNotify,2);this._NOTIFY_PROXY_OBJECT.Parent=this;var d=this.Marshal.CreatePointer();var e=this.Native.WlanRegisterNotification(this.Handle,65535,0,this._NOTIFY_PROXY_OBJECT.Callback,this._NOTIFY_PROXY_OBJECT.State,0,d);a.createEvent("Scan");a.addMethod("Scan",_Scan);this.GetConnectedNetwork=function(){var n=this.Marshal.CreatePointer();console.log("Success = "+this.Native.WlanEnumInterfaces(this.Handle,0,n).Val);var h=n.Deref().Deref(0,4).toBuffer().readUInt32LE(0);var m=n.Deref().Deref(8,532);var l=m.Deref(16,512).AnsiString;var o=m.Deref(528,4).toBuffer().readUInt32LE(0);if(m.Deref(528,4).toBuffer().readUInt32LE(0)==1){var j=this.Marshal.CreatePointer();var q=this.Marshal.CreatePointer();var s=this.Marshal.CreatePointer();var k=m.Deref(0,16);var r=this.Native.WlanQueryInterface(this.Handle,k,7,0,j,q,s).Val;if(r==0){var f=q.Deref().Deref(524,32).String;var g=q.Deref().Deref(560,6).HexString;var p=q.Deref().Deref(576,4).toBuffer().readUInt32LE(0);return(new AccessPoint(f,g,0,p))}}throw ("GetConnectedNetworks: FAILED (not associated to a network)")};return(this)}module.exports=new Wireless();
\ No newline at end of file
agents/modules_meshcore_min/wifi-scanner.min.js
new
+1
@@ -0,0 +1 @@
1
+var MemoryStream=require("MemoryStream");var WindowsChildScript='var parent = require("ScriptContainer");var Wireless = require("wifi-scanner-windows");Wireless.on("Scan", function (ap) { parent.send(ap); });Wireless.Scan();';function AccessPoint(c,a,b){this.ssid=c;this.bssid=a;this.lq=b}AccessPoint.prototype.toString=function(){return("["+this.bssid+"]: "+this.ssid+" ("+this.lq+")")};function WiFiScanner(){var a=require("events").inherits(this);a.createEvent("accessPoint");this.hasWireless=function(){var d=false;var b=require("os").networkInterfaces();for(var c in b){if(b[c][0].type=="wireless"){d=true;break}}return(d)};this.Scan=function(){if(process.platform=="win32"){this.master=require("ScriptContainer").Create(15,ContainerPermissions.DEFAULT);this.master.parent=this;this.master.on("data",function(e){this.parent.emit("accessPoint",new AccessPoint(e.ssid,e.bssid,e.lq))});this.master.addModule("wifi-scanner-windows",getJSModule("wifi-scanner-windows"));this.master.ExecuteString(WindowsChildScript)}else{if(process.platform=="linux"){var c=require("os").networkInterfaces();var d=null;for(var b in c){if(c[b][0].type=="wireless"){d=b;break}}if(d!=null){this.child=require("child_process").execFile("/sbin/iwlist",["iwlist",d,"scan"]);this.child.parent=this;this.child.ms=new MemoryStream();this.child.ms.parent=this.child;this.child.stdout.on("data",function(e){this.parent.ms.write(e)});this.child.on("exit",function(){this.ms.end()});this.child.ms.on("end",function(){var l=this.buffer.toString();tokens=l.split(" - Address: ");for(var h in tokens){if(h==0){continue}var i=tokens[h].split("\n");var e=i[0];var f;var g;for(var j in i){j=i[j].trim();j=j.trim();if(j.startsWith("ESSID:")){g=j.slice(7,j.length-1);if(g=="<hidden>"){g=""}}if(j.startsWith("Signal level=")){f=j.slice(13,j.length-4)}else{if(j.startsWith("Quality=")){f=j.slice(8,10);var k=j.slice(11,13)}}}this.parent.parent.emit("accessPoint",new AccessPoint(g,e,f))}})}}}}}module.exports=WiFiScanner;
\ No newline at end of file
agents/modules_meshcore_min/win-console.min.js
new
+1
@@ -0,0 +1 @@
1
+var TrayIconFlags={NIF_MESSAGE:1,NIF_ICON:2,NIF_TIP:4,NIF_STATE:8,NIF_INFO:16,NIF_GUID:32,NIF_REALTIME:64,NIF_SHOWTIP:128,NIM_ADD:0,NIM_MODIFY:1,NIM_DELETE:2,NIM_SETFOCUS:3,NIM_SETVERSION:4};var NOTIFYICON_VERSION_4=4;var MessageTypes={WM_APP:32768,WM_USER:1024};function WindowsConsole(){if(process.platform=="win32"){this._ObjectID="win-console";this._Marshal=require("_GenericMarshal");this._kernel32=this._Marshal.CreateNativeProxy("kernel32.dll");this._user32=this._Marshal.CreateNativeProxy("user32.dll");this._kernel32.CreateMethod("GetConsoleWindow");this._kernel32.CreateMethod("GetCurrentThread");this._user32.CreateMethod("ShowWindow");this._user32.CreateMethod("LoadImageA");this._user32.CreateMethod({method:"GetMessageA",threadDispatch:1});this._shell32=this._Marshal.CreateNativeProxy("Shell32.dll");this._shell32.CreateMethod("Shell_NotifyIconA");this._handle=this._kernel32.GetConsoleWindow();this.minimize=function(){this._user32.ShowWindow(this._handle,6)};this.restore=function(){this._user32.ShowWindow(this._handle,9)};this.hide=function(){this._user32.ShowWindow(this._handle,0)};this.show=function(){this._user32.ShowWindow(this._handle,5)};this._loadicon=function(c){var b=this._user32.LoadImageA(0,this._Marshal.CreateVariable(c),1,0,0,16|32768|64);return(b)};this.SetTrayIcon=function a(h){var b=this._Marshal.CreateVariable(this._Marshal.PointerSize==4?508:528);b.toBuffer().writeUInt32LE(b._size,0);var n=TrayIconFlags.NIF_TIP|TrayIconFlags.NIF_MESSAGE;h.filter=MessageTypes.WM_APP+1;b.Deref(this._Marshal.PointerSize==4?16:24,4).toBuffer().writeUInt32LE(h.filter);if(!h.noBalloon){n|=TrayIconFlags.NIF_INFO}if(h.icon){n|=TrayIconFlags.NIF_ICON;var c=b.Deref(this._Marshal.PointerSize==4?20:32,this._Marshal.PointerSize);h.icon.pointerBuffer().copy(c.toBuffer())}b.Deref(this._Marshal.PointerSize*2,4).toBuffer().writeUInt32LE(1);b.Deref(this._Marshal.PointerSize==4?12:20,4).toBuffer().writeUInt32LE(n);b.Deref(this._Marshal.PointerSize==4?416:432,4).toBuffer().writeUInt32LE(NOTIFYICON_VERSION_4);var m=b.Deref(this._Marshal.PointerSize==4?24:40,128);var k=b.Deref(this._Marshal.PointerSize==4?160:176,256);var l=b.Deref(this._Marshal.PointerSize==4?420:436,64);if(h.szTip){Buffer.from(h.szTip).copy(m.toBuffer())}if(h.szInfo){Buffer.from(h.szInfo).copy(k.toBuffer())}if(h.szInfoTitle){Buffer.from(h.szInfoTitle).copy(l.toBuffer())}var d=require("win-message-pump");retVal={_ObjectID:"WindowsConsole.TrayIcon",MessagePump:new d(h)};var j=require("events").inherits(retVal);j.createEvent("ToastClicked");j.createEvent("IconHover");j.createEvent("ToastDismissed");retVal.Options=h;retVal.MessagePump.TrayIcon=retVal;retVal.MessagePump.NotifyData=b;retVal.MessagePump.WindowsConsole=this;retVal.MessagePump.on("exit",function e(o){console.log("Pump Exited");if(this.TrayIcon){this.TrayIcon.remove()}});retVal.MessagePump.on("hwnd",function f(o){h.hwnd=o;o.pointerBuffer().copy(this.NotifyData.Deref(this.WindowsConsole._Marshal.PointerSize,this.WindowsConsole._Marshal.PointerSize).toBuffer());if(this.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_ADD,this.NotifyData).Val==0){}});retVal.MessagePump.on("message",function g(p){if(p.message==this.TrayIcon.Options.filter){var o=false;if(p.wparam==1&&p.lparam==1029){this.TrayIcon.emit("ToastClicked");o=true}if(p.wparam==1&&p.lparam==512){this.TrayIcon.emit("IconHover");o=true}if(this.TrayIcon.Options.balloonOnly&&p.wparam==1&&(p.lparam==1028||p.lparam==1029)){this.TrayIcon.emit("ToastDismissed");this.TrayIcon.remove();o=true}}});retVal.remove=function i(){this.MessagePump.WindowsConsole._shell32.Shell_NotifyIconA(TrayIconFlags.NIM_DELETE,this.MessagePump.NotifyData);this.MessagePump.stop();delete this.MessagePump.TrayIcon;delete this.MessagePump};return(retVal)}}}module.exports=new WindowsConsole();
\ No newline at end of file
agents/modules_meshcore_min/win-info.min.js
new
+1
@@ -0,0 +1 @@
1
+var promise=require("promise");function qfe(){var a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","qfe","list","full","/FORMAT:CSV"]);a.stdout.str="";a.stdout.on("data",function(i){this.str+=i.toString()});a.stderr.str="";a.stderr.on("data",function(i){this.str+=i.toString()});a.waitExit();var e=a.stdout.str.trim().split("\r\n");var d=e[0].split(",");var b,c;var h;var g=[];for(b=1;b<e.length;++b){var f={};h=e[b].split(",");for(c=0;c<d.length;++c){if(h[c]){f[d[c]]=h[c]}}g.push(f)}return(g)}function av(){var a=require("child_process").execFile(process.env.windir+"\\System32\\wbem\\wmic.exe",["wmic","/Namespace:\\\\root\\SecurityCenter2","Path","AntiVirusProduct","get","/FORMAT:CSV"]);a.stdout.str="";a.stdout.on("data",function(i){this.str+=i.toString()});a.stderr.str="";a.stderr.on("data",function(i){this.str+=i.toString()});a.waitExit();var e=a.stdout.str.trim().split("\r\n");var d=e[0].split(",");var b,c;var j;var g=[];for(b=1;b<e.length;++b){var f={};var h={};j=e[b].split(",");for(c=0;c<d.length;++c){if(j[c]!=undefined){f[d[c].trim()]=j[c]}}h.product=f.displayName;h.updated=(parseInt(f.productState)&16)==0;h.enabled=(parseInt(f.productState)&4096)==4096;g.push(h)}return(g)}function defrag(a){var c=new promise(function(e,d){this._res=e;this._rej=d});var b="";switch(require("os").arch()){case"x64":if(require("_GenericMarshal").PointerSize==4){c._rej("Cannot defrag volume on 64 bit Windows from 32 bit application");return(c)}else{b=process.env.windir+"\\System32\\defrag.exe"}break;case"ia32":b=process.env.windir+"\\System32\\defrag.exe";break;default:c._rej(require("os").arch()+" not supported");return(c);break}c.child=require("child_process").execFile(process.env.windir+"\\System32\\defrag.exe",["defrag",a.volume+" /A"]);c.child.promise=c;c.child.promise.options=a;c.child.stdout.str="";c.child.stdout.on("data",function(d){this.str+=d.toString()});c.child.stderr.str="";c.child.stderr.on("data",function(d){this.str+=d.toString()});c.child.on("exit",function(d){var f=this.stdout.str.trim().split("\r\n");var g={volume:this.promise.options.volume};for(var e in f){var h=f[e].split("=");if(h.length==2){switch(h[0].trim().toLowerCase()){case"volume size":g.size=h[1];break;case"free space":g.free=h[1];break;case"total fragmented space":g.fragmented=h[1];break;case"largest free space size":g.largestFragment=h[1];break}}}this.promise._res(g)});return(c)}function regQuery(b,d,c){try{return(require("win-registry").QueryKey(b,d,c))}catch(a){return(null)}}function pendingReboot(){var c=null;var b=null;var a=require("win-registry").HKEY;if(regQuery(a.LocalMachine,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing","RebootPending")!=null){b="Component Based Servicing"}else{if(regQuery(a.LocalMachine,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WindowsUpdate","RebootRequired")){b="Windows Update"}else{if((c=regQuery(a.LocalMachine,"SYSTEM\\CurrentControlSet\\Control\\Session Manager","PendingFileRenameOperations"))!=null&&c!=0&&c!=""){b="File Rename"}else{if(regQuery(a.LocalMachine,"SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ActiveComputerName","ComputerName")!=regQuery(a.LocalMachine,"SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ComputerName","ComputerName")){b="System Rename"}}}}return(b)}function installedApps(){var b=require("promise");var c=new b(function(d,e){this._resolve=d;this._reject=e});var a=" var reg = require('win-registry'); var result = []; var val, tmp; var items = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall'); for (var key in items.subkeys) { val = {}; try { val.name = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\' + items.subkeys[key], 'DisplayName'); } catch(e) { continue; } try { val.version = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\' + items.subkeys[key], 'DisplayVersion'); if (val.version == '') { delete val.version; } } catch(e) { } try { val.location = reg.QueryKey(reg.HKEY.LocalMachine, 'SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\' + items.subkeys[key], 'InstallLocation'); if (val.location == '') { delete val.location; } } catch(e) { } result.push(val); } console.log(JSON.stringify(result,'', 1));process.exit();";c.child=require("child_process").execFile(process.execPath,[process.execPath.split("\\").pop().split(".exe")[0],'-exec "'+a+'"']);c.child.promise=c;c.child.stdout.str="";c.child.stdout.on("data",function(d){this.str+=d.toString()});c.child.on("exit",function(d){this.promise._resolve(JSON.parse(this.stdout.str.trim()))});return(c)}if(process.platform=="win32"){module.exports={qfe:qfe,av:av,defrag:defrag,pendingReboot:pendingReboot,installedApps:installedApps}}else{var not_supported=function(){throw (process.platform+" not supported")};module.exports={qfe:not_supported,av:not_supported,defrag:not_supported,pendingReboot:not_supported,installedApps:not_supported}};
\ No newline at end of file
agents/modules_meshcore_min/win-terminal.min.js
new
+1
@@ -0,0 +1 @@
1
+var promise=require("promise");var duplex=require("stream").Duplex;var SW_HIDE=0;var SW_MINIMIZE=6;var STARTF_USESHOWWINDOW=1;var STD_INPUT_HANDLE=-10;var STD_OUTPUT_HANDLE=-11;var EVENT_CONSOLE_CARET=16385;var EVENT_CONSOLE_END_APPLICATION=16391;var WINEVENT_OUTOFCONTEXT=0;var WINEVENT_SKIPOWNPROCESS=2;var CREATE_NEW_PROCESS_GROUP=512;var EVENT_CONSOLE_UPDATE_REGION=16386;var EVENT_CONSOLE_UPDATE_SIMPLE=16387;var EVENT_CONSOLE_UPDATE_SCROLL=16388;var EVENT_CONSOLE_LAYOUT=16389;var EVENT_CONSOLE_START_APPLICATION=16390;var KEY_EVENT=1;var MAPVK_VK_TO_VSC=0;var WM_QUIT=18;var GM=require("_GenericMarshal");var si=GM.CreateVariable(GM.PointerSize==4?68:104);var pi=GM.CreateVariable(GM.PointerSize==4?16:24);si.Deref(0,4).toBuffer().writeUInt32LE(GM.PointerSize==4?68:104);si.Deref(GM.PointerSize==4?48:64,2).toBuffer().writeUInt16LE(SW_HIDE|SW_MINIMIZE);si.Deref(GM.PointerSize==4?44:60,4).toBuffer().writeUInt32LE(STARTF_USESHOWWINDOW);var MSG=GM.CreateVariable(GM.PointerSize==4?28:48);function windows_terminal(){this._ObjectID="windows_terminal";this._user32=GM.CreateNativeProxy("User32.dll");this._user32.CreateMethod("DispatchMessageA");this._user32.CreateMethod("GetMessageA");this._user32.CreateMethod("MapVirtualKeyA");this._user32.CreateMethod("PostThreadMessageA");this._user32.CreateMethod("SetWinEventHook");this._user32.CreateMethod("ShowWindow");this._user32.CreateMethod("TranslateMessage");this._user32.CreateMethod("UnhookWinEvent");this._user32.CreateMethod("VkKeyScanA");this._user32.terminal=this;this._kernel32=GM.CreateNativeProxy("Kernel32.dll");this._kernel32.CreateMethod("AllocConsole");this._kernel32.CreateMethod("CreateProcessA");this._kernel32.CreateMethod("CloseHandle");this._kernel32.CreateMethod("FillConsoleOutputAttribute");this._kernel32.CreateMethod("FillConsoleOutputCharacterA");this._kernel32.CreateMethod("GetConsoleScreenBufferInfo");this._kernel32.CreateMethod("GetConsoleWindow");this._kernel32.CreateMethod("GetLastError");this._kernel32.CreateMethod("GetStdHandle");this._kernel32.CreateMethod("GetThreadId");this._kernel32.CreateMethod("ReadConsoleOutputA");this._kernel32.CreateMethod("SetConsoleCursorPosition");this._kernel32.CreateMethod("SetConsoleScreenBufferSize");this._kernel32.CreateMethod("SetConsoleWindowInfo");this._kernel32.CreateMethod("TerminateProcess");this._kernel32.CreateMethod("WaitForSingleObject");this._kernel32.CreateMethod("WriteConsoleInputA");var b=0;var c=0;this._scrx=0;this._scry=0;this.SendCursorUpdate=function(){var g=GM.CreateVariable(22);if(this._kernel32.GetConsoleScreenBufferInfo(this._stdoutput,g).Val==0){return}if(g.Deref(4,2).toBuffer().readUInt16LE()!=this.currentX||g.Deref(6,2).toBuffer().readUInt16LE()!=this.currentY){this.currentX=g.Deref(4,2).toBuffer().readUInt16LE();this.currentY=g.Deref(6,2).toBuffer().readUInt16LE()}};this.ClearScreen=function(){var h=GM.CreateVariable(22);if(this._kernel32.GetConsoleScreenBufferInfo(this._stdoutput,h).Val==0){return}var i=GM.CreateVariable(4);var j=h.Deref(0,2).toBuffer().readUInt16LE(0)*h.Deref(2,2).toBuffer().readUInt16LE(0);var g=GM.CreateVariable(4);if(this._kernel32.FillConsoleOutputCharacterA(this._stdoutput,32,j,i.Deref(0,4).toBuffer().readUInt32LE(),g).Val==0){return}if(this._kernel32.GetConsoleScreenBufferInfo(this._stdoutput,h).Val==0){return}if(this._kernel32.FillConsoleOutputAttribute(this._stdoutput,h.Deref(8,2).toBuffer().readUInt16LE(0),j,i.Deref(0,4).toBuffer().readUInt32LE(),g).Val==0){return}this._kernel32.SetConsoleCursorPosition(this._stdoutput,i.Deref(0,4).toBuffer().readUInt32LE());var k=GM.CreateVariable(8);var l=h.Deref(10,8).toBuffer();k.Deref(4,2).toBuffer().writeUInt16LE(l.readUInt16LE(4)-l.readUInt16LE(0));k.Deref(6,2).toBuffer().writeUInt16LE(l.readUInt16LE(6)-l.readUInt16LE(2));this._kernel32.SetConsoleWindowInfo(this._stdoutput,1,k)};this.PowerShellCapable=function(){if(require("os").arch()=="x64"){return(require("fs").existsSync(process.env.windir+"\\SysWow64\\WindowsPowerShell\\v1.0\\powershell.exe"))}else{return(require("fs").existsSync(process.env.windir+"\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"))}};this.StartEx=function d(h,g,k){if(this._stream!=null){throw ("Concurrent terminal sessions are not supported on Windows.")}this.stopping=null;if(this._kernel32.GetConsoleWindow().Val==0){if(this._kernel32.AllocConsole().Val==0){throw ("AllocConsole failed with: "+this._kernel32.GetLastError().Val)}}this._stdinput=this._kernel32.GetStdHandle(STD_INPUT_HANDLE);this._stdoutput=this._kernel32.GetStdHandle(STD_OUTPUT_HANDLE);this._connected=false;var i=GM.CreateVariable(4);i.Deref(0,2).toBuffer().writeUInt16LE(h);i.Deref(2,2).toBuffer().writeUInt16LE(g);var j=GM.CreateVariable(8);j.Deref(4,2).toBuffer().writeUInt16LE(h-1);j.Deref(6,2).toBuffer().writeUInt16LE(g-1);if(this._kernel32.SetConsoleWindowInfo(this._stdoutput,1,j).Val==0){throw ("Failed to set Console Screen Size")}if(this._kernel32.SetConsoleScreenBufferSize(this._stdoutput,i.Deref(0,4).toBuffer().readUInt32LE()).Val==0){throw ("Failed to set Console Buffer Size")}this._user32.ShowWindow(this._kernel32.GetConsoleWindow().Val,SW_HIDE);this.ClearScreen();this._hookThread(k).then(function(){this.terminal.StartCommand(this.userArgs[0])},console.log);this._stream=new duplex({write:function(l,m){if(!this.terminal.connected){if(!this._promise.chunk){this._promise.chunk=[]}if(typeof(l)=="string"){this._promise.chunk.push(l)}else{this._promise.chunk.push(Buffer.alloc(l.length));l.copy(this._promise.chunk.peek())}this._promise.chunk.peek().flush=m;this._promise.then(function(){var n;while(this.chunk.length>0){n=this.chunk.shift();this.terminal._WriteBuffer(n);n.flush()}})}else{this.terminal._WriteBuffer(l);m()}return(true)},"final":function(l){var m=this.terminal._stop();m.__flush=l;m.then(function(){this.__flush()})}});this._stream.terminal=this;this._stream._promise=new promise(function(m,l){this._res=m;this._rej=l});this._stream._promise.terminal=this;this._stream.prependOnceListener("end",function(){this.terminal._stream=null});return(this._stream)};this.Start=function d(h,g){return(this.StartEx(h,g,process.env.windir+"\\System32\\cmd.exe"))};this.StartPowerShell=function f(h,g){if(require("os").arch()=="x64"){return(this.StartEx(h,g,process.env.windir+"\\SysWow64\\WindowsPowerShell\\v1.0\\powershell.exe"))}else{return(this.StartEx(h,g,process.env.windir+"\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"))}};this._stop=function(){if(this.stopping){return(this.stopping)}this._ConsoleWinEventProc.removeAllListeners("GlobalCallback");this.stopping=new promise(function(i,h){this._res=i;this._rej=h});var g=this._kernel32.GetThreadId(this._user32.SetWinEventHook.async.thread()).Val;this._user32.PostThreadMessageA(g,WM_QUIT,0,0);this._stream.emit("end");return(this.stopping)};this._hookThread=function(){var i=new promise(function(k,j){this._res=k;this._rej=j});i.userArgs=[];for(var g in arguments){i.userArgs.push(arguments[g])}i.terminal=this;this._ConsoleWinEventProc=GM.GetGenericGlobalCallback(7);this._ConsoleWinEventProc.terminal=this;var h=this._user32.SetWinEventHook.async(EVENT_CONSOLE_CARET,EVENT_CONSOLE_END_APPLICATION,0,this._ConsoleWinEventProc,0,0,WINEVENT_OUTOFCONTEXT|WINEVENT_SKIPOWNPROCESS);h.ready=i;h.terminal=this;h.then(function(j){if(j.Val==0){this.ready._rej("Error calling SetWinEventHook")}else{this.terminal.hwinEventHook=j;this.ready._res();this.terminal._GetMessage()}});this._ConsoleWinEventProc.on("GlobalCallback",function(l,k,m,p,n,o,r){if(!this.terminal.hwinEventHook||this.terminal.hwinEventHook.Val!=l.Val){return}var j=null;switch(k.Val){case EVENT_CONSOLE_CARET:break;case EVENT_CONSOLE_UPDATE_REGION:if(!this.terminal.connected){this.terminal.connected=true;this.terminal._stream._promise._res()}if(this.terminal._scrollTimer==null){j=this.terminal._GetScreenBuffer(LOWORD(p.Val),HIWORD(p.Val),LOWORD(n.Val),HIWORD(n.Val));this.terminal._SendDataBuffer(j)}break;case EVENT_CONSOLE_UPDATE_SIMPLE:var q={data:[Buffer.alloc(1,LOWORD(n.Val))],attributes:[HIWORD(n.Val)],width:1,height:1,x:LOWORD(p.Val),y:HIWORD(p.Val)};this.terminal._SendDataBuffer(q);break;case EVENT_CONSOLE_UPDATE_SCROLL:this.terminal._SendScroll(p.Val,n.Val);break;case EVENT_CONSOLE_LAYOUT:break;case EVENT_CONSOLE_START_APPLICATION:break;case EVENT_CONSOLE_END_APPLICATION:if(p.Val==this.terminal._hProcessID){this.terminal._hProcess=null;this.terminal._stop().then(function(){console.log("STOPPED")})}break;default:console.log("Unknown event: "+k.Val);break}});return(i)};this._GetMessage=function(){if(this._user32.abort){console.log("aborting loop");return}this._user32.GetMessageA.async(this._user32.SetWinEventHook.async,MSG,0,0,0).then(function(g){if(g.Val!=0){if(g.Val==-1){}else{this.nativeProxy._user32.TranslateMessage.async(this.nativeProxy.user32.SetWinEventHook.async,MSG).then(function(){this.nativeProxy._user32.DispatchMessageA.async(this.nativeProxy.user32.SetWinEventHook.async,MSG).then(function(){this.nativeProxy.terminal._GetMessage()},console.log)},console.log)}}else{this.nativeProxy.UnhookWinEvent.async(this.nativeProxy.terminal._user32.SetWinEventHook.async,this.nativeProxy.terminal.hwinEventHook).then(function(){if(this.nativeProxy.terminal._hProcess==null){return}this.nativeProxy.terminal.stopping._res();if(this.nativeProxy.terminal._kernel32.TerminateProcess(this.nativeProxy.terminal._hProcess,1067).Val==0){var h=this.nativeProxy.terminal._kernel32.GetLastError().Val;console.log("Unable to kill Terminal Process, error: "+h)}this.nativeProxy.terminal.stopping=null},function(h){console.log("REJECTED_UnhookWinEvent: "+h)})}},function(g){console.log("REJECTED_GETMessage: "+g)})};this._WriteBuffer=function(g){for(var h=0;h<g.length;++h){if(typeof(g)=="string"){this._WriteCharacter(g.charCodeAt(h),false)}else{this._WriteCharacter(g[h],false)}}};this._WriteCharacter=function(i,g){var j=GM.CreateVariable(20);j.Deref(0,2).toBuffer().writeUInt16LE(KEY_EVENT);j.Deref(4,4).toBuffer().writeUInt16LE(1);j.Deref(16,4).toBuffer().writeUInt32LE(g);j.Deref(14,1).toBuffer()[0]=i;j.Deref(8,2).toBuffer().writeUInt16LE(1);j.Deref(10,2).toBuffer().writeUInt16LE(this._user32.VkKeyScanA(i).Val);j.Deref(12,2).toBuffer().writeUInt16LE(this._user32.MapVirtualKeyA(this._user32.VkKeyScanA(i).Val,MAPVK_VK_TO_VSC).Val);var h=GM.CreateVariable(4);if(this._kernel32.WriteConsoleInputA(this._stdinput,j,1,h).Val==0){return(false)}j.Deref(4,4).toBuffer().writeUInt16LE(0);return(this._kernel32.WriteConsoleInputA(this._stdinput,j,1,h).Val!=0)};this._GetScreenBuffer=function(t,u,g,h){var j=GM.CreateVariable(22);if(this._kernel32.GetConsoleScreenBufferInfo(this._stdoutput,j).Val==0){throw ("Error getting screen buffer info")}var o=j.Deref(14,2).toBuffer().readUInt16LE()-j.Deref(10,2).toBuffer().readUInt16LE()+1;var n=j.Deref(16,2).toBuffer().readUInt16LE()-j.Deref(12,2).toBuffer().readUInt16LE()+1;if(arguments[3]==null){t=0;u=0;g=o-1;h=n-1}else{if(this._scrx!=0){t+=this._scrx;g+=this._scrx}if(this._scry!=0){u+=this._scry;h+=this._scry}this._scrx=this._scry=0}var m=GM.CreateVariable((g-t+1)*(h-u+1)*4);var r=GM.CreateVariable(4);r.Deref(0,2).toBuffer().writeUInt16LE(g-t+1,0);r.Deref(2,2).toBuffer().writeUInt16LE(h-u+1,0);var s=GM.CreateVariable(4);s.Deref(0,2).toBuffer().writeUInt16LE(0,0);s.Deref(2,2).toBuffer().writeUInt16LE(0,0);var p=GM.CreateVariable(8);p.buffer=p.toBuffer();p.buffer.writeUInt16LE(t,0);p.buffer.writeUInt16LE(u,2);p.buffer.writeUInt16LE(g,4);p.buffer.writeUInt16LE(h,6);if(this._kernel32.ReadConsoleOutputA(this._stdoutput,m,r.Deref(0,4).toBuffer().readUInt32LE(),s.Deref(0,4).toBuffer().readUInt32LE(),p).Val==0){throw ("Unable to read Console Output")}var q={data:[],attributes:[],width:g-t+1,height:h-u+1,x:t,y:u};var w,z,k,i,v,l=g-t+1;for(z=0;z<=(h-u);++z){q.data.push(Buffer.alloc(l));q.attributes.push(Buffer.alloc(l));k=m.Deref(z*l*4,l*4).toBuffer();for(w=0;w<l;++w){q.data.peek()[w]=k[w*4];q.attributes.peek()[w]=k[2+(w*4)]}}return(q)};this._SendDataBuffer=function(h){var i,j,g;for(i=0;i<h.height;++i){j=h.data[i];g=h.attributes[i];j.s=j.toString();this._stream.push(TranslateLine(h.x+1,h.y+i+1,j,g))}};this._SendScroll=function a(h,j){if(this._scrollTimer){return}var l=GM.CreateVariable(22);if(this._kernel32.GetConsoleScreenBufferInfo(this._stdoutput,l).Val==0){throw ("Error getting screen buffer info")}var n=l.Deref(14,2).toBuffer().readUInt16LE()-l.Deref(10,2).toBuffer().readUInt16LE()+1;var m=l.Deref(16,2).toBuffer().readUInt16LE()-l.Deref(12,2).toBuffer().readUInt16LE()+1;this._stream.push(GetEsc("H",[m-1,0]));for(var k=0;k>m;++k){this._stream.push(Buffer.from("\r\n"))}var g=this._GetScreenBuffer(0,0,n-1,m-1);this._SendDataBuffer(g);this._scrollTimer=setTimeout(function(q,p,o){var i=q._GetScreenBuffer(0,0,p-1,o-1);q._SendDataBuffer(i);q._scrollTimer=null},250,this,n,m)};this.StartCommand=function e(g){if(this._kernel32.CreateProcessA(GM.CreateVariable(g),0,0,0,1,CREATE_NEW_PROCESS_GROUP,0,0,si,pi).Val==0){console.log("Error Spawning CMD");return}this._kernel32.CloseHandle(pi.Deref(GM.PointerSize,GM.PointerSize).Deref());this._hProcess=pi.Deref(0,GM.PointerSize).Deref();this._hProcessID=pi.Deref(GM.PointerSize==4?8:16,4).toBuffer().readUInt32LE()}}function LOWORD(a){return(a&65535)}function HIWORD(a){return((a>>16)&65535)}function GetEsc(b,a){return(Buffer.from("\x1B["+a.join(";")+b))}function MeshConsole(a){require("MeshAgent").SendCommand({action:"msg",type:"console",value:JSON.stringify(a)})}function TranslateLine(r,s,f,a){var m,l,e,q,j,c,n,k,d,p,h,b,g=[],o=[GetEsc("H",[s,r])];if(typeof a=="number"){a=[a]}for(m=0;m<f.length;m++){if(n!=a[m]){k=(a[m]&7);k=((k&1)<<2)+(k&2)+((k&4)>>2);d=(a[m]&112)>>4;d=((d&1)<<2)+(d&2)+((d&4)>>2);p=(a[m]&16384);h=(a[m]&8)>>3;b=(a[m]&128);if(p!=q){if(p!=0){g.push(7)}else{g.push(0);l=7;e=0;j=0;c=0}q=p}if(k!=l){g.push(k+30);l=k}if(d!=e){g.push(d+40);e=d}if(h!=j){g.push(2-h);j=h}if(b!=c){if(b==0){g.push(e+40)}else{g.push(e+100);c=b}}if(g.length>0){o.push(GetEsc("m",g));g=[]}n=a[m]}o.push(Buffer.from(String.fromCharCode(f[m])))}return Buffer.concat(o)}module.exports=new windows_terminal();
\ No newline at end of file
views/default-min.handlebars
+1
-1
@@ -1 +1 @@
1
-<!DOCTYPE html> <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta name="viewport" content="user-scalable=1.0,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="format-detection" content="telephone=no"> <link rel="shortcut icon" type="image/x-icon" href="{{{domainurl}}}favicon.ico"> <link keeplink="1" type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS"> <style>.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f;}.ol-mouse-position{top:8px;right:8px;position:absolute;}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute;}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width;}.ol-overlay-container{will-change:left,right,top,bottom;}.ol-unsupported{display:none;}.ol-unselectable, .ol-viewport{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;}.ol-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing;}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab;}.ol-control{position:absolute;background-color:rgba(255,255,255,.4);border-radius:4px;padding:2px;}.ol-control:hover{background-color:rgba(255,255,255,.6);}.ol-zoom{top:.5em;right:.5em;}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear;}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s;}.ol-zoom-extent{top:4.643em;left:.5em;}.ol-full-screen{right:.5em;top:.5em;}@media print{.ol-control{display:none;}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px;}.ol-control button::-moz-focus-inner{border:none;padding:0;}.ol-zoom-extent button{line-height:1.4em;}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform;}.ol-touch .ol-control button{font-size:1.5em;}.ol-touch .ol-zoom-extent{top:5.5em;}.ol-control button:focus, .ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7);}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0;}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px;}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em);}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff;}.ol-attribution li{display:inline;list-style:none;line-height:inherit;}.ol-attribution li:not(:last-child):after{content:" ";}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle;}.ol-attribution button, .ol-attribution ul{display:inline-block;}.ol-attribution.ol-collapsed ul{display:none;}.ol-attribution.ol-logo-only ul{display:block;}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8);}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em;}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em;}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em;}.ol-attribution.ol-logo-only button, .ol-attribution.ol-uncollapsible button{display:none;}.ol-zoomslider{top:4.5em;left:.5em;height:200px;}.ol-zoomslider button{position:relative;height:10px;}.ol-touch .ol-zoomslider{top:5.5em;}.ol-overviewmap{left:.5em;bottom:.5em;}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0;}.ol-overviewmap .ol-overviewmap-map, .ol-overviewmap button{display:inline-block;}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px;}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute;}.ol-overviewmap.ol-collapsed .ol-overviewmap-map, .ol-overviewmap.ol-uncollapsible button{display:none;}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8);}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7);}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move;}</style> <style> .ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;-webkit-transition:visibility 0s linear .3s,opacity .3s;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;-webkit-transition:visibility 0s linear .3s,opacity .3s;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;-webkit-transition-delay:0s;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:-webkit-linear-gradient(right,transparent,rgba(0,0,0,.75),transparent);background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")}</style> <script type="text/javascript" src="scripts/u2f-api.js"></script> <script type="text/javascript" src="scripts/charts.js"></script> <script type="text/javascript" src="scripts/filesaver.js"></script> <script type="text/javascript" src="scripts/ol.js"></script> <script type="text/javascript" src="scripts/ol3-contextmenu.js"></script> <title>{{{title}}}</title> </head> <body id="body" onload="if (typeof(startup) !== 'undefined') startup();" oncontextmenu="handleContextMenu(event)" style="display:none;min-width:495px"> <div id="contextMenu" class="contextMenu noselect" style="display:none"> <div id="cxinfo" class="cmtext" onclick="cmaction(1,event)"><b>Information</b></div> <div id="cxdesktop" class="cmtext" onclick="cmaction(3,event)">Desktop</div> <div id="cxterminal" class="cmtext" onclick="cmaction(2,event)">Terminal</div> <div id="cxfiles" class="cmtext" onclick="cmaction(4,event)">Files</div> <div id="cxevents" class="cmtext" onclick="cmaction(5,event)">Events</div> <div id="cxconsole" class="cmtext" onclick="cmaction(6,event)">Console</div> <hr id="cxmgroupsplit"> <div id="cxmdesktop" class="cmtext" onclick="cmaction(7,event)" style="display:none">Multi-Desktop</div> </div> <div id="meshContextMenu" class="contextMenu noselect" style="display:none;min-width:0px"> <div id="cxselectall" class="cmtext" onclick="cmmeshaction(1,event)">Select All</div> <div id="cxselectnone" class="cmtext" onclick="cmmeshaction(2,event)">Select None</div> </div> <div id="termShellContextMenu" class="contextMenu noselect" style="display:none;min-width:0px"> <div id="cxtermnorm" class="cmtext" onclick="cmtermaction(1,event)">Normal Connect</div> <div id="cxtermps" class="cmtext" onclick="cmtermaction(2,event)">PowerShell Connect</div> </div> <div id="container"> <div id="notifiyBox" class="notifiyBox" style="display:none"></div> <div id="masthead" class="noselect"> <div class="title">{{{title}}}</div> <div class="title2">{{{title2}}}</div> <div style="float:right"> <div id="notificationCount" onclick="clickNotificationIcon()" class="unselectable" style="display:none;" title="Click to view current notifications">0</div> </div> <p id="logoutControl">{{{logoutControl}}}<span id="idleTimeoutNotify" style="color:yellow"></span></p> </div> <div id="page_leftbar"> <div style="height:16px"></div> <div id="LeftMenuMyDevices" tabindex="0" class="lbbutton lbbuttonsel" title="My Devices" onclick="go(1)" onkeypress="if (event.key=='Enter') { go(1); }"> <div class="lb2"></div> </div> <div id="LeftMenuMyAccount" tabindex="0" class="lbbutton" title="My Account" onclick="go(2)" onkeypress="if (event.key=='Enter') { go(2); }"> <div class="lb1"></div> </div> <div id="LeftMenuMyEvents" tabindex="0" class="lbbutton" title="My Events" onclick="go(3)" onkeypress="if (event.key=='Enter') { go(3); }"> <div class="lb3"></div> </div> <div id="LeftMenuMyFiles" tabindex="0" class="lbbutton" style="display:none" title="My Files" onclick="go(5)" onkeypress="if (event.key=='Enter') { go(5); }"> <div class="lb4"></div> </div> <div id="LeftMenuMyUsers" tabindex="0" class="lbbutton" style="display:none" title="My Users" onclick="go(4)" onkeypress="if (event.key=='Enter') { go(4); }"> <div class="lb5"></div> </div> <div id="LeftMenuMyServer" tabindex="0" class="lbbutton" style="display:none" title="My Server" onclick="go(6)" onkeypress="if (event.key=='Enter') { go(6); }"> <div class="lb6"></div> </div> </div> <div id="topbar" class="noselect"> <div> <div style="position:relative"> <div tabindex="0" id="uiMenuButton" title="User interface selection" onclick="showUserInterfaceSelectMenu()" onkeypress="if (event.key == 'Enter') showUserInterfaceSelectMenu()">♦ <div id="uiMenu" style="display:none"> <div tabindex="0" id="uiViewButton1" class="uiSelector" onclick="userInterfaceSelectMenu(1)" title="Left bar interface" onkeypress="if (event.key == 'Enter') userInterfaceSelectMenu(1)"><div class="uiSelector1"></div></div> <div tabindex="0" id="uiViewButton2" class="uiSelector" onclick="userInterfaceSelectMenu(2)" title="Top bar interface" onkeypress="if (event.key == 'Enter') userInterfaceSelectMenu(2)"><div class="uiSelector2"></div></div> <div tabindex="0" id="uiViewButton3" class="uiSelector" onclick="userInterfaceSelectMenu(3)" title="Fixed width interface" onkeypress="if (event.key == 'Enter') userInterfaceSelectMenu(3)"><div class="uiSelector3"></div></div> <div tabindex="0" id="uiViewButton4" class="uiSelector" onclick="toggleNightMode()" title="Toggle night mode" onkeypress="if (event.key == 'Enter') toggleNightMode()"><div class="uiSelector4"></div></div> </div> </div> <table id="MainMenuSpan" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="MainMenuMyDevices" class="topbar_td style3x" onclick="go(1)" onkeypress="if (event.key == 'Enter') go(1)">My Devices</td> <td tabindex="0" id="MainMenuMyAccount" class="topbar_td style3x" onclick="go(2)" onkeypress="if (event.key == 'Enter') go(2)">My Account</td> <td tabindex="0" id="MainMenuMyEvents" class="topbar_td style3x" onclick="go(3)" onkeypress="if (event.key == 'Enter') go(3)">My Events</td> <td tabindex="0" id="MainMenuMyFiles" class="topbar_td style3x" onclick="go(5)" onkeypress="if (event.key == 'Enter') go(5)">My Files</td> <td tabindex="0" id="MainMenuMyUsers" class="topbar_td style3x" onclick="go(4)" onkeypress="if (event.key == 'Enter') go(4)">My Users</td> <td tabindex="0" id="MainMenuMyServer" class="topbar_td style3x" onclick="go(6)" onkeypress="if (event.key == 'Enter') go(6)">My Server</td> <td class="topbar_td_end style3"> </td> </tr> </table> <div id="MainSubMenuSpan" style="display:none"> <table id="MainSubMenu" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="MainDev" class="topbar_td style3x" onclick="go(10)" onkeypress="if (event.key == 'Enter') go(10)">General</td> <td tabindex="0" id="MainDevDesktop" class="topbar_td style3x" onclick="go(11)" onkeypress="if (event.key == 'Enter') go(11)">Desktop</td> <td tabindex="0" id="MainDevTerminal" class="topbar_td style3x" onclick="go(12)" onkeypress="if (event.key == 'Enter') go(12)">Terminal</td> <td tabindex="0" id="MainDevFiles" class="topbar_td style3x" onclick="go(13)" onkeypress="if (event.key == 'Enter') go(13)">Files</td> <td tabindex="0" id="MainDevEvents" class="topbar_td style3x" onclick="go(16)" onkeypress="if (event.key == 'Enter') go(16)">Events</td> <td tabindex="0" id="MainDevAmt" class="topbar_td style3x" onclick="go(14)" onkeypress="if (event.key == 'Enter') go(14)">Intel® AMT</td> <td tabindex="0" id="MainDevConsole" class="topbar_td style3x" onclick="go(15)" onkeypress="if (event.key == 'Enter') go(15)">Console</td> <td class="topbar_td_end style3"> </td> </tr> </table> </div> <div id="MeshSubMenuSpan" style="display:none"> <table id="MeshSubMenu" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="MeshGeneral" class="topbar_td style3x" onclick="go(20)" onkeypress="if (event.key == 'Enter') go(20)">General</td> <td class="topbar_td_end style3"> </td> </tr> </table> </div> <div id="UserSubMenuSpan" style="display:none"> <table id="UserSubMenu" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="UserGeneral" class="topbar_td style3x" onclick="go(30)" onkeypress="if (event.key == 'Enter') go(30)">General</td> <td tabindex="0" id="UserEvents" class="topbar_td style3x" onclick="go(31)" onkeypress="if (event.key == 'Enter') go(31)">Events</td> <td class="topbar_td_end style3"> </td> </tr> </table> </div> <div id="ServerSubMenuSpan" style="display:none"> <table id="ServerSubMenu" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="ServerGeneral" class="topbar_td style3x" onclick="go(6)" onkeypress="if (event.key == 'Enter') go(6)">General</td> <td tabindex="0" id="ServerStats" class="topbar_td style3x" onclick="go(40)" onkeypress="if (event.key == 'Enter') go(40)">Stats</td> <td tabindex="0" id="ServerConsole" class="topbar_td style3x" onclick="go(115)" onkeypress="if (event.key == 'Enter') go(115)">Console</td> <td tabindex="0" id="ServerTrace" class="topbar_td style3x" onclick="go(41)" onkeypress="if (event.key == 'Enter') go(41)">Trace</td> <td class="topbar_td_end style3"> </td> </tr> </table> </div> <div id="UserDummyMenuSpan"> <table id="UserDummyMenu" cellpadding="0" cellspacing="0" class="style1"> <tr><td class="style3" style=""> </td></tr> </table> </div> </div> </div> </div> <div id="column_l"> <div id="p0" style="display:none"> <div id="p0message"><span id="p0span">Server disconnected</span>, <href onclick="reload()" style="cursor:pointer"><u>click to reconnect</u></href>.</div> </div> <div id="p1" style="display:none"> <div style="display:none" id="devListToolbarViewIcons"> <div tabindex="0" id="devViewButton1" class="viewSelector" onclick="onDeviceViewChange(1)" onkeypress="if (event.key=='Enter') { onDeviceViewChange(1); }" title="Columns"><div class="viewSelector2"></div></div> <div tabindex="0" id="devViewButton2" class="viewSelector" onclick="onDeviceViewChange(2)" onkeypress="if (event.key == 'Enter') { onDeviceViewChange(2); }" title="List"><div class="viewSelector1"></div></div> <div tabindex="0" id="devViewButton3" class="viewSelector" onclick="onDeviceViewChange(3)" onkeypress="if (event.key == 'Enter') { onDeviceViewChange(3); }" title="Desktops"><div class="viewSelector3"></div></div> <div tabindex="0" id="devViewButton4" class="viewSelector" onclick="onDeviceViewChange(4)" onkeypress="if (event.key == 'Enter') { onDeviceViewChange(4); }" title="Map"><div class="viewSelector4"></div></div> </div><div><h1>My Devices</h1></div> <table id="devListToolbarSpan" class="noselect"> <tr> <td class="h1"></td> <td id="devListToolbar" class="style14" style="display:none"> <input type="button" id="SelectAllButton" onclick="selectallButtonFunction();" value="Select All"> <input type="button" id="GroupActionButton" disabled="disabled" value="Group Action" onclick="groupActionFunction()"> <input id="SearchInput" type="text" placeholder="Filter" onchange="masterUpdate(5)" onkeyup="masterUpdate(5)" autocomplete="off" onfocus="onSearchFocus(1)" onblur="onSearchFocus(0)"> <label><input type="checkbox" id="RealNameCheckBox" onclick="onRealNameCheckBox()"><span title="Show devices operating system name">OS Name</span></label> </td> <td id="kvmListToolbar" class="style14" style="display:none"> <input type="button" onclick="connectAllKvmFunction()" value="Connect All"> <input type="button" onclick="disconnectAllKvmFunction()" value="Disconnect All"> <label><input type="checkbox" id="autoConnectDesktopCheckbox" onclick="autoConnectDesktops(event)" title="Automatic connect">Auto </label> <input type="button" onclick="showMultiDesktopSettings()" value="Settings"> </td> <td id="devMapToolbar" class="style14" style="display:none"> <input type="text" id="mapSearchLocation" placeholder="Search Location" onfocus="onMapSearchFocus(1)" onblur="onMapSearchFocus(0)"> <input type="button" value="Search" title="Search for location" onclick="getSearchLocation()"> <input type="button" id="refreshmap" title="Reset map view" value="Reset" onclick="refreshMap(false,true)"> </td> <td class="auto-style1" style="height:100%"> <div style="display:none" id="devListToolbarView"> View <select id="viewselect" onchange="onDeviceViewChange()"> <option value="1">Columns <option value="2">List <option value="3">Desktops <option id="viewselectmapoption" value="4">Map </select> </div> <div style="display:none" id="devListToolbarSort"> Sort <select id="sortselect" onchange="masterUpdate(6)"> <option>Group <option>Power <option>Device <option>Tags </select> </div> <div style="display:none" id="devListToolbarSize"> Size <select id="sizeselect" onchange="onDeviceViewChange()"> <option value="0">Small <option value="1">Medium <option value="2">Large </select> </div> </td> <td class="h2"></td> </tr> </table> <div id="NoMeshesPanel" style="display:none"> <table> <tr> <td valign="top" style="width:50px"> <img src="images/info.png"> </td> <td> <div id="getStarted1">To get started, <a href="#" onclick="return account_createMesh()"><strong>click here to create a device group</strong></a>.</div> <div id="getStarted2">No device groups.</div> </td> </tr> </table> </div> <div id="xdevices" class="noselect" style="display:none"></div> <div id="xdevicesmap" style="display:none"> <div id="xmapSearchResultsDlg" style="display:none"> <div id="xmapSearchResultsBck"> <div id="xmapSearchClose" onclick="mapCloseSearchWindow()"><b>X</b></div> <div style="padding:5px">Location Results</div> <div style="width:100%;margin:6px"></div> </div> <div id="xmapSearchResults" style="margin:6px"></div> </div> </div> <div id="xmap-info-window"></div> </div> <div id="p2" style="display:none"> <h1>My Account</h1> <img id="p2AccountImage" alt="" src="images/clipboard-128.png"> <div id="p2AccountSecurity" style="display:none"> <p><strong>Account security</strong></p> <div style="margin-left:25px"> <div id="manageAuthApp"><div class="p2AccountActions"><span id="authAppSetupCheck"><strong>✓</strong></span></div><span><a href="#" onclick="return account_manageAuthApp()">Manage authenticator app</a><br></span></div> <div id="manageHardwareOtp"><div class="p2AccountActions"><span id="authKeySetupCheck"><strong>✓</strong></span></div><span><a href="#" onclick="return account_manageHardwareOtp(0)">Manage security keys</a><br></span></div> <div id="manageOtp"><div class="p2AccountActions"><span id="authCodesSetupCheck"><strong>✓</strong></span></div><span><a href="#" onclick="return account_manageOtp(0)">Manage backup codes</a><br></span></div> </div> </div> <div id="p2AccountActions"> <p><strong>Account actions</strong></p> <p class="mL"> <span id="verifyEmailId" style="display:none"><a href="#" onclick="return account_showVerifyEmail()">Verify email</a><br></span> <span id="accountEnableNotificationsSpan" style="display:none"><a href="#" onclick="return account_enableNotifications()">Enable web notifications</a><br></span> <a href="#" onclick="return account_showLocalizationSettings()">Localization Settings</a><br> <a href="#" onclick="return account_showAccountNotifySettings()">Notification Settings</a><br> <span id="accountChangeEmailAddressSpan" style="display:none"><a href="#" onclick="return account_showChangeEmail()">Change email address</a><br></span> <a href="#" onclick="return account_showChangePassword()">Change password</a><span id="p2nextPasswordUpdateTime"></span><br> <a href="#" onclick="return account_showDeleteAccount()">Delete account</a><br> </p> <br style="clear:both"> </div> <strong>Device Groups</strong> <span id="p2createMeshLink1">( <a href="#" onclick="return account_createMesh()" class="newMeshBtn"> New</a> )</span> <br><br> <div id="p2meshes"></div> <div id="p2noMeshFound" style="display:none">No device groups.<span id="p2createMeshLink2"> <a href="#" onclick="return account_createMesh()"><strong>Get started here!</strong></a></span></div> <br style="clear:both"> </div> <div id="p3" style="display:none"> <h1>My Events</h1> <table class="pTable"> <tr> <td class="h1"></td> <td class="auto-style1"> Show <select id="p3limitdropdown" onchange="refreshEvents()"> <option value="60">Last 60 <option value="120">Last 120 <option value="250">Last 250 <option value="500">Last 500 <option value="1000">Last 1000 </select> <a href="#" onclick="p3showDownloadEventsDialog(2)"><img src="images/link4.png" height="10" width="10" title="Download Events" style="cursor:pointer"></a> </td> <td class="h2"></td> </tr> </table> <div id="p3events" style=""></div> </div> <div id="p4" style="display:none"> <h1>My Users</h1> <table class="pTable"> <tr> <td class="h1"></td> <td class="style14"> <div style="float:right"> <input type="button" onclick="showUserBroadcastDialog()" style="margin-right:6px" value="Broadcast"> <a href="#" onclick="p4downloadUserInfo()"><img style="cursor:pointer" title="Download user information" src="images/link4.png"></a> <a href="#" onclick="p4batchAccountCreate()"><img id="p4UserBatchCreate" style="cursor:pointer;display:none" title="Batch create many user accounts" src="images/link6.png"></a> </div> <div> <input id="UserNewAccountButton" type="button" style="margin-left:6px" onclick="showCreateNewAccountDialog()" value="New Account..."> <input id="UserSearchInput" type="text" style="width:120px;margin-left:6px" placeholder="Filter" onchange="onUserSearchInputChanged()" onkeyup="onUserSearchInputChanged()" autocomplete="off" onfocus="onUserSearchFocus(1)" onblur="onUserSearchFocus(0)"> </div> </td> <td class="h2"></td> </tr> </table> <div id="p3users"></div> </div> <div id="p5" style="display:none"> <h1>My Files</h1> <table id="p5toolbar" cellpadding="0" cellspacing="0"> <tr> <td id="p5filehead" valign="bottom"> <div id="p5rightOfButtons"></div> <div> <input type="button" id="p5FolderUp" disabled="disabled" onclick="return p5folderup();" value="Up"> <input type="button" id="p5SelectAllButton" disabled="disabled" onclick="p5selectallfile();" value="Select All"> <input type="button" id="p5RenameFileButton" disabled="disabled" value="Rename" onclick="p5renamefile();"> <input type="button" id="p5DeleteFileButton" disabled="disabled" value="Delete" onclick="p5deletefile();"> <input type="button" id="p5NewFolderButton" disabled="disabled" value="New Folder" onclick="p5createfolder();"> <input type="button" id="p5UploadButton" disabled="disabled" value="Upload" onclick="p5uploadFile()"> <input type="button" id="p5CutButton" disabled="disabled" value="Cut" onclick="p5copyFile(1)"> <input type="button" id="p5CopyButton" disabled="disabled" value="Copy" onclick="p5copyFile(0)"> <input type="button" id="p5PasteButton" disabled="disabled" value="Paste" onclick="p5pasteFile()"> </div> </td> </tr> <tr> <td id="p5filesubhead"> <div style="float:right"> <select id="p5sortdropdown" onchange="updateFiles()"> <option value="1" selected="selected">Sort by name <option value="2">Sort by size <option value="3">Sort by date <option value="4">Descend by name <option value="5">Descend by size <option value="6">Descend by date </select> </div> <div> <span id="p5currentpath"></span></div> </td> </tr> </table> <div id="p5filetable"> <div id="p5PublicShare" style=""><div>These files are shared publicly, click "link" to get public url.</div></div> <div id="bigok" style="display:none"><b>✓</b></div> <div id="bigfail" style="display:none"><b>✗</b></div> <span id="p5files"></span> </div> <table id="p5toolbarBottom" style="width:100%" cellpadding="0" cellspacing="0"> <tr><td class="style6"> <span id="p5bottomstatus"></span></td></tr> </table> </div> <div id="p6" style="display:none"> <img id="MainMeshImage" src="serverpic.ashx"> <h1>My Server</h1> <div id="p2ServerActions"> <p><strong>Server actions</strong></p> <div class="mL"> <div id="p2ServerActionsBackup"><a href="{{{domainurl}}}backup.zip" rel="noreferrer noopener" target="_blank">Download server backup</a></div> <div id="p2ServerActionsRestore"><a href="#" onclick="return server_showRestoreDlg()">Restore server with backup</a></div> <div id="p2ServerActionsVersion"><a href="#" onclick="return server_showVersionDlg()">Check server version</a></div> <div id="p2ServerActionsErrors"><a href="#" onclick="return server_showErrorsDlg()">Show server error log</a></div> </div> </div> <br><strong>Server Statistics</strong><br><br> <div id="serverStats"> <div id="serverCpuChartView" style="display:none"> <div class="chartViewCanvas"><canvas id="serverCpuChart"></canvas></div> <div class="chartViewText" id="serverCpuChartText"></div> </div> <div id="serverMemoryChartView" style="display:none"> <div class="chartViewCanvas"><canvas id="serverMemoryChart"></canvas></div> <div class="chartViewText" id="serverMemoryChartText"></div> </div><br><br> <div id="serverStatsTable"></div> </div> </div> <div id="p10" style="display:none"> <table style="width:100%" cellpadding="0" cellspacing="0"> <tr> <td style="width:auto" valign="top"> <div id="p10title"> <div id="p10BackButton"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>General - <span id="p10deviceName"></span></h1> </div> <div id="p10html"></div> </td> <td style="width:20px"></td> <td style="width:200px"> <a href="#" onclick="p10showiconselector()"><img id="MainComputerImage"></a> <div id="MainComputerState"></div> </td> </tr> </table><br> <div id="p10html2"></div> <div id="p10html3"></div> </div> <div id="p11" class="noselect" style="display:none"> <div id="p11title"> <div id="p11deviceNameHeader"> <div id="p11BackButton"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <div id="devListToolbarViewIcons"><div class="viewSelector" onclick="deskToggleFull(event)" title="Full Screen. Hold shift to browser full screen."><div class="viewSelector5"></div></div></div> <h1>Desktop - <span id="p11deviceName"></span></h1> </div> </div> <div id="p11warning" onclick="showFeaturesDlg()"> <div class="icon2"></div> <div class="warningbox">Intel® AMT Redirection port or KVM feature is disabled<span id="p11warninga">, click here to enable it.</span></div> </div> <div id="p11warning2" onclick="showPowerActionDlg()"> <div class="icon2"></div> <div class="warningbox">Remote computer is not powered on, click here to issue a power command.</div> </div> <div id="deskarea0" cellpadding="0" cellspacing="0"> <div id="deskarea1" class="areaHead"> <div class="toright2"> <span id="p11power"></span> <div class='deskareaicon' title="Toggle View Mode" onclick="toggleAspectRatio(1)">⇲</div> <div class='deskareaicon' title="Rotate Left" onclick="drotate(-1)">↺</div> <div class='deskareaicon' title="Rotate Right" onclick="drotate(1)">↻</div> <div id="deskRecordIcon" class='deskareaicon' title="Server is recording this session" style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px"></div> <input id="deskFocusBtn" type="button" title="Toggle focus mode, when active only the region around the mouse is updated" onkeypress="return false" onkeydown="return false" value="Focus All" onclick="deskToggleFocus()" style="margin-right:3px;display:none"> <input id="deskSaveBtn" type="button" title="Save a screenshot of the remote desktop" onkeypress="return false" onkeydown="return false" value="Save..." onclick="deskSaveImage()" class="mR"> <input id="deskActionsBtn" type="button" title="Perform power actions on the device" onkeypress="return false" onkeydown="return false" value="Actions" onclick="deviceActionFunction()" class="mR"> <input id="deskActionsSettings" type="button" value="Settings..." title="Edit remote desktop settings" onkeypress="return false" onkeydown="return false" onclick="showDesktopSettings()" class="mR"> <input type="button" title="Change the power state of the remote machine" onkeypress="return false" onkeydown="return false" value="Power Actions..." onclick="showPowerActionDlg()" style="display:none"> </div> <div> <div id="idx_deskFullBtn2" onclick="deskToggleFull(event)"> ✖</div> <input type="button" id="autoconnectbutton1" value="AutoConnect" onclick="autoConnectDesktop(event)" onkeypress="return false" onkeydown="return false" style="display:none"> <span id="connectbutton1span"><input type="button" id="connectbutton1" value="Connect" onclick="connectDesktop(event,1)" onkeypress="return false" onkeydown="return false" disabled="disabled"></span> <span id="connectbutton1hspan"> <input type="button" id="connectbutton1h" value="HW Connect" onclick="connectDesktop(event,2)" onkeypress="return false" onkeydown="return false" disabled="disabled"></span> <span id="disconnectbutton1span"> <input type="button" id="disconnectbutton1" value="Disconnect" onclick="connectDesktop(event,0)" onkeypress="return false" onkeydown="return false"></span> <span id="deskstatus">Disconnected</span> </div> </div> <div id="deskarea2" style=""> <div class="areaProgress"><div id="progressbar" style=""></div></div> </div> <div id="deskarea3x"> <div id="DeskFocus" oncontextmenu="return false" onmousedown="dmousedown(event)" onmouseup="dmouseup(event)" onmousemove="dmousemove(event)"></div> <div id="DeskParent"> <canvas id="Desk" width="640" height="480" oncontextmenu="return false" onmousedown="dmousedown(event)" onmouseup="dmouseup(event)" onmousemove="dmousemove(event)" onmousewheel="dmousewheel(event)"></canvas> </div> <div id="DeskTools"> <div id="deskToolsAreaTop"> <a id="DeskToolsRefreshButton" style="right:2px" onclick="refreshDeskTools()">Refresh</a> <div id="deskToolsTopTabProcess" class="deskToolsTopTab" onclick="changeDeskToolTab(0)" style="left:0px;bottom:0px">Processes</div> <div id="deskToolsTopTabService" class="deskToolsTopTab" onclick="changeDeskToolTab(1)" style="display:none;left:90px;color:gray">Services</div> </div> <div id="deskToolsArea"> <div id="DeskToolsProcessTab"> <div id="deskToolsHeader"> <a class="colmn1" title="Sort by process id" onclick="sortProcess(0)">PID</a> <a class="colmn2" title="Sort by name" onclick="sortProcess(1)">Name</a> </div> <div id="DeskToolsProcesses" style=""></div> </div> <div id="DeskToolsServiceTab" style="display:none"> <div id="deskToolsServiceHeader"> <a class="colmn1" style="width:70px" title="Sort by state" onclick="sortService(0)">State</a> <a class="colmn2" title="Sort by name" onclick="sortService(1)">Name</a> </div> <div id="DeskToolsServices" style=""></div> </div> </div> </div> <div id="p11DeskConsoleMsg" style="display:none;cursor:pointer;position:absolute;left:30px;top:17px;color:yellow;background-color:rgba(0,0,0,0.6);padding:10px;border-radius:5px" onclick="p11clearConsoleMsg()"></div> </div> <div id="deskarea4" class="areaFoot"> <div class="toright2"> <span id="DeskTimer" title="Session time"></span> <select id="termdisplays" style="display:none" onchange="deskSetDisplay(event)" onkeypress="return false" onkeydown="return false"></select> <input id="DeskToolsButton" type="button" value="Tools" title="Toggle tools view" onkeypress="return false" onkeydown="return false" onclick="toggleDeskTools()"> <span id="DeskChatButton" class="deskarea" title="Open chat window to this computer"><img src='images/icon-chat.png' onclick="deviceChat()" height="16" width="16" style="padding-top:2px"></span> <span id="DeskNotifyButton" title="Display a notification on the remote computer"><img src='images/icon-notify.png' onclick="deviceToastFunction()" height="16" width="16" style="padding-top:2px"></span> <span id="DeskOpenWebButton" title="Open a web address on remote computer"><img src='images/icon-url2.png' onclick="deviceUrlFunction()" height="16" width="16" style="padding-top:2px"></span> </div> <div> <select id="deskkeys"> <option value="10">Ctrl+Alt+Del <option value="5">Win <option value="0">Win+Down <option value="1">Win+Up <option value="2">Win+L <option value="3">Win+M <option value="4">Shift+Win+M <option value="6">Win+R <option value="7">Alt-F4 <option value="8">Ctrl-W <option value="9">Alt-Tab <option value="11">Win+Left <option value="12">Win+Right </select> <input id="DeskWD" type="button" value="Send" onkeypress="return false" onkeydown="return false" onclick="deskSendKeys()"> <input id="DeskClip" style="" type="button" value="Clipboard" onkeypress="return false" onkeydown="return false" onclick="showDeskClip()"> <input id="DeskType" style="" type="button" value="Type" onkeypress="return false" onkeydown="return false" onclick="showDeskType()"> <label><span id="DeskControlSpan" title="Toggle mouse and keyboard input"><input id="DeskControl" type="checkbox" onkeypress="return false" onkeydown="return false" onclick="toggleKvmControl()">Input</span></label> </div> </div> </div> </div> <div id="p12" style="display:none"> <div id="p12title"> <div id="p12BackButton"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Terminal - <span id="p12deviceName"></span></h1> </div> <div id="p12warning" onclick="showFeaturesDlg()"> <div class="icon2"></div> <div class="warningbox">Intel® AMT Redirection port or KVM feature is disabled<span id="p12warninga">, click here to enable it.</span></div> </div> <div id="p12warning2" onclick="showPowerActionDlg()"> <div class="icon2"></div> <div class="warningbox">Remote computer is not powered on, click here to issue a power command.</div> </div> <div id="termTable" style="position:relative"> <table style="width:100%" cellpadding="0" cellspacing="0"> <tr> <td class="areaHead"> <div class="toright2"> <div id="termRecordIcon" class='deskareaicon' title="Server is recording this session" style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px;margin-left:5px"></div> <input id="termActionsBtn" type="button" title="Perform power actions on the device" onkeypress="return false" onkeydown="return false" value="Actions" onclick="deviceActionFunction()"> </div> <div> <input type="button" id="autoconnectbutton2" value="AutoConnect" onclick="autoConnectTerminal(event)" onkeypress="return false" onkeydown="return false" style="display:none"> <span id="connectbutton2span"><input type="button" id="connectbutton2" value="Connect" onclick="connectTerminal(event,1)" onkeypress="return false" onkeydown="return false" disabled="disabled"></span> <span id="connectbutton2hspan"> <input type="button" id="connectbutton2h" value="HW Connect" onclick="connectTerminal(event,2)" onkeypress="return false" onkeydown="return false" disabled="disabled"></span> <span id="disconnectbutton2span"> <input type="button" id="disconnectbutton2" value="Disconnect" onclick="connectTerminal(event,0)" onkeypress="return false" onkeydown="return false"></span> <span id="termstatus">Disconnected</span><span id="termtitle"></span> </div> </td> </tr> <tr> <td> <div class="areaProgress"><div id="termprogressbar" style=""></div></div> </td> </tr> <tr> <td id="termarea3x"> <pre id="Term"></pre> </td> </tr> <tr> <td class="areaFoot"> <div class="toright2"> <span id="TermTimer" title="Session time"></span> <span id="terminalSettingsButtons" style="display:none"> <input id="id_tcrbutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="CR+LF" title="Toggle what the return key will send" onclick="termToggleCr()"> <input id="id_tfxkeysbutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="Intel (F10 = ESC+[OM)" title="Toggle F1 to F10 keys emulation type" onclick="termToggleFx()"> <input id="id_ttypebutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="Extended Ascii" title="Toggle terminal emulation type" onclick="termToggleType()"> </span> <span id="terminalSizeDropDown"> <select id="termSizeList" onkeypress="return false"><option value="1">80x25<option value="2">100x30<option value="3" selected="">Auto</select> </span> <select id="specialkeylist" onkeypress="return false"></select> <input id="specialkeylistinput" type="button" onkeypress="return false" class="bottombutton" value="Send" title="Send the selected special key" onclick="sendSpecialKey()"> </div> <div> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="ctrlcbutton" value="Ctl-C" onclick="termSendKey(3,'ctrlcbutton')"> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="ctrlxbutton" value="Ctl-X" onclick="termSendKey(24,'ctrlxbutton')"> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="escbutton" value="ESC" onclick="termSendKey(27,'escbutton')"> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="bsbutton" value="Backspace" onclick="termSendKey(8,'bsbutton')"> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="pastebutton" value="Paste" title="Paste text into the terminal" onclick="showTermPasteDialog()"> </div> </td> </tr> </table> <div id="p12TermConsoleMsg" style="display:none;cursor:pointer;position:absolute;left:30px;top:45px;color:yellow;background-color:rgba(0,0,0,0.6);padding:10px;border-radius:5px" onclick="p12clearConsoleMsg()"></div> </div> </div> <div id="p13" style="display:none"> <div id="p13title"> <div id="p13BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Files - <span id="p13deviceName"></span></h1> </div> <table id="p13toolbar" cellpadding="0" cellspacing="0"> <tr> <td class="areaHead"> <div class="toright2"> <input id="filesActionsBtn" type="button" title="Perform power actions on the device" value="Actions" onclick="deviceActionFunction()"> <div id="filesRecordIcon" class='deskareaicon' title="Server is recording this session" style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px;margin-left:5px"></div> </div> <div> <input id="p13AutoConnect" value="AutoConnect" onclick="autoConnectFiles(event)" type="button" style="display:none"> <input id="p13Connect" value="Connect" onclick="connectFiles(event)" type="button"> <span id="p13Status">Disconnected</span> </div> </td> </tr> <tr> <td class="areaHead2" valign="bottom"> <div id="p13rightOfButtons" class="toright2"></div> <div> <input type="button" id="p13FolderUp" disabled="disabled" onclick="p13folderup()" value="Up"> <input type="button" id="p13SelectAllButton" disabled="disabled" onclick="p13selectallfile()" value="Select All"> <input type="button" id="p13RenameFileButton" disabled="disabled" value="Rename" onclick="p13renamefile()"> <input type="button" id="p13DeleteFileButton" disabled="disabled" value="Delete" onclick="p13deletefile()"> <input type="button" id="p13NewFolderButton" disabled="disabled" value="New Folder" onclick="p13createfolder()"> <input type="button" id="p13UploadButton" disabled="disabled" value="Upload" onclick="p13uploadFile()"> <input type="button" id="p13CutButton" disabled="disabled" value="Cut" onclick="p13copyFile(1)"> <input type="button" id="p13CopyButton" disabled="disabled" value="Copy" onclick="p13copyFile(0)"> <input type="button" id="p13PasteButton" disabled="disabled" value="Paste" onclick="p13pasteFile()"> <input type="button" id="p13RefreshButton" disabled="disabled" value="Refresh" onclick="p13folderup(9999)"> </div> </td> </tr> <tr> <td class="areaHead3"> <div class="toright2"> <select id="p13sortdropdown" onchange="p13updateFiles()"> <option value="1" selected="selected">Sort by name <option value="2">Sort by size <option value="3">Sort by date <option value="4">Descend by name <option value="5">Descend by size <option value="6">Descend by date </select> </div> <div> <span id="p13currentpath"></span></div> </td> </tr> </table> <div id="p13FilesConsoleMsg" style="display:none;cursor:pointer;position:absolute;left:30px;top:165px;color:yellow;background-color:rgba(0,0,0,0.6);padding:10px;border-radius:5px" onclick="p13clearConsoleMsg()"></div> <div id="p13filetable" style=""> <div id="p13bigok" style="display:none"><b>✓</b></div> <div id="p13bigfail" style="display:none"><b>✗</b></div> <span id="p13files"></span> </div> <table id="p13toolbarBottom" cellpadding="0" cellspacing="0"> <tr><td class="style6"> <span id="p13bottomstatus"></span></td></tr> </table> </div> <div id="p14" style="display:none"> <div id="p14title"> <div id="p14BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <div id="devListToolbarViewIcons"><div class="viewSelector" onclick="deskToggleFull(event)" title="Full Screen. Hold shift to browser full screen."><div class="viewSelector5"></div></div></div> <h1>Intel® AMT - <span id="p14deviceName"></span></h1> </div> <iframe id="p14iframe" src="{{{domainurl}}}commander.htm"></iframe> </div> <div id="p15" style="display:none"> <div id="p15title"> <div id="p15BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1><span id="p15deviceName"></span></h1> </div> <table id="consoleTable" cellpadding="0" cellspacing="0"> <tr> <td class="areaHead"> <div class="toright2"> <div id="p15coreName" title="Information about current core running on this agent"></div> <input type="button" id="p15uploadCore" value="Agent Action" onclick="p15uploadCore(event)" title="Change the agent Java Script code module"> <img onclick="p15downloadConsoleText()" style="cursor:pointer;margin-top:6px" title="Download console text" src="images/link4.png"> </div> <div id="p15statetext"></div> </td> </tr> <tr> <td> <div class="areaProgress"><div id="consoleprogressbar" style=""></div></div> </td> </tr> <tr> <td id="p15agentConsole"> <pre id="p15agentConsoleText"></pre> </td> </tr> <tr> <td class="areaFoot"> <table style="width:100%"> <tr> <td style="width:99%"> <input id="p15consoleText" style="width:100%" onkeyup="p15consoleSend(event)" onfocus="onConsoleFocus(1)" onblur="onConsoleFocus(0)"> </td> <td> </td> <td style="width:1%"><input id="id_p15consoleClear" type="button" class="bottombutton" value="Clear" onclick="p15consoleClear()"></td> </tr> </table> </td> </tr> </table> </div> <div id="p16" style="display:none"> <div id="p16title"> <div id="p16BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Events - <span id="p16deviceName"></span></h1> </div> <table class="pTable"> <tr> <td class="h1"></td> <td class="auto-style1"> Show <select id="p16limitdropdown" onchange="refreshDeviceEvents()"> <option value="60">Last 60 <option value="120">Last 120 <option value="250">Last 250 <option value="500">Last 500 <option value="1000">Last 1000 </select> <a href="#" onclick="p3showDownloadEventsDialog(1)"><img src="images/link4.png" height="10" width="10" title="Download Events" style="cursor:pointer"></a> </td> <td class="h2"></td> </tr> </table> <div id="p16events"></div> </div> <div id="p20" style="display:none"> <picture id="MainMeshImage" style="border-width:0px;height:200px;width:200px;float:right"> <source type="image/webp" width="200" height="200" srcset="images/webp/mesh-256.webp"> <img alt="" width="200" height="200" src="images/mesh-256.png"> </source></picture> <div style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>General - <span id="p20meshName"></span></h1> <p id="p20info"> </div> <div id="p30" style="display:none"> <table style="width:100%" cellpadding="0" cellspacing="0"> <tr> <td style="width:auto" valign="top"> <div id="p30title"> <div style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>General - <span id="p30userName"></span></h1> </div> <div id="p30html"></div> </td> <td style="width:20px"></td> <td style="width:200px"> <picture id="MainUserImage" style="border-width:0px;height:200px;width:200px;float:right"> <source type="image/webp" width="200" height="200" srcset="images/webp/user-256.webp"> <img alt="" width="200" height="200" src="images/user-256.png"> </source></picture> <div style="width:100%;text-align:center"><strong><span id="MainUserState"></span></strong></div> </td> </tr> </table><br> <div id="p30html2"></div> <div id="p30html3"></div> </div> <div id="p31" style="display:none"> <div style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Events - <span id="p31userName"></span></h1> <table class="pTable"> <tr> <td class="h1"></td> <td class="auto-style1"> Show <select id="p31limitdropdown" onchange="refreshUsersEvents()"> <option value="60">Last 60 <option value="120">Last 120 <option value="250">Last 250 <option value="500">Last 500 <option value="1000">Last 1000 </select> <a href="#" onclick="p3showDownloadEventsDialog(3)"><img src="images/link4.png" height="10" width="10" title="Download Events" style="cursor:pointer"></a> </td> <td class="h2"></td> </tr> </table> <div id="p31events" style=""></div> </div> <div id="p40" style="display:none"> <h1>My Server Stats</h1> <div class="areaHead"> <div class="toright2"> <select id="p40type" onchange="updateServerTimelineStats()"> <option value="0">Connections <option value="1">Memory </select> <select id="p40time" onchange="updateServerTimelineHours()"> <option value="3">Last 3 hours <option value="8">Last 8 hours <option value="24">Last day <option value="168">Last week <option value="720">Last 30 days </select> <img src="images/link4.png" height="10" width="10" title="Download data points (.csv)" style="cursor:pointer" onclick="p40downloadEvents()"> </div> <div> <input value="Refresh" type="button" onclick="refreshServerTimelineStats()"> <label><input id="p40log" type="checkbox" onclick="updateServerTimelineHours()">Log-X</label> </div> </div> <canvas id="serverMainStats" style=""></canvas> </div> <div id="p41" style="display:none"> <h1>My Server Tracing</h1> <div class="areaHead"> <div class="toright2"> Show <select id="p41limitdropdown" onchange="displayServerTrace()"> <option value="100">Last 100 <option value="250">Last 250 <option value="500">Last 500 <option value="1000">Last 1000 </select> <input value="Clear" type="button" onclick="clearServerTracing()"> <img src="images/link4.png" height="10" width="10" title="Download trace (.csv)" style="cursor:pointer" onclick="p41downloadServerTrace()"> </div> <div> <input value="Tracing" type="button" onclick="setServerTracing()"> <span id="p41traceStatus">None</span> </div> </div> <div id="p41events" style=""></div> </div> <br id="column_l_bottomgap"> </div> <div id="footer"> <div class="footer1">{{{footer}}}</div> <div class="footer2"> <a id="verifyEmailId2" style="display:none" href="#" onclick="account_showVerifyEmail()">Verify Email</a> <a href="terms">Terms & Privacy</a> </div> </div> <div id="dialog" class="noselect" style="display:none"> <div id="dialogHeader"> <div tabindex="0" id="id_dialogclose" onclick="setDialogMode()" onkeypress="if (event.key == 'Enter') setDialogMode()">✖</div> <div id="id_dialogtitle"></div> </div> <div id="dialogBody"> <div id="dialog1"> <div id="id_dialogMessage" style=""></div> </div> <div id="dialog2" style=""> <div id="id_dialogOptions"></div> </div> <div id="dialog3" style=""> <div id="d3upload"> <div>File Selection</div> <select id="d3uploadMode" onchange="d3modechange()"> <option value="1">Local file upload <option value="2">Server file selection </select> </div> <div id="d3localmode" style="display:none"> <div>Upload File</div> <form id="d3localmodeform" method="post" enctype="multipart/form-data" action="uploadfile.ashx" target="fileUploadFrame"> <input type="text" id="d3attrib" name="attrib" style="display:none"> <input type="file" id="d3localFile" name="files" onchange="d3setActions()"> <input type="submit" id="d3submit" style="display:none"> </form> </div> <div id="d3servermode"> <div id="d3serveraction" valign="bottom"> <input type="button" id="p3FolderUp" disabled="disabled" onclick="d3folderup()" value="Up"> </div> <div id="d3serverfiles"></div> </div> </div> <div id="dialog7" style=""> <div id="d7meshkvm"> <h4>Agent Remote Desktop</h4> <div> <div>Quality</div> <select id="d7bitmapquality" dir="rtl"></select> </div> <div> <div>Scaling</div> <select id="d7bitmapscaling" style="" dir="rtl"> <option selected="selected" value="1024">100% <option value="896">87.5% <option value="768">75% <option value="640">62.5% <option value="512">50% <option value="384">37.5% <option value="256">25% <option value="128">12.5% </select> </div> <div> <div>Frame rate</div> <select id="d7framelimiter" dir="rtl"> <option selected="selected" value="50">Fast <option value="100">Medium <option value="400">Slow <option value="1000">Very slow </select> </div> </div> <div id="d7amtkvm"> <h4>Intel® AMT Hardware KVM</h4> <div> <div>Image Encoding</div> <select id="d7desktopmode"> <option value="1">RLE8, Fastest <option value="2">RLE16, Recommended <option value="3">RAW8, Slow <option value="4">RAW16, Very Slow </select> </div> <div> <div>Other Settings</div> <div id="d7otherset" style="display:block"> <label style="display:block"><input type="checkbox" id="d7showfocus">Show Focus Tool</label> <label style="display:block"><input type="checkbox" id="d7showcursor">Show Local Mouse Cursor</label> <label style="display:block"><input type="checkbox" id="d7localKeyMap">Local Keyboard Map</label> </div> </div> </div> </div> </div> <div id="idx_dlgButtonBar"> <input id="idx_dlgCancelButton" type="button" value="Cancel" style="" onclick="dialogclose(0)"> <input id="idx_dlgOkButton" type="button" value="OK" style="" onclick="dialogclose(1)"> <div><input id="idx_dlgDeleteButton" type="button" value="Delete" style="display:none" onclick="dialogclose(2)"></div> </div> </div> <iframe name="fileUploadFrame" style="display:none"></iframe> <form style="display:none" method="post" action="uploadfile.ashx" enctype="multipart/form-data" target="fileUploadFrame"><input id="p5fileDragName" name="name"><input id="p5fileDragSize" name="size"><input id="p5fileDragType" name="type"><input id="p5fileDragData" name="data"><input id="p5fileDragLink" name="link"><input type="submit" id="p5loginSubmit2" style="display:none"></form> <form style="display:none" method="post" action="uploadnodefile.ashx" enctype="multipart/form-data" target="fileUploadFrame"><input id="p13fileDragName" name="name"><input id="p13fileDragSize" name="size"><input id="p13fileDragType" name="type"><input id="p13fileDragData" name="data"><input id="p13fileDragLink" name="link"><input type="submit" id="p13loginSubmit2" style="display:none"></form> <audio id="chimes"><source src="sounds/chimes.mp3" type="audio/mp3"></source></audio> </div> <script>if(!String.prototype.startsWith){String.prototype.startsWith=function(a){return this.lastIndexOf(a,0)===0}}if(!String.prototype.endsWith){String.prototype.endsWith=function(a){return this.indexOf(a,this.length-a.length)!==-1}}function Q(a){return document.getElementById(a)}function QS(a){try{return Q(a).style}catch(a){}}function QE(a,b){try{Q(a).disabled=!b}catch(a){}}function QV(a,b){try{QS(a).display=(b?"":"none")}catch(a){}}function QA(a,b){Q(a).innerHTML+=b}function QH(a,b){Q(a).innerHTML=b}function QC(a){try{return Q(a).classList}catch(a){}}function inputBoxFocus(b){Q(b).focus();var a=Q(b).value;Q(b).value="";Q(b).value=a}function ReadShort(b,a){return(b.charCodeAt(a)<<8)+b.charCodeAt(a+1)}function ReadShortX(b,a){return(b.charCodeAt(a+1)<<8)+b.charCodeAt(a)}function ReadInt(b,a){return(b.charCodeAt(a)*16777216)+(b.charCodeAt(a+1)<<16)+(b.charCodeAt(a+2)<<8)+b.charCodeAt(a+3)}function ReadSInt(b,a){return(b.charCodeAt(a)<<24)+(b.charCodeAt(a+1)<<16)+(b.charCodeAt(a+2)<<8)+b.charCodeAt(a+3)}function ReadIntX(b,a){return(b.charCodeAt(a+3)*16777216)+(b.charCodeAt(a+2)<<16)+(b.charCodeAt(a+1)<<8)+b.charCodeAt(a)}function ShortToStr(a){return String.fromCharCode((a>>8)&255,a&255)}function ShortToStrX(a){return String.fromCharCode(a&255,(a>>8)&255)}function IntToStr(a){return String.fromCharCode((a>>24)&255,(a>>16)&255,(a>>8)&255,a&255)}function IntToStrX(a){return String.fromCharCode(a&255,(a>>8)&255,(a>>16)&255,(a>>24)&255)}function MakeToArray(a){if(!a||a==null||typeof a=="object"){return a}return[a]}function SplitArray(a){return a.split(",")}function Clone(a){return JSON.parse(JSON.stringify(a))}function EscapeHtml(a){if(typeof a=="string"){return a.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,""").replace(/'/g,"'")}if(typeof a=="boolean"){return a}if(typeof a=="number"){return a}}function EscapeHtmlBreaks(a){if(typeof a=="string"){return a.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,""").replace(/'/g,"'").replace(/\r/g,"<br />").replace(/\n/g,"").replace(/\t/g," ")}if(typeof a=="boolean"){return a}if(typeof a=="number"){return a}}function ArrayElementMove(a,b,c){a.splice(c,0,a.splice(b,1)[0])}function ObjectToStringEx(e,a){var d="";if(e!=0&&(!e||e==null)){return"(Null)"}if(e instanceof Array){for(var b in e){d+="<br />"+gap(a)+"Item #"+b+": "+ObjectToStringEx(e[b],a+1)}}else{if(e instanceof Object){for(var b in e){d+="<br />"+gap(a)+b+" = "+ObjectToStringEx(e[b],a+1)}}else{d+=EscapeHtml(e)}}return d}function ObjectToStringEx2(e,a){var d="";if(e!=0&&(!e||e==null)){return"(Null)"}if(e instanceof Array){for(var b in e){d+="\r\n"+gap2(a)+"Item #"+b+": "+ObjectToStringEx2(e[b],a+1)}}else{if(e instanceof Object){for(var b in e){d+="\r\n"+gap2(a)+b+" = "+ObjectToStringEx2(e[b],a+1)}}else{d+=EscapeHtml(e)}}return d}function gap(a){var d="";for(var b=0;b<(a*4);b++){d+=" "}return d}function gap2(a){var d="";for(var b=0;b<(a*4);b++){d+=" "}return d}function ObjectToString(a){return ObjectToStringEx(a,0)}function ObjectToString2(a){return ObjectToStringEx2(a,0)}function hex2rstr(a){if(typeof a!="string"||a.length==0){return""}var c="",b=(""+a).match(/../g),e;while(e=b.shift()){c+=String.fromCharCode("0x"+e)}return c}function char2hex(a){return(a+256).toString(16).substr(-2).toUpperCase()}function rstr2hex(b){var c="",a;for(a=0;a<b.length;a++){c+=char2hex(b.charCodeAt(a))}return c}function encode_utf8(a){return unescape(encodeURIComponent(a))}function decode_utf8(a){return decodeURIComponent(escape(a))}function data2blob(c){var b=new Array(c.length);for(var d=0;d<c.length;d++){b[d]=c.charCodeAt(d)}var a=new Blob([new Uint8Array(b)]);return a}function random(a){return Math.floor(Math.random()*a)}function trademarks(a){return a.replace(/\(R\)/g,"®").replace(/\(TM\)/g,"™")}function zeroPad(b,a){if(a==null){a=2}var d="00000000"+b;return d.substr(d.length-a)}var MeshServerCreateControl=function(b,a){var c={};c.State=0;c.connectstate=0;c.pingTimer=null;c.authCookie=a;c.trace=false;c.xxStateChange=function(e,d){if(c.State==e){return}var g=c.State;c.State=e;if(c.onStateChanged){c.onStateChanged(c,c.State,g,d)}};c.Start=function(){if(c.connectstate!=0){return}c.connectstate=0;var d=window.location.protocol.replace("http","ws")+"//"+window.location.host+b+"control.ashx";if(c.authCookie&&(c.authCookie!="")){d+="?auth="+c.authCookie}c.socket=new WebSocket(d);c.socket.onopen=function(g){c.connectstate=1};c.socket.onmessage=c.xxOnMessage;c.socket.onclose=function(g){c.Stop(g.code)};c.xxStateChange(1,0);if(c.pingTimer!=null){clearInterval(c.pingTimer)}c.pingTimer=setInterval(function(){c.send({action:"ping"})},29000)};c.Stop=function(d){c.connectstate=0;if(c.socket){c.socket.close();delete c.socket}if(c.pingTimer!=null){clearInterval(c.pingTimer);c.pingTimer=null}c.xxStateChange(0,d)};c.xxOnMessage=function(d){if(c.State==1){c.xxStateChange(2)}var g;try{g=JSON.parse(d.data)}catch(d){return}if((typeof g!="object")||(g.action=="pong")){return}if(g.action=="close"){if(g.msg){console.log(g.msg)}c.Stop(g.cause);return}if(c.trace){console.log("RECV",g)}if(c.onMessage){c.onMessage(c,g)}};c.send=function(d){if(c.socket!=null&&c.connectstate==1){if(c.trace){console.log("SEND",d)}c.socket.send(JSON.stringify(d))}};return c};function AmtStackCreateService(t){var s=new Object();s.wsman=t;s.pfx=["http://intel.com/wbem/wscim/1/amt-schema/1/","http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/","http://intel.com/wbem/wscim/1/ips-schema/1/"];s.PendingEnums=[];s.PendingBatchOperations=0;s.ActiveEnumsCount=0;s.MaxActiveEnumsCount=1;s.onProcessChanged=null;var n=0;var m=0;s.GetPendingActions=function(){return(s.PendingEnums.length*2)+(s.ActiveEnumsCount)+s.wsman.comm.PendingAjax.length+s.wsman.comm.ActiveAjaxCount+s.PendingBatchOperations};function r(){var u=s.GetPendingActions();if(n<u){n=u}if(s.onProcessChanged!=null&&m!=u){m=u;s.onProcessChanged(u,n)}if(u==0){n=0}}s.Subscribe=function(w,v,C,u,B,z,A,x,D,y){s.wsman.ExecSubscribe(s.CompleteName(w),v,C,function(G,F,E,H){r();u(s,w,E,H,B)},0,z,A,x,D,y);r()};s.UnSubscribe=function(v,u,y,w,x){s.wsman.ExecUnSubscribe(s.CompleteName(v),function(B,A,z,C){r();u(s,v,z,C,y)},0,w,x);r()};s.Get=function(v,u,x,w){s.wsman.ExecGet(s.CompleteName(v),function(A,z,y,B){r();u(s,v,y,B,x)},0,w);r()};s.Put=function(v,x,u,z,w,y){s.wsman.ExecPut(s.CompleteName(v),x,function(C,B,A,D){r();u(s,v,A,D,z)},0,w,y);r()};s.Create=function(v,x,u,y,w){s.wsman.ExecCreate(s.CompleteName(v),x,function(B,A,z,C){r();u(s,v,z,C,y)},0,w);r()};s.Delete=function(v,x,u,y,w){s.wsman.ExecDelete(s.CompleteName(v),x,function(B,A,z,C){r();u(s,v,z,C,y)},0,w);r()};s.Exec=function(x,w,u,v,A,y,z){s.wsman.ExecMethod(s.CompleteName(x),w,u,function(D,C,B,E){r();v(s,x,s.CompleteExecResponse(B),E,A)},0,y,z);r()};s.ExecWithXml=function(x,w,u,v,A,y,z){s.wsman.ExecMethodXml(s.CompleteName(x),w,execArgumentsToXml(u),function(D,C,B,E){r();v(s,x,s.CompleteExecResponse(B),E,A)},0,y,z);r()};s.Enum=function(v,u,x,w){if(s.ActiveEnumsCount<s.MaxActiveEnumsCount){s.ActiveEnumsCount++;s.wsman.ExecEnum(s.CompleteName(v),function(B,z,y,C,A){r();d(v,y,u,z,C,A)},x,w)}else{s.PendingEnums.push([v,u,x,w])}r()};function d(w,y,u,z,A,B,x){if(A!=200){u(s,w,null,A,B);c(1);return}if(y==null||y.Header.Method!="EnumerateResponse"||!y.Body.EnumerationContext){u(s,w,null,603,B);c(1);return}var v=y.Body.EnumerationContext;s.wsman.ExecPull(z,v,function(E,D,C,F){b(w,C,u,D,[],F,B,x)})}function b(z,B,u,C,x,D,E,A){if(D!=200){u(s,z,null,D,E);c(1);return}if(B==null||B.Header.Method!="PullResponse"){u(s,z,null,604,E);c(1);return}for(var w in B.Body.Items){if(B.Body.Items[w] instanceof Array){for(var y in B.Body.Items[w]){x.push(B.Body.Items[w][y])}}else{x.push(B.Body.Items[w])}}if(B.Body.EnumerationContext){var v=B.Body.EnumerationContext;s.wsman.ExecPull(C,v,function(H,G,F,I){b(z,F,u,G,x,I,E,1)})}else{c(1);u(s,z,x,D,E);r()}}function c(u){s.ActiveEnumsCount-=u;if(s.ActiveEnumsCount>=s.MaxActiveEnumsCount||s.PendingEnums.length==0){return}var v=s.PendingEnums.shift();s.Enum(v[0],v[1],v[2]);c(0)}s.BatchEnum=function(u,x,v,z,w,y){s.PendingBatchOperations+=(x.length*2);a(u,Clone(x),v,z,{},w,y);r()};function a(u,z,v,C,B,w,A){s.PendingBatchOperations-=2;var y=z.shift(),x=s.Enum;if(y[0]=="*"){x=s.Get;y=y.substring(1)}x(y,function(F,D,E,G,H){H[2][D]={response:(E==null?null:E.Body),responses:E,status:G};if(H[1].length==0||G==401||(w!=true&&G!=200&&G!=400)){s.PendingBatchOperations-=(z.length*2);r();v(s,u,H[2],G,C)}else{r();a(u,z,v,C,H[2],A)}},[u,z,B],A);r()}s.BatchGet=function(u,w,v,y,x){h({name:u,names:w,callback:v,current:0,responses:{},tag:y,pri:x});r()};function h(u){if(u.names.length<=u.current){u.callback(s,u.name,u.responses,200,u.tag)}else{s.wsman.ExecGet(s.CompleteName(u.names[u.current]),function(x,w,v,y){g(u,v,y)},u.pri);u.current++}r()}function g(u,v,w){if(v==null||w!=200){u.callback(s,u.name,null,w,u.tag)}else{u.responses[v.Header.Method]=v;h(u)}}s.CompleteName=function(u){if(u.indexOf("AMT_")==0){return s.pfx[0]+u}if(u.indexOf("CIM_")==0){return s.pfx[1]+u}if(u.indexOf("IPS_")==0){return s.pfx[2]+u}};s.CompleteExecResponse=function(u){if(u&&u!=null&&u.Body&&u.Body.ReturnValue){u.Body.ReturnValueStr=s.AmtStatusToStr(u.Body.ReturnValue)}return u};s.RequestPowerStateChange=function(v,u){s.CIM_PowerManagementService_RequestPowerStateChange(v,'<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ComputerSystem</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="CreationClassName">CIM_ComputerSystem</Selector><Selector Name="Name">ManagedSystem</Selector></SelectorSet></ReferenceParameters>',null,null,u)};s.SetBootConfigRole=function(v,u){s.CIM_BootService_SetBootConfigRole('<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootConfigSetting</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="InstanceID">Intel(r) AMT: Boot Configuration 0</Selector></SelectorSet></ReferenceParameters>',v,u)};s.CancelAllQueries=function(u){s.wsman.CancelAllQueries(u)};s.AMT_AgentPresenceWatchdog_RegisterAgent=function(u){s.Exec("AMT_AgentPresenceWatchdog","RegisterAgent",{},u)};s.AMT_AgentPresenceWatchdog_AssertPresence=function(v,u){s.Exec("AMT_AgentPresenceWatchdog","AssertPresence",{SequenceNumber:v},u)};s.AMT_AgentPresenceWatchdog_AssertShutdown=function(v,u){s.Exec("AMT_AgentPresenceWatchdog","AssertShutdown",{SequenceNumber:v},u)};s.AMT_AgentPresenceWatchdog_AddAction=function(z,y,x,v,u,w,C,A,B){s.Exec("AMT_AgentPresenceWatchdog","AddAction",{OldState:z,NewState:y,EventOnTransition:x,ActionSd:v,ActionEac:u},w,C,A,B)};s.AMT_AgentPresenceWatchdog_DeleteAllActions=function(u,x,v,w){s.Exec("AMT_AgentPresenceWatchdog","DeleteAllActions",{},u,x,v,w)};s.AMT_AgentPresenceWatchdogAction_GetActionEac=function(u){s.Exec("AMT_AgentPresenceWatchdogAction","GetActionEac",{},u)};s.AMT_AgentPresenceWatchdogVA_RegisterAgent=function(u){s.Exec("AMT_AgentPresenceWatchdogVA","RegisterAgent",{},u)};s.AMT_AgentPresenceWatchdogVA_AssertPresence=function(v,u){s.Exec("AMT_AgentPresenceWatchdogVA","AssertPresence",{SequenceNumber:v},u)};s.AMT_AgentPresenceWatchdogVA_AssertShutdown=function(v,u){s.Exec("AMT_AgentPresenceWatchdogVA","AssertShutdown",{SequenceNumber:v},u)};s.AMT_AgentPresenceWatchdogVA_AddAction=function(z,y,x,v,u,w){s.Exec("AMT_AgentPresenceWatchdogVA","AddAction",{OldState:z,NewState:y,EventOnTransition:x,ActionSd:v,ActionEac:u},w)};s.AMT_AgentPresenceWatchdogVA_DeleteAllActions=function(u,v){s.Exec("AMT_AgentPresenceWatchdogVA","DeleteAllActions",{_method_dummy:u},v)};s.AMT_AuditLog_ClearLog=function(u){s.Exec("AMT_AuditLog","ClearLog",{},u)};s.AMT_AuditLog_RequestStateChange=function(v,w,u){s.Exec("AMT_AuditLog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_AuditLog_ReadRecords=function(v,u,w){s.Exec("AMT_AuditLog","ReadRecords",{StartIndex:v},u,w)};s.AMT_AuditLog_SetAuditLock=function(x,v,w,u){s.Exec("AMT_AuditLog","SetAuditLock",{LockTimeoutInSeconds:x,Flag:v,Handle:w},u)};s.AMT_AuditLog_ExportAuditLogSignature=function(v,u){s.Exec("AMT_AuditLog","ExportAuditLogSignature",{SigningMechanism:v},u)};s.AMT_AuditLog_SetSigningKeyMaterial=function(y,x,w,v,u){s.Exec("AMT_AuditLog","SetSigningKeyMaterial",{SigningMechanismType:y,SigningKey:x,LengthOfCertificates:w,Certificates:v},u)};s.AMT_AuditPolicyRule_SetAuditPolicy=function(w,u,x,y,v){s.Exec("AMT_AuditPolicyRule","SetAuditPolicy",{Enable:w,AuditedAppID:u,EventID:x,PolicyType:y},v)};s.AMT_AuditPolicyRule_SetAuditPolicyBulk=function(w,u,x,y,v){s.Exec("AMT_AuditPolicyRule","SetAuditPolicyBulk",{Enable:w,AuditedAppID:u,EventID:x,PolicyType:y},v)};s.AMT_AuthorizationService_AddUserAclEntryEx=function(x,w,y,u,z,v){s.Exec("AMT_AuthorizationService","AddUserAclEntryEx",{DigestUsername:x,DigestPassword:w,KerberosUserSid:y,AccessPermission:u,Realms:z},v)};s.AMT_AuthorizationService_EnumerateUserAclEntries=function(v,u){s.Exec("AMT_AuthorizationService","EnumerateUserAclEntries",{StartIndex:v},u)};s.AMT_AuthorizationService_GetUserAclEntryEx=function(v,u,w){s.Exec("AMT_AuthorizationService","GetUserAclEntryEx",{Handle:v},u,w)};s.AMT_AuthorizationService_UpdateUserAclEntryEx=function(y,x,w,z,u,A,v){s.Exec("AMT_AuthorizationService","UpdateUserAclEntryEx",{Handle:y,DigestUsername:x,DigestPassword:w,KerberosUserSid:z,AccessPermission:u,Realms:A},v)};s.AMT_AuthorizationService_RemoveUserAclEntry=function(v,u){s.Exec("AMT_AuthorizationService","RemoveUserAclEntry",{Handle:v},u)};s.AMT_AuthorizationService_SetAdminAclEntryEx=function(w,v,u){s.Exec("AMT_AuthorizationService","SetAdminAclEntryEx",{Username:w,DigestPassword:v},u)};s.AMT_AuthorizationService_GetAdminAclEntry=function(u){s.Exec("AMT_AuthorizationService","GetAdminAclEntry",{},u)};s.AMT_AuthorizationService_GetAdminAclEntryStatus=function(u){s.Exec("AMT_AuthorizationService","GetAdminAclEntryStatus",{},u)};s.AMT_AuthorizationService_GetAdminNetAclEntryStatus=function(u){s.Exec("AMT_AuthorizationService","GetAdminNetAclEntryStatus",{},u)};s.AMT_AuthorizationService_SetAclEnabledState=function(w,v,u,x){s.Exec("AMT_AuthorizationService","SetAclEnabledState",{Handle:w,Enabled:v},u,x)};s.AMT_AuthorizationService_GetAclEnabledState=function(v,u,w){s.Exec("AMT_AuthorizationService","GetAclEnabledState",{Handle:v},u,w)};s.AMT_EndpointAccessControlService_RequestStateChange=function(v,w,u){s.Exec("AMT_EndpointAccessControlService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_EndpointAccessControlService_GetPosture=function(v,u){s.Exec("AMT_EndpointAccessControlService","GetPosture",{PostureType:v},u)};s.AMT_EndpointAccessControlService_GetPostureHash=function(v,u){s.Exec("AMT_EndpointAccessControlService","GetPostureHash",{PostureType:v},u)};s.AMT_EndpointAccessControlService_UpdatePostureState=function(v,u){s.Exec("AMT_EndpointAccessControlService","UpdatePostureState",{UpdateType:v},u)};s.AMT_EndpointAccessControlService_GetEacOptions=function(u){s.Exec("AMT_EndpointAccessControlService","GetEacOptions",{},u)};s.AMT_EndpointAccessControlService_SetEacOptions=function(v,w,u){s.Exec("AMT_EndpointAccessControlService","SetEacOptions",{EacVendors:v,PostureHashAlgorithm:w},u)};s.AMT_EnvironmentDetectionSettingData_SetSystemDefensePolicy=function(v,u){s.Exec("AMT_EnvironmentDetectionSettingData","SetSystemDefensePolicy",{Policy:v},u)};s.AMT_EnvironmentDetectionSettingData_EnableVpnRouting=function(v,u){s.Exec("AMT_EnvironmentDetectionSettingData","EnableVpnRouting",{Enable:v},u)};s.AMT_EthernetPortSettings_SetLinkPreference=function(v,w,u){s.Exec("AMT_EthernetPortSettings","SetLinkPreference",{LinkPreference:v,Timeout:w},u)};s.AMT_HeuristicPacketFilterStatistics_ResetSelectedStats=function(v,u){s.Exec("AMT_HeuristicPacketFilterStatistics","ResetSelectedStats",{SelectedStatistics:v},u)};s.AMT_KerberosSettingData_GetCredentialCacheState=function(u){s.Exec("AMT_KerberosSettingData","GetCredentialCacheState",{},u)};s.AMT_KerberosSettingData_SetCredentialCacheState=function(v,u){s.Exec("AMT_KerberosSettingData","SetCredentialCacheState",{Enable:v},u)};s.AMT_MessageLog_CancelIteration=function(v,u){s.Exec("AMT_MessageLog","CancelIteration",{IterationIdentifier:v},u)};s.AMT_MessageLog_RequestStateChange=function(v,w,u){s.Exec("AMT_MessageLog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_MessageLog_ClearLog=function(u){s.Exec("AMT_MessageLog","ClearLog",{},u)};s.AMT_MessageLog_GetRecords=function(v,w,u,x){s.Exec("AMT_MessageLog","GetRecords",{IterationIdentifier:v,MaxReadRecords:w},u,x)};s.AMT_MessageLog_GetRecord=function(v,w,u){s.Exec("AMT_MessageLog","GetRecord",{IterationIdentifier:v,PositionToNext:w},u)};s.AMT_MessageLog_PositionAtRecord=function(v,w,x,u){s.Exec("AMT_MessageLog","PositionAtRecord",{IterationIdentifier:v,MoveAbsolute:w,RecordNumber:x},u)};s.AMT_MessageLog_PositionToFirstRecord=function(u,v){s.Exec("AMT_MessageLog","PositionToFirstRecord",{},u,v)};s.AMT_MessageLog_FreezeLog=function(v,u){s.Exec("AMT_MessageLog","FreezeLog",{Freeze:v},u)};s.AMT_PublicKeyManagementService_AddCRL=function(w,v,u){s.Exec("AMT_PublicKeyManagementService","AddCRL",{Url:w,SerialNumbers:v},u)};s.AMT_PublicKeyManagementService_ResetCRLList=function(u,v){s.Exec("AMT_PublicKeyManagementService","ResetCRLList",{_method_dummy:u},v)};s.AMT_PublicKeyManagementService_AddCertificate=function(v,u){s.Exec("AMT_PublicKeyManagementService","AddCertificate",{CertificateBlob:v},u)};s.AMT_PublicKeyManagementService_AddTrustedRootCertificate=function(v,u){s.Exec("AMT_PublicKeyManagementService","AddTrustedRootCertificate",{CertificateBlob:v},u)};s.AMT_PublicKeyManagementService_AddKey=function(v,u){s.Exec("AMT_PublicKeyManagementService","AddKey",{KeyBlob:v},u)};s.AMT_PublicKeyManagementService_GeneratePKCS10Request=function(w,v,x,u){s.Exec("AMT_PublicKeyManagementService","GeneratePKCS10Request",{KeyPair:w,DNName:v,Usage:x},u)};s.AMT_PublicKeyManagementService_GeneratePKCS10RequestEx=function(v,x,w,u){s.Exec("AMT_PublicKeyManagementService","GeneratePKCS10RequestEx",{KeyPair:v,SigningAlgorithm:x,NullSignedCertificateRequest:w},u)};s.AMT_PublicKeyManagementService_GenerateKeyPair=function(v,w,u){s.Exec("AMT_PublicKeyManagementService","GenerateKeyPair",{KeyAlgorithm:v,KeyLength:w},u)};s.AMT_RedirectionService_RequestStateChange=function(v,u){s.Exec("AMT_RedirectionService","RequestStateChange",{RequestedState:v},u)};s.AMT_RedirectionService_TerminateSession=function(v,u){s.Exec("AMT_RedirectionService","TerminateSession",{SessionType:v},u)};s.AMT_RemoteAccessService_AddMpServer=function(u,z,B,v,x,C,A,y,w){s.Exec("AMT_RemoteAccessService","AddMpServer",{AccessInfo:u,InfoFormat:z,Port:B,AuthMethod:v,Certificate:x,Username:C,Password:A,CN:y},w)};s.AMT_RemoteAccessService_AddRemoteAccessPolicyRule=function(x,y,v,w,u){s.Exec("AMT_RemoteAccessService","AddRemoteAccessPolicyRule",{Trigger:x,TunnelLifeTime:y,ExtendedData:v,MpServer:w},u)};s.AMT_RemoteAccessService_CloseRemoteAccessConnection=function(u,v){s.Exec("AMT_RemoteAccessService","CloseRemoteAccessConnection",{_method_dummy:u},v)};s.AMT_SetupAndConfigurationService_CommitChanges=function(u,v){s.Exec("AMT_SetupAndConfigurationService","CommitChanges",{_method_dummy:u},v)};s.AMT_SetupAndConfigurationService_Unprovision=function(v,u){s.Exec("AMT_SetupAndConfigurationService","Unprovision",{ProvisioningMode:v},u)};s.AMT_SetupAndConfigurationService_PartialUnprovision=function(u,v){s.Exec("AMT_SetupAndConfigurationService","PartialUnprovision",{_method_dummy:u},v)};s.AMT_SetupAndConfigurationService_ResetFlashWearOutProtection=function(u,v){s.Exec("AMT_SetupAndConfigurationService","ResetFlashWearOutProtection",{_method_dummy:u},v)};s.AMT_SetupAndConfigurationService_ExtendProvisioningPeriod=function(v,u){s.Exec("AMT_SetupAndConfigurationService","ExtendProvisioningPeriod",{Duration:v},u)};s.AMT_SetupAndConfigurationService_SetMEBxPassword=function(v,u){s.Exec("AMT_SetupAndConfigurationService","SetMEBxPassword",{Password:v},u)};s.AMT_SetupAndConfigurationService_SetTLSPSK=function(v,w,u){s.Exec("AMT_SetupAndConfigurationService","SetTLSPSK",{PID:v,PPS:w},u)};s.AMT_SetupAndConfigurationService_GetProvisioningAuditRecord=function(u){s.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecord",{},u)};s.AMT_SetupAndConfigurationService_GetUuid=function(u){s.Exec("AMT_SetupAndConfigurationService","GetUuid",{},u)};s.AMT_SetupAndConfigurationService_GetUnprovisionBlockingComponents=function(u){s.Exec("AMT_SetupAndConfigurationService","GetUnprovisionBlockingComponents",{},u)};s.AMT_SetupAndConfigurationService_GetProvisioningAuditRecordV2=function(u){s.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecordV2",{},u)};s.AMT_SystemDefensePolicy_GetTimeout=function(u){s.Exec("AMT_SystemDefensePolicy","GetTimeout",{},u)};s.AMT_SystemDefensePolicy_SetTimeout=function(v,u){s.Exec("AMT_SystemDefensePolicy","SetTimeout",{Timeout:v},u)};s.AMT_SystemDefensePolicy_UpdateStatistics=function(v,x,u,z,w,y){s.Exec("AMT_SystemDefensePolicy","UpdateStatistics",{NetworkInterface:v,ResetOnRead:x},u,z,w,y)};s.AMT_SystemPowerScheme_SetPowerScheme=function(u,v,w){s.Exec("AMT_SystemPowerScheme","SetPowerScheme",{},u,w,0,{InstanceID:v})};s.AMT_TimeSynchronizationService_GetLowAccuracyTimeSynch=function(u,v){s.Exec("AMT_TimeSynchronizationService","GetLowAccuracyTimeSynch",{},u,v)};s.AMT_TimeSynchronizationService_SetHighAccuracyTimeSynch=function(v,x,y,u,w){s.Exec("AMT_TimeSynchronizationService","SetHighAccuracyTimeSynch",{Ta0:v,Tm1:x,Tm2:y},u,w)};s.AMT_UserInitiatedConnectionService_RequestStateChange=function(v,w,u){s.Exec("AMT_UserInitiatedConnectionService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_WebUIService_RequestStateChange=function(v,w,u){s.Exec("AMT_WebUIService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_WiFiPortConfigurationService_AddWiFiSettings=function(y,z,x,w,u,v){s.ExecWithXml("AMT_WiFiPortConfigurationService","AddWiFiSettings",{WiFiEndpoint:y,WiFiEndpointSettingsInput:z,IEEE8021xSettingsInput:x,ClientCredential:w,CACredential:u},v)};s.AMT_WiFiPortConfigurationService_UpdateWiFiSettings=function(y,z,x,w,u,v){s.ExecWithXml("AMT_WiFiPortConfigurationService","UpdateWiFiSettings",{WiFiEndpointSettings:y,WiFiEndpointSettingsInput:z,IEEE8021xSettingsInput:x,ClientCredential:w,CACredential:u},v)};s.AMT_WiFiPortConfigurationService_DeleteAllITProfiles=function(u,v){s.Exec("AMT_WiFiPortConfigurationService","DeleteAllITProfiles",{_method_dummy:u},v)};s.AMT_WiFiPortConfigurationService_DeleteAllUserProfiles=function(u,v){s.Exec("AMT_WiFiPortConfigurationService","DeleteAllUserProfiles",{_method_dummy:u},v)};s.CIM_Account_RequestStateChange=function(v,w,u){s.Exec("CIM_Account","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_AccountManagementService_CreateAccount=function(w,u,v){s.Exec("CIM_AccountManagementService","CreateAccount",{System:w,AccountTemplate:u},v)};s.CIM_BootConfigSetting_ChangeBootOrder=function(v,u){s.Exec("CIM_BootConfigSetting","ChangeBootOrder",{Source:v},u)};s.CIM_BootService_SetBootConfigRole=function(u,w,v){s.Exec("CIM_BootService","SetBootConfigRole",{BootConfigSetting:u,Role:w},v,0,1)};s.CIM_Card_ConnectorPower=function(v,w,u){s.Exec("CIM_Card","ConnectorPower",{Connector:v,PoweredOn:w},u)};s.CIM_Card_IsCompatible=function(v,u){s.Exec("CIM_Card","IsCompatible",{ElementToCheck:v},u)};s.CIM_Chassis_IsCompatible=function(v,u){s.Exec("CIM_Chassis","IsCompatible",{ElementToCheck:v},u)};s.CIM_Fan_SetSpeed=function(v,u){s.Exec("CIM_Fan","SetSpeed",{DesiredSpeed:v},u)};s.CIM_KVMRedirectionSAP_RequestStateChange=function(v,w,u){s.Exec("CIM_KVMRedirectionSAP","RequestStateChange",{RequestedState:v},u)};s.CIM_MediaAccessDevice_LockMedia=function(v,u){s.Exec("CIM_MediaAccessDevice","LockMedia",{Lock:v},u)};s.CIM_MediaAccessDevice_SetPowerState=function(v,w,u){s.Exec("CIM_MediaAccessDevice","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_MediaAccessDevice_Reset=function(u){s.Exec("CIM_MediaAccessDevice","Reset",{},u)};s.CIM_MediaAccessDevice_EnableDevice=function(v,u){s.Exec("CIM_MediaAccessDevice","EnableDevice",{Enabled:v},u)};s.CIM_MediaAccessDevice_OnlineDevice=function(v,u){s.Exec("CIM_MediaAccessDevice","OnlineDevice",{Online:v},u)};s.CIM_MediaAccessDevice_QuiesceDevice=function(v,u){s.Exec("CIM_MediaAccessDevice","QuiesceDevice",{Quiesce:v},u)};s.CIM_MediaAccessDevice_SaveProperties=function(u){s.Exec("CIM_MediaAccessDevice","SaveProperties",{},u)};s.CIM_MediaAccessDevice_RestoreProperties=function(u){s.Exec("CIM_MediaAccessDevice","RestoreProperties",{},u)};s.CIM_MediaAccessDevice_RequestStateChange=function(v,w,u){s.Exec("CIM_MediaAccessDevice","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_PhysicalFrame_IsCompatible=function(v,u){s.Exec("CIM_PhysicalFrame","IsCompatible",{ElementToCheck:v},u)};s.CIM_PhysicalPackage_IsCompatible=function(v,u){s.Exec("CIM_PhysicalPackage","IsCompatible",{ElementToCheck:v},u)};s.CIM_PowerManagementService_RequestPowerStateChange=function(w,v,x,y,u){s.Exec("CIM_PowerManagementService","RequestPowerStateChange",{PowerState:w,ManagedElement:v,Time:x,TimeoutPeriod:y},u,0,1)};s.CIM_PowerSupply_SetPowerState=function(v,w,u){s.Exec("CIM_PowerSupply","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_PowerSupply_Reset=function(u){s.Exec("CIM_PowerSupply","Reset",{},u)};s.CIM_PowerSupply_EnableDevice=function(v,u){s.Exec("CIM_PowerSupply","EnableDevice",{Enabled:v},u)};s.CIM_PowerSupply_OnlineDevice=function(v,u){s.Exec("CIM_PowerSupply","OnlineDevice",{Online:v},u)};s.CIM_PowerSupply_QuiesceDevice=function(v,u){s.Exec("CIM_PowerSupply","QuiesceDevice",{Quiesce:v},u)};s.CIM_PowerSupply_SaveProperties=function(u){s.Exec("CIM_PowerSupply","SaveProperties",{},u)};s.CIM_PowerSupply_RestoreProperties=function(u){s.Exec("CIM_PowerSupply","RestoreProperties",{},u)};s.CIM_PowerSupply_RequestStateChange=function(v,w,u){s.Exec("CIM_PowerSupply","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_Processor_SetPowerState=function(v,w,u){s.Exec("CIM_Processor","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_Processor_Reset=function(u){s.Exec("CIM_Processor","Reset",{},u)};s.CIM_Processor_EnableDevice=function(v,u){s.Exec("CIM_Processor","EnableDevice",{Enabled:v},u)};s.CIM_Processor_OnlineDevice=function(v,u){s.Exec("CIM_Processor","OnlineDevice",{Online:v},u)};s.CIM_Processor_QuiesceDevice=function(v,u){s.Exec("CIM_Processor","QuiesceDevice",{Quiesce:v},u)};s.CIM_Processor_SaveProperties=function(u){s.Exec("CIM_Processor","SaveProperties",{},u)};s.CIM_Processor_RestoreProperties=function(u){s.Exec("CIM_Processor","RestoreProperties",{},u)};s.CIM_Processor_RequestStateChange=function(v,w,u){s.Exec("CIM_Processor","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_RecordLog_ClearLog=function(u){s.Exec("CIM_RecordLog","ClearLog",{},u)};s.CIM_RecordLog_RequestStateChange=function(v,w,u){s.Exec("CIM_RecordLog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_RedirectionService_RequestStateChange=function(v,w,u){s.Exec("CIM_RedirectionService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_Sensor_SetPowerState=function(v,w,u){s.Exec("CIM_Sensor","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_Sensor_Reset=function(u){s.Exec("CIM_Sensor","Reset",{},u)};s.CIM_Sensor_EnableDevice=function(v,u){s.Exec("CIM_Sensor","EnableDevice",{Enabled:v},u)};s.CIM_Sensor_OnlineDevice=function(v,u){s.Exec("CIM_Sensor","OnlineDevice",{Online:v},u)};s.CIM_Sensor_QuiesceDevice=function(v,u){s.Exec("CIM_Sensor","QuiesceDevice",{Quiesce:v},u)};s.CIM_Sensor_SaveProperties=function(u){s.Exec("CIM_Sensor","SaveProperties",{},u)};s.CIM_Sensor_RestoreProperties=function(u){s.Exec("CIM_Sensor","RestoreProperties",{},u)};s.CIM_Sensor_RequestStateChange=function(v,w,u){s.Exec("CIM_Sensor","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_StatisticalData_ResetSelectedStats=function(v,u){s.Exec("CIM_StatisticalData","ResetSelectedStats",{SelectedStatistics:v},u)};s.CIM_Watchdog_KeepAlive=function(u){s.Exec("CIM_Watchdog","KeepAlive",{},u)};s.CIM_Watchdog_SetPowerState=function(v,w,u){s.Exec("CIM_Watchdog","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_Watchdog_Reset=function(u){s.Exec("CIM_Watchdog","Reset",{},u)};s.CIM_Watchdog_EnableDevice=function(v,u){s.Exec("CIM_Watchdog","EnableDevice",{Enabled:v},u)};s.CIM_Watchdog_OnlineDevice=function(v,u){s.Exec("CIM_Watchdog","OnlineDevice",{Online:v},u)};s.CIM_Watchdog_QuiesceDevice=function(v,u){s.Exec("CIM_Watchdog","QuiesceDevice",{Quiesce:v},u)};s.CIM_Watchdog_SaveProperties=function(u){s.Exec("CIM_Watchdog","SaveProperties",{},u)};s.CIM_Watchdog_RestoreProperties=function(u){s.Exec("CIM_Watchdog","RestoreProperties",{},u)};s.CIM_Watchdog_RequestStateChange=function(v,w,u){s.Exec("CIM_Watchdog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_WiFiPort_SetPowerState=function(v,w,u){s.Exec("CIM_WiFiPort","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_WiFiPort_Reset=function(u){s.Exec("CIM_WiFiPort","Reset",{},u)};s.CIM_WiFiPort_EnableDevice=function(v,u){s.Exec("CIM_WiFiPort","EnableDevice",{Enabled:v},u)};s.CIM_WiFiPort_OnlineDevice=function(v,u){s.Exec("CIM_WiFiPort","OnlineDevice",{Online:v},u)};s.CIM_WiFiPort_QuiesceDevice=function(v,u){s.Exec("CIM_WiFiPort","QuiesceDevice",{Quiesce:v},u)};s.CIM_WiFiPort_SaveProperties=function(u){s.Exec("CIM_WiFiPort","SaveProperties",{},u)};s.CIM_WiFiPort_RestoreProperties=function(u){s.Exec("CIM_WiFiPort","RestoreProperties",{},u)};s.CIM_WiFiPort_RequestStateChange=function(v,w,u){s.Exec("CIM_WiFiPort","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.IPS_HostBasedSetupService_Setup=function(y,z,x,v,A,w,u){s.Exec("IPS_HostBasedSetupService","Setup",{NetAdminPassEncryptionType:y,NetworkAdminPassword:z,McNonce:x,Certificate:v,SigningAlgorithm:A,DigitalSignature:w},u)};s.IPS_HostBasedSetupService_AddNextCertInChain=function(x,v,w,u){s.Exec("IPS_HostBasedSetupService","AddNextCertInChain",{NextCertificate:x,IsLeafCertificate:v,IsRootCertificate:w},u)};s.IPS_HostBasedSetupService_AdminSetup=function(x,y,w,z,v,u){s.Exec("IPS_HostBasedSetupService","AdminSetup",{NetAdminPassEncryptionType:x,NetworkAdminPassword:y,McNonce:w,SigningAlgorithm:z,DigitalSignature:v},u)};s.IPS_HostBasedSetupService_UpgradeClientToAdmin=function(w,x,v,u){s.Exec("IPS_HostBasedSetupService","UpgradeClientToAdmin",{McNonce:w,SigningAlgorithm:x,DigitalSignature:v},u)};s.IPS_HostBasedSetupService_DisableClientControlMode=function(u,v){s.Exec("IPS_HostBasedSetupService","DisableClientControlMode",{_method_dummy:u},v)};s.IPS_KVMRedirectionSettingData_TerminateSession=function(u){s.Exec("IPS_KVMRedirectionSettingData","TerminateSession",{},u)};s.IPS_OptInService_StartOptIn=function(u){s.Exec("IPS_OptInService","StartOptIn",{},u)};s.IPS_OptInService_CancelOptIn=function(u){s.Exec("IPS_OptInService","CancelOptIn",{},u)};s.IPS_OptInService_SendOptInCode=function(v,u){s.Exec("IPS_OptInService","SendOptInCode",{OptInCode:v},u)};s.IPS_OptInService_StartService=function(u){s.Exec("IPS_OptInService","StartService",{},u)};s.IPS_OptInService_StopService=function(u){s.Exec("IPS_OptInService","StopService",{},u)};s.IPS_OptInService_RequestStateChange=function(v,w,u){s.Exec("IPS_OptInService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.IPS_ProvisioningRecordLog_RequestStateChange=function(v,w,u){s.Exec("IPS_ProvisioningRecordLog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.IPS_ProvisioningRecordLog_ClearLog=function(u,v){s.Exec("IPS_ProvisioningRecordLog","ClearLog",{_method_dummy:u},v)};s.IPS_SecIOService_RequestStateChange=function(v,w,u){s.Exec("IPS_SecIOService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AmtStatusToStr=function(u){if(s.AmtStatusCodes[u]){return s.AmtStatusCodes[u]}else{return"UNKNOWN_ERROR"}};s.AmtStatusCodes={0:"SUCCESS",1:"INTERNAL_ERROR",2:"NOT_READY",3:"INVALID_PT_MODE",4:"INVALID_MESSAGE_LENGTH",5:"TABLE_FINGERPRINT_NOT_AVAILABLE",6:"INTEGRITY_CHECK_FAILED",7:"UNSUPPORTED_ISVS_VERSION",8:"APPLICATION_NOT_REGISTERED",9:"INVALID_REGISTRATION_DATA",10:"APPLICATION_DOES_NOT_EXIST",11:"NOT_ENOUGH_STORAGE",12:"INVALID_NAME",13:"BLOCK_DOES_NOT_EXIST",14:"INVALID_BYTE_OFFSET",15:"INVALID_BYTE_COUNT",16:"NOT_PERMITTED",17:"NOT_OWNER",18:"BLOCK_LOCKED_BY_OTHER",19:"BLOCK_NOT_LOCKED",20:"INVALID_GROUP_PERMISSIONS",21:"GROUP_DOES_NOT_EXIST",22:"INVALID_MEMBER_COUNT",23:"MAX_LIMIT_REACHED",24:"INVALID_AUTH_TYPE",25:"AUTHENTICATION_FAILED",26:"INVALID_DHCP_MODE",27:"INVALID_IP_ADDRESS",28:"INVALID_DOMAIN_NAME",29:"UNSUPPORTED_VERSION",30:"REQUEST_UNEXPECTED",31:"INVALID_TABLE_TYPE",32:"INVALID_PROVISIONING_STATE",33:"UNSUPPORTED_OBJECT",34:"INVALID_TIME",35:"INVALID_INDEX",36:"INVALID_PARAMETER",37:"INVALID_NETMASK",38:"FLASH_WRITE_LIMIT_EXCEEDED",39:"INVALID_IMAGE_LENGTH",40:"INVALID_IMAGE_SIGNATURE",41:"PROPOSE_ANOTHER_VERSION",42:"INVALID_PID_FORMAT",43:"INVALID_PPS_FORMAT",44:"BIST_COMMAND_BLOCKED",45:"CONNECTION_FAILED",46:"CONNECTION_TOO_MANY",47:"RNG_GENERATION_IN_PROGRESS",48:"RNG_NOT_READY",49:"CERTIFICATE_NOT_READY",1024:"DISABLED_BY_POLICY",2048:"NETWORK_IF_ERROR_BASE",2049:"UNSUPPORTED_OEM_NUMBER",2050:"UNSUPPORTED_BOOT_OPTION",2051:"INVALID_COMMAND",2052:"INVALID_SPECIAL_COMMAND",2053:"INVALID_HANDLE",2054:"INVALID_PASSWORD",2055:"INVALID_REALM",2056:"STORAGE_ACL_ENTRY_IN_USE",2057:"DATA_MISSING",2058:"DUPLICATE",2059:"EVENTLOG_FROZEN",2060:"PKI_MISSING_KEYS",2061:"PKI_GENERATING_KEYS",2062:"INVALID_KEY",2063:"INVALID_CERT",2064:"CERT_KEY_NOT_MATCH",2065:"MAX_KERB_DOMAIN_REACHED",2066:"UNSUPPORTED",2067:"INVALID_PRIORITY",2068:"NOT_FOUND",2069:"INVALID_CREDENTIALS",2070:"INVALID_PASSPHRASE",2072:"NO_ASSOCIATION",2075:"AUDIT_FAIL",2076:"BLOCKING_COMPONENT",2081:"USER_CONSENT_REQUIRED",4096:"APP_INTERNAL_ERROR",4097:"NOT_INITIALIZED",4098:"LIB_VERSION_UNSUPPORTED",4099:"INVALID_PARAM",4100:"RESOURCES",4101:"HARDWARE_ACCESS_ERROR",4102:"REQUESTOR_NOT_REGISTERED",4103:"NETWORK_ERROR",4104:"PARAM_BUFFER_TOO_SHORT",4105:"COM_NOT_INITIALIZED_IN_THREAD",4106:"URL_REQUIRED"};s.GetMessageLog=function(u,v){s.AMT_MessageLog_PositionToFirstRecord(k,[u,v,[]])};function k(w,u,v,x,y){if(x!=200||v.Body.ReturnValue!="0"){y[0](s,null,y[2]);return}s.AMT_MessageLog_GetRecords(v.Body.IterationIdentifier,390,l,y)}function l(D,A,C,E,G){if(E!=200||C.Body.ReturnValue!="0"){G[0](s,null,G[2]);return}var y,z,I,v,u=G[2],F=new Date(),H,B=C.Body.RecordArray;if(typeof B==="string"){C.Body.RecordArray=[C.Body.RecordArray]}for(y in B){v=null;try{v=window.atob(B[y])}catch(w){}if(v!=null){H=ReadIntX(v,0);if((H>0)&&(H<4294967295)){I={DeviceAddress:v.charCodeAt(4),EventSensorType:v.charCodeAt(5),EventType:v.charCodeAt(6),EventOffset:v.charCodeAt(7),EventSourceType:v.charCodeAt(8),EventSeverity:v.charCodeAt(9),SensorNumber:v.charCodeAt(10),Entity:v.charCodeAt(11),EntityInstance:v.charCodeAt(12),EventData:[],Time:new Date((H+(F.getTimezoneOffset()*60))*1000)};for(z=13;z<21;z++){I.EventData.push(v.charCodeAt(z))}I.EntityStr=o[I.Entity];I.Desc=j(I.EventSensorType,I.EventOffset,I.EventData,I.Entity);if(!I.EntityStr){I.EntityStr="Unknown"}u.push(I)}}}if(C.Body.NoMoreRecords!=true){s.AMT_MessageLog_GetRecords(C.Body.IterationIdentifier,390,l,[G[0],u,G[2]])}else{G[0](s,u,G[2])}}var e="Platform firmware (e.g. BIOS)|SMI handler|ISV system management software|Alert ASIC|IPMI|BIOS vendor|System board set vendor|System integrator|Third party add-in|OSV|NIC|System management card".split("|");var p="Unspecified.|No system memory is physically installed in the system.|No usable system memory, all installed memory has experienced an unrecoverable failure.|Unrecoverable hard-disk/ATAPI/IDE device failure.|Unrecoverable system-board failure.|Unrecoverable diskette subsystem failure.|Unrecoverable hard-disk controller failure.|Unrecoverable PS/2 or USB keyboard failure.|Removable boot media not found.|Unrecoverable video controller failure.|No video device detected.|Firmware (BIOS) ROM corruption detected.|CPU voltage mismatch (processors that share same supply have mismatched voltage requirements)|CPU speed matching failure".split("|");var q="Unspecified.|Memory initialization.|Starting hard-disk initialization and test|Secondary processor(s) initialization|User authentication|User-initiated system setup|USB resource configuration|PCI resource configuration|Option ROM initialization|Video initialization|Cache initialization|SM Bus initialization|Keyboard controller initialization|Embedded controller/management controller initialization|Docking station attachment|Enabling docking station|Docking station ejection|Disabling docking station|Calling operating system wake-up vector|Starting operating system boot process|Baseboard or motherboard initialization|reserved|Floppy initialization|Keyboard test|Pointing device test|Primary processor initialization".split("|");var o="Unspecified|Other|Unknown|Processor|Disk|Peripheral|System management module|System board|Memory module|Processor module|Power supply|Add in card|Front panel board|Back panel board|Power system board|Drive backplane|System internal expansion board|Other system board|Processor board|Power unit|Power module|Power management board|Chassis back panel board|System chassis|Sub chassis|Other chassis board|Disk drive bay|Peripheral bay|Device bay|Fan cooling|Cooling unit|Cable interconnect|Memory device|System management software|BIOS|Intel(r) ME|System bus|Group|Intel(r) ME|External environment|Battery|Processing blade|Connectivity switch|Processor/memory module|I/O module|Processor I/O module|Management controller firmware|IPMI channel|PCI bus|PCI express bus|SCSI bus|SATA/SAS bus|Processor front side bus".split("|");s.RealmNames="||Redirection|PT Administration|Hardware Asset|Remote Control|Storage|Event Manager|Storage Admin|Agent Presence Local|Agent Presence Remote|Circuit Breaker|Network Time|General Information|Firmware Update|EIT|LocalUN|Endpoint Access Control|Endpoint Access Control Admin|Event Log Reader|Audit Log|ACL Realm|||Local System".split("|");s.WatchdogCurrentStates={1:"Not Started",2:"Stopped",4:"Running",8:"Expired",16:"Suspended"};function j(x,w,v,u){if(x==15){if(v[0]==235){return"Invalid Data"}if(w==0){return p[v[1]]}return q[v[1]]}if(x==18&&v[0]==170){return"Agent watchdog "+char2hex(v[4])+char2hex(v[3])+char2hex(v[2])+char2hex(v[1])+"-"+char2hex(v[6])+char2hex(v[5])+"-... changed to "+s.WatchdogCurrentStates[v[7]]}if(x==6){return"Authentication failed "+(v[1]+(v[2]<<8))+" times. The system may be under attack."}if(x==30){return"No bootable media"}if(x==32){return"Operating system lockup or power interrupt"}if(x==35){return"System boot failure"}if(x==37){return"System firmware started (at least one CPU is properly executing)."}return"Unknown Sensor Type #"+x}return s}var md5_k=[];for(var i=0;i<64;){md5_k[i]=0|(Math.abs(Math.sin(++i))*4294967296)}function hex_md5(p){var g,k,l,o,r=[],q=unescape(encodeURI(p)),e=q.length,m=[g=1732584193,k=-271733879,~g,~k],n=0;for(;n<=e;){r[n>>2]|=(q.charCodeAt(n)||128)<<8*(n++%4)}r[p=(e+8>>6)*16+14]=e*8;n=0;for(;n<p;n+=16){e=m;o=0;for(;o<64;){e=[l=e[3],((g=e[1]|0)+((l=((e[0]+[g&(k=e[2])|~g&l,l&g|~l&k,g^k^l,k^(g|~l)][e=o>>4])+(md5_k[o]+(r[[o,5*o+1,3*o+5,7*o][e]%16+n]|0))))<<(e=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*e+o++%4])|l>>>32-e)),g,k]}for(o=4;o;){m[--o]=m[o]+e[o]}}p="";for(;o<32;){p+=((m[o>>3]>>((1^o++&7)*4))&15).toString(16)}return p}function rstr_md5(a){return hex2rstr(hex_md5(a))}function execArgumentsToXml(c){if(c===undefined||c===null){return null}var d="";for(var b in c){var a=c[b];if(!a){continue}if(a.__parameterType==="reference"){d+=referenceToXml(b,a)}else{d+=instanceToXml(b,a)}}return d}function instanceToXml(d,c){if(c===undefined||c===null){return null}var b=!!c.__namespace;var j=b?"<q:":"<";var a=b?"</q:":"</";var e=b?(' xmlns:q="'+c.__namespace+'"'):"";var h="<r:"+d+e+">";for(var g in c){if(!c.hasOwnProperty(g)||g.indexOf("__")===0){continue}if(typeof c[g]==="function"||Array.isArray(c[g])){continue}if(typeof c[g]==="object"){console.error("only convert one level down...")}else{h+=j+g+">"+c[g].toString()+a+g+">"}}h+="</r:"+d+">";return h}function referenceToXml(b,a){if(a===undefined||a===null){return null}var c="<r:"+b+"><a:Address>/wsman</a:Address><a:ReferenceParameters><w:ResourceURI>"+a.__resourceUri+"</w:ResourceURI><w:SelectorSet>";for(var d in a){if(!a.hasOwnProperty(d)||d.indexOf("__")===0){continue}if(typeof a[d]==="function"||typeof a[d]==="object"||Array.isArray(a[d])){continue}c+='<w:Selector Name="'+d+'">'+a[d].toString()+"</w:Selector>"}c+="</w:SelectorSet></a:ReferenceParameters></r:"+b+">";return c}function GetSidString(c){var b="S-"+c.charCodeAt(0)+"-"+c.charCodeAt(7);for(var a=2;a<(c.length/4);a++){b+="-"+ReadIntX(c,a*4)}return b}function GetSidByteArray(d){if(!d||d==null){return null}var c=d.split("-");if(c.length<4||(c[0]!="s"&&c[0]!="S")){return null}for(var a=1;a<c.length;a++){var e=parseInt(c[a]);if(e!=c[a]){return null}c[a]=e}var b=String.fromCharCode(c[1])+String.fromCharCode(c.length-3)+ShortToStr(Math.floor(c[2]/Math.pow(2,32)))+IntToStr((c[2])&65535);for(var a=3;a<c.length;a++){b+=IntToStrX(c[a])}return b}var WsmanStackCreateService=function(h,l,n,k,m,g){var j={};j.NextMessageId=1;j.Address="/wsman";j.comm=CreateWsmanComm(h,l,n,k,m,g);j.PerformAjax=function(q,o,s,r,p){if(p==undefined){p=""}j.comm.PerformAjax('<?xml version="1.0" encoding="utf-8"?><Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns="http://www.w3.org/2003/05/soap-envelope" '+p+"><Header><a:Action>"+q,function(t,u,v){if(u!=200){o(j,null,{Header:{HttpError:u}},u,v);return}var w=j.ParseWsman(t);if(!w||w==null){o(j,null,{Header:{HttpError:u}},601,v)}else{o(j,w.Header.ResourceURI,w,200,v)}},s,r)};j.CancelAllQueries=function(o){j.comm.CancelAllQueries(o)};j.GetNameFromUrl=function(o){var p=o.lastIndexOf("/");return(p==-1)?o:o.substring(p+1)};j.ExecSubscribe=function(w,q,z,o,y,v,x,t,A,u){var r="",s="";if(A!=undefined&&u!=undefined){r="<t:IssuedTokens><t:RequestSecurityTokenResponse><t:TokenType>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken</t:TokenType><t:RequestedSecurityToken><se:UsernameToken><se:Username>"+A+'</se:Username><se:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordText">'+u+"</se:Password></se:UsernameToken></t:RequestedSecurityToken></t:RequestSecurityTokenResponse></t:IssuedTokens>";s='<Auth Profile="http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/secprofile/http/digest"/>'}if(t!=undefined&&t!=null){t="<a:ReferenceParameters>"+t+"</a:ReferenceParameters>"}else{t=""}var p="http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+w+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+d(x)+r+'</Header><Body><e:Subscribe><e:Delivery Mode="http://schemas.dmtf.org/wbem/wsman/1/wsman/'+q+'"><e:NotifyTo><a:Address>'+z+"</a:Address></e:NotifyTo>"+s+"</e:Delivery><e:Expires>PT0.000000S</e:Expires></e:Subscribe>";j.PerformAjax(p+"</Body></Envelope>",o,y,v,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:se="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:m="http://x.com"')};j.ExecUnSubscribe=function(r,o,t,q,s){var p="http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+r+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+d(s)+"</Header><Body><e:Unsubscribe/>";j.PerformAjax(p+"</Body></Envelope>",o,t,q,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing"')};j.ExecPut=function(s,r,o,u,q,t){var p="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+s+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout>"+d(t)+"</Header><Body>"+c(s,r);j.PerformAjax(p+"</Body></Envelope>",o,u,q)};j.ExecCreate=function(u,t,o,w,s,v){var r=j.GetNameFromUrl(u);var p="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+u+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+d(v)+"</Header><Body><g:"+r+' xmlns:g="'+u+'">';for(var q in t){p+="<g:"+q+">"+t[q]+"</g:"+q+">"}j.PerformAjax(p+"</g:"+r+"></Body></Envelope>",o,w,s)};j.ExecCreateXml=function(s,o,p,u,r){var q=j.GetNameFromUrl(s),t="";j.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+s+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout></Header><Body><r:"+q+' xmlns:r="'+s+'">'+o+"</r:"+q+"></Body></Envelope>",p,u,r)};j.ExecDelete=function(s,r,o,t,q){var p="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+s+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+d(r)+"</Header><Body /></Envelope>";j.PerformAjax(p,o,t,q)};j.ExecGet=function(q,o,r,p){j.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+q+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body /></Envelope>",o,r,p)};j.ExecMethod=function(u,s,o,q,w,t,v){var p="";for(var r in o){if(o[r]!=null){if(Array.isArray(o[r])){for(var y in o[r]){p+="<r:"+r+">"+o[r][y]+"</r:"+r+">"}}else{p+="<r:"+r+">"+o[r]+"</r:"+r+">"}}}j.ExecMethodXml(u,s,p,q,w,t,v)};j.ExecMethodXml=function(s,q,o,p,u,r,t){j.PerformAjax(s+"/"+q+"</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+s+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+d(t)+"</Header><Body><r:"+q+'_INPUT xmlns:r="'+s+'">'+o+"</r:"+q+"_INPUT></Body></Envelope>",p,u,r)};j.ExecEnum=function(q,o,r,p){j.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+q+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Enumerate xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration" /></Body></Envelope>',o,r,p)};j.ExecPull=function(r,p,o,s,q){j.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+r+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Pull xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration"><EnumerationContext>'+p+"</EnumerationContext><MaxElements>999</MaxElements><MaxCharacters>99999</MaxCharacters></Pull></Body></Envelope>",o,s,q)};j.ParseWsman=function(x){try{if(!x.childNodes){x=e(x)}var v={Header:{}},s=x.getElementsByTagName("Header")[0],w;if(!s){s=x.getElementsByTagName("a:Header")[0]}if(!s){return null}for(var u=0;u<s.childNodes.length;u++){var p=s.childNodes[u];v.Header[p.localName]=p.textContent}var o=x.getElementsByTagName("Body")[0];if(!o){o=x.getElementsByTagName("a:Body")[0]}if(!o){return null}if(o.childNodes.length>0){w=o.childNodes[0].localName;if(w.indexOf("_OUTPUT")==w.length-7){w=w.substring(0,w.length-7)}v.Header.Method=w;v.Body=b(o.childNodes[0])}return v}catch(q){console.log("Unable to parse XML: "+x);return null}};function b(u){var q,v={};for(var s=0;s<u.childNodes.length;s++){var o=u.childNodes[s];if(o.childElementCount==0){q=o.textContent}else{q=b(o)}if(q=="true"){q=true}if(q=="false"){q=false}var p=q;if(o.attributes.length>0){p={Value:q};for(var t=0;t<o.attributes.length;t++){p["@"+o.attributes[t].name]=o.attributes[t].value}}if(v[o.localName] instanceof Array){v[o.localName].push(p)}else{if(v[o.localName]==undefined){v[o.localName]=p}else{v[o.localName]=[v[o.localName],p]}}}return v}function c(t,r){if(!t||r===undefined||r===null){return""}var p=j.GetNameFromUrl(t);var s="<r:"+p+' xmlns:r="'+t+'">';for(var q in r){if(!r.hasOwnProperty(q)||q.indexOf("__")===0||q.indexOf("@")===0){continue}if(r[q]===undefined||r[q]===null||typeof r[q]==="function"){continue}if(typeof r[q]==="object"&&r[q]["ReferenceParameters"]){s+="<r:"+q+"><a:Address>"+r[q].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+r[q]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var u=r[q]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(u)){for(var o=0;o<u.length;o++){s+="<w:Selector"+a(u[o])+">"+u[o]["Value"]+"</w:Selector>"}}else{s+="<w:Selector"+a(u)+">"+u.Value+"</w:Selector>"}s+="</w:SelectorSet></a:ReferenceParameters></r:"+q+">"}else{if(Array.isArray(r[q])){for(var o=0;o<r[q].length;o++){s+="<r:"+q+">"+r[q][o].toString()+"</r:"+q+">"}}else{s+="<r:"+q+">"+r[q].toString()+"</r:"+q+">"}}}s+="</r:"+p+">";return s}function a(o){if(!o){return""}var q=" ";for(var p in o){if(!o.hasOwnProperty(p)||p.indexOf("@")!==0){continue}q+=p.substring(1)+'="'+o[p]+'" '}return q}function d(s){if(!s){return""}if(typeof s=="string"){return s}if(s.InstanceID){return'<w:SelectorSet><w:Selector Name="InstanceID">'+s.InstanceID+"</w:Selector></w:SelectorSet>"}var q="<w:SelectorSet>";for(var p in s){if(!s.hasOwnProperty(p)){continue}q+='<w:Selector Name="'+p+'">';if(s[p]["ReferenceParameters"]){q+="<a:EndpointReference>";q+="<a:Address>"+s[p]["Address"]+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+s[p]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var r=s[p]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(r)){for(var o=0;o<r.length;o++){q+="<w:Selector"+a(r[o])+">"+r[o]["Value"]+"</w:Selector>"}}else{q+="<w:Selector"+a(r)+">"+r.Value+"</w:Selector>"}q+="</w:SelectorSet></a:ReferenceParameters></a:EndpointReference>"}else{q+=s[p]}q+="</w:Selector>"}q+="</w:SelectorSet>";return q}function e(o){if(window.DOMParser){return new DOMParser().parseFromString(o,"text/xml")}else{var p=new ActiveXObject("Microsoft.XMLDOM");p.async=false;p.loadXML(o);return p}}return j};var CreateAmtRemoteDesktop=function(p,s){var r={};r.canvasid=p;r.CanvasId=Q(p);r.scrolldiv=s;r.canvas=Q(p).getContext("2d");r.protocol=2;r.state=0;r.acc="";r.ScreenWidth=960;r.ScreenHeight=700;r.width=0;r.height=0;r.rwidth=0;r.rheight=0;r.bpp=2;r.useZRLE=true;r.showmouse=true;r.buttonmask=0;r.localKeyMap=true;r.spare=null;r.sparew=0;r.spareh=0;r.sparew2=0;r.spareh2=0;r.sparecache={};r.ZRLEfirst=1;r.onScreenSizeChange=null;r.frameRateDelay=0;r.kvmDataSupported=false;r.onKvmData=null;r.onKvmDataPending=[];r.onKvmDataAck=-1;r.holding=false;r.lastKeepAlive=Date.now();r.mNagleTimer=null;r.mx=0;r.my=0;r.Debug=function(t){console.log(t)};r.xxStateChange=function(t){if(t==0){r.canvas.fillStyle="#000000";r.canvas.fillRect(0,0,r.width,r.height);r.canvas.canvas.width=r.rwidth=r.width=640;r.canvas.canvas.height=r.rheight=r.height=400;QS(r.canvasid).cursor="default"}else{QS(r.canvasid).cursor=r.showmouse?"default":"none"}};r.ProcessData=function(v){if(!v){return}r.acc+=v;while(r.acc.length>0){var t=0;if(r.state==0&&r.acc.length>=12){t=12;r.state=1;r.send("RFB 003.008\n")}else{if(r.state==1&&r.acc.length>=1){t=r.acc.charCodeAt(0)+1;r.send(String.fromCharCode(1));r.state=2}else{if(r.state==2&&r.acc.length>=4){t=4;if(ReadInt(r.acc,0)!=0){return r.Stop()}r.send(String.fromCharCode(1));r.state=3}else{if(r.state==3&&r.acc.length>=24){var G=ReadInt(r.acc,20);if(r.acc.length<24+G){return}t=24+G;r.canvas.canvas.width=r.rwidth=r.width=r.ScreenWidth=ReadShort(r.acc,0);r.canvas.canvas.height=r.rheight=r.height=r.ScreenHeight=ReadShort(r.acc,2);var J="";if(r.useZRLE){J+=IntToStr(16)}J+=IntToStr(0);J+=IntToStr(1092);r.send(String.fromCharCode(2,0)+ShortToStr((J.length/4)+1)+J+IntToStr(-223));if(r.bpp==1){r.send(String.fromCharCode(0,0,0,0,8,8,0,1)+ShortToStr(7)+ShortToStr(7)+ShortToStr(3)+String.fromCharCode(5,2,0,0,0,0))}r.state=4;if(r.parent){r.parent.xxStateChange(3)}h();if(r.onScreenSizeChange!=null){r.onScreenSizeChange(r,r.ScreenWidth,r.ScreenHeight)}}else{if(r.state==4){switch(r.acc.charCodeAt(0)){case 0:if(r.acc.length<4){return}r.state=100+ReadShort(r.acc,2);t=4;break;case 2:t=1;break;case 3:if(r.acc.length<8){return}var F=ReadInt(r.acc,4)+8;if(r.acc.length<F){return}t=q(r.acc);break}}else{if(r.state>100&&r.acc.length>=12){var L=ReadShort(r.acc,0),N=ReadShort(r.acc,2),K=ReadShort(r.acc,4),C=ReadShort(r.acc,6),I=K*C,B=ReadInt(r.acc,8);if(B<17){if(K<1||K>64||C<1||C>64){console.log("Invalid tile size ("+K+","+C+"), disconnecting.");return r.Stop()}if(r.sparew!=K||r.spareh!=C){r.sparew=r.sparew2=K;r.spareh=r.spareh2=C;var M=r.sparew2+"x"+r.spareh2;r.spare=r.sparecache[M];if(!r.spare){r.sparecache[M]=r.spare=r.canvas.createImageData(r.sparew2,r.spareh2);var E=(r.sparew2*r.spareh2)<<2;for(var D=3;D<E;D+=4){r.spare.data[D]=255}}}}if(B==4294967073){r.canvas.canvas.width=r.rwidth=r.width=K;r.canvas.canvas.height=r.rheight=r.height=C;r.send(String.fromCharCode(3,0,0,0,0,0)+ShortToStr(r.width)+ShortToStr(r.height));t=12;if(r.onScreenSizeChange!=null){r.onScreenSizeChange(r,r.ScreenWidth,r.ScreenHeight)}}else{if(B==0){var H=12,u=12+(I*r.bpp);if(r.acc.length<u){return}t=u;if(r.bpp==2){for(var D=0;D<I;D++){j(r.acc.charCodeAt(H++)+(r.acc.charCodeAt(H++)<<8),D)}}else{for(var D=0;D<I;D++){l(r.acc.charCodeAt(H++),D)}}g(r.spare,L,N)}else{if(B==16){if(r.acc.length<16){return}var w=ReadInt(r.acc,12);if(r.acc.length<(16+w)){return}var H=16,z=5,A=0;if(w>5&&r.acc.charCodeAt(H)==0&&ReadShortX(r.acc,H+1)==(w-z)){a(r.acc,H+5,L,N,K,C,I,w)}t=16+w}else{r.Debug("Unknown Encoding: "+B);return r.Stop()}}}if(--r.state==100){r.state=4;if(r.frameRateDelay==0){h()}else{setTimeout(h,r.frameRateDelay)}}}}}}}}if(t==0){return}r.acc=r.acc.substring(t)}};function a(w,E,M,N,L,A,I,z){var J=w.charCodeAt(E++),C,K,H,D={},F=0,G=0,B;if(J==0){if(r.bpp==2){for(B=0;B<I;B++){j(w.charCodeAt(E++)+(w.charCodeAt(E++)<<8),B)}}else{for(B=0;B<I;B++){l(w.charCodeAt(E++),B)}}g(r.spare,M,N)}else{if(J==1){K=w.charCodeAt(E++)+((r.bpp==2)?(w.charCodeAt(E++)<<8):0);r.canvas.fillStyle="rgb("+((r.bpp==1)?((K&224)+","+((K&28)<<3)+","+b((K&3)<<6)):(((K>>8)&248)+","+((K>>3)&252)+","+((K&31)<<3)))+")";r.canvas.fillRect(M,N,L,A)}else{if(J>1&&J<17){var u=4,t=15;if(r.bpp==2){for(B=0;B<J;B++){D[B]=w.charCodeAt(E++)+(w.charCodeAt(E++)<<8)}if(J==2){u=1;t=1}else{if(J<=4){u=2;t=3}}while(F<I&&E<w.length){K=w.charCodeAt(E++);for(B=(8-u);B>=0;B-=u){j(D[(K>>B)&t],F++)}}}else{for(B=0;B<J;B++){D[B]=w.charCodeAt(E++)}if(J==2){u=1;t=1}else{if(J<=4){u=2;t=3}}while(F<I&&E<w.length){K=w.charCodeAt(E++);for(B=(8-u);B>=0;B-=u){l(D[(K>>B)&t],F++)}}}g(r.spare,M,N)}else{if(J==128){if(r.bpp==2){while(F<I&&E<w.length){K=w.charCodeAt(E++)+(w.charCodeAt(E++)<<8);G=1;do{G+=(H=w.charCodeAt(E++))}while(H==255);if(r.rotation==0){k(K,F,G);F+=G}else{while(--G>=0){j(K,F++)}}}}else{while(F<I&&E<w.length){K=w.charCodeAt(E++);G=1;do{G+=(H=w.charCodeAt(E++))}while(H==255);if(r.rotation==0){m(K,F,G);F+=G}else{while(--G>=0){l(K,F++)}}}}g(r.spare,M,N)}else{if(J>129){if(r.bpp==2){for(B=0;B<(J-128);B++){D[B]=w.charCodeAt(E++)+(w.charCodeAt(E++)<<8)}}else{for(B=0;B<(J-128);B++){D[B]=w.charCodeAt(E++)}}while(F<I&&E<w.length){G=1;C=w.charCodeAt(E++);K=D[C%128];if(C>127){do{G+=(H=w.charCodeAt(E++))}while(H==255)}if(r.rotation==0){if(r.bpp==2){k(K,F,G);F+=G}else{m(K,F,G);F+=G}}else{if(r.bpp==2){while(--G>=0){j(K,F++)}}else{while(--G>=0){l(K,F++)}}}}g(r.spare,M,N)}}}}}}r.hold=function(t){if(r.holding==t){return}r.holding=t;r.canvas.fillStyle="#000000";r.canvas.fillRect(0,0,r.width,r.height);if(r.holding==false){if((r.canvas.canvas.width!=r.width)||(r.canvas.canvas.height!=r.height)){r.canvas.canvas.width=r.width;r.canvas.canvas.height=r.height;if(r.onScreenSizeChange!=null){r.onScreenSizeChange(r,r.ScreenWidth,r.ScreenHeight)}}r.Send(String.fromCharCode(3,0,0,0,0,0)+ShortToStr(r.width)+ShortToStr(r.height))}else{r.UnGrabMouseInput();r.UnGrabKeyInput()}};function g(t,u,v){if(r.holding==true){return}r.canvas.putImageData(t,u,v)}function l(w,t){var u=t<<2;r.spare.data[u]=w&224;r.spare.data[u+1]=(w&28)<<3;r.spare.data[u+2]=b((w&3)<<6)}function j(w,t){var u=t<<2;r.spare.data[u]=(w>>8)&248;r.spare.data[u+1]=(w>>3)&252;r.spare.data[u+2]=(w&31)<<3}function m(A,w,z){var x=(w<<2),y=(A&224),u=((A&28)<<3),t=(b((A&3)<<6));while(--z>=0){r.spare.data[x]=y;r.spare.data[x+1]=u;r.spare.data[x+2]=t;x+=4}}function k(A,w,z){var x=(w<<2),y=((A>>8)&248),u=((A>>3)&252),t=((A&31)<<3);while(--z>=0){r.spare.data[x]=y;r.spare.data[x+1]=u;r.spare.data[x+2]=t;x+=4}}function b(t){return(t>127)?(t+32):t}function h(){if(r.holding==true){return}r.send(String.fromCharCode(3,1,0,0,0,0)+ShortToStr(r.rwidth)+ShortToStr(r.rheight))}r.Start=function(){r.state=0;r.acc="";r.ZRLEfirst=1;r.onKvmDataPending=[];r.onKvmDataAck=-1;r.kvmDataSupported=false;for(var t in r.sparecache){delete r.sparecache[t]}};r.Stop=function(){r.UnGrabMouseInput();r.UnGrabKeyInput();if(r.parent){r.parent.Stop()}};r.send=function(t){if(r.parent){r.parent.send(t)}};var o={Pause:19,CapsLock:20,Space:32,Quote:39,Minus:45,NumpadMultiply:42,NumpadAdd:43,PrintScreen:44,Comma:44,NumpadSubtract:45,NumpadDecimal:46,Period:46,Slash:47,NumpadDivide:47,Semicolon:59,Equal:61,OSLeft:91,BracketLeft:91,OSRight:91,Backslash:92,BracketRight:93,ContextMenu:93,Backquote:96,NumLock:144,ScrollLock:145,Backspace:65288,Tab:65289,Enter:65293,NumpadEnter:65293,Escape:65307,Delete:65535,Home:65360,PageUp:65365,PageDown:65366,ArrowLeft:65361,ArrowUp:65362,ArrowRight:65363,ArrowDown:65364,End:65367,Insert:65379,F1:65470,F2:65471,F3:65472,F4:65473,F5:65474,F6:65475,F7:65476,F8:65477,F9:65478,F10:65479,F11:65480,F12:65481,ShiftLeft:65505,ShiftRight:65506,ControlLeft:65507,ControlRight:65508,AltLeft:65513,AltRight:65514,MetaLeft:65511,MetaRight:65512};function n(t){if(t.code.startsWith("Key")&&t.code.length==4){return t.code.charCodeAt(3)+((t.shiftKey==false)?32:0)}if(t.code.startsWith("Digit")&&t.code.length==6){return t.code.charCodeAt(5)}if(t.code.startsWith("Numpad")&&t.code.length==7){return t.code.charCodeAt(6)}return o[t.code]}function c(t,u){if(!u){u=window.event}if(u.code&&(r.localKeyMap==false)){var v=n(u);if(v!=null){r.sendkey(v,t)}}else{var v=u.keyCode,w=v;if(u.shiftKey==false&&v>=65&&v<=90){w=v+32}if(v>=112&&v<=124){w=v+65358}if(v==8){w=65288}if(v==9){w=65289}if(v==13){w=65293}if(v==16){w=65505}if(v==17){w=65507}if(v==18){w=65513}if(v==27){w=65307}if(v==33){w=65365}if(v==34){w=65366}if(v==35){w=65367}if(v==36){w=65360}if(v==37){w=65361}if(v==38){w=65362}if(v==39){w=65363}if(v==40){w=65364}if(v==45){w=65379}if(v==46){w=65535}if(v>=96&&v<=105){w=v-48}if(v==106){w=42}if(v==107){w=43}if(v==109){w=45}if(v==110){w=46}if(v==111){w=47}if(v==186){w=59}if(v==187){w=61}if(v==188){w=44}if(v==189){w=45}if(v==190){w=46}if(v==191){w=47}if(v==192){w=96}if(v==219){w=91}if(v==220){w=92}if(v==221){w=93}if(v==222){w=39}r.sendkey(w,t)}return r.haltEvent(u)}r.sendkey=function(w,u){if(typeof w=="object"){var t="";for(var v in w){t+=(String.fromCharCode(4,w[v][1],0,0)+IntToStr(w[v][0]))}r.send(t)}else{r.send(String.fromCharCode(4,u,0,0)+IntToStr(w))}};function q(t){if(t.length<8){return 0}var v=ReadInt(r.acc,4)+8;if(t.length<v){return 0}if(r.onKvmData!=null){var u=t.substring(8,v);if((u.length>=16)&&(u.substring(0,15)=="\0KvmDataChannel")){if(r.kvmDataSupported==false){r.kvmDataSupported=true;console.log("KVM Data Channel Supported.")}if(((r.onKvmDataAck==-1)&&(u.length==16))||(u.charCodeAt(15)!=0)){r.onKvmDataAck=true}if(u.length>=16){r.onKvmData(u.substring(16))}if((r.onKvmDataAck==true)&&(r.onKvmDataPending.length>0)){r.sendKvmData(r.onKvmDataPending.shift())}}}return v}r.sendKvmData=function(t){if(r.onKvmDataAck!==true){r.onKvmDataPending.push(t)}else{t="\0KvmDataChannel\0"+t;r.send(String.fromCharCode(6,0,0,0)+IntToStr(t.length)+t);r.onKvmDataAck=false}};r.sendKeepAlive=function(){if(r.lastKeepAlive<Date.now()-5000){r.lastKeepAlive=Date.now();r.send(String.fromCharCode(6,0,0,0)+IntToStr(16)+"\0KvmDataChannel\0")}};r.SendCtrlAltDelMsg=function(){r.sendcad()};r.sendcad=function(){r.sendkey([[65507,1],[65513,1],[65535,1],[65535,0],[65513,0],[65507,0]])};var e=false;var d=false;r.GrabMouseInput=function(){if(e==true){return}var t=r.canvas.canvas;t.onmouseup=r.mouseup;t.onmousedown=r.mousedown;t.onmousemove=r.mousemove;e=true};r.UnGrabMouseInput=function(){if(e==false){return}var t=r.canvas.canvas;t.onmousemove=null;t.onmouseup=null;t.onmousedown=null;e=false};r.GrabKeyInput=function(){if(d==true){return}document.onkeyup=r.handleKeyUp;document.onkeydown=r.handleKeyDown;document.onkeypress=r.handleKeys;d=true};r.UnGrabKeyInput=function(){if(d==false){return}document.onkeyup=null;document.onkeydown=null;document.onkeypress=null;d=false};r.handleKeys=function(t){return r.haltEvent(t)};r.handleKeyUp=function(t){return c(0,t)};r.handleKeyDown=function(t){return c(1,t)};r.haltEvent=function(t){if(t.preventDefault){t.preventDefault()}if(t.stopPropagation){t.stopPropagation()}return false};r.mousedblclick=function(t){};r.mousedown=function(t){r.buttonmask|=(1<<t.button);return r.mousemove(t,1)};r.mouseup=function(t){r.buttonmask&=(65535-(1<<t.button));return r.mousemove(t,1)};r.mousemove=function(t,u){if(r.state<4){return true}var w=(r.canvas.canvas.height/Q(r.canvasid).offsetHeight);var x=(r.canvas.canvas.width/Q(r.canvasid).offsetWidth);var v=r.getPositionOfControl(Q(r.canvasid));r.mx=((event.pageX-v[0])*x);r.my=((event.pageY-v[1])*w);if(event.addx){r.mx+=event.addx}if(event.addy){r.my+=event.addy}if(u==1){r.send(String.fromCharCode(5,r.buttonmask)+ShortToStr(r.mx)+ShortToStr(r.my));if(r.mNagleTimer!=null){clearTimeout(r.mNagleTimer);r.mNagleTimer=null}}else{if(r.mNagleTimer==null){r.mNagleTimer=setTimeout(function(){r.send(String.fromCharCode(5,r.buttonmask)+ShortToStr(r.mx)+ShortToStr(r.my));r.mNagleTimer=null},50)}}return r.haltEvent(t)};r.getPositionOfControl=function(t){var u=Array(2);u[0]=u[1]=0;while(t){u[0]+=t.offsetLeft;u[1]+=t.offsetTop;t=t.offsetParent}return u};return r};var CreateAmtRemoteTerminal=function(J,L){var K={};K.DivId=J;K.DivElement=document.getElementById(J);K.protocol=1;if(L.protocol){K.protocol=L.protocol}K.fxEmulation=0;K.lineFeed="\r\n";K.debugmode=0;K.width=80;K.height=25;K.heightLock=0;var x=21;var y=13;var s=["000000","BB0000","00BB00","BBBB00","0000BB","BB00BB","00BBBB","BBBBBB","555555","FF5555","55FF55","FFFF55","5555FF","FF55FF","55FFFF","FFFFFF"];var v=0;var u=7;var t=0;var z=true;var E=0;var F=0;var B=0;var C=0;var D=0;var h=[];var k=0;var j=0;var q=[];var G=[];var I=1;var H=2;var b=false;var c=true;var r;var a=false;var M=[];K.title=null;K.onTitleChange=null;K.Start=function(){};K.Init=function(O,N){K.width=O?O:80;K.height=N?N:25;for(var R=0;R<K.height;R++){G[R]=[];q[R]=[];for(var P=0;P<K.width;P++){G[R][P]=" ";q[R][P]=(7<<6)}}K.TermInit();K.TermDraw()};K.xxStateChange=function(N){if((N==3)&&(L!=null)&&(L.xterm==true)){K.TermSendKeys("stty rows "+K.height+" cols "+K.width+"\nclear\n")}};K.ProcessData=function(N){if(K.debugmode==2){console.log("TRecv("+N.length+"): "+rstr2hex(N))}if(K.capture!=null){K.capture+=N}o(N);K.TermDraw()};function o(O){for(var N=0;N<O.length;N++){n(String.fromCharCode(O.charCodeAt(N)),O.charCodeAt(N))}}function n(N,P){switch(D){case 0:switch(P){case 27:D=1;h=[];k=0;j=0;break;default:m(N);break}break;case 1:switch(N){case"[":D=2;break;case"(":D=4;break;case")":D=5;break;case"]":D=6;break;case"=":a=true;D=0;break;case">":a=false;D=0;break;case"7":B=E;C=F;D=0;break;case"8":E=B;F=C;D=0;break;case"M":var R=1;for(var S=r[1];S>=r[0]+R;S--){for(var T=0;T<K.width;T++){G[S][T]=G[S-R][T];q[S][T]=q[S-R][T]}}for(var S=r[0]+R-1;S>r[0]-1;S--){for(var T=0;T<K.width;T++){G[S][T]=" ";q[S][T]=(7<<6)}}D=0;break;default:console.log("unknown terminal short code",N);D=0;break}break;case 2:if(N>="0"&&N<="9"){if(!h[k]){h[k]=(N-"0")}else{h[k]=((h[k]*10)+(N-"0"))}break}else{if(N==";"){k++;break}else{if(N=="?"){j=1;break}else{if(!h[0]){h[0]=0}l(N,h,k+1,j);D=0}}}break;case 4:D=0;break;case 5:D=0;break;case 6:var O=N.charCodeAt(0);if(N==";"){k++}else{if(O==7){p(h);D=0}else{if(!h[k]){h[k]=N}else{h[k]+=N}}}break}}function p(N){if(N.length==0){return}var O=parseInt(N[0]);if((O==0||O==2)&&(N.length>1)&&(N[1]!="?")){if(K.onTitleChange){K.onTitleChange(K,K.title=N[1])}}}function l(R,N,O,U){if(U==1){switch(R){case"l":if(N[0]==25){c=false}break;case"h":if(N[0]==25){c=true}break}}else{if(U==0){var S;switch(R){case"c":K.TermResetScreen();break;case"A":if(O==1){if(N[0]==0){F--}else{F-=N[0]}if(F<0){F=0}}break;case"B":if(O==1){if(N[0]==0){F++}else{F+=N[0]}if(F>K.height){F=K.height}}break;case"C":if(O==1){if(N[0]==0){E++}else{E+=N[0]}if(E>K.width){E=K.width}}break;case"D":if(O==1){if(N[0]==0){E--}else{E-=N[0]}if(E<0){E=0}}break;case"d":if(O==1){F=N[0]-1;if(F>K.height){F=K.height}if(F<0){F=0}}break;case"G":if(O==1){E=N[0]-1;if(E<0){E=0}if(E>(K.width-1)){E=(K.width-1)}}break;case"P":var V=1;if(O==1){V=N[0]}for(S=E;S<K.width-V;S++){G[F][S]=G[F][S+V];q[F][S]=q[F][S+V]}for(S=(K.width-V);S<K.width;S++){G[F][S]=" ";q[F][S]=(7<<6)}break;case"L":var T=1;if(O==1){T=N[0]}if(T==0){T=1}for(W=r[1];W>=F+T;W--){G[W]=G[W-T];q[W]=q[W-T]}for(W=F;W<F+T;W++){G[W]=[];q[W]=[];for(V=0;V<K.width;V++){G[W][V]=" ";q[W][V]=(7<<6)}}break;case"J":if(O==1&&N[0]==2){K.TermClear((t<<12)+(u<<6));E=0;F=0;M=[]}else{if(O==0||O==1&&N[0]==0){e();for(S=F+1;S<K.height;S++){g(S)}}else{if(O==1&&N[0]==1){e();for(S=0;S<F-1;S++){g(S)}}}}break;case"H":if(O==2){if(N[0]<1){N[0]=1}if(N[1]<1){N[1]=1}if(N[0]>K.height){N[0]=K.height}if(N[1]>K.width){N[1]=K.width}F=N[0]-1;E=N[1]-1}else{F=0;E=0}break;case"m":for(S=0;S<O;S++){if(!N[S]||N[S]==0){t=0;u=7;v=0}else{if(N[S]==1){if(u<8){u+=8}}else{if(N[S]==2||N[S]==22){if(u>=8){u-=8}}else{if(N[S]==7){v=2}else{if(N[S]==27){v=0}else{if(N[S]>=30&&N[S]<=37){var P=(u>=8);u=(N[S]-30);if(P&&u<=8){u+=8}}else{if(N[S]>=40&&N[S]<=47){t=(N[S]-40)}else{if(N[S]>=90&&N[S]<=99){u=(N[S]-82)}else{if(N[S]>=100&&N[S]<=109){t=(N[S]-92)}}}}}}}}}}break;case"K":if(O==0||(O==1&&(!N[0]||N[0]==0))){e()}else{if(O==1){if(N[0]==1){d()}else{if(N[0]==2){g(F)}}}}break;case"h":z=true;break;case"l":z=false;break;case"r":if(O==2){r=[N[0]-1,N[1]-1]}if(r[0]<0){r[0]=0}if(r[0]>(K.height-1)){r[0]=(K.height-1)}if(r[1]<0){r[1]=0}if(r[1]>(K.height-1)){r[1]=(K.height-1)}if(r[0]>r[1]){r[0]=r[1]}break;case"S":var V=1;if(O==1){V=N[0]}for(var W=r[0];W<=r[1]-V;W++){for(var X=0;X<K.width;X++){G[W][X]=G[W+V][X];q[W][X]=q[W+V][X]}}for(var W=r[1]-V+1;W<r[1];W++){for(var X=0;X<K.width;X++){G[W][X]=" ";q[W][X]=(7<<6)}}break;case"M":var V=1;if(O==1){V=N[0]}for(var W=F;W<=r[1]-V;W++){for(var X=0;X<K.width;X++){G[W][X]=G[W+V][X];q[W][X]=q[W+V][X]}}for(var W=r[1]-V+1;W<r[1];W++){for(var X=0;X<K.width;X++){G[W][X]=" ";q[W][X]=(7<<6)}}break;case"T":var V=1;if(O==1){V=N[0]}for(var W=r[1];W>r[0]+V;W--){for(var X=0;X<K.width;X++){G[W][X]=G[W-V][X];q[W][X]=q[W-V][X]}}for(var W=r[0]+V;W>r[0];W--){for(var X=0;X<K.width;X++){G[W][X]=" ";q[W][X]=(7<<6)}}break;case"X":var V=1;if(O==1){V=N[0]}while((V>0)&&(E>0)){G[F][E]=" ";E--;V--}break;default:console.log("unknown terminal code",R,N,U);break}}}}K.ProcessVt100String=function(O){for(var N=0;N<O.length;N++){m(String.fromCharCode(O.charCodeAt(N)))}};function m(N){if(N=="\0"||N.charCodeAt()==7){return}var O=N.charCodeAt();switch(O){case 16:N=" ";break;case 24:N="?";break;case 25:N="?";break}if(E>K.width){E=K.width}if(F>(K.height-1)){F=(K.height-1)}switch(N){case"\b":if(E>0){E--;if(b){w(" ")}}break;case"\t":var P=8-(E%8);for(var R=0;R<P;R++){m(" ")}break;case"\n":F++;if(F>r[1]){K.recordLineTobackBuffer(0);A(1);F=r[1]}if(K.lineFeed="\r"){E=0}break;case"\r":E=0;break;default:if(E>=K.width){E=0;if(z){F++}if(F>=(K.height-1)){A(1);F=(K.height-1)}}w(N);E++;break}}function w(N){G[F][E]=N;q[F][E]=(u<<6)+(t<<12)+v}K.TermClear=function(N){for(var P=0;P<K.height;P++){for(var O=0;O<K.width;O++){G[P][O]=" ";q[P][O]=N}}M=[]};K.TermResetScreen=function(){v=0;u=7;t=0;z=c=true;E=F=0;b=false;r=[0,(K.height-1)];a=false;K.TermClear(7<<6)};function e(){var N=(u<<6)+(t<<12)+v;for(var O=E;O<K.width;O++){G[F][O]=" ";q[F][O]=N}}function d(){var N=(u<<6)+(t<<12)+v;for(var O=0;O<E;O++){G[F][O]=" ";q[F][O]=N}}function g(N){var O=(u<<6)+(t<<12)+v;for(var P=0;P<K.width;P++){G[N][P]=" ";q[N][P]=O}}K.TermSendKeys=function(N){if(K.debugmode==2){console.log("TSend("+N.length+"): "+rstr2hex(N),N)}K.parent.send(N)};K.TermSendKey=function(N){if(K.debugmode==2){console.log("TSend(1): "+rstr2hex(String.fromCharCode(N)),N)}K.parent.send(String.fromCharCode(N))};function A(N){var O,P;for(P=r[0];P<=r[1]-N;P++){G[P]=G[P+N];q[P]=q[P+N]}for(P=r[1]-N+1;P<=r[1];P++){G[P]=[];q[P]=[];for(O=0;O<K.width;O++){G[P][O]=" ";q[P][O]=(7<<6)}}}K.TermHandleKeys=function(N){if(!N.ctrlKey){if(N.which==127){K.TermSendKey(8)}else{if(N.which==13){K.TermSendKeys(K.lineFeed)}else{if(N.which!=0){K.TermSendKey(N.which)}}}return false}if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}};K.TermHandleKeyUp=function(N){if((N.which!=8)&&(N.which!=32)&&(N.which!=9)){return true}if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}return false};K.TermHandleKeyDown=function(N){if((N.which>=65)&&(N.which<=90)&&(N.ctrlKey==true)){K.TermSendKey(N.which-64);if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}return}if(N.which==27){K.TermSendKeys(String.fromCharCode(27));return true}if(a==true){if(N.which==37){K.TermSendKeys(String.fromCharCode(27,79,68));return true}if(N.which==38){K.TermSendKeys(String.fromCharCode(27,79,65));return true}if(N.which==39){K.TermSendKeys(String.fromCharCode(27,79,67));return true}if(N.which==40){K.TermSendKeys(String.fromCharCode(27,79,66));return true}}else{if(N.which==37){K.TermSendKeys(String.fromCharCode(27,91,68));return true}if(N.which==38){K.TermSendKeys(String.fromCharCode(27,91,65));return true}if(N.which==39){K.TermSendKeys(String.fromCharCode(27,91,67));return true}if(N.which==40){K.TermSendKeys(String.fromCharCode(27,91,66));return true}}if(N.which==33){K.TermSendKeys(String.fromCharCode(27,91,53,126));return true}if(N.which==34){K.TermSendKeys(String.fromCharCode(27,91,54,126));return true}if(N.which==35){K.TermSendKeys(String.fromCharCode(27,91,70));return true}if(N.which==36){K.TermSendKeys(String.fromCharCode(27,91,72));return true}if(N.which==45){K.TermSendKeys(String.fromCharCode(27,91,50,126));return true}if(N.which==46){K.TermSendKeys(String.fromCharCode(27,91,51,126));return true}if(N.which==9){K.TermSendKeys("\t");if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}return true}if(N.which!=8&&N.which!=32&&N.which!=9){return true}K.TermSendKey(N.which);if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}return false};K.recordLineTobackBuffer=function(R){var O="",N="";var P=K.TermDrawLine(N,R,O);N=P[0];O=P[1];M.push(N+O+"<br>")};K.TermDrawLine=function(N,W,P){var R,O,S=1,U,V;for(var T=0;T<K.width;++T){R=q[W][T];if(E==T&&F==W&&c){R|=H}if(R!=S){N+=P;P="";U=6;V=12;if(R&H){U=12;V=6}N+='<span style="color:#'+s[(R>>U)&63]+";background-color:#"+s[(R>>V)&63];if(R&I){N+=";text-decoration:underline"}N+=';">';P="</span>"+P;S=R}O=G[W][T];switch(O){case"&":N+="&";break;case"<":N+="<";break;case">":N+=">";break;case" ":N+=" ";break;default:N+=O;break}}return[N,P]};K.TermDraw=function(){var P="",O="";for(var S=0;S<K.height;++S){var R=K.TermDrawLine(O,S,P);O=R[0];P=R[1];if(S!=(K.height-1)){O+="<br>"}}if(M.length>800){M=M.slice(M.length-800)}var N=M.join("");K.DivElement.innerHTML="<font size='4'><b>"+N+O+P+"</b></font>";K.DivElement.scrollTop=K.DivElement.scrollHeight;if(K.heightLock==0){setTimeout(K.TermLockHeight,10)}};K.TermLockHeight=function(){K.heightLock=K.DivElement.clientHeight;K.DivElement.style.height=K.DivElement.parentNode.style.height=K.heightLock+"px";K.DivElement.style["overflow-y"]="scroll"};K.TermInit=function(){K.TermResetScreen()};K.heightLock=0;K.DivElement.style.height="";if((L!=null)&&(L.width!=null)&&(L.height!=null)){K.Init(L.width,L.height)}else{K.Init()}return K};var ZLIB=(ZLIB||{});if(typeof ZLIB.common_initialized==="undefined"){ZLIB.Z_NO_FLUSH=0;ZLIB.Z_PARTIAL_FLUSH=1;ZLIB.Z_SYNC_FLUSH=2;ZLIB.Z_FULL_FLUSH=3;ZLIB.Z_FINISH=4;ZLIB.Z_BLOCK=5;ZLIB.Z_TREES=6;ZLIB.Z_OK=0;ZLIB.Z_STREAM_END=1;ZLIB.Z_NEED_DICT=2;ZLIB.Z_ERRNO=(-1);ZLIB.Z_STREAM_ERROR=(-2);ZLIB.Z_DATA_ERROR=(-3);ZLIB.Z_MEM_ERROR=(-4);ZLIB.Z_BUF_ERROR=(-5);ZLIB.Z_VERSION_ERROR=(-6);ZLIB.Z_DEFLATED=8;ZLIB.z_stream=function(){this.next_in=0;this.avail_in=0;this.total_in=0;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg=null;this.state=null;this.data_type=0;this.adler=0;this.input_data="";this.output_data="";this.error=0;this.checksum_function=null};ZLIB.gz_header=function(){this.text=0;this.time=0;this.xflags=0;this.os=255;this.extra=null;this.extra_len=0;this.extra_max=0;this.name=null;this.name_max=0;this.comment=null;this.comm_max=0;this.hcrc=0;this.done=0};ZLIB.common_initialized=true}if(typeof ZLIB==="undefined"){alert("ZLIB is not defined. SRC zlib.js before zlib-inflate.js")}(function(){var o=15;var G=0;var D=1;var am=2;var af=3;var A=4;var B=5;var ac=6;var j=7;var F=8;var q=9;var p=10;var an=11;var ao=12;var aj=13;var l=14;var k=15;var al=16;var W=17;var g=18;var S=19;var R=20;var T=21;var r=22;var s=23;var aa=24;var Y=25;var d=26;var V=27;var v=28;var a=29;var ab=30;var ak=31;var z=852;var y=592;var x=(z+y);var h=0;var X=1;var u=2;var N=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var O=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,203,69];var L=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var M=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];ZLIB.inflate_copyright=" inflate 1.2.6 Copyright 1995-2012 Mark Adler ";function K(aR,aV){var aM=15;var aU=aR.next;var at=(aV==u?aR.distbits:aR.lenbits);var aX=aR.work;var aH=aR.lens;var aI=(aV==u?aR.nlen:0);var aS=aR.codes;var au;if(aV==X){au=aR.nlen}else{if(aV==u){au=aR.ndist}else{au=19}}var aG;var aT;var aN,aL;var aQ;var aw;var ax;var aF;var aW;var aD;var aE;var aB;var aJ;var aK;var aC;var aO;var aq;var ar;var az;var aA;var ay;var av=new Array(aM+1);var aP=new Array(aM+1);for(aG=0;aG<=aM;aG++){av[aG]=0}for(aT=0;aT<au;aT++){av[aH[aI+aT]]++}aQ=at;for(aL=aM;aL>=1;aL--){if(av[aL]!=0){break}}if(aQ>aL){aQ=aL}if(aL==0){aC={op:64,bits:1,val:0};aS[aU++]=aC;aS[aU++]=aC;if(aV==u){aR.distbits=1}else{aR.lenbits=1}aR.next=aU;return 0}for(aN=1;aN<aL;aN++){if(av[aN]!=0){break}}if(aQ<aN){aQ=aN}aF=1;for(aG=1;aG<=aM;aG++){aF<<=1;aF-=av[aG];if(aF<0){return -1}}if(aF>0&&(aV==h||aL!=1)){aR.next=aU;return -1}aP[1]=0;for(aG=1;aG<aM;aG++){aP[aG+1]=aP[aG]+av[aG]}for(aT=0;aT<au;aT++){if(aH[aI+aT]!=0){aX[aP[aH[aI+aT]]++]=aT}}switch(aV){case h:aq=az=aX;ar=0;aA=0;ay=19;break;case X:aq=N;ar=-257;az=O;aA=-257;ay=256;break;default:aq=L;az=M;ar=0;aA=0;ay=-1}aD=0;aT=0;aG=aN;aO=aU;aw=aQ;ax=0;aJ=-1;aW=1<<aQ;aK=aW-1;if((aV==X&&aW>=z)||(aV==u&&aW>=y)){aR.next=aU;return 1}for(;;){aC={op:0,bits:aG-ax,val:0};if(aX[aT]<ay){aC.val=aX[aT]}else{if(aX[aT]>ay){aC.op=az[aA+aX[aT]];aC.val=aq[ar+aX[aT]]}else{aC.op=32+64}}aE=1<<(aG-ax);aB=1<<aw;aN=aB;do{aB-=aE;aS[aO+(aD>>>ax)+aB]=aC}while(aB!=0);aE=1<<(aG-1);while(aD&aE){aE>>>=1}if(aE!=0){aD&=aE-1;aD+=aE}else{aD=0}aT++;if(--(av[aG])==0){if(aG==aL){break}aG=aH[aI+aX[aT]]}if(aG>aQ&&(aD&aK)!=aJ){if(ax==0){ax=aQ}aO+=aN;aw=aG-ax;aF=(1<<aw);while(aw+ax<aL){aF-=av[aw+ax];if(aF<=0){break}aw++;aF<<=1}aW+=1<<aw;if((aV==X&&aW>=z)||(aV==u&&aW>=y)){aR.next=aU;return 1}aJ=aD&aK;aS[aU+aJ]={op:aw,bits:aQ,val:aO-aU}}}if(aD!=0){aS[aO+aD]={op:64,bits:aG-ax,val:0}}aR.next=aU+aW;if(aV==u){aR.distbits=aQ}else{aR.lenbits=aQ}return 0}function H(aN,aL){var aM;var aC;var aI;var aD;var aK;var aq;var ax;var aR;var aO;var aQ;var aP;var aB;var ar;var at;var aE;var au;var aH;var aw;var aA;var aJ;var aF;var av;var az=-1;var ay=-1;aM=aN.state;aC=aN.input_data;aI=aN.next_in;aD=aI+aN.avail_in-5;aK=aN.next_out;aq=aK-(aL-aN.avail_out);ax=aK+(aN.avail_out-257);aR=aM.wsize;aO=aM.whave;aQ=aM.wnext;aP=aM.window;aB=aM.hold;ar=aM.bits;at=aM.codes;aE=aM.lencode;au=aM.distcode;aH=(1<<aM.lenbits)-1;aw=(1<<aM.distbits)-1;loop:do{if(ar<15){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8;aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8}aA=at[aE+(aB&aH)];dolen:while(true){aJ=aA.bits;aB>>>=aJ;ar-=aJ;aJ=aA.op;if(aJ==0){aN.output_data+=String.fromCharCode(aA.val);aK++}else{if(aJ&16){aF=aA.val;aJ&=15;if(aJ){if(ar<aJ){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8}aF+=aB&((1<<aJ)-1);aB>>>=aJ;ar-=aJ}if(ar<15){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8;aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8}aA=at[au+(aB&aw)];dodist:while(true){aJ=aA.bits;aB>>>=aJ;ar-=aJ;aJ=aA.op;if(aJ&16){av=aA.val;aJ&=15;if(ar<aJ){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8;if(ar<aJ){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8}}av+=aB&((1<<aJ)-1);aB>>>=aJ;ar-=aJ;aJ=aK-aq;if(av>aJ){aJ=av-aJ;if(aJ>aO){if(aM.sane){aN.msg="invalid distance too far back";aM.mode=a;break loop}}az=0;ay=-1;if(aQ==0){az+=aR-aJ;if(aJ<aF){aF-=aJ;aN.output_data+=aP.substring(az,az+aJ);aK+=aJ;aJ=0;az=-1;ay=aK-av}}else{az+=aQ-aJ;if(aJ<aF){aF-=aJ;aN.output_data+=aP.substring(az,az+aJ);aK+=aJ;az=-1;ay=aK-av}}}else{az=-1;ay=aK-av}if(az>=0){aN.output_data+=aP.substring(az,az+aF);aK+=aF;az+=aF}else{var aG=aF;if(aG>aK-ay){aG=aK-ay}aN.output_data+=aN.output_data.substring(ay,ay+aG);aK+=aG;aF-=aG;ay+=aG;aK+=aF;while(aF>2){aN.output_data+=aN.output_data.charAt(ay++);aN.output_data+=aN.output_data.charAt(ay++);aN.output_data+=aN.output_data.charAt(ay++);aF-=3}if(aF){aN.output_data+=aN.output_data.charAt(ay++);if(aF>1){aN.output_data+=aN.output_data.charAt(ay++)}}}}else{if((aJ&64)==0){aA=at[au+(aA.val+(aB&((1<<aJ)-1)))];continue dodist}else{aN.msg="invalid distance code";aM.mode=a;break loop}}break dodist}}else{if((aJ&64)==0){aA=at[aE+(aA.val+(aB&((1<<aJ)-1)))];continue dolen}else{if(aJ&32){aM.mode=an;break loop}else{aN.msg="invalid literal/length code";aM.mode=a;break loop}}}}break dolen}}while(aI<aD&&aK<ax);aF=ar>>>3;aI-=aF;ar-=aF<<3;aB&=(1<<ar)-1;aN.next_in=aI;aN.next_out=aK;aN.avail_in=(aI<aD?5+(aD-aI):5-(aI-aD));aN.avail_out=(aK<ax?257+(ax-aK):257-(aK-ax));aM.hold=aB;aM.bits=ar}function ae(at){var ar;var aq=new Array(at);for(ar=0;ar<at;ar++){aq[ar]=0}return aq}function E(at,ar,aq){return(at&&(ar in at))?at[ar]:aq}function e(){return 0}function J(){var ar;this.mode=0;this.last=0;this.wrap=0;this.havedict=0;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=0;this.distcode=0;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=0;this.lens=ae(320);this.work=ae(288);this.codes=new Array(x);var aq={op:0,bits:0,val:0};for(ar=0;ar<x;ar++){this.codes[ar]=aq}this.sane=0;this.back=0;this.was=0}ZLIB.inflateResetKeep=function(ar){var aq;if(!ar||!ar.state){return ZLIB.Z_STREAM_ERROR}aq=ar.state;ar.total_in=ar.total_out=aq.total=0;ar.msg=null;if(aq.wrap){ar.adler=aq.wrap&1}aq.mode=G;aq.last=0;aq.havedict=0;aq.dmax=32768;aq.head=null;aq.hold=0;aq.bits=0;aq.lencode=0;aq.distcode=0;aq.next=0;aq.sane=1;aq.back=-1;return ZLIB.Z_OK};ZLIB.inflateReset=function(ar,at){var au;var aq;if(!ar||!ar.state){return ZLIB.Z_STREAM_ERROR}aq=ar.state;if(typeof at==="undefined"){at=o}if(at<0){au=0;at=-at}else{au=(at>>>4)+1;if(at<48){at&=15}}if(au==1&&(typeof ZLIB.adler32==="function")){ar.checksum_function=ZLIB.adler32}else{if(au==2&&(typeof ZLIB.crc32==="function")){ar.checksum_function=ZLIB.crc32}else{ar.checksum_function=e}}if(at&&(at<8||at>15)){return ZLIB.Z_STREAM_ERROR}if(aq.window&&aq.wbits!=at){aq.window=null}aq.wrap=au;aq.wbits=at;aq.wsize=0;aq.whave=0;aq.wnext=0;return ZLIB.inflateResetKeep(ar)};ZLIB.inflateInit=function(ar){var aq=new ZLIB.z_stream();aq.state=new J();ZLIB.inflateReset(aq,ar);return aq};ZLIB.inflatePrime=function(at,aq,au){var ar;if(!at||!at.state){return ZLIB.Z_STREAM_ERROR}ar=at.state;if(aq<0){ar.hold=0;ar.bits=0;return ZLIB.Z_OK}if(aq>16||ar.bits+aq>32){return ZLIB.Z_STREAM_ERROR}au&=(1<<aq)-1;ar.hold+=au<<ar.bits;ar.bits+=aq;return ZLIB.Z_OK};var U=null;var t=null;function C(ar){var aq;if(!U){U=[{op:96,bits:7,val:0},{op:0,bits:8,val:80},{op:0,bits:8,val:16},{op:20,bits:8,val:115},{op:18,bits:7,val:31},{op:0,bits:8,val:112},{op:0,bits:8,val:48},{op:0,bits:9,val:192},{op:16,bits:7,val:10},{op:0,bits:8,val:96},{op:0,bits:8,val:32},{op:0,bits:9,val:160},{op:0,bits:8,val:0},{op:0,bits:8,val:128},{op:0,bits:8,val:64},{op:0,bits:9,val:224},{op:16,bits:7,val:6},{op:0,bits:8,val:88},{op:0,bits:8,val:24},{op:0,bits:9,val:144},{op:19,bits:7,val:59},{op:0,bits:8,val:120},{op:0,bits:8,val:56},{op:0,bits:9,val:208},{op:17,bits:7,val:17},{op:0,bits:8,val:104},{op:0,bits:8,val:40},{op:0,bits:9,val:176},{op:0,bits:8,val:8},{op:0,bits:8,val:136},{op:0,bits:8,val:72},{op:0,bits:9,val:240},{op:16,bits:7,val:4},{op:0,bits:8,val:84},{op:0,bits:8,val:20},{op:21,bits:8,val:227},{op:19,bits:7,val:43},{op:0,bits:8,val:116},{op:0,bits:8,val:52},{op:0,bits:9,val:200},{op:17,bits:7,val:13},{op:0,bits:8,val:100},{op:0,bits:8,val:36},{op:0,bits:9,val:168},{op:0,bits:8,val:4},{op:0,bits:8,val:132},{op:0,bits:8,val:68},{op:0,bits:9,val:232},{op:16,bits:7,val:8},{op:0,bits:8,val:92},{op:0,bits:8,val:28},{op:0,bits:9,val:152},{op:20,bits:7,val:83},{op:0,bits:8,val:124},{op:0,bits:8,val:60},{op:0,bits:9,val:216},{op:18,bits:7,val:23},{op:0,bits:8,val:108},{op:0,bits:8,val:44},{op:0,bits:9,val:184},{op:0,bits:8,val:12},{op:0,bits:8,val:140},{op:0,bits:8,val:76},{op:0,bits:9,val:248},{op:16,bits:7,val:3},{op:0,bits:8,val:82},{op:0,bits:8,val:18},{op:21,bits:8,val:163},{op:19,bits:7,val:35},{op:0,bits:8,val:114},{op:0,bits:8,val:50},{op:0,bits:9,val:196},{op:17,bits:7,val:11},{op:0,bits:8,val:98},{op:0,bits:8,val:34},{op:0,bits:9,val:164},{op:0,bits:8,val:2},{op:0,bits:8,val:130},{op:0,bits:8,val:66},{op:0,bits:9,val:228},{op:16,bits:7,val:7},{op:0,bits:8,val:90},{op:0,bits:8,val:26},{op:0,bits:9,val:148},{op:20,bits:7,val:67},{op:0,bits:8,val:122},{op:0,bits:8,val:58},{op:0,bits:9,val:212},{op:18,bits:7,val:19},{op:0,bits:8,val:106},{op:0,bits:8,val:42},{op:0,bits:9,val:180},{op:0,bits:8,val:10},{op:0,bits:8,val:138},{op:0,bits:8,val:74},{op:0,bits:9,val:244},{op:16,bits:7,val:5},{op:0,bits:8,val:86},{op:0,bits:8,val:22},{op:64,bits:8,val:0},{op:19,bits:7,val:51},{op:0,bits:8,val:118},{op:0,bits:8,val:54},{op:0,bits:9,val:204},{op:17,bits:7,val:15},{op:0,bits:8,val:102},{op:0,bits:8,val:38},{op:0,bits:9,val:172},{op:0,bits:8,val:6},{op:0,bits:8,val:134},{op:0,bits:8,val:70},{op:0,bits:9,val:236},{op:16,bits:7,val:9},{op:0,bits:8,val:94},{op:0,bits:8,val:30},{op:0,bits:9,val:156},{op:20,bits:7,val:99},{op:0,bits:8,val:126},{op:0,bits:8,val:62},{op:0,bits:9,val:220},{op:18,bits:7,val:27},{op:0,bits:8,val:110},{op:0,bits:8,val:46},{op:0,bits:9,val:188},{op:0,bits:8,val:14},{op:0,bits:8,val:142},{op:0,bits:8,val:78},{op:0,bits:9,val:252},{op:96,bits:7,val:0},{op:0,bits:8,val:81},{op:0,bits:8,val:17},{op:21,bits:8,val:131},{op:18,bits:7,val:31},{op:0,bits:8,val:113},{op:0,bits:8,val:49},{op:0,bits:9,val:194},{op:16,bits:7,val:10},{op:0,bits:8,val:97},{op:0,bits:8,val:33},{op:0,bits:9,val:162},{op:0,bits:8,val:1},{op:0,bits:8,val:129},{op:0,bits:8,val:65},{op:0,bits:9,val:226},{op:16,bits:7,val:6},{op:0,bits:8,val:89},{op:0,bits:8,val:25},{op:0,bits:9,val:146},{op:19,bits:7,val:59},{op:0,bits:8,val:121},{op:0,bits:8,val:57},{op:0,bits:9,val:210},{op:17,bits:7,val:17},{op:0,bits:8,val:105},{op:0,bits:8,val:41},{op:0,bits:9,val:178},{op:0,bits:8,val:9},{op:0,bits:8,val:137},{op:0,bits:8,val:73},{op:0,bits:9,val:242},{op:16,bits:7,val:4},{op:0,bits:8,val:85},{op:0,bits:8,val:21},{op:16,bits:8,val:258},{op:19,bits:7,val:43},{op:0,bits:8,val:117},{op:0,bits:8,val:53},{op:0,bits:9,val:202},{op:17,bits:7,val:13},{op:0,bits:8,val:101},{op:0,bits:8,val:37},{op:0,bits:9,val:170},{op:0,bits:8,val:5},{op:0,bits:8,val:133},{op:0,bits:8,val:69},{op:0,bits:9,val:234},{op:16,bits:7,val:8},{op:0,bits:8,val:93},{op:0,bits:8,val:29},{op:0,bits:9,val:154},{op:20,bits:7,val:83},{op:0,bits:8,val:125},{op:0,bits:8,val:61},{op:0,bits:9,val:218},{op:18,bits:7,val:23},{op:0,bits:8,val:109},{op:0,bits:8,val:45},{op:0,bits:9,val:186},{op:0,bits:8,val:13},{op:0,bits:8,val:141},{op:0,bits:8,val:77},{op:0,bits:9,val:250},{op:16,bits:7,val:3},{op:0,bits:8,val:83},{op:0,bits:8,val:19},{op:21,bits:8,val:195},{op:19,bits:7,val:35},{op:0,bits:8,val:115},{op:0,bits:8,val:51},{op:0,bits:9,val:198},{op:17,bits:7,val:11},{op:0,bits:8,val:99},{op:0,bits:8,val:35},{op:0,bits:9,val:166},{op:0,bits:8,val:3},{op:0,bits:8,val:131},{op:0,bits:8,val:67},{op:0,bits:9,val:230},{op:16,bits:7,val:7},{op:0,bits:8,val:91},{op:0,bits:8,val:27},{op:0,bits:9,val:150},{op:20,bits:7,val:67},{op:0,bits:8,val:123},{op:0,bits:8,val:59},{op:0,bits:9,val:214},{op:18,bits:7,val:19},{op:0,bits:8,val:107},{op:0,bits:8,val:43},{op:0,bits:9,val:182},{op:0,bits:8,val:11},{op:0,bits:8,val:139},{op:0,bits:8,val:75},{op:0,bits:9,val:246},{op:16,bits:7,val:5},{op:0,bits:8,val:87},{op:0,bits:8,val:23},{op:64,bits:8,val:0},{op:19,bits:7,val:51},{op:0,bits:8,val:119},{op:0,bits:8,val:55},{op:0,bits:9,val:206},{op:17,bits:7,val:15},{op:0,bits:8,val:103},{op:0,bits:8,val:39},{op:0,bits:9,val:174},{op:0,bits:8,val:7},{op:0,bits:8,val:135},{op:0,bits:8,val:71},{op:0,bits:9,val:238},{op:16,bits:7,val:9},{op:0,bits:8,val:95},{op:0,bits:8,val:31},{op:0,bits:9,val:158},{op:20,bits:7,val:99},{op:0,bits:8,val:127},{op:0,bits:8,val:63},{op:0,bits:9,val:222},{op:18,bits:7,val:27},{op:0,bits:8,val:111},{op:0,bits:8,val:47},{op:0,bits:9,val:190},{op:0,bits:8,val:15},{op:0,bits:8,val:143},{op:0,bits:8,val:79},{op:0,bits:9,val:254},{op:96,bits:7,val:0},{op:0,bits:8,val:80},{op:0,bits:8,val:16},{op:20,bits:8,val:115},{op:18,bits:7,val:31},{op:0,bits:8,val:112},{op:0,bits:8,val:48},{op:0,bits:9,val:193},{op:16,bits:7,val:10},{op:0,bits:8,val:96},{op:0,bits:8,val:32},{op:0,bits:9,val:161},{op:0,bits:8,val:0},{op:0,bits:8,val:128},{op:0,bits:8,val:64},{op:0,bits:9,val:225},{op:16,bits:7,val:6},{op:0,bits:8,val:88},{op:0,bits:8,val:24},{op:0,bits:9,val:145},{op:19,bits:7,val:59},{op:0,bits:8,val:120},{op:0,bits:8,val:56},{op:0,bits:9,val:209},{op:17,bits:7,val:17},{op:0,bits:8,val:104},{op:0,bits:8,val:40},{op:0,bits:9,val:177},{op:0,bits:8,val:8},{op:0,bits:8,val:136},{op:0,bits:8,val:72},{op:0,bits:9,val:241},{op:16,bits:7,val:4},{op:0,bits:8,val:84},{op:0,bits:8,val:20},{op:21,bits:8,val:227},{op:19,bits:7,val:43},{op:0,bits:8,val:116},{op:0,bits:8,val:52},{op:0,bits:9,val:201},{op:17,bits:7,val:13},{op:0,bits:8,val:100},{op:0,bits:8,val:36},{op:0,bits:9,val:169},{op:0,bits:8,val:4},{op:0,bits:8,val:132},{op:0,bits:8,val:68},{op:0,bits:9,val:233},{op:16,bits:7,val:8},{op:0,bits:8,val:92},{op:0,bits:8,val:28},{op:0,bits:9,val:153},{op:20,bits:7,val:83},{op:0,bits:8,val:124},{op:0,bits:8,val:60},{op:0,bits:9,val:217},{op:18,bits:7,val:23},{op:0,bits:8,val:108},{op:0,bits:8,val:44},{op:0,bits:9,val:185},{op:0,bits:8,val:12},{op:0,bits:8,val:140},{op:0,bits:8,val:76},{op:0,bits:9,val:249},{op:16,bits:7,val:3},{op:0,bits:8,val:82},{op:0,bits:8,val:18},{op:21,bits:8,val:163},{op:19,bits:7,val:35},{op:0,bits:8,val:114},{op:0,bits:8,val:50},{op:0,bits:9,val:197},{op:17,bits:7,val:11},{op:0,bits:8,val:98},{op:0,bits:8,val:34},{op:0,bits:9,val:165},{op:0,bits:8,val:2},{op:0,bits:8,val:130},{op:0,bits:8,val:66},{op:0,bits:9,val:229},{op:16,bits:7,val:7},{op:0,bits:8,val:90},{op:0,bits:8,val:26},{op:0,bits:9,val:149},{op:20,bits:7,val:67},{op:0,bits:8,val:122},{op:0,bits:8,val:58},{op:0,bits:9,val:213},{op:18,bits:7,val:19},{op:0,bits:8,val:106},{op:0,bits:8,val:42},{op:0,bits:9,val:181},{op:0,bits:8,val:10},{op:0,bits:8,val:138},{op:0,bits:8,val:74},{op:0,bits:9,val:245},{op:16,bits:7,val:5},{op:0,bits:8,val:86},{op:0,bits:8,val:22},{op:64,bits:8,val:0},{op:19,bits:7,val:51},{op:0,bits:8,val:118},{op:0,bits:8,val:54},{op:0,bits:9,val:205},{op:17,bits:7,val:15},{op:0,bits:8,val:102},{op:0,bits:8,val:38},{op:0,bits:9,val:173},{op:0,bits:8,val:6},{op:0,bits:8,val:134},{op:0,bits:8,val:70},{op:0,bits:9,val:237},{op:16,bits:7,val:9},{op:0,bits:8,val:94},{op:0,bits:8,val:30},{op:0,bits:9,val:157},{op:20,bits:7,val:99},{op:0,bits:8,val:126},{op:0,bits:8,val:62},{op:0,bits:9,val:221},{op:18,bits:7,val:27},{op:0,bits:8,val:110},{op:0,bits:8,val:46},{op:0,bits:9,val:189},{op:0,bits:8,val:14},{op:0,bits:8,val:142},{op:0,bits:8,val:78},{op:0,bits:9,val:253},{op:96,bits:7,val:0},{op:0,bits:8,val:81},{op:0,bits:8,val:17},{op:21,bits:8,val:131},{op:18,bits:7,val:31},{op:0,bits:8,val:113},{op:0,bits:8,val:49},{op:0,bits:9,val:195},{op:16,bits:7,val:10},{op:0,bits:8,val:97},{op:0,bits:8,val:33},{op:0,bits:9,val:163},{op:0,bits:8,val:1},{op:0,bits:8,val:129},{op:0,bits:8,val:65},{op:0,bits:9,val:227},{op:16,bits:7,val:6},{op:0,bits:8,val:89},{op:0,bits:8,val:25},{op:0,bits:9,val:147},{op:19,bits:7,val:59},{op:0,bits:8,val:121},{op:0,bits:8,val:57},{op:0,bits:9,val:211},{op:17,bits:7,val:17},{op:0,bits:8,val:105},{op:0,bits:8,val:41},{op:0,bits:9,val:179},{op:0,bits:8,val:9},{op:0,bits:8,val:137},{op:0,bits:8,val:73},{op:0,bits:9,val:243},{op:16,bits:7,val:4},{op:0,bits:8,val:85},{op:0,bits:8,val:21},{op:16,bits:8,val:258},{op:19,bits:7,val:43},{op:0,bits:8,val:117},{op:0,bits:8,val:53},{op:0,bits:9,val:203},{op:17,bits:7,val:13},{op:0,bits:8,val:101},{op:0,bits:8,val:37},{op:0,bits:9,val:171},{op:0,bits:8,val:5},{op:0,bits:8,val:133},{op:0,bits:8,val:69},{op:0,bits:9,val:235},{op:16,bits:7,val:8},{op:0,bits:8,val:93},{op:0,bits:8,val:29},{op:0,bits:9,val:155},{op:20,bits:7,val:83},{op:0,bits:8,val:125},{op:0,bits:8,val:61},{op:0,bits:9,val:219},{op:18,bits:7,val:23},{op:0,bits:8,val:109},{op:0,bits:8,val:45},{op:0,bits:9,val:187},{op:0,bits:8,val:13},{op:0,bits:8,val:141},{op:0,bits:8,val:77},{op:0,bits:9,val:251},{op:16,bits:7,val:3},{op:0,bits:8,val:83},{op:0,bits:8,val:19},{op:21,bits:8,val:195},{op:19,bits:7,val:35},{op:0,bits:8,val:115},{op:0,bits:8,val:51},{op:0,bits:9,val:199},{op:17,bits:7,val:11},{op:0,bits:8,val:99},{op:0,bits:8,val:35},{op:0,bits:9,val:167},{op:0,bits:8,val:3},{op:0,bits:8,val:131},{op:0,bits:8,val:67},{op:0,bits:9,val:231},{op:16,bits:7,val:7},{op:0,bits:8,val:91},{op:0,bits:8,val:27},{op:0,bits:9,val:151},{op:20,bits:7,val:67},{op:0,bits:8,val:123},{op:0,bits:8,val:59},{op:0,bits:9,val:215},{op:18,bits:7,val:19},{op:0,bits:8,val:107},{op:0,bits:8,val:43},{op:0,bits:9,val:183},{op:0,bits:8,val:11},{op:0,bits:8,val:139},{op:0,bits:8,val:75},{op:0,bits:9,val:247},{op:16,bits:7,val:5},{op:0,bits:8,val:87},{op:0,bits:8,val:23},{op:64,bits:8,val:0},{op:19,bits:7,val:51},{op:0,bits:8,val:119},{op:0,bits:8,val:55},{op:0,bits:9,val:207},{op:17,bits:7,val:15},{op:0,bits:8,val:103},{op:0,bits:8,val:39},{op:0,bits:9,val:175},{op:0,bits:8,val:7},{op:0,bits:8,val:135},{op:0,bits:8,val:71},{op:0,bits:9,val:239},{op:16,bits:7,val:9},{op:0,bits:8,val:95},{op:0,bits:8,val:31},{op:0,bits:9,val:159},{op:20,bits:7,val:99},{op:0,bits:8,val:127},{op:0,bits:8,val:63},{op:0,bits:9,val:223},{op:18,bits:7,val:27},{op:0,bits:8,val:111},{op:0,bits:8,val:47},{op:0,bits:9,val:191},{op:0,bits:8,val:15},{op:0,bits:8,val:143},{op:0,bits:8,val:79},{op:0,bits:9,val:255}]}if(!t){t=[{op:16,bits:5,val:1},{op:23,bits:5,val:257},{op:19,bits:5,val:17},{op:27,bits:5,val:4097},{op:17,bits:5,val:5},{op:25,bits:5,val:1025},{op:21,bits:5,val:65},{op:29,bits:5,val:16385},{op:16,bits:5,val:3},{op:24,bits:5,val:513},{op:20,bits:5,val:33},{op:28,bits:5,val:8193},{op:18,bits:5,val:9},{op:26,bits:5,val:2049},{op:22,bits:5,val:129},{op:64,bits:5,val:0},{op:16,bits:5,val:2},{op:23,bits:5,val:385},{op:19,bits:5,val:25},{op:27,bits:5,val:6145},{op:17,bits:5,val:7},{op:25,bits:5,val:1537},{op:21,bits:5,val:97},{op:29,bits:5,val:24577},{op:16,bits:5,val:4},{op:24,bits:5,val:769},{op:20,bits:5,val:49},{op:28,bits:5,val:12289},{op:18,bits:5,val:13},{op:26,bits:5,val:3073},{op:22,bits:5,val:193},{op:64,bits:5,val:0}]}ar.lencode=0;ar.distcode=512;for(aq=0;aq<512;aq++){ar.codes[aq]=U[aq]}for(aq=0;aq<32;aq++){ar.codes[aq+512]=t[aq]}ar.lenbits=9;ar.distbits=5}function ap(at){var ar=at.state;var aq=at.output_data.length;if(ar.window===null){ar.window=""}if(ar.wsize==0){ar.wsize=1<<ar.wbits}if(aq>=ar.wsize){ar.window=at.output_data.substring(aq-ar.wsize)}else{if(ar.whave+aq<ar.wsize){ar.window+=at.output_data}else{ar.window=ar.window.substring(ar.whave-(ar.wsize-aq))+at.output_data}}ar.whave=ar.window.length;if(ar.whave<ar.wsize){ar.wnext=ar.whave}else{ar.wnext=0}return 0}function m(ar,at){var aq=[at&255,(at>>>8)&255];ar.state.check=ar.checksum_function(ar.state.check,aq,0,2)}function n(ar,at){var aq=[at&255,(at>>>8)&255,(at>>>16)&255,(at>>>24)&255];ar.state.check=ar.checksum_function(ar.state.check,aq,0,4)}function Z(ar,aq){aq.strm=ar;aq.left=ar.avail_out;aq.next=ar.next_in;aq.have=ar.avail_in;aq.hold=ar.state.hold;aq.bits=ar.state.bits;return aq}function ah(aq){var ar=aq.strm;ar.next_in=aq.next;ar.avail_out=aq.left;ar.avail_in=aq.have;ar.state.hold=aq.hold;ar.state.bits=aq.bits}function P(aq){aq.hold=0;aq.bits=0}function ag(aq){if(aq.have==0){return false}aq.have--;aq.hold+=(aq.strm.input_data.charCodeAt(aq.next++)&255)<<aq.bits;aq.bits+=8;return true}function ad(ar,aq){while(ar.bits<aq){if(!ag(ar)){return false}}return true}function b(ar,aq){return ar.hold&((1<<aq)-1)}function w(ar,aq){ar.hold>>>=aq;ar.bits-=aq}function c(aq){aq.hold>>>=aq.bits&7;aq.bits-=aq.bits&7}function ai(aq){return((aq>>>24)&255)+((aq>>>8)&65280)+((aq&65280)<<8)+((aq&255)<<24)}var I=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];ZLIB.inflate=function(aD,at){var aC;var aB;var aq,az;var ar;var av=-1;var au=-1;var aw;var ax;var ay;var aA;if(!aD||!aD.state||(!aD.input_data&&aD.avail_in!=0)){return ZLIB.Z_STREAM_ERROR}aC=aD.state;if(aC.mode==an){aC.mode=ao}aB={};Z(aD,aB);aq=aB.have;az=aB.left;aA=ZLIB.Z_OK;inf_leave:for(;;){switch(aC.mode){case G:if(aC.wrap==0){aC.mode=ao;break}if(!ad(aB,16)){break inf_leave}if((aC.wrap&2)&&aB.hold==35615){aC.check=aD.checksum_function(0,null,0,0);m(aD,aB.hold);P(aB);aC.mode=D;break}aC.flags=0;if(aC.head!==null){aC.head.done=-1}if(!(aC.wrap&1)||((b(aB,8)<<8)+(aB.hold>>>8))%31){aD.msg="incorrect header check";aC.mode=a;break}if(b(aB,4)!=ZLIB.Z_DEFLATED){aD.msg="unknown compression method";aC.mode=a;break}w(aB,4);ay=b(aB,4)+8;if(aC.wbits==0){aC.wbits=ay}else{if(ay>aC.wbits){aD.msg="invalid window size";aC.mode=a;break}}aC.dmax=1<<ay;aD.adler=aC.check=aD.checksum_function(0,null,0,0);aC.mode=aB.hold&512?q:an;P(aB);break;case D:if(!ad(aB,16)){break inf_leave}aC.flags=aB.hold;if((aC.flags&255)!=ZLIB.Z_DEFLATED){aD.msg="unknown compression method";aC.mode=a;break}if(aC.flags&57344){aD.msg="unknown header flags set";aC.mode=a;break}if(aC.head!==null){aC.head.text=(aB.hold>>>8)&1}if(aC.flags&512){m(aD,aB.hold)}P(aB);aC.mode=am;case am:if(!ad(aB,32)){break inf_leave}if(aC.head!==null){aC.head.time=aB.hold}if(aC.flags&512){n(aD,aB.hold)}P(aB);aC.mode=af;case af:if(!ad(aB,16)){break inf_leave}if(aC.head!==null){aC.head.xflags=aB.hold&255;aC.head.os=aB.hold>>>8}if(aC.flags&512){m(aD,aB.hold)}P(aB);aC.mode=A;case A:if(aC.flags&1024){if(!ad(aB,16)){break inf_leave}aC.length=aB.hold;if(aC.head!==null){aC.head.extra_len=aB.hold}if(aC.flags&512){m(aD,aB.hold)}P(aB);aC.head.extra=""}else{if(aC.head!==null){aC.head.extra=null}}aC.mode=B;case B:if(aC.flags&1024){ar=aC.length;if(ar>aB.have){ar=aB.have}if(ar){if(aC.head!==null&&aC.head.extra!==null){ay=aC.head.extra_len-aC.length;aC.head.extra+=aD.input_data.substring(aB.next,aB.next+(ay+ar>aC.head.extra_max?aC.head.extra_max-ay:ar))}if(aC.flags&512){aC.check=aD.checksum_function(aC.check,aD.input_data,aB.next,ar)}aB.have-=ar;aB.next+=ar;aC.length-=ar}if(aC.length){break inf_leave}}aC.length=0;aC.mode=ac;case ac:if(aC.flags&2048){if(aB.have==0){break inf_leave}if(aC.head!==null&&aC.head.name===null){aC.head.name=""}ar=0;do{ay=aD.input_data.charAt(aB.next+ar);ar++;if(ay==="\0"){break}if(aC.head!==null&&aC.length<aC.head.name_max){aC.head.name+=ay;aC.length++}}while(ar<aB.have);if(aC.flags&512){aC.check=aD.checksum_function(aC.check,aD.input_data,aB.next,ar)}aB.have-=ar;aB.next+=ar;if(ay!=="\0"){break inf_leave}}else{if(aC.head!==null){aC.head.name=null}}aC.length=0;aC.mode=j;case j:if(aC.flags&4096){if(aB.have==0){break inf_leave}ar=0;if(aC.head!==null&&aC.head.comment===null){aC.head.comment=""}do{ay=aD.input_data.charAt(aB.next+ar);ar++;if(ay==="\0"){break}if(aC.head!==null&&aC.length<aC.head.comm_max){aC.head.comment+=ay;aC.length++}}while(ar<aB.have);if(aC.flags&512){aC.check=aD.checksum_function(aC.check,aD.input_data,aB.next,ar)}aB.have-=ar;aB.next+=ar;if(ay!=="\0"){break inf_leave}}else{if(aC.head!==null){aC.head.comment=null}}aC.mode=F;case F:if(aC.flags&512){if(!ad(aB,16)){break inf_leave}if(aB.hold!=(aC.check&65535)){aD.msg="header crc mismatch";aC.mode=a;break}P(aB)}if(aC.head!==null){aC.head.hcrc=(aC.flags>>>9)&1;aC.head.done=1}aD.adler=aC.check=aD.checksum_function(0,null,0,0);aC.mode=an;break;case q:if(!ad(aB,32)){break inf_leave}aD.adler=aC.check=ai(aB.hold);P(aB);aC.mode=p;case p:if(aC.havedict==0){ah(aB);return ZLIB.Z_NEED_DICT}aD.adler=aC.check=aD.checksum_function(0,null,0,0);aC.mode=an;case an:if(at==ZLIB.Z_BLOCK||at==ZLIB.Z_TREES){break inf_leave}case ao:if(aC.last){c(aB);aC.mode=d;break}if(!ad(aB,3)){break inf_leave}aC.last=b(aB,1);w(aB,1);switch(b(aB,2)){case 0:aC.mode=aj;break;case 1:C(aC);aC.mode=S;if(at==ZLIB.Z_TREES){w(aB,2);break inf_leave}break;case 2:aC.mode=al;break;case 3:aD.msg="invalid block type";aC.mode=a}w(aB,2);break;case aj:c(aB);if(!ad(aB,32)){break inf_leave}if((aB.hold&65535)!=(((aB.hold>>>16)&65535)^65535)){aD.msg="invalid stored block lengths";aC.mode=a;break}aC.length=aB.hold&65535;P(aB);aC.mode=l;if(at==ZLIB.Z_TREES){break inf_leave}case l:aC.mode=k;case k:ar=aC.length;if(ar){if(ar>aB.have){ar=aB.have}if(ar>aB.left){ar=aB.left}if(ar==0){break inf_leave}aD.output_data+=aD.input_data.substring(aB.next,aB.next+ar);aD.next_out+=ar;aB.have-=ar;aB.next+=ar;aB.left-=ar;aC.length-=ar;break}aC.mode=an;break;case al:if(!ad(aB,14)){break inf_leave}aC.nlen=b(aB,5)+257;w(aB,5);aC.ndist=b(aB,5)+1;w(aB,5);aC.ncode=b(aB,4)+4;w(aB,4);if(aC.nlen>286||aC.ndist>30){aD.msg="too many length or distance symbols";aC.mode=a;break}aC.have=0;aC.mode=W;case W:while(aC.have<aC.ncode){if(!ad(aB,3)){break inf_leave}var aE=b(aB,3);aC.lens[I[aC.have++]]=aE;w(aB,3)}while(aC.have<19){aC.lens[I[aC.have++]]=0}aC.next=0;aC.lencode=0;aC.lenbits=7;aA=K(aC,h);if(aA){aD.msg="invalid code lengths set";aC.mode=a;break}aC.have=0;aC.mode=g;case g:while(aC.have<aC.nlen+aC.ndist){for(;;){aw=aC.codes[aC.lencode+b(aB,aC.lenbits)];if(aw.bits<=aB.bits){break}if(!ag(aB)){break inf_leave}}if(aw.val<16){w(aB,aw.bits);aC.lens[aC.have++]=aw.val}else{if(aw.val==16){if(!ad(aB,aw.bits+2)){break inf_leave}w(aB,aw.bits);if(aC.have==0){aD.msg="invalid bit length repeat";aC.mode=a;break}ay=aC.lens[aC.have-1];ar=3+b(aB,2);w(aB,2)}else{if(aw.val==17){if(!ad(aB,aw.bits+3)){break inf_leave}w(aB,aw.bits);ay=0;ar=3+b(aB,3);w(aB,3)}else{if(!ad(aB,aw.bits+7)){break inf_leave}w(aB,aw.bits);ay=0;ar=11+b(aB,7);w(aB,7)}}if(aC.have+ar>aC.nlen+aC.ndist){aD.msg="invalid bit length repeat";aC.mode=a;break}while(ar--){aC.lens[aC.have++]=ay}}}if(aC.mode==a){break}if(aC.lens[256]==0){aD.msg="invalid code -- missing end-of-block";aC.mode=a;break}aC.next=0;aC.lencode=aC.next;aC.lenbits=9;aA=K(aC,X);if(aA){aD.msg="invalid literal/lengths set";aC.mode=a;break}aC.distcode=aC.next;aC.distbits=6;aA=K(aC,u);if(aA){aD.msg="invalid distances set";aC.mode=a;break}aC.mode=S;if(at==ZLIB.Z_TREES){break inf_leave}case S:aC.mode=R;case R:if(aB.have>=6&&aB.left>=258){ah(aB);H(aD,az);Z(aD,aB);if(aC.mode==an){aC.back=-1}break}aC.back=0;for(;;){aw=aC.codes[aC.lencode+b(aB,aC.lenbits)];if(aw.bits<=aB.bits){break}if(!ag(aB)){break inf_leave}}if(aw.op&&(aw.op&240)==0){ax=aw;for(;;){aw=aC.codes[aC.lencode+ax.val+(b(aB,ax.bits+ax.op)>>>ax.bits)];if(ax.bits+aw.bits<=aB.bits){break}if(!ag(aB)){break inf_leave}}w(aB,ax.bits);aC.back+=ax.bits}w(aB,aw.bits);aC.back+=aw.bits;aC.length=aw.val;if(aw.op==0){aC.mode=Y;break}if(aw.op&32){aC.back=-1;aC.mode=an;break}if(aw.op&64){aD.msg="invalid literal/length code";aC.mode=a;break}aC.extra=aw.op&15;aC.mode=T;case T:if(aC.extra){if(!ad(aB,aC.extra)){break inf_leave}aC.length+=b(aB,aC.extra);w(aB,aC.extra);aC.back+=aC.extra}aC.was=aC.length;aC.mode=r;case r:for(;;){aw=aC.codes[aC.distcode+b(aB,aC.distbits)];if(aw.bits<=aB.bits){break}if(!ag(aB)){break inf_leave}}if((aw.op&240)==0){ax=aw;for(;;){aw=aC.codes[aC.distcode+ax.val+(b(aB,ax.bits+ax.op)>>>ax.bits)];if((ax.bits+aw.bits)<=aB.bits){break}if(!ag(aB)){break inf_leave}}w(aB,ax.bits);aC.back+=ax.bits}w(aB,aw.bits);aC.back+=aw.bits;if(aw.op&64){aD.msg="invalid distance code";aC.mode=a;break}aC.offset=aw.val;aC.extra=aw.op&15;aC.mode=s;case s:if(aC.extra){if(!ad(aB,aC.extra)){break inf_leave}aC.offset+=b(aB,aC.extra);w(aB,aC.extra);aC.back+=aC.extra}aC.mode=aa;case aa:if(aB.left==0){break inf_leave}ar=az-aB.left;if(aC.offset>ar){ar=aC.offset-ar;if(ar>aC.whave){if(aC.sane){aD.msg="invalid distance too far back";aC.mode=a;break}}if(ar>aC.wnext){ar-=aC.wnext;av=aC.wsize-ar;au=-1}else{av=aC.wnext-ar;au=-1}if(ar>aC.length){ar=aC.length}}else{av=-1;au=aD.next_out-aC.offset;ar=aC.length}if(ar>aB.left){ar=aB.left}aB.left-=ar;aC.length-=ar;if(av>=0){aD.output_data+=aC.window.substring(av,av+ar);aD.next_out+=ar;ar=0}else{aD.next_out+=ar;do{aD.output_data+=aD.output_data.charAt(au++)}while(--ar)}if(aC.length==0){aC.mode=R}break;case Y:if(aB.left==0){break inf_leave}aD.output_data+=String.fromCharCode(aC.length);aD.next_out++;aB.left--;aC.mode=R;break;case d:if(aC.wrap){if(!ad(aB,32)){break inf_leave}az-=aB.left;aD.total_out+=az;aC.total+=az;if(az){aD.adler=aC.check=aD.checksum_function(aC.check,aD.output_data,aD.output_data.length-az,az)}az=aB.left;if((aC.flags?aB.hold:ai(aB.hold))!=aC.check){aD.msg="incorrect data check";aC.mode=a;break}P(aB)}aC.mode=V;case V:if(aC.wrap&&aC.flags){if(!ad(aB,32)){break inf_leave}if(aB.hold!=(aC.total&4294967295)){aD.msg="incorrect length check";aC.mode=a;break}P(aB)}aC.mode=v;case v:aA=ZLIB.Z_STREAM_END;break inf_leave;case a:aA=ZLIB.Z_DATA_ERROR;break inf_leave;case ab:return ZLIB.Z_MEM_ERROR;case ak:default:return ZLIB.Z_STREAM_ERROR}}inf_leave:ah(aB);if(aC.wsize||(az!=aD.avail_out&&aC.mode<a&&(aC.mode<d||at!=ZLIB.Z_FINISH))){if(ap(aD)){aC.mode=ab;return ZLIB.Z_MEM_ERROR}}aq-=aD.avail_in;az-=aD.avail_out;aD.total_in+=aq;aD.total_out+=az;aC.total+=az;if(aC.wrap&&az){aD.adler=aC.check=aD.checksum_function(aC.check,aD.output_data,0,aD.output_data.length)}aD.data_type=aC.bits+(aC.last?64:0)+(aC.mode==an?128:0)+(aC.mode==S||aC.mode==l?256:0);if(((aq==0&&az==0)||at==ZLIB.Z_FINISH)&&aA==ZLIB.Z_OK){aA=ZLIB.Z_BUF_ERROR}return aA};ZLIB.inflateEnd=function(ar){var aq;if(!ar||!ar.state){return ZLIB.Z_STREAM_ERROR}aq=ar.state;aq.window=null;ar.state=null;return ZLIB.Z_OK};ZLIB.z_stream.prototype.inflate=function(au,av){var at;var aq;var ar=16384;this.input_data=au;this.next_in=E(av,"next_in",0);this.avail_in=E(av,"avail_in",au.length-this.next_in);at=E(av,"flush",ZLIB.Z_SYNC_FLUSH);aq=E(av,"avail_out",-1);var aw="";do{this.avail_out=(aq>=0?aq:ar);this.output_data="";this.next_out=0;this.error=ZLIB.inflate(this,at);if(aq>=0){return this.output_data}aw+=this.output_data;if(this.avail_out>0){break}}while(this.error==ZLIB.Z_OK);return aw};ZLIB.z_stream.prototype.inflateReset=function(aq){return ZLIB.inflateReset(this,aq)}}());if(typeof ZLIB==="undefined"){alert("ZLIB is not defined. SRC zlib.js before zlib-adler32.js")}(function(){var c=65521;var d=5552;function b(e,g,k,h){var l;var j;l=(e>>>16)&65535;e&=65535;if(h==1){e+=g.charCodeAt(k)&255;if(e>=c){e-=c}l+=e;if(l>=c){l-=c}return e|(l<<16)}if(g===null){return 1}if(h<16){while(h--){e+=g.charCodeAt(k++)&255;l+=e}if(e>=c){e-=c}l%=c;return e|(l<<16)}while(h>=d){h-=d;j=d>>4;do{e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e}while(--j);e%=c;l%=c}if(h){while(h>=16){h-=16;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e}while(h--){e+=g.charCodeAt(k++)&255;l+=e}e%=c;l%=c}return e|(l<<16)}function a(e,g,k,h){var l;var j;l=(e>>>16)&65535;e&=65535;if(h==1){e+=g[k];if(e>=c){e-=c}l+=e;if(l>=c){l-=c}return e|(l<<16)}if(g===null){return 1}if(h<16){while(h--){e+=g[k++];l+=e}if(e>=c){e-=c}l%=c;return e|(l<<16)}while(h>=d){h-=d;j=d>>4;do{e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e}while(--j);e%=c;l%=c}if(h){while(h>=16){h-=16;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e}while(h--){e+=g[k++];l+=e}e%=c;l%=c}return e|(l<<16)}ZLIB.adler32=function(e,g,j,h){if(typeof g==="string"){return b(e,g,j,h)}else{return a(e,g,j,h)}};ZLIB.adler32_combine=function(e,g,h){var k;var l;var j;if(h<0){return 4294967295}h%=c;j=h;k=e&65535;l=j*k;l%=c;k+=(g&65535)+c-1;l+=((e>>16)&65535)+((g>>16)&65535)+c-j;if(k>=c){k-=c}if(k>=c){k-=c}if(l>=(c<<1)){l-=(c<<1)}if(l>=c){l-=c}return k|(l<<16)}}());if(typeof ZLIB==="undefined"){alert("ZLIB is not defined. SRC zlib.js before zlib-crc32.js")}(function(){var a=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918000,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];function c(j,h,l,k){if(h==null){return 0}j=j^4294967295;while(k>=8){j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);k-=8}if(k){do{j=a[(j^h.charCodeAt(l++))&255]^(j>>>8)}while(--k)}return j^4294967295}function b(j,h,l,k){if(h==null){return 0}j=j^4294967295;while(k>=8){j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);k-=8}if(k){do{j=a[(j^h[l++])&255]^(j>>>8)}while(--k)}return j^4294967295}ZLIB.crc32=function(j,h,l,k){if(typeof h==="string"){return c(j,h,l,k)}else{return b(j,h,l,k)}};var d=32;function g(h,l){var k;var j=0;k=0;while(l){if(l&1){k^=h[j]}l>>=1;j++}return k}function e(k,h){var j;for(j=0;j<d;j++){k[j]=g(h,h[j])}}ZLIB.crc32_combine=function(h,j,l){var m;var p;var k;var o;if(l<=0){return h}k=new Array(d);o=new Array(d);o[0]=3988292384;p=1;for(m=1;m<d;m++){o[m]=p;p<<=1}e(k,o);e(o,k);do{e(k,o);if(l&1){h=g(k,h)}l>>=1;if(l==0){break}e(o,k);if(l&1){h=g(o,h)}l>>=1}while(l!=0);h^=j;return h}}());var CreateAmtRedirect=function(e,a){var g={};g.m=e;e.parent=g;g.authCookie=a;g.State=0;g.socket=null;g.host=null;g.port=0;g.user=null;g.pass=null;g.authuri="/RedirectionService";g.tlsv1only=0;g.inDataCount=0;g.connectstate=0;g.protocol=e.protocol;g.debugmode=0;g.amtaccumulator="";g.amtsequence=1;g.amtkeepalivetimer=null;g.onStateChanged=null;g.Start=function(h,k,n,j,l){g.host=h;g.port=k;g.user=n;g.pass=j;g.connectstate=0;g.inDataCount=0;var m=window.location.protocol.replace("http","ws")+"//"+window.location.host+window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/webrelay.ashx?p=2&host="+h+"&port="+k+"&tls="+l+((n=="*")?"&serverauth=1":"")+((typeof j==="undefined")?("&serverauth=1&user="+n):"");if((a!=null)&&(a!="")){m+="&auth="+a}g.socket=new WebSocket(m);g.socket.onopen=g.xxOnSocketConnected;g.socket.onmessage=g.xxOnMessage;g.socket.onclose=g.xxOnSocketClosed;g.xxStateChange(1)};g.xxOnSocketConnected=function(){if(g.debugmode==1){console.log("onSocketConnected")}g.xxStateChange(2);if(g.protocol==1){g.xxSend(g.RedirectStartSol)}if(g.protocol==2){g.xxSend(g.RedirectStartKvm)}if(g.protocol==3){g.xxSend(g.RedirectStartIder)}};var b=new FileReader();var d=false,c=[];if(b.readAsBinaryString){b.onload=function(h){g.xxOnSocketData(h.target.result);if(c.length==0){d=false}else{b.readAsBinaryString(new Blob([c.shift()]))}}}else{if(b.readAsArrayBuffer){b.onloadend=function(h){g.xxOnSocketData(h.target.result);if(c.length==0){d=false}else{b.readAsArrayBuffer(c.shift())}}}}g.xxOnMessage=function(k){g.inDataCount++;if(typeof k.data=="object"){if(d==true){c.push(k.data);return}if(b.readAsBinaryString){d=true;b.readAsBinaryString(new Blob([k.data]))}else{if(b.readAsArrayBuffer){d=true;b.readAsArrayBuffer(k.data)}else{var h="",j=new Uint8Array(k.data),m=j.byteLength;for(var l=0;l<m;l++){h+=String.fromCharCode(j[l])}g.xxOnSocketData(h)}}}else{g.xxOnSocketData(k.data)}};g.xxOnSocketData=function(t){if(!t||g.connectstate==-1){return}if(typeof t==="object"){var m="";var o=new Uint8Array(t);var y=o.byteLength;for(var x=0;x<y;x++){m+=String.fromCharCode(o[x])}t=m}else{if(typeof t!=="string"){return}}if((g.protocol==2||g.protocol==3)&&g.connectstate==1){return g.m.ProcessData(t)}g.amtaccumulator+=t;while(g.amtaccumulator.length>=1){var p=0;switch(g.amtaccumulator.charCodeAt(0)){case 17:if(g.amtaccumulator.length<4){return}var L=g.amtaccumulator.charCodeAt(1);switch(L){case 0:if(g.amtaccumulator.length<13){return}var C=g.amtaccumulator.charCodeAt(12);if(g.amtaccumulator.length<13+C){return}g.xxSend(String.fromCharCode(19,0,0,0,0,0,0,0,0));p=(13+C);break;default:g.Stop(1);break}break;case 20:if(g.amtaccumulator.length<9){return}var k=ReadIntX(g.amtaccumulator,5);if(g.amtaccumulator.length<9+k){return}var K=g.amtaccumulator.charCodeAt(1);var l=g.amtaccumulator.charCodeAt(4);var h=[];for(x=0;x<k;x++){h.push(g.amtaccumulator.charCodeAt(9+x))}var j=g.amtaccumulator.substring(9,9+k);p=9+k;if(l==0){if(h.indexOf(4)>=0){g.xxSend(String.fromCharCode(19,0,0,0,4)+IntToStrX(g.user.length+g.authuri.length+8)+String.fromCharCode(g.user.length)+g.user+String.fromCharCode(0,0)+String.fromCharCode(g.authuri.length)+g.authuri+String.fromCharCode(0,0,0,0))}else{if(h.indexOf(3)>=0){g.xxSend(String.fromCharCode(19,0,0,0,3)+IntToStrX(g.user.length+g.authuri.length+7)+String.fromCharCode(g.user.length)+g.user+String.fromCharCode(0,0)+String.fromCharCode(g.authuri.length)+g.authuri+String.fromCharCode(0,0,0))}else{if(h.indexOf(1)>=0){g.xxSend(String.fromCharCode(19,0,0,0,1)+IntToStrX(g.user.length+g.pass.length+2)+String.fromCharCode(g.user.length)+g.user+String.fromCharCode(g.pass.length)+g.pass)}else{g.Stop(2)}}}}else{if((l==3||l==4)&&K==1){var s=0;var G=j.charCodeAt(s);var F=j.substring(s+1,s+1+G);s+=(G+1);var B=j.charCodeAt(s);var A=j.substring(s+1,s+1+B);s+=(B+1);var E=0;var D=null;var q=g.xxRandomNonce(32);var J="00000002";var v="";if(l==4){E=j.charCodeAt(s);D=j.substring(s+1,s+1+E);s+=(E+1);v=J+":"+q+":"+D+":"}var u=hex_md5(hex_md5(g.user+":"+F+":"+g.pass)+":"+A+":"+v+hex_md5("POST:"+g.authuri));var M=g.user.length+F.length+A.length+g.authuri.length+q.length+J.length+u.length+7;if(l==4){M+=(D.length+1)}var n=String.fromCharCode(19,0,0,0,l)+IntToStrX(M)+String.fromCharCode(g.user.length)+g.user+String.fromCharCode(F.length)+F+String.fromCharCode(A.length)+A+String.fromCharCode(g.authuri.length)+g.authuri+String.fromCharCode(q.length)+q+String.fromCharCode(J.length)+J+String.fromCharCode(u.length)+u;if(l==4){n+=(String.fromCharCode(D.length)+D)}g.xxSend(n)}else{if(K==0){if(g.protocol==1){var z=10000;var O=100;var N=0;var I=10000;var H=100;var w=0;g.xxSend(String.fromCharCode(32,0,0,0)+IntToStrX(g.amtsequence++)+ShortToStrX(z)+ShortToStrX(O)+ShortToStrX(N)+ShortToStrX(I)+ShortToStrX(H)+ShortToStrX(w)+IntToStrX(0))}if(g.protocol==2){g.xxSend(String.fromCharCode(64,0,0,0,0,0,0,0))}if(g.protocol==3){g.connectstate=1;g.xxStateChange(3)}}else{g.Stop(3)}}}break;case 33:if(g.amtaccumulator.length<23){break}p=23;g.xxSend(String.fromCharCode(39,0,0,0)+IntToStrX(g.amtsequence++)+String.fromCharCode(0,0,27,0,0,0));if(g.protocol==1){g.amtkeepalivetimer=setInterval(g.xxSendAmtKeepAlive,2000)}g.connectstate=1;g.xxStateChange(3);break;case 41:if(g.amtaccumulator.length<10){break}p=10;break;case 42:if(g.amtaccumulator.length<10){break}var r=(10+((g.amtaccumulator.charCodeAt(9)&255)<<8)+(g.amtaccumulator.charCodeAt(8)&255));if(g.amtaccumulator.length<r){break}g.m.ProcessData(g.amtaccumulator.substring(10,r));p=r;break;case 43:if(g.amtaccumulator.length<8){break}p=8;break;case 65:if(g.amtaccumulator.length<8){break}g.connectstate=1;g.m.Start();if(g.amtaccumulator.length>8){g.m.ProcessData(g.amtaccumulator.substring(8))}p=g.amtaccumulator.length;break;case 240:g.serverIsRecording=true;p=1;break;default:console.log("Unknown Intel AMT command: "+g.amtaccumulator.charCodeAt(0)+" acclen="+g.amtaccumulator.length);g.Stop(4);return}if(p==0){return}g.amtaccumulator=g.amtaccumulator.substring(p)}};g.xxSend=function(l){if(g.socket!=null&&g.socket.readyState==WebSocket.OPEN){if(g.debugmode==1){console.log("Send",l)}var h=new Uint8Array(l.length);for(var k=0;k<l.length;++k){h[k]=l.charCodeAt(k)}try{g.socket.send(h.buffer)}catch(j){}}};g.send=function(h){if(g.socket==null||g.connectstate!=1){return}if(g.protocol==1){g.xxSend(String.fromCharCode(40,0,0,0)+IntToStrX(g.amtsequence++)+ShortToStrX(h.length)+h)}else{g.xxSend(h)}};g.xxSendAmtKeepAlive=function(){if(g.socket==null){return}g.xxSend(String.fromCharCode(43,0,0,0)+IntToStrX(g.amtsequence++))};g.xxRandomNonceX="abcdef0123456789";g.xxRandomNonce=function(j){var k="";for(var h=0;h<j;h++){k+=g.xxRandomNonceX.charAt(Math.floor(Math.random()*g.xxRandomNonceX.length))}return k};g.xxOnSocketClosed=function(){if(g.debugmode==1){console.log("onSocketClosed")}if((g.inDataCount==0)&&(g.tlsv1only==0)){g.tlsv1only=1;g.socket=new WebSocket(window.location.protocol.replace("http","ws")+"//"+window.location.host+window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/webrelay.ashx?p=2&host="+g.host+"&port="+g.port+"&tls="+g.tls+"&tls1only=1"+((g.user=="*")?"&serverauth=1":"")+((typeof pass==="undefined")?("&serverauth=1&user="+g.user):""));g.socket.onopen=g.xxOnSocketConnected;g.socket.onmessage=g.xxOnMessage;g.socket.onclose=g.xxOnSocketClosed}else{g.Stop(5)}};g.xxStateChange=function(h){if(g.State==h){return}g.State=h;g.m.xxStateChange(g.State);if(g.onStateChanged!=null){g.onStateChanged(g,g.State)}};g.Stop=function(h){if(g.debugmode==1){console.log("onSocketStop",h)}g.xxStateChange(0);g.connectstate=-1;g.amtaccumulator="";if(g.socket!=null){g.socket.close();g.socket=null}if(g.amtkeepalivetimer!=null){clearInterval(g.amtkeepalivetimer);g.amtkeepalivetimer=null}};g.RedirectStartSol=String.fromCharCode(16,0,0,0,83,79,76,32);g.RedirectStartKvm=String.fromCharCode(16,1,0,0,75,86,77,82);g.RedirectStartIder=String.fromCharCode(16,0,0,0,73,68,69,82);return g};var CreateWsmanComm=function(l,o,q,n,p){var m={};m.PendingAjax=[];m.ActiveAjaxCount=0;m.MaxActiveAjaxCount=1;m.FailAllError=0;m.challengeParams=null;m.noncecounter=1;m.authcounter=0;m.socket=null;m.socketState=0;m.host=l;m.port=o;m.user=q;m.pass=n;m.tls=p;m.tlsv1only=1;m.cnonce=Math.random().toString(36).substring(7);m.PerformAjax=function(t,s,v,u,w,r){if(m.ActiveAjaxCount<m.MaxActiveAjaxCount&&m.PendingAjax.length==0){m.PerformAjaxEx(t,s,v,w,r)}else{if(u==1){m.PendingAjax.unshift([t,s,v,w,r])}else{m.PendingAjax.push([t,s,v,w,r])}}};m.PerformNextAjax=function(){if(m.ActiveAjaxCount>=m.MaxActiveAjaxCount||m.PendingAjax.length==0){return}var r=m.PendingAjax.shift();m.PerformAjaxEx(r[0],r[1],r[2],r[3],r[4]);m.PerformNextAjax()};m.PerformAjaxEx=function(t,s,u,v,r){if(m.FailAllError!=0){m.gotNextMessagesError({status:m.FailAllError},"error",null,[t,s,u,v,r]);return}if(!t){t=""}m.ActiveAjaxCount++;return m.PerformAjaxExNodeJS(t,s,u,v,r)};m.pendingAjaxCall=[];m.PerformAjaxExNodeJS=function(t,s,u,v,r){m.PerformAjaxExNodeJS2(t,s,u,v,r,3)};m.PerformAjaxExNodeJS2=function(t,s,v,w,r,u){if(u<=0||m.FailAllError!=0){m.ActiveAjaxCount--;if(m.FailAllError!=999){m.gotNextMessages(null,"error",{status:((m.FailAllError==0)?408:m.FailAllError)},[t,s,v,w,r])}m.PerformNextAjax();return}m.pendingAjaxCall.push([t,s,v,w,r,u]);if(m.socketState==0){m.xxConnectHttpSocket()}else{if(m.socketState==2){m.sendRequest(t,w,r)}}};m.sendRequest=function(t,v,r){v=v?v:"/wsman";r=r?r:"POST";var s=r+" "+v+" HTTP/1.1\r\n";if(m.challengeParams!=null){var u=hex_md5(hex_md5(m.user+":"+m.challengeParams.realm+":"+m.pass)+":"+m.challengeParams.nonce+":"+m.noncecounter+":"+m.cnonce+":"+m.challengeParams.qop+":"+hex_md5(r+":"+v));s+="Authorization: "+m.renderDigest({username:m.user,realm:m.challengeParams.realm,nonce:m.challengeParams.nonce,uri:v,qop:m.challengeParams.qop,response:u,nc:m.noncecounter++,cnonce:m.cnonce})+"\r\n"}s+="Host: "+m.host+":"+m.port+"\r\nTransfer-Encoding: chunked\r\n\r\n"+t.length.toString(16).toUpperCase()+"\r\n"+t+"\r\n0\r\n\r\n";g(s)};m.parseDigest=function(r){var s=r.substring(7).split(",");for(i in s){s[i]=s[i].trim()}return s.reduce(function(t,v){var u=v.split("=");t[u[0]]=u[1].replace(/"/g,"");return t},{})};m.renderDigest=function(r){var s=[];for(i in r){s.push(i)}return"Digest "+s.reduce(function(u,t){return u+","+t+'="'+r[t]+'"'},"").substring(1)};m.xxConnectHttpSocket=function(){m.socketParseState=0;m.socketAccumulator="";m.socketHeader=null;m.socketData="";m.socketState=1;console.log(m.tlsv1only);m.socket=new WebSocket(window.location.protocol.replace("http","ws")+"//"+window.location.host+window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/webrelay.ashx?p=1&host="+m.host+"&port="+m.port+"&tls="+m.tls+"&tlsv1only="+m.tlsv1only+((q=="*")?"&serverauth=1":"")+((typeof n==="undefined")?("&serverauth=1&user="+q):""));m.socket.onopen=c;m.socket.onmessage=a;m.socket.onclose=b};function c(){m.socketState=2;for(i in m.pendingAjaxCall){m.sendRequest(m.pendingAjaxCall[i][0],m.pendingAjaxCall[i][3],m.pendingAjaxCall[i][4])}}var h=new FileReader();var k=false,j=[];if(h.readAsBinaryString){h.onload=function(r){d(r.target.result);if(j.length==0){k=false}else{h.readAsBinaryString(new Blob([j.shift()]))}}}else{if(h.readAsArrayBuffer){h.onloadend=function(r){d(r.target.result);if(j.length==0){k=false}else{h.readAsArrayBuffer(j.shift())}}}}function a(t){if(typeof t.data=="object"){if(k==true){j.push(t.data);return}if(h.readAsBinaryString){k=true;h.readAsBinaryString(new Blob([t.data]))}else{if(h.readAsArrayBuffer){k=true;h.readAsArrayBuffer(t.data)}else{var r="",s=new Uint8Array(t.data),v=s.byteLength;for(var u=0;u<v;u++){r+=String.fromCharCode(s[u])}d(r)}}}else{d(t.data)}}function d(v){if(typeof v==="object"){var r="",s=new Uint8Array(v),y=s.byteLength;for(var x=0;x<y;x++){r+=String.fromCharCode(s[x])}v=r}else{if(typeof v!=="string"){return}}m.socketAccumulator+=v;while(true){if(m.socketParseState==0){var w=m.socketAccumulator.indexOf("\r\n\r\n");if(w<0){return}m.socketHeader=m.socketAccumulator.substring(0,w).split("\r\n");m.socketAccumulator=m.socketAccumulator.substring(w+4);m.socketParseState=1;m.socketData="";m.socketXHeader={Directive:m.socketHeader[0].split(" ")};for(x in m.socketHeader){if(x!=0){var z=m.socketHeader[x].indexOf(":");m.socketXHeader[m.socketHeader[x].substring(0,z).toLowerCase()]=m.socketHeader[x].substring(z+2)}}}if(m.socketParseState==1){var u=-1;if((m.socketXHeader.connection!=undefined)&&(m.socketXHeader.connection.toLowerCase()=="close")&&((m.socketXHeader["transfer-encoding"]==undefined)||(m.socketXHeader["transfer-encoding"].toLowerCase()!="chunked"))){u=0}else{if(m.socketXHeader["content-length"]!=undefined){u=parseInt(m.socketXHeader["content-length"]);if(m.socketAccumulator.length<u){return}var v=m.socketAccumulator.substring(0,u);m.socketAccumulator=m.socketAccumulator.substring(u);m.socketData=v;u=0}else{var t=m.socketAccumulator.indexOf("\r\n");if(t<0){return}u=parseInt(m.socketAccumulator.substring(0,t),16);if(isNaN(u)){if(m.websocket){m.websocket.close()}return}if(m.socketAccumulator.length<t+2+u+2){return}var v=m.socketAccumulator.substring(t+2,t+2+u);m.socketAccumulator=m.socketAccumulator.substring(t+2+u+2);m.socketData+=v}}if(u==0){e(m.socketXHeader,m.socketData);m.socketParseState=0;m.socketHeader=null}}}}function e(u,t){var w=parseInt(u.Directive[1]);if(isNaN(w)){w=602}if(w==401&&++(m.authcounter)<3){m.challengeParams=m.parseDigest(u["www-authenticate"])}else{var v=m.pendingAjaxCall.shift();m.authcounter=0;m.ActiveAjaxCount--;m.gotNextMessages(t,"success",{status:w},v);m.PerformNextAjax()}}function b(s){m.socketState=0;if(m.socket!=null){m.socket.close();m.socket=null}if(m.pendingAjaxCall.length>0){var t=m.pendingAjaxCall.shift();var u=t[5];m.PerformAjaxExNodeJS2(t[0],t[1],t[2],t[3],t[4],--u)}}function g(u){if(m.socketState==2&&m.socket!=null&&m.socket.readyState==WebSocket.OPEN){var r=new Uint8Array(u.length);for(var t=0;t<u.length;++t){r[t]=u.charCodeAt(t)}try{m.socket.send(r.buffer)}catch(s){}}}m.gotNextMessages=function(s,u,t,r){if(m.FailAllError==999){return}if(m.FailAllError!=0){r[1](null,m.FailAllError,r[2]);return}if(t.status!=200){r[1](null,t.status,r[2]);return}r[1](s,200,r[2])};m.gotNextMessagesError=function(t,u,s,r){if(m.FailAllError==999){return}if(m.FailAllError!=0){r[1](null,m.FailAllError,r[2]);return}r[1](m,null,{Header:{HttpError:t.status}},t.status,r[2])};m.CancelAllQueries=function(r){while(m.PendingAjax.length>0){var t=m.PendingAjax.shift();t[1](null,r,t[2])}if(m.websocket!=null){m.websocket.close();m.websocket=null;m.socketState=0}};return m};var CreateAgentRedirect=function(g,h,l,a,b){var j={};j.m=h;h.parent=j;j.meshserver=g;j.authCookie=a;j.State=0;j.nodeid=null;j.socket=null;j.connectstate=-1;j.tunnelid=Math.random().toString(36).substring(2);j.protocol=h.protocol;j.onStateChanged=null;j.ctrlMsgAllowed=true;j.attemptWebRTC=false;j.webRtcActive=false;j.webSwitchOk=false;j.webchannel=null;j.webrtc=null;j.debugmode=0;j.serverIsRecording=false;if(b==null){b="/"}j.consoleMessage=null;j.onConsoleMessageChange=null;j.Start=function(m){var o,n=window.location.protocol.replace("http","ws")+"//"+window.location.host+window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/meshrelay.ashx?browser=1&p="+j.protocol+"&nodeid="+m+"&id="+j.tunnelid;if((a!=null)&&(a!="")){n+="&auth="+a}j.nodeid=m;j.connectstate=0;j.socket=new WebSocket(n);j.socket.onopen=j.xxOnSocketConnected;j.socket.onmessage=j.xxOnMessage;j.socket.onerror=function(p){};j.socket.onclose=j.xxOnSocketClosed;j.xxStateChange(1);j.meshserver.send({action:"msg",type:"tunnel",nodeid:j.nodeid,value:"*"+b+"meshrelay.ashx?p="+j.protocol+"&nodeid="+m+"&id="+j.tunnelid,usage:j.protocol})};j.xxOnSocketConnected=function(){if(j.debugmode==1){console.log("onSocketConnected")}j.xxStateChange(2)};j.xxOnControlCommand=function(o){var m;try{m=JSON.parse(o)}catch(n){return}if(m.ctrlChannel!="102938"){j.xxOnSocketData(o);return}if(m.type=="console"){j.consoleMessage=m.msg;if(j.onConsoleMessageChange){j.onConsoleMessageChange(j,j.consoleMessage)}}else{if(j.webrtc!=null){if(m.type=="answer"){j.webrtc.setRemoteDescription(new RTCSessionDescription(m),function(){},j.xxCloseWebRTC)}else{if(m.type=="webrtc0"){j.webSwitchOk=true;k()}else{if(m.type=="webrtc1"){j.sendCtrlMsg('{"ctrlChannel":"102938","type":"webrtc2"}')}else{if(m.type=="webrtc2"){}}}}}}};j.sendCtrlMsg=function(n){if(j.ctrlMsgAllowed==true){if((typeof args!="undefined")&&args.redirtrace){console.log("RedirSend",typeof n,n)}try{j.socket.send(n)}catch(m){}}};function k(){if((j.webSwitchOk==true)&&(j.webRtcActive==true)){j.sendCtrlMsg('{"ctrlChannel":"102938","type":"webrtc0"}');j.sendCtrlMsg('{"ctrlChannel":"102938","type":"webrtc1"}');if(j.onStateChanged!=null){j.onStateChanged(j,j.State)}}}j.xxOnMessage=function(p){if(j.State<3){if((p.data=="c")||(p.data=="cr")){if(p.data=="cr"){j.serverIsRecording=true}try{j.socket.send(j.protocol)}catch(q){}j.xxStateChange(3);if(j.attemptWebRTC==true){var o=null;if(typeof RTCPeerConnection!=="undefined"){j.webrtc=new RTCPeerConnection(o)}else{if(typeof webkitRTCPeerConnection!=="undefined"){j.webrtc=new webkitRTCPeerConnection(o)}}if(j.webrtc!=null){j.webchannel=j.webrtc.createDataChannel("DataChannel",{});j.webchannel.onmessage=j.xxOnMessage;j.webchannel.onopen=function(){j.webRtcActive=true;k()};j.webchannel.onclose=function(t){if(j.webRtcActive){j.Stop()}};j.webrtc.onicecandidate=function(t){if(t.candidate==null){try{j.socket.send(JSON.stringify(j.webrtcoffer))}catch(u){}}else{j.webrtcoffer.sdp+=("a="+t.candidate.candidate+"\r\n")}};j.webrtc.oniceconnectionstatechange=function(){if(j.webrtc!=null){if(j.webrtc.iceConnectionState=="disconnected"){if(j.webRtcActive==true){j.Stop()}else{j.xxCloseWebRTC()}}else{if(j.webrtc.iceConnectionState=="failed"){j.xxCloseWebRTC()}}}};j.webrtc.createOffer(function(t){j.webrtcoffer=t;j.webrtc.setLocalDescription(t,function(){},j.xxCloseWebRTC)},j.xxCloseWebRTC,{mandatory:{OfferToReceiveAudio:false,OfferToReceiveVideo:false}})}}return}}if(typeof p.data=="string"){j.xxOnControlCommand(p.data);return}if(typeof p.data=="object"){if(e==true){d.push(p.data);return}if(c.readAsBinaryString){e=true;c.readAsBinaryString(new Blob([p.data]))}else{if(c.readAsArrayBuffer){e=true;c.readAsArrayBuffer(p.data)}else{var m="",n=new Uint8Array(p.data),s=n.byteLength;for(var r=0;r<s;r++){m+=String.fromCharCode(n[r])}j.xxOnSocketData(m)}}}else{j.xxOnSocketData(p.data)}};var c=new FileReader();var e=false,d=[];if(c.readAsBinaryString){c.onload=function(m){j.xxOnSocketData(m.target.result);if(d.length==0){e=false}else{c.readAsBinaryString(new Blob([d.shift()]))}}}else{if(c.readAsArrayBuffer){c.onloadend=function(m){j.xxOnSocketData(m.target.result);if(d.length==0){e=false}else{c.readAsArrayBuffer(d.shift())}}}}j.xxOnSocketData=function(o){if(!o||j.connectstate==-1){return}if(typeof o==="object"){var m="",n=new Uint8Array(o),q=n.byteLength;for(var p=0;p<q;p++){m+=String.fromCharCode(n[p])}o=m}else{if(typeof o!=="string"){return}}if((typeof args!="undefined")&&args.redirtrace){console.log("RedirRecv",typeof o,o.length,o)}return j.m.ProcessData(o)};j.sendText=function(m){if(typeof m!="string"){m=JSON.stringify(m)}j.send(encode_utf8(m))};j.send=function(q){if((typeof args!="undefined")&&args.redirtrace){console.log("RedirSend",typeof q,q.length,q)}try{if(j.socket!=null&&j.socket.readyState==WebSocket.OPEN){if(typeof q=="string"){if(j.debugmode==1){var m=new Uint8Array(q.length),n=[];for(var p=0;p<q.length;++p){m[p]=q.charCodeAt(p);n.push(q.charCodeAt(p))}if(j.webRtcActive==true){j.webchannel.send(m.buffer)}else{j.socket.send(m.buffer)}}else{var m=new Uint8Array(q.length);for(var p=0;p<q.length;++p){m[p]=q.charCodeAt(p)}if(j.webRtcActive==true){j.webchannel.send(m.buffer)}else{j.socket.send(m.buffer)}}}else{if(j.webRtcActive==true){j.webchannel.send(q)}else{j.socket.send(q)}}}}catch(o){}};j.xxOnSocketClosed=function(){j.Stop(1)};j.xxStateChange=function(m){if(j.State==m){return}j.State=m;j.m.xxStateChange(j.State);if(j.onStateChanged!=null){j.onStateChanged(j,j.State)}};j.xxCloseWebRTC=function(){if(j.webchannel!=null){try{j.webchannel.close()}catch(m){}j.webchannel=null}if(j.webrtc!=null){try{j.webrtc.close()}catch(m){}j.webrtc=null}j.webRtcActive=false};j.Stop=function(n){if(j.debugmode==1){console.log("stop",n)}j.xxCloseWebRTC();j.connectstate=-1;if(j.socket!=null){try{if(j.socket.readyState==1){j.sendCtrlMsg('{"ctrlChannel":"102938","type":"close"}');j.socket.close()}}catch(m){}j.socket=null}j.xxStateChange(0)};return j};var CreateKvmDataChannel=function(h,e,d){var g={};g.m=e;e.parent=g;g.webchannel=h;g.State=0;g.protocol=e.protocol;g.onStateChanged=null;g.onControlMsg=null;g.debugmode=0;g.keepalive=d;g.rtcKeepAlive=null;g.Start=function(){if(g.debugmode==1){console.log("start")}g.xxStateChange(3);g.webchannel.onmessage=g.xxOnMessage;g.rtcKeepAlive=setInterval(g.xxSendRtcKeepAlive,30000)};var a=new FileReader();var c=false,b=[];if(a.readAsBinaryString){a.onload=function(j){g.xxOnSocketData(j.target.result);if(b.length==0){c=false}else{a.readAsBinaryString(new Blob([b.shift()]))}}}else{if(a.readAsArrayBuffer){a.onloadend=function(j){g.xxOnSocketData(j.target.result);if(b.length==0){c=false}else{a.readAsArrayBuffer(b.shift())}}}}g.xxOnMessage=function(l){if(typeof l.data=="string"){if(g.onControlMsg!=null){g.onControlMsg(l.data)}return}if(typeof l.data=="object"){if(c==true){b.push(l.data);return}if(a.readAsBinaryString){c=true;a.readAsBinaryString(new Blob([l.data]))}else{if(f.readAsArrayBuffer){c=true;a.readAsArrayBuffer(l.data)}else{var j="",k=new Uint8Array(l.data),n=k.byteLength;for(var m=0;m<n;m++){j+=String.fromCharCode(k[m])}g.xxOnSocketData(j)}}}else{g.xxOnSocketData(l.data)}};g.xxOnSocketData=function(l){if(!l){return}if(typeof l==="object"){var j="",k=new Uint8Array(l),n=k.byteLength;for(var m=0;m<n;m++){j+=String.fromCharCode(k[m])}l=j}else{if(typeof l!=="string"){return}}return g.m.ProcessData(l)};g.sendCtrlMsg=function(j){if(typeof j=="string"){g.webchannel.send(j);if(g.keepalive!=null){g.keepalive.sendKeepAlive()}}};g.send=function(l){if(typeof l=="string"){var j=new Uint8Array(l.length);for(var k=0;k<l.length;++k){j[k]=l.charCodeAt(k)}l=j}g.webchannel.send(l)};g.xxStateChange=function(j){if(g.State==j){return}g.State=j;g.m.xxStateChange(g.State);if(g.onStateChanged!=null){g.onStateChanged(g,g.State)}};g.Stop=function(){if(g.debugmode==1){console.log("stop")}if(g.rtcKeepAlive!=null){clearInterval(g.rtcKeepAlive);g.rtcKeepAlive=null}g.xxStateChange(0)};g.xxSendRtcKeepAlive=function(){g.sendCtrlMsg(JSON.stringify({action:"ping"}))};return g};var CreateAgentRemoteDesktop=function(a,g){var e={};e.CanvasId=a;if(typeof a==="string"){e.CanvasId=Q(a)}e.Canvas=e.CanvasId.getContext("2d");e.scrolldiv=g;e.State=0;e.PendingOperations=[];e.tilesReceived=0;e.TilesDrawn=0;e.KillDraw=0;e.ipad=false;e.tabletKeyboardVisible=false;e.LastX=0;e.LastY=0;e.touchenabled=0;e.submenuoffset=0;e.touchtimer=null;e.TouchArray={};e.connectmode=0;e.connectioncount=0;e.rotation=0;e.protocol=2;e.debugmode=0;e.firstUpKeys=[];e.stopInput=false;e.localKeyMap=true;e.altPressed=false;e.ctrlPressed=false;e.shiftPressed=false;e.sessionid=0;e.username;e.oldie=false;e.CompressionLevel=50;e.ScalingLevel=1024;e.FrameRateTimer=50;e.FirstDraw=false;e.ScreenWidth=960;e.ScreenHeight=700;e.width=960;e.height=960;e.onScreenSizeChange=null;e.onMessage=null;e.onConnectCountChanged=null;e.onDebugMessage=null;e.onTouchEnabledChanged=null;e.onDisplayinfo=null;e.accumulator=null;var d=["default","progress","crosshair","pointer","help","text","no-drop","move","nesw-resize","ns-resize","nwse-resize","w-resize","alias","wait","none"];e.Start=function(){e.State=0;e.accumulator=null};e.Stop=function(){e.setRotation(0);e.UnGrabKeyInput();e.UnGrabMouseInput();e.touchenabled=0;if(e.onScreenSizeChange!=null){e.onScreenSizeChange(e,e.ScreenWidth,e.ScreenHeight,e.CanvasId)}e.Canvas.clearRect(0,0,e.CanvasId.width,e.CanvasId.height)};e.xxStateChange=function(h){if(e.State==h){return}e.State=h;e.CanvasId.style.cursor="default";switch(h){case 0:e.Stop();break;case 3:break}};e.send=function(h){if(e.debugmode>1){console.log("KSend("+h.length+"): "+rstr2hex(h))}if(e.parent!=null){e.parent.send(h)}};e.ProcessPictureMsg=function(j,l,m){var k=new Image();k.xcount=e.tilesReceived++;var h=e.tilesReceived;k.src="data:image/jpeg;base64,"+btoa(j.substring(4,j.length));k.onload=function(){if(e.Canvas!=null&&e.KillDraw<h&&e.State!=0){e.PendingOperations.push([h,2,k,l,m]);while(e.DoPendingOperations()){}}};k.error=function(){console.log("DecodeTileError")}};e.DoPendingOperations=function(){if(e.PendingOperations.length==0){return false}for(var h=0;h<e.PendingOperations.length;h++){var j=e.PendingOperations[h];if(j[0]==(e.TilesDrawn+1)){if(j[1]==1){e.ProcessCopyRectMsg(j[2])}else{if(j[1]==2){e.Canvas.drawImage(j[2],e.rotX(j[3],j[4]),e.rotY(j[3],j[4]));delete j[2]}}e.PendingOperations.splice(h,1);delete j;e.TilesDrawn++;if(e.TilesDrawn==e.tilesReceived&&e.KillDraw<e.TilesDrawn){e.KillDraw=e.TilesDrawn=e.tilesReceived=0}return true}}if(e.oldie&&e.PendingOperations.length>0){e.TilesDrawn++}return false};e.ProcessCopyRectMsg=function(l){var m=((l.charCodeAt(0)&255)<<8)+(l.charCodeAt(1)&255);var n=((l.charCodeAt(2)&255)<<8)+(l.charCodeAt(3)&255);var h=((l.charCodeAt(4)&255)<<8)+(l.charCodeAt(5)&255);var j=((l.charCodeAt(6)&255)<<8)+(l.charCodeAt(7)&255);var o=((l.charCodeAt(8)&255)<<8)+(l.charCodeAt(9)&255);var k=((l.charCodeAt(10)&255)<<8)+(l.charCodeAt(11)&255);e.Canvas.drawImage(Canvas.canvas,m,n,o,k,h,j,o,k)};e.SendUnPause=function(){e.send(String.fromCharCode(0,8,0,5,0))};e.SendPause=function(){e.send(String.fromCharCode(0,8,0,5,1))};e.SendCompressionLevel=function(l,j,k,h){if(j){e.CompressionLevel=j}if(k){e.ScalingLevel=k}if(h){e.FrameRateTimer=h}e.send(String.fromCharCode(0,5,0,10,l,e.CompressionLevel)+e.shortToStr(e.ScalingLevel)+e.shortToStr(e.FrameRateTimer))};e.SendRefresh=function(){e.send(String.fromCharCode(0,6,0,4))};e.ProcessScreenMsg=function(j,h){if(e.debugmode>0){console.log("ScreenSize: "+j+" x "+h)}e.Canvas.setTransform(1,0,0,1,0,0);e.rotation=0;e.FirstDraw=true;e.ScreenWidth=e.width=j;e.ScreenHeight=e.height=h;e.KillDraw=e.tilesReceived;while(e.PendingOperations.length>0){e.PendingOperations.shift()}e.SendCompressionLevel(1);e.SendUnPause();if(e.onScreenSizeChange!=null){e.onScreenSizeChange(e,e.ScreenWidth,e.ScreenHeight,e.CanvasId)}};e.ProcessData=function(j){var h=0;while(h<j.length){h+=e.ProcessDataEx(j.substring(h))}};e.ProcessDataEx=function(s){if(e.accumulator!=null){s=e.accumulator+s;e.accumulator=null}if(e.debugmode>1){console.log("KRecv("+s.length+"): "+rstr2hex(s.substring(0,Math.min(s.length,40))))}if(s.length<4){return}var h=null,t=0,u=0,k=ReadShort(s,0),j=ReadShort(s,2),q=0;if((k==27)&&(j==8)){if(s.length<12){return}k=ReadShort(s,8);j=ReadInt(s,4);if((j+8)>s.length){e.accumulator=s;return}s=s.substring(8);q=8}if((j!=s.length)&&(e.debugmode>0)){console.log(j,s.length,j==s.length)}if((k>=18)&&(k!=65)&&(k!=88)){console.error("Invalid KVM command "+k+" of size "+j);console.log("Invalid KVM data",s.length,rstr2hex(s.substring(0,40))+"...");return}if(j>s.length){e.accumulator=s;return}if(k==3||k==4||k==7){h=s.substring(4,j);t=((h.charCodeAt(0)&255)<<8)+(h.charCodeAt(1)&255);u=((h.charCodeAt(2)&255)<<8)+(h.charCodeAt(3)&255);if(e.debugmode>0){console.log("CMD"+k+" at X="+t+" Y="+u)}}switch(k){case 3:if(e.FirstDraw){e.onResize()}e.ProcessPictureMsg(h,t,u);break;case 4:if(e.FirstDraw){e.onResize()}if(e.TilesDrawn==e.tilesReceived){e.ProcessCopyRectMsg(h)}else{e.PendingOperations.push([++tilesReceived,1,h])}break;case 7:e.ProcessScreenMsg(t,u);e.SendKeyMsgKC(e.KeyAction.UP,16);e.SendKeyMsgKC(e.KeyAction.UP,17);e.SendKeyMsgKC(e.KeyAction.UP,18);e.SendKeyMsgKC(e.KeyAction.UP,91);e.SendKeyMsgKC(e.KeyAction.UP,92);e.SendKeyMsgKC(e.KeyAction.UP,16);e.send(String.fromCharCode(0,14,0,4));break;case 11:var r=0,o={},m=((s.charCodeAt(4)&255)<<8)+(s.charCodeAt(5)&255);if(m>0){r=((s.charCodeAt(6+(m*2))&255)<<8)+(s.charCodeAt(7+(m*2))&255);for(var p=0;p<m;p++){var n=((s.charCodeAt(6+(p*2))&255)<<8)+(s.charCodeAt(7+(p*2))&255);if(n==65535){o[n]="All Displays"}else{o[n]="Display "+n}}}if(e.onDisplayinfo!=null){e.onDisplayinfo(e,o,r)}break;case 12:break;case 14:e.touchenabled=1;e.TouchArray={};if(e.onTouchEnabledChanged!=null){e.onTouchEnabledChanged(e.touchenabled)}break;case 15:e.TouchArray={};break;case 16:e.connectioncount=ReadInt(s,4);if(e.onConnectCountChanged!=null){e.onConnectCountChanged(e.connectioncount,e)}break;case 17:if(e.onMessage!=null){e.onMessage(s.substring(4,j),e)}break;case 65:s=s.substring(4);if(s[0]!="."){console.log(s);if(e.parent!=null){e.parent.consoleMessage=s;if(e.parent.onConsoleMessageChange){e.parent.onConsoleMessageChange(e.parent,s)}}}else{console.log("KVM: "+s.substring(1))}break;case 88:if(j!=5){break}var l=s.charCodeAt(4);if(l>d.length){l=0}e.CanvasId.style.cursor=d[l];break}return j+q};e.MouseButton={NONE:0,LEFT:2,RIGHT:8,MIDDLE:32};e.KeyAction={NONE:0,DOWN:1,UP:2,SCROLL:3,EXUP:4,EXDOWN:5,DBLCLICK:6};e.InputType={KEY:1,MOUSE:2,CTRLALTDEL:10,TOUCH:15};e.Alternate=0;var c={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 b(h){if(h.code.startsWith("Key")&&h.code.length==4){return h.code.charCodeAt(3)}if(h.code.startsWith("Digit")&&h.code.length==6){return h.code.charCodeAt(5)}if(h.code.startsWith("Numpad")&&h.code.length==7){return h.code.charCodeAt(6)+48}return c[h.code]}e.SendKeyMsg=function(h,j){if(h==null){return}if(!j){j=window.event}if(j.code&&(e.localKeyMap==false)){var k=b(j);if(k!=null){e.SendKeyMsgKC(h,k)}}else{var k=j.keyCode;if(k==59){k=186}else{if(k==173){k=189}else{if(k==61){k=187}}}e.SendKeyMsgKC(h,k)}};e.SendMessage=function(h){if(e.State==3){e.send(String.fromCharCode(0,17)+e.shortToStr(4+h.length)+h)}};e.SendKeyMsgKC=function(h,k){if(e.State!=3){return}if(typeof h=="object"){for(var j in h){e.SendKeyMsgKC(h[j][0],h[j][1])}}else{e.send(String.fromCharCode(0,e.InputType.KEY,0,6,(h-1),k))}};e.sendcad=function(){e.SendCtrlAltDelMsg()};e.SendCtrlAltDelMsg=function(){if(e.State==3){e.send(String.fromCharCode(0,e.InputType.CTRLALTDEL,0,4))}};e.SendEscKey=function(){if(e.State==3){e.send(String.fromCharCode(0,e.InputType.KEY,0,6,0,27,0,e.InputType.KEY,0,6,1,27))}};e.SendStartMsg=function(){e.SendKeyMsgKC(e.KeyAction.EXDOWN,91);e.SendKeyMsgKC(e.KeyAction.EXUP,91)};e.SendCharmsMsg=function(){e.SendKeyMsgKC(e.KeyAction.EXDOWN,91);e.SendKeyMsgKC(e.KeyAction.DOWN,67);e.SendKeyMsgKC(e.KeyAction.UP,67);e.SendKeyMsgKC(e.KeyAction.EXUP,91)};e.SendTouchMsg1=function(j,h,k,l){if(e.State==3){e.send(String.fromCharCode(0,e.InputType.TOUCH)+e.shortToStr(14)+String.fromCharCode(1,j)+e.intToStr(h)+e.shortToStr(k)+e.shortToStr(l))}};e.SendTouchMsg2=function(l,h){var n="";var j;var o="TOUCHSEND: ";for(var m in e.TouchArray){if(m==l){j=h}else{if(e.TouchArray[m].f==1){j=65536|2|4;e.TouchArray[m].f=3;o+="START"+m}else{if(e.TouchArray[m].f==2){j=262144;o+="STOP"+m}else{j=2|4|131072}}}n+=String.fromCharCode(m)+e.intToStr(j)+e.shortToStr(e.TouchArray[m].x)+e.shortToStr(e.TouchArray[m].y);if(e.TouchArray[m].f==2){delete e.TouchArray[m]}}if(e.State==3){e.send(String.fromCharCode(0,e.InputType.TOUCH)+e.shortToStr(5+n.length)+String.fromCharCode(2)+n)}if(Object.keys(e.TouchArray).length==0&&e.touchtimer!=null){clearInterval(e.touchtimer);e.touchtimer=null}};e.SendMouseMsg=function(h,l){if(e.State!=3){return}if(h!=null&&e.Canvas!=null){if(!l){var l=window.event}var o=(e.Canvas.canvas.height/e.CanvasId.clientHeight);var p=(e.Canvas.canvas.width/e.CanvasId.clientWidth);var n=e.GetPositionOfControl(e.Canvas.canvas);var q=((l.pageX-n[0])*p);var r=((l.pageY-n[1])*o);if(l.addx){q+=l.addx}if(l.addy){r+=l.addy}if(q>=0&&q<=e.Canvas.canvas.width&&r>=0&&r<=e.Canvas.canvas.height){var j=0;var k=0;if(h==e.KeyAction.UP||h==e.KeyAction.DOWN){if(l.which){((l.which==1)?(j=e.MouseButton.LEFT):((l.which==2)?(j=e.MouseButton.MIDDLE):(j=e.MouseButton.RIGHT)))}else{if(l.button){((l.button==0)?(j=e.MouseButton.LEFT):((l.button==1)?(j=e.MouseButton.MIDDLE):(j=e.MouseButton.RIGHT)))}}}else{if(h==e.KeyAction.SCROLL){if(l.detail){k=(-1*(l.detail*120))}else{if(l.wheelDelta){k=(l.wheelDelta*3)}}}}var m="";if(h==e.KeyAction.DBLCLICK){m=String.fromCharCode(0,e.InputType.MOUSE,0,10,0,136,((q/256)&255),(q&255),((r/256)&255),(r&255))}else{if(h==e.KeyAction.SCROLL){m=String.fromCharCode(0,e.InputType.MOUSE,0,12,0,0,((q/256)&255),(q&255),((r/256)&255),(r&255),((k/256)&255),(k&255))}else{m=String.fromCharCode(0,e.InputType.MOUSE,0,10,0,((h==e.KeyAction.DOWN)?j:((j*2)&255)),((q/256)&255),(q&255),((r/256)&255),(r&255))}}if(e.Action==e.KeyAction.NONE){if(e.Alternate==0||e.ipad){e.send(m);e.Alternate=1}else{e.Alternate=0}}else{e.send(m)}}}};e.GetDisplayNumbers=function(){e.send(String.fromCharCode(0,11,0,4))};e.SetDisplay=function(h){console.log("Set display",h);e.send(String.fromCharCode(0,12,0,6,h>>8,h&255))};e.intToStr=function(h){return String.fromCharCode((h>>24)&255,(h>>16)&255,(h>>8)&255,h&255)};e.shortToStr=function(h){return String.fromCharCode((h>>8)&255,h&255)};e.onResize=function(){if(e.ScreenWidth==0||e.ScreenHeight==0){return}if(e.Canvas.canvas.width==e.ScreenWidth&&e.Canvas.canvas.height==e.ScreenHeight){return}if(e.FirstDraw){e.Canvas.canvas.width=e.ScreenWidth;e.Canvas.canvas.height=e.ScreenHeight;e.Canvas.fillRect(0,0,e.ScreenWidth,e.ScreenHeight);if(e.onScreenSizeChange!=null){e.onScreenSizeChange(e,e.ScreenWidth,e.ScreenHeight,e.CanvasId)}}e.FirstDraw=false};e.xxMouseInputGrab=false;e.xxKeyInputGrab=false;e.xxMouseMove=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.NONE,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxMouseUp=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.UP,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxMouseDown=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.DOWN,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxMouseDblClick=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.DBLCLICK,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxDOMMouseScroll=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.SCROLL,h);return false}return true};e.xxMouseWheel=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.SCROLL,h);return false}return true};e.xxKeyUp=function(h){if(e.State==3){e.SendKeyMsg(e.KeyAction.UP,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxKeyDown=function(h){if(e.State==3){e.SendKeyMsg(e.KeyAction.DOWN,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxKeyPress=function(h){if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.handleKeys=function(h){if(e.stopInput==true||desktop.State!=3){return false}return e.xxKeyPress(h)};e.handleKeyUp=function(h){if(e.stopInput==true||desktop.State!=3){return false}if(e.firstUpKeys.length<5){e.firstUpKeys.push(h.keyCode);if((e.firstUpKeys.length==5)){var k=e.firstUpKeys.join(",");if((k=="16,17,91,91,16")||(k=="16,17,18,91,92")){e.stopInput=true}}}if(h.keyCode==16){e.shiftPressed=false}if(h.keyCode==17){e.ctrlPressed=false}if(h.keyCode==18){e.altPressed=false}return e.xxKeyUp(h)};e.handleKeyDown=function(h){if(e.stopInput==true||desktop.State!=3){return false}if(h.keyCode==16){e.shiftPressed=true}if(h.keyCode==17){e.ctrlPressed=true}if(h.keyCode==18){e.altPressed=true}return e.xxKeyDown(h)};e.handleReleaseKeys=function(){if(e.shiftPressed){e.SendKeyMsgKC(e.KeyAction.UP,16)}if(e.ctrlPressed){e.SendKeyMsgKC(e.KeyAction.UP,17)}if(e.altPressed){e.SendKeyMsgKC(e.KeyAction.UP,18)}e.shiftPressed=e.ctrlPressed=e.altPressed=false};e.mousedblclick=function(h){if(e.stopInput==true){return false}return e.xxMouseDblClick(h)};e.mousedown=function(h){if(e.stopInput==true){return false}return e.xxMouseDown(h)};e.mouseup=function(h){if(e.stopInput==true){return false}return e.xxMouseUp(h)};e.mousemove=function(h){if(e.stopInput==true){return false}return e.xxMouseMove(h)};e.mousewheel=function(h){if(e.stopInput==true){return false}return e.xxMouseWheel(h)};e.xxMsTouchEvent=function(h){if(h.originalEvent.pointerType==4){return}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}if(h.type=="MSPointerDown"||h.type=="MSPointerMove"||h.type=="MSPointerUp"){var j=0;var k=h.originalEvent.pointerId%256;var l=h.offsetX*(Canvas.canvas.width/e.CanvasId.clientWidth);var m=h.offsetY*(Canvas.canvas.height/e.CanvasId.clientHeight);if(h.type=="MSPointerDown"){j=65536|2|4}else{if(h.type=="MSPointerMove"){j=131072|2|4}else{if(h.type=="MSPointerUp"){j=262144}}}if(!e.TouchArray[k]){e.TouchArray[k]={x:l,y:m}}e.SendTouchMsg2(k,j);if(h.type=="MSPointerUp"){delete e.TouchArray[k]}}else{alert(h.type)}return true};e.xxTouchStart=function(h){if(e.State!=3){return}if(h.preventDefault){h.preventDefault()}if(e.touchenabled==0||e.touchenabled==1){if(h.originalEvent.touches.length>1){return}var m=h.originalEvent.touches[0];h.which=1;e.LastX=h.pageX=m.pageX;e.LastY=h.pageY=m.pageY;e.SendMouseMsg(KeyAction.DOWN,h)}else{var l=e.GetPositionOfControl(Canvas.canvas);for(var j in h.originalEvent.changedTouches){if(!h.originalEvent.changedTouches[j].identifier){continue}var k=h.originalEvent.changedTouches[j].identifier%256;if(!e.TouchArray[k]){e.TouchArray[k]={x:(h.originalEvent.touches[j].pageX-l[0])*(Canvas.canvas.width/e.CanvasId.clientWidth),y:(h.originalEvent.touches[j].pageY-l[1])*(Canvas.canvas.height/e.CanvasId.clientHeight),f:1}}}if(Object.keys(e.TouchArray).length>0&&touchtimer==null){e.touchtimer=setInterval(function(){e.SendTouchMsg2(256,0)},50)}}};e.xxTouchMove=function(h){if(e.State!=3){return}if(h.preventDefault){h.preventDefault()}if(e.touchenabled==0||e.touchenabled==1){if(h.originalEvent.touches.length>1){return}var m=h.originalEvent.touches[0];h.which=1;e.LastX=h.pageX=m.pageX;e.LastY=h.pageY=m.pageY;e.SendMouseMsg(e.KeyAction.NONE,h)}else{var l=e.GetPositionOfControl(Canvas.canvas);for(var j in h.originalEvent.changedTouches){if(!h.originalEvent.changedTouches[j].identifier){continue}var k=h.originalEvent.changedTouches[j].identifier%256;if(e.TouchArray[k]){e.TouchArray[k].x=(h.originalEvent.touches[j].pageX-l[0])*(e.Canvas.canvas.width/e.CanvasId.clientWidth);e.TouchArray[k].y=(h.originalEvent.touches[j].pageY-l[1])*(e.Canvas.canvas.height/e.CanvasId.clientHeight)}}}};e.xxTouchEnd=function(h){if(e.State!=3){return}if(h.preventDefault){h.preventDefault()}if(e.touchenabled==0||e.touchenabled==1){if(h.originalEvent.touches.length>1){return}h.which=1;h.pageX=LastX;h.pageY=LastY;e.SendMouseMsg(KeyAction.UP,h)}else{for(var j in h.originalEvent.changedTouches){if(!h.originalEvent.changedTouches[j].identifier){continue}var k=h.originalEvent.changedTouches[j].identifier%256;if(e.TouchArray[k]){e.TouchArray[k].f=2}}}};e.GrabMouseInput=function(){if(e.xxMouseInputGrab==true){return}var h=e.CanvasId;h.onmousemove=e.xxMouseMove;h.onmouseup=e.xxMouseUp;h.onmousedown=e.xxMouseDown;h.touchstart=e.xxTouchStart;h.touchmove=e.xxTouchMove;h.touchend=e.xxTouchEnd;h.MSPointerDown=e.xxMsTouchEvent;h.MSPointerMove=e.xxMsTouchEvent;h.MSPointerUp=e.xxMsTouchEvent;if(navigator.userAgent.match(/mozilla/i)){h.DOMMouseScroll=e.xxDOMMouseScroll}else{h.onmousewheel=e.xxMouseWheel}e.xxMouseInputGrab=true};e.UnGrabMouseInput=function(){if(e.xxMouseInputGrab==false){return}var h=e.CanvasId;h.onmousemove=null;h.onmouseup=null;h.onmousedown=null;h.touchstart=null;h.touchmove=null;h.touchend=null;h.MSPointerDown=null;h.MSPointerMove=null;h.MSPointerUp=null;if(navigator.userAgent.match(/mozilla/i)){h.DOMMouseScroll=null}else{h.onmousewheel=null}e.xxMouseInputGrab=false};e.GrabKeyInput=function(){if(e.xxKeyInputGrab==true){return}document.onkeyup=e.xxKeyUp;document.onkeydown=e.xxKeyDown;document.onkeypress=e.xxKeyPress;e.xxKeyInputGrab=true};e.UnGrabKeyInput=function(){if(e.xxKeyInputGrab==false){return}document.onkeyup=null;document.onkeydown=null;document.onkeypress=null;e.xxKeyInputGrab=false};e.GetPositionOfControl=function(h){var j=Array(2);j[0]=j[1]=0;while(h){j[0]+=h.offsetLeft;j[1]+=h.offsetTop;h=h.offsetParent}return j};e.crotX=function(h,j){if(e.rotation==0){return h}if(e.rotation==1){return j}if(e.rotation==2){return e.Canvas.canvas.width-h}if(e.rotation==3){return e.Canvas.canvas.height-j}};e.crotY=function(h,j){if(e.rotation==0){return j}if(e.rotation==1){return e.Canvas.canvas.width-h}if(e.rotation==2){return e.Canvas.canvas.height-j}if(e.rotation==3){return h}};e.rotX=function(h,j){if(e.rotation==0||e.rotation==1){return h}if(e.rotation==2){return h-e.Canvas.canvas.width}if(e.rotation==3){return h-e.Canvas.canvas.height}};e.rotY=function(h,j){if(e.rotation==0||e.rotation==3){return j}if(e.rotation==1){return j-e.Canvas.canvas.width}if(e.rotation==2){return j-e.Canvas.canvas.height}};e.tcanvas=null;e.setRotation=function(m){while(m<0){m+=4}var h=m%4;if(h==e.rotation){return true}var k=e.Canvas.canvas.width;var j=e.Canvas.canvas.height;if(e.rotation==1||e.rotation==3){k=e.Canvas.canvas.height;j=e.Canvas.canvas.width}if(e.tcanvas==null){e.tcanvas=document.createElement("canvas")}var l=e.tcanvas.getContext("2d");l.setTransform(1,0,0,1,0,0);l.canvas.width=k;l.canvas.height=j;l.rotate((e.rotation*-90)*Math.PI/180);if(e.rotation==0){l.drawImage(e.Canvas.canvas,0,0)}if(e.rotation==1){l.drawImage(e.Canvas.canvas,-e.Canvas.canvas.width,0)}if(e.rotation==2){l.drawImage(e.Canvas.canvas,-e.Canvas.canvas.width,-e.Canvas.canvas.height)}if(e.rotation==3){l.drawImage(e.Canvas.canvas,0,-e.Canvas.canvas.height)}if(e.rotation==0||e.rotation==2){e.Canvas.canvas.height=k;e.Canvas.canvas.width=j}if(e.rotation==1||e.rotation==3){e.Canvas.canvas.height=j;e.Canvas.canvas.width=k}e.Canvas.setTransform(1,0,0,1,0,0);e.Canvas.rotate((h*90)*Math.PI/180);e.rotation=h;e.Canvas.drawImage(e.tcanvas,e.rotX(0,0),e.rotY(0,0));e.ScreenWidth=e.Canvas.canvas.width;e.ScreenHeight=e.Canvas.canvas.height;if(e.onScreenSizeChange!=null){e.onScreenSizeChange(e,e.ScreenWidth,e.ScreenHeight,e.CanvasId)}return true};e.MuchTheSame=function(h,j){return(Math.abs(h-j)<4)};e.Debug=function(h){console.log(h)};e.getIEVersion=function(){var h=-1;if(navigator.appName=="Microsoft Internet Explorer"){var k=navigator.userAgent;var j=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");if(j.exec(k)!=null){h=parseFloat(RegExp.$1)}}return h};e.haltEvent=function(h){if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};return e};var QRCode;!function(){function t(c){this.mode=v.MODE_8BIT_BYTE,this.data=c,this.parsedData=[];for(var g=[],h=0,j=this.data.length;j>h;h++){var k=this.data.charCodeAt(h);k>65536?(g[0]=240|(1835008&k)>>>18,g[1]=128|(258048&k)>>>12,g[2]=128|(4032&k)>>>6,g[3]=128|63&k):k>2048?(g[0]=224|(61440&k)>>>12,g[1]=128|(4032&k)>>>6,g[2]=128|63&k):k>128?(g[0]=192|(1984&k)>>>6,g[1]=128|63&k):g[0]=k,this.parsedData=this.parsedData.concat(g)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function u(c,d){this.typeNumber=c,this.errorCorrectLevel=d,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function B(e,g){if(void 0==e.length){throw new Error(e.length+"/"+g)}for(var h=0;h<e.length&&0==e[h];){h++}this.num=new Array(e.length-h+g);for(var j=0;j<e.length-h;j++){this.num[j]=e[j+h]}}function C(c,d){this.totalCount=c,this.dataCount=d}function D(){this.buffer=[],this.length=0}function F(){return"undefined"!=typeof CanvasRenderingContext2D}function G(){var c=!1,d=navigator.userAgent;return/android/i.test(d)&&(c=!0,aMat=d.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(c=parseFloat(aMat[1]))),c}function K(d,j){for(var k=1,l=L(d),m=0,n=E.length;n>=m;m++){var o=0;switch(j){case w.L:o=E[m][0];break;case w.M:o=E[m][1];break;case w.Q:o=E[m][2];break;case w.H:o=E[m][3]}if(o>=l){break}k++}if(k>E.length){throw new Error("Too long data")}return k}function L(c){var d=encodeURI(c).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return d.length+(d.length!=c?3:0)}t.prototype={getLength:function(){return this.parsedData.length},write:function(d){for(var e=0,g=this.parsedData.length;g>e;e++){d.put(this.parsedData[e],8)}}},u.prototype={addData:function(a){var d=new t(a);this.dataList.push(d),this.dataCache=null},isDark:function(c,d){if(0>c||this.moduleCount<=c||0>d||this.moduleCount<=d){throw new Error(c+","+d)}return this.modules[c][d]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(b,g){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var h=0;h<this.moduleCount;h++){this.modules[h]=new Array(this.moduleCount);for(var j=0;j<this.moduleCount;j++){this.modules[h][j]=null}}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(b,g),this.typeNumber>=7&&this.setupTypeNumber(b),null==this.dataCache&&(this.dataCache=u.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,g)},setupPositionProbePattern:function(e,g){for(var h=-1;7>=h;h++){if(!(-1>=e+h||this.moduleCount<=e+h)){for(var j=-1;7>=j;j++){-1>=g+j||this.moduleCount<=g+j||(this.modules[e+h][g+j]=h>=0&&6>=h&&(0==j||6==j)||j>=0&&6>=j&&(0==h||6==h)||h>=2&&4>=h&&j>=2&&4>=j?!0:!1)}}}},getBestMaskPattern:function(){for(var e=0,g=0,h=0;8>h;h++){this.makeImpl(!0,h);var j=y.getLostPoint(this);(0==h||e>j)&&(e=j,g=h)}return g},createMovieClip:function(k,l,m){var n=k.createEmptyMovieClip(l,m),o=1;this.make();for(var p=0;p<this.modules.length;p++){for(var q=p*o,r=0;r<this.modules[p].length;r++){var s=r*o,M=this.modules[p][r];M&&(n.beginFill(0,100),n.moveTo(s,q),n.lineTo(s+o,q),n.lineTo(s+o,q+o),n.lineTo(s,q+o),n.endFill())}}return n},setupTimingPattern:function(){for(var c=8;c<this.moduleCount-8;c++){null==this.modules[c][6]&&(this.modules[c][6]=0==c%2)}for(var d=8;d<this.moduleCount-8;d++){null==this.modules[6][d]&&(this.modules[6][d]=0==d%2)}},setupPositionAdjustPattern:function(){for(var j=y.getPatternPosition(this.typeNumber),k=0;k<j.length;k++){for(var l=0;l<j.length;l++){var m=j[k],n=j[l];if(null==this.modules[m][n]){for(var o=-2;2>=o;o++){for(var p=-2;2>=p;p++){this.modules[m+o][n+p]=-2==o||2==o||-2==p||2==p||0==o&&0==p?!0:!1}}}}}},setupTypeNumber:function(e){for(var g=y.getBCHTypeNumber(this.typeNumber),h=0;18>h;h++){var j=!e&&1==(1&g>>h);this.modules[Math.floor(h/3)][h%3+this.moduleCount-8-3]=j}for(var h=0;18>h;h++){var j=!e&&1==(1&g>>h);this.modules[h%3+this.moduleCount-8-3][Math.floor(h/3)]=j}},setupTypeInfo:function(h,j){for(var k=this.errorCorrectLevel<<3|j,l=y.getBCHTypeInfo(k),m=0;15>m;m++){var n=!h&&1==(1&l>>m);6>m?this.modules[m][8]=n:8>m?this.modules[m+1][8]=n:this.modules[this.moduleCount-15+m][8]=n}for(var m=0;15>m;m++){var n=!h&&1==(1&l>>m);8>m?this.modules[8][this.moduleCount-m-1]=n:9>m?this.modules[8][15-m-1+1]=n:this.modules[8][15-m-1]=n}this.modules[this.moduleCount-8][8]=!h},mapData:function(l,m){for(var n=-1,o=this.moduleCount-1,p=7,q=0,r=this.moduleCount-1;r>0;r-=2){for(6==r&&r--;;){for(var s=0;2>s;s++){if(null==this.modules[o][r-s]){var M=!1;q<l.length&&(M=1==(1&l[q]>>>p));var N=y.getMask(m,o,r-s);N&&(M=!M),this.modules[o][r-s]=M,p--,-1==p&&(q++,p=7)}}if(o+=n,0>o||this.moduleCount<=o){o-=n,n=-n;break}}}}},u.PAD0=236,u.PAD1=17,u.createData=function(b,j,k){for(var m=C.getRSBlocks(b,j),n=new D,o=0;o<k.length;o++){var p=k[o];n.put(p.mode,4),n.put(p.getLength(),y.getLengthInBits(p.mode,b)),p.write(n)}for(var q=0,o=0;o<m.length;o++){q+=m[o].dataCount}if(n.getLengthInBits()>8*q){throw new Error("code length overflow. ("+n.getLengthInBits()+">"+8*q+")")}for(n.getLengthInBits()+4<=8*q&&n.put(0,4);0!=n.getLengthInBits()%8;){n.putBit(!1)}for(;;){if(n.getLengthInBits()>=8*q){break}if(n.put(u.PAD0,8),n.getLengthInBits()>=8*q){break}n.put(u.PAD1,8)}return u.createBytes(n,m)},u.createBytes=function(M,N){for(var O=0,P=0,R=0,S=new Array(N.length),T=new Array(N.length),U=0;U<N.length;U++){var V=N[U].dataCount,W=N[U].totalCount-V;P=Math.max(P,V),R=Math.max(R,W),S[U]=new Array(V);for(var X=0;X<S[U].length;X++){S[U][X]=255&M.buffer[X+O]}O+=V;var Y=y.getErrorCorrectPolynomial(W),Z=new B(S[U],Y.getLength()-1),aa=Z.mod(Y);T[U]=new Array(Y.getLength()-1);for(var X=0;X<T[U].length;X++){var ab=X+aa.getLength()-T[U].length;T[U][X]=ab>=0?aa.get(ab):0}}for(var ac=0,X=0;X<N.length;X++){ac+=N[X].totalCount}for(var ad=new Array(ac),ae=0,X=0;P>X;X++){for(var U=0;U<N.length;U++){X<S[U].length&&(ad[ae++]=S[U][X])}}for(var X=0;R>X;X++){for(var U=0;U<N.length;U++){X<T[U].length&&(ad[ae++]=T[U][X])}}return ad};for(var v={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},w={L:1,M:0,Q:3,H:2},x={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},y={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(c){for(var d=c<<10;y.getBCHDigit(d)-y.getBCHDigit(y.G15)>=0;){d^=y.G15<<y.getBCHDigit(d)-y.getBCHDigit(y.G15)}return(c<<10|d)^y.G15_MASK},getBCHTypeNumber:function(c){for(var d=c<<12;y.getBCHDigit(d)-y.getBCHDigit(y.G18)>=0;){d^=y.G18<<y.getBCHDigit(d)-y.getBCHDigit(y.G18)}return c<<12|d},getBCHDigit:function(c){for(var d=0;0!=c;){d++,c>>>=1}return d},getPatternPosition:function(b){return y.PATTERN_POSITION_TABLE[b-1]},getMask:function(d,e,g){switch(d){case x.PATTERN000:return 0==(e+g)%2;case x.PATTERN001:return 0==e%2;case x.PATTERN010:return 0==g%3;case x.PATTERN011:return 0==(e+g)%3;case x.PATTERN100:return 0==(Math.floor(e/2)+Math.floor(g/3))%2;case x.PATTERN101:return 0==e*g%2+e*g%3;case x.PATTERN110:return 0==(e*g%2+e*g%3)%2;case x.PATTERN111:return 0==(e*g%3+(e+g)%2)%2;default:throw new Error("bad maskPattern:"+d)}},getErrorCorrectPolynomial:function(d){for(var e=new B([1],0),g=0;d>g;g++){e=e.multiply(new B([1,z.gexp(g)],0))}return e},getLengthInBits:function(c,d){if(d>=1&&10>d){switch(c){case v.MODE_NUMBER:return 10;case v.MODE_ALPHA_NUM:return 9;case v.MODE_8BIT_BYTE:return 8;case v.MODE_KANJI:return 8;default:throw new Error("mode:"+c)}}else{if(27>d){switch(c){case v.MODE_NUMBER:return 12;case v.MODE_ALPHA_NUM:return 11;case v.MODE_8BIT_BYTE:return 16;case v.MODE_KANJI:return 10;default:throw new Error("mode:"+c)}}else{if(!(41>d)){throw new Error("type:"+d)}switch(c){case v.MODE_NUMBER:return 14;case v.MODE_ALPHA_NUM:return 13;case v.MODE_8BIT_BYTE:return 16;case v.MODE_KANJI:return 12;default:throw new Error("mode:"+c)}}}},getLostPoint:function(m){for(var n=m.getModuleCount(),o=0,p=0;n>p;p++){for(var q=0;n>q;q++){for(var r=0,s=m.isDark(p,q),M=-1;1>=M;M++){if(!(0>p+M||p+M>=n)){for(var N=-1;1>=N;N++){0>q+N||q+N>=n||(0!=M||0!=N)&&s==m.isDark(p+M,q+N)&&r++}}}r>5&&(o+=3+r-5)}}for(var p=0;n-1>p;p++){for(var q=0;n-1>q;q++){var O=0;m.isDark(p,q)&&O++,m.isDark(p+1,q)&&O++,m.isDark(p,q+1)&&O++,m.isDark(p+1,q+1)&&O++,(0==O||4==O)&&(o+=3)}}for(var p=0;n>p;p++){for(var q=0;n-6>q;q++){m.isDark(p,q)&&!m.isDark(p,q+1)&&m.isDark(p,q+2)&&m.isDark(p,q+3)&&m.isDark(p,q+4)&&!m.isDark(p,q+5)&&m.isDark(p,q+6)&&(o+=40)}}for(var q=0;n>q;q++){for(var p=0;n-6>p;p++){m.isDark(p,q)&&!m.isDark(p+1,q)&&m.isDark(p+2,q)&&m.isDark(p+3,q)&&m.isDark(p+4,q)&&!m.isDark(p+5,q)&&m.isDark(p+6,q)&&(o+=40)}}for(var P=0,q=0;n>q;q++){for(var p=0;n>p;p++){m.isDark(p,q)&&P++}}var R=Math.abs(100*P/n/n-50)/5;return o+=10*R}},z={glog:function(b){if(1>b){throw new Error("glog("+b+")")}return z.LOG_TABLE[b]},gexp:function(b){for(;0>b;){b+=255}for(;b>=256;){b-=255}return z.EXP_TABLE[b]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},A=0;8>A;A++){z.EXP_TABLE[A]=1<<A}for(var A=8;256>A;A++){z.EXP_TABLE[A]=z.EXP_TABLE[A-4]^z.EXP_TABLE[A-5]^z.EXP_TABLE[A-6]^z.EXP_TABLE[A-8]}for(var A=0;255>A;A++){z.LOG_TABLE[z.EXP_TABLE[A]]=A}B.prototype={get:function(b){return this.num[b]},getLength:function(){return this.num.length},multiply:function(e){for(var g=new Array(this.getLength()+e.getLength()-1),h=0;h<this.getLength();h++){for(var j=0;j<e.getLength();j++){g[h+j]^=z.gexp(z.glog(this.get(h))+z.glog(e.get(j)))}}return new B(g,0)},mod:function(e){if(this.getLength()-e.getLength()<0){return this}for(var g=z.glog(this.get(0))-z.glog(e.get(0)),h=new Array(this.getLength()),j=0;j<this.getLength();j++){h[j]=this.get(j)}for(var j=0;j<e.getLength();j++){h[j]^=z.gexp(z.glog(e.get(j))+g)}return new B(h,0).mod(e)}},C.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],C.getRSBlocks=function(j,l){var m=C.getRsBlockTable(j,l);if(void 0==m){throw new Error("bad rs block @ typeNumber:"+j+"/errorCorrectLevel:"+l)}for(var n=m.length/3,o=[],p=0;n>p;p++){for(var q=m[3*p+0],r=m[3*p+1],s=m[3*p+2],M=0;q>M;M++){o.push(new C(r,s))}}return o},C.getRsBlockTable=function(c,d){switch(d){case w.L:return C.RS_BLOCK_TABLE[4*(c-1)+0];case w.M:return C.RS_BLOCK_TABLE[4*(c-1)+1];case w.Q:return C.RS_BLOCK_TABLE[4*(c-1)+2];case w.H:return C.RS_BLOCK_TABLE[4*(c-1)+3];default:return void 0}},D.prototype={get:function(c){var d=Math.floor(c/8);return 1==(1&this.buffer[d]>>>7-c%8)},put:function(d,e){for(var g=0;e>g;g++){this.putBit(1==(1&d>>>e-g-1))}},getLengthInBits:function(){return this.length},putBit:function(c){var d=Math.floor(this.length/8);this.buffer.length<=d&&this.buffer.push(0),c&&(this.buffer[d]|=128>>>this.length%8),this.length++}};var E=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],H=function(){var b=function(c,d){this._el=c,this._htOption=d};return b.prototype.draw=function(e){function o(g,h){var j=document.createElementNS("http://www.w3.org/2000/svg",g);for(var k in h){h.hasOwnProperty(k)&&j.setAttribute(k,h[k])}return j}var l=this._htOption,m=this._el,n=e.getModuleCount();Math.floor(l.width/n),Math.floor(l.height/n),this.clear();var p=o("svg",{viewBox:"0 0 "+String(n)+" "+String(n),width:"100%",height:"100%",fill:l.colorLight});p.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),m.appendChild(p),p.appendChild(o("rect",{fill:l.colorDark,width:"1",height:"1",id:"template"}));for(var q=0;n>q;q++){for(var r=0;n>r;r++){if(e.isDark(q,r)){var s=o("use",{x:String(q),y:String(r)});s.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),p.appendChild(s)}}}},b.prototype.clear=function(){for(;this._el.hasChildNodes();){this._el.removeChild(this._el.lastChild)}},b}(),I="svg"===document.documentElement.tagName.toLowerCase(),J=I?H:F()?function(){function g(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function k(m,n){var o=this;if(o._fFail=n,o._fSuccess=m,null===o._bSupportDataURI){var p=document.createElement("img"),q=function(){o._bSupportDataURI=!1,o._fFail&&_fFail.call(o)},r=function(){o._bSupportDataURI=!0,o._fSuccess&&o._fSuccess.call(o)};return p.onabort=q,p.onerror=q,p.onload=r,p.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}o._bSupportDataURI===!0&&o._fSuccess?o._fSuccess.call(o):o._bSupportDataURI===!1&&o._fFail&&o._fFail.call(o)}if(this._android&&this._android<=2.1){var h=1/window.devicePixelRatio,j=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(b,c,m,n,o,p,q,r){if("nodeName" in b&&/img/i.test(b.nodeName)){for(var s=arguments.length-1;s>=1;s--){arguments[s]=arguments[s]*h}}else{"undefined"==typeof r&&(arguments[1]*=h,arguments[2]*=h,arguments[3]*=h,arguments[4]*=h)}j.apply(this,arguments)}}var l=function(c,d){this._bIsPainted=!1,this._android=G(),this._htOption=d,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=d.width,this._elCanvas.height=d.height,c.appendChild(this._elCanvas),this._el=c,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return l.prototype.draw=function(o){var p=this._elImage,q=this._oContext,r=this._htOption,s=o.getModuleCount(),M=r.width/s,N=r.height/s,O=Math.round(M),P=Math.round(N);p.style.display="none",this.clear();for(var R=0;s>R;R++){for(var S=0;s>S;S++){var T=o.isDark(R,S),U=S*M,V=R*N;q.strokeStyle=T?r.colorDark:r.colorLight,q.lineWidth=1,q.fillStyle=T?r.colorDark:r.colorLight,q.fillRect(U,V,M,N),q.strokeRect(Math.floor(U)+0.5,Math.floor(V)+0.5,O,P),q.strokeRect(Math.ceil(U)-0.5,Math.ceil(V)-0.5,O,P)}}this._bIsPainted=!0},l.prototype.makeImage=function(){this._bIsPainted&&k.call(this,g)},l.prototype.isPainted=function(){return this._bIsPainted},l.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},l.prototype.round=function(b){return b?Math.floor(1000*b)/1000:b},l}():function(){var b=function(c,d){this._el=c,this._htOption=d};return b.prototype.draw=function(m){for(var n=this._htOption,o=this._el,p=m.getModuleCount(),q=Math.floor(n.width/p),r=Math.floor(n.height/p),s=['<table style="border:0;border-collapse:collapse;">'],M=0;p>M;M++){s.push("<tr>");for(var N=0;p>N;N++){s.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:'+q+"px;height:"+r+"px;background-color:"+(m.isDark(M,N)?n.colorDark:n.colorLight)+';"></td>')}s.push("</tr>")}s.push("</table>"),o.innerHTML=s.join("");var O=o.childNodes[0],P=(n.width-O.offsetWidth)/2,R=(n.height-O.offsetHeight)/2;P>0&&R>0&&(O.style.margin=R+"px "+P+"px")},b.prototype.clear=function(){this._el.innerHTML=""},b}();QRCode=function(d,e){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:w.H},"string"==typeof e&&(e={text:e}),e){for(var g in e){this._htOption[g]=e[g]}}"string"==typeof d&&(d=document.getElementById(d)),this._android=G(),this._el=d,this._oQRCode=null,this._oDrawing=new J(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(b){this._oQRCode=new u(K(b,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(b),this._oQRCode.make(),this._el.title=b,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=w}();"use strict";var webState="{{{webstate}}}";if(webState!=""){webState=JSON.parse(decodeURIComponent(webState))}for(var i in webState){localStorage.setItem(i,webState[i])}if(!webState.loctag){delete localStorage.removeItem("loctag")}var args;var autoReconnect=true;var powerStatetable=["","Powered","Sleep","Sleep","Sleep","Hibernating","Power off","Present"];var StatusStrs=["Disconnected","Connecting...","Setup...","Connected","Intel® AMT Connected"];var sort=0;var searchFocus=0;var mapSearchFocus=0;var userSearchFocus=0;var consoleFocus=0;var showRealNames=false;var meshserver=null;var meshes={};var meshcount=0;var nodes=null;var filetree={};var userinfo=null;var serverinfo=null;var events=[];var users=null;var wssessions=null;var nodeShortIdent=0;var desktop;var desktopsettings={encoding:2,showfocus:false,showmouse:true,showcad:true,quality:40,scaling:1024,framerate:50,localkeymap:false};var multidesktopsettings={quality:20,scaling:128,framerate:1000};var terminal;var files;var debugLevel=parseInt("{{{debuglevel}}}");var features=parseInt("{{{features}}}");var sessionTime=parseInt("{{{sessiontime}}}");var domain="{{{domain}}}";var domainUrl="{{{domainurl}}}";var authCookie="{{{authCookie}}}";var authCookieRenewTimer=null;var multiDesktop={};var multiDesktopFilter=null;var serverPublicNamePort="{{{serverDnsName}}}:{{{serverPublicPort}}}";var amtScanResults=null;var debugmode=0;var clickOnce=(((features&256)!=0)&&detectClickOnce());var attemptWebRTC=((features&128)!=0);var passRequirements="{{{passRequirements}}}";if(passRequirements!=""){passRequirements=JSON.parse(decodeURIComponent(passRequirements))}var deskAspectRatio=0;try{deskAspectRatio=parseInt(getstore("deskAspectRatio","0"))}catch(ex){}var uiMode=parseInt(getstore("uiMode",1));var webPageStackMenu=false;var webPageFullScreen=true;var nightMode=(getstore("_nightMode","0")=="1");var sessionActivity=Date.now();var updateSessionTimer=null;var p11DeskConsoleMsgTimer=null;var p12TermConsoleMsgTimer=null;var p13FilesConsoleMsgTimer=null;function startup(){if((features&32)==0){var h=null;try{h=top.location.toString().toLowerCase()}catch(b){}if(top!=self&&(h==null||top.active==false)){top.location=self.location;return}}args=parseUriArgs();if(!args.locale){var l=getstore("loctag",0);if((l!=null)&&(l!="*")){args.locale=l}}debugmode=args.debug;if(args.webrtc!=null){attemptWebRTC=(args.webrtc==1)}QV("p13AutoConnect",debugmode);QV("autoconnectbutton2",debugmode);QV("autoconnectbutton1",debugmode);if(nightMode){QC("body").add("night")}toggleFullScreen();if(args.hide){var d=parseInt(args.hide);QV("masthead",!(d&1));QV("topbar",!(d&2));QV("footer",!(d&4));QV("p10title",!(d&8));QV("p11title",!(d&8));QV("p12title",!(d&8));QV("p13title",!(d&8));QV("p14title",!(d&8));QV("p15title",!(d&8));QV("p16title",!(d&8));QS("container")["grid-template-rows"]=((d&1)?"0":"66")+"px "+((d&2)?"0":"24")+"px auto "+((d&4)?"0":"45")+"px";QS("container")["-ms-grid-rows"]=((d&1)?"0":"66")+"px "+((d&2)?"0":"24")+"px auto "+((d&4)?"0":"45")+"px";var m=(((d&1)?0:66)+((d&2)?0:24)+((d&4)?0:45)+((d&8)?0:60));QS("p3users")["max-height"]="calc(100vh - "+(124+m)+"px)";QS("p3events")["height"]="calc(100vh - "+(124+m)+"px)";QS("deskarea3x")["height"]="calc(100vh - "+(75+m)+"px)";QS("deskarea3x")["max-height"]="calc(100vh - "+(75+m)+"px)";QS("p5filetable")["height"]="calc(100vh - "+(160+m)+"px)";QS("p13filetable")["height"]="calc(100vh - "+(124+m)+"px)";QS("serverMainStats")["height"]="calc(100vh - "+(110+m)+"px)";QS("serverMainStats")["max-height"]="calc(100vh - "+(110+m)+"px)";QS("xdevices")["max-height"]="calc(100vh - "+(124+m)+"px)";QS("xdevicesmap")["max-height"]="calc(100vh - "+(124+m)+"px)";QS("p15agentConsole")["height"]="calc(100vh - "+(84+m)+"px)";QS("p15agentConsole")["max-height"]="calc(100vh - "+(84+m)+"px)";QS("p15agentConsoleText")["height"]="calc(100vh - "+(81+m)+"px)";QS("p15agentConsoleText")["max-height"]="calc(100vh - "+(81+m)+"px)"}if("{{currentNode}}"!=""){QV("p10BackButton",false);QV("p11BackButton",false);QV("p12BackButton",false);QV("p13BackButton",false);QV("p14BackButton",false);QV("p15BackButton",false);QV("p16BackButton",false)}p1updateInfo();document.onclick=function(c){hideContextMenu()};document.onkeypress=ondockeypress;document.onkeydown=ondockeydown;document.onkeyup=ondockeyup;window.addEventListener("blur",ondocblur,false);window.onresize=function(){masterUpdate(512)};setTimeout(function(){masterUpdate(512)},200);meshserver=MeshServerCreateControl(domainUrl,authCookie);meshserver.onStateChanged=onStateChanged;meshserver.onMessage=onMessage;meshserver.trace=(args.trace==1);meshserver.Start();Q("sortselect").selectedIndex=sort=getstore("sort",0);Q("sizeselect").selectedIndex=getstore("_viewsize",1);Q("SearchInput").value=getstore("_search","");showRealNames=(getstore("showRealNames",0)==1);Q("RealNameCheckBox").checked=showRealNames;Q("viewselect").value=getstore("_deviceView",1);Q("DeskControl").checked=(getstore("DeskControl",1)==1);QV("accountChangeEmailAddressSpan",(features&2097152)==0);masterUpdate(3);for(var g=1;g<5;g++){Q("devViewButton"+g).classList.remove("viewSelectorSel")}Q("devViewButton"+Q("viewselect").value).classList.add("viewSelectorSel");Q("p5filetable").addEventListener("drop",p5fileDragDrop,false);Q("p5filetable").addEventListener("dragover",p5fileDragOver,false);Q("p5filetable").addEventListener("dragleave",p5fileDragLeave,false);Q("p13filetable").addEventListener("drop",p13fileDragDrop,false);Q("p13filetable").addEventListener("dragover",p13fileDragOver,false);Q("p13filetable").addEventListener("dragleave",p13fileDragLeave,false);setInterval(updateDeviceTimeline,120000);var k=localStorage.getItem("desktopsettings");if(k!=null){desktopsettings=JSON.parse(k)}k=localStorage.getItem("multidesktopsettings");if(k!=null){multidesktopsettings=JSON.parse(k)}applyDesktopSettings();var l="";for(var a=1;a<27;a++){l+="<option value='"+a+"'>Ctrl-"+String.fromCharCode(64+a)+" ("+a+")</option>"}QH("specialkeylist",l);setupGeneralServerStats();setupServerTimelineStats();userInterfaceSelectMenu();QV("p4UserBatchCreate",(features&524288)==0)}function toggleAspectRatio(a){if(a===1){deskAspectRatio=((deskAspectRatio+1)%3);putstore("deskAspectRatio",deskAspectRatio)}deskAdjust()}function toggleStackMenu(a){if(webPageFullScreen==true){if(a===1){webPageStackMenu=!webPageStackMenu;putstore("webPageStackMenu",webPageStackMenu)}if(webPageStackMenu==false){QC("body").remove("menu_stack")}else{QC("body").add("menu_stack");if(xxcurrentView>=10){QC("column_l").remove("room4submenu")}}deskAdjust()}}function showUserInterfaceSelectMenu(){Q("uiViewButton1").classList.remove("uiSelectorSel");Q("uiViewButton2").classList.remove("uiSelectorSel");Q("uiViewButton3").classList.remove("uiSelectorSel");Q("uiViewButton4").classList.remove("uiSelectorSel");try{Q("uiViewButton"+uiMode).classList.add("uiSelectorSel")}catch(a){}QV("uiMenu",(QS("uiMenu").display=="none"));if(nightMode){Q("uiViewButton4").classList.add("uiSelectorSel")}}function userInterfaceSelectMenu(a){if(a){uiMode=a;putstore("uiMode",uiMode)}webPageFullScreen=(uiMode<3);webPageStackMenu=(uiMode>1);toggleFullScreen(0);toggleStackMenu(0);if(webPageStackMenu&&(xxcurrentView>=10)){QC("column_l").add("room4submenu")}else{QC("column_l").remove("room4submenu")}}function toggleNightMode(){nightMode=!nightMode;if(nightMode){QC("body").add("night")}else{QC("body").remove("night")}putstore("_nightMode",nightMode?"1":"0")}function toggleFullScreen(b){if(b===1){webPageFullScreen=!webPageFullScreen;putstore("webPageFullScreen",webPageFullScreen)}var a=0;if(args.hide){a=parseInt(args.hide)}if(webPageFullScreen==false){QC("body").remove("menu_stack");QC("body").remove("fullscreen");QC("body").remove("arg_hide");if(xxcurrentView>=10){QC("column_l").add("room4submenu")}QV("UserDummyMenuSpan",false)}else{QC("body").add("fullscreen");if(a&16){QC("body").add("arg_hide")}if(xxcurrentView>=10){QC("column_l").remove("room4submenu")}QV("UserDummyMenuSpan",(xxcurrentView<10)&&webPageFullScreen)}masterUpdate(512);QV("body",true)}function getNodeFromId(b){if(nodes!=null){for(var a in nodes){if(nodes[a]._id==b){return nodes[a]}}}return null}function reload(){var a=window.location.href;if(a.endsWith("/#")){a=a.substring(0,a.length-2)}window.location.href=a}function onStateChanged(c,d,b,a){if(d==0){setDialogMode(0);go(0);powerTimeline=null;powerTimelineReq=null;powerTimelineNode=null;powerTimelineUpdate=null;deleteAllNotifications();hideContextMenu();QV("verifyEmailId2",false);QV("logoutControl",false);if(a=="noauth"){QH("p0span","Unable to perform authentication");return}if(b==2){if(autoReconnect){setTimeout(serverPoll,5000)}}else{QH("p0span","Unable to connect web socket")}if(authCookieRenewTimer!=null){clearInterval(authCookieRenewTimer);authCookieRenewTimer=null}}else{if(d==2){meshserver.send({action:"meshes"});meshserver.send({action:"nodes",id:"{{currentNode}}"});if("{{currentNode}}"==""){meshserver.send({action:"files"})}if("{{viewmode}}"==""){go(1)}authCookieRenewTimer=setInterval(function(){meshserver.send({action:"authcookie"})},1800000)}}}function serverPoll(){var b=null;try{b=new XDomainRequest()}catch(a){}if(!b){b=new XMLHttpRequest()}b.open("HEAD",window.location.href);b.timeout=15000;b.onload=function(){reload()};b.onerror=b.ontimeout=function(){setTimeout(serverPoll,10000)};b.send()}function detectClickOnce(){for(var a in window.navigator.mimeTypes){if(window.navigator.mimeTypes[a].type=="application/x-ms-application"){return true}}var b=window.navigator.userAgent.toUpperCase();return(b.indexOf(".NET CLR 3.5")>=0)||(b.indexOf("(WINDOWS NT ")>=0)}function updateSiteAdmin(){var a="{{{noServerBackup}}}";var b=userinfo.siteadmin;if(a==1){b&=4294967290}QV("p2AccountSecurity",((features&4)==0)&&(serverinfo.domainauth==false)&&((features&4096)!=0));QV("p2AccountActions",((features&4)==0)&&(serverinfo.domainauth==false));QV("p2AccountImage",((features&4)==0)&&(serverinfo.domainauth==false));QV("p2ServerActions",b&21);QV("LeftMenuMyServer",b&21);QV("MainMenuMyServer",b&21);QV("p2ServerActionsBackup",b&1);QV("p2ServerActionsRestore",b&4);QV("p2ServerActionsVersion",b&16);QV("MainMenuMyFiles",b&8);QV("LeftMenuMyFiles",b&8);if(((b&8)==0)&&(xxcurrentView==5)){setDialogMode(0);go(1)}if(currentNode!=null){gotoDevice(currentNode._id,xxcurrentView,true)}if((userinfo.siteadmin&2)!=0){if(users==null){meshserver.send({action:"users"})}if(wssessions==null){meshserver.send({action:"wssessioncount"})}}else{users=null;wssessions=null;updateUsers();if(xxcurrentView==4||((xxcurrentView>=30)&&(xxcurrentView<40))){setDialogMode(0);go(1);currentUser=null}}meshserver.send({action:"events",limit:parseInt(p3limitdropdown.value)});QV("ServerConsole",userinfo.siteadmin===4294967295);QV("ServerTrace",userinfo.siteadmin===4294967295);if((xxcurrentView==115)&&(userinfo.siteadmin!=4294967295)){go(6)}if((xxcurrentView==6)&&((userinfo.siteadmin&21)==0)){go(1)}if((b&21)!=0){meshserver.send({action:"serverstats",interval:10000})}}var updateNaggleTimer=null;var updateNaggleFlags=0;function masterUpdate(a){updateNaggleFlags|=a;if(updateNaggleTimer==null){updateNaggleTimer=setTimeout(function(){if(updateNaggleFlags&512){center()}if(updateNaggleFlags&1){onSearchInputChanged()}if(updateNaggleFlags&2){onSortSelectChange(false)}if(updateNaggleFlags&128){updateMeshes()}if(updateNaggleFlags&4){updateDevices()}if(updateNaggleFlags&8){drawNotifications()}if(updateNaggleFlags&16){updateMapMarkers()}if(updateNaggleFlags&32){eventsUpdate()}if(updateNaggleFlags&64){refreshMap(false,true)}if(updateNaggleFlags&256){drawDeviceTimeline()}if(updateNaggleFlags&1024){deviceEventsUpdate()}if(updateNaggleFlags&2048){userEventsUpdate()}if(updateNaggleFlags&4096){p20updateMesh()}updateNaggleTimer=null;updateNaggleFlags=0},150)}}function updateSelf(){QV("verifyEmailId",(userinfo.emailVerified!==true)&&(userinfo.email!=null)&&(serverinfo.emailcheck==true));QV("verifyEmailId2",(userinfo.emailVerified!==true)&&(userinfo.email!=null)&&(serverinfo.emailcheck==true));QV("manageOtp",(userinfo.otpsecret==1)||(userinfo.otphkeys>0));QV("authAppSetupCheck",userinfo.otpsecret==1);QV("authKeySetupCheck",userinfo.otphkeys>0);QV("authCodesSetupCheck",userinfo.otpkeys>0);masterUpdate(4+128+4096);var a=((userinfo.siteadmin==4294967295)||((userinfo.siteadmin&64)==0));QV("p2createMeshLink1",a);QV("p2createMeshLink2",a);QV("getStarted1",a);QV("getStarted2",!a);if(typeof userinfo.passchange=="number"){if(userinfo.passchange==-1){QH("p2nextPasswordUpdateTime"," - Reset on next login.")}else{if((passRequirements!=null)&&(typeof passRequirements.reset=="number")){var b=(userinfo.passchange)+(passRequirements.reset*86400)-Math.floor(Date.now()/1000);if(b<0){QH("p2nextPasswordUpdateTime"," - Reset on next login.")}else{if(b<3600){QH("p2nextPasswordUpdateTime"," - Reset in "+Math.floor(b/60)+" minute"+addLetterS(Math.floor(b/60))+".")}else{if(b<86400){QH("p2nextPasswordUpdateTime"," - Reset in "+Math.floor(b/3600)+" hour"+addLetterS(Math.floor(b/3600))+".")}else{QH("p2nextPasswordUpdateTime"," - Reset in "+Math.floor(b/86400)+" day"+addLetterS(Math.floor(b/86400))+".")}}}}}}}function addLetterS(a){return(a>1)?"s":""}function setSessionActivity(){sessionActivity=Date.now();QH("idleTimeoutNotify","")}function checkIdleSessionTimeout(){var a=(Date.now()-sessionActivity);if(a>serverinfo.timeout){window.location.href="logout"}else{var b=Math.round((serverinfo.timeout-a)/1000);if(b<=60){QH("idleTimeoutNotify","<br />"+b+" second"+addLetterS(b)+" until disconnect")}else{b=Math.round(b/60);if(b<=5){QH("idleTimeoutNotify","<br />"+b+" minute"+addLetterS(b)+" until disconnect")}}}}function onMessage(O,o){switch(o.action){case"trace":serverTrace.unshift(o);displayServerTrace();break;case"traceinfo":if(typeof o.traceSources=="object"){if((o.traceSources!=null)&&(o.traceSources.length>0)){serverTraceSources=o.traceSources;QH("p41traceStatus",EscapeHtml(o.traceSources.join(", ")))}else{serverTraceSources=[];QH("p41traceStatus","None")}}break;case"serverstats":updateGeneralServerStats(o);break;case"servertimelinestats":setServerTimelineStats(o.events);break;case"authcookie":authCookie=o.cookie;break;case"serverinfo":serverinfo=o.serverinfo;if(serverinfo.timeout){setInterval(checkIdleSessionTimeout,10000);checkIdleSessionTimeout()}break;case"userinfo":userinfo=o.userinfo;updateSiteAdmin();updateSelf();break;case"users":users={};for(var l in o.users){users[o.users[l]._id]=o.users[l]}updateUsers();break;case"wssessioncount":wssessions=o.wssessions;updateUsers();break;case"meshes":meshes={};for(var l in o.meshes){meshes[o.meshes[l]._id]=o.meshes[l]}masterUpdate(4+128);break;case"files":filetree=setupBackPointers(o.filetree);updateFiles();d3updatefiles();break;case"nodes":nodes=[];for(var l in o.nodes){if(!meshes[l]){console.log("Invalid mesh (1): "+l);continue}for(var q in o.nodes[l]){if(o.nodes[l][q]._id==null){console.log("Invalid node ("+q+"): "+JSON.stringify(o.nodes));continue}o.nodes[l][q].namel=o.nodes[l][q].name.toLowerCase();if(o.nodes[l][q].rname){o.nodes[l][q].rnamel=o.nodes[l][q].rname.toLowerCase()}else{o.nodes[l][q].rnamel=o.nodes[l][q].namel}o.nodes[l][q].meshnamel=meshes[l].name.toLowerCase();o.nodes[l][q].meshid=l;o.nodes[l][q].state=(o.nodes[l][q].state)?(o.nodes[l][q].state):0;o.nodes[l][q].desc=o.nodes[l][q].desc;o.nodes[l][q].ip=o.nodes[l][q].ip;if(!o.nodes[l][q].icon){o.nodes[l][q].icon=1}o.nodes[l][q].ident=++nodeShortIdent;nodes.push(o.nodes[l][q])}}masterUpdate(1|2|4|64);if(xxcurrentView==-1){if("{{viewmode}}"!=""){go(parseInt("{{viewmode}}"))}else{setDialogMode(0);go(1)}}if("{{currentNode}}"!=""){gotoDevice("{{currentNode}}",parseInt("{{viewmode}}"))}break;case"powertimeline":if(o.nodeid!=powerTimelineReq){break}powerTimelineNode=o.nodeid;powerTimeline=o.timeline;powerTimelineUpdate=Date.now()+300000;for(var e in powerTimeline){if(e%2==1){powerTimeline[e]=powerTimeline[e]*1000}}if(currentNode._id==o.nodeid){masterUpdate(256)}break;case"lastconnect":var z=getNodeFromId(o.nodeid);if(z!=null){z.lastconnect=o.time;z.lastaddr=o.addr;if((currentNode._id==z._id)&&(Q("MainComputerState").innerHTML=="")){QH("MainComputerState","<span>Last seen:<br />"+printDateTime(new Date(z.lastconnect))+"</span>")}}break;case"msg":if(o.nodeid!=null){var g=-1;if(nodes!=null){for(var e in nodes){if(nodes[e]._id==o.nodeid){g=e;break}}}if(g!=-1){if(o.type=="console"){p15consoleReceive(nodes[g],o.value)}else{if(o.type=="notify"){var q=getstore("notifications",0);if(((q&8)==0)&&(o.amtMessage!=null)){break}var q={text:o.value,title:o.title,icon:o.icon};if(o.nodeid!=null){q.nodeid=o.nodeid}if(o.tag!=null){q.tag=o.tag}if(o.username!=null){q.username=o.username}addNotification(q)}else{if(o.type=="ps"){showDeskToolsProcesses(o)}else{if(o.type=="services"){showDeskToolsServices(o)}else{if((o.type=="getclip")&&(xxdialogTag=="clipboard")&&(currentNode!=null)&&(currentNode._id==o.nodeid)){Q("d2clipText").value=o.data}else{if((o.type=="setclip")&&(xxdialogTag=="clipboard")&&(currentNode!=null)&&(currentNode._id==o.nodeid)){QH("dlgClipStatus",o.success?"<span style=color:green>Success</span>":"<span style=color:red>Failed</span>");setTimeout(function(){try{QH("dlgClipStatus","")}catch(j){}},2000)}}}}}}}}else{if(o.type=="notify"){var q={text:o.value,title:o.title,icon:o.icon};if(o.tag!=null){q.tag=o.tag}if(o.username!=null){q.username=o.username}addNotification(q)}}break;case"getnetworkinfo":if((currentNode._id==o.nodeid)&&(xxdialogMode==2)&&(xxdialogTag=="if"+o.nodeid)){if(o.netif==null){QH("d2netinfo","No network interface information available for this device.")}else{var Z="<div class=dialogText>";if(currentNode.lastconnect){Z+=addHtmlValue2("Last agent connection",printDateTime(new Date(currentNode.lastconnect)))}if(currentNode.lastaddr){var S=currentNode.lastaddr.split(":");if(S.length>2){Z+=addHtmlValue2("Last agent address",currentNode.lastaddr+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(currentNode.lastaddr)+'") width=10 height=10>')}else{if(isPrivateIP(currentNode.lastaddr)){Z+=addHtmlValue2("Last agent address",S[0]+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(S[0])+'") width=10 height=10>')}else{Z+=addHtmlValue2("Last agent address",'<a href="https://iplocation.com/?ip='+S[0]+'" rel="noreferrer noopener" target="MeshIPLoopup">'+S[0]+'</a> <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(S[0])+'") width=10 height=10>')}}}Z+=addHtmlValue2("Last interfaces update",printDateTime(new Date(o.updateTime)));for(var e in o.netif){var s=o.netif[e];Z+="<hr />";if(s.name){Z+=addHtmlValue2("Name","<b>"+EscapeHtml(s.name)+"</b>")}if(s.desc){Z+=addHtmlValue2("Description",EscapeHtml(s.desc).replace("(R)","®").replace("(r)","®"))}if(s.dnssuffix){Z+=addHtmlValue2("DNS suffix",EscapeHtml(s.dnssuffix)+' <img src="images/link4.png" title="Copy name to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(s.dnssuffix)+'") width=10 height=10>')}if(s.mac){Z+=addHtmlValue2("MAC address",'<a href="https://dnslytics.com/mac-address-lookup/'+s.mac.substring(0,6)+'" rel="noreferrer noopener" target="MeshMACLoopup">'+EscapeHtml(s.mac.toLowerCase())+'</a> <img src="images/link4.png" title="Copy MAC address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(s.mac.toLowerCase())+'") width=10 height=10>')}if(s.v4addr){Z+=addHtmlValue2("IPv4 address",EscapeHtml(s.v4addr)+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(s.v4addr)+'") width=10 height=10>')}if(s.v4mask){Z+=addHtmlValue2("IPv4 mask",EscapeHtml(s.v4mask)+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(s.v4mask)+'") width=10 height=10>')}if(s.v4gateway){Z+=addHtmlValue2("IPv4 gateway",EscapeHtml(s.v4gateway)+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(s.v4gateway)+'") width=10 height=10>')}if(s.gatewaymac){Z+=addHtmlValue2("Gateway MAC",'<a href="https://dnslytics.com/mac-address-lookup/'+s.gatewaymac.substring(0,6)+'" rel="noreferrer noopener" target="MeshMACLoopup">'+EscapeHtml(s.gatewaymac.toLowerCase())+'</a> <img src="images/link4.png" title="Copy MAC address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(s.gatewaymac.toLowerCase())+'") width=10 height=10>')}}Z+="</div>";QH("d2netinfo",Z)}}break;case"serverversion":if((xxdialogMode==2)&&(xxdialogTag=="MeshCentralServerUpdate")){var Z="<div class=dialogText>";if(!o.current){o.current="Unknown"}if(!o.latest){o.latest="Unknown"}Z+=addHtmlValue2("Current Version","<b>"+EscapeHtml(o.current)+"</b>");Z+=addHtmlValue2("Latest Version","<b>"+EscapeHtml(o.latest)+"</b>");Z+="</div>";if((o.latest.indexOf(".")==-1)||(o.current==o.latest)||((features&2048)==0)){setDialogMode(2,"MeshCentral Version",1,null,Z)}else{setDialogMode(2,"MeshCentral Version",3,server_showVersionDlgEx,Z+"<br /><label><input id=d2updateCheck type=checkbox onclick=server_showVersionDlgUpdate() /> Check and click OK to start server self-update.</label>");server_showVersionDlgUpdate()}}break;case"servererrors":if((xxdialogMode==2)&&(xxdialogTag=="MeshCentralServerErrors")){if(o.data==null){setDialogMode(2,"MeshCentral Server Errors",1,null,"Server has no error log.")}else{var Z='<div class="dialogText dialogTextLog"><pre id=d2ServerErrorsLogPre>'+o.data+"<pre></div>";setDialogMode(2,"MeshCentral Server Errors",3,server_showErrorsDlgEx,Z+'<br /><div style=float:right><img src=images/link4.png height=10 width=10 title="Download error log" style=cursor:pointer onclick=d2CopyServerErrorsToClip()></div><div><label><input id=d2updateCheck type=checkbox onclick=server_showVersionDlgUpdate() /> Check and click OK to clear error log.</label></div>');server_showVersionDlgUpdate()}}break;case"serverconsole":p15consoleReceive("serverconsole",o.value);break;case"events":if((o.nodeid!=null)&&(o.nodeid==currentNode._id)){currentDeviceEvents=o.events;masterUpdate(1024)}else{if((o.user!=null)&&(o.user==currentUser.name)){currentUserEvents=o.events;masterUpdate(2048)}else{events=o.events;masterUpdate(32)}}break;case"getcookie":if(o.tag=="clickonce"){var a="{{{serverRedirPort}}}"==""?"{{{serverPublicPort}}}":"{{{serverRedirPort}}}";var L="http://"+window.location.hostname+":"+a+"/clickonce/minirouter/MeshMiniRouter.application?WS=wss%3A%2F%2F"+window.location.hostname+"%2Fmeshrelay.ashx%3Fauth="+o.cookie+"&CH={{{webcerthash}}}&AP="+o.protocol+((debugmode==1)?"":"&HOL=1");var w=window.open(L,"_blank");w.opener=null}break;case"getNotes":var q=Q("d2devNotes");if(q&&(o.id==decodeURIComponent(q.attributes.noteid.value))){if(o.notes){QH("d2devNotes",decodeURIComponent(o.notes))}else{QH("d2devNotes","")}var M=(q.attributes.ro.value=="true");if(M==false){q.removeAttribute("readonly");QE("idx_dlgOkButton",true);QV("idx_dlgOkButton",true);focusTextBox("d2devNotes")}}break;case"otpauth-request":if((xxdialogMode==2)&&(xxdialogTag=="otpauth-request")){var N=o.secret;if(N.length==52){N=N.split(/(.............)/).filter(Boolean).join(" ")}else{if(N.length==32){N=N.split(/(....)/).filter(Boolean).join(" ");N=N.substring(0,20)+"<br/>"+N.substring(20)}}QH("d2optinfo",'<table style=width:380px><tr><td style=vertical-align:top>Install <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank>Google Authenticator</a> or a compatible application and scan the barcode, use <a href="'+o.url+'" rel="noreferrer noopener" target=_blank> this link</a> or enter the secret. Then, enter the current 6 digit token below to activate 2-Step login.<br /><br />Secret<br /><tt id=d2optsecret secret="'+o.secret+'" style=font-size:12px>'+N+'</tt><br /><br /></td><td style=width:1px;vertical-align:top><a href="'+o.url+'" rel="noreferrer noopener" target=_blank><div id="qrcode"></div></a></td><tr><td colspan=2 style="text-align:center;border-top:1px solid black"><br />Enter the token here for 2-step login: <input type=text onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></td></table>');new QRCode(Q("qrcode"),{text:o.url,width:128,height:128,colorDark:"#000000",colorLight:"#EEE",correctLevel:QRCode.CorrectLevel.H});QV("idx_dlgOkButton",true);QE("idx_dlgOkButton",false);Q("d2otpauthinput").focus()}break;case"otpauth-setup":if(xxdialogMode){return}setDialogMode(2,"Authenticator App",1,null,o.success?"<b style=color:green>Authenticator app activation successful</b>. You will now need a valid token to login again.":"<b style=color:red>2-step login activation failed</b>. Clear the secret from the application and try again. You only have a few minutes to enter the proper code.");break;case"otpauth-clear":if(xxdialogMode){return}setDialogMode(2,"Authenticator App",1,null,o.success?"<b>Authenticator application removed</b>. You can reactivate this feature at any time.":"<b style=color:red>2-step login activation removal failed</b>. Try again.");break;case"otpauth-getpasswords":if(xxdialogMode){return}var Z="One time tokens can be used as secondary authentication. Generate a set, print them and keep them in a safe place.";Z+="<div style='border-radius:6px;border: 2px dashed #888;width:100%;margin-top:8px'><div style='padding:8px;font-family:Arial, Helvetica, sans-serif;font-size:20px;font-weight:bold'><table style=width:100%;text-align:center>";if(o.passwords){var h=0;for(var e in o.passwords){if(++h%2){Z+="<tr>"}var H=""+o.passwords[e].p;while(H.length<8){H="0"+H}if(o.passwords[e].u===true){Z+="<td>"+H.substring(0,4)+" "+H.substring(4)}else{Z+="<td><strike style=color:#BBB>"+H.substring(0,4)+" "+H.substring(4);+"</strike>"}}}else{Z+="<tr><td>No Active Tokens"}Z+="</table></div></div><br />";Z+="<div><input type=button value='Close' onclick=setDialogMode(0) style=float:right></input>";Z+="<input type=button value='Generate New Tokens' onclick='account_manageOtp(1);'></input>";if(o.passwords!=null){Z+="<input type=button value='Clear Tokens' onclick='account_manageOtp(2);'></input>"}Z+="</div><br />";setDialogMode(2,"Manage Backup Codes",8,null,Z,"otpauth-manage");break;case"otp-hkey-get":if(xxdialogMode&&(xxdialogTag!="otpauth-hardware-manage")){return}var T="<div style='border-radius:6px;border:2px solid #CCC;background-color:#BBB;width:100%;box-sizing:border-box;margin-bottom:6px'><div style='margin:3px;font-family:Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold'><table style=width:100%;text-align:left>";var c="</table></div></div>";var Z="<a href='https://www.yubico.com/' rel='noreferrer noopener' target='_blank'>Hardware keys</a> are used as secondary login authentication.";Z+="<div style='max-height:150px;overflow-y:auto;overflow-x:hidden;margin-top:6px;margin-bottom:6px'>";if(o.keys&&o.keys.length>0){for(var e in o.keys){var k=o.keys[e],W=(k.type==2)?"OTP":"WebAuthn";Z+=T+'<tr style=margin:5px><td style=width:30px><img width=24 height=18 src="images/hardware-key-'+W+'-24.png" style=margin-top:4px><td style=width:250px>'+k.name+"<td><input type=button value='Remove' onclick=account_removehkey("+k.i+")></input>"+c}}else{Z+=T+"<tr style=text-align:center><td>No Keys Configured"+c}Z+="</div>";Z+="<div><input type=button value='Close' onclick=setDialogMode(0) style=float:right></input>";if((features&131072)!=0){Z+="<input id=d2addkey3 type=button value='Add Key' onclick='account_addhkey(3);'></input>"}if((features&16384)!=0){Z+="<input id=d2addkey2 type=button value='Add YubiKey® OTP' onclick='account_addhkey(2);'></input>"}Z+="</div><br />";setDialogMode(2,"Manage Security Keys",8,null,Z,"otpauth-hardware-manage");if(u2fSupported()==false){QE("d2addkey1",false)}break;case"otp-hkey-yubikey-add":if(o.result){meshserver.send({action:"otp-hkey-get"})}else{setDialogMode(2,"Add Security Key",1,null,"<br />Error, Unable to add key.<br /><br />")}break;case"otp-hkey-setup-response":if(xxdialogMode&&(xxdialogTag!="otpauth-hardware-manage")){return}if(o.result==true){meshserver.send({action:"otp-hkey-get"})}else{setDialogMode(2,"Add Security Key",1,null,"<br />ERROR: Unable to add key.<br /><br />","otpauth-hardware-manage")}break;case"webauthn-startregister":if(xxdialogMode&&(xxdialogTag!="otpauth-hardware-manage")){return}var Z="Press the key button now.<br /><br /><div style=width:100%;text-align:center><img width=120 height=117 src='images/hardware-keypress-120.png' /></div><input id=dp1keyname style=display:none value="+o.name+" />";setDialogMode(2,"Add Security Key",2,null,Z);var J=o.request;o.request.challenge=Uint8Array.from(atob(o.request.challenge),function(j){return j.charCodeAt(0)});o.request.user.id=Uint8Array.from(atob(o.request.user.id),function(j){return j.charCodeAt(0)});navigator.credentials.create({publicKey:J}).then(function(j){var m={rawId:btoa(String.fromCharCode.apply(null,new Uint8Array(j.rawId))),response:{attestationObject:btoa(String.fromCharCode.apply(null,new Uint8Array(j.response.attestationObject))),clientDataJSON:btoa(String.fromCharCode.apply(null,new Uint8Array(j.response.clientDataJSON)))},type:j.type};meshserver.send({action:"webauthn-endregister",response:m});setDialogMode(0)},function(j){setDialogMode(2,"Add Security Key",1,null,"ERROR: "+j)});break;case"event":if(!o.event.nolog){if(currentNode&&(o.event.nodeid==currentNode._id)){currentDeviceEvents.unshift(o.event);var d=parseInt(p16limitdropdown.value);while(currentDeviceEvents.length>d){currentDeviceEvents.pop()}masterUpdate(1024)}if(currentUser&&(o.event.userid==currentUser._id)){currentUserEvents.unshift(o.event);var d=parseInt(p31limitdropdown.value);while(currentUserEvents.length>d){currentUserEvents.pop()}masterUpdate(2048)}events.unshift(o.event);var d=parseInt(p3limitdropdown.value);while(events.length>d){events.pop()}masterUpdate(32)}if(o.event.noact){break}switch(o.event.action){case"userWebState":if(localStorage!=null){var D=localStorage.getItem("showRealNames");var G=localStorage.getItem("uiMode");var F=localStorage.getItem("sort");var C=localStorage.getItem("loctag");var Y=JSON.parse(o.event.state);for(var e in Y){localStorage.setItem(e,Y[e])}if((Y.deskAspectRatio!=null)&&(Y.deskAspectRatio!=deskAspectRatio)){deskAspectRatio=Y.deskAspectRatio;deskAdjust()}if((Y.showRealNames!=null)&&(Y.showRealNames!=D)){showRealNames=Q("RealNameCheckBox").checked=(Y.showRealNames=="1");masterUpdate(6)}if((Y.uiMode!=null)&&(Y.uiMode!=G)){userInterfaceSelectMenu(parseInt(Y.uiMode))}if((Y.sort!=null)&&(Y.sort!=F)){document.getElementById("sortselect").selectedIndex=sort=parseInt(Y.sort);masterUpdate(6)}if((Y.loctag!=null)&&(Y.loctag!=C)){if(Y.loctag!=null){args.locale=Y.loctag}else{delete args.locale}masterUpdate(4294967295)}}break;case"servertimelinestats":addServerTimelineStats(o.event.data);break;case"accountcreate":case"accountchange":if(userinfo.name==o.event.account.name){var v=o.event.account.siteadmin?o.event.account.siteadmin:0;var E=userinfo.siteadmin?userinfo.siteadmin:0;if((o.event.account.quota!=userinfo.quota)||(((userinfo.siteadmin&8)==0)&&((o.event.account.siteadmin&8)!=0))){meshserver.send({action:"files"})}var B=userinfo.groups;userinfo=o.event.account;if(E!=v){updateSiteAdmin()}updateSelf();if((userinfo.siteadmin&2)!=0){var A=B?B:[];var y=userinfo.groups?userinfo.groups:[];if(A.join(",")!=y.join(",")){users=wssessions=null;meshserver.send({action:"users"});meshserver.send({action:"wssessioncount"})}}}if(users==null){break}if((userinfo.groups==null)||(userinfo.groups.length==0)||(findOne(o.event.account.groups,userinfo.groups)==true)){users[o.event.account._id]=o.event.account}else{delete users[o.event.account._id]}updateUsers();break;case"accountremove":if(users==null){break}delete users["user/"+domain+"/"+o.event.username.toLowerCase()];updateUsers();break;case"createmesh":if((meshes[o.event.meshid]==null)&&(o.event.links[userinfo._id]!=null)){meshes[o.event.meshid]={_id:o.event.meshid,name:o.event.name,mtype:o.event.mtype,desc:o.event.desc,links:o.event.links};masterUpdate(4+128);meshserver.send({action:"files"})}break;case"meshchange":if(meshes[o.event.meshid]==null){meshes[o.event.meshid]={_id:o.event.meshid,name:o.event.name,mtype:o.event.mtype,desc:o.event.desc,links:o.event.links};meshserver.send({action:"nodes"})}else{if(o.event.name!=null){meshes[o.event.meshid].name=o.event.name}if(o.event.desc!=null){meshes[o.event.meshid].desc=o.event.desc}if(o.event.flags!=null){meshes[o.event.meshid].flags=o.event.flags}if(o.event.consent!=null){meshes[o.event.meshid].consent=o.event.consent}if(o.event.links){meshes[o.event.meshid].links=o.event.links}if(o.event.amt){meshes[o.event.meshid].amt=o.event.amt}if(meshes[o.event.meshid].links[userinfo._id]==null){if((xxcurrentView==20)&&(currentMesh==meshes[o.event.meshid])){go(2)}delete meshes[o.event.meshid];var u=[];for(var e in nodes){if(nodes[e].meshid!=o.event.meshid){u.push(nodes[e])}}nodes=u;if(xxcurrentView>=10&&xxcurrentView<20&¤tNode&¤tNode.meshid==o.event.meshid){setDialogMode(0);go(1)}}}masterUpdate(4+128);if(currentNode&&(currentNode.meshid==o.event.meshid)){currentNode=null;if((xxcurrentView>=10)&&(xxcurrentView<20)){go(1)}}if(xxcurrentView==20&¤tMesh._id==o.event.meshid){masterUpdate(4096)}break;case"deletemesh":if(meshes[o.event.meshid]){delete meshes[o.event.meshid];masterUpdate(128);meshserver.send({action:"files"})}var u=[];if(nodes!=null){for(var e in nodes){if(nodes[e].meshid!=o.event.meshid){u.push(nodes[e])}}}nodes=u;masterUpdate(4);if(xxcurrentView>=20&&xxcurrentView<30&¤tMesh._id==o.event.meshid){setDialogMode(0);go(2)}if(xxcurrentView>=10&&xxcurrentView<20&¤tNode&¤tNode.meshid==o.event.meshid){setDialogMode(0);go(1)}break;case"addnode":var z=o.event.node;if(!meshes[z.meshid]){break}if(getNodeFromId(z._id)!=null){break}z.namel=z.name.toLowerCase();if(z.rname){z.rnamel=z.rname.toLowerCase()}else{z.rnamel=z.namel}z.meshnamel=meshes[z.meshid].name.toLowerCase();z.state=0;if(!z.icon){z.icon=1}z.ident=++nodeShortIdent;if(nodes==null){}nodes.push(z);masterUpdate(1|2|4|16);break;case"removenode":var g=-1;for(var e in nodes){if(nodes[e]._id==o.event.nodeid){g=e;break}}if(g!=-1){var z=nodes[g];if(currentNode==z){if(xxcurrentView>=10&&xxcurrentView<20){setDialogMode(0);go(1)}currentNode=null}nodes.splice(g,1);masterUpdate(4|16)}break;case"changenode":var g=-1;for(var e in nodes){if(nodes[e]._id==o.event.nodeid){g=e;break}}if(g!=-1){var z=nodes[g];z.name=o.event.node.name;z.rname=o.event.node.rname;z.users=o.event.node.users;z.host=o.event.node.host;z.desc=o.event.node.desc;z.ip=o.event.node.ip;z.osdesc=o.event.node.osdesc;z.publicip=o.event.node.publicip;z.iploc=o.event.node.iploc;z.wifiloc=o.event.node.wifiloc;z.gpsloc=o.event.node.gpsloc;z.tags=o.event.node.tags;z.userloc=o.event.node.userloc;if(o.event.node.agent!=null){if(z.agent==null){z.agent={}}if(o.event.node.agent.ver!=null){z.agent.ver=o.event.node.agent.ver}if(o.event.node.agent.id!=null){z.agent.id=o.event.node.agent.id}if(o.event.node.agent.caps!=null){z.agent.caps=o.event.node.agent.caps}if(o.event.node.agent.core!=null){z.agent.core=o.event.node.agent.core}else{if(z.agent.core){delete z.agent.core}}z.agent.tag=o.event.node.agent.tag}if(o.event.node.intelamt!=null){if(z.intelamt==null){z.intelamt={}}if(o.event.node.intelamt.state!=null){z.intelamt.state=o.event.node.intelamt.state}if(o.event.node.intelamt.host!=null){z.intelamt.user=o.event.node.intelamt.host}if(o.event.node.intelamt.user!=null){z.intelamt.user=o.event.node.intelamt.user}if(o.event.node.intelamt.tls!=null){z.intelamt.tls=o.event.node.intelamt.tls}if(o.event.node.intelamt.ver!=null){z.intelamt.ver=o.event.node.intelamt.ver}if(o.event.node.intelamt.tag!=null){z.intelamt.tag=o.event.node.intelamt.tag}if(o.event.node.intelamt.uuid!=null){z.intelamt.uuid=o.event.node.intelamt.uuid}if(o.event.node.intelamt.realm!=null){z.intelamt.realm=o.event.node.intelamt.realm}}if(o.event.node.av!=null){z.av=o.event.node.av}z.namel=z.name.toLowerCase();if(z.rname){z.rnamel=z.rname.toLowerCase()}else{z.rnamel=z.namel}if(o.event.node.icon){z.icon=o.event.node.icon}masterUpdate(2|4|8|16);refreshDevice(z._id);if((currentNode==z)&&(xxdialogMode!=null)&&(xxdialogTag=="@xxmap")){p10showNodeLocationDialog()}}break;case"nodemeshchange":var g=-1;for(var e in nodes){if(nodes[e]._id==o.event.nodeid){g=e;break}}if(g!=-1){var z=nodes[g];if(meshes[o.event.newMeshId]==null){if(currentNode==z){if(xxcurrentView>=10&&xxcurrentView<20){setDialogMode(0);go(1)}currentNode=null}nodes.splice(g,1);masterUpdate(4|16)}else{z.meshid=o.event.newMeshId;z.meshnamel=meshes[o.event.newMeshId].name.toLowerCase();masterUpdate(1|2|4)}refreshDevice(o.event.nodeid)}else{var z=o.event.node;if(!meshes[z.meshid]){break}z.namel=z.name.toLowerCase();if(z.rname){z.rnamel=z.rname.toLowerCase()}else{z.rnamel=z.namel}z.meshnamel=meshes[z.meshid].name.toLowerCase();z.state=0;if(!z.icon){z.icon=1}z.ident=++nodeShortIdent;if(nodes==null){}nodes.push(z);masterUpdate(1|2|4|16)}break;case"nodeconnect":var g=-1;for(var e in nodes){if(nodes[e]._id==o.event.nodeid){g=e;break}}if(g!=-1){var z=nodes[g];var q=getstore("notifications",0);if(o.event.meshid&&userinfo.links&&userinfo.links[o.event.meshid]&&userinfo.links[o.event.meshid].notify){q&=userinfo.links[o.event.meshid].notify}else{q=0}if(q&2){if(((z.conn&1)==0)&&((o.event.conn&1)!=0)){addNotification({text:"Agent connected",title:z.name,icon:z.icon,nodeid:z._id})}if(((z.conn&2)==0)&&((o.event.conn&2)!=0)){addNotification({text:"Intel AMT detected",title:z.name,icon:z.icon,nodeid:z._id})}if(((z.conn&4)==0)&&((o.event.conn&4)!=0)){addNotification({text:"Intel AMT CIRA connected",title:z.name,icon:z.icon,nodeid:z._id})}}if(q&4){if(((z.conn&1)!=0)&&((o.event.conn&1)==0)){addNotification({text:"Agent disconnected",title:z.name,icon:z.icon,nodeid:z._id})}if(((z.conn&2)!=0)&&((o.event.conn&2)==0)){addNotification({text:"Intel AMT not detected",title:z.name,icon:z.icon,nodeid:z._id})}if(((z.conn&4)!=0)&&((o.event.conn&4)==0)){addNotification({text:"Intel AMT CIRA disconnected",title:z.name,icon:z.icon,nodeid:z._id})}}z.conn=o.event.conn;z.pwr=o.event.pwr;masterUpdate(4|16);refreshDevice(z._id)}break;case"wssessioncount":if(wssessions!=null){if(o.event.count==0&&wssessions["user/"+domain+"/"+o.event.username.toLowerCase()]){delete wssessions["user/"+domain+"/"+o.event.username.toLowerCase()]}else{wssessions["user/"+domain+"/"+o.event.username.toLowerCase()]=o.event.count}updateUsers()}break;case"login":if(users!=null&&users["user/"+domain+"/"+o.event.username.toLowerCase()]){users["user/"+domain+"/"+o.event.username.toLowerCase()].login=Math.floor(new Date(o.event.time).getTime()/1000)}break;case"scanamtdevice":if((xxdialogMode==null)||(!Q("dp1range"))||(Q("dp1range").value!=o.event.range)){return}var Z="";if(o.event.results==null){Z="<div style=width:100%;text-align:center;margin-top:12px>Unable to scan this address range.</div><div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>"}else{amtScanResults=o.event.results;for(var e in o.event.results){var K=o.event.results[e],R=K.hostname;if(R.length>20){R=R.substring(0,20)+"..."}var U='<b title="'+EscapeHtml(K.hostname)+'">'+EscapeHtml(R)+"</b> - v"+K.ver;if(K.state==2){if(K.tls==1){U+=" with TLS."}else{U+=" without TLS."}}else{U+=" not activated."}Z+='<div style=width:100%;margin-bottom:2px;background-color:lightgray><div style=padding:4px><div style=display:inline-block;margin-right:5px><input class=DevScanCheckbox name=dp1checkbox tag="'+EscapeHtml(e)+'" type=checkbox onclick=addAmtScanToMeshCheckbox() /></div><div class=j1 style=display:inline-block></div><div style=display:inline-block;margin-left:5px;overflow-x:auto;white-space:nowrap>'+U+"</div></div></div>"}if(Z==""){Z="<div style=width:100%;text-align:center;margin-top:12px>Scan returned no results.</div><div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>"}}QH("dp1results",Z);QE("dp1range",true);QE("dp1rangebutton",true);break;case"notify":var q={text:o.event.value,title:o.event.title,icon:o.event.icon};if(o.event.tag!=null){q.tag=o.event.tag}addNotification(q);break;case"traceinfo":if(typeof o.event.traceSources=="object"){if((o.event.traceSources!=null)&&(o.event.traceSources.length>0)){serverTraceSources=o.event.traceSources;QH("p41traceStatus",EscapeHtml(o.event.traceSources.join(", ")))}else{serverTraceSources=[];QH("p41traceStatus","None")}}break;case"stopped":break;default:break}break;case"createInviteLink":if(xxdialogTag!=o.meshid){break}var P=serverinfo.name;if((P.indexOf(".")==-1)||((features&2)!=0)){P=window.location.hostname}var b=domainUrl.substring(0,domainUrl.length-1);var X;if(serverinfo.https==true){var I=(serverinfo.port==443)?"":(":"+serverinfo.port);X="https://"+P+I+domainUrl+"agentinvite?c="+o.cookie}else{var I=(serverinfo.port==80)?"":(":"+serverinfo.port);X="http://"+P+I+domainUrl+"agentinvite?c="+o.cookie}Q("agentInvitationLink").href=X;var V=o.expire+" hour"+addLetterS(o.expire);if(o.expire==24){V="1 day"}if(o.expire==168){V="1 week"}if(o.expire==5040){V="1 month"}if(o.expire==0){V="Unlimited"}QH("agentInvitationLink","Invitation Link ("+V+")");QV("agentInvitationLinkDiv",true);break;case"stopped":autoReconnect=false;QH("p0span",o.msg);break;default:break}}function onRealNameCheckBox(){showRealNames=Q("RealNameCheckBox").checked;putstore("showRealNames",showRealNames?1:0);masterUpdate(6);return}function onDeviceViewChange(a){if(a!=null){Q("viewselect").value=a}for(var b=1;b<5;b++){Q("devViewButton"+b).classList.remove("viewSelectorSel")}Q("devViewButton"+Q("viewselect").value).classList.add("viewSelectorSel");putstore("_deviceView",Q("viewselect").value);putstore("_viewsize",Q("sizeselect").value);masterUpdate(4);setTimeout(function(){masterUpdate(512)},200)}function ondockeypress(a){setSessionActivity();if(!xxdialogMode&&xxcurrentView==11&&desktop&&Q("DeskControl").checked){if(currentNode!=null){var d=meshes[currentNode.meshid];var g=d.links[userinfo._id].rights;var b=((g==4294967295)||(((g&8)!=0)&&((g&256)==0)));if(b==false){return false}var c=((g!=4294967295)&&(((g&8)!=0)&&((g&256)==0)&&((g&4096)!=0)));if(c==true){if((a.altKey==true)||(a.ctrlKey==true)||((a.keyCode<32)&&(a.keyCode!=8)&&(a.keyCode!=13))||(a.keyCode>90)){return false}}}return desktop.m.handleKeys(a)}if(!xxdialogMode&&xxcurrentView==12&&terminal&&terminal.State==3){return terminal.m.TermHandleKeys(a)}if(!xxdialogMode&&((xxcurrentView==15)||(xxcurrentView==115))){return agentConsoleHandleKeys(a)}if(!xxdialogMode&&xxcurrentView==4){if(a.ctrlKey==true||a.altKey==true||a.metaKey==true){return}var h=0;if(a.key){if(a.key.length===1&&userSearchFocus==0){Q("UserSearchInput").value=((Q("UserSearchInput").value+a.key));h=1}if(a.keyCode==8&&userSearchFocus==0){var j=Q("UserSearchInput").value;Q("UserSearchInput").value=j.substring(0,j.length-1);h=1}if(a.keyCode==27){Q("UserSearchInput").value="";h=1}}else{if(a.charCode!=0&&userSearchFocus==0){Q("UserSearchInput").value=((Q("UserSearchInput").value+String.fromCharCode(a.charCode)));h=1}}if(h>0){if(h==1){onUserSearchInputChanged()}return haltEvent(a)}}if(xxdialogMode||xxcurrentView!=1){return}if(a.ctrlKey==true&&a.charCode==96){showRealNames=!showRealNames;Q("RealNameCheckBox").value=showRealNames;putstore("showRealNames",showRealNames?1:0);masterUpdate(6);return}if(a.ctrlKey==true||a.altKey==true||a.metaKey==true){return}if(Q("viewselect").value<3){var h=0;if(a.key){if(a.key.length===1&&searchFocus==0){Q("SearchInput").value=((Q("SearchInput").value+a.key));h=1}if(a.keyCode==8&&searchFocus==0){var j=Q("SearchInput").value;Q("SearchInput").value=j.substring(0,j.length-1);h=1}if(a.keyCode==27){Q("SearchInput").value="";h=1}}else{if(a.charCode!=0&&searchFocus==0){Q("SearchInput").value=((Q("SearchInput").value+String.fromCharCode(a.charCode)));h=1}}if(h>0){if(h==1){masterUpdate(5)}return haltEvent(a)}}if(Q("viewselect").value==3){if(a.key){if(a.key.length===1&&mapSearchFocus==0){Q("mapSearchLocation").value=((Q("mapSearchLocation").value+a.key));h=1}if(a.keyCode==27){Q("mapSearchLocation").value="";mapCloseSearchWindow();h=1}if(a.keyCode==13){getSearchLocation()}}else{if(a.charCode!=0&&mapSearchFocus==0){Q("mapSearchLocation").value=((Q("mapSearchLocation").value+String.fromCharCode(a.charCode)));h=1}}}}function ondockeydown(a){setSessionActivity();if(!xxdialogMode&&xxcurrentView==11&&desktop&&Q("DeskControl").checked){if(currentNode!=null){var d=meshes[currentNode.meshid];var g=d.links[userinfo._id].rights;var b=((g==4294967295)||(((g&8)!=0)&&((g&256)==0)));if(b==false){return false}var c=((g!=4294967295)&&(((g&8)!=0)&&((g&256)==0)&&((g&4096)!=0)));if(c==true){if((a.altKey==true)||(a.ctrlKey==true)||((a.keyCode<32)&&(a.keyCode!=8)&&(a.keyCode!=13))||(a.keyCode>90)){return false}}}return desktop.m.handleKeyDown(a)}if(!xxdialogMode&&xxcurrentView==12&&terminal&&terminal.State==3){terminal.m.TermHandleKeyDown(a);if((a.keyCode>=37)&&(a.keyCode<=40)){haltEvent(a)}}if(!xxdialogMode&&xxcurrentView==13&&a.keyCode==116&&p13filetree!=null){haltEvent(a);return false}if(!xxdialogMode&&((xxcurrentView==15)||(xxcurrentView==115))){return agentConsoleHandleKeys(a)}if(!xxdialogMode&&xxcurrentView==4){if(a.keyCode===8&&userSearchFocus==0){var j=Q("UserSearchInput").value;Q("UserSearchInput").value=(j.substring(0,j.length-1));h=1}if(a.keyCode===27){Q("UserSearchInput").value="";h=1}if(h>0){if(h==1){masterUpdate(5)}return haltEvent(a)}}if(xxdialogMode||xxcurrentView!=1||a.ctrlKey==true||a.altKey==true||a.metaKey==true){return}var h=0;if(Q("viewselect").value<3){if(a.keyCode===8&&searchFocus==0){var j=Q("SearchInput").value;Q("SearchInput").value=(j.substring(0,j.length-1));h=1}if(a.keyCode===27){Q("SearchInput").value="";h=1}if(h>0){if(h==1){masterUpdate(5)}return haltEvent(a)}}if(Q("viewselect").value==3){if(a.keyCode===8&&mapSearchFocus==0){var j=Q("mapSearchLocation").value;Q("mapSearchLocation").value=(j.substring(0,j.length-1));h=1}if(a.keyCode===27){Q("mapSearchLocation").value="";mapCloseSearchWindow();h=1}}}function ondockeyup(a){setSessionActivity();if(!xxdialogMode&&xxcurrentView==11&&desktop&&Q("DeskControl").checked){if(currentNode!=null){var d=meshes[currentNode.meshid];var g=d.links[userinfo._id].rights;var b=((g==4294967295)||(((g&8)!=0)&&((g&256)==0)));if(b==false){return false}var c=((g!=4294967295)&&(((g&8)!=0)&&((g&256)==0)&&((g&4096)!=0)));if(c==true){if((a.altKey==true)||(a.ctrlKey==true)||((a.keyCode<32)&&(a.keyCode!=8)&&(a.keyCode!=13))||(a.keyCode>90)){return false}}}return desktop.m.handleKeyUp(a)}if(!xxdialogMode&&xxcurrentView==12&&terminal&&terminal.State==3){return terminal.m.TermHandleKeyUp(a)}if(!xxdialogMode&&xxcurrentView==13&&a.keyCode==116&&p13filetree!=null){p13folderup(9999);haltEvent(a);return false}if(!xxdialogMode&&xxcurrentView==4){if((a.keyCode===8&&searchFocus==0)||a.keyCode===27){return haltEvent(a)}}if(xxdialogMode&&a.keyCode==27){dialogclose(0)}if(xxdialogMode||xxcurrentView!=0||a.ctrlKey==true||a.altKey==true||a.metaKey==true){return}if(Q("viewselect").value<3){if((a.keyCode===8&&searchFocus==0)||a.keyCode===27){return haltEvent(a)}}if(Q("viewselect").value==3){if((a.keyCode===8&&mapSearchFocus==0)||a.keyCode===27){return haltEvent(a)}}}function ondocblur(){if(!xxdialogMode&&xxcurrentView==11&&desktop&&Q("DeskControl").checked&&desktop.m.handleReleaseKeys){return desktop.m.handleReleaseKeys()}}function devMouseHover(b,c){setSessionActivity();var d=Q("viewselect").value;if(d==1){var a=b.children[1].children[1];a.children[0].classList.remove("g1s");a.children[1].classList.remove("e2s");a.children[2].classList.remove("g2s");if(c==1){a.children[0].classList.add("g1s");a.children[1].classList.add("e2s");a.children[2].classList.add("g2s")}}else{if(d==2){var a=b;a.children[2].classList.remove("g1s");a.children[4].classList.remove("e2s");a.children[3].classList.remove("g2s");if(c==1){a.children[2].classList.add("g1s");a.children[4].classList.add("e2s");a.children[3].classList.add("g2s")}}}}var deviceHeaderId=0;var deviceHeaderTotal=0;var deviceHeadersTitles={};var deviceHeaderCount;var deviceHeaders={};var oldviewmode=0;function updateDevices(){if(nodes==null){return}var G="",a=0,g=null,e=0,l={},O=Q("viewselect").value,s={},p={};QV("xdevices",O<4);QV("xdevicesmap",O==4);QV("devListToolbar",O<3);QV("kvmListToolbar",O==3);QV("devMapToolbar",O==4);QV("devListToolbarSize",O==3);QV("NoMeshesPanel",meshcount==0);QV("devListToolbarViewIcons",(meshcount!=0)&&(nodes.length>0));QV("devListToolbarSort",(meshcount!=0)&&(nodes.length>0)&&(O<4));if((meshcount==0)||(nodes.length==0)){O=1;sort=0}if(O==4){setTimeout(function(){if(xxmap.map!=null){xxmap.map.updateSize()}},200)}else{deviceHeaderId=0;deviceHeaderCount={};deviceHeaderTotal=0;deviceHeaders={};deviceHeadersTitles={};var x=[];if(sort==0){nodes.sort(meshSort)}else{if(sort==1){nodes.sort(powerSort)}else{if(sort==2){if(showRealNames==true){nodes.sort(deviceHostSort)}else{nodes.sort(deviceSort)}}}}var d=[],m=document.getElementsByClassName("DeviceCheckbox"),b=0;for(var t=0;t<m.length;t++){if(m[t].checked){d.push(m[t].value)}}if((oldviewmode<3)&&(O==3)){multiDesktopFilter=d}else{if((oldviewmode==3)&&(O<3)){d=multiDesktopFilter}}var M=Q("column_l").clientWidth-60;var k=Math.floor(M/301);k=301+Math.floor((M-(k*301))/k);if((O==2)&&(sort!=3)){G+="<table style=width:100%;margin-top:4px cellpadding=0 cellspacing=0><th style=color:gray><th style=color:gray;width:120px>User<th style=color:gray;width:120px>Address<th style=color:gray;width:100px>Connectivity"}for(var t in nodes){var E=nodes[t];if(E.v==false){continue}var z=meshes[E.meshid],B=z.links[userinfo._id];if(B==null){continue}var C=B.rights;if((O==3)&&(z.mtype==1)){continue}if(sort==0){if(E.meshid!=g){deviceHeaderSet();var o="";if(O==2){G+="<tr><td colspan=5>"}if(meshes[E.meshid].mtype==1){o="<span class=devHeaderx>, Intel® AMT only</span>"}if((O==1)&&(g!=null)){if(a==2){G+="<td><div style=width:301px></div></td>"}if(G!=""){G+="</tr></table>"}}if(O==2){G+="<div>"}G+="<div class=DevSt style=width:100%;padding-top:4px><span style=float:right>";G+="<span id=DevxHeader"+deviceHeaderId+" class=devHeaderx></span>"+o;G+='</span><span id=MxMESH tabindex=0 style=cursor:pointer onclick=gotoMesh("'+E.meshid+"\") onkeypress=\"if (event.key=='Enter') gotoMesh('"+E.meshid+"')\">"+EscapeHtml(meshes[E.meshid].name)+"</span>"+getMeshActions(z,C)+"</div>";if(O==2){G+="</div>"}g=E.meshid;l[g]=1;a=0}}else{if(sort==1){var F=E.pwr?E.pwr:0;if(F!==g){deviceHeaderSet();if((O==1)&&(g!==null)){if(a==2){G+="<td><div style=width:301px></div></td>"}if(G!=""){G+="</tr></table>"}}if(O==2){G+="<tr><td>"}G+="<div class=DevSt style=width:100%;padding-top:4px><span id=DevxHeader"+deviceHeaderId+" class=devHeaderx style=float:right></span><span>"+PowerStateStr2(E.pwr)+"</span></div>";g=F;a=0}}else{if(sort==2){if(g==null){g="1"}}}}e++;var L=EscapeHtml(E.name);if(L.length==0){L="<i>None</i>"}if((E.rname!=null)&&(E.rname.length>0)){L+=" / "+EscapeHtml(E.rname)}var D=EscapeHtml(E.name);if(showRealNames==true&&E.rname!=null){D=EscapeHtml(E.rname)}if(D.length==0){D="<i>None</i>"}var u=E.icon;if((!E.conn)||(E.conn==0)){u+=" gray"}if(O==1){G+="<div id=devs onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=display:inline-block;width:"+k+'px;height:50px;padding-top:1px;padding-bottom:1px><div style=width:22px;height:50%;float:left;padding-top:12px><input class="'+E.meshid+' DeviceCheckbox" onclick=p1updateInfo() value=devid_'+E._id+" type=checkbox></div><div style=height:100%;cursor:pointer tabindex=0 onclick=gotoDevice('"+E._id+"',null,null,event) onkeypress=\"if (event.key=='Enter') gotoDevice('"+E._id+'\',null,null,event)"><div class="i'+u+'" style=width:50px;float:left></div><div style=height:100%><div class=g1></div><div class=e2><div class=e1 style=width:'+(k-100)+'px title="'+L+'">'+D+"</div><div>"+NodeStateStr(E)+"</div></div><div class=g2></div></div></div></div>"}else{if(O==2){var J=[];if(E.conn){if((E.conn&1)!=0){J.push('<span title="Mesh agent is connected and ready for use.">Agent</span>')}if((E.conn&2)!=0){J.push('<span title="Intel® AMT CIRA is connected and ready for use.">CIRA</span>')}else{if((E.conn&4)!=0){J.push('<span title="Intel® AMT is routable.">AMT</span>')}}if((E.conn&8)!=0){J.push('<span title="Mesh agent is reachable using another agent as relay.">Relay</span>')}}G+="<tr><td><div id=devs class=bar18 tabindex=0 onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=height:18px;width:100%;font-size:medium onkeypress=\"if (event.key=='Enter') gotoDevice('"+E._id+"',null,null,event)\">";G+='<div class=deviceBarCheckbox><input class="'+E.meshid+' DeviceCheckbox" onclick=p1updateInfo() value=devid_'+E._id+" type=checkbox></div>";G+="<div class=deviceBarIcon onclick=gotoDevice('"+E._id+"',null,null,event)><div class=\"j"+u+'" style=width:16px;margin-top:1px;margin-left:2px;height:16px></div></div>';G+="<div class=g1 style=height:18px;float:left></div><div class=g2 style=height:18px;float:right></div>";G+='<div style=cursor:pointer;font-size:14px title="'+L+"\" onclick=gotoDevice('"+E._id+"',null,null,event)><span style=width:300px>"+D+"</span></div></div></td>";G+="<td style=text-align:center>"+getUserShortStr(E);G+="<td style=text-align:center>"+(E.ip!=null?E.ip:"");G+="<td style=text-align:center>"+J.join(" + ");G+="</tr>"}else{if((O==3)&&(E.conn&1)&&(((C&8)||(C&256))!=0)&&((E.agent.caps&1)!=0)){if((multiDesktopFilter)&&((multiDesktopFilter.length==0)||(multiDesktopFilter.indexOf("devid_"+E._id)>=0))){G+="<div id=devs style=display:inline-block;margin:1px;background-color:lightgray;border-radius:5px;position:relative><div tabindex=0 style=padding:3px;cursor:pointer onclick=gotoDevice('"+E._id+"',11,null,event) onkeypress=\"if (event.key=='Enter') gotoDevice('"+E._id+"',11,null,event)\">";G+='<div class="j'+u+'" style=width:16px;float:left></div> '+D+"</div>";G+="<span onclick=gotoDevice('"+E._id+"',null,null,event)></span><div id=xkvmid_"+E._id.split("/")[2]+"><div id=skvmid_"+E._id.split("/")[2]+' tabindex=0 style="position:absolute;color:white;left:5px;top:27px;text-shadow:0px 0px 5px #000;z-index:1000;cursor:default" onclick=toggleKvmDevice(\''+E._id+"') onkeypress=\"if (event.key=='Enter') toggleKvmDevice('"+E._id+"')\">Disconnected</div></div>";G+="</div>";x.push(E._id)}}}}if((sort==3)&&(G!="")){if(E.tags){for(var w in E.tags){var K=E.tags[w];if(s[K]==null){s[K]=G;p[K]=1}else{s[K]+=G;p[K]+=1}if(O==3){break}}}G=""}deviceHeaderTotal++;if(typeof deviceHeaderCount[E.state]=="undefined"){deviceHeaderCount[E.state]=1}else{deviceHeaderCount[E.state]++}}if(sort==3){if(O==2){G="<table style=width:100%;margin-top:4px cellpadding=0 cellspacing=0><th style=color:gray><th style=color:gray;width:120px>User<th style=color:gray;width:120px>Address<th style=color:gray;width:100px>Connectivity"}var q=[];for(var t in s){q.push(t)}q.sort(function(c,j){return c.toLowerCase().localeCompare(j.toLowerCase())});for(var w in q){var t=q[w];if(O==2){G+="<tr><td colspan=4><div class=DevSt style=width:100%;padding-top:4px><span class=devHeaderx style=float:right>"+p[t]+" node"+((p[t]>1)?"s":"")+"</span><span>"+t+"</span></div>"+s[t]}else{G+="<div class=DevSt style=width:100%;padding-top:4px><span class=devHeaderx style=float:right>"+p[t]+" node"+((p[t]>1)?"s":"")+"</span><span>"+t+"</span></div>"+s[t]}}}if((G=="")&&(meshcount>0)&&(Q("SearchInput").value!="")){if(sort==3){G='<div style="margin:30px">No devices are included in any groups, click on a device\'s "Groups" to add to a group.</div>'}else{G='<div style="margin:30px">No devices matching this search.</div>'}}if((O==1)&&(a==2)){G+="<td><div style=width:301px></div></td>"}if((sort==0)&&(Q("SearchInput").value=="")&&(O<3)){for(var t in meshes){var y=meshes[t],A=y.links[userinfo._id];if(A!=null){var C=A.rights;if(l[y._id]==null){if((g!="")&&(G!="")){G+="</tr></table>"}G+='<table style=width:100%;padding-top:4px cellpadding=0 cellspacing=0><tr><td colspan=3 class=DevSt><span id=MxMESH style=cursor:pointer onclick=gotoMesh("'+y._id+'")>'+EscapeHtml(y.name)+"</span><span>";G+=getMeshActions(y,C);G+="</span></td></tr><tr>";if(y.mtype==1){G+="<td><div style=padding:10px><i>No Intel® AMT devices in this mesh";if((C&4)!=0){G+=", <a href=# style=cursor:pointer onclick='return addDeviceToMesh(\""+y._id+"\")'>add one</a>"}}if(y.mtype==2){G+="<td><div style=padding:10px><i>No devices in this mesh";if((C&4)!=0){G+=", <a href=# style=cursor:pointer onclick='return addAgentToMesh(\""+y._id+"\")'>add one</a>"}}G+=".</i></div></td>";g=y._id;e++}}}}G+="</tr></table><div style=height:1px></div>";G+="<div style=border-top-style:solid;border-top-width:1px;border-top-color:#DDDDDD;cursor:pointer;font-size:10px>";if((O<3)&&(sort==0)&&(meshcount>0)&&((userinfo.siteadmin==4294967295)||((userinfo.siteadmin&64)==0))){G+='<a href=# onclick="return account_createMesh()" title="Create a new group of devices." style=cursor:pointer>Add Device Group</a> '}if((userinfo.siteadmin==4294967295)||((userinfo.siteadmin&128)==0)){G+="<a href=# onclick='return p10showMeshCmdDialog(0)' style=cursor:pointer title=\"Download MeshCmd, a command line tool that performs many functions.\">MeshCmd</a> ";if(navigator.platform.toLowerCase()=="win32"){G+="<a href=# onclick='return p10showMeshRouterDialog()' style=cursor:pointer title=\"Download MeshCentral Router, a TCP port mapping tool.\">Router</a> "}}G+="</div><br/>";QH("xdevices",G);deviceHeaderSet();var m=document.getElementsByClassName("DeviceCheckbox"),b=0;if(d){for(var t=0;t<m.length;t++){m[t].checked=(d.indexOf(m[t].value)>=0)}}for(var t in deviceHeaders){QH(t,deviceHeaders[t])}for(var t in deviceHeadersTitles){Q(t).title=deviceHeadersTitles[t]}p1updateInfo();if(O==3){var P=[{x:180,y:101},{x:302,y:169},{x:454,y:255}][Q("sizeselect").selectedIndex];var H=P.x+2,N=M-5,R=Math.floor(N/H);R=H+Math.floor((N-(R*H))/R);P.y=P.y*(R/P.x);P.x=R;for(var t in multiDesktop){multiDesktop[t].xxdelete=true}for(var t in x){var v=x[t],I=v.split("/")[2],h=multiDesktop[v];if(h!=null){h.m.CanvasId.setAttribute("style","background-color:black;width:"+P.x+"px;height:"+P.y+"px");Q("xkvmid_"+I).appendChild(h.m.CanvasId);delete h.xxdelete;QH("skvmid_"+I,["Disconnected","Connecting...","Setup...","",""][((h.m.State==null)?h.m.state:h.m.State)])}else{var E=getNodeFromId(v);if((desktopNode==E)&&(desktop!=null)){var a=desktop.m.CanvasId;a.setAttribute("id","kvmid_"+I);a.setAttribute("style","background-color:black;width:"+P.x+"px;height:"+P.y+"px");a.setAttribute("onclick","toggleKvmDevice('"+v+"')");a.removeAttribute("onmousedown");a.removeAttribute("onmouseup");a.removeAttribute("onmousemove");Q("xkvmid_"+I).appendChild(a);QH("skvmid_"+I,["Disconnected","Connecting...","Setup...","",""][((desktop.m.State==null)?desktop.m.state:desktop.m.State)]);if(desktop.m.SendCompressionLevel){desktop.m.SendCompressionLevel(1,multidesktopsettings.quality,multidesktopsettings.scaling,multidesktopsettings.framerate)}desktop.shortid=I;desktop.onStateChanged=onMultiDesktopStateChange;multiDesktop[v]=desktop;desktop=desktopNode=currentNode=null;QH("DeskParent",'<canvas id="Desk" oncontextmenu="return false" onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event)></canvas>')}else{var a=document.createElement("canvas");a.setAttribute("id","kvmid_"+I);a.setAttribute("width",640);a.setAttribute("height",480);a.setAttribute("oncontextmenu","return false");a.setAttribute("style","background-color:black;width:"+P.x+"px;height:"+P.y+"px");a.setAttribute("onclick","toggleKvmDevice('"+v+"')");try{Q("xkvmid_"+I).appendChild(a)}catch(n){}if(Q("autoConnectDesktopCheckbox").checked==true){setTimeout(function(){connectMultiDesktop(E,1)},100)}}}}for(var t in multiDesktop){if(multiDesktop[t].xxdelete==true){multiDesktop[t].Stop();delete multiDesktop[t]}else{if(debugmode&&multiDesktop[t].m&&multiDesktop[t].m.onScreenSizeChange){mdeskAdjust(multiDesktop[t].m,multiDesktop[t].m.ScreenWidth,multiDesktop[t].m.ScreenHeight,multiDesktop[t].m.CanvasId)}}}deskAdjust()}else{disconnectAllKvmFunction();Q("autoConnectDesktopCheckbox").checked=false}}oldviewmode=O}function toggleKvmDevice(d){var c=getNodeFromId(d),a=meshes[c.meshid],b=a.links[userinfo._id].rights;if((b&8)||(b&256)){if(c.conn&1){connectMultiDesktop(c,1)}}}function getUserShortStr(b){if(b==null||b.users==null||b.users.length==0){return""}if(b.users.length>1){return'<span title="'+EscapeHtml(b.users.join(", "))+'">'+b.users.length+" users</span>"}var d=b.users[0],c=d,a=d.indexOf("\\");if(a>0){c=d.substring(a+1)}c=EscapeHtml(c);if(c.length>15){c=c.substring(0,14)+"…"}return'<span title="'+EscapeHtml(d)+'">'+c+"</span>"}function autoConnectDesktops(){if(Q("autoConnectDesktopCheckbox").checked==true){connectAllKvmFunction()}}function connectAllKvmFunction(){for(var a in nodes){if(multiDesktop[nodes[a]._id]==null){toggleKvmDevice(nodes[a]._id)}}}function disconnectAllKvmFunction(){for(var a in multiDesktop){multiDesktop[a].Stop()}multiDesktop={}}function onMultiDesktopStateChange(a,c){try{QH("skvmid_"+a.shortid,["Disconnected","Connecting...","Setup...","",""][c])}catch(b){}}function showMultiDesktopSettings(){QV("d7amtkvm",false);QV("d7meshkvm",true);d7bitmapquality.value=multidesktopsettings.quality;d7bitmapscaling.value=multidesktopsettings.scaling;if(multidesktopsettings.framerate){d7framelimiter.value=multidesktopsettings.framerate}else{d7framelimiter.value=1000}setDialogMode(7,"Remote Desktop Settings",3,showMultiDesktopSettingsChanged)}function showMultiDesktopSettingsChanged(){multidesktopsettings.quality=d7bitmapquality.value;multidesktopsettings.scaling=d7bitmapscaling.value;multidesktopsettings.framerate=d7framelimiter.value;localStorage.setItem("multidesktopsettings",JSON.stringify(multidesktopsettings));for(var a in multiDesktop){multiDesktop[a].m.SendCompressionLevel(1,multidesktopsettings.quality,multidesktopsettings.scaling,multidesktopsettings.framerate)}}function connectMultiDesktop(c,a){var d=c._id,e=d.split("/")[2];var b=multiDesktop[d];if(b==null){if(Q("kvmid_"+e)==null){return}if(a==2){if((c.intelamt.user==null)||(c.intelamt.user=="")){return}b=CreateAmtRedirect(CreateAmtRemoteDesktop("kvmid_"+e),authCookie);b.shortid=e;b.onStateChanged=onMultiDesktopStateChange;b.m.bpp=1;b.m.useZRLE=true;b.m.showmouse=true;b.m.onKvmData=function(g){console.log("KVM Data received in multi-desktop mode, this is not supported.")};if(debugmode>0){b.m.onScreenSizeChange=mdeskAdjust}b.Start(d,16994,"*","*",0);b.contype=2;multiDesktop[d]=b}else{if(a==1){b=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("kvmid_"+e),serverPublicNamePort,authCookie,domainUrl);b.shortid=e;b.attemptWebRTC=attemptWebRTC;b.onStateChanged=onMultiDesktopStateChange;b.m.CompressionLevel=multidesktopsettings.quality;b.m.ScalingLevel=multidesktopsettings.scaling;b.m.FrameRateTimer=multidesktopsettings.framerate;if(debugmode>0){b.m.onScreenSizeChange=mdeskAdjust}b.Start(d);b.contype=1;multiDesktop[d]=b}}}else{b.Stop();delete multiDesktop[d]}}function getMeshActions(a,b){if((b&4)==0){return""}var c="";if((features&1024)==0){c+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new Intel® AMT computer that is located on the internet." onclick=\'return addCiraDeviceToMesh("'+a._id+"\")'>Add CIRA</a>"}if(a.mtype==1){if((features&1)==0){c+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new Intel® AMT computer that is located on the local network." onclick=\'return addDeviceToMesh("'+a._id+"\")'>Add Local</a>";c+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new Intel® AMT computer by scanning the local network." onclick=\'return addAmtScanToMesh("'+a._id+"\")'>Scan Network</a>"}if(a.amt&&(a.amt.type==2)){c+=' <a href=# style=cursor:pointer;font-size:10px title="Perform Intel AMT client control mode (CCM) activation." onclick=\'return showCcmActivation("'+a._id+"\")'>Activation</a>"}else{if(a.amt&&(a.amt.type==3)&&((features&1048576)!=0)){c+=' <a href=# style=cursor:pointer;font-size:10px title="Perform Intel AMT admin control mode (ACM) activation." onclick=\'return showAcmActivation("'+a._id+"\")'>Activation</a>"}}}if(a.mtype==2){c+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new computer to this mesh by installing the mesh agent." onclick=\'return addAgentToMesh("'+a._id+"\")'>Add Agent</a>";c+=' <a href=# style=cursor:pointer;font-size:10px title="Invite someone to install the mesh agent on this mesh." onclick=\'return inviteAgentToMesh("'+a._id+"\")'>Invite</a>"}return c}function addDeviceToMesh(b){if(xxdialogMode){return false}var a=meshes[b];var c='Add a new Intel® AMT device to device group "'+EscapeHtml(a.name)+'".<br /><br />';c+=addHtmlValue("Device Name","<input id=dp1devicename style=width:230px maxlength=32 autocomplete=off onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />");c+=addHtmlValue("Hostname",'<input id=dp1hostname style=width:230px maxlength=32 autocomplete=off placeholder="Same as device name" onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />');c+=addHtmlValue("Username",'<input id=dp1username style=width:230px maxlength=32 autocomplete=off placeholder="admin" onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />');c+=addHtmlValue("Password","<input id=dp1password type=password style=width:230px autocomplete=off maxlength=32 onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />");c+=addHtmlValue("Security","<select id=dp1tls style=width:236px><option value=0>No TLS security</option><option value=1>TLS security required</option></select>");setDialogMode(2,"Add Intel® AMT device",3,addDeviceToMeshEx,c,b);validateDeviceToMesh();Q("dp1devicename").focus();return false}function showCcmActivation(c){if(xxdialogMode){return false}var e=serverinfo.name,b=meshes[c];if((e.indexOf(".")==-1)||((features&2)!=0)){e=window.location.hostname}var g,a=domainUrl.substring(0,domainUrl.length-1);if(serverinfo.https==true){var d=(serverinfo.port==443)?"":(":"+serverinfo.port);g="wss://"+e+d+domainUrl}else{var d=(serverinfo.port==80)?"":(":"+serverinfo.port);g="ws://"+e+d+domainUrl}var h='Perform Intel AMT client control mode (CCM) activation to group "'+EscapeHtml(b.name)+'" by downloading the MeshCMD tool and running it like this:<br /><br />';h+="<textarea readonly=readonly style=width:100%;resize:none;height:100px;overflow:auto;font-size:12px readonly>meshcmd amtccm --url "+g+"amtactivate?id="+c.split("/")[2]+" --serverhttpshash "+serverinfo.tlshash+"</textarea>";setDialogMode(2,"Intel® AMT activation",9,null,h);Q("idx_dlgOkButton").focus();return false}function showAcmActivation(c){if(xxdialogMode){return false}var e=serverinfo.name,b=meshes[c];if((e.indexOf(".")==-1)||((features&2)!=0)){e=window.location.hostname}var g,a=domainUrl.substring(0,domainUrl.length-1);if(serverinfo.https==true){var d=(serverinfo.port==443)?"":(":"+serverinfo.port);g="wss://"+e+d+domainUrl}else{var d=(serverinfo.port==80)?"":(":"+serverinfo.port);g="ws://"+e+d+domainUrl}var h='Perform Intel AMT admin control mode (ACM) activation to group "'+EscapeHtml(b.name)+'" by downloading the MeshCMD tool and running it like this:<br /><br />';h+="<textarea readonly=readonly style=width:100%;resize:none;height:100px;overflow:auto;font-size:12px readonly>meshcmd amtacm --url "+g+"amtactivate?id="+c.split("/")[2]+" --serverhttpshash "+serverinfo.tlshash+"</textarea>";if(serverinfo.amtAcmFqdn!=null){h+="<div style=margin-top:8px>Intel AMT will need to be set with a Trusted FQDN in MEBx or have a wired LAN on the network: <b>"+serverinfo.amtAcmFqdn.join(", ")+"</b></div>"}setDialogMode(2,"Intel® AMT activation",9,null,h);Q("idx_dlgOkButton").focus();return false}function addAmtScanToMesh(a){if(xxdialogMode){return false}var b="Enter a range of IP addresses to scan for Intel AMT devices.<br /><br />";b+=addHtmlValue("IP Range",'<input id=dp1range style=width:184px value="192.168.1.0/24" onkeyup=addAmtScanToMeshKeyUp(event) /><input id=dp1rangebutton type=button value=Scan onclick=addAmtScanToMeshButton()></input>');b+='<div id=dp1results style="width:100%;height:200px;background-color:white;border:1px gray solid;overflow-y:scroll"></div>';setDialogMode(2,"Scan for Intel® AMT devices",3,addAmtScanToMeshEx,b,a);QE("idx_dlgOkButton",false);QH("dp1results","<div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>");focusTextBox("dp1range");return false}function addAmtScanToMeshKeyUp(a){if(a.keyCode==13){haltEvent(a);addAmtScanToMeshButton()}}function addAmtScanToMeshEx(b,h){var d=document.getElementsByClassName("DevScanCheckbox"),c=0;for(var e=0;e<d.length;e++){if(d[e].checked){var g=d[e].getAttribute("tag");var a=amtScanResults[g];meshserver.send({action:"addamtdevice",meshid:h,devicename:g,hostname:a.hostname,amtusername:"",amtpassword:"",amttls:a.tls})}}}function addAmtScanToMeshButton(){QE("dp1range",false);QE("dp1rangebutton",false);QH("dp1results","<div style=width:100%;text-align:center;margin-top:12px>Scanning...</div>");meshserver.send({action:"scanamtdevice",range:Q("dp1range").value})}function addAmtScanToMeshCheckbox(){var b=document.getElementsByClassName("DevScanCheckbox"),a=0;for(var c=0;c<b.length;c++){if(b[c].checked){a++}}QE("idx_dlgOkButton",a>0)}function addCiraDeviceToMesh(b){if(xxdialogMode){return false}var a=meshes[b];var c=b.split("/")[2].replace(/\@/g,"X").replace(/\$/g,"X");var e="<select id=dlgAddCiraSel onclick=dlgAddCiraSelClick() style=width:230px><option value=0>MeshCommander Script</option><option value=1>Manual Username/Password</option>";if((features&16)==0){e+="<option value=2>Manual Certificate</option></select>"}var d="";d+=addHtmlValue("Setup Method",e);d+="<hr>";d+='<div id=dlgAddCira0>To add a new Intel® AMT device to device group "'+EscapeHtml(a.name)+"\" with CIRA, download the following script files and use <a href='http://meshcommander.com' rel='noreferrer noopener' target='_blank'>MeshCommander</a> to run the script to configure computers.<br /><br />";d+=addHtmlValue("Setup CIRA",'<a href="mescript.ashx?type=1&meshid='+b+'" download>cira_setup.mescript</a>');d+=addHtmlValue("Cleanup CIRA",'<a href="mescript.ashx?type=2" download>cira_clean.mescript</a>');d+="</div>";d+='<div id=dlgAddCira1 style=display:none>To add a new Intel® AMT device to device group "'+EscapeHtml(a.name)+'" with CIRA, load the following certificate as trusted root within Intel AMT';if(serverinfo.mpspass){d+=" and authenticate to the server using this username and password.<br /><br />"}else{d+=" and authenticate to the server using this username and any password.<br /><br />"}d+=addHtmlValue("Root Certificate",'<a href="MeshServerRootCert.cer" download>Root Certificate File</a>');d+=addHtmlValue("Username",'<input style=width:230px readonly value="'+c.substring(0,16)+'" />');if(serverinfo.mpspass){d+=addHtmlValue("Password",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpspass)+'" />')}if(serverinfo!=null){d+=addHtmlValue("MPS Server",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpsname)+":"+serverinfo.mpsport+'" />')}d+="</div>";if((features&16)==0){d+='<div id=dlgAddCira2 style=display:none>To add a new Intel® AMT device to device group "'+EscapeHtml(a.name)+'" with CIRA, load the following certificate as trusted root within Intel AMT, authenticate using a client certificate with the following common name and connect to the following server.<br /><br />';d+=addHtmlValue("Root Certificate",'<a href="MeshServerRootCert.cer" download>Root Certificate File</a>');d+=addHtmlValue("Organization",'<input style=width:230px readonly value="'+c+'" />');if(serverinfo!=null){d+=addHtmlValue("MPS Server",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpsname)+":"+serverinfo.mpsport+'" />')}d+="</div>"}setDialogMode(2,"Add Intel® AMT CIRA device",2,null,d,"fileDownload");Q("dlgAddCiraSel").focus();return false}function dlgAddCiraSelClick(){var a=Q("dlgAddCiraSel").value;QV("dlgAddCira0",a==0);QV("dlgAddCira1",a==1);QV("dlgAddCira2",a==2)}function checkEmail(c){var d=c.split("@");var b=((d.length==2)&&(d[0].length>0)&&(d[1].split(".").length>1)&&(d[1].length>2));if(b==true){var e=d[1].split(".");for(var a in e){if(e[a].length==0){b=false}}}return b}function inviteAgentToMesh(b){if(xxdialogMode){return false}var c="",a=meshes[b];if(features&64){c+=addHtmlValue("Invitation Type","<select id=d2InviteType onchange=d2ChangedInviteType() style=width:236px><option value=0>Link invitation</option><option value=1>Email invitation</option></select>")+"<hr />";c+='<div id=emailInviteDiv style=display:none>Invite someone to install the mesh agent. An email with be sent with the link to the mesh agent installation for the "'+EscapeHtml(a.name)+'" device group.<br /><br />';c+=addHtmlValue("Name (optional)",'<input id=agentInviteName value="" style=width:230px maxlength=64 />');c+=addHtmlValue("Email",'<input id=agentInviteEmail style=width:230px placeholder="example@email.com" onkeyup=validateAgentInvite()></input>');c+=addHtmlValue("Operating System","<select id=agentInviteNameOs onchange=d2ChangedInviteType() style=width:236px><option value=4>Send installation link</option><option value=0 selected>Any supported</option><option value=1>Windows only</option><option value=3>Apple MacOS only</option><option value=2>Linux only</option></select>");c+="<div id=d2agentexpirediv>";c+=addHtmlValue("Link Expiration","<select id=agentInviteExpire style=width:236px><option value=1>1 hour</option><option value=8>8 hours</option><option value=24>1 day</option><option value=168>1 week</option><option value=5040>1 month</option><option value=0>Unlimited</option></select>");c+="</div>";c+=addHtmlValue("Installation Type","<select id=agentInviteType style=width:236px><option value=0>Background and interactive</option><option value=2>Background only</option><option value=1>Interactive only</option></select>");c+=addHtmlValue("Message<br />(optional)",'<textarea id=agentInviteMessage value="" style=width:230px;height:100px;resize:none maxlength=1024 /></textarea>');c+="</div>"}c+='<div id=urlInviteDiv>Invite someone to install the mesh agent by sharing an invitation link. This link points the user to installation instructions for the "'+EscapeHtml(a.name)+'" device group. The link is public and no account for this server is needed.<br /><br />';c+=addHtmlValue("Link Expiration","<select id=d2inviteExpire style=width:236px onchange=d2RequestInvitationLink()><option value=1>1 hour</option><option value=8>8 hours</option><option value=24>1 day</option><option value=168>1 week</option><option value=5040>1 month</option><option value=0>Unlimited</option></select>");c+='<div id=agentInvitationLinkDiv style="text-align:center;font-size:large;margin:16px;display:none"><a href=# id=agentInvitationLink target="_blank" style=cursor:pointer></a> <img src=images/link4.png height=10 width=10 title="Copy link to clipboard" style=cursor:pointer onclick=d2CopyInviteToClip()></div></div>';setDialogMode(2,"Invite",3,performAgentInvite,c,b);if(features&64){Q("d2InviteType").focus();d2ChangedInviteType()}else{Q("d2inviteExpire").focus();validateAgentInvite()}d2RequestInvitationLink();return false}function d2RequestInvitationLink(){meshserver.send({action:"createInviteLink",meshid:xxdialogTag,expire:parseInt(Q("d2inviteExpire").value),flags:0})}function d2ChangedInviteType(){QV("urlInviteDiv",Q("d2InviteType").value==0);QV("d2agentexpirediv",Q("agentInviteNameOs").value==4);QV("emailInviteDiv",Q("d2InviteType").value==1);validateAgentInvite()}function d2CopyInviteToClip(){copyTextToClip(Q("agentInvitationLink").href)}function validateAgentInvite(){if((features&64)&&(Q("d2InviteType").value==1)){QE("idx_dlgOkButton",checkEmail(Q("agentInviteEmail").value));QV("idx_dlgCancelButton",true)}else{QE("idx_dlgOkButton",true);QV("idx_dlgCancelButton",false)}}function performAgentInvite(a,b){if((features&64)&&(Q("d2InviteType").value==1)){meshserver.send({action:"inviteAgent",meshid:b,email:Q("agentInviteEmail").value,name:Q("agentInviteName").value,os:Q("agentInviteNameOs").value,flags:Q("agentInviteType").value,msg:Q("agentInviteMessage").value,expire:parseInt(Q("agentInviteExpire").value)})}}function addAgentToMesh(e){if(xxdialogMode){return false}var c=meshes[e],j="",b=0;j+=addHtmlValue("Operating System","<select id=aginsSelect onchange=addAgentToMeshClick() style=width:236px><option value=0>Windows</option><option value=1>Linux / BSD</option><option value=2>Apple MacOS</option><option value=3>Windows (UnInstall)</option><option value=4>Linux / BSD (UnInstall)</option></select>");j+="<div id=aginsTypeDiv>";j+=addHtmlValue("Installation Type","<select id=aginsType onchange=addAgentToMeshClick() style=width:236px><option value=0>Background & interactive</option><option value=2>Background only</option><option value=1>Interactive only</option></select>");j+="</div><hr>";var d=c.name;d=d.split("\\").join("").split("/").join("").split(":").join("").split("*").join("").split("?").join("").split('"').join("").split("<").join("").split(">").join("").split("|").join("").split(" ").join("").split("'").join("");j+='<div id=agins_windows>To add a new computer to device group "'+EscapeHtml(c.name)+'", download the mesh agent and install it the computer to manage. This agent has server and device group information embedded within it.<br /><br />';j+=addHtmlValue("Mesh Agent",'<a id=aginsw32lnk href="meshagents?id=3&meshid='+e.split("/")[2]+'&installflags=0" download onclick="setDialogMode(0)" title="32bit version of the MeshAgent">Windows (.exe)</a> <img src=images/link4.png height=10 width=10 title="Copy Windows 32bit agent URL to clipboard" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=3&meshid='+e.split("/")[2]+'&installflags=",1)>');j+=addHtmlValue("Mesh Agent",'<a id=aginsw64lnk href="meshagents?id=4&meshid='+e.split("/")[2]+'&installflags=0" download onclick="setDialogMode(0)" title="64bit version of the MeshAgent">Windows x64 (.exe)</a> <img src=images/link4.png height=10 width=10 title="Copy Windows 64bit agent URL to clipboard" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=4&meshid='+e.split("/")[2]+'&installflags=",1)>');if(debugmode>0){j+=addHtmlValue("Settings File",'<a id=aginswmshlnk href="meshsettings?id='+e.split("/")[2]+'&installflags=0" rel="noreferrer noopener" target="_blank">'+EscapeHtml(c.name)+" settings (.msh)</a>")}j+="</div>";j+="<div id=agins_linux style=display:none>To add a computer to "+EscapeHtml(c.name)+" run the following command. Root credentials will be needed.<br />";j+="<textarea id=agins_linux_area rows=2 cols=20 readonly=readonly style=width:100%;resize:none;height:120px;overflow:scroll;font-size:12px readonly></textarea>";j+="<div style='font-size:x-small'>* For BSD, run \"pkg install wget sudo bash\" first.</div></div>";j+='<div id=agins_osx style=display:none>To add a new computer to device group "'+EscapeHtml(c.name)+'", download the mesh agent and install it the computer to manage. This agent installer has server and device group information embedded within it.<br /><br />';j+=addHtmlValue("Mesh Agent",'<a href="meshosxagent?id=16&meshid='+e.split("/")[2]+'" rel="noreferrer noopener" target="_blank" title="64bit version of MacOS Mesh Agent">MacOS Agent (64bit)</a> <img src=images/link4.png height=10 width=10 title="Copy MacOS agent URL to clipboard" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=16&meshid='+e.split("/")[2]+'",0)>');j+="</div>";j+='<div id=agins_windows_un style=display:none>To remove a mesh agent, download the file below, run it and click "uninstall".<br /><br />';j+=addHtmlValue("Mesh Agent",'<a href="meshagents?id=3" download onclick="setDialogMode(0)" title="32bit version of the MeshAgent">Windows (.exe)</a>');j+=addHtmlValue("Mesh Agent",'<a href="meshagents?id=4" download onclick="setDialogMode(0)" title="64bit version of the MeshAgent">Windows x64 (.exe)</a>');j+="</div>";j+="<div id=agins_linux_un style=display:none>To remove a mesh agent, run the following command. Root credentials will be needed.<br />";j+="<textarea id=agins_linux_area_un rows=2 cols=20 readonly=readonly style=width:100%;resize:none;height:120px;overflow:scroll;font-size:12px readonly></textarea>";j+="</div>";setDialogMode(2,"Add Mesh Agent",2,null,j,"fileDownload");var h=serverinfo.name;if((h.indexOf(".")==-1)||((features&2)!=0)){h=window.location.hostname}var a=domainUrl.substring(0,domainUrl.length-1);if(serverinfo.https==true){var g=(serverinfo.port==443)?"":(":"+serverinfo.port);if((features&8192)==0){Q("agins_linux_area").value="(wget https://"+h+g+domainUrl+"meshagents?script=1 --no-check-certificate -O ./meshinstall.sh || wget https://"+h+g+domainUrl+"meshagents?script=1 --no-proxy --no-check-certificate -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo -E ./meshinstall.sh https://"+h+g+a+" '"+e.split("/")[2]+"'\r\n";Q("agins_linux_area_un").value="(wget https://"+h+g+domainUrl+"meshagents?script=1 --no-check-certificate -O ./meshinstall.sh || wget https://"+h+g+domainUrl+"meshagents?script=1 --no-proxy --no-check-certificate -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n"}else{Q("agins_linux_area").value="wget https://"+h+g+domainUrl+"meshagents?script=1 --no-proxy --no-check-certificate -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh https://"+h+g+a+" '"+e.split("/")[2]+"'\r\n";Q("agins_linux_area_un").value="wget https://"+h+g+domainUrl+"meshagents?script=1 --no-proxy --no-check-certificate -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n"}}else{var g=(serverinfo.port==80)?"":(":"+serverinfo.port);if((features&8192)==0){Q("agins_linux_area").value="(wget http://"+h+g+domainUrl+"meshagents?script=1 -O ./meshinstall.sh || wget http://"+h+g+domainUrl+"meshagents?script=1 --no-proxy -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo -E ./meshinstall.sh http://"+h+g+a+" '"+e.split("/")[2]+"'\r\n";Q("agins_linux_area_un").value="(wget http://"+h+g+domainUrl+"meshagents?script=1 -O ./meshinstall.sh || wget http://"+h+g+domainUrl+"meshagents?script=1 --no-proxy -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n"}else{Q("agins_linux_area").value="wget http://"+h+g+domainUrl+"meshagents?script=1 --no-proxy -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh http://"+h+g+a+" '"+e.split("/")[2]+"'\r\n";Q("agins_linux_area_un").value="wget http://"+h+g+domainUrl+"meshagents?script=1 --no-proxy -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n"}}Q("aginsSelect").focus();addAgentToMeshClick();return false}function copyAgentUrl(h,a){var g=serverinfo.name;if((g.indexOf(".")==-1)||((features&2)!=0)){g=window.location.hostname}var d=domainUrl.substring(0,domainUrl.length-1);var e=(serverinfo.port==443)?"":(":"+serverinfo.port);var b="https://"+g+e+domainUrl+h;if(a==1){b+=Q("aginsType").value}copyTextToClip(b)}function addAgentToMeshClick(){var a=Q("aginsSelect").value;QV("agins_windows",a==0);QV("agins_linux",a==1);QV("agins_osx",a==2);QV("agins_windows_un",a==3);QV("agins_linux_un",a==4);QV("aginsTypeDiv",a==0);Q("aginsw32lnk").href=(Q("aginsw32lnk").href.split("installflags=")[0])+"installflags="+Q("aginsType").value;Q("aginsw64lnk").href=(Q("aginsw64lnk").href.split("installflags=")[0])+"installflags="+Q("aginsType").value;if(debugmode>0){Q("aginswmshlnk").href=(Q("aginswmshlnk").href.split("installflags=")[0])+"installflags="+Q("aginsType").value}}function validateDeviceToMesh(){QE("idx_dlgOkButton",(Q("dp1devicename").value.length>0)&&(passwordcheck(Q("dp1password").value)))}function addDeviceToMeshEx(b,d){var a=Q("dp1username").value;if(a==""){a="admin"}var c=Q("dp1hostname").value;if(c==""){c=Q("dp1devicename").value}meshserver.send({action:"addamtdevice",meshid:d,devicename:Q("dp1devicename").value,hostname:c,amtusername:a,amtpassword:Q("dp1password").value,amttls:Q("dp1tls").value})}function deviceHeaderSet(){if(deviceHeaderId==0){deviceHeaderId=1;return}deviceHeaders["DevxHeader"+deviceHeaderId]=deviceHeaderTotal+((deviceHeaderTotal==1)?" node":" nodes");deviceHeaderId++;deviceHeaderCount={};deviceHeaderTotal=0}var powerStateStrings=["",'<span title="Device is powered on.">Powered</span>','<span title="Device is in sleep state (S1).">Sleeping</span>','<span title="Device is in sleep state (S2).">Sleeping</span>','<span title="Device is in deep sleep state (S3).">Deep Sleep</span>','<span title="Device is in hibernating state (S4).">Hibernating</span>','<span title="Device is in powered off state (S5).">Soft-Off</span>','<span title="Device is detected but power state could not be obtained.">Present</span>'];var powerStateStrings2=["","Device is powered","Device is in sleep state (S1)","Device is in sleep state (S2)","Device is in deep sleep state (S3)","Device is hibernating (S4)","Device is in soft-off state (S5)","Device is present, but power state cannot be determined"];var powerColorTable=["pwsTransparent","pwsBlack","pwsBlue","pwsBlue2","pwsLightblue","pwsBlueviolet","pwsDarkgreen","pwsLightseagreen","pwsLightseagreen2"];function NodeStateStr(a){var b=[];if(a.state>0&&a.state<powerStatetable.length){state.push(powerStatetable[a.state])}if(a.conn){if((a.conn&1)!=0){b.push('<span title="Mesh agent is connected and ready for use.">Agent</span>')}if((a.conn&2)!=0){b.push('<span title="Intel® AMT CIRA is connected and ready for use.">CIRA</span>')}else{if((a.conn&4)!=0){b.push('<span title="Intel® AMT is routable.">Intel® AMT</span>')}}if((a.conn&8)!=0){b.push('<span title="Mesh agent is reachable using another agent as relay.">Relay</span>')}}if((a.pwr!=null)&&(a.pwr!=0)){b.push(powerStateStrings[a.pwr])}return b.join(", ")}function PowerStateStr(a){if(a<powerStatetable.length){return powerStatetable[a]}return""}function PowerStateStr2(a){if((a!=0)&&(a<powerStatetable.length)){return powerStatetable[a]}return"Unknown"}function selectallButtonFunction(){var b=document.getElementsByClassName("DeviceCheckbox"),a=0;for(var c=0;c<b.length;c++){if(b[c].checked===true){a++}}for(var c=0;c<b.length;c++){b[c].checked=(a==0)}p1updateInfo()}function p1updateInfo(){var b=document.getElementsByClassName("DeviceCheckbox"),a=0;for(var c=0;c<b.length;c++){if(b[c].checked===true){a++}}if(a>0){QE("GroupActionButton",true);Q("SelectAllButton").value="Select None";QV("cxmgroupsplit",true);QV("cxmdesktop",true)}else{QE("GroupActionButton",false);Q("SelectAllButton").value="Select All";QV("cxmgroupsplit",false);QV("cxmdesktop",false)}}function groupActionFunction(){var a="Select an operation to perform on all selected devices. Actions will be performed only with proper rights.<br /><br />";a+=addHtmlValue("Operation","<select id=d2groupop><option value=100>Wake-up devices</option><option value=4>Sleep devices</option><option value=3>Reset devices</option><option value=2>Power off devices</option><option value=102>Move to device group</option><option value=101>Delete devices</option></select>");setDialogMode(2,"Group Action",3,groupActionFunctionEx,a)}function getCheckedDevices(){var e=[],b=document.getElementsByClassName("DeviceCheckbox"),a=0;for(var c=0;c<b.length;c++){if(b[c].checked){if(b[c].value){var d=b[c].value.substring(6);if(e.indexOf(d)==-1){e.push(d)}}}}return e}function groupActionFunctionEx(){var a=Q("d2groupop").value;if(a==100){meshserver.send({action:"wakedevices",nodeids:getCheckedDevices()})}else{if(a==101){var b="Confirm delete selected devices(s)?<br /><br />";b+="<label><input id=d2check type=checkbox onchange=d2groupActionFunctionDelEx() />Confirm</label>";setDialogMode(2,"Delete Nodes",3,groupActionFunctionDelEx,b);QE("idx_dlgOkButton",false)}else{if(a==102){p10showChangeGroupDialog(getCheckedDevices())}else{meshserver.send({action:"poweraction",nodeids:getCheckedDevices(),actiontype:a})}}}}function d2groupActionFunctionDelEx(){QE("idx_dlgOkButton",Q("d2check").checked)}function groupActionFunctionDelEx(){meshserver.send({action:"removedevices",nodeids:getCheckedDevices()})}function onSortSelectChange(a){sort=document.getElementById("sortselect").selectedIndex;if(!a){putstore("sort",sort)}}function meshSort(c,d){if(c.meshnamel>d.meshnamel){return 1}if(c.meshnamel<d.meshnamel){return -1}if(c.meshid==d.meshid){if(showRealNames==true){if(c.rnamel>d.rnamel){return 1}if(c.rnamel<d.rnamel){return -1}return 0}else{if(c.namel>d.namel){return 1}if(c.namel<d.namel){return -1}return 0}}return 0}function powerSort(c,e){var d=c.pwr?c.pwr:0;var g=e.pwr?e.pwr:0;if(d>g){return -1}if(d<g){return 1}if(d==g){if(showRealNames==true){if(c.rnamel>e.rnamel){return 1}if(c.rnamel<e.rnamel){return -1}return 0}else{if(c.namel>e.namel){return 1}if(c.namel<e.namel){return -1}return 0}}return 0}function deviceSort(c,d){if(c.namel>d.namel){return 1}if(c.namel<d.namel){return -1}return 0}function deviceHostSort(c,d){if(c.rnamel>d.rnamel){return 1}if(c.rnamel<d.rnamel){return -1}return 0}function onSearchFocus(a){searchFocus=a}function onMapSearchFocus(a){mapSearchFocus=a}function onUserSearchFocus(a){userSearchFocus=a}function onConsoleFocus(a){consoleFocus=a}function onSearchInputChanged(){var m=Q("SearchInput").value.toLowerCase().trim();putstore("_search",m);var l=null,g=null,c=null;if(m.startsWith("user:")){l=m.substring(5)}else{if(m.startsWith("u:")){l=m.substring(2)}else{if(m.startsWith("ip:")){g=m.substring(3)}else{if(m.startsWith("group:")){c=m.substring(6)}else{if(m.startsWith("g:")){c=m.substring(2)}}}}}if(m==""){for(var a in nodes){nodes[a].v=true}}else{if(g!=null){for(var a in nodes){nodes[a].v=((nodes[a].ip!=null)&&(nodes[a].ip.indexOf(g)>=0))}}else{if(c!=null){for(var a in nodes){nodes[a].v=(meshes[nodes[a].meshid].name.toLowerCase().indexOf(c)>=0)}}else{if(l!=null){for(var a in nodes){nodes[a].v=false;if(nodes[a].users&&nodes[a].users.length>0){for(var e in nodes[a].users){if(nodes[a].users[e].toLowerCase().indexOf(l)>=0){nodes[a].v=true}}}}}else{try{var h=m.split(/\s+/).join("|"),j=new RegExp(h);for(var a in nodes){nodes[a].v=(j.test(nodes[a].name.toLowerCase()))||(nodes[a].rnamel!=null&&j.test(nodes[a].rnamel.toLowerCase()));if((nodes[a].v==false)&&nodes[a].tags){for(var k in nodes[a].tags){if(j.test(nodes[a].tags[k].toLowerCase())){nodes[a].v=true;break}else{nodes[a].v=false}}}}}catch(b){for(var a in nodes){nodes[a].v=true}}}}}}}var contextelement=null;function handleContextMenu(d){hideContextMenu();var m=(window.pageXOffset!==null)?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft;var n=(window.pageYOffset!==null)?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop;var c=document.elementFromPoint(d.pageX-m,d.pageY-n);if(c&&c!=null&&c.id=="connectbutton2"&¤tNode&¤tNode.agent&&(currentNode.agent.id>0)&&(currentNode.agent.id<5)){contextelement=c;var b=document.getElementById("termShellContextMenu");b.style.left=d.pageX+"px";b.style.top=d.pageY+"px";b.style.display="block"}else{if(c&&c!=null&&c.id=="MxMESH"){contextelement=c;var b=document.getElementById("meshContextMenu");b.style.left=d.pageX+"px";b.style.top=d.pageY+"px";b.style.display="block"}else{while(c&&c!=null&&c.id!="devs"){c=c.parentElement}if(!c||c==null){return true}contextelement=c;var b=document.getElementById("contextMenu");b.style.left=d.pageX+"px";b.style.top=d.pageY+"px";b.style.display="block";var l=contextelement.children[1].attributes.onclick.value;var k=getNodeFromId(l.substring(12,l.length-18));var g=meshes[k.meshid];var h=g.links[userinfo._id];var j=h.rights;var a=((j&16)!=0);var o=((j==4294967295)||((j&512)==0));var e=((j==4294967295)||((j&1024)==0));QV("cxdesktop",((g.mtype==1)||(k.agent==null)||(k.agent.caps==null)||((k.agent.caps&1)!=0)||(k.intelamt&&(k.intelamt.state==2)))&&((j&8)||(j&256)));QV("cxterminal",((g.mtype==1)||(k.agent==null)||(k.agent.caps==null)||((k.agent.caps&2)!=0)||(k.intelamt&&(k.intelamt.state==2)))&&(j&8)&&o);QV("cxfiles",((g.mtype==2)&&((k.agent==null)||(k.agent.caps==null)||((k.agent.caps&4)!=0)))&&(j&8)&&e);QV("cxevents",(k.intelamt!=null)&&((k.intelamt.state==2)||(k.conn&2))&&(j&8));QV("cxconsole",(a&&(g.mtype==2)&&((k.agent==null)||(k.agent.caps==null)||((k.agent.caps&8)!=0)))&&(j&8))}}return haltEvent(d)}function cmaction(a,b){var d=contextelement.children[1].attributes.onclick.value;d=d.substring(12,d.length-18);if(a==7){Q("viewselect").value=3;Q("viewselect").onchange();Q("autoConnectDesktopCheckbox").checked=true;Q("autoConnectDesktopCheckbox").onclick()}if((a>0)&&(a<7)){var e=[0,10,12,11,13,16,15][a];if(b&&(b.shiftKey==true)){window.open(window.location.origin+"?node="+d.split("/")[2]+"&viewmode="+e+"&hide=16","meshcentral:"+d)}else{gotoDevice(d,e);var c=meshes[currentNode.meshid];if((currentNode.conn&1)&&(c.mtype==2)){if((e==11)&&(desktop==null)&&(currentNode.agent.caps&1)){connectDesktop(null,1)}if((e==12)&&(terminal==null)&&(currentNode.agent.caps&2)){connectTerminal(null,1)}if((e==13)&&(files==null)){connectFiles(null)}}}}}function cmmeshaction(a){var d=contextelement.attributes.onclick.value.substring(10,contextelement.attributes.onclick.value.length-2);var b=document.getElementsByClassName("DeviceCheckbox");if((a==1)||(a==2)){for(var c=0;c<b.length;c++){if((b[c].attributes)&&(b[c].attributes["class"]["value"].split(" ")[0]==d)){b[c].checked=(a==1)}}}p1updateInfo()}function cmtermaction(a){connectTerminal(null,1,{powershell:(a==2)})}function hideContextMenu(){QV("contextMenu",false);QV("meshContextMenu",false);QV("termShellContextMenu",false);contextelement=null}var xxmap={map:null,contextmenu:null,activeInteractions:[],showindex:0,markersSource:null,markersLayer:null,mapLayer:null,mapView:null,};function updateMapMarkers(j){if((xxmap!=null)&&(xxmap.map==null)){try{loadmap()}catch(b){console.error("loadmap() exception",b)}}if(xxmap==null){return}var a=null;for(var d in nodes){try{var g=map_parseNodeLoc(nodes[d]),c=xxmap.markersSource.getFeatureById(nodes[d]._id);if((g!=null)&&((nodes[d].meshid==j)||(j==null))){var e=g[0],h=g[1],k=g[2];if(a==null){a=[e,h,e,h,0]}else{if(e<a[0]){a[0]=e}if(h<a[1]){a[1]=h}if(e>a[2]){a[2]=e}if(h>a[3]){a[3]=h}}if(c==null){addFeature(nodes[d]);a[4]=1}else{updateFeature(nodes[d],c);c.setStyle(markerStyle(nodes[d],g[2]))}}else{if(c){xxmap.markersSource.removeFeature(c)}}}catch(b){console.error("updateMapMarkers() exception",b,JSON.stringify(nodes[d]))}}return a}var map_cm_popup=new ol.Overlay({element:Q("xmap-info-window"),positioning:"bottom-center",stopEvent:false});var map_cm_editMarker={text:"Modify node location",callback:function(a){modifyMarkerloc(a.data)}};var map_cm_clearMarker={text:"Remove node location",callback:function(a){meshserver.send({action:"changedevice",nodeid:a.data.a,userloc:[]})}};var map_cm_saveMarker={text:"Save node location",callback:function(a){saveMarkerloc(a.data)}};var map_cm_nodemenu_items=[{text:"General information",callback:function(a){if(a.data!=null){gotoDevice(a.data,10)}}},{text:"Desktop",callback:function(a){if(a.data!=null){gotoDevice(a.data,11)}}},{text:"Terminal",callback:function(a){if(a.data!=null){gotoDevice(a.data,12)}}},{text:"Intel® AMT",callback:function(a){if(a.data!=null){gotoDevice(a.data,14)}}},"-",{text:"Zoom-in to extent",callback:function(b){var a=b.data.getGeometry().getCoordinates();zoomToLocation(a,19)}},{text:"Zoom-out to extent",callback:function(b){var a=b.data.getGeometry().getCoordinates();zoomToLocation(a,2)}}];var contextmenu_items=[{text:"Refresh",callback:function(){refreshMap(true,true)}},{text:"Zoom to fit extent",callback:function(){zoomToFitExtent()}},{text:"Center map here",callback:function(a){xxmap.mapView.animate({center:a.coordinate})}},{text:"Place node here",callback:function(a){placeNode(a.coordinate)}}];function stringToIntHash(c){var a=0,b;for(b=0;b<c.length;b++){a=((a<<5)-a)+c.charCodeAt(b);a|=0}return a}function map_parseNodeLoc(b){var a=null,c=0;if(b.iploc){a=b.iploc;c=1}if(b.wifiloc){a=b.wifiloc;c=2}if(b.gpsloc){a=b.gpsloc;c=3}if(b.userloc){a=b.userloc;c=4}if((a==null)||(typeof a!="string")){return null}a=a.split(",");if(c==1){return[parseFloat(a[0])+(stringToIntHash(b._id.substring(0,20))/100000000000),parseFloat(a[1])+(stringToIntHash(b._id.substring(20))/100000000000),c]}else{return[parseFloat(a[0]),parseFloat(a[1]),c]}}function loadmap(){if(xxmap==null){return}if((features&32768)==0){QV("viewselectmapoption",false);QV("devViewButton4",false);xxmap=null;return}try{xxmap.markersSource=new ol.source.Vector();xxmap.markersLayer=new ol.layer.Vector({source:xxmap.markersSource});xxmap.mapLayer=new ol.layer.Tile({source:new ol.source.OSM()});xxmap.mapView=new ol.View({center:ol.proj.transform([0,0],"EPSG:4326","EPSG:3857"),zoom:2,minZoom:2,maxZoom:20,extent:ol.proj.transformExtent([-100000,-69.55,100000,69.55],"EPSG:4326","EPSG:3857")});xxmap.map=new ol.Map({target:"xdevicesmap",layers:[xxmap.mapLayer,xxmap.markersLayer],view:xxmap.mapView});xxmap.map.addOverlay(map_cm_popup);xxmap.map.on("click",function(c){var d=xxmap.map.forEachFeatureAtPixel(c.pixel,function(h,j){return h});if(d){var g=d.getId();if(g!=null){gotoDevice(g,10)}else{var e=getCorrespondingFeature(d);gotoDevice(e.getId(),10)}}});xxmap.map.on("pointermove",function(d){var g=xxmap.map.forEachFeatureAtPixel(d.pixel,function(j,k){return j});if(g){xxmap.map.getTargetElement().style.cursor="pointer";var c=g.getGeometry().getCoordinates();map_cm_popup.setPosition(c);var e=g.getId();if(e){QH("xmap-info-window",g.get("name"))}else{var h=getCorrespondingFeature(g);QH("xmap-info-window",h.get("name"))}}else{xxmap.map.getTargetElement().style.cursor="";QH("xmap-info-window","")}});var a=new ContextMenu({width:160,defaultItems:false,items:contextmenu_items});a.on("open",function(c){var e=xxmap.map.forEachFeatureAtPixel(c.pixel,function(h,j){return h});xxmap.contextmenu.clear();if(e){var d=e.getId();if(d){addContextMenuItems(e)}else{var g=getCorrespondingFeature(e);if(g){addContextMenuItems(g)}else{xxmap.contextmenu.extend(contextmenu_items)}}}else{xxmap.contextmenu.extend(contextmenu_items)}});if(xxmap.contextmenu==null){xxmap.contextmenu=a}xxmap.map.addControl(xxmap.contextmenu)}catch(b){console.log(b);QV("viewselectmapoption",false);QV("devViewButton4",false);xxmap=null}}function addFeature(g,c,e){var a=getModifiedFeature(g._id);if(a){xxmap.markersSource.addFeature(a)}else{if(!c&&!e){var d=map_parseNodeLoc(g);c=d[0];e=d[1]}if(e>180){e=180-e;meshserver.send({action:"changedevice",nodeid:g._id,userloc:[c,e]})}if((c<90)&&(c>-90)&&(e<180)&&(e>-180)){var b=new ol.Feature({geometry:new ol.geom.Point(ol.proj.transform([e,c],"EPSG:4326","EPSG:3857")),name:g.name,status:g.conn,lat:c,lon:e});b.setId(g._id);b.setStyle(markerStyle(g));xxmap.markersSource.addFeature(b)}}}function removeFeature(b){var a=xxmap.markersSource.getFeatureById(b._id);if(a){xxmap.markersSource.removeFeature(a)}}function updateFeature(g,a){if(g.conn!=a.get("status")){a.set("status",g.conn);a.setStyle(markerStyle(g))}var c=map_parseNodeLoc(g);if(c!=null){var b=c[0],d=c[1];if((b!=a.get("lat"))||(d!=a.get("lon"))){a.set("lat",b);a.set("lon",d);var e=ol.proj.transform([parseFloat(d),parseFloat(b)],"EPSG:4326","EPSG:3857");a.getGeometry().setCoordinates(e)}}if(g.name!=a.get("name")){a.set("name",g.name)}}function modifyMarkerloc(c){var b=c.getId();if(b){c.setStyle(markerStyle(getNodeFromId(c.a),4));if(!getActiveInteractions(c)){var a=new ol.interaction.Modify({features:new ol.Collection([c]),pixelTolerance:10});xxmap.activeInteractions.push({featureid:b,feature:c,interaction:a});xxmap.map.addInteraction(a)}}}function saveMarkerloc(d){var c=d.getId();if(c){var a=getActiveInteractions(d);if(a){xxmap.map.removeInteraction(a);removeInteraction(c);var b=d.getGeometry().getCoordinates();var e=ol.proj.transform(b,"EPSG:3857","EPSG:4326");if(e[0]>180){e[0]=180-e[0]}var g=[e[1],e[0]];meshserver.send({action:"changedevice",nodeid:c,userloc:g})}}}function markerStyle(b,d){if(d==null){d=0;if(b.iploc){d=1}if(b.wifiloc){d=2}if(b.gpsloc){d=3}if(b.userloc){d=4}}var e=["","-ip","-wifi","-gps","-user"];var a=connStateColor(b);var c=new ol.style.Style({image:new ol.style.Icon({color:a,anchor:[0.5,1],src:"images/mapmarker"+e[d]+".png"})});return[c]}function connStateColor(a){if(a.conn==1||a.conn==3||a.conn==5){return"#00ffdd"}return"#C70039"}function addContextMenuItems(a){if(getActiveInteractions(a)){map_cm_saveMarker.data=a;xxmap.contextmenu.push(map_cm_saveMarker)}else{map_cm_editMarker.data=a;xxmap.contextmenu.push(map_cm_editMarker);var b=getNodeFromId(a.a);if(b.userloc){map_cm_clearMarker.data=a;xxmap.contextmenu.push(map_cm_clearMarker)}}map_cm_nodemenu_items.forEach(function(c){if(c.text=="Zoom-in to extent"||c.text=="Zoom-out to extent"){c.data=a}else{if(c!="-"){c.data=a.getId()}}});xxmap.contextmenu.extend(map_cm_nodemenu_items)}function getActiveInteractions(b){var a=b.getId();for(var c=0;c<xxmap.activeInteractions.length;c++){if(xxmap.activeInteractions[c].featureid==a){return xxmap.activeInteractions[c].interaction}}return false}function getModifiedFeature(a){if(a){for(var b=0;b<xxmap.activeInteractions.length;b++){if(xxmap.activeInteractions[b].featureid==a){return xxmap.activeInteractions[b].feature}}}return null}function removeInteraction(a){var c=-1;for(var b=0;b<xxmap.activeInteractions.length;b++){if(xxmap.activeInteractions[b].featureid===a){c=b;break}}if(c>=0){xxmap.activeInteractions.splice(c,1)}}function getCorrespondingFeature(e){var d=e.getGeometry().getCoordinates();for(var b=0;b<xxmap.activeInteractions.length;b++){var c=xxmap.activeInteractions[b].feature;var a=c.getGeometry().getCoordinates();if(a[0].toFixed(5)==d[0].toFixed(5)&&a[1].toFixed(5)==d[1].toFixed(5)){return c}}return null}function refreshMap(k,h){if(k){xxmap.map.setTarget(null);xxmap.map=null;xxmap.markersSource=null;xxmap.mapView=null;xxmap.mapLayer=null;xxmap.activeInteractions=[]}var a=updateMapMarkers();if((a!=null)&&(h||(a[4]==1))){var b=(a[0]+a[2])/2;var c=(a[1]+a[3])/2;var d=Math.max(Math.abs(a[0]-a[2]),Math.abs(a[1]-a[3]));var l=xxmap.map.getView();l.setCenter(ol.proj.transform([c,b],"EPSG:4326","EPSG:3857"));var e=360,g=-2;while(e>d){g++;e=e/2}l.setZoom(g)}}function placeNode(a){if(xxdialogMode){return}var c='<div style=margin-bottom:6px><label for=selectnode-search>Search</label>  <input type=text placeholder="Device name" id="selectnode-search" onchange=onPlaceNodeInputChange() onkeyup=onPlaceNodeInputChange() autocomplete=off style=width:120px></div><div id=placenode style="height:254px;overflow-y:auto;width:100%;margin:12px 1px 4px 1px;"><div id=noNodesMapPlace style=text-align:center;width:100%;display:none>No devices found.</div>';for(var b in nodes){c+="<div class=noselect id="+nodes[b]._id+"-rowid onclick=selectNodeToPlace(event,'"+nodes[b]._id+"') style=background-color:lightgray;margin-bottom:4px;border-radius:2px><input name=PlaceMapDeviceCheckbox id="+nodes[b]._id+"-checkid type=checkbox style=width:16px;display:inline />";c+="<div class=j"+nodes[b].icon+" style=width:16px;height:16px;margin-top:2px;margin-right:4px;display:inline-block></div><div style=width:16px;display:inline>"+nodes[b].name+"</div></div>"}setDialogMode(2,"Select a node to place",3,placeNodeEx,c+"</div>",a);onPlaceNodeInputChange()}function placeNodeEx(b,c){var d=document.getElementsByName("PlaceMapDeviceCheckbox");for(var g in d){if(d[g].checked){var h=getNodeFromId(d[g].id.substring(0,d[g].id.length-8));if(h){var e=xxmap.markersSource.getFeatureById(g);var j=ol.proj.transform(c,"EPSG:3857","EPSG:4326");var k=[j[1],j[0]];if(e){e.getGeometry().setCoordinates(c);var a=getActiveInteractions(e);if(a){saveMarkerloc(e)}else{meshserver.send({action:"changedevice",nodeid:h._id,userloc:k})}}else{meshserver.send({action:"changedevice",nodeid:h._id,userloc:k})}}}}}function onPlaceNodeInputChange(){updatePlaceNodeTable(Q("selectnode-search").value.trim().toLowerCase())}function updatePlaceNodeTable(d){var b=document.getElementsByName("PlaceMapDeviceCheckbox"),a=0;for(var c in nodes){var e=((nodes[c].namel.indexOf(d)>=0||d=="")||(nodes[c].rnamel!=null&&nodes[c].rnamel.indexOf(d)>=0));if(e){a++}QV(nodes[c]._id+"-rowid",e)}QV("noNodesMapPlace",a==0)}function selectNodeToPlace(b,g){if(b.target.name!="PlaceMapDeviceCheckbox"){var h=Q(g+"-checkid");h.checked=!h.checked}var c=document.getElementsByName("PlaceMapDeviceCheckbox"),a=0;for(var d in c){if(c[d].checked){a++}}QE("idx_dlgOkButton",a>0)}function addMeshOptions(a,b){}function meshOptionRmvMod(a,b){}function meshExists(){for(var a in meshes){if(meshes[a]){return true}}return false}function setMeshView(a){var c=Q("select-mesh");var b=c.selectedIndex;if(c[b].value==a){c[0].selected=true;onSelectMeshChange()}}function clearMeshOptions(){}function getSearchLocation(){try{var b=Q("mapSearchLocation").value.trim();if(b.length>0){var c=new XMLHttpRequest();c.onreadystatechange=function(){if(c.readyState==4&&c.status==200){formatSearchData(c.responseText)}};c.open("GET","https://nominatim.openstreetmap.org/search?q="+b+"&format=json",true);c.send()}}catch(a){}}function formatSearchData(b){try{QH("xmapSearchResults","");var c=JSON.parse(b),a=0,k='<div class="xmapItem">';for(var h=0;h<c.length;h++){if(c[h].display_name&&c[h].boundingbox[0]&&c[h].boundingbox[1]&&c[h].boundingbox[2]&&c[h].boundingbox[3]){a++;var j=(h%2==0)?"xmapItemSel1":"xmapItemSel1";k+='<div class="'+j+'" onclick=mapGotoSelectedLocation(this)><div>'+c[h].display_name+"</div><div style=display:none>"+c[h].boundingbox[0]+"!#!"+c[h].boundingbox[1]+"!#!"+c[h].boundingbox[2]+"!#!"+c[h].boundingbox[3]+"</div></div>"}}k+="</div>";if(a==1){var g=[parseFloat(c[0].boundingbox[2]),parseFloat(c[0].boundingbox[0]),parseFloat(c[0].boundingbox[3]),parseFloat(c[0].boundingbox[1])];zoomToExtent(g)}else{if(a==0){k="<div style=width:200px>No location found.<div>"}QV("xmapSearchResultsDlg",true)}QH("xmapSearchResults",k)}catch(d){}}function mapGotoSelectedLocation(c){var d=c.children;var a=d[1].innerHTML.split("!#!");var b=[parseFloat(a[2]),parseFloat(a[0]),parseFloat(a[3]),parseFloat(a[1])];zoomToExtent(b);mapCloseSearchWindow()}function mapCloseSearchWindow(){QH("xmapSearchResults","");QV("xmapSearchResultsDlg",false)}function zoomToLocation(a,c){var b=xxmap.map.getView();b.setCenter(a);b.setZoom(c)}function zoomToFitExtent(){var b=xxmap.markersSource.getFeatures();if(b.length>0){var a=xxmap.markersSource.getExtent();xxmap.map.getView().fit(a,xxmap.map.getSize())}}function zoomToExtent(b){var a=ol.proj.transformExtent(b,ol.proj.get("EPSG:4326"),ol.proj.get("EPSG:3857"));xxmap.map.getView().fit(a,xxmap.map.getSize())}function refreshDevice(a){if(!currentNode||currentNode._id!=a){return}gotoDevice(a,xxcurrentView,true)}function getNodeRights(c){var b=getNodeFromId(c),a=meshes[b.meshid];return a.links[userinfo._id].rights}var currentNode;var powerTimelineNode=null;var powerTimelineReq=null;var powerTimelineUpdate=null;var powerTimeline=null;function getCurrentNode(){return currentNode}function gotoDevice(s,u,z,k){if((userinfo.emailVerified!==true)&&(serverinfo.emailcheck==true)&&(userinfo.siteadmin!=4294967295)){setDialogMode(2,"Account Security",1,null,'Unable to access a device until a email address is verified. This is required for password recovery. Go to the "My Account" tab to change and verify an email address.');return}if((features&262144)&&!((userinfo.otpsecret==1)||(userinfo.otphkeys>0)||(userinfo.otpkeys>0))){setDialogMode(2,"Account Security",1,null,'Unable to access a device until two-factor authentication is enabled. This is required for extra security. Go to the "My Account" tab and look at the "Account Security" section.');return}if(k&&(k.shiftKey==true)){window.open(window.location.origin+"?node="+s.split("/")[2]+"&viewmode=10&hide=16","meshcentral:"+s);return}var r=getNodeFromId(s);var o=meshes[r.meshid];var p=o.links[userinfo._id].rights;if(!currentNode||currentNode._id!=r._id||z==true){currentNode=r;var q=EscapeHtml(r.name);if(q.length==0){q="<i>None</i>"}if(((p&4)!=0)&&((!o.flags)||((o.flags&2)==0))){q='<span tabindex=0 title="Click here to edit the server-side device name" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" style=cursor:pointer>'+q+' <img class=hoverButton src="images/link5.png" /></span>'}q+="<span style=color:#AAA;font-size:small> - "+EscapeHtml(o.name)+"</span>";QH("p10deviceName",q);QH("p11deviceName",q);QH("p12deviceName",q);QH("p13deviceName",q);QH("p14deviceName",q);QH("p15deviceName","Console - "+q);QH("p16deviceName",q);var D="<table style=width:100%>";D+=addDeviceAttribute('<span title="The name of the device group this computer belong to.">Group</span>','<a href=# title="The name of the device group this computer belong to" onclick=gotoMesh("'+r.meshid+'") style=cursor:pointer>'+EscapeHtml(meshes[r.meshid].name)+"</a>");if((r.rname!=null)&&(r.name!=r.rname)){D+=addDeviceAttribute('<span title="The name of this computer as set in the operating system">Name</span>','<span title="The name of this computer as set in the operating system">'+EscapeHtml(r.rname)+"</span>")}if((features&1)==0){if((p&4)!=0){if(r.host){D+=addDeviceAttribute("Hostname","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer>"+EscapeHtml(r.host)+"</span>")}else{D+=addDeviceAttribute("Hostname","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer><i>None</i></span>")}}else{D+=addDeviceAttribute("Hostname",EscapeHtml(r.host))}}var j=r.desc?EscapeHtml(r.desc):"<i>None</i>";if((p&4)!=0){D+=addDeviceAttribute("Description","<span onclick=showEditNodeValueDialog(2) style=cursor:pointer>"+j+' <img class=hoverButton src="images/link5.png" /></span>')}else{D+=addDeviceAttribute("Description",j)}var a=["Unknown","Windows 32bit console","Windows 64bit console","Windows 32bit service","Windows 64bit service","Linux 32bit","Linux 64bit","MIPS","XENx86","Android ARM","Linux ARM","MacOS 32bit","Android x86","PogoPlug ARM","Android APK","Linux Poky x86-32bit","MacOS 64bit","ChromeOS","Linux Poky x86-64bit","Linux NoKVM x86-32bit","Linux NoKVM x86-64bit","Windows MinCore console","Windows MinCore service","NodeJS","ARM-Linaro","ARMv6l / ARMv7l","ARMv8 64bit","ARMv6l / ARMv7l / NoKVM","Unknown","Unknown","FreeBSD x86-64"];if((r.agent!=null)&&(r.agent.id!=null)&&(r.agent.ver!=null)){var A="";if(r.agent.id<=a.length){A=a[r.agent.id]}else{A=a[0]}if(r.agent.ver!=0){A+=" v"+r.agent.ver}D+=addDeviceAttribute("Mesh Agent",A)}if(r.intelamt!=null){var A="";var w={0:"Not Activated (Pre)",1:"Not Activated (In)",2:"Activated"};if(r.intelamt.ver!=null&&r.intelamt.state==null){A+="<i>Unknown State</i>, v"+r.intelamt.ver}else{if((r.intelamt.ver==null)&&(r.intelamt.state==2)){A+="<i>Activated</i>"}else{if((r.intelamt.ver==null)||(r.intelamt.state==null)){A+="<i>Unknown Version & State</i>"}else{A+=w[r.intelamt.state];if((r.intelamt.state==2)&&r.intelamt.flags){if(r.intelamt.flags&2){A+=' <span title="Intel AMT is activated in Client Control Mode">CCM</span>'}else{if(r.intelamt.flags&4){A+=' <span title="Intel AMT is activated in Admin Control Mode">ACM</span>'}}}A+=(", v"+r.intelamt.ver)}}}if(r.intelamt.tls==1){A+=', <span title="Intel AMT is setup with TLS network security">TLS</span>'}if(r.intelamt.state==2){if(r.intelamt.user==null||r.intelamt.user==""){if((p&4)!=0){A+=', <i style=color:#FF0000;cursor:pointer title="Edit Intel® AMT credentials" onclick=editDeviceAmtSettings("'+r._id+'")>No Credentials</i>'}else{A+=", <i style=color:#FF0000>No Credentials</i>"}}A+=" ";if((p&4)!=0){A+='<img src=images/link4.png height=10 width=10 title="Edit Intel® AMT credentials" style=cursor:pointer onclick=editDeviceAmtSettings("'+r._id+'")>'}}D+=addDeviceAttribute("Intel® AMT",A)}if(o.mtype==2){if((r.agent!=null)&&(r.agent.tag!=null)){var B=EscapeHtml(r.agent.tag);if(B.startsWith("mailto:")){B='<a href="'+B+'">'+B.substring(7)+"</a>"}D+=addDeviceAttribute("Agent Tag",B)}}else{if((r.intelamt!=null)&&(r.intelamt.tag!=null)){var B=EscapeHtml(r.intelamt.tag);if(B.startsWith("mailto:")){B='<a href="'+B+'">'+B.substring(7)+"</a>"}D+=addDeviceAttribute("Intel® AMT Tag",B)}}if(r.osdesc){D+=addDeviceAttribute("Operating System",r.osdesc)}if(r.av&&r.av.length>0){var E=[];for(var n in r.av){if(r.av[n].product){var d=EscapeHtml(r.av[n].product);if(r.av[n].enabled!==true){d+=" - <span style=color:red>Disabled</span>"}if(r.av[n].updated!==true){d+=" - <span style=color:red>Out of date</span>"}if((r.av[n].enabled==true)&&(r.av[n].updated==true)){d+=" - <span style=color:green>OK</span>"}E.push(d)}}D+=addDeviceAttribute("Antivirus",E.join("<br />"))}if(r.users&&r.conn&&(r.users.length>0)&&(r.conn&1)){D+=addDeviceAttribute("Active User"+((r.users.length>1)?"s":""),r.users.join(", "))}var e=r.conn;if(e&&e>1){var h=[];if((r.conn&1)!=0){h.push('<span title="Mesh agent is connected and ready for use.">Mesh Agent</span>')}if((r.conn&2)!=0){h.push('<span title="Intel® AMT CIRA is connected and ready for use.">Intel® AMT CIRA</span>')}else{if((r.conn&4)!=0){h.push('<span title="Intel® AMT is routable and ready for use.">Intel® AMT</span>')}}if((r.conn&8)!=0){h.push('<span title="Mesh agent is reachable using another agent as relay.">Mesh Relay</span>')}D+=addDeviceAttribute("Connectivity",h.join(", "))}var m="<i>None</i>";if(r.tags!=null){m="";for(var n in r.tags){m+='<span class="tagSpan">'+r.tags[n]+"</span>"}}if((p&4)!=0){D+=addDeviceAttribute("Tags","<span onclick=showEditNodeValueDialog(3) style=cursor:pointer>"+m+' <img class=hoverButton src="images/link5.png" /></span>')}else{D+=addDeviceAttribute("Tags",m)}D+="</table><br />";if((p&76)!=0){D+='<input type=button value=Actions title="Perform power actions on the device" onclick=deviceActionFunction() />'}D+='<input type=button value=Notes title="View notes about this device" onclick=showNotes('+((p&128)==0)+',"'+encodeURIComponent(r._id)+'") />';QH("p10html",D);masterUpdate(256);D='<div class="p10html3right">';if((p&4)!=0){D+=' <a href=# onclick=p10showChangeGroupDialog(["'+r._id+'"]) title="Move this device to a different device group">Change Group</a>';D+=' <a href=# onclick=p10showDeleteNodeDialog("'+r._id+'") title="Remove this device">Delete Device</a>'}D+='</div><div class="p10html3left">';if(o.mtype==2){D+='<a href=# onclick=p10showNodeNetInfoDialog("'+r._id+'") title="Show device network interface information">Interfaces</a> '}if(xxmap!=null){D+='<a href=# onclick=p10showNodeLocationDialog("'+r._id+'") title="Show device locations information">Location</a> '}if(((p&8)!=0)&&(o.mtype==2)){D+='<a href=# onclick=p10showMeshCmdDialog(1,"'+r._id+'") title="Traffic router used to connect to a device thru this server.">Router</a> '}if(((e&1)!=0)&&(clickOnce==true)&&(o.mtype==2)&&((p&8)!=0)){if((r.agent.id>0)&&(r.agent.id<5)){D+='<a href=# onclick=p10clickOnce("'+r._id+'","RDP2",3389) title="Requires Microsoft ClickOnce support in your browser.">RDP</a> '}if(r.agent.id>4){D+='<a href=# onclick=p10clickOnce("'+r._id+'","PSSH",22) title="Requires Microsoft ClickOnce support in your browser.">Putty</a> ';D+='<a href=# onclick=p10clickOnce("'+r._id+'","WSCP",22) title="Requires Microsoft ClickOnce support in your browser.">WinSCP</a> '}}D+="</div><br>";QH("p10html3",D);var v=PowerStateStr(r.state);if((e&1)!=0){if(v.length>0){v+="<br/>"}v+='<span style=font-size:12px title="Agent connected">Agent connected</span>'}if((e&2)!=0){if(v.length>0){v+="<br/>"}v+='<span style=font-size:12px title="Intel® AMT connected">Intel® AMT connected</span>'}else{if((e&4)!=0){if(v.length>0){v+="<br/>"}v+='<span style=font-size:12px title="Intel® AMT detected">Intel® AMT detected</span>'}}if((v=="")&&r.lastconnect){v="<span style=font-size:12px>Last seen:<br />"+printDateTime(new Date(r.lastconnect))+"</span>"}QH("MainComputerState",v);Q("MainComputerImage").setAttribute("src","images/icons256-"+r.icon+"-1.png");Q("MainComputerImage").className=((!r.conn)||(r.conn==0)?"gray":"");var C=((p==4294967295)||((p&512)==0));var l=((p==4294967295)||((p&1024)==0));var b=((p==4294967295)||((p&2048)==0));if(C){setupTerminal()}if(l){setupFiles()}var g=((p&16)!=0);if(g){setupConsole()}else{if(u==15){u=10}}QV("MainDevDesktop",((o.mtype==1)||(r.agent==null)||(r.agent.caps==null)||((r.agent.caps&1)!=0)||(r.intelamt&&(r.intelamt.state==2)))&&((p&8)||(p&256)));QV("MainDevTerminal",((o.mtype==1)||(r.agent==null)||(r.agent.caps==null)||((r.agent.caps&2)!=0)||(r.intelamt&&(r.intelamt.state==2)))&&(p&8)&&C);QV("MainDevFiles",((o.mtype==2)&&((r.agent==null)||(r.agent.caps==null)||((r.agent.caps&4)!=0)))&&(p&8)&&l);QV("MainDevAmt",(r.intelamt!=null)&&((r.intelamt.state==2)||(r.conn&2))&&(p&8)&&b);QV("MainDevConsole",(g&&(o.mtype==2)&&((r.agent==null)||(r.agent.caps==null)||((r.agent.caps&8)!=0)))&&(p&8));QV("p15uploadCore",(r.agent!=null)&&(r.agent.caps!=null)&&((r.agent.caps&16)!=0));QH("p15coreName",((r.agent!=null)&&(r.agent.core!=null))?r.agent.core:"");var c=Q("p14iframe").contentWindow.getCurrentMeshNode();if((c!=null)&&(c._id!=currentNode._id)){Q("p14iframe").contentWindow.disconnect()}var t=((r.conn&6)!=0)?true:false;Q("p14iframe").contentWindow.setConnectionState(t);Q("p14iframe").contentWindow.setFrameHeight("650px");Q("p14iframe").contentWindow.setAuthCallback(updateAmtCredentials);QV("deskActionsBtn",(p&72)!=0);QV("termActionsBtn",(p&72)!=0);QV("filesActionsBtn",(p&72)!=0);if((powerTimelineNode!=currentNode._id)&&(powerTimelineReq!=currentNode._id)){QH("p10html2","");powerTimelineReq=currentNode._id;meshserver.send({action:"powertimeline",nodeid:currentNode._id});meshserver.send({action:"lastconnect",nodeid:currentNode._id})}QV("DeskTools",false);showDeskToolsProcesses();refreshDeviceEvents();if((currentNode)&&(xxcurrentView>=10)&&(xxcurrentView<20)){document.title=decodeURIComponent("{{{extitle}}}")+" - "+currentNode.name+" - "+o.name}else{document.title=decodeURIComponent("{{{extitle}}}")}p11clearConsoleMsg();p12clearConsoleMsg();p13clearConsoleMsg()}setupDesktop();if(!u){u=10}go(u)}function showNotes(b,a){if(xxdialogMode){return}setDialogMode(2,"Notes",2,showNotesEx,"<textarea id=d2devNotes ro="+b+" noteid="+a+" readonly style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea><span style=font-size:10px>Device group notes can be viewed and changed by other device group administrators.<span>",a);meshserver.send({action:"getNotes",id:decodeURIComponent(a)})}function showNotesEx(a,b){meshserver.send({action:"setNotes",id:decodeURIComponent(b),notes:encodeURIComponent(Q("d2devNotes").value)})}function deviceChat(){if(xxdialogMode){return}var a="/messenger?id=meshmessenger/"+encodeURIComponent(currentNode._id)+"/"+encodeURIComponent(userinfo._id)+"&title="+currentNode.name;if((authCookie!=null)&&(authCookie!="")){a+="&auth="+authCookie}window.open(a,"meshmessenger:"+currentNode._id);meshserver.send({action:"meshmessenger",nodeid:decodeURIComponent(currentNode._id)})}function deviceUrlFunction(){if(xxdialogMode){return}setDialogMode(2,"Open Page on Device",3,deviceUrlFunctionEx,'<input id=d2devurl placeholder="http://server.com" style=width:100%;overflow-y:scroll></input>');Q("d2devurl").focus()}function deviceUrlFunctionEx(){meshserver.send({action:"msg",type:"openUrl",nodeid:currentNode._id,url:Q("d2devurl").value})}function deviceToastFunction(){if(xxdialogMode){return}setDialogMode(2,"Device Notification",3,deviceToastFunctionEx,"<textarea id=d2devToast style=width:100%;height:80px;resize:none;overflow-y:scroll></textarea>");Q("d2devToast").focus()}function deviceToastFunctionEx(){meshserver.send({action:"toast",nodeids:[currentNode._id],title:"MeshCentral",msg:Q("d2devToast").value})}function deviceActionFunction(){if(xxdialogMode){return}var a=meshes[currentNode.meshid].links[userinfo._id].rights;var b="Select an operation to perform on this device.<br /><br />";var c="<select id=d2deviceop style=float:right;width:250px>";if((a&64)!=0){c+="<option value=100>Wake-up</option>"}if((a&8)!=0){c+="<option value=4>Sleep</option><option value=3>Reset</option><option value=2>Power off</option>"}c+="</select>";b+=addHtmlValue("Operation",c);setDialogMode(2,"Device Action",3,deviceActionFunctionEx,b)}function deviceActionFunctionEx(){var a=Q("d2deviceop").value;if(a==100){meshserver.send({action:"wakedevices",nodeids:[currentNode._id]})}else{meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:a})}}function updateAmtCredentials(a){var b=getNodeFromId(currentNode._id);if((a==true)||(b.intelamt.user==null)||(b.intelamt.user=="")){editDeviceAmtSettings(currentNode._id,updateAmtCredentialsEx)}else{Q("p14iframe").contentWindow.connectButtonfunctionEx()}}function updateAmtCredentialsEx(a,b){Q("p14iframe").contentWindow.connectButtonfunctionEx()}function updateDeviceTimeline(){if((meshserver.State!=2)||(powerTimelineNode==null)||(powerTimelineUpdate==null)||(currentNode==null)){return}if((powerTimelineNode==powerTimelineReq)&&(currentNode._id==powerTimelineNode)&&(powerTimelineUpdate<Date.now())){powerTimelineUpdate=null;meshserver.send({action:"powertimeline",nodeid:currentNode._id});meshserver.send({action:"lastconnect",nodeid:currentNode._id})}}function drawDeviceTimeline(){if((currentNode==null)||(xxcurrentView<10)||(xxcurrentView>19)){return}var s=null,o=Date.now();if(currentNode._id==powerTimelineNode){s=powerTimeline}var e=new Date();e.setHours(0,0,0,0);e=new Date(e.getTime()-(1000*60*60*24*6));var u=e.getTime();var t=[];if(s!=null&&s.length>1){t.push([0,s[1],s[0]]);var c=s[1];for(var m=2;m<s.length;m+=2){var p=s[m],k=o;if(s.length>(m+1)){k=s[m+1]}t.push([c,c+k,p]);c=c+k}}var A="",b=1,h=new Date();var w=Q("masthead").offsetWidth-(160+9+9+14);h.setHours(0,0,0,0);for(var m=0;m<7;m++){var g="",q=h.getTime(),l=q+(1000*60*60*24);for(var n in t){var a=t[n];if(isTimeBlockInside(q,l,a[0],a[1])==true){var y=Math.max(q,a[0]);var r=Math.min(Math.min(l,a[1]),o);var z=Math.round(((r-y)*w)/86400000);if(z>0){var v=powerStateStrings2[a[2]]+" from "+printTime(new Date(y))+" to "+printTime(new Date(r))+".";g+='<div class="pwState '+powerColor(a[2])+'" title="'+v+'" style="width:'+z+'px;"></div>'}}}A+="<tr class="+(((b%2)==0)?"altBack":"")+"><td><div> "+printDate(h)+"<div></div></div></td><td><div>"+g+"</div></td></tr>";++b;h=new Date(h.getTime()-(1000*60*60*24))}QH("p10html2",'<table cellpadding=2 cellspacing=0><thead><tr style=><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center><a download href="devicepowerevents.ashx?id='+currentNode._id+'" onclick="setDialogMode(0)"><img title="Download power events" src="images/link4.png" /></a>7 Day Power State</th></tr></thead><tbody>'+A+"</tbody></table>")}function powerColor(a){if(a<powerColorTable.length){return powerColorTable[a]}return"pwsYellow"}function isTimeBlockInside(d,c,b,a){if((b<d)&&(a>c)){return true}if((b>d)&&(b<c)){return true}if((a>d)&&(a<c)){return true}return false}function addDeviceAttribute(a,b){return"<tr><td class=style7>"+a+"</td><td class=style9>"+b+"</td></tr>"}function editDeviceAmtSettings(g,c,a){if(xxdialogMode){return}var h="",e=getNodeFromId(g),b=3,d=getNodeRights(g);if((d&4)==0){return}h+=addHtmlValue("Username",'<input id=dp10username style=width:230px maxlength=32 autocomplete=nope placeholder="admin" onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />');h+=addHtmlValue("Password","<input id=dp10password type=password style=width:230px autocomplete=nope maxlength=32 onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />");h+=addHtmlValue("Security","<select id=dp10tls style=width:236px><option value=0>No TLS security</option><option value=1>TLS security required</option></select>");if((e.intelamt.user!=null)&&(e.intelamt.user!="")){b=7}setDialogMode(2,"Edit Intel® AMT credentials",b,editDeviceAmtSettingsEx,h,{node:e,func:c,arg:a});if((e.intelamt.user!=null)&&(e.intelamt.user!="")){Q("dp10username").value=e.intelamt.user}else{Q("dp10username").value="admin"}Q("dp10tls").value=e.intelamt.tls;validateDeviceAmtSettings()}function validateDeviceAmtSettings(){QE("idx_dlgOkButton",passwordcheck(Q("dp10password").value))}function editDeviceAmtSettingsEx(c,d){if(c==2){meshserver.send({action:"changedevice",nodeid:d.node._id,intelamt:{user:"",pass:""}})}else{var b=Q("dp10username").value;if(b==""){b="admin"}var a=Q("dp10password").value;if(a==""){b=""}meshserver.send({action:"changedevice",nodeid:d.node._id,intelamt:{user:b,pass:a,tls:Q("dp10tls").value}});d.node.intelamt.user=b;d.node.intelamt.tls=Q("dp10tls").value;if(d.func){setTimeout(function(){d.func(null,d.arg)},300)}}}function p10showChangeGroupDialog(e){if(xxdialogMode){return false}var g=null;if(e.length==1){try{g=meshes[getNodeFromId(e[0])]._id}catch(b){}}var j="<select id=p10newGroup style=width:236px>",a=0;for(var c in meshes){var d=meshes[c].links[userinfo._id].rights;if((meshes[c]._id!=g)&&(d&4)){a++;j+="<option value='"+meshes[c]._id+"'>"+meshes[c].name+"</option>"}}j+="</select>";if(a>0){var h=(e.length==1)?"Select a new group for this device<br /><br />":"Select a new group for selected devices<br /><br />";h+=addHtmlValue("New Device Group",j);setDialogMode(2,"Change Group",3,p10showChangeGroupDialogEx,h,e)}else{setDialogMode(2,"Change Group",1,null,"No other device group of same type exists.")}return false}function p10showChangeGroupDialogEx(a,c){meshserver.send({action:"changeDeviceMesh",nodeids:c,meshid:Q("p10newGroup").value})}function p10showDeleteNodeDialog(a){if(xxdialogMode){return false}var b='Are you sure you want to delete node "'+EscapeHtml(currentNode.name)+'"?<br /><br />';b+="<label><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />Confirm</label>";setDialogMode(2,"Delete Node",3,p10showDeleteNodeDialogEx,b,a);p10validateDeleteNodeDialog();return false}function p10validateDeleteNodeDialog(){QE("idx_dlgOkButton",Q("p10check").checked)}function p10showDeleteNodeDialogEx(a,b){meshserver.send({action:"removedevices",nodeids:[b]})}function p10clickOnce(a,c,b){meshserver.send({action:"getcookie",nodeid:a,tcpport:b,tag:"clickonce",protocol:c});return false}var d2map=null;function p10showNodeLocationDialog(){if((xxdialogMode!=null)&&(xxdialogTag=="@xxmap")){setDialogMode(0)}else{if(xxdialogMode){return false}}var m=[],n=["iploc","wifiloc","gpsloc","userloc"],a=null;for(var k in n){if(currentNode[n[k]]!=null){var j=currentNode[n[k]].split(","),h=parseFloat(j[0]),l=parseFloat(j[1]);if((h<90)&&(h>-90)&&(l<180)&&(l>-180)){var e=new ol.Feature({geometry:new ol.geom.Point(ol.proj.fromLonLat([l,h]))});e.setStyle(markerStyle(currentNode,parseInt(k)+1));m.push(e);if(a==null){a=[h,l,h,l,0]}else{if(h<a[0]){a[0]=h}if(l<a[1]){a[1]=l}if(h>a[2]){a[2]=h}if(l>a[3]){a[3]=l}}}}}var p=new ol.source.Vector({features:m});var o=new ol.layer.Vector({source:p});var q="<div id=d2map style=width:100%;height:300px></div>";setDialogMode(2,"Device Location",1,null,q,"@xxmap");var c=0,b=0,r=8;if(a!=null){var b=(a[0]+a[2])/2;var c=(a[1]+a[3])/2;var d=Math.max(Math.abs(a[0]-a[2]),Math.abs(a[1]-a[3]));var g=360,r=-2;while(g>d){r++;g=g/2}}if(m.length==1){r=8}d2map=new ol.Map({target:"d2map",interactions:ol.interaction.defaults({dragPan:false,mouseWheelZoom:false}),layers:[new ol.layer.Tile({source:new ol.source.OSM()}),o],view:new ol.View({center:ol.proj.fromLonLat([c,b]),zoom:r})});return false}function p10showNodeNetInfoDialog(){if(xxdialogMode){return false}setDialogMode(2,"Network Interfaces",1,null,"<div id=d2netinfo>Loading...</div>","if"+currentNode._id);meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id});return false}function p10showMeshRouterDialog(){if(xxdialogMode){return}var a="<div>MeshCentral Router is a Windows tool for TCP port mapping. You can, for example, RDP into a remote device thru this server.</div><br />";a+=addHtmlValue("Win32 Executable",'<a style=cursor:pointer download href="meshagents?meshaction=winrouter" onclick="setDialogMode(0)">MeshCentralRouter.exe</a>');setDialogMode(2,"MeshCentral Router",1,null,a,"fileDownload")}function p10showMeshCmdDialog(a,b){if(xxdialogMode){return}var d="<select id=aginsSelect onclick=meshCmdOsClick() style=width:236px>";d+="<option value=3>Windows (32bit)</option>";d+="<option value=4>Windows (64bit)</option>";d+="<option value=5>Linux x86 (32bit)</option>";d+="<option value=6>Linux x86 (64bit)</option>";d+="<option value=16>MacOS (64bit)</option>";d+="<option value=25>Linux ARM, Raspberry Pi (32bit)</option>";d+="</select>";var c="";if(a==0){c+="<div>MeshCmd is a command line tool that performs lots of different operations. The action file can optionally be downloaded and edited to provide server information and credentials.<br /><br />"}if(a==1){c+='<div>Download "meshcmd" with an action file to route traffic thru this server to this device. Make sure to edit meshaction.txt and add your account password or make any changes needed.<br /><br />'}c+=addHtmlValue("Operating System",d);c+=addHtmlValue("MeshCmd",'<a id=meshcmddownloadid href="meshagents?meshcmd=3" download></a>');if(a==0){c+=addHtmlValue("Action File",'<a href="meshagents?meshaction=generic" download>MeshAction (.txt)</a>')}if(a==1){c+=addHtmlValue("Action File",'<a href="meshagents?meshaction=route&nodeid='+b+'" download>MeshAction (.txt)</a>')}c+="</div>";setDialogMode(2,["Download MeshCmd","Network Router"][a],9,null,c,"fileDownload");meshCmdOsClick()}function meshCmdOsClick(){var a=Q("aginsSelect").value,b="",c="";if(a==3){b="MeshCmd (Win32 executable)"}if(a==4){b="MeshCmd (Win64 executable)"}if(a==5){b="MeshCmd (Linux x86, 32bit)"}if(a==6){b="MeshCmd (Linux x86, 64bit)"}if(a==16){b="MeshCmd (MacOS, 64bit)"}if(a==25){b="MeshCmd (Linux ARM, 32bit)"}QH("meshcmddownloadid",b);Q("meshcmddownloadid").setAttribute("href","meshagents?meshcmd="+a)}function p10showiconselector(){if(xxdialogMode){return}var a=meshes[currentNode.meshid];var b=a.links[userinfo._id].rights;if((b&4)==0){return}var c="<br><div style=display:inline-block;width:40px></div>";c+="<div tabindex=0 style=display:inline-block class=i1 onclick=p10setIcon(1) onkeypress=\"if (event.key=='Enter') p10setIcon(1)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i2 onclick=p10setIcon(2) onkeypress=\"if (event.key=='Enter') p10setIcon(2)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i3 onclick=p10setIcon(3) onkeypress=\"if (event.key=='Enter') p10setIcon(3)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i4 onclick=p10setIcon(4) onkeypress=\"if (event.key=='Enter') p10setIcon(4)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i5 onclick=p10setIcon(5) onkeypress=\"if (event.key=='Enter') p10setIcon(5)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i6 onclick=p10setIcon(6) onkeypress=\"if (event.key=='Enter') p10setIcon(6)\"></div><br><br>";setDialogMode(2,"Icon Selection",0,null,c);QV("id_dialogclose",true)}function p10setIcon(a){setDialogMode(0);meshserver.send({action:"changedevice",nodeid:currentNode._id,icon:a})}var showEditNodeValueDialog_modes=["Device Name","Hostname","Description","Tags"];var showEditNodeValueDialog_modes2=["name","host","desc","tags"];var showEditNodeValueDialog_modes3=["","","","Tag1, Tag2, Tag3"];function showEditNodeValueDialog(a){if(xxdialogMode){return}var c=addHtmlValue(showEditNodeValueDialog_modes[a],'<input id=dp10devicevalue maxlength=64 placeholder="'+showEditNodeValueDialog_modes3[a]+'" onchange=p10editdevicevalueValidate('+a+",event) onkeyup=p10editdevicevalueValidate("+a+",event) />");setDialogMode(2,"Edit Device",3,showEditNodeValueDialogEx,c,a);var b=currentNode[showEditNodeValueDialog_modes2[a]];if(b==null){b=""}if(Array.isArray(b)){b=b.join(", ")}Q("dp10devicevalue").value=b;p10editdevicevalueValidate();Q("dp10devicevalue").focus()}function showEditNodeValueDialogEx(a,b){var c={action:"changedevice",nodeid:currentNode._id};c[showEditNodeValueDialog_modes2[b]]=Q("dp10devicevalue").value;meshserver.send(c)}function p10editdevicevalueValidate(b,a){var c=((b>1)||(Q("dp10devicevalue").value.length>0));QE("idx_dlgOkButton",c);if((a!=null)&&(c==true)&&(a.keyCode==13)){dialogclose(1)}}var desktopNode;function setupDesktop(){if((desktopNode!=currentNode)&&(desktop!=null)){desktop.Stop();desktopNode=null;desktop=null}if((desktopNode!=currentNode)||(desktop==null)){var b=multiDesktop[currentNode._id];if(b!=null){QH("DeskParent","");var a=b.m.CanvasId;a.setAttribute("id","Desk");a.setAttribute("onmousedown","dmousedown(event)");a.setAttribute("onmouseup","dmouseup(event)");a.setAttribute("onmousemove","dmousemove(event)");a.removeAttribute("onclick");Q("DeskParent").appendChild(a);desktop=b;if(desktop.m.SendCompressionLevel){desktop.m.SendCompressionLevel(1,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate)}desktop.onStateChanged=onDesktopStateChange;desktopNode=currentNode;onDesktopStateChange(desktop,desktop.State);delete multiDesktop[currentNode._id]}else{QH("DeskParent",'<canvas id=Desk oncontextmenu="return false" onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event)></canvas>');desktopNode=currentNode}Q("Desk").addEventListener("DOMMouseScroll",function(c){return dmousewheel(c)});Q("Desk").addEventListener("mousewheel",function(c){return dmousewheel(c)})}desktopNode=currentNode;updateDesktopButtons();deskAdjust();if(!Q("Desk")["toBlob"]){QV("deskSaveBtn",false)}}function updateDesktopButtons(){var d=meshes[currentNode.meshid];var a=0;if(desktop!=null){a=desktop.State}var e=d.links[userinfo._id].rights;QV("disconnectbutton1span",(a!=0));QV("connectbutton1span",(a==0)&&((e&8)||(e&256))&&(d.mtype==2)&&(currentNode.agent.caps&1));QV("connectbutton1hspan",(a==0)&&(e&8)&&((currentNode.intelamt!=null)&&(d.mtype==1||currentNode.intelamt.state==2)&&((currentNode.intelamt.ver!=null)||(d.mtype==1))));QV("d7amtkvm",(currentNode.intelamt!=null&&((currentNode.intelamt.ver!=null)||(d.mtype==1)))&&((a==0)||(desktop.contype==2)));QV("d7meshkvm",(webRtcDesktop)||((d.mtype==2)&&(currentNode.agent.caps&1)&&((a==false)||(desktop.contype==1))));var c=(e==4294967295)||(((e&8)!=0)&&((e&256)==0)&&((e&4096)==0));var g=((currentNode.conn&1)!=0);QE("connectbutton1",g);var b=((currentNode.conn&6)!=0);QE("connectbutton1h",b);QE("deskSaveBtn",a==3);QV("deskFocusBtn",(desktop!=null)&&(desktop.contype==2)&&(a!=0)&&(desktopsettings.showfocus));QV("DeskClip",(currentNode.agent)&&(currentNode.agent.id!=11)&&(currentNode.agent.id!=16)&&((desktop==null)||(desktop.contype!=2)));QE("DeskClip",a==3);QE("DeskType",a==3);QV("DeskWD",(currentNode.agent)&&(currentNode.agent.id<5)&&c);QE("DeskWD",a==3);QV("deskkeys",(currentNode.agent)&&(currentNode.agent.id<5)&&c);QE("deskkeys",a==3);QV("DeskToolsButton",(c)&&(d.mtype==2)&&g);QV("DeskChatButton",(browserfullscreen==false)&&(c)&&(d.mtype==2)&&g);QV("DeskNotifyButton",(browserfullscreen==false)&&(currentNode.agent)&&(currentNode.agent.id<5)&&(c)&&(d.mtype==2)&&g);QV("DeskOpenWebButton",(browserfullscreen==false)&&(c)&&(d.mtype==2)&&g);QV("DeskControlSpan",c);QV("deskActionsBtn",(browserfullscreen==false));QV("deskActionsSettings",(browserfullscreen==false));if(e&8){Q("DeskControl").checked=(getstore("DeskControl",1)==1)}else{Q("DeskControl").checked=false}if(g==false){QV("DeskTools",false)}}var autoConnectDesktopTimer=null;function autoConnectDesktop(a){if(autoConnectDesktopTimer==null){autoConnectDesktopTimer=setInterval(connectDesktop,100)}else{clearInterval(autoConnectDesktopTimer);autoConnectDesktopTimer=null}}function connectDesktop(b,a){p11clearConsoleMsg();if(desktop==null){desktopNode=currentNode;if(a==2){if((desktopNode.intelamt.user==null)||(desktopNode.intelamt.user=="")){editDeviceAmtSettings(desktopNode._id,connectDesktop,2);return}desktop=CreateAmtRedirect(CreateAmtRemoteDesktop("Desk"),authCookie);desktop.debugmode=debugmode;desktop.onStateChanged=onDesktopStateChange;desktop.m.bpp=(desktopsettings.encoding==1||desktopsettings.encoding==3)?1:2;desktop.m.useZRLE=(desktopsettings.encoding<3);desktop.m.localKeyMap=desktopsettings.localkeymap;desktop.m.showmouse=desktopsettings.showmouse;desktop.m.onScreenSizeChange=deskAdjust;desktop.m.onKvmData=function(h){if(h.length==0){if(!desktop.m._sentPresence){desktop.m._sentPresence=true;desktop.m.sendKvmData(JSON.stringify({action:"present",ver:1}))}return}var d=null;try{d=JSON.parse(h)}catch(g){}if((d!=null)&&(d.action!=null)){if(d.action=="restart"){webRtcDesktopReset();desktop.m.sendKvmData(JSON.stringify({action:"present",ver:1}))}else{if((d.action=="present")&&(webRtcDesktop==null)){webRtcDesktop={platform:d.platform};var c=null;if(typeof RTCPeerConnection!=="undefined"){webRtcDesktop.webrtc=new RTCPeerConnection(c)}else{if(typeof webkitRTCPeerConnection!=="undefined"){webRtcDesktop.webrtc=new webkitRTCPeerConnection(c)}}webRtcDesktop.webchannel=webRtcDesktop.webrtc.createDataChannel("DataChannel",{});webRtcDesktop.webchannel.onopen=function(){console.log("WebRTC Data Channel Open");Q("deskstatus").textContent=StatusStrs[desktop.State]+", Soft-KVM";desktop.m.hold(true);webRtcDesktop.webRtcActive=true;webRtcDesktop.softdesktop=CreateKvmDataChannel(webRtcDesktop.webchannel,CreateAgentRemoteDesktop("Desk",Q("id_mainarea")),desktop.m);webRtcDesktop.softdesktop.m.setRotation(desktop.m.rotation);webRtcDesktop.softdesktop.m.onScreenSizeChange=deskAdjust;if(desktopsettings.quality){webRtcDesktop.softdesktop.m.CompressionLevel=desktopsettings.quality}if(desktopsettings.scaling){webRtcDesktop.softdesktop.m.ScalingLevel=desktopsettings.scaling}webRtcDesktop.softdesktop.Start()};webRtcDesktop.webchannel.onclose=function(e){console.log("WebRTC Data Channel Closed");webRtcDesktopReset()};webRtcDesktop.webrtc.onicecandidate=function(j){if(j.candidate==null){desktop.m.sendKvmData(JSON.stringify({action:"offer",ver:1,sdp:webRtcDesktop.webrtcoffer.sdp}))}else{webRtcDesktop.webrtcoffer.sdp+=("a="+j.candidate.candidate+"\r\n")}};webRtcDesktop.webrtc.oniceconnectionstatechange=function(){if((webRtcDesktop!=null)&&(webRtcDesktop.webrtc!=null)&&((webRtcDesktop.webrtc.iceConnectionState=="disconnected")||(webRtcDesktop.webrtc.iceConnectionState=="failed"))){webRtcDesktopReset()}};webRtcDesktop.webrtc.createOffer(function(e){webRtcDesktop.webrtcoffer=e;webRtcDesktop.webrtc.setLocalDescription(e,function(){},webRtcDesktopReset)},webRtcDesktopReset,{mandatory:{OfferToReceiveAudio:false,OfferToReceiveVideo:false}})}else{if((d.action=="answer")&&(webRtcDesktop!=null)){webRtcDesktop.webrtc.setRemoteDescription(new RTCSessionDescription({type:"answer",sdp:d.sdp}),function(){},webRtcDesktopReset)}}}}};desktop.Start(desktopNode._id,16994,"*","*",0);desktop.contype=2}else{desktop=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("Desk"),serverPublicNamePort,authCookie,domainUrl);desktop.debugmode=debugmode;desktop.m.debugmode=debugmode;desktop.attemptWebRTC=attemptWebRTC;desktop.onStateChanged=onDesktopStateChange;desktop.onConsoleMessageChange=function(){p11clearConsoleMsg();if(desktop.consoleMessage){QH("p11DeskConsoleMsg",EscapeHtml(desktop.consoleMessage).split("\n").join("<br />"));QV("p11DeskConsoleMsg",true);p11DeskConsoleMsgTimer=setTimeout(p11clearConsoleMsg,8000)}};desktop.m.CompressionLevel=desktopsettings.quality;desktop.m.ScalingLevel=desktopsettings.scaling;desktop.m.FrameRateTimer=desktopsettings.framerate;desktop.m.onDisplayinfo=deskDisplayInfo;desktop.m.onScreenSizeChange=deskAdjust;desktop.Start(desktopNode._id);desktop.contype=1}}else{desktop.Stop();webRtcDesktopReset();desktopNode=desktop=null}}function p11clearConsoleMsg(){QV("p11DeskConsoleMsg",false);if(p11DeskConsoleMsgTimer){clearTimeout(p11DeskConsoleMsgTimer);p11DeskConsoleMsgTimer=null}}function p12clearConsoleMsg(){QV("p12TermConsoleMsg",false);if(p12TermConsoleMsgTimer){clearTimeout(p12TermConsoleMsgTimer);p12TermConsoleMsgTimer=null}}function p13clearConsoleMsg(){QV("p13FilesConsoleMsg",false);if(p13FilesConsoleMsgTimer){clearTimeout(p13FilesConsoleMsgTimer);p13FilesConsoleMsgTimer=null}}var webRtcDesktop=null;function webRtcDesktopReset(){if(webRtcDesktop==null){return}if(webRtcDesktop.softdesktop!=null){webRtcDesktop.softdesktop.Stop();webRtcDesktop.softdesktop=null}if(webRtcDesktop.webchannel!=null){try{webRtcDesktop.webchannel.close()}catch(a){}webRtcDesktop.webchannel=null}if(webRtcDesktop.webrtc!=null){try{webRtcDesktop.webrtc.close()}catch(a){}webRtcDesktop.webrtc=null}webRtcDesktop=null;if(desktop&&desktop.m){desktop.m.hold(false);Q("deskstatus").textContent=StatusStrs[desktop.State]}}function onDesktopStateChange(c,a){var d=a;if((d==3)&&(c.contype==2)){d++}var b=StatusStrs[d];if((desktop!=null)&&(desktop.webRtcActive==true)){b+=", WebRTC"}QH("deskstatus",b);switch(a){case 0:desktop.Stop();desktopNode=desktop=null;QV("DeskFocus",false);QV("termdisplays",false);QV("deskRecordIcon",false);deskFocusBtn.value="All Focus";if(fullscreen==true){deskToggleFull()}webRtcDesktopReset();deskPreferedStickyDisplay=0;break;case 2:break;case 3:if(desktop&&(desktop.serverIsRecording==true)){QV("deskRecordIcon",true)}desktop.startTime=new Date();if(updateSessionTimer==null){updateSessionTimer=setInterval(updateSessionTime,1000)}break;default:break}updateDesktopButtons();deskAdjust();setTimeout(deskAdjust,50)}function updateSessionTime(){var a=0;if(desktop&&desktop.startTime){a=Math.floor((new Date()-desktop.startTime)/1000);QH("DeskTimer",zeroPad(Math.floor(a/3600),2)+":"+zeroPad((Math.floor(a/60)%60),2)+":"+zeroPad((a%60),2))}else{QH("DeskTimer","")}a=0;if(terminal&&terminal.startTime){a=Math.floor((new Date()-terminal.startTime)/1000);QH("TermTimer",zeroPad(Math.floor(a/3600),2)+":"+zeroPad((Math.floor(a/60)%60),2)+":"+zeroPad((a%60),2))}else{QH("TermTimer","")}if((desktop==null)&&(terminal==null)){clearInterval(updateSessionTimer);updateSessionTimer=null}}function showDesktopSettings(){if(xxdialogMode){return}applyDesktopSettings();updateDesktopButtons();setDialogMode(7,"Remote Desktop Settings",3,showDesktopSettingsChanged)}function showDesktopSettingsChanged(){desktopsettings.encoding=d7desktopmode.value;desktopsettings.showfocus=d7showfocus.checked;desktopsettings.showmouse=d7showcursor.checked;desktopsettings.quality=d7bitmapquality.value;desktopsettings.scaling=d7bitmapscaling.value;desktopsettings.framerate=d7framelimiter.value;desktopsettings.localkeymap=d7localKeyMap.checked;localStorage.setItem("desktopsettings",JSON.stringify(desktopsettings));applyDesktopSettings();if(desktop){if(desktop.contype==1){if(desktop.State!=0){desktop.m.SendCompressionLevel(1,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate)}}if(desktop.contype==2){if(desktopsettings.showfocus==false){desktop.m.focusmode=0;deskFocusBtn.value="All Focus"}if(desktop.State!=0){desktop.Stop();setTimeout(function(){connectDesktop(null,2)},50)}}}}function applyDesktopSettings(){var c="",b=(features&512)?[90,80,70,60,50,40,30,20,10,5,1]:[60,50,40,30,20,10,5,1];for(var a in b){c+="<option value="+b[a]+">"+b[a]+"%</option>"}QH("d7bitmapquality",c);d7desktopmode.value=desktopsettings.encoding;d7showfocus.checked=desktopsettings.showfocus;d7showcursor.checked=desktopsettings.showmouse;d7bitmapquality.value=40;if(b.indexOf(parseInt(desktopsettings.quality))>=0){d7bitmapquality.value=desktopsettings.quality}d7bitmapscaling.value=desktopsettings.scaling;if(desktopsettings.framerate){d7framelimiter.value=desktopsettings.framerate}if(desktopsettings.localkeymap){d7localKeyMap.checked=desktopsettings.localkeymap}QV("deskFocusBtn",(desktop!=null)&&(desktop.contype==2)&&(desktop.state!=0)&&(desktopsettings.showfocus))}function enterBrowserFullscreen(a){if(a.requestFullscreen){a.requestFullscreen()}else{if(a.msRequestFullscreen){a.msRequestFullscreen()}else{if(a.mozRequestFullScreen){a.mozRequestFullScreen()}else{if(a.webkitRequestFullscreen){a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}}}}}function exitBrowserFullscreen(){if(document.exitFullscreen){document.exitFullscreen()}else{if(document.msExitFullscreen){document.msExitFullscreen()}else{if(document.mozCancelFullScreen){document.mozCancelFullScreen()}else{if(document.webkitExitFullscreen){document.webkitExitFullscreen()}}}}}function isBrowserFullscreen(){if(!document.fullscreenElement&&!document.mozFullScreenElement&&!document.webkitFullscreenElement&&!document.msFullscreenElement){return false}else{return true}}var fullscreen=false;var browserfullscreen=false;function deskToggleFull(a){fullscreen=!fullscreen;if(fullscreen){QC("body").add("fulldesk");if(a.shiftKey==true){enterBrowserFullscreen(Q("deskarea0"));browserfullscreen=true}}else{QC("body").remove("fulldesk");if(browserfullscreen==true){exitBrowserFullscreen();browserfullscreen=false;toggleFullScreen()}}deskAdjust();updateDesktopButtons()}function deskToggleFocus(){desktop.m.focusmode=(desktop.m.focusmode+64)%192;Q("deskFocusBtn").value=["All Focus","Small Focus","Large Focus"][desktop.m.focusmode/64]}function deskAdjust(){var d=Q("DeskParent").clientHeight,e=Q("DeskParent").clientWidth;var a=Q("Desk").height,b=Q("Desk").width;if(deskAspectRatio==2){QS("Desk")["margin-top"]=null;QS("Desk").height="100%";QS("Desk").width="100%";QS("DeskParent").overflow="hidden"}else{if(deskAspectRatio==1){QS("Desk")["margin-top"]="0px";QS("Desk").height=a+"px";QS("Desk").width=b+"px";QS("DeskParent").overflow="scroll"}else{if((d/e)>(a/b)){var c=((a*e)/b)+"px";QS("Desk").height=c;QS("Desk").width="100%"}else{var g=((b*d)/a)+"px";if(webPageFullScreen||fullscreen){QS("Desk").height=null}else{QS("Desk").height="100%"}QS("Desk").width=g}QS("Desk")["margin-top"]=null;QS("DeskParent").overflow="hidden"}}}function mdeskAdjust(c,h,g,a){if(!c||!h||!g||!a){return}if(a.id=="Desk"){deskAdjust();return}var k=[{x:180,y:101},{x:302,y:169},{x:454,y:255}][Q("sizeselect").selectedIndex];var e=k.x+2,j=Q("xdevices").clientWidth-30,l=Math.floor(j/e);l=e+Math.floor((j-(l*e))/l);k.y=k.y*(l/k.x);k.x=l;var b=k.y,d=k.x;if(c.State!=0){b=k.y;d=(h/g)*k.y}QS(a.id)["max-height"]=b+"px";QS(a.id)["max-width"]=d+"px";QS(a.id)["margin-top"]="0";QS(a.id)["margin-bottom"]="0"}function deskSendKeys(){if(xxdialogMode||desktop==null||desktop.State!=3){return}var a=Q("deskkeys").value;if(a==0){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65364,1],[65364,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,40],[desktop.m.KeyAction.UP,40],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==1){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65362,1],[65362,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,38],[desktop.m.KeyAction.UP,38],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==2){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[108,1],[108,0],[65511,0]])}else{desktop.sendCtrlMsg('{"action":"lock"}')}}else{if(a==3){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[109,1],[109,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==4){if(desktop.contype==2){desktop.m.sendkey([[65505,1],[65511,1],[109,1],[109,0],[65511,0],[65505,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN,16],[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,91],[desktop.m.KeyAction.UP,16]])}}else{if(a==5){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==6){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[114,1],[114,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,82],[desktop.m.KeyAction.UP,82],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==7){if(desktop.contype==2){desktop.m.sendkey([[65513,1],[65473,1],[65473,0],[65513,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,18],[desktop.m.KeyAction.DOWN,115],[desktop.m.KeyAction.UP,115],[desktop.m.KeyAction.EXUP,18]])}}else{if(a==8){if(desktop.contype==2){desktop.m.sendkey([[65507,1],[119,1],[119,0],[65507,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,17],[desktop.m.KeyAction.DOWN,87],[desktop.m.KeyAction.UP,87],[desktop.m.KeyAction.EXUP,17]])}}else{if(a==9){if(desktop.contype==2){desktop.m.sendkey([[65513,1],[65289,1],[65289,0],[65513,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,18],[desktop.m.KeyAction.DOWN,9],[desktop.m.KeyAction.UP,9],[desktop.m.KeyAction.EXUP,18]])}}else{if(a==10){desktop.m.sendcad()}else{if(a==11){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65361,1],[65361,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,37],[desktop.m.KeyAction.UP,37],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==12){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65363,1],[65363,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,39],[desktop.m.KeyAction.UP,39],[desktop.m.KeyAction.EXUP,91]])}}}}}}}}}}}}}}}function showDeskType(){if(xxdialogMode||desktop==null||desktop.State!=3){return}Q("DeskType").blur();var a="<div>Enter text and click OK to remotely type it using a US english keyboard. Make sure to place the remote cursor at the correct position before proceeding.<div>";a+='<textarea id=d2typeText style="margin-top:5px;width:100%;height:184px;resize:none" maxlength=2000></textarea>';setDialogMode(2,"Remote Keyboard Entry",3,showDeskTypeEx,a);Q("d2typeText").focus()}var AmtDeskTypeTimer=null;var AmtDeskTypeContent=null;var DeskTypeTranslate={39:222,42:106,43:107,44:188,45:189,46:190,47:191,59:186,61:187,91:219,92:220,93:221,96:192,191:111};var DeskTypeShiftTranslate={33:49,34:222,35:51,36:52,37:53,38:55,40:57,41:48,58:186,60:188,62:190,63:191,64:50,94:54,95:189,106:56,107:187,123:219,124:220,125:221,126:192};function showDeskTypeEx(){var j=Q("d2typeText").value,g=Q("d2typeText").value.toUpperCase(),k=[],h=false;if(desktop.contype==2){for(var e in j){var c=j.charCodeAt(e);k.push([c,1],[c,0])}AmtDeskTypeContent=k;AmtDeskTypeTimer=setInterval(function(){var a=AmtDeskTypeContent.shift();if(desktop){desktop.m.sendkey(a[0],a[1])}if((desktop==null)||(AmtDeskTypeContent.length==0)){clearInterval(AmtDeskTypeTimer);AmtDeskTypeContent=null}},10)}else{for(var e in j){var c=j.charCodeAt(e),d=g.charCodeAt(e);if(((c>=65)&&(c<=90))||((c>=97)&&(c<=122))){if((c==d)&&(h==false)){k.push([desktop.m.KeyAction.DOWN,16]);h=true}if((c!=d)&&(h==true)){k.push([desktop.m.KeyAction.UP,16]);h=false}}else{if((c>=48)&&(c<=57)){if(h==true){k.push([desktop.m.KeyAction.UP,16]);h=false}}else{if(DeskTypeTranslate[c]){if(h==true){k.push([desktop.m.KeyAction.UP,16]);h=false}d=DeskTypeTranslate[c]}else{if(DeskTypeShiftTranslate[c]){if(h==false){k.push([desktop.m.KeyAction.DOWN,16]);h=true}d=DeskTypeShiftTranslate[c]}}}}k.push([desktop.m.KeyAction.DOWN,d],[desktop.m.KeyAction.UP,d])}if(h==true){k.push([desktop.m.KeyAction.UP,16]);h=false}desktop.m.SendKeyMsgKC(k)}}function showDeskClip(){if(xxdialogMode||desktop==null||desktop.State!=3){return}Q("DeskClip").blur();var a="";a+='<input id=dlgClipGet type=button value="Get Clipboard" style=width:120px onclick=showDeskClipGet()>';a+='<input id=dlgClipSet type=button value="Set Clipboard" style=width:120px onclick=showDeskClipSet()>';a+='<div id=dlgClipStatus style="display:inline-block;margin-left:8px" ></div>';a+='<textarea id=d2clipText style="width:100%;height:184px;resize:none" maxlength=65535></textarea>';a+='<input type=button value="Close" style=width:80px;float:right onclick=dialogclose(0)><div style=height:26px;margin-top:3px><span id=linuxClipWarn style=display:none>Remote clipboard is valid for 60 seconds.</span> </div><div></div>';setDialogMode(2,"Remote Clipboard",8,null,a,"clipboard");Q("d2clipText").focus()}function showDeskClipGet(){if(desktop==null||desktop.State!=3){return}meshserver.send({action:"msg",type:"getclip",nodeid:currentNode._id})}function showDeskClipSet(){if(desktop==null||desktop.State!=3){return}meshserver.send({action:"msg",type:"setclip",nodeid:currentNode._id,data:Q("d2clipText").value});QV("linuxClipWarn",currentNode&¤tNode.agent&&(currentNode.agent.id>4)&&(currentNode.agent.id!=21)&&(currentNode.agent.id!=22))}function sendCAD(){if(xxdialogMode||desktop==null||desktop.State!=3){return}desktop.m.sendcad()}function toggleDeskTools(){if(xxdialogMode){return}if(QS("DeskTools").display=="none"){QV("DeskTools",true);Q("DeskTools").nodeid=currentNode._id;QH("DeskToolsProcesses","");QH("DeskToolsServices","");QV("deskToolsTopTabService",false);changeDeskToolTab(0);refreshDeskTools(0);refreshDeskTools(1)}else{QV("DeskTools",false)}}var deskToolTabSelection=0;function changeDeskToolTab(a){deskToolTabSelection=a;QV("DeskToolsProcessTab",a==0);QV("DeskToolsServiceTab",a==1);QS("deskToolsTopTabProcess")["bottom"]=(a==0)?"0px":"3px";QS("deskToolsTopTabService")["bottom"]=(a==1)?"0px":"3px";QS("deskToolsTopTabProcess")["color"]=(a==0)?"black":"gray";QS("deskToolsTopTabService")["color"]=(a==1)?"black":"gray"}function refreshDeskTools(b){var a=(b==null)?deskToolTabSelection:b;QV("DeskToolsRefreshButton",false);setTimeout(refreshDeskToolsEx,500);if(a==0){meshserver.send({action:"msg",type:"ps",nodeid:currentNode._id})}if(a==1){meshserver.send({action:"msg",type:"services",nodeid:currentNode._id})}}function refreshDeskToolsEx(){QV("DeskToolsRefreshButton",true)}var deskTools={sort:1,ssort:1,msg:null,smsg:null};function sortProcess(a){deskTools.sort=a;showDeskToolsProcesses(deskTools.msg)}function sortService(a){deskTools.ssort=a;showDeskToolsServices(deskTools.smsg)}function sortProcessPid(c,d){if(c.p>d.p){return 1}if(c.p<d.p){return(-1)}return sortProcessName(c,d)}function sortProcessName(c,d){if(c.d>d.d){return 1}if(c.d<d.d){return(-1)}return 0}function showDeskToolsProcesses(g){deskTools.msg=g;if(g==null){QH("DeskToolsProcesses","");return}if(Q("DeskTools").nodeid!=g.nodeid){return}var h=[],k=null;try{k=JSON.parse(g.value)}catch(b){}if(k!=null){for(var j in k){h.push({p:parseInt(j),c:k[j].cmd,d:k[j].cmd.toLowerCase(),u:k[j].user})}if(deskTools.sort==0){h.sort(sortProcessPid)}else{if(deskTools.sort==1){h.sort(sortProcessName)}}var l="";for(var d in h){if(h[d].p!=0){var a=h[d].c;if(a.length>30){a='<span title="'+a+'">'+a.substring(0,30)+"...</span>"}l+="<div class=deskToolsBar><div style=width:50px;float:left;text-align:right;padding-right:5px>"+h[d].p+'</div><a href=# style=float:right;padding-right:5px;cursor:pointer title="Stop process" onclick=\'return stopProcess('+h[d].p+',"'+h[d].c+'")\'><img width=10 height=10 src="images/trash.png"></a><div style=float:right;padding-right:5px>'+(h[d].u?h[d].u:"")+"</div><div>"+a+"</div></div>"}}QH("DeskToolsProcesses",l)}}function showDeskToolsServices(g){deskTools.smsg=g;if(g==null){QH("DeskToolsProcesses","");return}if(Q("DeskTools").nodeid!=g.nodeid){return}QV("deskToolsTopTabService",true);var h=[],j=null;try{j=JSON.parse(g.value)}catch(b){}deskTools.services=j;if(j!=null){for(var d in j){if(j[d].status){h.push({p:capitalizeFirstLetter(j[d].status.state.toLowerCase()),d:j[d].displayName,i:d})}}if(deskTools.ssort==0){h.sort(sortProcessPid)}else{if(deskTools.ssort==1){h.sort(sortProcessName)}}var k="";for(var d in h){if(h[d].p!=0){var a=h[d].d;if(a.length>30){a='<span title="'+a+'">'+a.substring(0,30)+"...</span>"}k+="<div onclick=showServiceDetailsDialog("+h[d].i+") class=deskToolsBar><div style=width:70px;float:left;padding-right:5px>"+h[d].p+"</div><div>"+a+"</div></div>"}}QH("DeskToolsServices",k)}}function showServiceDetailsDialog(a){if(xxdialogMode){return}var b=deskTools.services[a];if(b!=null){var d="";if(b.name){d+=addHtmlValue("Name",b.name)}if(b.displayName){d+=addHtmlValue("Display name",b.displayName)}if(b.status){if(b.status.state){d+=addHtmlValue("State",capitalizeFirstLetter(b.status.state.toLowerCase()))}if(b.status.pid){d+=addHtmlValue("PID",b.status.pid)}var c=[];if(b.status.isFileSystemDriver===true){c.push("FileSystemDriver")}if(b.status.isInteractive===true){c.push("Interactive")}if(b.status.isKernelDriver===true){c.push("KernelDriver")}if(b.status.isOwnProcess===true){c.push("OwnProcess")}if(b.status.isSharedProcess===true){c.push("SharedProcess")}if(c.length>0){d+=addHtmlValue("Type",c.join(", "))}}d+='<br/><div style=float:right;margin-bottom:12px><input type=button value="Close" onclick=showServiceDetailsDialogEx(0,'+a+')></div><div style=margin-bottom:12px><input type=button value="Start" onclick=showServiceDetailsDialogEx(1,'+a+')><input type=button value="Stop" onclick=showServiceDetailsDialogEx(2,'+a+')><input type=button value="Restart" onclick=showServiceDetailsDialogEx(3,'+a+")></div>";setDialogMode(2,"Service Details",8,null,d,name)}}function showServiceDetailsDialogEx(a,b){setDialogMode(0);if(a==0){return}var c=deskTools.services[b];if(c!=null){if(a==1){meshserver.send({action:"msg",type:"serviceStart",nodeid:currentNode._id,serviceName:c.name})}if(a==2){meshserver.send({action:"msg",type:"serviceStop",nodeid:currentNode._id,serviceName:c.name})}if(a==3){meshserver.send({action:"msg",type:"serviceRestart",nodeid:currentNode._id,serviceName:c.name})}setTimeout(function(){refreshDeskTools(1)},1000)}}function toggleKvmControl(){putstore("DeskControl",(Q("DeskControl").checked?1:0))}function deskSaveImage(){if(xxdialogMode||desktop==null||desktop.State!=3){return}var a=new Date(),b="Desktop-"+currentNode.name+"-"+a.getFullYear()+"-"+("0"+(a.getMonth()+1)).slice(-2)+"-"+("0"+a.getDate()).slice(-2)+"-"+("0"+a.getHours()).slice(-2)+"-"+("0"+a.getMinutes()).slice(-2);Q("Desk")["toBlob"](function(c){saveAs(c,b+".jpg")})}function deskDisplayInfo(g,b,e){var a=0,c="";for(var d in b){a++;c+="<option"+((e==d)?" selected":"")+" value="+d+">"+b[d]+"</option>";if((deskPreferedStickyDisplay==d)&&(e!=deskPreferedStickyDisplay)){desktop.m.SetDisplay(d)}}QH("termdisplays",c);QV("termdisplays",a>1)}function deskGetDisplayNumbers(a){desktop.m.GetDisplayNumbers()}var deskPreferedStickyDisplay=0;function deskSetDisplay(a){desktop.m.SetDisplay(deskPreferedStickyDisplay=parseInt(Q("termdisplays").value));Q("termdisplays").blur()}var dblClickDetectArgs={t:0,x:0,y:0};function dblClickDetect(a){if(a.buttons!=1){return}var b=Date.now();if(((b-dblClickDetectArgs.t)<250)&&(Math.abs(a.clientX-dblClickDetectArgs.x)<2)&&(Math.abs(a.clientY-dblClickDetectArgs.y)<2)){if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mousedblclick(a);desktop.m.sendKeepAlive()}else{desktop.m.mousedblclick(a)}}}dblClickDetectArgs.t=b;dblClickDetectArgs.x=a.clientX;dblClickDetectArgs.y=a.clientY}function dmousedown(a){setSessionActivity();a.addx=Q("DeskParent").scrollLeft;a.addy=Q("DeskParent").scrollTop;if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mousedown(a);desktop.m.sendKeepAlive()}else{desktop.m.mousedown(a)}}dblClickDetect(a)}function dmouseup(a){setSessionActivity();a.addx=Q("DeskParent").scrollLeft;a.addy=Q("DeskParent").scrollTop;if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mouseup(a);desktop.m.sendKeepAlive()}else{desktop.m.mouseup(a)}}}function dmousemove(a){setSessionActivity();a.addx=Q("DeskParent").scrollLeft;a.addy=Q("DeskParent").scrollTop;if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mousemove(a);desktop.m.sendKeepAlive()}else{desktop.m.mousemove(a)}}}function dmousewheel(a){setSessionActivity();a.addx=Q("DeskParent").scrollLeft;a.addy=Q("DeskParent").scrollTop;if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mousewheel(a);desktop.m.sendKeepAlive()}else{if(desktop.m.mousewheel){desktop.m.mousewheel(a)}}haltEvent(a);return true}return false}function drotate(a){if(!xxdialogMode&&desktop!=null){desktop.m.setRotation(desktop.m.rotation+a);deskAdjust();deskAdjust()}}function stopProcess(a,b){setDialogMode(2,"Process Control",3,stopProcessEx,"Stop process #"+a+' "'+b+'"?',a);return false}function stopProcessEx(a,b){meshserver.send({action:"msg",type:"pskill",nodeid:currentNode._id,value:b});setTimeout(refreshDeskTools,300)}var terminalNode;function setupTerminal(){if((terminalNode!=currentNode)&&(terminal!=null)){terminal.Stop();terminal=null}terminalNode=currentNode;updateTerminalButtons()}function updateTerminalButtons(){var b=meshes[terminalNode.meshid];var d=((terminal!=null)&&(terminal.state!=0));QV("disconnectbutton2span",(d==true));QV("connectbutton2span",(d==false)&&(b.mtype==2)&&(currentNode.agent.caps&2));QV("connectbutton2hspan",(d==false)&&((terminalNode.intelamt!=null)&&(b.mtype==1||terminalNode.intelamt.state==2)&&((terminalNode.intelamt.ver!=null)||(b.mtype==1))));var c=((terminalNode.conn&1)!=0);QE("connectbutton2",c);var a=((terminalNode.conn&6)!=0);QE("connectbutton2h",a);QE("ctrlcbutton",d);QE("ctrlxbutton",d);QE("escbutton",d);QE("bsbutton",d);QE("pastebutton",d);QE("specialkeylist",d);QE("specialkeylistinput",d);QV("terminalSettingsButtons",(terminal)&&(terminal.contype==2));if(terminal){Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation];Q("id_tfxkeysbutton").value=fxEmulations[terminal.m.fxEmulation];Q("id_tcrbutton").value=(terminal.m.lineFeed=="\r\n")?"CR+LF":"LF"}}function onTerminalStateChange(d,a){var c=a;if((c==3)&&(d.contype==2)){c++}var b=StatusStrs[c];if(terminal.webRtcActive==true){b+=", WebRTC"}QH("termstatus",b);switch(a){case 0:QE("termSizeList",true);QH("termtitle","");QV("termRecordIcon",false);d.m.TermResetScreen();d.m.TermDraw();if(terminal!=null){terminal.Stop();terminal=null}break;case 3:QE("termSizeList",false);if(d&&(d.serverIsRecording==true)){QV("termRecordIcon",true)}terminal.startTime=new Date();if(updateSessionTimer==null){updateSessionTimer=setInterval(updateSessionTime,1000)}break;default:QE("termSizeList",false);break}updateTerminalButtons()}var autoConnectTerminalTimer=null;function autoConnectTerminal(a){if(autoConnectTerminalTimer==null){autoConnectTerminalTimer=setInterval(connectTerminal,100)}else{clearInterval(autoConnectTerminalTimer);autoConnectTerminalTimer=null}}function connectTerminal(b,a,c){p12clearConsoleMsg();if(!terminal){if(a==2){if((terminalNode.intelamt.user==null)||(terminalNode.intelamt.user=="")){editDeviceAmtSettings(terminalNode._id,connectTerminal,2);return}var d={};if(Q("termSizeList").value==2){d.width=100;d.height=30}terminal=CreateAmtRedirect(CreateAmtRemoteTerminal("Term",d),authCookie);terminal.debugmode=debugmode;terminal.m.debugmode=debugmode;terminal.m.onTitleChange=function(e,g){QH("termtitle"," - "+EscapeHtml(g))};terminal.onStateChanged=onTerminalStateChange;terminal.Start(terminalNode._id,16994,"*","*",0);terminal.contype=2;Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation]}else{var d={};if([1,2,3,4,21,22].indexOf(currentNode.agent.id)==-1){if(Q("termSizeList").value==2){d.width=100;d.height=30;d.xterm=true}if(Q("termSizeList").value==3){d.width=Math.floor((Q("column_l").clientWidth-60)/10);d.height=Math.floor((Q("column_l").clientHeight-120)/20);d.xterm=true}}if((b&&(b.shiftKey==true))||(c&&(c.powershell))){d.protocol=6}terminal=CreateAgentRedirect(meshserver,CreateAmtRemoteTerminal("Term",d),serverPublicNamePort,authCookie,domainUrl);terminal.debugmode=debugmode;terminal.m.debugmode=debugmode;terminal.m.onTitleChange=function(e,g){QH("termtitle"," - "+EscapeHtml(g))};terminal.m.lineFeed=([1,2,3,4,21,22].indexOf(currentNode.agent.id)>=0)?"\r\n":"\r";terminal.attemptWebRTC=attemptWebRTC;terminal.onStateChanged=onTerminalStateChange;terminal.onConsoleMessageChange=function(){p12clearConsoleMsg();if(terminal.consoleMessage){QH("p12TermConsoleMsg",EscapeHtml(terminal.consoleMessage).split("\n").join("<br />"));QV("p12TermConsoleMsg",true);p12TermConsoleMsgTimer=setTimeout(p12clearConsoleMsg,8000)}};terminal.Start(terminalNode._id);terminal.contype=1;terminal.m.terminalEmulation=0;terminal.m.fxEmulation=0;Q("id_ttypebutton").value=terminalEmulations[0]}}else{terminal.Stop();terminal=null}Q("connectbutton2").blur()}var terminalEmulations=["UTF8 Terminal","Extended ASCII","Intel ASCII"];function termToggleType(){if(!terminal||xxdialogMode){return}terminal.m.terminalEmulation=(terminal.m.terminalEmulation+1)%3;Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation];Q("id_ttypebutton").blur()}var fxEmulations=["Intel (F10 = ESC+[OM)","Alternate (F10 = ESC+0)","VT100+ (F10 = ESC+[OY)"];function termToggleFx(){if(!terminal||xxdialogMode){return}terminal.m.fxEmulation=(terminal.m.fxEmulation+1)%3;Q("id_tfxkeysbutton").value=fxEmulations[terminal.m.fxEmulation];Q("id_tfxkeysbutton").blur()}function termToggleCr(){if(!terminal||xxdialogMode){return}if(terminal.m.lineFeed=="\n"){terminal.m.lineFeed="\r\n"}else{terminal.m.lineFeed="\n"}Q("id_tcrbutton").value=(terminal.m.lineFeed=="\r\n")?"CR+LF":"LF"}function termSendKey(b,a){if(!terminal||xxdialogMode){return}terminal.m.TermSendKey(b);Q(a).blur()}function showTermPasteDialog(){if(!terminal||xxdialogMode){return}Q("pastebutton").blur();setDialogMode(2,"Paste",3,showTermPasteDialogEx,'<textarea id=d2pasteText style="width:100%;height:184px;resize:none"></textarea>');Q("d2pasteText").focus()}function showTermPasteDialogEx(){if(!terminal){return}terminal.m.TermSendKeys(Q("d2pasteText").value)}function sendSpecialKey(){terminal.m.TermSendKey(Q("specialkeylist").value);Q("specialkeylist").blur();Q("specialkeylistinput").blur()}var filesNode;function setupFiles(){var b=(filesNode==currentNode);filesNode=currentNode;var a=((filesNode.conn&1)!=0)?true:false;QE("p13Connect",a);if(((b==false)||(a==false))&&files){files.Stop();files=null}}function onFilesStateChange(c,a){p13Connect.value=(a==0)?"Connect":"Disconnect";var b=StatusStrs[a];if(files.webRtcActive==true){b+=", WebRTC"}Q("p13Status").textContent=b;switch(a){case 0:QH("p13files","");p13filetree=null;p13filetreelocation=[];QH("p13currentpath","");QE("p13FolderUp",false);QV("filesRecordIcon",false);p13setActions();if(files!=null){files.Stop();files=null}break;case 3:p13targetpath="";if(files){files.sendText({action:"ls",reqid:1,path:""});if(files.serverIsRecording==true){QV("filesRecordIcon",true)}}break;default:break}}function CreateRemoteFiles(b){var a={protocol:5};a.onFileUpdate=b;a.xxStateChange=function(c){};a.ProcessData=function(c){a.onFileUpdate(c)};return a}var autoConnectFilesTimer=null;function autoConnectFiles(a){if(autoConnectFilesTimer==null){autoConnectFilesTimer=setInterval(connectFiles,100)}else{clearInterval(autoConnectFilesTimer);autoConnectFilesTimer=null}}function connectFiles(a){p13clearConsoleMsg();if(!files){files=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotFiles),serverPublicNamePort,authCookie,domainUrl);files.attemptWebRTC=attemptWebRTC;files.onStateChanged=onFilesStateChange;files.onConsoleMessageChange=function(){p13clearConsoleMsg();if(files.consoleMessage){QH("p13FilesConsoleMsg",EscapeHtml(files.consoleMessage).split("\n").join("<br />"));QV("p13FilesConsoleMsg",true);p13FilesConsoleMsgTimer=setTimeout(p13clearConsoleMsg,8000)}};files.Start(filesNode._id)}else{files.Stop();files=null}p13clipboard=p13clipboardFolder=null;p13clipboardCut=0;p13updateClipview()}var p13filetree=null;var p13targetpath=null;var p13filetreelocation=[];function p13gotFiles(b){if((b.length>0)&&(b.charCodeAt(0)!=123)){p13gotDownloadBinaryData(b);return}b=JSON.parse(decode_utf8(b));if(b.action=="download"){p13gotDownloadCommand(b);return}b.path=b.path.replace(/\//g,"\\");if((p13filetree!=null)&&(b.path==p13filetree.path)){var a=p13getCheckedNames();p13filetree=b;p13updateFiles(a)}else{var c=b.path.replace(/\//g,"\\"),d=p13targetpath.replace(/\//g,"\\");while((c.length>0)&&(c[0]=="\\")){c=c.substring(1)}while((d.length>0)&&(d[0]=="\\")){d=d.substring(1)}if((c==d)||((b.path=="\\")&&(p13targetpath==""))){p13filetree=b;p13updateFiles()}}}function p13getCheckedNames(){var b=[],a=document.getElementsByName("fd");for(var c=0;c<a.length;c++){if(a[c].checked){b.push(p13filetree.dir[a[c].value].n)}}return b}function p13updateFiles(b){var n="",o="",c='<a href=# style=cursor:pointer onclick="return p13folderup(0)">Root</a>',l="Root";var w=p13filetree.path.split("\\");p13filetreelocation=[];for(var p in w){if(w[p]!=""){p13filetreelocation.push(w[p])}}for(var p in p13filetreelocation){c+=' / <a href=# style=cursor:pointer onclick="return p13folderup('+(parseInt(p)+1)+')">'+p13filetreelocation[p]+"</a>"}var s=p13filetreelocation.join("/");var j=p13sort_files(p13filetree.dir);for(var p in j){var d=j[p],r=d.n,u;u=r;if(r.length>70){u='<span title="'+EscapeHtml(r)+'">'+EscapeHtml(r.substring(0,70))+"...</span>"}else{u=EscapeHtml(r)}r=EscapeHtml(r);var g="";if(d.d!=null){var e=new Date(d.d),g=printDateTime(e)+" "}var k="";if(d.s!=null){k=getFileSizeStr(d.s)}var m="";if(d.t<3){var t="",v="";m="<div class=filelist file=999><input file=999 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'> <span style=float:right title=\""+v+'">'+t+"</span><span><div class=fileIcon"+d.t+' onclick=p13folderset("'+encodeURIComponent(d.nx)+'")></div><a href=# style=cursor:pointer onclick=\'return p13folderset("'+encodeURIComponent(d.nx)+"\")'>"+u+"</a></span></div>"}else{var q=u;if(d.s>0){q='<a hrf=# rel="noreferrer noopener" target="_blank" style=cursor:pointer onclick="return p13downloadfile(\''+encodeURIComponent(s+"/"+r)+"','"+encodeURIComponent(r)+"',"+d.s+')">'+u+"</a>"}m="<div class=filelist file=3><input file=3 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'> <span class=fsize>"+g+"</span><span style=float:right>"+k+"</span><span><div class=fileIcon"+d.t+"></div>"+q+"</span></div>"}if(d.t<3){n+=m}else{o+=m}}QH("p13files",n+o);QH("p13currentpath",c);QE("p13FolderUp",p13filetreelocation.length!=0);if(b!=null){var a=document.getElementsByName("fd");for(var p=0;p<a.length;p++){if(b.indexOf(p13filetree.dir[a[p].value].n)>=0){a[p].checked=true}}}p13setActions()}function p13folderset(a){p13targetpath=joinPaths(p13filetree.path,p13filetree.dir[a].n).split("\\").join("/");files.sendText({action:"ls",reqid:1,path:p13targetpath})}function p13folderup(a){if(a==null){p13filetreelocation.pop()}else{while(p13filetreelocation.length>a){p13filetreelocation.pop()}}p13targetpath=p13filetreelocation.join("/");files.sendText({action:"ls",reqid:1,path:p13targetpath});return false}var p13sortorder;function p13sort_filename(c,d){if(c.ln>d.ln){return(1*p13sortorder)}if(c.ln<d.ln){return(-1*p13sortorder)}return 0}function p13sort_timestamp(c,d){if(c.d>d.d){return(1*p13sortorder)}if(c.d<d.d){return(-1*p13sortorder)}return 0}function p13sort_bysize(c,d){if(c.s==d.s){return p13sort_filename(c,d)}return(((c.s-d.s))*p13sortorder)}function p13sort_files(a){var c=[],d=Q("p13sortdropdown").value;for(var b in a){a[b].nx=b;if(a[b].s==null){a[b].s=0}if(a[b].n==null){a[b].n=b}a[b].ln=a[b].n.toLowerCase();c.push(a[b])}p13sortorder=1;if(d>3){p13sortorder=-1;d-=3}if(d==1){c.sort(p13sort_filename)}else{if(d==2){c.sort(p13sort_bysize)}else{if(d==3){c.sort(p13sort_timestamp)}}}return c}function p13setActions(){if(p13filetree==null){QE("p13DeleteFileButton",false);QE("p13NewFolderButton",false);QE("p13UploadButton",false);QE("p13RenameFileButton",false);QE("p13SelectAllButton",false);Q("p13SelectAllButton").value="Select All";QE("p13RefreshButton",false);QE("p13CutButton",false);QE("p13CopyButton",false);QE("p13PasteButton",false)}else{var a=p13getFileSelCount(),c=p13getFileCount(),b=p13getFileSelCount(false);var d=((currentNode.agent.id>0)&&(currentNode.agent.id<5));QE("p13DeleteFileButton",(a>0)&&((p13filetreelocation.length>0)||(d==false)));QE("p13NewFolderButton",((p13filetreelocation.length>0)||(d==false)));QE("p13UploadButton",((p13filetreelocation.length>0)||(d==false)));QE("p13RenameFileButton",(a==1)&&((p13filetreelocation.length>0)||(d==false)));QE("p13SelectAllButton",c>0);Q("p13SelectAllButton").value=(a>0?"Select None":"Select All");QE("p13RefreshButton",true);QE("p13CutButton",(a>0)&&(a==b)&&((p13filetreelocation.length>0)||(d==false)));QE("p13CopyButton",(a>0)&&(a==b)&&((p13filetreelocation.length>0)||(d==false)));QE("p13PasteButton",((p13filetreelocation.length>0)||(d==false))&&((p13clipboard!=null)&&(p13clipboard.length>0)))}}function p13getFileSelCount(d){var a=0;var b=document.getElementsByName("fd");for(var c=0;c<b.length;c++){if((b[c].checked)&&((d!=false)||(b[c].attributes.file.value=="3"))){a++}}return a}function p13getFileSelDirCount(){var a=0,b=document.getElementsByName("fd");for(var c=0;c<b.length;c++){if((b[c].checked)&&(b[c].attributes.file.value=="999")){a++}}return a}function p13getFileCount(){var a=0;var b=document.getElementsByName("fd");return b.length}function p13selectallfile(){var c=(p13getFileSelCount()==0),a=document.getElementsByName("fd");for(var b=0;b<a.length;b++){a[b].checked=c}p13setActions()}function p13createfolder(){setDialogMode(2,"New Folder",3,p13createfolderEx,"<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% />");focusTextBox("p13renameinput");p13fileNameCheck()}function p13createfolderEx(){files.sendText({action:"mkdir",reqid:1,path:p13filetreelocation.join("/")+"/"+Q("p13renameinput").value});p13folderup(999)}function p13deletefile(){var a=p13getFileSelCount(),b=(p13getFileSelDirCount()>0)?"<br /><br /><label><input type=checkbox id=p13recdeleteinput>Recursive delete</label><br>":"<input type=checkbox id=p13recdeleteinput style='display:none'>";setDialogMode(2,"Delete",3,p13deletefileEx,(a>1)?("Delete "+a+" selected items?"+b):("Delete selected item?"+b))}function p13deletefileEx(){var b=[],a=document.getElementsByName("fd");for(var c=0;c<a.length;c++){if(a[c].checked){b.push(p13filetree.dir[a[c].value].n)}}files.sendText({action:"rm",reqid:1,path:p13filetreelocation.join("/"),delfiles:b,rec:Q("p13recdeleteinput").checked});p13folderup(999)}function p13renamefile(){var c,a=document.getElementsByName("fd");for(var b=0;b<a.length;b++){if(a[b].checked){c=p13filetree.dir[a[b].value].n}}setDialogMode(2,"Rename",3,p13renamefileEx,'<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="'+c+'" />',{action:"rename",path:p13filetreelocation.join("/"),oldname:c});focusTextBox("p13renameinput");p13fileNameCheck()}function p13renamefileEx(a,c){c.newname=Q("p13renameinput").value;files.sendText(c);p13folderup(999)}function p13fileNameCheck(a){var b=isFilenameValid(Q("p13renameinput").value);QE("idx_dlgOkButton",b);if((b==true)&&(a!=null)&&(a.keyCode==13)){dialogclose(1)}}function p13uploadFile(){setDialogMode(2,"Upload File",3,p13uploadFileEx,"<input type=file name=files id=p13uploadinput style=width:100% multiple=multiple onchange=\"updateUploadDialogOk('p13uploadinput')\" />");updateUploadDialogOk("p13uploadinput")}function p13uploadFileEx(){p13doUploadFiles(Q("p13uploadinput").files)}var p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0;function p13copyFile(b){var a=document.getElementsByName("fd");p13clipboard=[];p13clipboardCut=b,p13clipboardFolder=p13targetpath;for(var c=0;c<a.length;c++){if((a[c].checked)&&(a[c].attributes.file.value=="3")){p13clipboard.push(p13filetree.dir[a[c].value].n)}}p13updateClipview()}function p13pasteFile(){var a="";if((p13clipboard!=null)&&(p13clipboard.length>0)){a="Confim "+(p13clipboardCut==0?"copy":"move")+" of "+p13clipboard.length+" entrie"+((p13clipboard.length>1)?"s":"")+" to this location?"}setDialogMode(2,"Paste",3,p13pasteFileEx,a)}function p13pasteFileEx(){files.sendText({action:(p13clipboardCut==0?"copy":"move"),reqid:1,scpath:p13clipboardFolder,dspath:p13targetpath,names:p13clipboard});p13folderup(999);if(p13clipboardCut==1){p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0;p13updateClipview()}}function p13updateClipview(){var a="";if((p13clipboard!=null)&&(p13clipboard.length>0)){a="Holding "+p13clipboard.length+" entrie"+((p13clipboard.length>1)?"s":"")+" for "+(p13clipboardCut==0?"copy":"move")+', <a href=# onclick="return p13clearClip()" style=cursor:pointer>Clear</a>.'}QH("p13bottomstatus",a);p13setActions()}function p13clearClip(){p13clipboard=null;p13clipboardFolder=null;p13clipboardCut=0;p13updateClipview();return false}function p13fileDragDrop(a){haltEvent(a);QV("p13bigfail",false);QV("p13bigok",false);if(a.dataTransfer==null||a.dataTransfer.files.length==0||p13filetree==null){return}var b=[];for(var c in a.dataTransfer.files){if((a.dataTransfer.files[c].size!=null)&&(a.dataTransfer.files[c].size!=0)){b.push(a.dataTransfer.files[c])}}if(b.length==0){return}p13doUploadFiles(b)}var p13dragtimer=null;function p13fileDragOver(b){haltEvent(b);if(p13dragtimer!=null){clearTimeout(p13dragtimer);p13dragtimer=null}var a=(p13filetree!=null);QV("p13bigok",a);QV("p13bigfail",!a)}function p13fileDragLeave(a){haltEvent(a);if(a.target.id!="p13filetable"){QV("p13bigfail",false);QV("p13bigok",false)}else{p13dragtimer=setTimeout(function(){QV("p13bigfail",false);QV("p13bigok",false);p13dragtimer=null},10)}}var downloadFile;function p13downloadfile(a,b,c){if(xxdialogMode||downloadFile||!files){return}downloadFile={path:decodeURIComponent(a),file:decodeURIComponent(b),size:c,tsize:0,data:"",state:0,id:Math.random()};files.sendText({action:"download",sub:"start",id:downloadFile.id,path:downloadFile.path});setDialogMode(2,"Download File",10,p13downloadFileCancel,"<div>"+downloadFile.file+"</div><br /><progress id=d2progressBar style=width:100% value=0 max="+c+" />")}function p13downloadFileCancel(){setDialogMode(0);files.sendText({action:"download",sub:"cancel",id:downloadFile.id});downloadFile=null}function p13gotDownloadCommand(a){if((downloadFile==null)||(a.id!=downloadFile.id)){return}if(a.sub=="start"){downloadFile.state=1;files.sendText({action:"download",sub:"startack",id:downloadFile.id})}else{if(a.sub=="cancel"){downloadFile=null;setDialogMode(0)}}}function p13gotDownloadBinaryData(a){if(!downloadFile||downloadFile.state==0){return}if(a.length>4){downloadFile.tsize+=(a.length-4);downloadFile.data+=a.substring(4);Q("d2progressBar").value=downloadFile.tsize}if((ReadInt(a,0)&1)!=0){saveAs(data2blob(downloadFile.data),downloadFile.file);downloadFile=null;setDialogMode(0)}else{files.sendText({action:"download",sub:"ack",id:downloadFile.id})}}var uploadFile;function p13doUploadFiles(a){if(xxdialogMode){return}uploadFile={};uploadFile.xpath=p13filetreelocation.join("/");uploadFile.xfiles=a;uploadFile.xfilePtr=-1;setDialogMode(2,"Upload File",10,p13uploadFileCancel,"<div id=p13dfileName>Connecting...</div><br /><progress id=d2progressBar style=width:100% value=0 max=0 />");p13uploadReconnect()}function onFileUploadStateChange(b,a){switch(a){case 0:p13folderup(9999);break;case 3:p13uploadNextFile();break;default:break}}function p13uploadReconnect(){uploadFile.ws=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotUploadData),serverPublicNamePort,authCookie,domainUrl);uploadFile.ws.attemptWebRTC=false;uploadFile.ws.ctrlMsgAllowed=false;uploadFile.ws.onStateChanged=onFileUploadStateChange;uploadFile.ws.Start(filesNode._id)}function p13uploadNextFile(){uploadFile.xfilePtr++;if(uploadFile.xfiles.length>uploadFile.xfilePtr){uploadFile.xptr=0;var a=uploadFile.xfiles[uploadFile.xfilePtr];QH("p13dfileName",a.name);Q("d2progressBar").max=a.size;Q("d2progressBar").value=0;uploadFile.xreader=new FileReader();uploadFile.xreader.onload=function(){uploadFile.xdata=uploadFile.xreader.result;uploadFile.ws.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:a.name,size:uploadFile.xdata.byteLength}))};uploadFile.xreader.readAsArrayBuffer(a)}else{p13uploadFileCancel()}}function p13uploadFileCancel(a,b){if(uploadFile!=null){if(uploadFile.ws!=null){uploadFile.ws.Stop();uploadFile.ws=null}uploadFile=null}setDialogMode(0)}function p13gotUploadData(b){var a=JSON.parse(b);if((uploadFile==null)||(parseInt(uploadFile.xfilePtr)!=parseInt(a.reqid))){return}if(a.action=="uploadstart"){p13uploadNextPart(false);for(var c=0;c<8;c++){p13uploadNextPart(true)}}else{if(a.action=="uploadack"){p13uploadNextPart(false)}else{if(a.action=="uploaderror"){p13uploadFileCancel()}}}}function p13uploadNextPart(c){var a=uploadFile.xdata;var e=uploadFile.xptr;var d=uploadFile.xptr+4096;if(d>a.byteLength){if(c==true){return}d=a.byteLength}if(e==a.byteLength){if(uploadFile.ws!=null){uploadFile.ws.Stop();uploadFile.ws=null}if(uploadFile.xfiles.length>uploadFile.xfilePtr+1){p13uploadReconnect()}else{p13uploadFileCancel()}}else{var b=a.slice(e,d);uploadFile.ws.send(b);uploadFile.xptr=d;Q("d2progressBar").value=d}}var currentDeviceEvents=null;function deviceEventsUpdate(){var h="",a=null;for(var c in currentDeviceEvents){var b=currentDeviceEvents[c],g=new Date(b.time);if(b.msg){if(b.h==null){b.h=Math.random()}if(printDate(g)!=a){if(a!=null){h+="</table>"}a=printDate(g);h+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+a+"</td></tr>"}var d="si3";if(b.etype=="user"){d="m2"}if(b.etype=="server"){d="si3"}var e=EscapeHtml(b.msg).split("(R)").join("®");if(b.username){if((userinfo.siteadmin&2)&&(b.userid)){e="<a href=# onclick='gotoUser(\""+encodeURIComponent(b.userid)+"\");haltEvent(event);'>"+EscapeHtml(b.username)+"</a> → "+e}else{e=EscapeHtml(b.username)+" → "+e}}if(b.etype=="relay"||b.action=="relaylog"){d="relayIcon16"}h+="<tr onclick=showEventDetails("+b.h+",1) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+d+"></div></td><td class=g1> </td><td class=style10>"+printTime(g)+" - "+e+"</td><td class=g2> </td></tr><tr style=height:2px></tr>"}}if(a!=null){h+="</table>"}if(h==""){h="<br><i>No Events Found</i><br><br>"}QH("p16events",h)}function refreshDeviceEvents(){meshserver.send({action:"events",nodeid:currentNode._id,limit:parseInt(p16limitdropdown.value)})}function showEventDetails(b,d){var a,g;if(d==1){a=currentDeviceEvents}if(d==2){a=events}if(d==3){a=currentUserEvents}for(var c in a){if(a[c].h==b){g=a[c];break}}if(g){if(xxdialogMode){return false}var e="<div style=overflow-y:auto>";for(var c in g){if((c=="h")||(c=="_id")||(c=="ids")||(c=="domain")||(g[c]==null)||(typeof g[c]=="object")){continue}e+=addHtmlValue3(EscapeHtml(c),EscapeHtml(g[c]))}e+="</div>";setDialogMode(2,"Event Details",9,null,e)}}function agentConsoleHandleKeys(b){if((b.ctrlKey)||(b.altKey)){return true}var d=0,a=Q("p15consoleText");if(b.key){if(b.keyCode==13&&consoleFocus==0){p15consoleSend(b);d=1}else{if(b.keyCode==8&&consoleFocus==0){var g=a.value;a.value=g.substring(0,g.length-1);d=1}else{if(b.keyCode==27){a.value="";d=1}else{if((b.keyCode==38)||(b.keyCode==40)){var c=consoleHistory.indexOf(a.value);if((b.keyCode==38)&&((consoleHistory.length-1)>c)){a.value=consoleHistory[c+1]}else{if((b.keyCode==40)&&(c>0)){a.value=consoleHistory[c-1]}else{if((b.keyCode==40)&&(c==0)){a.value=""}}}d=1}else{if(b.key.length===1){insertTextAtCursor(a,b.key);d=1}}}}}}else{if(b.charCode!=0&&consoleFocus==0){a.value=((a.value+String.fromCharCode(b.charCode)));d=1}}if(d>0){return haltEvent(b)}}function insertTextAtCursor(a,d){if(document.selection){a.focus();sel=document.selection.createRange();sel.text=d}else{if(a.selectionStart||a.selectionStart=="0"){var c=a.selectionStart,b=a.selectionEnd;a.value=a.value.substring(0,c)+d+a.value.substring(b,a.value.length);a.setSelectionRange(b+1,b+1)}else{a.value+=myValue}}}var consoleNode;var consoleServerText="";function setupConsole(){if(xxcurrentView==115){var d=(consoleNode=="server");consoleNode="server";QH("p15deviceName","My Server Console");QE("p15consoleText",true);QH("p15statetext","");QH("p15coreName","");if(d==false){QH("p15agentConsoleText",consoleServerText);Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight}}else{var d=(consoleNode==currentNode);consoleNode=currentNode;var a=meshes[consoleNode.meshid];var b=a.links[userinfo._id].rights;if((b&16)!=0){if(consoleNode.consoleText==null){consoleNode.consoleText=""}if(d==false){QH("p15agentConsoleText",consoleNode.consoleText);Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight}var c=((consoleNode.conn&1)!=0)?true:false;QH("p15statetext",c?"Agent is online":"Agent is offline");QE("p15consoleText",c);QE("p15uploadCore",c)}else{QH("p15statetext","Access Denied");QE("p15consoleText",false);QE("p15uploadCore",false)}}}function p15consoleClear(){QH("p15agentConsoleText","");Q("id_p15consoleClear").blur();if(xxcurrentView==115){consoleServerText=""}else{consoleNode.consoleText=""}}var consoleHistory=[];function p15consoleSend(a){if(a&&a.keyCode!=13){return}var d=Q("p15consoleText").value,c="<div style=color:green>> "+EscapeHtml(Q("p15consoleText").value)+"<br/></div>";Q("p15agentConsoleText").innerHTML+=c;Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight;Q("p15consoleText").value="";if(xxcurrentView==115){consoleServerText+=c;meshserver.send({action:"serverconsole",value:d})}else{consoleNode.consoleText+=c;meshserver.send({action:"msg",type:"console",nodeid:consoleNode._id,value:d})}if(d.length>0){var b=consoleHistory.indexOf(d);if(b>=0){consoleHistory.splice(b,1)}consoleHistory.unshift(d);consoleHistory.splice(10)}}function p15consoleReceive(b,a){a="<div>"+a+"</div>";if(b==="serverconsole"){consoleServerText+=a;if(consoleNode=="server"){Q("p15agentConsoleText").innerHTML+=a;Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight}}else{if(b.consoleText==null){b.consoleText=a}else{b.consoleText+=a}if(consoleNode==b){Q("p15agentConsoleText").innerHTML+=a;Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight}}}function p15downloadConsoleText(){saveAs(new Blob([Q("p15agentConsoleText").innerText],{type:"application/octet-stream"}),"console.txt")}function p15uploadCore(a){if(xxdialogMode){return}if(a.shiftKey==true){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"})}else{if(a.altKey==true){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"})}else{if(a.ctrlKey==true){p15uploadCore2()}else{setDialogMode(2,"Perform Agent Action",3,p15uploadCoreEx,addHtmlValue("Action","<select id=d3coreMode style=width:230px><option value=1>Upload default server core</option><option value=2>Clear the core</option><option value=6>Upload recovery core</option><option value=3>Upload a core file</option><option value=4>Soft disconnect agent</option><option value=5>Hard disconnect agent</option></select>"))}}}}function p15uploadCoreEx(){if(Q("d3coreMode").value==1){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"})}else{if(Q("d3coreMode").value==2){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"})}else{if(Q("d3coreMode").value==3){p15uploadCore2()}else{if(Q("d3coreMode").value==4){meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:1})}else{if(Q("d3coreMode").value==5){meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:2})}else{if(Q("d3coreMode").value==6){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"recovery"})}}}}}}}function p15uploadCore2(){if(xxdialogMode){return}Q("d3localmodeform").action="uploadmeshcorefile.ashx";Q("d3attrib").value=currentNode._id;setDialogMode(3,"Upload Mesh Agent Core",3,p15uploadCoreEx2);d3init()}function p15uploadCoreEx2(){var b=Q("d3uploadMode").value;if(b==1){Q("d3submit").click()}else{var a=d3getFileSel();if(a.length==1){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"custom",path:d3filetreelocation.join("/")+"/"+a[0]})}}}function account_manageAuthApp(){if(xxdialogMode||((features&4096)==0)){return}if(userinfo.otpsecret==1){account_removeOtp()}else{account_addOtp()}return false}function account_addOtp(){if(xxdialogMode||(userinfo.otpsecret==1)||((features&4096)==0)){return}setDialogMode(2,"Authenticator App",2,function(){meshserver.send({action:"otpauth-setup",secret:Q("d2optsecret").attributes.secret.value,token:Q("d2otpauthinput").value})},"<div id=d2optinfo>Loading...</div>","otpauth-request");meshserver.send({action:"otpauth-request"})}function account_addOtpCheck(a){var b=(Q("d2otpauthinput").value.length==6);QE("idx_dlgOkButton",b);if(a&&(a.keyCode==13)&&b){dialogclose(1)}}function account_removeOtp(){if(xxdialogMode||(userinfo.otpsecret!=1)||((features&4096)==0)){return}setDialogMode(2,"Authenticator App",3,function(){meshserver.send({action:"otpauth-clear"})},"Confirm removal of authenticator application 2-step login?")}function account_manageOtp(a){if((xxdialogMode==2)&&(xxdialogTag=="otpauth-manage")){dialogclose(0)}if(xxdialogMode||((features&4096)==0)){return false}if((userinfo.otpsecret==1)||(userinfo.otphkeys>0)){meshserver.send({action:"otpauth-getpasswords",subaction:a})}return false}function account_manageHardwareOtp(){if((xxdialogMode==2)&&(xxdialogTag=="otpauth-hardware-manage")){dialogclose(0)}if(xxdialogMode||((features&4096)==0)){return false}meshserver.send({action:"otp-hkey-get"});return false}function account_addhkey(a){if(a==3){var b="Type in the name of the key to add.<br /><br />";b+=addHtmlValue("Key Name",'<input id=dp1keyname style=width:230px maxlength=20 autocomplete=off placeholder="MyKey" onkeyup=account_addhkeyValidate(event,2) />')}else{if(a==2){var b="Type in a key name, select the OTP box and press the button on the YubiKey™.<br /><br />";b+=addHtmlValue("Key Name",'<input id=dp1keyname style=width:230px maxlength=20 autocomplete=off placeholder="MyKey" onkeyup=account_addhkeyValidate(event,1) />');b+=addHtmlValue("YubiKey™ OTP","<input id=dp1key style=width:230px autocomplete=off onkeyup=account_addhkeyValidate(event,2) />")}}setDialogMode(2,"Add Security Key",3,account_addhkeyEx,b,a);Q("dp1keyname").focus()}function account_addhkeyValidate(b,a){if((b!=null)&&(b.keyCode==13)){if(a==2){dialogclose(1)}else{Q("dp1key").focus()}}}function account_addhkeyEx(a,c){var b=Q("dp1keyname").value;if(b==""){b="MyKey"}if(c==2){meshserver.send({action:"otp-hkey-yubikey-add",name:b,otp:Q("dp1key").value});setDialogMode(2,"Add Security Key",0,null,"<br />Checking...<br /><br /><br />","otpauth-hardware-manage")}else{if(c==3){meshserver.send({action:"webauthn-startregister",name:b})}}}function account_removehkey(a){meshserver.send({action:"otp-hkey-remove",index:a});meshserver.send({action:"otp-hkey-get"})}var loclist={af:"Afrikaans",sq:"Albanian",ar:"Arabic (Standard)","ar-dz":"Arabic (Algeria)","ar-bh":"Arabic (Bahrain)","ar-eg":"Arabic (Egypt)","ar-iq":"Arabic (Iraq)","ar-jo":"Arabic (Jordan)","ar-kw":"Arabic (Kuwait)","ar-lb":"Arabic (Lebanon)","ar-ly":"Arabic (Libya)","ar-ma":"Arabic (Morocco)","ar-om":"Arabic (Oman)","ar-qa":"Arabic (Qatar)","ar-sa":"Arabic (Saudi Arabia)","ar-sy":"Arabic (Syria)","ar-tn":"Arabic (Tunisia)","ar-ae":"Arabic (U.A.E.)","ar-ye":"Arabic (Yemen)",an:"Aragonese",hy:"Armenian",as:"Assamese",ast:"Asturian",az:"Azerbaijani",eu:"Basque",bg:"Bulgarian",be:"Belarusian",bn:"Bengali",bs:"Bosnian",br:"Breton",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",zh:"Chinese","zh-hk":"Chinese (Hong Kong)","zh-cn":"Chinese (PRC)","zh-sg":"Chinese (Singapore)","zh-tw":"Chinese (Taiwan)",cv:"Chuvash",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",nl:"Dutch (Standard)","nl-be":"Dutch (Belgian)",en:"English","en-au":"English (Australia)","en-bz":"English (Belize)","en-ca":"English (Canada)","en-ie":"English (Ireland)","en-jm":"English (Jamaica)","en-nz":"English (New Zealand)","en-ph":"English (Philippines)","en-za":"English (South Africa)","en-tt":"English (Trinidad & Tobago)","en-gb":"English (United Kingdom)","en-us":"English (United States)","en-zw":"English (Zimbabwe)",eo:"Esperanto",et:"Estonian",fo:"Faeroese",fa:"Farsi (Persian)",fj:"Fijian",fi:"Finnish",fr:"French (Standard)","fr-be":"French (Belgium)","fr-ca":"French (Canada)","fr-fr":"French (France)","fr-lu":"French (Luxembourg)","fr-mc":"French (Monaco)","fr-ch":"French (Switzerland)",fy:"Frisian",fur:"Friulian",gd:"Gaelic (Scots)","gd-ie":"Gaelic (Irish)",gl:"Galacian",ka:"Georgian",de:"German (Standard)","de-at":"German (Austria)","de-de":"German (Germany)","de-li":"German (Liechtenstein)","de-lu":"German (Luxembourg)","de-ch":"German (Switzerland)",el:"Greek",gu:"Gujurati",ht:"Haitian",he:"Hebrew",hi:"Hindi",hu:"Hungarian",is:"Icelandic",id:"Indonesian",iu:"Inuktitut",ga:"Irish",it:"Italian (Standard)","it-ch":"Italian (Switzerland)",ja:"Japanese",kn:"Kannada",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ky:"Kirghiz",tlh:"Klingon",ko:"Korean","ko-kp":"Korean (North Korea)","ko-kr":"Korean (South Korea)",la:"Latin",lv:"Latvian",lt:"Lithuanian",lb:"Luxembourgish",mk:"FYRO Macedonian",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mo:"Moldavian",nv:"Navajo",ng:"Ndonga",ne:"Nepali",no:"Norwegian",nb:"Norwegian (Bokmal)",nn:"Norwegian (Nynorsk)",oc:"Occitan",or:"Oriya",om:"Oromo","fa-ir":"Persian/Iran",pl:"Polish",pt:"Portuguese","pt-br":"Portuguese (Brazil)",pa:"Punjabi","pa-in":"Punjabi (India)","pa-pk":"Punjabi (Pakistan)",qu:"Quechua",rm:"Rhaeto-Romanic",ro:"Romanian","ro-mo":"Romanian (Moldavia)",ru:"Russian","ru-mo":"Russian (Moldavia)",sz:"Sami (Lappish)",sg:"Sango",sa:"Sanskrit",sc:"Sardinian",sd:"Sindhi",si:"Singhalese",sr:"Serbian",sk:"Slovak",sl:"Slovenian",so:"Somani",sb:"Sorbian",es:"Spanish","es-ar":"Spanish (Argentina)","es-bo":"Spanish (Bolivia)","es-cl":"Spanish (Chile)","es-co":"Spanish (Colombia)","es-cr":"Spanish (Costa Rica)","es-do":"Spanish (Dominican Republic)","es-ec":"Spanish (Ecuador)","es-sv":"Spanish (El Salvador)","es-gt":"Spanish (Guatemala)","es-hn":"Spanish (Honduras)","es-mx":"Spanish (Mexico)","es-ni":"Spanish (Nicaragua)","es-pa":"Spanish (Panama)","es-py":"Spanish (Paraguay)","es-pe":"Spanish (Peru)","es-pr":"Spanish (Puerto Rico)","es-es":"Spanish (Spain)","es-uy":"Spanish (Uruguay)","es-ve":"Spanish (Venezuela)",sx:"Sutu",sw:"Swahili",sv:"Swedish","sv-fi":"Swedish (Finland)","sv-sv":"Swedish (Sweden)",ta:"Tamil",tt:"Tatar",te:"Teluga",th:"Thai",tig:"Tigre",ts:"Tsonga",tn:"Tswana",tr:"Turkish",tk:"Turkmen",uk:"Ukrainian",hsb:"Upper Sorbian",ur:"Urdu",ve:"Venda",vi:"Vietnamese",vo:"Volapuk",wa:"Walloon",cy:"Welsh",xh:"Xhosa",ji:"Yiddish",zu:"Zulu"};function account_showLocalizationSettings(){if(xxdialogMode){return false}var b=getstore("loctag",0);var c='<select id=d2locselect style=width:100%><option value="*">User browser value</option>';for(var a in loclist){c+='<option value="'+a+'"'+((b==a)?" selected":"")+">"+a+" - "+loclist[a]+"</option>"}c+="</select>";var d=addHtmlValue("Localization",c);setDialogMode(2,"Localization Settings",3,account_showLocalizationSettingsEx,d);return false}function account_showLocalizationSettingsEx(){var b=getstore("loctag",0);var a=Q("d2locselect").value;if(b!=a){if(a!="*"){args.locale=a}else{delete args.locale}putstore("loctag",args.locale);masterUpdate(4294967295)}}function account_enableNotifications(){if(Notification){Notification.requestPermission().then(function(a){QV("accountEnableNotificationsSpan",a!="granted")})}return false}function account_showAccountNotifySettings(){if(xxdialogMode){return false}var b="";b+="<div><label><input id=p2notifyPlayNotifySound type=checkbox />Notification sound.</label></div>";b+="<div><label><input id=p2notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>";b+="<div><label><input id=p2notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>";b+="<div><label><input id=p2notifyIntelAmtKvmActions type=checkbox />Intel® AMT desktop and serial events.</label></div>";setDialogMode(2,"Notification Settings",3,account_showAccountNotifySettingsEx,b);var a=getstore("notifications",0);Q("p2notifyPlayNotifySound").checked=(a&1);Q("p2notifyIntelDeviceConnect").checked=(a&2);Q("p2notifyIntelDeviceDisconnect").checked=(a&4);Q("p2notifyIntelAmtKvmActions").checked=(a&8);return false}function account_showAccountNotifySettingsEx(){var a=0;a+=Q("p2notifyPlayNotifySound").checked?1:0;a+=Q("p2notifyIntelDeviceConnect").checked?2:0;a+=Q("p2notifyIntelDeviceDisconnect").checked?4:0;a+=Q("p2notifyIntelAmtKvmActions").checked?8:0;putstore("notifications",a)}function account_showVerifyEmail(){if(xxdialogMode||(userinfo.emailVerified==true)||(serverinfo.emailcheck!=true)){return false}var a="Click ok to send a verification mail to:<br /><div style=padding:8px><b>"+EscapeHtml(userinfo.email)+"</b></div>Please wait a few minute to receive the verification.";setDialogMode(2,"Email Verification",3,account_showVerifyEmailEx,a);return false}function account_showVerifyEmailEx(){meshserver.send({action:"verifyemail",email:userinfo.email})}function account_showChangeEmail(){if(xxdialogMode){return false}var a="Change your account email address here.<br /><br />";a+=addHtmlValue("Email","<input id=dp2email style=width:230px maxlength=256 onchange=account_validateEmail() onkeyup=account_validateEmail(event) />");setDialogMode(2,"Email Address Change",3,account_changeEmail,a);if(userinfo.email!=null){Q("dp2email").value=userinfo.email}account_validateEmail();Q("dp2email").focus();return false}function account_validateEmail(a,b){QE("idx_dlgOkButton",validateEmail(Q("dp2email").value)&&(Q("dp2email").value!=userinfo.email));if((a!=null)&&(a.keyCode==13)){dialogclose(1)}}function account_changeEmail(){meshserver.send({action:"changeemail",email:Q("dp2email").value})}function account_showDeleteAccount(){if(xxdialogMode){return false}var a="To delete this account, type in the account password in both boxes below and hit ok.<br /><br />";a+="<form method=post><input type=hidden name=action value=deleteaccount /><input type=hidden name=authcookie value="+authCookie+" /><table style=margin-left:80px><tr>";a+="<td align=right>Password:</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>";a+="</tr><tr><td align=right>Password:</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>";a+="</tr></table><br /><div style=padding:10px;margin-bottom:4px>";a+="<input id=account_dlgCancelButton type=button value=Cancel style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>";a+='<input id=account_dlgOkButton type=submit value=OK style="float:right;width:80px" onclick=dialogclose(1)>';a+="</div><br /></form>";setDialogMode(2,"Delete Account",0,null,a);account_validateDeleteAccount();Q("apassword1").focus();return false}function account_showChangePassword(){if(xxdialogMode){return false}var d="Change your account password by entering the old password and new password twice in the boxes below.";if(features&65536){" Password hint can be used but is not recommanded."}d+="<br /><br />";d+="<table style=margin-left:60px>";d+="<tr><td align=right>Old password:</td><td><input id=apassword0 type=password name=apassword0 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b></b></td></tr>";d+="<tr><td align=right>New password:</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b><span id=dxPassWarn></span></b></td></tr>";d+="<tr><td align=right>New password:</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>";if(features&65536){d+="<tr><td align=right>Password hint:</td><td><input id=apasswordhint name=apasswordhint maxlength=250 type=text autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>"}d+="</table>";if(passRequirements){var b=[],c=0;for(var a in passRequirements){if((a!="reset")&&(a!="hint")){b.push(a+":"+passRequirements[a]);c++}}if(c>0){d+="<br /><span style=font-size:x-small>Requirements: "+b.join(", ")+".</span>"}}d+="<br />";setDialogMode(2,"Change Password",3,account_showChangePasswordEx,d);Q("apassword0").focus();account_validateNewPassword();return false}function account_showChangePasswordEx(){if(Q("apassword1").value==Q("apassword2").value){var a={action:"changepassword",oldpass:Q("apassword0").value,newpass:Q("apassword1").value};if(features&65536){a.hint=Q("apasswordhint").value}meshserver.send(a)}}function account_createMesh(){if(xxdialogMode){return false}if((userinfo.siteadmin!=4294967295)&&((userinfo.siteadmin&64)!=0)){setDialogMode(2,"New Device Group",1,null,"This account does not have the rights to create a new device group.");return false}if((userinfo.emailVerified!==true)&&(serverinfo.emailcheck==true)&&(userinfo.siteadmin!=4294967295)){setDialogMode(2,"Account Security",1,null,'Unable to access a device until a email address is verified. This is required for password recovery. Go to the "My Account" tab to change and verify an email address.');return false}if((features&262144)&&!((userinfo.otpsecret==1)||(userinfo.otphkeys>0)||(userinfo.otpkeys>0))){setDialogMode(2,"Account Security",1,null,'Unable to access a device until two-factor authentication is enabled. This is required for extra security. Go to the "My Account" tab and look at the "Account Security" section.');return false}var a="Create a new device group using the options below.<br /><br />";a+=addHtmlValue("Name","<input id=dp2meshname style=width:230px maxlength=64 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,1) />");a+=addHtmlValue("Type","<div style=width:230px;margin:0;padding:0><select id=dp2meshtype style=width:100% onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) ><option value=2>Manage using a software agent</option><option value=1>Intel® AMT only, no agent</option></select></div>");a+=addHtmlValue("Description","<div style=width:230px;margin:0;padding:0><textarea id=dp2meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>");setDialogMode(2,"New Device Group",3,account_createMeshEx,a);account_validateMeshCreate();Q("dp2meshname").focus();return false}function account_validateMeshCreate(a,b){if((b==1)&&(a!=null)&&(a.key=="Enter")&&(Q("dp2meshname").value.length>0)){Q("dp2meshtype").focus()}if((b==2)&&(a!=null)&&(a.key=="Enter")){Q("dp2meshdesc").focus()}QE("idx_dlgOkButton",Q("dp2meshname").value.length>0)}function account_createMeshEx(a,b){meshserver.send({action:"createmesh",meshname:Q("dp2meshname").value,meshtype:Q("dp2meshtype").value,desc:Q("dp2meshdesc").value})}function account_validateDeleteAccount(){QE("account_dlgOkButton",(Q("apassword1").value.length>0)&&(Q("apassword1").value==Q("apassword2").value))}function account_validateNewPassword(){var d="",a=(Q("apassword0").value.length>0)&&(Q("apassword1").value.length>0)&&(Q("apassword1").value==Q("apassword2").value)&&(Q("apassword0").value!=Q("apassword1").value);if((features&65536)&&(Q("apasswordhint").value==Q("apassword1").value)){a=false}if(Q("apassword1").value!=""){if(passRequirements==null||passRequirements==""){var c=checkPasswordStrength(Q("apassword1").value);if(c>=80){d="<span style=color:green>Strong<span>"}else{if(c>=60){d="<span style=color:blue>Good<span>"}else{d="<span style=color:red>Weak<span>"}}}else{var b=checkPasswordRequirements(Q("apassword1").value,passRequirements);if(b==false){a=false;d="<span style=color:red>Policy<span>"}}}QH("dxPassWarn",d);QE("idx_dlgOkButton",a)}function checkPasswordStrength(e){var g=0,d={},h=0,j={digits:/\d/.test(e),lower:/[a-z]/.test(e),upper:/[A-Z]/.test(e),nonWords:/\W/.test(e)};if(!e){return 0}for(var b=0;b<e.length;b++){d[e[b]]=(d[e[b]]||0)+1;g+=5/d[e[b]]}for(var a in j){h+=(j[a]==true)?1:0}return parseInt(g+(h-1)*10)}function checkPasswordRequirements(e,g){if((g==null)||(g=="")||(typeof g!="object")){return true}if(g.min){if(e.length<g.min){return false}}if(g.max){if(e.length>g.max){return false}}var d=0,b=0,h=0,c=0;for(var a=0;a<e.length;a++){if(/\d/.test(e[a])){d++}if(/[a-z]/.test(e[a])){b++}if(/[A-Z]/.test(e[a])){h++}if(/\W/.test(e[a])){c++}}if(g.num&&(d<g.num)){return false}if(g.lower&&(b<g.lower)){return false}if(g.upper&&(h<g.upper)){return false}if(g.nonalpha&&(c<g.nonalpha)){return false}return true}function updateMeshes(){var e="";var a=0,b=0;for(i in meshes){if(a>1){e+="</tr><tr>";a=0}a++;b++;var d=0;if(meshes[i].links[userinfo._id]){d=meshes[i].links[userinfo._id].rights}var g="Partial Rights";if(d==4294967295){g="Full Administrator"}else{if(d==0){g="No Rights"}}e+="<div onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=display:inline-block;width:431px;height:50px;padding-top:1px;padding-bottom:1px;float:left><div style=float:left;width:30px;height:100%></div><div tabindex=0 style=height:100%;cursor:pointer onclick=gotoMesh('"+i+"') onkeypress=\"if (event.key=='Enter') gotoMesh('"+i+"')\"><div class=mi style=float:left;width:50px;height:50px></div><div style=height:100%><div class=g1></div><div class=e2 style=width:300px><div class=e1>"+EscapeHtml(meshes[i].name)+"</div><div>"+g+"</div></div><div class=g2 style=float:left></div></div></div></div>"}meshcount=b;QH("p2meshes",e);QV("p2noMeshFound",b==0)}function gotoMesh(a){currentMesh=meshes[a];p20updateMesh();go(20);return false}function server_showRestoreDlg(){if(xxdialogMode){return false}var a="Restore the server using a backup, <span style=color:red>this will delete the existing server data</span>. Only do this if you know what you are doing.<br /><br />";a+='<form action="/restoreserver.ashx" enctype="multipart/form-data" method="post"><div>';a+='<input id=account_dlgFileInput type=file name=datafile style=width:100% accept=".zip,application/octet-stream,application/zip,application/x-zip,application/x-zip-compressed" onchange=account_validateServerRestore()>';a+="<input id=account_dlgCancelButton type=button value=Cancel style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>";a+="<input id=account_dlgOkButton type=submit value=OK style=float:right;width:80px onclick=dialogclose(1)>";a+="</div><br /><br /></form>";setDialogMode(2,"Restore Server",0,null,a);account_validateServerRestore();return false}function account_validateServerRestore(){QE("account_dlgOkButton",Q("account_dlgFileInput").files.length==1)}function server_showVersionDlg(){if(xxdialogMode){return false}setDialogMode(2,"MeshCentral Version",1,null,"Loading...","MeshCentralServerUpdate");meshserver.send({action:"serverversion"});return false}function server_showVersionDlgUpdate(){QE("idx_dlgOkButton",Q("d2updateCheck").checked)}function server_showVersionDlgEx(){meshserver.send({action:"serverupdate"})}function server_showErrorsDlg(){if(xxdialogMode){return false}setDialogMode(2,"MeshCentral Errors",1,null,"Loading...","MeshCentralServerErrors");meshserver.send({action:"servererrors"});return false}function server_showErrorsDlgUpdate(){QE("idx_dlgOkButton",Q("d2updateCheck").checked)}function server_showErrorsDlgEx(){meshserver.send({action:"serverclearerrorlog"})}function d2CopyServerErrorsToClip(){saveAs(new Blob([Q("d2ServerErrorsLogPre").innerText],{type:"application/octet-stream"}),"servererrors.txt")}var currentMesh;function p20updateMesh(){if(currentMesh==null){return}QH("p20meshName",EscapeHtml(currentMesh.name));var m="Unknown #"+currentMesh.mtype;var l=0;try{l=currentMesh.links[userinfo._id].rights}catch(d){}if(currentMesh.mtype==1){m="Intel® AMT only, no agent"}if(currentMesh.mtype==2){m="Managed using a software agent"}var t="";t+=addHtmlValue("Name",addLinkConditional(EscapeHtml(currentMesh.name),"p20editmesh(1)",(l&1)!=0));t+=addHtmlValue("Description",addLinkConditional(((currentMesh.desc&¤tMesh.desc!="")?EscapeHtml(currentMesh.desc):"<i>None</i>"),"p20editmesh(2)",(l&1)!=0));t+=addHtmlValue("Type",m);if(currentMesh.mtype==2){var h=[];if(currentMesh.flags){if(currentMesh.flags&1){h.push("Auto-Remove")}if(currentMesh.flags&2){h.push("Hostname Sync")}}h=h.join(", ");if(h==""){h="<i>None</i>"}t+=addHtmlValue("Features",addLinkConditional(h,"p20editmeshfeatures()",l&1))}if(currentMesh.mtype==2){h=[];var a=0;if(currentMesh.consent){a=currentMesh.consent}if(serverinfo.consent){a|=serverinfo.consent}if(a&8){h.push("Desktop Prompt")}else{if(a&1){h.push("Desktop Notify")}}if(a&16){h.push("Terminal Prompt")}else{if(a&2){h.push("Terminal Notify")}}if(a&32){h.push("Files Prompt")}else{if(a&4){h.push("Files Notify")}}if(a==7){h=["Always Notify"]}if((a&56)==56){h=["Always Prompt"]}h=h.join(", ");if(h==""){h="<i>None</i>"}t+=addHtmlValue("User Consent",addLinkConditional(h,"p20editmeshconsent()",l&1))}var j=0,k=[];if(userinfo.links&&userinfo.links[currentMesh._id]&&userinfo.links[currentMesh._id].notify){j=userinfo.links[currentMesh._id].notify}if(j&2){k.push("Connect")}if(j&4){k.push("Disconnect")}if(j&8){k.push("Intel® AMT")}if(k.length==0){k.push("None")}t+=addHtmlValue("Notifications",addLink(k.join(", "),"p20editMeshNotify()"));var g="No Policy";if(currentMesh.amt){if(currentMesh.amt.type==1){g="Deactivate Client Control Mode (CCM)"}else{if(currentMesh.amt.type==2){g="Simple Client Control Mode (CCM)";if(currentMesh.amt.cirasetup==2){g+=" + CIRA"}}else{if(currentMesh.amt.type==3){g="Simple Admin Control Mode (ACM)";if(currentMesh.amt.cirasetup==2){g+=" + CIRA"}}}}}t+=addHtmlValue("Intel® AMT",addLinkConditional(g,"p20editMeshAmt()",l&1));if(l&1){t+='<br><input type=button value=Notes title="View notes about this device group" onclick=showNotes(false,"'+encodeURIComponent(currentMesh._id)+'") />'}t+="<br style=clear:both><br>";var c=currentMesh.links[userinfo._id];if(c&&((c.rights&2)!=0)){t+='<a href=# onclick="return p20showAddMeshUserDialog()" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Add Users</a>'}if((l&4)!=0){if(currentMesh.mtype==1){t+="<a href=# onclick='return addCiraDeviceToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Add a new Intel® AMT computer that is located on the internet."><img src=images/icon-installmesh.png border=0 height=12 width=12> Install CIRA</a>';t+="<a href=# onclick='return addDeviceToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Add a new Intel® AMT computer that is located on the local network."><img src=images/icon-installmesh.png border=0 height=12 width=12> Install local</a>';if(currentMesh.amt&&(currentMesh.amt.type==2)){t+="<a href=# onclick='return showCcmActivation(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Perform Intel AMT client control mode (CCM) activation."><img src=images/icon-installmesh.png border=0 height=12 width=12> Activation</a>'}else{if(currentMesh.amt&&(currentMesh.amt.type==3)&&((features&1048576)!=0)){t+="<a href=# onclick='return showAcmActivation(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Perform Intel AMT admin control mode (ACM) activation."><img src=images/icon-installmesh.png border=0 height=12 width=12> Activation</a>'}}}if(currentMesh.mtype==2){t+="<a href=# onclick='return addAgentToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Add a new computer to this mesh by installing the mesh agent."><img src=images/icon-addnew.png border=0 height=12 width=12> Install</a>';t+="<a href=# onclick='return inviteAgentToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Invite someone to install the mesh agent on this mesh."><img src=images/icon-addnew.png border=0 height=12 width=12> Invite</a>'}}t+='<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:left;width:430px>User Authorizations</th><th scope=col style=text-align:left></th></tr>';var b=1,p=[];for(var e in currentMesh.links){var s=e.split("/")[2];if(currentMesh.links[e].name){s=currentMesh.links[e].name}if(e==userinfo._id){s=userinfo.name}p.push({id:e,name:s,rights:currentMesh.links[e].rights})}p.sort(function(r,u){if(r.name>u.name){return 1}if(r.name<u.name){return -1}return 0});for(var e in p){var q="",o="Partial Rights",n=p[e].rights;if(n==4294967295){o="Full Administrator"}else{if(n==0){o="No Rights"}}if((p[e].id!=userinfo._id)&&(l==4294967295||(((l&2)!=0)))){q="<a href=# onclick='return p20deleteUser(event,\""+encodeURIComponent(p[e].id)+'")\' title="Remote user rights to this mesh" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'}t+='<tr tabindex=0 onclick=p20viewuser("'+encodeURIComponent(p[e].id)+"\") onkeypress=\"if (event.key=='Enter') p20viewuser('"+encodeURIComponent(p[e].id)+"')\" style=cursor:pointer"+(((b%2)==0)?";background-color:#DDD":"")+'><td><div title="User" class=m2></div><div> '+EscapeHtml(decodeURIComponent(p[e].name))+"<div></div></div></td><td><div style=float:right>"+q+"</div><div>"+o+"</div></td></tr>";++b}t+="</tbody></table>";if(l==4294967295){t+="<div style=font-size:x-small;text-align:right><span><a href=# onclick=p20showDeleteMeshDialog() style=cursor:pointer>Delete Group</a></span></div>"}QH("p20info",t)}function p20editMeshAmt(){if(xxdialogMode){return}var b="",a="";if((features&1048576)!=0){a="<option value=3>Simple Admin Control Mode (ACM)</option>"}if(currentMesh.mtype==1){b+=addHtmlValue("Type","<select id=dp20amtpolicy style=width:230px onchange=p20editMeshAmtChange()><option value=0>No Policy</option><option value=2>Simple Client Control Mode (CCM)</option>"+a+"</select>")}else{b+=addHtmlValue("Type","<select id=dp20amtpolicy style=width:230px onchange=p20editMeshAmtChange()><option value=0>No Policy</option><option value=1>Deactivate Client Control Mode (CCM)</option><option value=2>Simple Client Control Mode (CCM)</option>"+a+"</select>")}b+="<div id=dp20amtpolicydiv></div>";setDialogMode(2,"Intel® AMT Policy",3,p20editMeshAmtEx,b);if(currentMesh.amt){Q("dp20amtpolicy").value=currentMesh.amt.type}p20editMeshAmtChange();if(currentMesh.amt&&(currentMesh.amt.type==2)||(currentMesh.amt.type==3)){Q("dp20amtpolicypass").value=currentMesh.amt.password;if((currentMesh.amt.type==2)&&(currentMesh.amt.badpass!=null)){Q("dp20amtbadpass").value=currentMesh.amt.badpass}if((features&1024)==0){Q("dp20amtcira").value=currentMesh.amt.cirasetup}}dp20amtValidatePolicy()}function p20editMeshAmtChange(){var a=Q("dp20amtpolicy").value,b="";if(a>=2){b=addHtmlValue("Password*","<input id=dp20amtpolicypass type=password style=width:230px maxlength=32 onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />");b+=addHtmlValue("Password*","<input id=dp20amtpolicypass2 type=password style=width:230px maxlength=32 onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />");if((a==2)&&(currentMesh.mtype==2)){b+=addHtmlValue("Password mismatch","<select id=dp20amtbadpass style=width:230px><option value=0>Do nothing</option><option value=1>Reactivate Intel® AMT</option></select>")}if((features&1024)==0){if(a==2){b+=addHtmlValue('<span title="Client Initiated Remote Access">CIRA</span>',"<select id=dp20amtcira style=width:230px><option value=0>Don't configure</option><option value=1>Don't connect to server</option><option value=2>Connect to server</option></select>")}else{b+=addHtmlValue('<span title="Client Initiated Remote Access">CIRA</span>',"<select id=dp20amtcira style=width:230px><option value=0>Don't configure</option><option value=2>Connect to server</option></select>")}}b+='<br/><span style="font-size:10px">* Leave blank to assign a random password to each device.</span><br/>';if(currentMesh.mtype==2){if(a==2){b+='<span style="font-size:10px">This policy will not impact devices with Intel® AMT in ACM mode.</span><br/>';b+='<span style="font-size:10px">This is not a secure policy as agents will be performing activation.</span>'}else{b+='<span style="font-size:10px">During activation, the agent will have access to admin password infomation.</span>'}}}QH("dp20amtpolicydiv",b);setTimeout(dp20amtValidatePolicy,1)}function dp20amtValidatePolicy(){var a=true,d=Q("dp20amtpolicy").value;if((d==2)||(d==3)){var b=Q("dp20amtpolicypass").value,c=Q("dp20amtpolicypass2").value;a=((b===c)&&((b==="")?true:passwordcheck(b)))}QE("idx_dlgOkButton",a)}function p20editMeshAmtEx(){var b=parseInt(Q("dp20amtpolicy").value),a={type:b};if(b==2){a={type:b,password:Q("dp20amtpolicypass").value};if(currentMesh.mtype==2){a.badpass=parseInt(Q("dp20amtbadpass").value)}if((features&1024)==0){a.cirasetup=parseInt(Q("dp20amtcira").value)}else{a.cirasetup=1}}else{if(b==3){a={type:b,password:Q("dp20amtpolicypass").value};if((features&1024)==0){a.cirasetup=parseInt(Q("dp20amtcira").value)}else{a.cirasetup=1}}}meshserver.send({action:"meshamtpolicy",meshid:currentMesh._id,amtpolicy:a})}function p20showDeleteMeshDialog(){if(xxdialogMode){return false}var a='Are you sure you want to delete group "'+EscapeHtml(currentMesh.name)+'"? Deleting the device group will also delete all information about devices within this group.<br /><br />';a+="<label><input id=p20check type=checkbox onchange=p20validateDeleteMeshDialog() />Confirm</label>";setDialogMode(2,"Delete Group",3,p20showDeleteMeshDialogEx,a);p20validateDeleteMeshDialog();return false}function p20validateDeleteMeshDialog(){QE("idx_dlgOkButton",Q("p20check").checked)}function p20showDeleteMeshDialogEx(a,b){meshserver.send({action:"deletemesh",meshid:currentMesh._id,meshname:currentMesh.name})}function p20editmesh(a){if(xxdialogMode){return}var b=addHtmlValue("Name","<input id=dp20meshname style=width:230px maxlength=32 onchange=p20editmeshValidate() onkeyup=p20editmeshValidate(event) />");b+=addHtmlValue("Description","<div style=width:230px;margin:0;padding:0><textarea id=dp20meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>");setDialogMode(2,"Edit Device Group",3,p20editmeshEx,b);Q("dp20meshname").value=currentMesh.name;if(currentMesh.desc){Q("dp20meshdesc").value=currentMesh.desc}p20editmeshValidate();if(a==2){Q("dp20meshdesc").focus()}else{Q("dp20meshname").focus()}}function p20editmeshEx(){meshserver.send({action:"editmesh",meshid:currentMesh._id,meshname:Q("dp20meshname").value,desc:Q("dp20meshdesc").value})}function p20editmeshValidate(a){QE("idx_dlgOkButton",Q("dp20meshname").value.length>0);if(a&&a.key=="Enter"){Q("dp20meshdesc").focus()}}function p20editmeshconsent(){if(xxdialogMode){return}var b="",a=(currentMesh.consent)?currentMesh.consent:0;b+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px"><b>Desktop</b></div>';b+="<div><label><input type=checkbox id=d20flag1 "+((a&1)?"checked":"")+">Notify user</label></div>";b+="<div><label><input type=checkbox id=d20flag2 "+((a&8)?"checked":"")+">Prompt for user consent</label></div>";b+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:8px"><b>Terminal</b></div>';b+="<div><label><input type=checkbox id=d20flag3 "+((a&2)?"checked":"")+">Notify user</label></div>";b+="<div><label><input type=checkbox id=d20flag4 "+((a&16)?"checked":"")+">Prompt for user consent</label></div>";b+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:8px"><b>Files</b></div>';b+="<div><label><input type=checkbox id=d20flag5 "+((a&4)?"checked":"")+">Notify user</label></div>";b+="<div><label><input type=checkbox id=d20flag6 "+((a&32)?"checked":"")+">Prompt for user consent</label></div>";setDialogMode(2,"Edit Device Group User Consent",3,p20editmeshconsentEx,b);if(serverinfo.consent){if(serverinfo.consent&1){Q("d20flag1").checked=true}if(serverinfo.consent&8){Q("d20flag2").checked=true}if(serverinfo.consent&2){Q("d20flag3").checked=true}if(serverinfo.consent&16){Q("d20flag4").checked=true}if(serverinfo.consent&4){Q("d20flag5").checked=true}if(serverinfo.consent&32){Q("d20flag6").checked=true}QE("d20flag1",!(serverinfo.consent&1));QE("d20flag2",!(serverinfo.consent&8));QE("d20flag3",!(serverinfo.consent&2));QE("d20flag4",!(serverinfo.consent&16));QE("d20flag5",!(serverinfo.consent&4));QE("d20flag6",!(serverinfo.consent&32))}}function p20editmeshconsentEx(){var a=0;if(Q("d20flag1").checked){a+=1}if(Q("d20flag2").checked){a+=8}if(Q("d20flag3").checked){a+=2}if(Q("d20flag4").checked){a+=16}if(Q("d20flag5").checked){a+=4}if(Q("d20flag6").checked){a+=32}meshserver.send({action:"editmesh",meshid:currentMesh._id,consent:a})}function p20editmeshfeatures(){if(xxdialogMode){return}var a=(currentMesh.flags)?currentMesh.flags:0;var b="<div><label><input type=checkbox id=d20flag1 "+((a&1)?"checked":"")+">Remove device on disconnect</label><br></div>";b+="<div><label><input type=checkbox id=d20flag2 "+((a&2)?"checked":"")+">Sync server device name to hostname</label><br></div>";setDialogMode(2,"Edit Device Group Features",3,p20editmeshfeaturesEx,b)}function p20editmeshfeaturesEx(){var a=0;if(Q("d20flag1").checked){a+=1}if(Q("d20flag2").checked){a+=2}meshserver.send({action:"editmesh",meshid:currentMesh._id,flags:a})}function p20showAddMeshUserDialog(d){if(xxdialogMode){return false}var e="";if(d==null){e+="Allow users to manage this device group and devices in this group.";if(features&524288){e+=" Users need to login to this server once before they can be added to a device group."}e+="<br /><br /><div style='position:relative'>";e+=addHtmlValue("User Names",'<input id=dp20username style=width:230px maxlength=32 onchange=p20validateAddMeshUserDialog() onkeyup=p20validateAddMeshUserDialog() placeholder="user1, user2, user3" />');e+="<div id=dp20usersuggest class=suggestionBox style='top:30px;left:130px;display:none'></div>";e+="</div><br>"}else{d=decodeURIComponent(d);var c=d.split("/")[2];if(users&&users[d]){c=users[d].name}if(userinfo._id==d){c=userinfo.name}e+="Group permissions for user "+c+".<br /><br />"}e+='<div style="height:120px;overflow-y:scroll;border:1px solid gray">';e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20fulladmin>Full Administrator</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editmesh>Edit Device Group</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20manageusers>Manage Device Group Users</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20managecomputers>Manage Device Group Computers</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotecontrol>Remote Control</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remoteview style=margin-left:12px>Remote View Only</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotelimitedinput style=margin-left:12px>Limited Input Only</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noterminal style=margin-left:12px>No Terminal Access</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20nofiles style=margin-left:12px>No File Access</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noamt style=margin-left:12px>No Intel® AMT</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshagentconsole>Mesh Agent Console</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshserverfiles>Server Files</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20wakedevices>Wake Devices</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editnotes>Edit Device Notes</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20limitevents>Show Only Own Events</label><br>";e+="</div>";if(d==null){setDialogMode(2,"Add Users to Device Group",3,p20showAddMeshUserDialogEx,e);Q("dp20username").focus()}else{setDialogMode(2,"Edit User Device Group Permissions",7,p20showAddMeshUserDialogEx,e,d);var a=currentMesh.links[userinfo._id].rights,b=currentMesh.links[d].rights;if(b==4294967295){Q("p20fulladmin").checked=true}else{if(b&1){Q("p20editmesh").checked=true}if(b&2){Q("p20manageusers").checked=true}if(b&4){Q("p20managecomputers").checked=true}if(b&8){Q("p20remotecontrol").checked=true;if(b&256){Q("p20remoteview").checked=true}if(b&512){Q("p20remotelimitedinput").checked=true}if(b&1024){Q("p20noterminal").checked=true}if(b&2048){Q("p20nofiles").checked=true}if(b&4096){Q("p20noamt").checked=true}}if(b&16){Q("p20meshagentconsole").checked=true}if(b&32){Q("p20meshserverfiles").checked=true}if(b&64){Q("p20wakedevices").checked=true}if(b&128){Q("p20editnotes").checked=true}if(b&8192){Q("p20limitevents").checked=true}}}p20validateAddMeshUserDialog();return false}function p20setname(b){b=decodeURIComponent(b);var c=Q("dp20username").value.split(",");for(var a in c){c[a]=c[a].trim()}c[c.length-1]=b;Q("dp20username").value=c.join(", ");p20validateAddMeshUserDialog();return false}function p20validateAddMeshUserDialog(){var g=currentMesh.links[userinfo._id].rights;var h=true,m=null;if(Q("dp20username")){Q("dp20username").value.split(",");for(var b in m){var l=m[b]=m[b].trim();if(l.length==0){h=false}else{if(l.indexOf('"')>=0){h=false}}}var j=false,a=false;if(users!=null){var c=m[m.length-1].trim(),d=c.toLowerCase(),e=[];if(c.length>0){for(var b in users){if(users[b].name===c){a=true;break}if(users[b].name.toLowerCase().indexOf(d)>=0){e.push(users[b].name);if(e.length>=8){break}}}if((a==false)&&(e.length>0)){var k="";for(var b in e){k+="<a href=# onclick='p20setname(\""+encodeURIComponent(e[b])+"\")'>"+e[b]+"</a><br />"}QH("dp20usersuggest",k);j=true}}}QV("dp20usersuggest",j)}QE("idx_dlgOkButton",h);QE("p20fulladmin",g==4294967295);QE("p20editmesh",(!Q("p20fulladmin").checked)&&(g==4294967295));QE("p20manageusers",!Q("p20fulladmin").checked);QE("p20managecomputers",!Q("p20fulladmin").checked);QE("p20remotecontrol",!Q("p20fulladmin").checked);QE("p20meshagentconsole",!Q("p20fulladmin").checked);QE("p20meshserverfiles",!Q("p20fulladmin").checked);QE("p20wakedevices",!Q("p20fulladmin").checked);QE("p20editnotes",!Q("p20fulladmin").checked);QE("p20limitevents",!Q("p20fulladmin").checked);QE("p20remoteview",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked);QE("p20remotelimitedinput",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked&&!Q("p20remoteview").checked);QE("p20noterminal",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked);QE("p20nofiles",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked);QE("p20noamt",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked)}function p20showAddMeshUserDialogEx(a,e){if(a==2){p20viewuserEx(a,e)}else{var d=0;if(Q("p20fulladmin").checked==true){d=4294967295}else{if(Q("p20editmesh").checked==true){d+=1}if(Q("p20manageusers").checked==true){d+=2}if(Q("p20managecomputers").checked==true){d+=4}if(Q("p20remotecontrol").checked==true){d+=8}if(Q("p20meshagentconsole").checked==true){d+=16}if(Q("p20meshserverfiles").checked==true){d+=32}if(Q("p20wakedevices").checked==true){d+=64}if(Q("p20editnotes").checked==true){d+=128}if(Q("p20remoteview").checked==true){d+=256}if(Q("p20noterminal").checked==true){d+=512}if(Q("p20nofiles").checked==true){d+=1024}if(Q("p20noamt").checked==true){d+=2048}if(Q("p20remotelimitedinput").checked==true){d+=4096}if(Q("p20limitevents").checked==true){d+=8192}}if(e==null){var g=Q("dp20username").value.split(","),h=[];for(var c in g){h.push(g[c].trim())}meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,usernames:h,meshadmin:d})}else{meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,usernames:[e.split("/")[2]],meshadmin:d})}}}function p20viewuser(g){if(xxdialogMode){return}var j=decodeURIComponent(g);var b=currentMesh.links[userinfo._id].rights,c=currentMesh.links[j].rights;if(((userinfo._id)!=j)&&(b==4294967295||(((b&2)!=0)&&(c!=4294967295)))){p20showAddMeshUserDialog(g)}else{var d="";if(c==4294967295){d=", Full Administrator (all rights)"}else{if((c&1)!=0){d+=", Edit Device Group"}if((c&2)!=0){d+=", Manage Device Group Users"}if((c&4)!=0){d+=", Manage Device Group Computers"}if((c&8)!=0){d+=", Remote Control"}if((c&16)!=0){d+=", Agent Console"}if((c&32)!=0){d+=", Server Files"}if((c&64)!=0){d+=", Wake Devices"}if((c&128)!=0){d+=", Edit Notes"}if(((c&8)!=0)&&(c&256)!=0){d+=", Remote View Only"}if(((c&8)!=0)&&(c&512)!=0){d+=", No Terminal"}if(((c&8)!=0)&&(c&1024)!=0){d+=", No Files"}if(((c&8)!=0)&&(c&2048)!=0){d+=", No Intel® AMT"}if(((c&8)!=0)&&((c&4096)!=0)&&((c&256)==0)){d+=", Limited Input"}if((c&8192)!=0){d+=", Self Events Only"}}d=d.substring(2);if(d==""){d="No Rights"}var e=j.split("/")[2];if(users&&users[j]){e=users[j].name}if(userinfo._id==j){e=userinfo.name}var a=1,h=addHtmlValue("User Name",EscapeHtml(decodeURIComponent(e)));if(j.split("/")[2]!=e){h+=addHtmlValue("User Identifier",EscapeHtml(j.split("/")[2]))}h+=addHtmlValue("Permissions",d);if(((userinfo._id)!=j)&&(b==4294967295||(((b&2)!=0)&&(c!=4294967295)))){a+=4}setDialogMode(2,"Device Group User",a,p20viewuserEx,h,j)}}function p20viewuserEx(a,c){if(a!=2){return}var b=c.split("/")[2];if(users&&users[c]){b=users[c].name}if(userinfo._id==c){b=userinfo.name}setDialogMode(2,"Remote Mesh User",3,p20viewuserEx2,"Confirm removal of user "+EscapeHtml(decodeURIComponent(b))+"?",c)}function p20deleteUser(a,b){haltEvent(a);p20viewuserEx(2,decodeURIComponent(b));return false}function p20viewuserEx2(a,b){meshserver.send({action:"removemeshuser",meshid:currentMesh._id,meshname:currentMesh.name,userid:b})}function p20editMeshNotify(){if(xxdialogMode){return false}var a=0;if(userinfo.links&&userinfo.links[currentMesh._id]&&userinfo.links[currentMesh._id].notify){a=userinfo.links[currentMesh._id].notify}var b="Notification settings must also be turned on in account settings.<br /><br />";b+="<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>";b+="<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>";b+="<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel® AMT desktop and serial events.</label></div>";setDialogMode(2,"Notification Settings",3,p20editMeshNotifyEx,b);Q("p20notifyIntelDeviceConnect").checked=(a&2);Q("p20notifyIntelDeviceDisconnect").checked=(a&4);Q("p20notifyIntelAmtKvmActions").checked=(a&8);return false}function p20editMeshNotifyEx(){var a=0;a+=Q("p20notifyIntelDeviceConnect").checked?2:0;a+=Q("p20notifyIntelDeviceDisconnect").checked?4:0;a+=Q("p20notifyIntelAmtKvmActions").checked?8:0;meshserver.send({action:"changemeshnotify",meshid:currentMesh._id,notify:a})}var filetreelinkpath;var filetreelocation=[];function updateFiles(){QV("MainMenuMyFiles",((features&8)==0));if((features&8)!=0){return}var q="",r="",c='<a href=# style=cursor:pointer onclick="return p5folderup(0)">Root</a>',o="Root",y,k=filetree,m=1;var j=[],v=filetreelinkpath,b=[],a=document.getElementsByName("fc");for(var s=0;s<a.length;s++){if(a[s].checked){b.push(a[s].value)}}filetreelinkpath="";for(var s in filetreelocation){if((k.f!=null)&&(k.f[filetreelocation[s]]!=null)){j.push(filetreelocation[s]);o+=" / "+filetreelocation[s];if((m==1)){var B=filetreelocation[s].split("/");y=window.location+B[0]+"files/"+B[2];filetreelinkpath+=filetreelocation[s]}else{if(filetreelinkpath!=""){filetreelinkpath+="/"+filetreelocation[s];if(m>2){y+="/"+filetreelocation[s]}}}k=k.f[filetreelocation[s]];c+=' / <a href=# style=cursor:pointer onclick="return p5folderup('+m+')">'+(k.n!=null?k.n:filetreelocation[s])+"</a>";m++}else{break}}filetreelocation=j;var w=o.toLowerCase().startsWith("root / "+userinfo._id+" / public");var l=p5sort_files(k.f);for(var s in l){var d=l[s],u=d.n,A;A=u;if(u.length>70){A='<span title="'+EscapeHtml(u)+'">'+EscapeHtml(u.substring(0,70))+"...</span>"}else{A=EscapeHtml(u)}u=EscapeHtml(u);var g="";if(d.d!=null){var e=new Date(d.d),g=printDateTime(e)+" "}var n="";if(d.s!=null){n=getFileSizeStr(d.s)}var p="";if(d.t<3||d.t==4){var z=(d.t==1||d.t==4)?p5getQuotabar(d):"",C="";p="<div class=filelist file=999><input file=999 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+u+"'> <span style=float:right title=\""+C+'">'+z+"</span><span><div class=fileIcon"+d.t+' onclick=p5folderset("'+encodeURIComponent(d.nx)+'")></div><a href=# style=cursor:pointer onclick=\'return p5folderset("'+encodeURIComponent(d.nx)+"\")'>"+A+"</a></span></div>"}else{var t=A,x="";if(w){x=' (<a style=cursor:pointer title="Display public link" onclick=\'return p5showPublicLink("'+y+"/"+d.nx+"\")'>Link</a>)"}if(d.s>0){t='<a rel="noreferrer noopener" target="_blank" download href="downloadfile.ashx?link='+encodeURIComponent(filetreelinkpath+"/"+d.nx)+'">'+A+"</a>"+x}p="<div class=filelist file=3><input file=3 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+d.nx+"'> <span class=fsize>"+g+"</span><span style=float:right>"+n+"</span><span><div class=fileIcon"+d.t+"></div>"+t+"</span></div>"}if(d.t<3){q+=p}else{r+=p}}QH("p5rightOfButtons",p5getQuotabar(k));QH("p5files",q+r);QH("p5currentpath",c);QE("p5FolderUp",filetreelocation.length!=0);QV("p5PublicShare",w);if(v==filetreelinkpath){a=document.getElementsByName("fc");for(var s=0;s<a.length;s++){a[s].checked=(b.indexOf(a[s].value)>=0)}}p5setActions()}function getNiceSize(a){if(a<=0){return"Storage limit exceed"}if(a<2048){return a+" bytes remaining"}if(a<2097152){return Math.round(a/1024)+" kilobytes remaining"}if(a<2147483648){return Math.round(a/1024/1024)+" megabytes remaining"}return Math.round(a/1024/1024/1024)+" gigabytes remaining"}function getNiceSize2(a){if(a<=0){return"None"}if(a<2048){return a+" b"}if(a<2097152){return Math.round(a/1024)+" Kb"}if(a<2147483648){return Math.round(a/1024/1024)+" Mb"}return Math.round(a/1024/1024/1024)+" Gb"}function p5getQuotabar(a){while(a.t>1&&a.t!=4){a=a.parent}if((a.t!=1&&a.t!=4)||(a.maxbytes==null)){return""}var b=Math.floor(a.s/1024),c=(a.maxbytes-a.s);return'<span title="'+b+"k in "+a.c+" file"+(a.c>1?"s":"")+". "+(Math.floor(a.maxbytes/1024/1024))+'k maxinum">'+getNiceSize(c)+" <progress style=height:10px;width:100px value="+a.s+" max="+a.maxbytes+" /></span>"}function p5showPublicLink(a){setDialogMode(2,"Public Link",1,null,'<input type=text style=width:100% value="'+a+'" readonly />');return false}var sortorder;function p5sort_filename(c,d){if(c.ln>d.ln){return(1*sortorder)}if(c.ln<d.ln){return(-1*sortorder)}return 0}function p5sort_timestamp(c,d){if(c.d>d.d){return(1*sortorder)}if(c.d<d.d){return(-1*sortorder)}return 0}function p5sort_bysize(c,d){if(c.s==d.s){return p5sort_filename(c,d)}return(((c.s-d.s))*sortorder)}function p5sort_files(a){var c=[],d=Q("p5sortdropdown").value;for(var b in a){a[b].nx=b;if(a[b].n==null){a[b].n=b}a[b].ln=a[b].n.toLowerCase();c.push(a[b])}sortorder=1;if(d>3){sortorder=-1;d-=3}if(d==1){c.sort(p5sort_filename)}else{if(d==2){c.sort(p5sort_bysize)}else{if(d==3){c.sort(p5sort_timestamp)}}}return c}function p5setActions(){var a=getFileSelCount(),c=getFileCount(),b=getFileSelCount(false);QE("p5DeleteFileButton",(a>0)&&(filetreelocation.length>0));QE("p5NewFolderButton",filetreelocation.length>0);QE("p5UploadButton",filetreelocation.length>0);QE("p5RenameFileButton",(a==1)&&(filetreelocation.length>0));QE("p5SelectAllButton",c>0);Q("p5SelectAllButton").value=(a>0?"Select None":"Select All");QE("p5CutButton",(b>0)&&(a==b));QE("p5CopyButton",(b>0)&&(a==b));QE("p5PasteButton",(p5clipboard!=null)&&(p5clipboard.length>0)&&(filetreelocation.length>0))}function getFileSelCount(d){var a=0,b=document.getElementsByName("fc");for(var c=0;c<b.length;c++){if((b[c].checked)&&((d!=false)||(b[c].attributes.file.value=="3"))){a++}}return a}function getFileSelDirCount(){var a=0,b=document.getElementsByName("fc");for(var c=0;c<b.length;c++){if((b[c].checked)&&(b[c].attributes.file.value=="999")){a++}}return a}function getFileCount(){var a=0;var b=document.getElementsByName("fc");return b.length}function p5selectallfile(){var c=(getFileSelCount()==0),a=document.getElementsByName("fc");for(var b=0;b<a.length;b++){a[b].checked=c}p5setActions()}function setupBackPointers(d){if(d.f!=null){var b=0,a=0;for(var c in d.f){setupBackPointers(d.f[c]);d.f[c].parent=d;if(d.f[c].s){b+=d.f[c].s}if(d.f[c].c){a+=d.f[c].c}if(d.f[c].t==3){a++}}d.s=b;d.c=a}return d}function getFileSizeStr(a){if(a==1){return"1 byte"}return""+a+" bytes"}function p5folderup(a){if(a==null){filetreelocation.pop()}else{while(filetreelocation.length>a){filetreelocation.pop()}}updateFiles();return false}function p5folderset(a){filetreelocation.push(decodeURIComponent(a));updateFiles();return false}function p5createfolder(){setDialogMode(2,"New Folder",3,p5createfolderEx,"<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% />");focusTextBox("p5renameinput");p5fileNameCheck()}function p5createfolderEx(){meshserver.send({action:"fileoperation",fileop:"createfolder",path:filetreelocation,newfolder:Q("p5renameinput").value})}function p5deletefile(){var a=getFileSelCount(),b=(getFileSelDirCount()>0)?"<br /><br /><label><input type=checkbox id=p5recdeleteinput>Recursive delete</label><br>":"<input type=checkbox id=p5recdeleteinput style='display:none'>";setDialogMode(2,"Delete",3,p5deletefileEx,(a>1)?("Delete "+a+" selected items?"+b):("Delete selected item?"+b))}function p5deletefileEx(){var b=[],a=document.getElementsByName("fc");for(var c=0;c<a.length;c++){if(a[c].checked){b.push(a[c].value)}}meshserver.send({action:"fileoperation",fileop:"delete",path:filetreelocation,delfiles:b,rec:Q("p5recdeleteinput").checked})}function p5renamefile(){var c,a=document.getElementsByName("fc");for(var b=0;b<a.length;b++){if(a[b].checked){c=a[b].value}}setDialogMode(2,"Rename",3,p5renamefileEx,'<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% value="'+c+'" />',{action:"fileoperation",fileop:"rename",path:filetreelocation,oldname:c});focusTextBox("p5renameinput");p5fileNameCheck()}function p5renamefileEx(a,c){c.newname=Q("p5renameinput").value;meshserver.send(c)}function p5fileNameCheck(a){var b=isFilenameValid(Q("p5renameinput").value);QE("idx_dlgOkButton",b);if((b==true)&&(a&&a.keyCode==13)){dialogclose(1)}}var isFilenameValid=(function(){var b=/^[^\\/:\*\?"<>\|]+$/,c=/^\./,d=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function a(e){return b.test(e)&&!c.test(e)&&!d.test(e)&&(e[0]!=".")}})();function p5uploadFile(){setDialogMode(2,"Upload File",3,p5uploadFileEx,'<form method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input type=text name=link style=display:none id=p5uploadpath value="'+encodeURIComponent(filetreelinkpath)+'" /><input type=file name=files id=p5uploadinput style=width:100% multiple=multiple onchange="updateUploadDialogOk(\'p5uploadinput\')" /><input type=submit id=p5loginSubmit style=display:none /></form>');updateUploadDialogOk("p5uploadinput")}function p5uploadFileEx(){Q("p5loginSubmit").click()}function updateUploadDialogOk(a){QE("idx_dlgOkButton",Q(a).value!="")}var p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0;function p5copyFile(b){var a=document.getElementsByName("fc");p5clipboard=[];p5clipboardCut=b,p5clipboardFolder=Clone(filetreelocation);for(var c=0;c<a.length;c++){if((a[c].checked)&&(a[c].attributes.file.value=="3")){p5clipboard.push(a[c].value)}}p5updateClipview()}function p5pasteFile(){var a="";if((p5clipboard!=null)&&(p5clipboard.length>0)){a="Confim "+(p5clipboardCut==0?"copy":"move")+" of "+p5clipboard.length+" entrie"+((p5clipboard.length>1)?"s":"")+" to this location?"}setDialogMode(2,"Paste",3,p5pasteFileEx,a)}function p5pasteFileEx(){meshserver.send({action:"fileoperation",fileop:(p5clipboardCut==0?"copy":"move"),scpath:p5clipboardFolder,path:filetreelocation,names:p5clipboard});p5folderup(999);if(p5clipboardCut==1){p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0;p5updateClipview()}}function p5updateClipview(){var a="";if((p5clipboard!=null)&&(p5clipboard.length>0)){a="Holding "+p5clipboard.length+" entrie"+((p5clipboard.length>1)?"s":"")+" for "+(p5clipboardCut==0?"copy":"move")+', <a href=# onclick="return p5clearClip()" style=cursor:pointer>Clear</a>.'}QH("p5bottomstatus",a);p5setActions()}function p5clearClip(){p5clipboard=null;p5clipboardFolder=null;p5clipboardCut=0;p5updateClipview();return false}function p5fileDragDrop(b){if(xxdialogMode){return}haltEvent(b);QV("bigfail",false);QV("bigok",false);if(b.dataTransfer==null){return}var h=[];for(var j in b.dataTransfer.files){if((b.dataTransfer.files[j].size!=null)&&(b.dataTransfer.files[j].size!=0)){h.push(b.dataTransfer.files[j])}}if(h.length==0){return}var c=0;p5uploadFile();try{Q("p5uploadinput").files=b.dataTransfer.files}catch(d){c=1}if(c==0){p5uploadFileEx()}setDialogMode(0);if(c==1){if(filetreelocation.length==0){return}var k=[],n=[],p=[],a=[],m=h.length,o=0;for(var j=0;j<h.length;j++){o+=h[j].size}if(o>1300000){p5uploadFile();return}for(var j=0;j<h.length;j++){var l=new FileReader(),g=h[j];k.push(g.name);n.push(g.size);p.push(g.type);l.onload=function(e){a.push(e.target.result);if(--m==0){Q("p5fileDragName").value=k.join("*");Q("p5fileDragSize").value=n.join("*");Q("p5fileDragType").value=p.join("*");Q("p5fileDragData").value=a.join("*");Q("p5fileDragLink").value=encodeURIComponent(filetreelinkpath);Q("p5loginSubmit2").click()}};l.readAsDataURL(g)}}}var p5dragtimer=null;function p5fileDragOver(b){if(xxdialogMode){return}haltEvent(b);if(p5dragtimer!=null){clearTimeout(p5dragtimer);p5dragtimer=null}var a=true;if(filetreelocation.length==0){a=false}QV("bigok",a);QV("bigfail",!a)}function p5fileDragLeave(a){if(xxdialogMode){return}haltEvent(a);if(a.target.id!="p5filetable"){QV("bigfail",false);QV("bigok",false)}else{p5dragtimer=setTimeout(function(){QV("bigfail",false);QV("bigok",false);p5dragtimer=null},10)}}function eventMouseHover(a,b){a.children[1].classList.remove("g1s");a.children[2].style["background-color"]=((b==0)?"#c9c9c9":"#b9b9b9");a.children[3].classList.remove("g2s");if(b==1){a.children[1].classList.add("g1s");a.children[3].classList.add("g2s")}}function eventsUpdate(){var j="",a=null;for(var c in events){var b=events[c],h=new Date(b.time);if(b.msg){if(b.h==null){b.h=Math.random()}if(printDate(h)!=a){if(a!=null){j+="</table>"}a=printDate(h);j+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+a+"</td></tr>"}var d="si3";if(b.etype=="user"){d="m2"}if(b.etype=="server"){d="si3"}var e=EscapeHtml(b.msg).split("(R)").join("®");if(b.nodeid){var g=getNodeFromId(b.nodeid);if(g!=null){d="si"+g.icon;e="<a href=# onclick='gotoDevice(\""+b.nodeid+"\",10);haltEvent(event);'>"+EscapeHtml(g.name)+"</a> → "+e}}if(b.username){if((userinfo.siteadmin&2)&&(b.userid)){e="<a href=# onclick='gotoUser(\""+encodeURIComponent(b.userid)+"\");haltEvent(event);'>"+EscapeHtml(b.username)+"</a> → "+e}else{e=EscapeHtml(b.username)+" → "+e}}if(b.etype=="relay"||b.action=="relaylog"){d="relayIcon16"}j+="<tr onclick=showEventDetails("+b.h+",2) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+d+"></div></td><td class=g1> </td><td class=style10>"+printTime(h)+" - "+e+"</td><td class=g2> </td></tr><tr style=height:2px></tr>"}}if(a!=null){j+="</table>"}if(j==""){j="<br><i>No Events Found</i><br><br>"}QH("p3events",j)}function refreshEvents(){meshserver.send({action:"events",limit:parseInt(p3limitdropdown.value)})}function p3showDownloadEventsDialog(a){if(xxdialogMode){return}var b="Download the list of events with one of the file formats below.<br /><br />";b+=addHtmlValue("CSV Format",'<a href=# style=cursor:pointer onclick="return p3downloadEventsDialogCSV('+a+')">eventslist.csv</a>');b+=addHtmlValue("JSON Format",'<a href=# style=cursor:pointer onclick="return p3downloadEventsDialogJSON('+a+')">eventslist.json</a>');setDialogMode(2,"Event List Export",1,null,b,a)}function p3downloadEventsDialogCSV(d){var a,b;if(d==1){b=currentDeviceEvents}if(d==2){b=events}if(d==3){b=currentUserEvents}a="time, type, action, user, message\r\n";for(var c in b){a+='"'+b[c].time+'","'+b[c].etype+'","'+((b[c].action!=null)?b[c].action:"")+'","'+((b[c].username!=null)?b[c].username:"")+'","'+((b[c].msg!=null)?b[c].msg:"")+'"\r\n'}saveAs(new Blob([a],{type:"application/octet-stream"}),"eventslist.csv");return false}function p3downloadEventsDialogJSON(c){var d=[],a;if(c==1){a=currentDeviceEvents}if(c==2){a=events}if(c==3){a=currentUserEvents}for(var b in a){d.push(events[b])}saveAs(new Blob([JSON.stringify(d)],{type:"application/octet-stream"}),"eventslist.json");return false}function updateUsers(){QV("MainMenuMyUsers",(users!=null)&&((features&4)==0));QV("LeftMenuMyUsers",(users!=null)&&((features&4)==0));QV("UserNewAccountButton",((features&4)==0)&&(serverinfo.domainauth==false));if((users==null)||((features&4)!=0)){QH("p3users","");return}var h=[],e=100,c=0;for(var d in users){h.push(d)}h.sort();var k=Q("UserSearchInput").value.toLowerCase();var b=k;if(k.startsWith("email:")){k=null;b=b.substring(6)}else{if(k.startsWith("name:")){b=null;k=k.substring(5)}else{if(k.startsWith("e:")){k=null;b=b.substring(2)}else{if(k.startsWith("n:")){b=null;k=k.substring(2)}}}}var l="<table class=p3usersTable cellpadding=0 cellspacing=0>",a=true;l+="<th>Name<th style=width:80px>Groups<th style=width:120px>Last Access<th style=width:120px>Permissions";for(var d in h){var j=users[h[d]],g=null;if(wssessions!=null){g=wssessions[j._id]}if((g!=null)&&((k!=null)&&((k=="")||(j.name.toLowerCase().indexOf(k)>=0))||((b!=null)&&((j.email!=null)&&(j.email.toLowerCase().indexOf(b)>=0))))){if(e>0){if(a){l+="<tr><td class=userTableHeader colspan=4>Online Users";a=false}l+=addUserHtml(j,g);e--}else{c++}}}a=true;for(var d in h){var j=users[h[d]],g=null;if(wssessions!=null){g=wssessions[j._id]}if((g==null)&&((k!=null)&&((k=="")||(j.name.toLowerCase().indexOf(k)>=0))||((b!=null)&&((j.email!=null)&&(j.email.toLowerCase().indexOf(b)>=0))))){if(e>0){if(a){l+="<tr><td class=userTableHeader colspan=4>Offline Users";a=false}l+=addUserHtml(j,g);e--}else{c++}}}l+="</table>";if(c==1){l+="<br />1 more user not shown, use search box to look for users...<br />"}else{if(c>1){l+="<br />"+c+" more users not shown, use search box to look for users...<br />"}}if(e==100){l+="<br />No users found.<br />"}QH("p3users",l);if((currentUser!=null)&&(xxcurrentView==30)){gotoUser(encodeURIComponent(currentUser._id),true)}}function addUserHtml(n,l){var p="",b=" gray",e="m2",h="",k=(n.name!=userinfo.name),g="",j="";if(l!=null){b="";if(k){h='<span style=float:right;margin-top:1px;margin-right:4px title=Chat><a href=# onclick=userChat(event,"'+encodeURIComponent(n._id)+'","'+encodeURIComponent(n.name)+"\")><img src='images/icon-chat.png' height=16 width=16 style=padding-top:2px /></a></span>";h+="<span style=float:right;margin-top:1px;margin-left:4px;margin-right:4px title=Notify><a href=# onclick='return showUserAlertDialog(event,\""+encodeURIComponent(n._id)+"\")'><img src='images/icon-notify.png' height=16 width=16 style=padding-top:2px /></a></span>"}if(l==1){g+="1 session"}else{g+=l+" sessions"}}else{if(n.login){g+='<span title="Last login: '+printDateTime(new Date(n.login*1000))+'">'+printDate(new Date(n.login*1000))+"</span>"}}if(k){j+="<a href=# style=cursor:pointer onclick='return showUserAdminDialog(event,\""+encodeURIComponent(n._id)+"\")'>"}if((n.siteadmin!=null)&&((n.siteadmin&32)!=0)&&(n.siteadmin!=4294967295)){j+="Locked, "}j+="<span title='Server Permissions'>";var m=n.siteadmin&(4294967295-224);if((n.siteadmin==null)||(m==0)){j+="User"}else{if(m==8){j+="User + Files"}else{if(n.siteadmin==4294967295){j+="Administrator"}else{if((m&2)!=0){j+="Manager"}else{j+="Partial"}}}}if((n.siteadmin!=null)&&(n.siteadmin!=4294967295)&&((n.siteadmin&(64+128))!=0)){j+="*"}j+="</span>";if(k){j+="</a>"}var c=0;if(n.links){for(var d in n.links){c++}}var o=EscapeHtml(n.name),a="";if(serverinfo.emailcheck==true){a=((n.emailVerified!=true)?' <b style=color:red title="Email is not verified">✗</b>':' <b style=color:green title="Email is verified">✓</b>')}if(n.email!=null){if(((features&2097152)==0)||(n.email.toLowerCase()!=n.name.toLowerCase())){o+=", <a href=# onclick='return doemail(event,\""+n.email+"\")'>"+n.email+"</a>"+a}else{o+=" <a href=# onclick='return doemail(event,\""+n.email+'")\'><img src="images/mail12.png" height=9 width=12 title="Send email to user" style="margin-top:2px" /></a>'+a}}if((n.otpsecret>0)||(n.otphkeys>0)){o+=' <img src="images/key12.png" height=12 width=11 title="2nd factor authentication enabled" style="margin-top:2px" />'}if((n.siteadmin!=null)&&((n.siteadmin&32)!=0)&&(n.siteadmin!=4294967295)){o+=' <img src="images/padlock12.png" height=12 width=8 title="Account is locked" style="margin-top:2px" />'}p+="<tr tabindex=0 onmouseover=userMouseHover(this,1) onmouseout=userMouseHover(this,0) onkeypress=\"if (event.key=='Enter') gotoUser('"+encodeURIComponent(n._id)+'\')"><td style=cursor:pointer onclick=gotoUser("'+encodeURIComponent(n._id)+'")>';p+="<div class=bar>";p+='<div class=baricon><div class="'+e+b+'"></div></div>';p+="<div class=g1></div><div class=g2></div>";p+="<div><span>"+o+"</span>"+h+"</div></div><td style=text-align:center>"+c+"<td style=text-align:center>"+g+"<td style=text-align:center>"+j;return p}function userMouseHover(b,c){var a=b.children[0].children[0];a.children[1].classList.remove("g1s");a.children[2].classList.remove("g2s");if(c==1){a.children[1].classList.add("g1s");a.children[2].classList.add("g2s")}b.children[0].children[0].style["background-color"]=((c==0)?"#c9c9c9":"#b9b9b9")}function userChat(a,d,b){haltEvent(a);var c="/messenger?id=meshmessenger/"+d+"/"+encodeURIComponent(userinfo._id)+"&title="+b;if((authCookie!=null)&&(authCookie!="")){c+="&auth="+authCookie}window.open(c,"meshmessenger:"+d);meshserver.send({action:"meshmessenger",userid:decodeURIComponent(d)});return false}function showUserAlertDialog(a,b){if(xxdialogMode){return}haltEvent(a);setDialogMode(2,"Notify "+EscapeHtml(users[decodeURIComponent(b)].name),3,showUserAlertDialogEx,'Send a text notification to this user.<textarea id=d2notifyText maxlength=2048 style="width:100%;height:184px;resize:none"></textarea>',b);Q("d2notifyText").focus();return false}function showUserAlertDialogEx(a,b){meshserver.send({action:"notifyuser",userid:decodeURIComponent(b),msg:Q("d2notifyText").value})}function doemail(b,a){if(xxdialogMode){return false}haltEvent(b);window.open("mailto:"+a);return false}function p4batchAccountCreate(){if(xxdialogMode){return}var a='Create many accounts at once by importing a JSON file with the following format:<br /><pre>[\r\n {"user":"x1","pass":"x","email":"x1@x"},\r\n {"user":"x2","pass":"x","resetNextLogin":true}\r\n]</pre><input style=width:370px type=file id=d4importFile accept=".json" onchange=p4batchAccountCreateValidate() />';setDialogMode(2,"User Account Import",3,p4batchAccountCreateEx,a);QE("idx_dlgOkButton",false)}function p4batchAccountCreateValidate(){QE("idx_dlgOkButton",Q("d4importFile").value!=null)}function p4batchAccountCreateEx(){var a=new FileReader();a.onload=function(g){var d=null;try{d=JSON.parse(g.target.result)}catch(b){setDialogMode(2,"User Account Import",1,null,"Invalid JSON file: "+b+".");return}if((d!=null)&&(Array.isArray(d))){var e=true;for(var c in d){if((typeof d[c].user!="string")||(d[c].user.length<1)||(d[c].user.length>64)){e=false}if((typeof d[c].pass!="string")||(d[c].pass.length<1)||(d[c].pass.length>256)){e=false}if(checkPasswordRequirements(d[c].pass,passRequirements)==false){e=false}if((d[c].email!=null)&&((typeof d[c].email!="string")||(d[c].email.length<1)||(d[c].email.length>128))){e=false}}if(e==false){setDialogMode(2,"User Account Import",1,null,"Invalid JSON file format.")}else{meshserver.send({action:"adduserbatch",users:d})}}else{setDialogMode(2,"User Account Import",1,null,"Invalid JSON file format.")}};a.readAsText(Q("d4importFile").files[0])}function p4downloadUserInfo(){if(xxdialogMode){return}var a="Download the list of users with one of the file formats below.<br /><br />";a+=addHtmlValue("CSV Format","<a href=# style=cursor:pointer onclick='return p4downloadUserInfoCSV()'>userlist.csv</a>");a+=addHtmlValue("JSON Format","<a href=# style=cursor:pointer onclick='return p4downloadUserInfoJSON()'>userlist.json</a>");setDialogMode(2,"User List Export",1,null,a)}function p4downloadUserInfoCSV(){var a="id, name, email, creation, lastlogin, groups, authfactors\r\n";for(var c in users){var d=false,b=[];if((users[c].otpsecret>0)||(users[c].otphkeys>0)){d=true;if(users[c].otpsecret>0){b.push("AuthApp")}if(users[c].otphkeys>0){b.push("SecurityKey")}if(users[c].otpkeys>0){b.push("BackupCodes")}}a+='"'+users[c]._id+'","'+users[c].name+'","'+(users[c].email?users[c].email:"")+'","'+(users[c].creation?new Date(users[c].creation*1000):"")+'","'+(users[c].login?new Date(users[c].login*1000):"")+'","'+(users[c].groups?users[c].groups.join(","):"")+'","'+(d?b.join(","):"")+'"\r\n'}saveAs(new Blob([a],{type:"application/octet-stream"}),"userlist.csv");return false}function p4downloadUserInfoJSON(){var b=[];for(var a in users){b.push(users[a])}saveAs(new Blob([JSON.stringify(b)],{type:"application/octet-stream"}),"userlist.json");return false}function showUserBroadcastDialog(){if(xxdialogMode){return}var a='Broadcast a message to all connected users.<textarea id=broadcastMessage value="" maxlength="256"/></textarea>';setDialogMode(2,"Broadcast Message",3,showUserBroadcastDialogEx,a);Q("broadcastMessage").focus()}function showUserBroadcastDialogEx(){meshserver.send({action:"userbroadcast",msg:Q("broadcastMessage").value})}function showCreateNewAccountDialog(){if(xxdialogMode){return}var d="";if((features&2097152)==0){d+=addHtmlValue("Name","<input id=p4name maxlength=64 onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />")}d+=addHtmlValue("Email","<input id=p4email maxlength=256 onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />");d+=addHtmlValue("Password","<input id=p4pass1 type=password maxlength=256 onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />");d+=addHtmlValue("Password","<input id=p4pass2 type=password maxlength=256 onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />");d+="<div><label><input id=p4randomPassword onchange=showCreateNewAccountDialogValidate() type=checkbox />Randomize the password.</label></div>";d+="<div><label><input id=p4resetNextLogin onchange=showCreateNewAccountDialogValidate() type=checkbox />Force password reset on next login.</label></div>";if(serverinfo.emailcheck){d+="<div><label><input id=p4verifiedEmail onchange=showCreateNewAccountDialogValidate() type=checkbox />Email is verified.</label></div>";d+="<div><label><input id=p4invitationEmail type=checkbox />Send invitation email.</label></div>"}if(passRequirements){var b=[],c=0;for(var a in passRequirements){if((a!="reset")&&(a!="hint")){b.push(a+":"+passRequirements[a]);c++}}if(c>0){d+="<div style=font-size:x-small;padding:6px>Requirements: "+b.join(", ")+".</div>"}}setDialogMode(2,"Create Account",3,showCreateNewAccountDialogEx,d);showCreateNewAccountDialogValidate();if((features&2097152)==0){Q("p4name").focus()}else{Q("p4email").focus()}}function showCreateNewAccountDialogValidate(c){var b=validateEmail(Q("p4email").value);if(serverinfo.emailcheck){QE("p4verifiedEmail",b);QE("p4invitationEmail",b&&Q("p4resetNextLogin").checked&&Q("p4verifiedEmail").checked);if(b==false){Q("p4verifiedEmail").checked=false}if((Q("p4resetNextLogin").checked==false)||(Q("p4verifiedEmail").checked==false)){Q("p4invitationEmail").checked=false}}QE("p4pass1",!Q("p4randomPassword").checked);QE("p4pass2",!Q("p4randomPassword").checked);if((c==null)&&(Q("p4email").value.length>0)&&(b==false)){QE("idx_dlgOkButton",false);return}var a=true;if((features&2097152)==0){a&=(!Q("p4name")||((Q("p4name").value.length>0)&&(Q("p4name").value.indexOf(" ")==-1)))}if(Q("p4randomPassword").checked==false){a&=(Q("p4pass1").value.length>0&&Q("p4pass1").value==Q("p4pass2").value&&checkPasswordRequirements(Q("p4pass1").value,passRequirements))}if(a&&passRequirements){if(checkPasswordRequirements(Q("p4pass1").value,passRequirements)==false){a=false}}QE("idx_dlgOkButton",a)}function showCreateNewAccountDialogEx(){var a=((features&2097152)==0)?Q("p4name").value:Q("p4email").value;var b={action:"adduser",username:a,email:Q("p4email").value,pass:Q("p4pass1").value,resetNextLogin:Q("p4resetNextLogin").checked,randomPassword:Q("p4randomPassword").checked};if(serverinfo.emailcheck){b.emailVerified=Q("p4verifiedEmail").checked;b.emailInvitation=Q("p4invitationEmail").checked}meshserver.send(b)}function showUserGroupDialog(a,d){if(xxdialogMode){return}haltEvent(a);d=decodeURIComponent(d);var c=users[d.toLowerCase()],b="";if(c.groups!=null){b=c.groups.join(", ")}var g="Enter a comma seperate list of administrative realms names.<br /><br />";g+=addHtmlValue("Realms",'<input id=dp4usergroups style=width:230px value="'+b+'" placeholder="Name1, Name2, Name3" maxlength=256 onchange=p4validateUserGroups() onkeyup=p4validateUserGroups() />');setDialogMode(2,"Administrative Realms",3,showUserGroupDialogEx,g,c);focusTextBox("dp4usergroups");p4validateUserGroups();return false}function p4validateUserGroups(){var b=Q("dp4usergroups").value;var e=0,c=b.indexOf('"')+b.indexOf("/")+b.indexOf(">")+b.indexOf("<")+b.indexOf("'");var a=b.split(",");for(var d in a){if(a[d].trim().length==0){e++}}QE("idx_dlgOkButton",(b=="")||((c==-5)&&(e<1)))}function showUserGroupDialogEx(a,h){var d=Q("dp4usergroups").value,b=d.split(","),c=[];for(var e in b){var k=b[e].trim();if(k.length>0){c.push(k)}}meshserver.send({action:"edituser",id:h._id,groups:c})}function showUserAdminDialog(a,c){if(xxdialogMode){return}haltEvent(a);c=decodeURIComponent(c);var d="<div><div id=d2AdminPermissions>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_fileaccess>Server Files</label>, <input type=number onchange=showUserAdminDialogValidate() maxlength=10 id=ua_fileaccessquota>k max, blank for default<br><hr/>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_fulladmin>Full Administrator</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverbackup>Server Backup</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverrestore>Server Restore</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverupdate>Server Updates</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_manageusers>Manage Users</label><br>";d+="<hr/></div><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_lockedaccount>Lock Account</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_nonewgroups>No New Device Groups</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_nomeshcmd>No Tools (MeshCmd/Router)</label><br>";d+="</div>";var b=users[c.toLowerCase()];setDialogMode(2,"Server Permissions",3,showUserAdminDialogEx,d,b);if(b.siteadmin&&b.siteadmin!=0){Q("ua_fulladmin").checked=(b.siteadmin==4294967295);Q("ua_serverbackup").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&1)!=0));Q("ua_manageusers").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&2)!=0));Q("ua_serverrestore").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&4)!=0));Q("ua_fileaccess").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&8)!=0));Q("ua_serverupdate").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&16)!=0));Q("ua_lockedaccount").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&32)!=0));Q("ua_nonewgroups").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&64)!=0));Q("ua_nomeshcmd").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&128)!=0))}QE("ua_fulladmin",userinfo.siteadmin==4294967295);QE("ua_serverbackup",userinfo.siteadmin==4294967295);QE("ua_manageusers",userinfo.siteadmin==4294967295);QE("ua_serverrestore",userinfo.siteadmin==4294967295);QE("ua_fileaccess",userinfo.siteadmin==4294967295);QE("ua_fileaccessquota",userinfo.siteadmin==4294967295);QE("ua_serverupdate",userinfo.siteadmin==4294967295);QV("d2AdminPermissions",userinfo.siteadmin==4294967295);QE("ua_lockedaccount",(userinfo.siteadmin&2)&&(b.siteadmin!=4294967295)&&(userinfo._id!=b._id));QE("ua_nonewgroups",(userinfo.siteadmin&2)&&(b.siteadmin!=4294967295)&&(userinfo._id!=b._id));QE("ua_nomeshcmd",(userinfo.siteadmin&2)&&(b.siteadmin!=4294967295)&&(userinfo._id!=b._id));Q("ua_fileaccessquota").value=(b.quota!=null)?(b.quota/1024):"";showUserAdminDialogValidate();return false}function showUserAdminDialogValidate(){if(userinfo.siteadmin==4294967295){QE("ua_serverbackup",!Q("ua_fulladmin").checked);QE("ua_manageusers",!Q("ua_fulladmin").checked);QE("ua_serverrestore",!Q("ua_fulladmin").checked);QE("ua_fileaccess",!Q("ua_fulladmin").checked);QE("ua_serverupdate",!Q("ua_fulladmin").checked);QE("ua_lockedaccount",!Q("ua_fulladmin").checked);QE("ua_nonewgroups",!Q("ua_fulladmin").checked);QE("ua_nomeshcmd",!Q("ua_fulladmin").checked);QE("ua_fileaccessquota",Q("ua_fileaccess").checked&&!Q("ua_fulladmin").checked)}}function showUserAdminDialogEx(a,d){var c=0,b=parseInt(Q("ua_fileaccessquota").value);if(Q("ua_fulladmin").checked==true){c=4294967295}else{if(Q("ua_serverbackup").checked==true){c+=1}if(Q("ua_manageusers").checked==true){c+=2}if(Q("ua_serverrestore").checked==true){c+=4}if(Q("ua_fileaccess").checked==true){c+=8}if(Q("ua_serverupdate").checked==true){c+=16}if(Q("ua_lockedaccount").checked==true){c+=32}if(Q("ua_nonewgroups").checked==true){c+=64}if(Q("ua_nomeshcmd").checked==true){c+=128}}var e={action:"edituser",id:d._id,siteadmin:c};if(isNaN(b)==false){e.quota=(b*1024)}meshserver.send(e)}function onUserSearchInputChanged(){updateUsers()}var currentUser=null;function gotoUser(r,g){if(xxdialogMode&&!g){return}var p=currentUser=users[decodeURIComponent(r)];if(p==null){setDialogMode(0);go(4);return}QH("p30userName",p.name);QH("p31userName",p.name);var o=(p.name==userinfo.name),a=0;if(wssessions!=null&&wssessions[p._id]){a=wssessions[p._id]}Q("MainUserImage").classList.remove("gray");if(a==0){Q("MainUserImage").classList.add("gray")}var l=[],n="";if((p.siteadmin!=null)&&((p.siteadmin&32)!=0)&&(p.siteadmin!=4294967295)){n='<img src="images/padlock12.png" height=12 width=8 title="Account is locked" style="margin-top:2px" /> ';l.push("Locked account")}if((p.siteadmin==null)||((p.siteadmin&(4294967295-224))==0)){l.push("No server rights")}else{if(p.siteadmin==8){l.push("Access to server files")}else{if(p.siteadmin==4294967295){l.push("Full administrator")}else{l.push("Partial rights")}}}if((p.siteadmin!=null)&&(p.siteadmin!=4294967295)&&((p.siteadmin&(64+128))!=0)){l.push("Restrictions")}var s="<div style=min-height:80px><table style=width:100%>";var c=p.email?EscapeHtml(p.email):"<i>Not set</i>",d="";if(serverinfo.emailcheck){d=((p.emailVerified==true)?'<b style=color:green;cursor:pointer title="Email is verified">✓</b> ':'<b style=color:red;cursor:pointer title="Email not verified">✗</b> ')}if(p.name.toLowerCase()!=p._id.split("/")[2]){s+=addDeviceAttribute("User Identifier",p._id.split("/")[2])}if(((features&2097152)==0)&&((p.siteadmin!=4294967295)||(userinfo.siteadmin==4294967295))){s+=addDeviceAttribute("Email",d+'<a href=# style=cursor:pointer onclick=p30showUserEmailChangeDialog(event,"'+r+'")>'+c+"</a> <a href=# style=cursor:pointer onclick='return doemail(event,\""+p.email+'")\'><img class=hoverButton src="images/link1.png" /></a>')}else{s+=addDeviceAttribute("Email",d+c+" <a href=# style=cursor:pointer onclick='return doemail(event,\""+p.email+'")\'><img class=hoverButton src="images/link1.png" /></a>')}s+=addDeviceAttribute("Server Rights",n+"<a href=# style=cursor:pointer onclick='return showUserAdminDialog(event,\""+r+"\")'>"+l.join(", ")+"</a>");if(p.quota){s+=addDeviceAttribute("Server Quota",EscapeHtml(parseInt(p.quota)/1024)+" k")}s+=addDeviceAttribute("Creation",printDateTime(new Date(p.creation*1000)));if(p.login){s+=addDeviceAttribute("Last Login",printDateTime(new Date(p.login*1000)))}if(p.passchange==-1){s+=addDeviceAttribute("Password","Will be changed on next login.")}else{if(p.passchange){s+=addDeviceAttribute("Password","Last changed: "+printDateTime(new Date(p.passchange*1000)))}}var j=0,k="<i>None<i>";if(p.links){for(var h in p.links){j++}if(j==1){k="1 group"}else{if(j>1){k=j+" groups"}}}s+=addDeviceAttribute("Device Groups",k);if((userinfo.siteadmin==4294967295)||(userinfo.siteadmin&2)){var q="<i>None</i>";if(p.groups){q="";for(var h in p.groups){q+='<span class="tagSpan">'+p.groups[h]+"</span>"}}s+=addDeviceAttribute("Admin Realms",addLinkConditional(q,'showUserGroupDialog(event,"'+r+'")',(userinfo.siteadmin==4294967295)||((userinfo.groups==null)&&(userinfo._id!=p._id)&&(p.siteadmin!=4294967295))))}var m=0;if((p.otpsecret>0)||(p.otphkeys>0)){m=1;var e=[];if(p.otpsecret>0){e.push("Authentication App")}if(p.otphkeys>0){e.push("Security Key")}if(p.otpkeys>0){e.push("Backup Codes")}s+=addDeviceAttribute("Security",'<img src="images/key12.png" height=12 width=11 title="2nd factor authentication enabled" style="margin-top:2px" /> '+e.join(", "))}s+="</table></div><br />";s+='<input type=button value=Notes title="View notes about this user" onclick=showNotes(false,"'+r+'") />';if(!o&&(a>0)){s+='<input type=button value=Notify title="Send user notification" onclick=showUserAlertDialog(event,"'+r+'") />'}QH("p30html",s);drawUserTimeline();var b=true;if(p._id==userinfo._id){b=false}if(p.siteadmin&&p.siteadmin>0&&userinfo.siteadmin!=4294967295){b=false}s="<div style=float:right;font-size:x-small>";if(b){s+="<a href=# style=cursor:pointer onclick='return p30showDeleteUserDialog()' title=\"Remove this user\">Delete User</a>"}s+="</div><div style=font-size:x-small>";if(userinfo.siteadmin==4294967295){s+="<a href=# style=cursor:pointer onclick='return p30showUserChangePassDialog("+m+')\' title="Change the password for this user">Change Password</a>'}s+="</div><br>";QH("p30html3",s);s="";if(a==1){s="1 active session"}else{if(a>1){s=a+" active sessions"}}QH("MainUserState",s);go(30);QH("p31events","");refreshUsersEvents()}function p30showUserEmailChangeDialog(a){if(xxdialogMode){return false}var b="";b+=addHtmlValue("Email","<input id=dp30email style=width:230px maxlength=32 onchange=p30validateEmail() onkeyup=p30validateEmail() />");if(serverinfo.emailcheck){b+=addHtmlValue("Status","<select id=dp30verified style=width:230px onchange=p30validateEmail()><option value=0>Not verified</option><option value=1>Verified</option></select>")}setDialogMode(2,"Change Email for "+EscapeHtml(currentUser.name),3,p30showUserEmailChangeDialogEx,b);Q("dp30email").focus();Q("dp30email").value=(currentUser.email?currentUser.email:"");if(serverinfo.emailcheck){Q("dp30verified").value=currentUser.emailVerified?1:0}p30validateEmail();return false}function p30validateEmail(){var a=Q("dp30email").value,b=a.split("@");b=(b.length==2)&&(b[0].length>0)&&(b[1].split(".").length>1)&&(b[1].length>2)&&(a.length<1024)&&((a!=userinfo.email)||((serverinfo.emailcheck==true)&&(Q("dp30verified").value!=(userinfo.emailVerified?1:0))));QE("idx_dlgOkButton",b)}function p30showUserEmailChangeDialogEx(){var a={action:"edituser",id:currentUser._id,email:Q("dp30email").value};if(serverinfo.emailcheck){a.emailVerified=(Q("dp30verified").value==1)}meshserver.send(a)}function p30showUserChangePassDialog(b){if(xxdialogMode){return}var e="";e+=addHtmlValue("Password","<input id=p4pass1 type=password style=width:230px maxlength=256 onchange=showCreateNewAccountDialogValidate(1) onkeyup=p30showUserChangePassDialogValidate(1)></input>");e+=addHtmlValue("Password","<input id=p4pass2 type=password style=width:230px maxlength=256 onchange=showCreateNewAccountDialogValidate(1) onkeyup=p30showUserChangePassDialogValidate(1)></input>");if(features&65536){e+=addHtmlValue("Password hint","<input id=p4hint type=text style=width:230px maxlength=256></input>")}if(passRequirements){var c=[],d=0;for(var a in passRequirements){if((a!="reset")&&(a!="hint")){c.push(a+":"+passRequirements[a]);d++}}if(d>0){e+="<div style=font-size:x-small;padding:6px>Requirements: "+c.join(", ")+".</div>"}}e+="<div><label><input id=p4resetNextLogin type=checkbox />Force password reset on next login.</label></div>";if(b==1){e+="<div><label><input id=p4twoFactorRemove type=checkbox />Remove all 2nd factor authentication.</label></div>"}setDialogMode(2,"Change Password for "+EscapeHtml(currentUser.name),3,p30showUserChangePassDialogEx,e,b);p30showUserChangePassDialogValidate();Q("p4pass1").focus();if(currentUser.passchange==-1){Q("p4resetNextLogin").checked=true}}function p30showUserChangePassDialogValidate(){var a=true;if((Q("p4pass1").value!="")||(Q("p4pass2").value!="")){if(Q("p4pass1").value!=Q("p4pass2").value){a=false}else{if(passRequirements){if(checkPasswordRequirements(Q("p4pass1").value,passRequirements)==false){a=false}}}}QE("idx_dlgOkButton",a)}function p30showUserChangePassDialogEx(a,e){var d=false;if((e==1)&&(Q("p4twoFactorRemove").checked==true)){d=true}if(Q("p4pass1").value==Q("p4pass2").value){var c={action:"changeuserpass",userid:currentUser._id,pass:Q("p4pass1").value,removeMultiFactor:d,resetNextLogin:Q("p4resetNextLogin").checked};if(features&65536){c.hint=Q("p4hint").value}meshserver.send(c)}}function p30showDeleteUserDialog(){if(xxdialogMode){return}setDialogMode(2,"Delete User "+EscapeHtml(currentUser.name),3,p30showDeleteUserDialogEx,"Confirm deletion of user "+EscapeHtml(currentUser.name)+"?")}function p30showDeleteUserDialogEx(){meshserver.send({action:"deleteuser",userid:currentUser._id,username:currentUser.name})}function drawUserTimeline(){var s=null,o=Date.now();s=[];var e=new Date();e.setHours(0,0,0,0);e=new Date(e.getTime()-(1000*60*60*24*6));var u=e.getTime();var t=[];if(s!=null&&s.length>1){t.push([0,s[1],s[0]]);var c=s[1];for(var m=2;m<s.length;m+=2){var p=s[m],k=o;if(s.length>(m+1)){k=s[m+1]}t.push([c,c+k,p]);c=c+k}}var z="",b=1,h=new Date();h.setHours(0,0,0,0);for(var m=0;m<7;m++){var g="",q=h.getTime(),l=q+(1000*60*60*24);for(var n in t){var a=t[n];if(isTimeBlockInside(q,l,a[0],a[1])==true){var w=Math.max(q,a[0]);var r=Math.min(Math.min(l,a[1]),o);var y=Math.round((r-w)/112794);if(y>0){var v=powerStateStrings2[a[2]]+" from "+printTime(new Date(w))+" to "+printTime(new Date(r))+".";g+='<div title="'+v+'" style=display:table-cell;width:'+y+"px;background-color:"+powerColor(a[2])+";height:16px></div>"}}}z+="<tr style="+(((b%2)==0)?"background-color:#DDD":"")+"><td><div> "+printDate(h)+"<div></div></div></td><td><div>"+g+"</div></td></tr>";++b;h=new Date(h.getTime()-(1000*60*60*24))}QH("p30html2",'<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>'+z+"</tbody></table>")}var currentUserEvents=null;function userEventsUpdate(){var j="",a=null;for(var c in currentUserEvents){var b=currentUserEvents[c],h=new Date(b.time);if(b.msg){if(b.h==null){b.h=Math.random()}if(printDate(h)!=a){if(a!=null){j+="</table>"}a=printDate(h);j+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+a+"</td></tr>"}var d="si3";if(b.etype=="user"){d="m2"}if(b.etype=="server"){d="si3"}var e=EscapeHtml(b.msg).split("(R)").join("®");if(b.nodeid){var g=getNodeFromId(b.nodeid);if(g!=null){d="si"+g.icon;e="<a href=# onclick='gotoDevice(\""+b.nodeid+"\",10);haltEvent(event);'>"+EscapeHtml(g.name)+"</a> → "+e}}if(b.username&&(b.username!=currentUser.name)){if((userinfo.siteadmin&2)&&(b.userid)){e="<a href=# onclick='gotoUser(\""+encodeURIComponent(b.userid)+"\");haltEvent(event);'>"+EscapeHtml(b.username)+"</a> → "+e}else{e=EscapeHtml(b.username)+" → "+e}}if(b.etype=="relay"||b.action=="relaylog"){d="relayIcon16"}j+="<tr onclick=showEventDetails("+b.h+",3) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+d+"></div></td><td class=g1> </td><td class=style10>"+printTime(h)+" - "+e+"</td><td class=g2> </td></tr><tr style=height:2px></tr>"}}if(a!=null){j+="</table>"}if(j==""){j="<br><i>No Events Found</i><br><br>"}QH("p31events",j)}function refreshUsersEvents(){meshserver.send({action:"events",limit:parseInt(p31limitdropdown.value),user:currentUser.name})}function d3init(){Q("d3localFile").value="";d3modechange()}function d3modechange(){var a=Q("d3uploadMode").value;QV("d3localmode",a==1);QV("d3servermode",a==2);if(a==1){d3setActions()}else{d3updatefiles()}}var d3filetreelinkpath;var d3filetreelocation=[];function d3updatefiles(){if(Q("d3uploadMode").value==1){return}var m="",n="",e=filetree,j=1;var c=[],r=d3filetreelinkpath,b=[],a=document.getElementsByName("fc");for(var o=0;o<a.length;o++){if(a[o].checked){b.push(a[o].value)}}d3filetreelinkpath="";for(var o in d3filetreelocation){if((e.f!=null)&&(e.f[d3filetreelocation[o]]!=null)){c.push(d3filetreelocation[o]);if((j==1)){var t=d3filetreelocation[o].split("/");publicPath=window.location+t[0]+"files/"+t[2];if(d3filetreelocation[o]===userinfo._id){d3filetreelinkpath+="self"}else{d3filetreelinkpath+=(t[0]+"/"+t[2])}}else{if(d3filetreelinkpath!=""){d3filetreelinkpath+="/"+d3filetreelocation[o];if(j>2){publicPath+="/"+d3filetreelocation[o]}}}e=e.f[d3filetreelocation[o]];j++}else{break}}d3filetreelocation=c;var g=p5sort_files(e.f);for(var o in g){var d=g[o],q=d.n,s;s=q;if(q.length>70){s='<span title="'+EscapeHtml(q)+'">'+EscapeHtml(q.substring(0,70))+"...</span>"}else{s=EscapeHtml(q)}q=EscapeHtml(q);var k="";if(d.s!=null){k=getFileSizeStr(d.s)}var l="";if(d.t<3){var u="";l='<div class=filelist file=999><span style=float:right title="'+u+'"></span><span><div class=fileIcon'+d.t+' onclick=d3folderset("'+encodeURIComponent(d.nx)+'")></div> <a href=# style=cursor:pointer onclick=\'return d3folderset("'+encodeURIComponent(d.nx)+"\")'>"+s+"</a></span></div>"}else{var p=s;l="<div class=filelist file=3><input style=float:left name=fcx class=fcb type=checkbox onchange=d3setActions() value='"+d.nx+"'> <span style=float:right>"+k+"</span><span><div class=fileIcon"+d.t+"></div>"+p+"</span></div>"}if(d.t<3){m+=l}else{n+=l}}QH("d3serverfiles",m+n);QE("p3FolderUp",d3filetreelocation.length>0);d3setActions()}function d3folderset(a){d3filetreelocation.push(decodeURIComponent(a));d3updatefiles();return false}function d3folderup(a){if(a==null){d3filetreelocation.pop()}else{while(d3filetreelocation.length>a){d3filetreelocation.pop()}}d3updatefiles()}function d3getFileSel(){var a=[];var b=document.getElementsByName("fcx");for(var c=0;c<b.length;c++){if(b[c].checked){a.push(b[c].value)}}return a}function d3setActions(){var a=Q("d3uploadMode").value;if(a==1){QE("idx_dlgOkButton",Q("d3localFile").value.length>0)}else{QE("idx_dlgOkButton",d3getFileSel().length==1)}}var notifications=[];function clickNotificationIcon(a){if(a==true){QV("notifiyBox",true)}else{if(a==false){QV("notifiyBox",false)}else{QV("notifiyBox",QS("notifiyBox")["display"]=="none")}}drawNotifications()}function setNotificationCount(a){if(parseInt(Q("notificationCount").innerHTML)==a){return}QH("notificationCount",a);QS("notificationCount")["background-color"]=(a==0)?"lightblue":"orange";QV("notificationCount",a>0)}function drawNotifications(){var j="";if(notifications.length==0){j="<div style=margin:5px>There are currently no notifications</div>"}else{for(var c in notifications){var g=notifications[c];var k="";if(g.title!=null){k="<b>"+g.title+"</b>: "}var a=new Date(g.time);var e=0;if(g.nodeid!=null){var h=getNodeFromId(g.nodeid);if(h!=null){e=h.icon;k="<b>"+h.name+"</b>: "}}j+='<div title="Occured at '+printDateTime(a)+'" id="notifyx'+g.id+'" class=notification style="cursor:pointer;border-top:1px solid '+((j=="")?"transparent":"orange")+'">';if(e){j+="<div class=j"+e+' onclick="notificationSelected('+g.id+')" style=margin:5px;float:left></div>'}j+='<div onclick="notificationDelete('+g.id+')" class=unselectable title="Clear this notification" style=margin:5px;float:right;color:orange><b>X</b></div><div onclick="notificationSelected('+g.id+')" style=margin:5px>'+k+g.text+"</div></div>"}}var b="";if(notifications.length>1){b='<div id="notifyRemoveAll" onclick="deleteAllNotifications()" style="cursor:pointer;border-top:1px solid orange;margin:5px;color:orange;text-align:right;padding-right:3px">Clear all</div>'}QH("notifiyBox",'<div class=customScroll style="max-height:170px;overflow-y:auto;margin:5px">'+j+"</div>"+b)}function notificationSelected(c,a){var d=-1;for(var b in notifications){if(notifications[b].id==c){d=b}}if(d!=-1){notificationSelectedEx(notifications[d],c);if(a&¬ifications[d]){if(notifications[d].notification){notifications[d].notification.close();delete notifications[d].notification}notificationDelete(c)}}}function notificationSelectedEx(b,a){if(b.nodeid!=null){if(b.tag=="desktop"){gotoDevice(b.nodeid,12)}else{if(b.tag=="terminal"){gotoDevice(b.nodeid,11)}else{if(b.tag=="files"){gotoDevice(b.nodeid,13)}else{if(b.tag=="intelamt"){gotoDevice(b.nodeid,14)}else{if(b.tag=="console"){gotoDevice(b.nodeid,15)}else{gotoDevice(b.nodeid,10)}}}}}}else{if((b.tag!=null)&&b.tag.startsWith("meshmessenger/")){window.open("/messenger?id="+b.tag+"&title="+encodeURIComponent(b.username),b.tag.split("/")[2]);notificationDelete(a)}}}function notificationDelete(c){var d=-1,a=Q("notifyx"+c);if(a!=null){for(var b in notifications){if(notifications[b].id==c){d=b}}if(d!=-1){if(notifications[d].notification){notifications[d].notification.close();delete notifications[d].notification}notifications.splice(d,1);a.parentNode.removeChild(a);setNotificationCount(notifications.length);if(notifications.length==0){QV("notifiyBox",false)}if(notifications.length==1){QV("notifyRemoveAll",false)}if((notifications.length>0)&&(d==0)){var g=notifications[0];QS("notifyx"+g.id)["border-top"]="1px solid transparent"}}}}function addNotification(a){if(a.time==null){a.time=Date.now()}if(a.id==null){a.id=Math.random()}notifications.unshift(a);setNotificationCount(notifications.length);clickNotificationIcon(true);var d=getstore("notifications",0);if(d&1){Q("chimes").play()}var c=null;if(Notification&&(Notification.permission=="granted")){var e=a.text.split("®").join("").split("<b>").join("").split("</b>").join("").split("<br />").join("\r\n");if(a.nodeid){var b=getNodeFromId(a.nodeid);if(b){c=new Notification("{{{title}}} - "+b.name,{tag:a.tag,body:e,icon:"/images/notify/icons128-"+b.icon+".png"})}}else{if(a.icon==null){a.icon=0}var g=a.title;if(g==null){g=""}else{g=" - "+a.title}c=new Notification("{{{title}}}"+g,{tag:a.tag,body:e,icon:"/images/notify/icons128-"+a.icon+".png"})}c.id=a.id;c.xtag=a.tag;c.nodeid=a.nodeid;c.username=a.username;c.onclick=function(h){notificationSelected(h.target.id,true)};a.notification=c}}function deleteAllNotifications(){notifications=[];setNotificationCount(0);drawNotifications();QV("notifiyBox",false)}function setupGeneralServerStats(){window.serverStatCpu=new Chart(document.getElementById("serverCpuChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#AAAAAA","#00AA00"]}],labels:["Used","Free"]},options:{responsive:true,legend:{position:"none",},animation:{animateScale:true,animateRotate:true},width:"60px"}});window.serverStatMemory=new Chart(document.getElementById("serverMemoryChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#AAAAAA","#00AA00"]}],labels:["Used","Free"]},options:{responsive:true,legend:{position:"none",},animation:{animateScale:true,animateRotate:true},width:"60px"}})}var lastServerStats=null;function updateGeneralServerStats(d){if(d!=null){lastServerStats=d}else{d=lastServerStats}if(d==null){return}if(typeof d.cpuavg=="object"){var c=Math.min(d.cpuavg[0],1);window.serverStatCpu.config.data.datasets[0].data=[c,1-c];QH("serverCpuChartText",'<div style=margin-bottom:5px>CPU Load</div><div><b title="CPU load in the last minute">'+(Math.round(d.cpuavg[0]*100)/100)+'</b>, <b title="CPU load in the last 5 minutes">'+(Math.round(d.cpuavg[1]*100)/100)+'</b>, <b title="CPU load in the 15 minutes">'+(Math.round(d.cpuavg[2]*100)/100)+"</b></div>");QS("serverCpuChartView")["display"]="inline-block";window.serverStatCpu.update()}if((typeof d.totalmem=="number")&&(typeof d.freemem=="number")){window.serverStatMemory.config.data.datasets[0].data=[d.totalmem-d.freemem,d.freemem];QH("serverMemoryChartText","<div style=margin-bottom:5px>Memory</div><div><b>"+getNiceSize2(d.freemem)+"</b> free, <b>"+getNiceSize2(d.totalmem)+"</b> total</div>");QS("serverMemoryChartView")["display"]="inline-block";window.serverStatMemory.update()}var e="<div style=width:100% cellpadding=0 cellspacing=0>";if(typeof d.values=="object"){for(var a in d.values){e+="<div class=userTableHeader style=margin-bottom:4px;width:200px>"+a+"</div>";for(var b in d.values[a]){e+="<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>"+b+"</span><span style=float:right>"+d.values[a][b]+"</span></td><td class=h2></td></tr></table></div>"}}}e+="</div>";QH("serverStatsTable",e)}var serverTimelineStats=null;var serverTimelineConfig={type:"line",data:{labels:[],datasets:[{label:"",backgroundColor:"rgba(255, 99, 132, .5)",borderColor:"rgb(255, 99, 132)",data:[],fill:true}]},options:{responsive:true,maintainAspectRatio:false,elements:{line:{cubicInterpolationMode:"monotone"}},scales:{xAxes:[{type:"time",time:{tooltipFormat:"ll HH:mm"},display:true,scaleLabel:{display:false,labelString:""}}],yAxes:[{type:"linear",display:true,scaleLabel:{display:true,labelString:""}}]}}};function refreshServerTimelineStats(a){meshserver.send({action:"servertimelinestats",hours:24*30})}function pastDate(a){var b=new Date();b.setTime(b.getTime()-(60*60*1000*a));return b}function setServerTimelineStats(a){serverTimelineStats=a;updateServerTimelineStats()}function addServerTimelineStats(b){if(serverTimelineStats==null){return}serverTimelineStats.push(b);var a=Q("p40type").value;if(a==0){serverTimelineConfig.data.datasets[0].data.push({x:b.time,y:b.conn.ca});serverTimelineConfig.data.datasets[1].data.push({x:b.time,y:b.conn.cu});serverTimelineConfig.data.datasets[2].data.push({x:b.time,y:b.conn.us});serverTimelineConfig.data.datasets[3].data.push({x:b.time,y:b.conn.rs});if(b.conn.am!=null){serverTimelineConfig.data.datasets[4].data.push({x:b.time,y:b.conn.am})}}else{if(a==1){serverTimelineConfig.data.datasets[0].data.push({x:b.time,y:b.mem.external/(1024*1024)});serverTimelineConfig.data.datasets[1].data.push({x:b.time,y:b.mem.heapUsed/(1024*1024)});serverTimelineConfig.data.datasets[2].data.push({x:b.time,y:b.mem.heapTotal/(1024*1024)});serverTimelineConfig.data.datasets[3].data.push({x:b.time,y:b.mem.rss/(1024*1024)})}}updateServerTimelineHours()}function updateServerTimelineHours(){serverTimelineConfig.options.scales.yAxes[0].type=(Q("p40log").checked?"logarithmic":"linear");serverTimelineConfig.options.scales.xAxes[0].time={min:pastDate(Q("p40time").value)};window.serverMainStats.update()}function setupServerTimelineStats(){window.serverMainStats=new Chart(document.getElementById("serverMainStats").getContext("2d"),serverTimelineConfig)}function updateServerTimelineStats(){var b,a=Q("p40type").value,e=pastDate(Q("p40time").value);serverTimelineConfig.options.scales.xAxes[0].time={min:e};if(a==0){serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString="Connection Count";b={labels:[pastDate(0),e],datasets:[{label:"Agents",data:[],backgroundColor:"rgba(158, 151, 16, .1)",borderColor:"rgb(158, 151, 16)",fill:true},{label:"Users",data:[],backgroundColor:"rgba(16, 84, 158, .1)",borderColor:"rgb(16, 84, 158)",fill:true},{label:"User Sessions",data:[],backgroundColor:"rgba(255, 99, 132, .1)",borderColor:"rgb(255, 99, 132)",fill:true},{label:"Relay Sessions",data:[],backgroundColor:"rgba(39, 158, 16, .1)",borderColor:"rgb(39, 158, 16)",fill:true},{label:"Intel AMT",data:[],backgroundColor:"rgba(134, 16, 158, .1)",borderColor:"rgb(134, 16, 158)",fill:true}]};for(var c=0;c<serverTimelineStats.length;c++){var d=new Date(serverTimelineStats[c].time);if(serverTimelineStats[c].conn){b.datasets[0].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.ca});b.datasets[1].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.cu});b.datasets[2].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.us});b.datasets[3].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.rs});if(serverTimelineStats[c].conn.am!=null){b.datasets[4].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.am})}}}}else{if(a==1){serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString="Megabytes";b={labels:[pastDate(0),e],datasets:[{label:"External",data:[],backgroundColor:"rgba(158, 151, 16, .1)",borderColor:"rgb(158, 151, 16)",fill:true},{label:"Heap Used",data:[],backgroundColor:"rgba(16, 84, 158, .1)",borderColor:"rgb(16, 84, 158)",fill:true},{label:"Heap Total",data:[],backgroundColor:"rgba(255, 99, 132, .1)",borderColor:"rgb(255, 99, 132)",fill:true},{label:"RSS",data:[],backgroundColor:"rgba(39, 158, 16, .1)",borderColor:"rgb(39, 158, 16)",fill:true}]};for(var c=0;c<serverTimelineStats.length;c++){b.datasets[0].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].mem.external/(1024*1024)});b.datasets[1].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].mem.heapUsed/(1024*1024)});b.datasets[2].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].mem.heapTotal/(1024*1024)});b.datasets[3].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].mem.rss/(1024*1024)})}}}serverTimelineConfig.data=b;window.serverMainStats.update()}function p40downloadEvents(){var a="time, conn.agent, conn.users, conn.usersessions, conn.relaysession, conn.intelamt, mem.external, mem.heapused, mem.heaptotal, mem.rss\r\n";for(var b=0;b<serverTimelineStats.length;b++){if(serverTimelineStats[b].conn&&serverTimelineStats[b].mem){a+=new Date(serverTimelineStats[b].time)+", "+serverTimelineStats[b].conn.ca+", "+serverTimelineStats[b].conn.cu+", "+serverTimelineStats[b].conn.us+", "+serverTimelineStats[b].conn.rs+", "+(serverTimelineStats[b].conn.am?serverTimelineStats[b].conn.am:"")+", "+serverTimelineStats[b].mem.external+", "+serverTimelineStats[b].mem.heapUsed+", "+serverTimelineStats[b].mem.heapTotal+", "+serverTimelineStats[b].mem.rss+"\r\n"}}saveAs(new Blob([a],{type:"application/octet-stream"}),"ServerStats.csv")}var serverTrace=[];var serverTraceSources=[];function displayServerTrace(){var c="",b=parseInt(Q("p41limitdropdown").value);if(serverTrace.length>b){serverTrace.splice(b)}for(var a in serverTrace){c+="<div class=traceEvent>"+EscapeHtml(new Date(serverTrace[a].time).toLocaleTimeString())+" - <b>"+EscapeHtml(serverTrace[a].source.toUpperCase())+"</b>: "+EscapeHtml(serverTrace[a].args.join(", "))+"</div>"}QH("p41events",c)}function clearServerTracing(){serverTrace=[];displayServerTrace()}function setServerTracing(){var a="";a+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Core Server</b></div>';a+="<div><label><input type=checkbox id=p41c1 "+((serverTraceSources.indexOf("cookie")>=0)?"checked":"")+">Cookie encoder</label></div>";a+="<div><label><input type=checkbox id=p41c2 "+((serverTraceSources.indexOf("dispatch")>=0)?"checked":"")+">Message Dispatcher</label></div>";a+="<div><label><input type=checkbox id=p41c3 "+((serverTraceSources.indexOf("main")>=0)?"checked":"")+">Main Server Messages</label></div>";a+="<div><label><input type=checkbox id=p41c4 "+((serverTraceSources.indexOf("peer")>=0)?"checked":"")+">MeshCentral Server Peering</label></div>";a+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Web Server</b></div>';a+="<div><label><input type=checkbox id=p41c5 "+((serverTraceSources.indexOf("web")>=0)?"checked":"")+">Web Server</label></div>";a+="<div><label><input type=checkbox id=p41c6 "+((serverTraceSources.indexOf("webrequest")>=0)?"checked":"")+">Web Server Requests</label></div>";a+="<div><label><input type=checkbox id=p41c7 "+((serverTraceSources.indexOf("relay")>=0)?"checked":"")+">Web Socket Relay</label></div>";a+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Intel AMT</b></div>';a+="<div><label><input type=checkbox id=p41c9 "+((serverTraceSources.indexOf("webrelay")>=0)?"checked":"")+">Connection Relay</label></div>";a+="<div><label><input type=checkbox id=p41c10 "+((serverTraceSources.indexOf("mps")>=0)?"checked":"")+">CIRA Server</label></div>";a+="<div><label><input type=checkbox id=p41c11 "+((serverTraceSources.indexOf("mpscmd")>=0)?"checked":"")+">CIRA Server Commands</label></div>";setDialogMode(2,"Server Tracing",7,setServerTracingEx,a)}function setServerTracingEx(c){var g=[],a=["cookie","dispatch","main","peer","web","webrequest","relay","webrelaydata","webrelay","mps","mpscmd","swarm","swarmcmd"];if(c==1){for(var e=1;e<13;e++){try{if(Q("p41c"+e).checked){g.push(a[e-1])}}catch(d){}}}meshserver.send({action:"traceinfo",traceSources:g})}function p41downloadServerTrace(){var a="time, source, message\r\n";for(var b in serverTrace){a+='"'+new Date(serverTrace[b].time).toLocaleTimeString()+'","'+serverTrace[b].source+'","'+serverTrace[b].args.join(", ")+'"\r\n'}saveAs(new Blob([a],{type:"application/octet-stream"}),"servertrace.csv");return false}var xxdialogMode;var xxdialogFunc;var xxdialogButtons;var xxdialogTag;var xxcurrentView=-1;function setDialogMode(j,k,a,e,d,h){setSessionActivity();QV("uiMenu",false);xxdialogMode=j;xxdialogFunc=e;xxdialogButtons=a;xxdialogTag=h;QE("idx_dlgOkButton",true);QV("idx_dlgOkButton",a&1);QV("idx_dlgCancelButton",a&2);QV("id_dialogclose",(a&2)||(a&8));QV("idx_dlgDeleteButton",a&4);QV("idx_dlgButtonBar",a&7);if(k){QH("id_dialogtitle",k)}for(var g=1;g<24;g++){QV("dialog"+g,g==j)}QV("dialog",j);if(d){if(j==2){QH("id_dialogOptions",d)}else{QH("id_dialogMessage",d)}}}function dialogclose(e){setSessionActivity();var c=xxdialogFunc,a=xxdialogButtons,d=xxdialogTag;setDialogMode();if(((a&8)||e)&&c){c(e,d)}}function center(){setSessionActivity();if(xxcurrentView==11){deskAdjust()}else{if(xxcurrentView==10){masterUpdate(256)}else{if(xxcurrentView==1){masterUpdate(4)}}}}function messagebox(b,a){setSessionActivity();QH("id_dialogMessage",a);setDialogMode(1,b,1)}function statusbox(b,a){setSessionActivity();QH("id_dialogMessage",a);setDialogMode(1,b)}function goBack(){setSessionActivity();if(xxdialogMode){return}if(fullscreen){deskToggleFull()}if((xxcurrentView>=10)&&(xxcurrentView<20)){go(1)}if((xxcurrentView>=20)&&(xxcurrentView<30)){go(2)}if((xxcurrentView>=30)&&(xxcurrentView<40)){go(4)}}function go(h){setSessionActivity();if(xxdialogMode||xxcurrentView==h){return}QV("uiMenu",false);for(var a=0;a<42;a++){QV("p"+a,a==h)}xxcurrentView=h;var d=["MainMenuMyDevices","MainMenuMyAccount","MainMenuMyEvents","MainMenuMyFiles","MainMenuMyUsers","MainMenuMyServer"];for(var a in d){QC(d[a]).remove("fullselect");QC(d[a]).remove("semiselect")}var b=["LeftMenuMyDevices","LeftMenuMyAccount","LeftMenuMyEvents","LeftMenuMyFiles","LeftMenuMyUsers","LeftMenuMyServer"];for(var a in b){QC(b[a]).remove("lbbuttonsel");QC(b[a]).remove("lbbuttonsel2")}var e=(h<9?"fullselect":"semiselect");var c=(h<9?"lbbuttonsel2":"lbbuttonsel");if(h==1||(h>=10&&h<20)){QC("MainMenuMyDevices").add(e)}if(h==1||(h>=10&&h<20)){QC("LeftMenuMyDevices").add(c)}if(h==2||(h>=20&&h<30)){QC("MainMenuMyAccount").add(e)}if(h==2||(h>=20&&h<30)){QC("LeftMenuMyAccount").add(c)}if(h==3){QC("MainMenuMyEvents").add(e)}if(h==3){QC("LeftMenuMyEvents").add(c)}if(h==4||(h>=30&&h<40)){QC("MainMenuMyUsers").add(e)}if(h==4||(h>=30&&h<40)){QC("LeftMenuMyUsers").add(c)}if(h==5){QC("MainMenuMyFiles").add(e)}if(h==5){QC("LeftMenuMyFiles").add(c)}if((h==6)||(h==115)){QC("MainMenuMyServer").add(e)}if((h==6)||(h==115)||(h==40)){QC("LeftMenuMyServer").add(c)}if(webPageStackMenu&&(h>=10)){QC("column_l").add("room4submenu")}else{QC("column_l").remove("room4submenu")}QV("topbar",h!=0);if((h==0)&&(webPageFullScreen)){QC("body").add("arg_hide")}QV("MainSubMenuSpan",h>=10&&h<20);QV("UserDummyMenuSpan",(h<10)&&(h!=6)&&webPageFullScreen);QV("MeshSubMenuSpan",h>=20&&h<30);QV("UserSubMenuSpan",h>=30&&h<40);QV("ServerSubMenuSpan",h==6||h==115||h==40||h==41);var g={10:"MainDev",11:"MainDevDesktop",12:"MainDevTerminal",13:"MainDevFiles",14:"MainDevAmt",15:"MainDevConsole",16:"MainDevEvents",20:"MeshGeneral",30:"UserGeneral",31:"UserEvents",6:"ServerGeneral",40:"ServerStats",41:"ServerTrace",115:"ServerConsole"};for(var a in g){QC(g[a]).remove("style3x");QC(g[a]).remove("style3sel");QC(g[a]).add((h==a)?"style3sel":"style3x")}if(h==11){deskAdjust()}if(h==115){QV("p15",true)}QV("p15uploadCore",h!=115);QV("p15BackButton",h!=115);if((h==15)||(h==115)){setupConsole()}if(h==1){masterUpdate(4)}if((h==2)&&Notification){QV("accountEnableNotificationsSpan",Notification.permission!="granted")}if((h==40)&&(serverTimelineStats==null)){refreshServerTimelineStats()}if((currentNode)&&(h>=10)&&(h<20)){document.title=decodeURIComponent("{{{extitle}}}")+" - "+currentNode.name+" - "+meshes[currentNode.meshid].name}else{document.title=decodeURIComponent("{{{extitle}}}")}}function joinPaths(){var c=[];for(var a in arguments){var b=arguments[a];if((b!=null)&&(b!="")){while(b.endsWith("/")||b.endsWith("\\")){b=b.substring(0,b.length-1)}while(b.startsWith("/")||b.startsWith("\\")){b=b.substring(1)}c.push(b)}}return c.join("/")}function putstore(g,j){try{if((typeof(localStorage)==="undefined")||(localStorage.getItem(g)==j)){return}if(j==null){localStorage.removeItem(g)}else{localStorage.setItem(g,j)}}catch(a){}if(g[0]!="_"){var h={};for(var b=0,d=localStorage.length;b<d;++b){var c=localStorage.key(b);if(c[0]!="_"){h[c]=localStorage.getItem(c)}}meshserver.send({action:"userWebState",state:JSON.stringify(h)})}}function getstore(b,d){try{if(typeof(localStorage)==="undefined"){return d}var c=localStorage.getItem(b);if((c==null)||(c==null)){return d}return c}catch(a){return d}}function addLink(b,a){return"<span tabindex=0 style=cursor:pointer;text-decoration:none onclick='"+a+"' onkeypress=\"if (event.key=='Enter') {"+a+'} ">'+b+" <img class=hoverButton src=images/link5.png></span>"}function addLinkConditional(d,b,a){if(a){return addLink(d,b)}return d}function haltEvent(a){if(a.preventDefault){a.preventDefault()}if(a.stopPropagation){a.stopPropagation()}return false}function addOption(c,d,a){var b=document.createElement("option");b.text=d;b.value=a;Q(c).add(b)}function passwordcheck(a){return(a.length>7)&&(/\d/.test(a))&&(/[a-z]/.test(a))&&(/[A-Z]/.test(a))&&(/\W/.test(a))}function methodcheck(a){if(a&&a!=null&&a.Body&&a.Body.ReturnValueStr!="SUCCESS"){messagebox("Call Error",a.Header.Method+": "+a.Body.ReturnValueStr.replace("_"," "));return true}return false}function TableStart(){return"<table cellpadding=0 cellspacing=0 style=width:100%;border-radius:8px><tr><td width=200px><p><td>"}function TableStart2(){return"<table cellpadding=0 cellspacing=0 style=width:100%;border-radius:8px><tr><td><p><td>"}function TableEntry(a,b){return"<tr><td><p>"+a+"<td>"+b}function FullTable(c,a){var b=TableStart();for(i in c){if(i&&c[i]){b+=TableEntry(i,c[i])}}return b+TableEnd(a)}function TableEnd(a){return"<tr><td colspan=2><p>"+(a?a:"")+"</table>"}function AddButton(b,a){return"<input type=button value='"+b+"' onclick='"+a+"' style=margin:4px>"}function AddButton2(b,a){return"<input type=button value='"+b+"' onclick='"+a+"'>"}function AddRefreshButton(a){return"<input type=button name=refreshbtn value=Refresh onclick='refreshButtons(false);"+a+"' style=margin:4px "+(refreshButtonsState==false?"disabled":"")+">"}function MoreStart(){return'<a href=# style=cursor:pointer;color:blue id=morexxx1 onclick=QV("morexxx1",false);QV("morexxx2",true)>▼ More</a><div id=morexxx2 style=display:none><br><hr>'}function MoreEnd(){return'<a href=# style=cursor:pointer;color:blue onclick=QV("morexxx2",false);QV("morexxx1",true)>▲ Less</a></div>'}function getSelectedOptions(e){var d=[],c;for(var a=0,b=e.options.length;a<b;a++){c=e.options[a];if(c.selected){d.push(c.value)}}return d}function getInstance(b,c){for(var a in b){if(b[a]["InstanceID"]==c){return b[a]}}return null}function getItem(b,c,d){for(var a in b){if(b[a][c]==d){return b[a]}}return null}function guidToStr(a){return a.substring(6,8)+a.substring(4,6)+a.substring(2,4)+a.substring(0,2)+"-"+a.substring(10,12)+a.substring(8,10)+"-"+a.substring(14,16)+a.substring(12,14)+"-"+a.substring(16,20)+"-"+a.substring(20)}function getUrlVars(){var d,a,e=[],b=window.location.href.slice(window.location.href.indexOf("?")+1).split("&");for(var c=0;c<b.length;c++){d=b[c].indexOf("=");if(d>0){e[b[c].substring(0,d)]=b[c].substring(d+1,b[c].length)}}return e}function addHtmlValue(a,b){return"<table><td style=width:120px>"+a+"<td><b>"+b+"</b></table>"}function addHtmlValue2(a,b){return"<div><div style=display:inline-block;float:right>"+b+"</div><div style=display:inline-block>"+a+"</div></div>"}function addHtmlValue3(a,b){return"<div><b>"+a+"</b></div><div style=margin-left:16px>"+b+"</div>"}function parseUriArgs(){var a,c={},b=window.document.location.href.split(/[\?&|\=]/);b.splice(0,1);for(d in b){switch(d%2){case 0:a=decodeURIComponent(b[d]);break;case 1:c[a]=decodeURIComponent(b[d]);var d=parseInt(c[a]);if(d==c[a]){c[a]=d}break;default:break}}return c}function focusTextBox(a){setTimeout(function(){Q(a).selectionStart=Q(a).selectionEnd=65535;Q(a).focus()},0)}function validateEmail(b){var a=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return a.test(b)}function isPrivateIP(b){return(b.startsWith("10.")||b.startsWith("172.16.")||b.startsWith("192.168."))}function u2fSupported(){return(window.u2f&&((navigator.userAgent.indexOf("Chrome/")>0)||(navigator.userAgent.indexOf("Firefox/")>0)||(navigator.userAgent.indexOf("Opera/")>0)||(navigator.userAgent.indexOf("Safari/")>0)))}function findOne(a,b){if((a==null)||(b==null)){return false}return b.some(function(c){return a.indexOf(c)>=0})}function copyTextToClip(c){function b(d){if(document.selection){var g=document.body.createTextRange();g.moveToElementText(d);g.select()}else{if(window.getSelection){var g=document.createRange();g.selectNode(d);window.getSelection().removeAllRanges();window.getSelection().addRange(g)}}}var a=document.createElement("DIV");a.textContent=c;document.body.appendChild(a);b(a);document.execCommand("copy");a.remove()}function copyTextToClip2(c){function b(d){if(document.selection){var g=document.body.createTextRange();g.moveToElementText(d);g.select()}else{if(window.getSelection){var g=document.createRange();g.selectNode(d);window.getSelection().removeAllRanges();window.getSelection().addRange(g)}}}var a=document.createElement("DIV");a.textContent=decodeURIComponent(c);document.body.appendChild(a);b(a);document.execCommand("copy");a.remove()}function capitalizeFirstLetter(a){return a.charAt(0).toUpperCase()+a.slice(1)}function printDate(a){return a.toLocaleDateString(args.locale)}function printTime(a){return a.toLocaleTimeString(args.locale)}function printDateTime(a){return a.toLocaleString(args.locale)};</script></body></html>
\ No newline at end of file
1
+<!DOCTYPE html> <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> <meta name="viewport" content="user-scalable=1.0,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="format-detection" content="telephone=no"> <link rel="shortcut icon" type="image/x-icon" href="{{{domainurl}}}favicon.ico"> <link keeplink="1" type="text/css" href="styles/style.css" media="screen" rel="stylesheet" title="CSS"> <style>.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f;}.ol-mouse-position{top:8px;right:8px;position:absolute;}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute;}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width;}.ol-overlay-container{will-change:left,right,top,bottom;}.ol-unsupported{display:none;}.ol-unselectable, .ol-viewport{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;}.ol-grabbing{cursor:-webkit-grabbing;cursor:-moz-grabbing;cursor:grabbing;}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:-moz-grab;cursor:grab;}.ol-control{position:absolute;background-color:rgba(255,255,255,.4);border-radius:4px;padding:2px;}.ol-control:hover{background-color:rgba(255,255,255,.6);}.ol-zoom{top:.5em;right:.5em;}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear;}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s;}.ol-zoom-extent{top:4.643em;left:.5em;}.ol-full-screen{right:.5em;top:.5em;}@media print{.ol-control{display:none;}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px;}.ol-control button::-moz-focus-inner{border:none;padding:0;}.ol-zoom-extent button{line-height:1.4em;}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform;}.ol-touch .ol-control button{font-size:1.5em;}.ol-touch .ol-zoom-extent{top:5.5em;}.ol-control button:focus, .ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7);}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0;}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px;}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em);}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff;}.ol-attribution li{display:inline;list-style:none;line-height:inherit;}.ol-attribution li:not(:last-child):after{content:" ";}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle;}.ol-attribution button, .ol-attribution ul{display:inline-block;}.ol-attribution.ol-collapsed ul{display:none;}.ol-attribution.ol-logo-only ul{display:block;}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8);}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em;}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em;}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em;}.ol-attribution.ol-logo-only button, .ol-attribution.ol-uncollapsible button{display:none;}.ol-zoomslider{top:4.5em;left:.5em;height:200px;}.ol-zoomslider button{position:relative;height:10px;}.ol-touch .ol-zoomslider{top:5.5em;}.ol-overviewmap{left:.5em;bottom:.5em;}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0;}.ol-overviewmap .ol-overviewmap-map, .ol-overviewmap button{display:inline-block;}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px;}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute;}.ol-overviewmap.ol-collapsed .ol-overviewmap-map, .ol-overviewmap.ol-uncollapsible button{display:none;}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8);}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7);}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move;}</style> <style> .ol-ctx-menu-container{position:absolute;padding:8px;background:#fff;color:#222;font-size:13px;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,.2);box-sizing:border-box}.ol-ctx-menu-container a,.ol-ctx-menu-container div,.ol-ctx-menu-container img,.ol-ctx-menu-container li,.ol-ctx-menu-container span,.ol-ctx-menu-container ul{margin:0;padding:0;border:0;font:inherit;font-size:100%;vertical-align:baseline}.ol-ctx-menu-container a img{border:none}.ol-ctx-menu-container *,.ol-ctx-menu-container :after,.ol-ctx-menu-container :before{box-sizing:inherit}.ol-ctx-menu-container.ol-ctx-menu-hidden{opacity:0;visibility:hidden;-webkit-transition:visibility 0s linear .3s,opacity .3s;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container ul{list-style:none}.ol-ctx-menu-container li{position:relative;line-height:20px;padding:2px 5px}.ol-ctx-menu-container li:not(.ol-ctx-menu-separator):hover{cursor:pointer;background-color:#333;color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-submenu .ol-ctx-menu-container{border:1px solid #eee;padding:8px;top:0;opacity:0;visibility:hidden;-webkit-transition:visibility 0s linear .3s,opacity .3s;transition:visibility 0s linear .3s,opacity .3s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover .ol-ctx-menu-container{opacity:1;visibility:visible;-webkit-transition-delay:0s;transition-delay:0s}.ol-ctx-menu-container li.ol-ctx-menu-submenu:after{position:absolute;top:7px;right:10px;content:"";display:inline-block;width:.6em;height:.6em;border-right:.3em solid #222;border-top:.3em solid #222;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ol-ctx-menu-container li.ol-ctx-menu-submenu:hover:after{border-color:#eee}.ol-ctx-menu-container li.ol-ctx-menu-separator{padding:0}.ol-ctx-menu-container li.ol-ctx-menu-separator hr{border:0;height:1px;background-image:-webkit-linear-gradient(right,transparent,rgba(0,0,0,.75),transparent);background-image:linear-gradient(270deg,transparent,rgba(0,0,0,.75),transparent)}.ol-ctx-menu-icon{text-indent:20px;background-size:20px auto;background-repeat:no-repeat;background-position:0}.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABaUlEQVQ4T72U7VHCQBCGn90GtAMuNGCswFiBWIFQgWMFxg6wArECsQKhArEBiB1Qwa1zgQn5IAYcxv13k71n3919L8KJQ07M47+BzgG9TRfZ/JBuWhS6BJFHRJICYrZGZIz3z5Ct2+B7gG6I6kt+wewdkQVwjtkAkR5mC8yu26A1oItR/cTsOweQBdgutD8G7jGm2PJ2n8oqUKIpIjd4HxTM8gvaT/F+AlmWnyWaIXKF95eNguFzTYFhNsdWu9kFgFlaFMANUH3D8wDLoLgSTSD2il8NCe2ZXQBxWDGwxmyUzzOMBZ7wy7Qb2K0wQfXjMOBuhlFpZtNty5sFaTQBuTusZdymeqs1SpYKcO9HkE3KbTd9WFijMHJQ5hBNEAYNq5Qd0dhyke0GiE4QzjqfW23mHT8Hl4DG4Lce3FPE7AtbBSdsbNqpoJLgYkRnNeUV+xwJDHTnUEkxHGbhBXUs5TjJjew/KPy94g+NRaIVRYmMXwAAAABJRU5ErkJggg==")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-in{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABc0lEQVQ4T71U21ECQRDsJgGdvQDECMQIxAjECMQILCPwzAAjECIQI0AiEDPQAPaWCBhrcKHuCUcV5f7dY3v6tUscefHIePhfwBBCF8CZqRCReRs1tQxDCH1VfQLQz4EsSY4AvIjIsgm8AhhCGKrqa9zwrqoLAKckB5HtguR1E2gBMITQU9VPAD8GICIGtl3e+xHJBwBT59xtHcsCYJZlUwA3kcGHbfDep51OZywi3/acZZm9vyJ5WR5o38uACmDunNt6ZwAkUxFZDwghDFT1jeSjiJinhVUBVNVJkiTDKO8CQA+AsbNQ7s1Ps0VVn5MkSfcCtmBoDZi1Bdx4eJ7zbBolrwPy3o9J3rWSHPs3A1BbjVKlYBaIyDgvu9LDXDU2RTZmXVW1oKyLxRD+OrkOrJLy5mVM0iaftDhuhVbsvBzMglzKUNW6IV/OOWtCM8MmVvEkmbwt83LaB19fdgOtVquUZJeknaDdobTwbOcvBzPcN/AXH1DFFWP7u9oAAAAASUVORK5CYII=")}.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABU0lEQVQ4T72U7VECMRRFz3sNaAdkacC1AtcKxApcKnCsQOwAK3CtQKxAqEBsANYOqCDPyTIC+8WCw5jfybn33dxEOPGSE/P4b6BzQG89RT47ZJoWhy5B5BGRZAMxWyEyxvtnyFdt8AagS1F9KQ6YvSMyB84xGyDSw2yO2XUbtAJ0MaqfmH0XAPIA2y7tj4F7jAm2uG1yWQZKNEHkBu+Dg2njWBJNEbnC+8uaIFRuWfuG2QxbbrOrUd0A1Tc8D7AIjkur7DAAsVf8MiWMZ3ZR2m02LPIMscATfjHqBnY7TFD9OAy4zTCCPG/MUKMM5O6wkXFr9dZq7FQqqHk/hDzbFa73cFONTZFDdRyiCcKg5rrSiLaXkiI6RjjrfG6VzDs+B5eAxuDXeYpmNRGzL2wZ/wof+du4GNFpBVqqz5HA4MM5VEYYDrOs+1I6Q9u/4Q8O9wN/AGgWjBVqQjjgAAAAAElFTkSuQmCC")}.ol-ctx-menu-container li:hover.ol-ctx-menu-zoom-out{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAABYklEQVQ4T72U4VHCQBCF36tA91KAWIFYgViBWIFYgWMFYgdYgVCBWAFSgdiBFpAsFWSdxcDkQoBkhnF/ZjbfvX377ogjF4/Mw/8CVbUD4MynEJF5k2lqFapqz8yeAPRKkCXJEYAXEVnugm8BVXVgZq/FD+9mtgBwSrJfqF2QvN4FjYCq2jWzTwA/DhARh20qTdMRyQcA0xDCbZ3KCJhl2RTATaHgo+6HLMv8+xXJy+qB3l8FGoB5CKHsXcRV1b6ZvZF8FBH3NKotoJlNkiQZFONdlLtJ3rufbouZPSdJMjwIbKDQEzBrClx7eC4i33Uepmk6JnnXaOQifzMAtdGoRApugYiMI1uqKkrRWAfZo9MxM1+UZzFewl8mN4nYdVM83L7BkwbXLUrF3sfBLQDQBbDy08x8vOohXyEE71lVq9emuEk+3gZa3XYroCvwFyjP8yHJDsnxwaU08GxvS2uFhw78BbzWrxXgMbsHAAAAAElFTkSuQmCC")}</style> <script type="text/javascript" src="scripts/u2f-api.js"></script> <script type="text/javascript" src="scripts/charts.js"></script> <script type="text/javascript" src="scripts/filesaver.js"></script> <script type="text/javascript" src="scripts/ol.js"></script> <script type="text/javascript" src="scripts/ol3-contextmenu.js"></script> <title>{{{title}}}</title> </head> <body id="body" onload="if (typeof(startup) !== 'undefined') startup();" oncontextmenu="handleContextMenu(event)" style="display:none;min-width:495px"> <div id="contextMenu" class="contextMenu noselect" style="display:none"> <div id="cxinfo" class="cmtext" onclick="cmaction(1,event)"><b>Information</b></div> <div id="cxdesktop" class="cmtext" onclick="cmaction(3,event)">Desktop</div> <div id="cxterminal" class="cmtext" onclick="cmaction(2,event)">Terminal</div> <div id="cxfiles" class="cmtext" onclick="cmaction(4,event)">Files</div> <div id="cxevents" class="cmtext" onclick="cmaction(5,event)">Events</div> <div id="cxconsole" class="cmtext" onclick="cmaction(6,event)">Console</div> <hr id="cxmgroupsplit"> <div id="cxmdesktop" class="cmtext" onclick="cmaction(7,event)" style="display:none">Multi-Desktop</div> </div> <div id="meshContextMenu" class="contextMenu noselect" style="display:none;min-width:0px"> <div id="cxselectall" class="cmtext" onclick="cmmeshaction(1,event)">Select All</div> <div id="cxselectnone" class="cmtext" onclick="cmmeshaction(2,event)">Select None</div> </div> <div id="termShellContextMenu" class="contextMenu noselect" style="display:none;min-width:0px"> <div id="cxtermnorm" class="cmtext" onclick="cmtermaction(1,event)">Normal Connect</div> <div id="cxtermps" class="cmtext" onclick="cmtermaction(2,event)">PowerShell Connect</div> </div> <div id="container"> <div id="notifiyBox" class="notifiyBox" style="display:none"></div> <div id="masthead" class="noselect"> <div class="title">{{{title}}}</div> <div class="title2">{{{title2}}}</div> <div style="float:right"> <div id="notificationCount" onclick="clickNotificationIcon()" class="unselectable" style="display:none;" title="Click to view current notifications">0</div> </div> <p id="logoutControl">{{{logoutControl}}}<span id="idleTimeoutNotify" style="color:yellow"></span></p> </div> <div id="page_leftbar"> <div style="height:16px"></div> <div id="LeftMenuMyDevices" tabindex="0" class="lbbutton lbbuttonsel" title="My Devices" onclick="go(1)" onkeypress="if (event.key=='Enter') { go(1); }"> <div class="lb2"></div> </div> <div id="LeftMenuMyAccount" tabindex="0" class="lbbutton" title="My Account" onclick="go(2)" onkeypress="if (event.key=='Enter') { go(2); }"> <div class="lb1"></div> </div> <div id="LeftMenuMyEvents" tabindex="0" class="lbbutton" title="My Events" onclick="go(3)" onkeypress="if (event.key=='Enter') { go(3); }"> <div class="lb3"></div> </div> <div id="LeftMenuMyFiles" tabindex="0" class="lbbutton" style="display:none" title="My Files" onclick="go(5)" onkeypress="if (event.key=='Enter') { go(5); }"> <div class="lb4"></div> </div> <div id="LeftMenuMyUsers" tabindex="0" class="lbbutton" style="display:none" title="My Users" onclick="go(4)" onkeypress="if (event.key=='Enter') { go(4); }"> <div class="lb5"></div> </div> <div id="LeftMenuMyServer" tabindex="0" class="lbbutton" style="display:none" title="My Server" onclick="go(6)" onkeypress="if (event.key=='Enter') { go(6); }"> <div class="lb6"></div> </div> </div> <div id="topbar" class="noselect"> <div> <div style="position:relative"> <div tabindex="0" id="uiMenuButton" title="User interface selection" onclick="showUserInterfaceSelectMenu()" onkeypress="if (event.key == 'Enter') showUserInterfaceSelectMenu()">♦ <div id="uiMenu" style="display:none"> <div tabindex="0" id="uiViewButton1" class="uiSelector" onclick="userInterfaceSelectMenu(1)" title="Left bar interface" onkeypress="if (event.key == 'Enter') userInterfaceSelectMenu(1)"><div class="uiSelector1"></div></div> <div tabindex="0" id="uiViewButton2" class="uiSelector" onclick="userInterfaceSelectMenu(2)" title="Top bar interface" onkeypress="if (event.key == 'Enter') userInterfaceSelectMenu(2)"><div class="uiSelector2"></div></div> <div tabindex="0" id="uiViewButton3" class="uiSelector" onclick="userInterfaceSelectMenu(3)" title="Fixed width interface" onkeypress="if (event.key == 'Enter') userInterfaceSelectMenu(3)"><div class="uiSelector3"></div></div> <div tabindex="0" id="uiViewButton4" class="uiSelector" onclick="toggleNightMode()" title="Toggle night mode" onkeypress="if (event.key == 'Enter') toggleNightMode()"><div class="uiSelector4"></div></div> </div> </div> <table id="MainMenuSpan" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="MainMenuMyDevices" class="topbar_td style3x" onclick="go(1)" onkeypress="if (event.key == 'Enter') go(1)">My Devices</td> <td tabindex="0" id="MainMenuMyAccount" class="topbar_td style3x" onclick="go(2)" onkeypress="if (event.key == 'Enter') go(2)">My Account</td> <td tabindex="0" id="MainMenuMyEvents" class="topbar_td style3x" onclick="go(3)" onkeypress="if (event.key == 'Enter') go(3)">My Events</td> <td tabindex="0" id="MainMenuMyFiles" class="topbar_td style3x" onclick="go(5)" onkeypress="if (event.key == 'Enter') go(5)">My Files</td> <td tabindex="0" id="MainMenuMyUsers" class="topbar_td style3x" onclick="go(4)" onkeypress="if (event.key == 'Enter') go(4)">My Users</td> <td tabindex="0" id="MainMenuMyServer" class="topbar_td style3x" onclick="go(6)" onkeypress="if (event.key == 'Enter') go(6)">My Server</td> <td class="topbar_td_end style3"> </td> </tr> </table> <div id="MainSubMenuSpan" style="display:none"> <table id="MainSubMenu" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="MainDev" class="topbar_td style3x" onclick="go(10)" onkeypress="if (event.key == 'Enter') go(10)">General</td> <td tabindex="0" id="MainDevDesktop" class="topbar_td style3x" onclick="go(11)" onkeypress="if (event.key == 'Enter') go(11)">Desktop</td> <td tabindex="0" id="MainDevTerminal" class="topbar_td style3x" onclick="go(12)" onkeypress="if (event.key == 'Enter') go(12)">Terminal</td> <td tabindex="0" id="MainDevFiles" class="topbar_td style3x" onclick="go(13)" onkeypress="if (event.key == 'Enter') go(13)">Files</td> <td tabindex="0" id="MainDevEvents" class="topbar_td style3x" onclick="go(16)" onkeypress="if (event.key == 'Enter') go(16)">Events</td> <td tabindex="0" id="MainDevInfo" class="topbar_td style3x" onclick="go(17)" onkeypress="if (event.key == 'Enter') go(17)">Details</td> <td tabindex="0" id="MainDevAmt" class="topbar_td style3x" onclick="go(14)" onkeypress="if (event.key == 'Enter') go(14)">Intel® AMT</td> <td tabindex="0" id="MainDevConsole" class="topbar_td style3x" onclick="go(15)" onkeypress="if (event.key == 'Enter') go(15)">Console</td> <td class="topbar_td_end style3"> </td> </tr> </table> </div> <div id="MeshSubMenuSpan" style="display:none"> <table id="MeshSubMenu" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="MeshGeneral" class="topbar_td style3x" onclick="go(20)" onkeypress="if (event.key == 'Enter') go(20)">General</td> <td class="topbar_td_end style3"> </td> </tr> </table> </div> <div id="UserSubMenuSpan" style="display:none"> <table id="UserSubMenu" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="UserGeneral" class="topbar_td style3x" onclick="go(30)" onkeypress="if (event.key == 'Enter') go(30)">General</td> <td tabindex="0" id="UserEvents" class="topbar_td style3x" onclick="go(31)" onkeypress="if (event.key == 'Enter') go(31)">Events</td> <td class="topbar_td_end style3"> </td> </tr> </table> </div> <div id="ServerSubMenuSpan" style="display:none"> <table id="ServerSubMenu" cellpadding="0" cellspacing="0" class="style1"> <tr> <td tabindex="0" id="ServerGeneral" class="topbar_td style3x" onclick="go(6)" onkeypress="if (event.key == 'Enter') go(6)">General</td> <td tabindex="0" id="ServerStats" class="topbar_td style3x" onclick="go(40)" onkeypress="if (event.key == 'Enter') go(40)">Stats</td> <td tabindex="0" id="ServerConsole" class="topbar_td style3x" onclick="go(115)" onkeypress="if (event.key == 'Enter') go(115)">Console</td> <td tabindex="0" id="ServerTrace" class="topbar_td style3x" onclick="go(41)" onkeypress="if (event.key == 'Enter') go(41)">Trace</td> <td class="topbar_td_end style3"> </td> </tr> </table> </div> <div id="UserDummyMenuSpan"> <table id="UserDummyMenu" cellpadding="0" cellspacing="0" class="style1"> <tr><td class="style3" style=""> </td></tr> </table> </div> </div> </div> </div> <div id="column_l"> <div id="p0" style="display:none"> <div id="p0message"><span id="p0span">Server disconnected</span>, <href onclick="reload()" style="cursor:pointer"><u>click to reconnect</u></href>.</div> </div> <div id="p1" style="display:none"> <div style="display:none" id="devListToolbarViewIcons"> <div tabindex="0" id="devViewButton1" class="viewSelector" onclick="onDeviceViewChange(1)" onkeypress="if (event.key=='Enter') { onDeviceViewChange(1); }" title="Columns"><div class="viewSelector2"></div></div> <div tabindex="0" id="devViewButton2" class="viewSelector" onclick="onDeviceViewChange(2)" onkeypress="if (event.key == 'Enter') { onDeviceViewChange(2); }" title="List"><div class="viewSelector1"></div></div> <div tabindex="0" id="devViewButton3" class="viewSelector" onclick="onDeviceViewChange(3)" onkeypress="if (event.key == 'Enter') { onDeviceViewChange(3); }" title="Desktops"><div class="viewSelector3"></div></div> <div tabindex="0" id="devViewButton4" class="viewSelector" onclick="onDeviceViewChange(4)" onkeypress="if (event.key == 'Enter') { onDeviceViewChange(4); }" title="Map"><div class="viewSelector4"></div></div> </div><div><h1>My Devices</h1></div> <table id="devListToolbarSpan" class="noselect"> <tr> <td class="h1"></td> <td id="devListToolbar" class="style14" style="display:none"> <input type="button" id="SelectAllButton" onclick="selectallButtonFunction();" value="Select All"> <input type="button" id="GroupActionButton" disabled="disabled" value="Group Action" onclick="groupActionFunction()"> <input id="SearchInput" type="text" placeholder="Filter" onchange="masterUpdate(5)" onkeyup="masterUpdate(5)" autocomplete="off" onfocus="onSearchFocus(1)" onblur="onSearchFocus(0)"> <label><input type="checkbox" id="RealNameCheckBox" onclick="onRealNameCheckBox()"><span title="Show devices operating system name">OS Name</span></label> </td> <td id="kvmListToolbar" class="style14" style="display:none"> <input type="button" onclick="connectAllKvmFunction()" value="Connect All"> <input type="button" onclick="disconnectAllKvmFunction()" value="Disconnect All"> <label><input type="checkbox" id="autoConnectDesktopCheckbox" onclick="autoConnectDesktops(event)" title="Automatic connect">Auto </label> <input type="button" onclick="showMultiDesktopSettings()" value="Settings"> </td> <td id="devMapToolbar" class="style14" style="display:none"> <input type="text" id="mapSearchLocation" placeholder="Search Location" onfocus="onMapSearchFocus(1)" onblur="onMapSearchFocus(0)"> <input type="button" value="Search" title="Search for location" onclick="getSearchLocation()"> <input type="button" id="refreshmap" title="Reset map view" value="Reset" onclick="refreshMap(false,true)"> </td> <td class="auto-style1" style="height:100%"> <div style="display:none" id="devListToolbarView"> View <select id="viewselect" onchange="onDeviceViewChange()"> <option value="1">Columns <option value="2">List <option value="3">Desktops <option id="viewselectmapoption" value="4">Map </select> </div> <div style="display:none" id="devListToolbarSort"> Sort <select id="sortselect" onchange="masterUpdate(6)"> <option>Group <option>Power <option>Device <option>Tags </select> </div> <div style="display:none" id="devListToolbarSize"> Size <select id="sizeselect" onchange="onDeviceViewChange()"> <option value="0">Small <option value="1">Medium <option value="2">Large </select> </div> </td> <td class="h2"></td> </tr> </table> <div id="NoMeshesPanel" style="display:none"> <table> <tr> <td valign="top" style="width:50px"> <img src="images/info.png"> </td> <td> <div id="getStarted1">To get started, <a href="#" onclick="return account_createMesh()"><strong>click here to create a device group</strong></a>.</div> <div id="getStarted2">No device groups.</div> </td> </tr> </table> </div> <div id="xdevices" class="noselect" style="display:none"></div> <div id="xdevicesmap" style="display:none"> <div id="xmapSearchResultsDlg" style="display:none"> <div id="xmapSearchResultsBck"> <div id="xmapSearchClose" onclick="mapCloseSearchWindow()"><b>X</b></div> <div style="padding:5px">Location Results</div> <div style="width:100%;margin:6px"></div> </div> <div id="xmapSearchResults" style="margin:6px"></div> </div> </div> <div id="xmap-info-window"></div> </div> <div id="p2" style="display:none"> <h1>My Account</h1> <img id="p2AccountImage" alt="" src="images/clipboard-128.png"> <div id="p2AccountSecurity" style="display:none"> <p><strong>Account security</strong></p> <div style="margin-left:25px"> <div id="manageAuthApp"><div class="p2AccountActions"><span id="authAppSetupCheck"><strong>✓</strong></span></div><span><a href="#" onclick="return account_manageAuthApp()">Manage authenticator app</a><br></span></div> <div id="manageHardwareOtp"><div class="p2AccountActions"><span id="authKeySetupCheck"><strong>✓</strong></span></div><span><a href="#" onclick="return account_manageHardwareOtp(0)">Manage security keys</a><br></span></div> <div id="manageOtp"><div class="p2AccountActions"><span id="authCodesSetupCheck"><strong>✓</strong></span></div><span><a href="#" onclick="return account_manageOtp(0)">Manage backup codes</a><br></span></div> </div> </div> <div id="p2AccountActions"> <p><strong>Account actions</strong></p> <p class="mL"> <span id="verifyEmailId" style="display:none"><a href="#" onclick="return account_showVerifyEmail()">Verify email</a><br></span> <span id="accountEnableNotificationsSpan" style="display:none"><a href="#" onclick="return account_enableNotifications()">Enable web notifications</a><br></span> <a href="#" onclick="return account_showLocalizationSettings()">Localization Settings</a><br> <a href="#" onclick="return account_showAccountNotifySettings()">Notification Settings</a><br> <span id="accountChangeEmailAddressSpan" style="display:none"><a href="#" onclick="return account_showChangeEmail()">Change email address</a><br></span> <a href="#" onclick="return account_showChangePassword()">Change password</a><span id="p2nextPasswordUpdateTime"></span><br> <a href="#" onclick="return account_showDeleteAccount()">Delete account</a><br> </p> <br style="clear:both"> </div> <strong>Device Groups</strong> <span id="p2createMeshLink1">( <a href="#" onclick="return account_createMesh()" class="newMeshBtn"> New</a> )</span> <br><br> <div id="p2meshes"></div> <div id="p2noMeshFound" style="display:none">No device groups.<span id="p2createMeshLink2"> <a href="#" onclick="return account_createMesh()"><strong>Get started here!</strong></a></span></div> <br style="clear:both"> </div> <div id="p3" style="display:none"> <h1>My Events</h1> <table class="pTable"> <tr> <td class="h1"></td> <td class="auto-style1"> Show <select id="p3limitdropdown" onchange="refreshEvents()"> <option value="60">Last 60 <option value="120">Last 120 <option value="250">Last 250 <option value="500">Last 500 <option value="1000">Last 1000 </select> <a href="#" onclick="p3showDownloadEventsDialog(2)"><img src="images/link4.png" height="10" width="10" title="Download Events" style="cursor:pointer"></a> </td> <td class="h2"></td> </tr> </table> <div id="p3events" style=""></div> </div> <div id="p4" style="display:none"> <h1>My Users</h1> <table class="pTable"> <tr> <td class="h1"></td> <td class="style14"> <div style="float:right"> <input type="button" onclick="showUserBroadcastDialog()" style="margin-right:6px" value="Broadcast"> <a href="#" onclick="p4downloadUserInfo()"><img style="cursor:pointer" title="Download user information" src="images/link4.png"></a> <a href="#" onclick="p4batchAccountCreate()"><img id="p4UserBatchCreate" style="cursor:pointer;display:none" title="Batch create many user accounts" src="images/link6.png"></a> </div> <div> <input id="UserNewAccountButton" type="button" style="margin-left:6px" onclick="showCreateNewAccountDialog()" value="New Account..."> <input id="UserSearchInput" type="text" style="width:120px;margin-left:6px" placeholder="Filter" onchange="onUserSearchInputChanged()" onkeyup="onUserSearchInputChanged()" autocomplete="off" onfocus="onUserSearchFocus(1)" onblur="onUserSearchFocus(0)"> </div> </td> <td class="h2"></td> </tr> </table> <div id="p3users"></div> </div> <div id="p5" style="display:none"> <h1>My Files</h1> <table id="p5toolbar" cellpadding="0" cellspacing="0"> <tr> <td id="p5filehead" valign="bottom"> <div id="p5rightOfButtons"></div> <div> <input type="button" id="p5FolderUp" disabled="disabled" onclick="return p5folderup();" value="Up"> <input type="button" id="p5SelectAllButton" disabled="disabled" onclick="p5selectallfile();" value="Select All"> <input type="button" id="p5RenameFileButton" disabled="disabled" value="Rename" onclick="p5renamefile();"> <input type="button" id="p5DeleteFileButton" disabled="disabled" value="Delete" onclick="p5deletefile();"> <input type="button" id="p5NewFolderButton" disabled="disabled" value="New Folder" onclick="p5createfolder();"> <input type="button" id="p5UploadButton" disabled="disabled" value="Upload" onclick="p5uploadFile()"> <input type="button" id="p5CutButton" disabled="disabled" value="Cut" onclick="p5copyFile(1)"> <input type="button" id="p5CopyButton" disabled="disabled" value="Copy" onclick="p5copyFile(0)"> <input type="button" id="p5PasteButton" disabled="disabled" value="Paste" onclick="p5pasteFile()"> </div> </td> </tr> <tr> <td id="p5filesubhead"> <div style="float:right"> <select id="p5sortdropdown" onchange="updateFiles()"> <option value="1" selected="selected">Sort by name <option value="2">Sort by size <option value="3">Sort by date <option value="4">Descend by name <option value="5">Descend by size <option value="6">Descend by date </select> </div> <div> <span id="p5currentpath"></span></div> </td> </tr> </table> <div id="p5filetable"> <div id="p5PublicShare" style=""><div>These files are shared publicly, click "link" to get public url.</div></div> <div id="bigok" style="display:none"><b>✓</b></div> <div id="bigfail" style="display:none"><b>✗</b></div> <span id="p5files"></span> </div> <table id="p5toolbarBottom" style="width:100%" cellpadding="0" cellspacing="0"> <tr><td class="style6"> <span id="p5bottomstatus"></span></td></tr> </table> </div> <div id="p6" style="display:none"> <img id="MainMeshImage" src="serverpic.ashx"> <h1>My Server</h1> <div id="p2ServerActions"> <p><strong>Server actions</strong></p> <div class="mL"> <div id="p2ServerActionsBackup"><a href="{{{domainurl}}}backup.zip" rel="noreferrer noopener" target="_blank">Download server backup</a></div> <div id="p2ServerActionsRestore"><a href="#" onclick="return server_showRestoreDlg()">Restore server with backup</a></div> <div id="p2ServerActionsVersion"><a href="#" onclick="return server_showVersionDlg()">Check server version</a></div> <div id="p2ServerActionsErrors"><a href="#" onclick="return server_showErrorsDlg()">Show server error log</a></div> </div> </div> <br><strong>Server Statistics</strong><br><br> <div id="serverStats"> <div id="serverCpuChartView" style="display:none"> <div class="chartViewCanvas"><canvas id="serverCpuChart"></canvas></div> <div class="chartViewText" id="serverCpuChartText"></div> </div> <div id="serverMemoryChartView" style="display:none"> <div class="chartViewCanvas"><canvas id="serverMemoryChart"></canvas></div> <div class="chartViewText" id="serverMemoryChartText"></div> </div><br><br> <div id="serverStatsTable"></div> </div> </div> <div id="p10" style="display:none"> <table style="width:100%" cellpadding="0" cellspacing="0"> <tr> <td style="width:auto" valign="top"> <div id="p10title"> <div id="p10BackButton"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>General - <span id="p10deviceName"></span></h1> </div> <div id="p10html"></div> </td> <td style="width:20px"></td> <td style="width:200px"> <a href="#" onclick="p10showiconselector()"><img id="MainComputerImage"></a> <div id="MainComputerState"></div> </td> </tr> </table><br> <div id="p10html2"></div> <div id="p10html3"></div> </div> <div id="p11" class="noselect" style="display:none"> <div id="p11title"> <div id="p11deviceNameHeader"> <div id="p11BackButton"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <div id="devListToolbarViewIcons"><div class="viewSelector" onclick="deskToggleFull(event)" title="Full Screen. Hold shift to browser full screen."><div class="viewSelector5"></div></div></div> <h1>Desktop - <span id="p11deviceName"></span></h1> </div> </div> <div id="p11warning" onclick="showFeaturesDlg()"> <div class="icon2"></div> <div class="warningbox">Intel® AMT Redirection port or KVM feature is disabled<span id="p11warninga">, click here to enable it.</span></div> </div> <div id="p11warning2" onclick="showPowerActionDlg()"> <div class="icon2"></div> <div class="warningbox">Remote computer is not powered on, click here to issue a power command.</div> </div> <div id="deskarea0" cellpadding="0" cellspacing="0"> <div id="deskarea1" class="areaHead"> <div class="toright2"> <span id="p11power"></span> <div class='deskareaicon' title="Toggle View Mode" onclick="toggleAspectRatio(1)">⇲</div> <div class='deskareaicon' title="Rotate Left" onclick="drotate(-1)">↺</div> <div class='deskareaicon' title="Rotate Right" onclick="drotate(1)">↻</div> <div id="deskRecordIcon" class='deskareaicon' title="Server is recording this session" style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px"></div> <input id="deskFocusBtn" type="button" title="Toggle focus mode, when active only the region around the mouse is updated" onkeypress="return false" onkeydown="return false" value="Focus All" onclick="deskToggleFocus()" style="margin-right:3px;display:none"> <input id="deskSaveBtn" type="button" title="Save a screenshot of the remote desktop" onkeypress="return false" onkeydown="return false" value="Save..." onclick="deskSaveImage()" class="mR"> <input id="deskActionsBtn" type="button" title="Perform power actions on the device" onkeypress="return false" onkeydown="return false" value="Actions" onclick="deviceActionFunction()" class="mR"> <input id="deskActionsSettings" type="button" value="Settings..." title="Edit remote desktop settings" onkeypress="return false" onkeydown="return false" onclick="showDesktopSettings()" class="mR"> <input type="button" title="Change the power state of the remote machine" onkeypress="return false" onkeydown="return false" value="Power Actions..." onclick="showPowerActionDlg()" style="display:none"> </div> <div> <div id="idx_deskFullBtn2" onclick="deskToggleFull(event)"> ✖</div> <input type="button" id="autoconnectbutton1" value="AutoConnect" onclick="autoConnectDesktop(event)" onkeypress="return false" onkeydown="return false" style="display:none"> <span id="connectbutton1span"><input type="button" id="connectbutton1" value="Connect" onclick="connectDesktop(event,1)" onkeypress="return false" onkeydown="return false" disabled="disabled"></span> <span id="connectbutton1hspan"> <input type="button" id="connectbutton1h" value="HW Connect" onclick="connectDesktop(event,2)" onkeypress="return false" onkeydown="return false" disabled="disabled"></span> <span id="disconnectbutton1span"> <input type="button" id="disconnectbutton1" value="Disconnect" onclick="connectDesktop(event,0)" onkeypress="return false" onkeydown="return false"></span> <span id="deskstatus">Disconnected</span> </div> </div> <div id="deskarea2" style=""> <div class="areaProgress"><div id="progressbar" style=""></div></div> </div> <div id="deskarea3x"> <div id="DeskFocus" oncontextmenu="return false" onmousedown="dmousedown(event)" onmouseup="dmouseup(event)" onmousemove="dmousemove(event)"></div> <div id="DeskParent"> <canvas id="Desk" width="640" height="480" oncontextmenu="return false" onmousedown="dmousedown(event)" onmouseup="dmouseup(event)" onmousemove="dmousemove(event)" onmousewheel="dmousewheel(event)"></canvas> </div> <div id="DeskTools"> <div id="deskToolsAreaTop"> <a id="DeskToolsRefreshButton" style="right:2px" onclick="refreshDeskTools()">Refresh</a> <div id="deskToolsTopTabProcess" class="deskToolsTopTab" onclick="changeDeskToolTab(0)" style="left:0px;bottom:0px">Processes</div> <div id="deskToolsTopTabService" class="deskToolsTopTab" onclick="changeDeskToolTab(1)" style="display:none;left:90px;color:gray">Services</div> </div> <div id="deskToolsArea"> <div id="DeskToolsProcessTab"> <div id="deskToolsHeader"> <a class="colmn1" title="Sort by process id" onclick="sortProcess(0)">PID</a> <a class="colmn2" title="Sort by name" onclick="sortProcess(1)">Name</a> </div> <div id="DeskToolsProcesses" style=""></div> </div> <div id="DeskToolsServiceTab" style="display:none"> <div id="deskToolsServiceHeader"> <a class="colmn1" style="width:70px" title="Sort by state" onclick="sortService(0)">State</a> <a class="colmn2" title="Sort by name" onclick="sortService(1)">Name</a> </div> <div id="DeskToolsServices" style=""></div> </div> </div> </div> <div id="p11DeskConsoleMsg" style="display:none;cursor:pointer;position:absolute;left:30px;top:17px;color:yellow;background-color:rgba(0,0,0,0.6);padding:10px;border-radius:5px" onclick="p11clearConsoleMsg()"></div> </div> <div id="deskarea4" class="areaFoot"> <div class="toright2"> <span id="DeskTimer" title="Session time"></span> <select id="termdisplays" style="display:none" onchange="deskSetDisplay(event)" onkeypress="return false" onkeydown="return false"></select> <input id="DeskToolsButton" type="button" value="Tools" title="Toggle tools view" onkeypress="return false" onkeydown="return false" onclick="toggleDeskTools()"> <span id="DeskChatButton" class="deskarea" title="Open chat window to this computer"><img src='images/icon-chat.png' onclick="deviceChat()" height="16" width="16" style="padding-top:2px"></span> <span id="DeskNotifyButton" title="Display a notification on the remote computer"><img src='images/icon-notify.png' onclick="deviceToastFunction()" height="16" width="16" style="padding-top:2px"></span> <span id="DeskOpenWebButton" title="Open a web address on remote computer"><img src='images/icon-url2.png' onclick="deviceUrlFunction()" height="16" width="16" style="padding-top:2px"></span> </div> <div> <select id="deskkeys"> <option value="10">Ctrl+Alt+Del <option value="5">Win <option value="0">Win+Down <option value="1">Win+Up <option value="2">Win+L <option value="3">Win+M <option value="4">Shift+Win+M <option value="6">Win+R <option value="7">Alt-F4 <option value="8">Ctrl-W <option value="9">Alt-Tab <option value="11">Win+Left <option value="12">Win+Right </select> <input id="DeskWD" type="button" value="Send" onkeypress="return false" onkeydown="return false" onclick="deskSendKeys()"> <input id="DeskClip" style="" type="button" value="Clipboard" onkeypress="return false" onkeydown="return false" onclick="showDeskClip()"> <input id="DeskType" style="" type="button" value="Type" onkeypress="return false" onkeydown="return false" onclick="showDeskType()"> <label><span id="DeskControlSpan" title="Toggle mouse and keyboard input"><input id="DeskControl" type="checkbox" onkeypress="return false" onkeydown="return false" onclick="toggleKvmControl()">Input</span></label> </div> </div> </div> </div> <div id="p12" style="display:none"> <div id="p12title"> <div id="p12BackButton"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Terminal - <span id="p12deviceName"></span></h1> </div> <div id="p12warning" onclick="showFeaturesDlg()"> <div class="icon2"></div> <div class="warningbox">Intel® AMT Redirection port or KVM feature is disabled<span id="p12warninga">, click here to enable it.</span></div> </div> <div id="p12warning2" onclick="showPowerActionDlg()"> <div class="icon2"></div> <div class="warningbox">Remote computer is not powered on, click here to issue a power command.</div> </div> <div id="termTable" style="position:relative"> <table style="width:100%" cellpadding="0" cellspacing="0"> <tr> <td class="areaHead"> <div class="toright2"> <div id="termRecordIcon" class='deskareaicon' title="Server is recording this session" style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px;margin-left:5px"></div> <input id="termActionsBtn" type="button" title="Perform power actions on the device" onkeypress="return false" onkeydown="return false" value="Actions" onclick="deviceActionFunction()"> </div> <div> <input type="button" id="autoconnectbutton2" value="AutoConnect" onclick="autoConnectTerminal(event)" onkeypress="return false" onkeydown="return false" style="display:none"> <span id="connectbutton2span"><input type="button" id="connectbutton2" value="Connect" onclick="connectTerminal(event,1)" onkeypress="return false" onkeydown="return false" disabled="disabled"></span> <span id="connectbutton2hspan"> <input type="button" id="connectbutton2h" value="HW Connect" onclick="connectTerminal(event,2)" onkeypress="return false" onkeydown="return false" disabled="disabled"></span> <span id="disconnectbutton2span"> <input type="button" id="disconnectbutton2" value="Disconnect" onclick="connectTerminal(event,0)" onkeypress="return false" onkeydown="return false"></span> <span id="termstatus">Disconnected</span><span id="termtitle"></span> </div> </td> </tr> <tr> <td> <div class="areaProgress"><div id="termprogressbar" style=""></div></div> </td> </tr> <tr> <td id="termarea3x"> <pre id="Term"></pre> </td> </tr> <tr> <td class="areaFoot"> <div class="toright2"> <span id="TermTimer" title="Session time"></span> <span id="terminalSettingsButtons" style="display:none"> <input id="id_tcrbutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="CR+LF" title="Toggle what the return key will send" onclick="termToggleCr()"> <input id="id_tfxkeysbutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="Intel (F10 = ESC+[OM)" title="Toggle F1 to F10 keys emulation type" onclick="termToggleFx()"> <input id="id_ttypebutton" type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" value="Extended Ascii" title="Toggle terminal emulation type" onclick="termToggleType()"> </span> <span id="terminalSizeDropDown"> <select id="termSizeList" onkeypress="return false"><option value="1">80x25<option value="2">100x30<option value="3" selected="">Auto</select> </span> <select id="specialkeylist" onkeypress="return false"></select> <input id="specialkeylistinput" type="button" onkeypress="return false" class="bottombutton" value="Send" title="Send the selected special key" onclick="sendSpecialKey()"> </div> <div> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="ctrlcbutton" value="Ctl-C" onclick="termSendKey(3,'ctrlcbutton')"> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="ctrlxbutton" value="Ctl-X" onclick="termSendKey(24,'ctrlxbutton')"> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="escbutton" value="ESC" onclick="termSendKey(27,'escbutton')"> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="bsbutton" value="Backspace" onclick="termSendKey(8,'bsbutton')"> <input type="button" onkeypress="return false" onkeydown="return false" class="bottombutton" id="pastebutton" value="Paste" title="Paste text into the terminal" onclick="showTermPasteDialog()"> </div> </td> </tr> </table> <div id="p12TermConsoleMsg" style="display:none;cursor:pointer;position:absolute;left:30px;top:45px;color:yellow;background-color:rgba(0,0,0,0.6);padding:10px;border-radius:5px" onclick="p12clearConsoleMsg()"></div> </div> </div> <div id="p13" style="display:none"> <div id="p13title"> <div id="p13BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Files - <span id="p13deviceName"></span></h1> </div> <table id="p13toolbar" cellpadding="0" cellspacing="0"> <tr> <td class="areaHead"> <div class="toright2"> <input id="filesActionsBtn" type="button" title="Perform power actions on the device" value="Actions" onclick="deviceActionFunction()"> <div id="filesRecordIcon" class='deskareaicon' title="Server is recording this session" style="display:none;background-color:red;width:12px;height:12px;border-radius:6px;margin-top:5px;margin-left:5px"></div> </div> <div> <input id="p13AutoConnect" value="AutoConnect" onclick="autoConnectFiles(event)" type="button" style="display:none"> <input id="p13Connect" value="Connect" onclick="connectFiles(event)" type="button"> <span id="p13Status">Disconnected</span> </div> </td> </tr> <tr> <td class="areaHead2" valign="bottom"> <div id="p13rightOfButtons" class="toright2"></div> <div> <input type="button" id="p13FolderUp" disabled="disabled" onclick="p13folderup()" value="Up"> <input type="button" id="p13SelectAllButton" disabled="disabled" onclick="p13selectallfile()" value="Select All"> <input type="button" id="p13RenameFileButton" disabled="disabled" value="Rename" onclick="p13renamefile()"> <input type="button" id="p13DeleteFileButton" disabled="disabled" value="Delete" onclick="p13deletefile()"> <input type="button" id="p13NewFolderButton" disabled="disabled" value="New Folder" onclick="p13createfolder()"> <input type="button" id="p13UploadButton" disabled="disabled" value="Upload" onclick="p13uploadFile()"> <input type="button" id="p13CutButton" disabled="disabled" value="Cut" onclick="p13copyFile(1)"> <input type="button" id="p13CopyButton" disabled="disabled" value="Copy" onclick="p13copyFile(0)"> <input type="button" id="p13PasteButton" disabled="disabled" value="Paste" onclick="p13pasteFile()"> <input type="button" id="p13RefreshButton" disabled="disabled" value="Refresh" onclick="p13folderup(9999)"> </div> </td> </tr> <tr> <td class="areaHead3"> <div class="toright2"> <select id="p13sortdropdown" onchange="p13updateFiles()"> <option value="1" selected="selected">Sort by name <option value="2">Sort by size <option value="3">Sort by date <option value="4">Descend by name <option value="5">Descend by size <option value="6">Descend by date </select> </div> <div> <span id="p13currentpath"></span></div> </td> </tr> </table> <div id="p13FilesConsoleMsg" style="display:none;cursor:pointer;position:absolute;left:30px;top:165px;color:yellow;background-color:rgba(0,0,0,0.6);padding:10px;border-radius:5px" onclick="p13clearConsoleMsg()"></div> <div id="p13filetable" style=""> <div id="p13bigok" style="display:none"><b>✓</b></div> <div id="p13bigfail" style="display:none"><b>✗</b></div> <span id="p13files"></span> </div> <table id="p13toolbarBottom" cellpadding="0" cellspacing="0"> <tr><td class="style6"> <span id="p13bottomstatus"></span></td></tr> </table> </div> <div id="p14" style="display:none"> <div id="p14title"> <div id="p14BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <div id="devListToolbarViewIcons"><div class="viewSelector" onclick="deskToggleFull(event)" title="Full Screen. Hold shift to browser full screen."><div class="viewSelector5"></div></div></div> <h1>Intel® AMT - <span id="p14deviceName"></span></h1> </div> <iframe id="p14iframe" src="{{{domainurl}}}commander.htm"></iframe> </div> <div id="p15" style="display:none"> <div id="p15title"> <div id="p15BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1><span id="p15deviceName"></span></h1> </div> <table id="consoleTable" cellpadding="0" cellspacing="0"> <tr> <td class="areaHead"> <div class="toright2"> <div id="p15coreName" title="Information about current core running on this agent"></div> <input type="button" id="p15uploadCore" value="Agent Action" onclick="p15uploadCore(event)" title="Change the agent Java Script code module"> <img onclick="p15downloadConsoleText()" style="cursor:pointer;margin-top:6px" title="Download console text" src="images/link4.png"> </div> <div id="p15statetext"></div> </td> </tr> <tr> <td> <div class="areaProgress"><div id="consoleprogressbar" style=""></div></div> </td> </tr> <tr> <td id="p15agentConsole"> <pre id="p15agentConsoleText"></pre> </td> </tr> <tr> <td class="areaFoot"> <table style="width:100%"> <tr> <td style="width:99%"> <input id="p15consoleText" style="width:100%" onkeyup="p15consoleSend(event)" onfocus="onConsoleFocus(1)" onblur="onConsoleFocus(0)"> </td> <td> </td> <td style="width:1%"><input id="id_p15consoleClear" type="button" class="bottombutton" value="Clear" onclick="p15consoleClear()"></td> </tr> </table> </td> </tr> </table> </div> <div id="p16" style="display:none"> <div id="p16title"> <div id="p16BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Events - <span id="p16deviceName"></span></h1> </div> <table class="pTable"> <tr> <td class="h1"></td> <td class="auto-style1"> Show <select id="p16limitdropdown" onchange="refreshDeviceEvents()"> <option value="60">Last 60 <option value="120">Last 120 <option value="250">Last 250 <option value="500">Last 500 <option value="1000">Last 1000 </select> <a href="#" onclick="p3showDownloadEventsDialog(1)"><img src="images/link4.png" height="10" width="10" title="Download Events" style="cursor:pointer"></a> </td> <td class="h2"></td> </tr> </table> <div id="p16events"></div> </div> <div id="p17" style="display:none"> <div id="p17title"> <div id="p17BackButton" style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Details - <span id="p17deviceName"></span></h1> </div> <div id="p17info"></div> </div> <div id="p20" style="display:none"> <picture id="MainMeshImage" style="border-width:0px;height:200px;width:200px;float:right"> <source type="image/webp" width="200" height="200" srcset="images/webp/mesh-256.webp"> <img alt="" width="200" height="200" src="images/mesh-256.png"> </source></picture> <div style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>General - <span id="p20meshName"></span></h1> <p id="p20info"> </div> <div id="p30" style="display:none"> <table style="width:100%" cellpadding="0" cellspacing="0"> <tr> <td style="width:auto" valign="top"> <div id="p30title"> <div style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>General - <span id="p30userName"></span></h1> </div> <div id="p30html"></div> </td> <td style="width:20px"></td> <td style="width:200px"> <picture id="MainUserImage" style="border-width:0px;height:200px;width:200px;float:right"> <source type="image/webp" width="200" height="200" srcset="images/webp/user-256.webp"> <img alt="" width="200" height="200" src="images/user-256.png"> </source></picture> <div style="width:100%;text-align:center"><strong><span id="MainUserState"></span></strong></div> </td> </tr> </table><br> <div id="p30html2"></div> <div id="p30html3"></div> </div> <div id="p31" style="display:none"> <div style="float:left"><div class="backButton" tabindex="0" onclick="goBack()" title="Back" onkeypress="if (event.key == 'Enter') goBack()"><div class="backButtonEx"></div></div></div> <h1>Events - <span id="p31userName"></span></h1> <table class="pTable"> <tr> <td class="h1"></td> <td class="auto-style1"> Show <select id="p31limitdropdown" onchange="refreshUsersEvents()"> <option value="60">Last 60 <option value="120">Last 120 <option value="250">Last 250 <option value="500">Last 500 <option value="1000">Last 1000 </select> <a href="#" onclick="p3showDownloadEventsDialog(3)"><img src="images/link4.png" height="10" width="10" title="Download Events" style="cursor:pointer"></a> </td> <td class="h2"></td> </tr> </table> <div id="p31events" style=""></div> </div> <div id="p40" style="display:none"> <h1>My Server Stats</h1> <div class="areaHead"> <div class="toright2"> <select id="p40type" onchange="updateServerTimelineStats()"> <option value="0">Connections <option value="1">Memory </select> <select id="p40time" onchange="updateServerTimelineHours()"> <option value="3">Last 3 hours <option value="8">Last 8 hours <option value="24">Last day <option value="168">Last week <option value="720">Last 30 days </select> <img src="images/link4.png" height="10" width="10" title="Download data points (.csv)" style="cursor:pointer" onclick="p40downloadEvents()"> </div> <div> <input value="Refresh" type="button" onclick="refreshServerTimelineStats()"> <label><input id="p40log" type="checkbox" onclick="updateServerTimelineHours()">Log-X</label> </div> </div> <canvas id="serverMainStats" style=""></canvas> </div> <div id="p41" style="display:none"> <h1>My Server Tracing</h1> <div class="areaHead"> <div class="toright2"> Show <select id="p41limitdropdown" onchange="displayServerTrace()"> <option value="100">Last 100 <option value="250">Last 250 <option value="500">Last 500 <option value="1000">Last 1000 </select> <input value="Clear" type="button" onclick="clearServerTracing()"> <img src="images/link4.png" height="10" width="10" title="Download trace (.csv)" style="cursor:pointer" onclick="p41downloadServerTrace()"> </div> <div> <input value="Tracing" type="button" onclick="setServerTracing()"> <span id="p41traceStatus">None</span> </div> </div> <div id="p41events" style=""></div> </div> <br id="column_l_bottomgap"> </div> <div id="footer"> <div class="footer1">{{{footer}}}</div> <div class="footer2"> <a id="verifyEmailId2" style="display:none" href="#" onclick="account_showVerifyEmail()">Verify Email</a> <a href="terms">Terms & Privacy</a> </div> </div> <div id="dialog" class="noselect" style="display:none"> <div id="dialogHeader"> <div tabindex="0" id="id_dialogclose" onclick="setDialogMode()" onkeypress="if (event.key == 'Enter') setDialogMode()">✖</div> <div id="id_dialogtitle"></div> </div> <div id="dialogBody"> <div id="dialog1"> <div id="id_dialogMessage" style=""></div> </div> <div id="dialog2" style=""> <div id="id_dialogOptions"></div> </div> <div id="dialog3" style=""> <div id="d3upload"> <div>File Selection</div> <select id="d3uploadMode" onchange="d3modechange()"> <option value="1">Local file upload <option value="2">Server file selection </select> </div> <div id="d3localmode" style="display:none"> <div>Upload File</div> <form id="d3localmodeform" method="post" enctype="multipart/form-data" action="uploadfile.ashx" target="fileUploadFrame"> <input type="text" id="d3attrib" name="attrib" style="display:none"> <input type="file" id="d3localFile" name="files" onchange="d3setActions()"> <input type="submit" id="d3submit" style="display:none"> </form> </div> <div id="d3servermode"> <div id="d3serveraction" valign="bottom"> <input type="button" id="p3FolderUp" disabled="disabled" onclick="d3folderup()" value="Up"> </div> <div id="d3serverfiles"></div> </div> </div> <div id="dialog7" style=""> <div id="d7meshkvm"> <h4>Agent Remote Desktop</h4> <div> <div>Quality</div> <select id="d7bitmapquality" dir="rtl"></select> </div> <div> <div>Scaling</div> <select id="d7bitmapscaling" style="" dir="rtl"> <option selected="selected" value="1024">100% <option value="896">87.5% <option value="768">75% <option value="640">62.5% <option value="512">50% <option value="384">37.5% <option value="256">25% <option value="128">12.5% </select> </div> <div> <div>Frame rate</div> <select id="d7framelimiter" dir="rtl"> <option selected="selected" value="50">Fast <option value="100">Medium <option value="400">Slow <option value="1000">Very slow </select> </div> </div> <div id="d7amtkvm"> <h4>Intel® AMT Hardware KVM</h4> <div> <div>Image Encoding</div> <select id="d7desktopmode"> <option value="1">RLE8, Fastest <option value="2">RLE16, Recommended <option value="3">RAW8, Slow <option value="4">RAW16, Very Slow </select> </div> <div> <div>Other Settings</div> <div id="d7otherset" style="display:block"> <label style="display:block"><input type="checkbox" id="d7showfocus">Show Focus Tool</label> <label style="display:block"><input type="checkbox" id="d7showcursor">Show Local Mouse Cursor</label> <label style="display:block"><input type="checkbox" id="d7localKeyMap">Local Keyboard Map</label> </div> </div> </div> </div> </div> <div id="idx_dlgButtonBar"> <input id="idx_dlgCancelButton" type="button" value="Cancel" style="" onclick="dialogclose(0)"> <input id="idx_dlgOkButton" type="button" value="OK" style="" onclick="dialogclose(1)"> <div><input id="idx_dlgDeleteButton" type="button" value="Delete" style="display:none" onclick="dialogclose(2)"></div> </div> </div> <iframe name="fileUploadFrame" style="display:none"></iframe> <form style="display:none" method="post" action="uploadfile.ashx" enctype="multipart/form-data" target="fileUploadFrame"><input id="p5fileDragName" name="name"><input id="p5fileDragSize" name="size"><input id="p5fileDragType" name="type"><input id="p5fileDragData" name="data"><input id="p5fileDragLink" name="link"><input type="submit" id="p5loginSubmit2" style="display:none"></form> <form style="display:none" method="post" action="uploadnodefile.ashx" enctype="multipart/form-data" target="fileUploadFrame"><input id="p13fileDragName" name="name"><input id="p13fileDragSize" name="size"><input id="p13fileDragType" name="type"><input id="p13fileDragData" name="data"><input id="p13fileDragLink" name="link"><input type="submit" id="p13loginSubmit2" style="display:none"></form> <audio id="chimes"><source src="sounds/chimes.mp3" type="audio/mp3"></source></audio> </div> <script>if(!String.prototype.startsWith){String.prototype.startsWith=function(a){return this.lastIndexOf(a,0)===0}}if(!String.prototype.endsWith){String.prototype.endsWith=function(a){return this.indexOf(a,this.length-a.length)!==-1}}function Q(a){return document.getElementById(a)}function QS(a){try{return Q(a).style}catch(a){}}function QE(a,b){try{Q(a).disabled=!b}catch(a){}}function QV(a,b){try{QS(a).display=(b?"":"none")}catch(a){}}function QA(a,b){Q(a).innerHTML+=b}function QH(a,b){Q(a).innerHTML=b}function QC(a){try{return Q(a).classList}catch(a){}}function inputBoxFocus(b){Q(b).focus();var a=Q(b).value;Q(b).value="";Q(b).value=a}function ReadShort(b,a){return(b.charCodeAt(a)<<8)+b.charCodeAt(a+1)}function ReadShortX(b,a){return(b.charCodeAt(a+1)<<8)+b.charCodeAt(a)}function ReadInt(b,a){return(b.charCodeAt(a)*16777216)+(b.charCodeAt(a+1)<<16)+(b.charCodeAt(a+2)<<8)+b.charCodeAt(a+3)}function ReadSInt(b,a){return(b.charCodeAt(a)<<24)+(b.charCodeAt(a+1)<<16)+(b.charCodeAt(a+2)<<8)+b.charCodeAt(a+3)}function ReadIntX(b,a){return(b.charCodeAt(a+3)*16777216)+(b.charCodeAt(a+2)<<16)+(b.charCodeAt(a+1)<<8)+b.charCodeAt(a)}function ShortToStr(a){return String.fromCharCode((a>>8)&255,a&255)}function ShortToStrX(a){return String.fromCharCode(a&255,(a>>8)&255)}function IntToStr(a){return String.fromCharCode((a>>24)&255,(a>>16)&255,(a>>8)&255,a&255)}function IntToStrX(a){return String.fromCharCode(a&255,(a>>8)&255,(a>>16)&255,(a>>24)&255)}function MakeToArray(a){if(!a||a==null||typeof a=="object"){return a}return[a]}function SplitArray(a){return a.split(",")}function Clone(a){return JSON.parse(JSON.stringify(a))}function EscapeHtml(a){if(typeof a=="string"){return a.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,""").replace(/'/g,"'")}if(typeof a=="boolean"){return a}if(typeof a=="number"){return a}}function EscapeHtmlBreaks(a){if(typeof a=="string"){return a.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/"/g,""").replace(/'/g,"'").replace(/\r/g,"<br />").replace(/\n/g,"").replace(/\t/g," ")}if(typeof a=="boolean"){return a}if(typeof a=="number"){return a}}function ArrayElementMove(a,b,c){a.splice(c,0,a.splice(b,1)[0])}function ObjectToStringEx(e,a){var d="";if(e!=0&&(!e||e==null)){return"(Null)"}if(e instanceof Array){for(var b in e){d+="<br />"+gap(a)+"Item #"+b+": "+ObjectToStringEx(e[b],a+1)}}else{if(e instanceof Object){for(var b in e){d+="<br />"+gap(a)+b+" = "+ObjectToStringEx(e[b],a+1)}}else{d+=EscapeHtml(e)}}return d}function ObjectToStringEx2(e,a){var d="";if(e!=0&&(!e||e==null)){return"(Null)"}if(e instanceof Array){for(var b in e){d+="\r\n"+gap2(a)+"Item #"+b+": "+ObjectToStringEx2(e[b],a+1)}}else{if(e instanceof Object){for(var b in e){d+="\r\n"+gap2(a)+b+" = "+ObjectToStringEx2(e[b],a+1)}}else{d+=EscapeHtml(e)}}return d}function gap(a){var d="";for(var b=0;b<(a*4);b++){d+=" "}return d}function gap2(a){var d="";for(var b=0;b<(a*4);b++){d+=" "}return d}function ObjectToString(a){return ObjectToStringEx(a,0)}function ObjectToString2(a){return ObjectToStringEx2(a,0)}function hex2rstr(a){if(typeof a!="string"||a.length==0){return""}var c="",b=(""+a).match(/../g),e;while(e=b.shift()){c+=String.fromCharCode("0x"+e)}return c}function char2hex(a){return(a+256).toString(16).substr(-2).toUpperCase()}function rstr2hex(b){var c="",a;for(a=0;a<b.length;a++){c+=char2hex(b.charCodeAt(a))}return c}function encode_utf8(a){return unescape(encodeURIComponent(a))}function decode_utf8(a){return decodeURIComponent(escape(a))}function data2blob(c){var b=new Array(c.length);for(var d=0;d<c.length;d++){b[d]=c.charCodeAt(d)}var a=new Blob([new Uint8Array(b)]);return a}function random(a){return Math.floor(Math.random()*a)}function trademarks(a){return a.replace(/\(R\)/g,"®").replace(/\(TM\)/g,"™")}function zeroPad(b,a){if(a==null){a=2}var d="00000000"+b;return d.substr(d.length-a)}var MeshServerCreateControl=function(b,a){var c={};c.State=0;c.connectstate=0;c.pingTimer=null;c.authCookie=a;c.trace=false;c.xxStateChange=function(e,d){if(c.State==e){return}var g=c.State;c.State=e;if(c.onStateChanged){c.onStateChanged(c,c.State,g,d)}};c.Start=function(){if(c.connectstate!=0){return}c.connectstate=0;var d=window.location.protocol.replace("http","ws")+"//"+window.location.host+b+"control.ashx";if(c.authCookie&&(c.authCookie!="")){d+="?auth="+c.authCookie}c.socket=new WebSocket(d);c.socket.onopen=function(g){c.connectstate=1};c.socket.onmessage=c.xxOnMessage;c.socket.onclose=function(g){c.Stop(g.code)};c.xxStateChange(1,0);if(c.pingTimer!=null){clearInterval(c.pingTimer)}c.pingTimer=setInterval(function(){c.send({action:"ping"})},29000)};c.Stop=function(d){c.connectstate=0;if(c.socket){c.socket.close();delete c.socket}if(c.pingTimer!=null){clearInterval(c.pingTimer);c.pingTimer=null}c.xxStateChange(0,d)};c.xxOnMessage=function(d){if(c.State==1){c.xxStateChange(2)}var g;try{g=JSON.parse(d.data)}catch(d){return}if((typeof g!="object")||(g.action=="pong")){return}if(g.action=="close"){if(g.msg){console.log(g.msg)}c.Stop(g.cause);return}if(c.trace){console.log("RECV",g)}if(c.onMessage){c.onMessage(c,g)}};c.send=function(d){if(c.socket!=null&&c.connectstate==1){if(c.trace){console.log("SEND",d)}c.socket.send(JSON.stringify(d))}};return c};function AmtStackCreateService(t){var s=new Object();s.wsman=t;s.pfx=["http://intel.com/wbem/wscim/1/amt-schema/1/","http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/","http://intel.com/wbem/wscim/1/ips-schema/1/"];s.PendingEnums=[];s.PendingBatchOperations=0;s.ActiveEnumsCount=0;s.MaxActiveEnumsCount=1;s.onProcessChanged=null;var n=0;var m=0;s.GetPendingActions=function(){return(s.PendingEnums.length*2)+(s.ActiveEnumsCount)+s.wsman.comm.PendingAjax.length+s.wsman.comm.ActiveAjaxCount+s.PendingBatchOperations};function r(){var u=s.GetPendingActions();if(n<u){n=u}if(s.onProcessChanged!=null&&m!=u){m=u;s.onProcessChanged(u,n)}if(u==0){n=0}}s.Subscribe=function(w,v,C,u,B,z,A,x,D,y){s.wsman.ExecSubscribe(s.CompleteName(w),v,C,function(G,F,E,H){r();u(s,w,E,H,B)},0,z,A,x,D,y);r()};s.UnSubscribe=function(v,u,y,w,x){s.wsman.ExecUnSubscribe(s.CompleteName(v),function(B,A,z,C){r();u(s,v,z,C,y)},0,w,x);r()};s.Get=function(v,u,x,w){s.wsman.ExecGet(s.CompleteName(v),function(A,z,y,B){r();u(s,v,y,B,x)},0,w);r()};s.Put=function(v,x,u,z,w,y){s.wsman.ExecPut(s.CompleteName(v),x,function(C,B,A,D){r();u(s,v,A,D,z)},0,w,y);r()};s.Create=function(v,x,u,y,w){s.wsman.ExecCreate(s.CompleteName(v),x,function(B,A,z,C){r();u(s,v,z,C,y)},0,w);r()};s.Delete=function(v,x,u,y,w){s.wsman.ExecDelete(s.CompleteName(v),x,function(B,A,z,C){r();u(s,v,z,C,y)},0,w);r()};s.Exec=function(x,w,u,v,A,y,z){s.wsman.ExecMethod(s.CompleteName(x),w,u,function(D,C,B,E){r();v(s,x,s.CompleteExecResponse(B),E,A)},0,y,z);r()};s.ExecWithXml=function(x,w,u,v,A,y,z){s.wsman.ExecMethodXml(s.CompleteName(x),w,execArgumentsToXml(u),function(D,C,B,E){r();v(s,x,s.CompleteExecResponse(B),E,A)},0,y,z);r()};s.Enum=function(v,u,x,w){if(s.ActiveEnumsCount<s.MaxActiveEnumsCount){s.ActiveEnumsCount++;s.wsman.ExecEnum(s.CompleteName(v),function(B,z,y,C,A){r();d(v,y,u,z,C,A)},x,w)}else{s.PendingEnums.push([v,u,x,w])}r()};function d(w,y,u,z,A,B,x){if(A!=200){u(s,w,null,A,B);c(1);return}if(y==null||y.Header.Method!="EnumerateResponse"||!y.Body.EnumerationContext){u(s,w,null,603,B);c(1);return}var v=y.Body.EnumerationContext;s.wsman.ExecPull(z,v,function(E,D,C,F){b(w,C,u,D,[],F,B,x)})}function b(z,B,u,C,x,D,E,A){if(D!=200){u(s,z,null,D,E);c(1);return}if(B==null||B.Header.Method!="PullResponse"){u(s,z,null,604,E);c(1);return}for(var w in B.Body.Items){if(B.Body.Items[w] instanceof Array){for(var y in B.Body.Items[w]){x.push(B.Body.Items[w][y])}}else{x.push(B.Body.Items[w])}}if(B.Body.EnumerationContext){var v=B.Body.EnumerationContext;s.wsman.ExecPull(C,v,function(H,G,F,I){b(z,F,u,G,x,I,E,1)})}else{c(1);u(s,z,x,D,E);r()}}function c(u){s.ActiveEnumsCount-=u;if(s.ActiveEnumsCount>=s.MaxActiveEnumsCount||s.PendingEnums.length==0){return}var v=s.PendingEnums.shift();s.Enum(v[0],v[1],v[2]);c(0)}s.BatchEnum=function(u,x,v,z,w,y){s.PendingBatchOperations+=(x.length*2);a(u,Clone(x),v,z,{},w,y);r()};function a(u,z,v,C,B,w,A){s.PendingBatchOperations-=2;var y=z.shift(),x=s.Enum;if(y[0]=="*"){x=s.Get;y=y.substring(1)}x(y,function(F,D,E,G,H){H[2][D]={response:(E==null?null:E.Body),responses:E,status:G};if(H[1].length==0||G==401||(w!=true&&G!=200&&G!=400)){s.PendingBatchOperations-=(z.length*2);r();v(s,u,H[2],G,C)}else{r();a(u,z,v,C,H[2],A)}},[u,z,B],A);r()}s.BatchGet=function(u,w,v,y,x){h({name:u,names:w,callback:v,current:0,responses:{},tag:y,pri:x});r()};function h(u){if(u.names.length<=u.current){u.callback(s,u.name,u.responses,200,u.tag)}else{s.wsman.ExecGet(s.CompleteName(u.names[u.current]),function(x,w,v,y){g(u,v,y)},u.pri);u.current++}r()}function g(u,v,w){if(v==null||w!=200){u.callback(s,u.name,null,w,u.tag)}else{u.responses[v.Header.Method]=v;h(u)}}s.CompleteName=function(u){if(u.indexOf("AMT_")==0){return s.pfx[0]+u}if(u.indexOf("CIM_")==0){return s.pfx[1]+u}if(u.indexOf("IPS_")==0){return s.pfx[2]+u}};s.CompleteExecResponse=function(u){if(u&&u!=null&&u.Body&&u.Body.ReturnValue){u.Body.ReturnValueStr=s.AmtStatusToStr(u.Body.ReturnValue)}return u};s.RequestPowerStateChange=function(v,u){s.CIM_PowerManagementService_RequestPowerStateChange(v,'<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ComputerSystem</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="CreationClassName">CIM_ComputerSystem</Selector><Selector Name="Name">ManagedSystem</Selector></SelectorSet></ReferenceParameters>',null,null,u)};s.SetBootConfigRole=function(v,u){s.CIM_BootService_SetBootConfigRole('<Address xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing">http://schemas.xmlsoap.org/ws/2004/08/addressing</Address><ReferenceParameters xmlns="http://schemas.xmlsoap.org/ws/2004/08/addressing"><ResourceURI xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd">http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_BootConfigSetting</ResourceURI><SelectorSet xmlns="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd"><Selector Name="InstanceID">Intel(r) AMT: Boot Configuration 0</Selector></SelectorSet></ReferenceParameters>',v,u)};s.CancelAllQueries=function(u){s.wsman.CancelAllQueries(u)};s.AMT_AgentPresenceWatchdog_RegisterAgent=function(u){s.Exec("AMT_AgentPresenceWatchdog","RegisterAgent",{},u)};s.AMT_AgentPresenceWatchdog_AssertPresence=function(v,u){s.Exec("AMT_AgentPresenceWatchdog","AssertPresence",{SequenceNumber:v},u)};s.AMT_AgentPresenceWatchdog_AssertShutdown=function(v,u){s.Exec("AMT_AgentPresenceWatchdog","AssertShutdown",{SequenceNumber:v},u)};s.AMT_AgentPresenceWatchdog_AddAction=function(z,y,x,v,u,w,C,A,B){s.Exec("AMT_AgentPresenceWatchdog","AddAction",{OldState:z,NewState:y,EventOnTransition:x,ActionSd:v,ActionEac:u},w,C,A,B)};s.AMT_AgentPresenceWatchdog_DeleteAllActions=function(u,x,v,w){s.Exec("AMT_AgentPresenceWatchdog","DeleteAllActions",{},u,x,v,w)};s.AMT_AgentPresenceWatchdogAction_GetActionEac=function(u){s.Exec("AMT_AgentPresenceWatchdogAction","GetActionEac",{},u)};s.AMT_AgentPresenceWatchdogVA_RegisterAgent=function(u){s.Exec("AMT_AgentPresenceWatchdogVA","RegisterAgent",{},u)};s.AMT_AgentPresenceWatchdogVA_AssertPresence=function(v,u){s.Exec("AMT_AgentPresenceWatchdogVA","AssertPresence",{SequenceNumber:v},u)};s.AMT_AgentPresenceWatchdogVA_AssertShutdown=function(v,u){s.Exec("AMT_AgentPresenceWatchdogVA","AssertShutdown",{SequenceNumber:v},u)};s.AMT_AgentPresenceWatchdogVA_AddAction=function(z,y,x,v,u,w){s.Exec("AMT_AgentPresenceWatchdogVA","AddAction",{OldState:z,NewState:y,EventOnTransition:x,ActionSd:v,ActionEac:u},w)};s.AMT_AgentPresenceWatchdogVA_DeleteAllActions=function(u,v){s.Exec("AMT_AgentPresenceWatchdogVA","DeleteAllActions",{_method_dummy:u},v)};s.AMT_AuditLog_ClearLog=function(u){s.Exec("AMT_AuditLog","ClearLog",{},u)};s.AMT_AuditLog_RequestStateChange=function(v,w,u){s.Exec("AMT_AuditLog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_AuditLog_ReadRecords=function(v,u,w){s.Exec("AMT_AuditLog","ReadRecords",{StartIndex:v},u,w)};s.AMT_AuditLog_SetAuditLock=function(x,v,w,u){s.Exec("AMT_AuditLog","SetAuditLock",{LockTimeoutInSeconds:x,Flag:v,Handle:w},u)};s.AMT_AuditLog_ExportAuditLogSignature=function(v,u){s.Exec("AMT_AuditLog","ExportAuditLogSignature",{SigningMechanism:v},u)};s.AMT_AuditLog_SetSigningKeyMaterial=function(y,x,w,v,u){s.Exec("AMT_AuditLog","SetSigningKeyMaterial",{SigningMechanismType:y,SigningKey:x,LengthOfCertificates:w,Certificates:v},u)};s.AMT_AuditPolicyRule_SetAuditPolicy=function(w,u,x,y,v){s.Exec("AMT_AuditPolicyRule","SetAuditPolicy",{Enable:w,AuditedAppID:u,EventID:x,PolicyType:y},v)};s.AMT_AuditPolicyRule_SetAuditPolicyBulk=function(w,u,x,y,v){s.Exec("AMT_AuditPolicyRule","SetAuditPolicyBulk",{Enable:w,AuditedAppID:u,EventID:x,PolicyType:y},v)};s.AMT_AuthorizationService_AddUserAclEntryEx=function(x,w,y,u,z,v){s.Exec("AMT_AuthorizationService","AddUserAclEntryEx",{DigestUsername:x,DigestPassword:w,KerberosUserSid:y,AccessPermission:u,Realms:z},v)};s.AMT_AuthorizationService_EnumerateUserAclEntries=function(v,u){s.Exec("AMT_AuthorizationService","EnumerateUserAclEntries",{StartIndex:v},u)};s.AMT_AuthorizationService_GetUserAclEntryEx=function(v,u,w){s.Exec("AMT_AuthorizationService","GetUserAclEntryEx",{Handle:v},u,w)};s.AMT_AuthorizationService_UpdateUserAclEntryEx=function(y,x,w,z,u,A,v){s.Exec("AMT_AuthorizationService","UpdateUserAclEntryEx",{Handle:y,DigestUsername:x,DigestPassword:w,KerberosUserSid:z,AccessPermission:u,Realms:A},v)};s.AMT_AuthorizationService_RemoveUserAclEntry=function(v,u){s.Exec("AMT_AuthorizationService","RemoveUserAclEntry",{Handle:v},u)};s.AMT_AuthorizationService_SetAdminAclEntryEx=function(w,v,u){s.Exec("AMT_AuthorizationService","SetAdminAclEntryEx",{Username:w,DigestPassword:v},u)};s.AMT_AuthorizationService_GetAdminAclEntry=function(u){s.Exec("AMT_AuthorizationService","GetAdminAclEntry",{},u)};s.AMT_AuthorizationService_GetAdminAclEntryStatus=function(u){s.Exec("AMT_AuthorizationService","GetAdminAclEntryStatus",{},u)};s.AMT_AuthorizationService_GetAdminNetAclEntryStatus=function(u){s.Exec("AMT_AuthorizationService","GetAdminNetAclEntryStatus",{},u)};s.AMT_AuthorizationService_SetAclEnabledState=function(w,v,u,x){s.Exec("AMT_AuthorizationService","SetAclEnabledState",{Handle:w,Enabled:v},u,x)};s.AMT_AuthorizationService_GetAclEnabledState=function(v,u,w){s.Exec("AMT_AuthorizationService","GetAclEnabledState",{Handle:v},u,w)};s.AMT_EndpointAccessControlService_RequestStateChange=function(v,w,u){s.Exec("AMT_EndpointAccessControlService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_EndpointAccessControlService_GetPosture=function(v,u){s.Exec("AMT_EndpointAccessControlService","GetPosture",{PostureType:v},u)};s.AMT_EndpointAccessControlService_GetPostureHash=function(v,u){s.Exec("AMT_EndpointAccessControlService","GetPostureHash",{PostureType:v},u)};s.AMT_EndpointAccessControlService_UpdatePostureState=function(v,u){s.Exec("AMT_EndpointAccessControlService","UpdatePostureState",{UpdateType:v},u)};s.AMT_EndpointAccessControlService_GetEacOptions=function(u){s.Exec("AMT_EndpointAccessControlService","GetEacOptions",{},u)};s.AMT_EndpointAccessControlService_SetEacOptions=function(v,w,u){s.Exec("AMT_EndpointAccessControlService","SetEacOptions",{EacVendors:v,PostureHashAlgorithm:w},u)};s.AMT_EnvironmentDetectionSettingData_SetSystemDefensePolicy=function(v,u){s.Exec("AMT_EnvironmentDetectionSettingData","SetSystemDefensePolicy",{Policy:v},u)};s.AMT_EnvironmentDetectionSettingData_EnableVpnRouting=function(v,u){s.Exec("AMT_EnvironmentDetectionSettingData","EnableVpnRouting",{Enable:v},u)};s.AMT_EthernetPortSettings_SetLinkPreference=function(v,w,u){s.Exec("AMT_EthernetPortSettings","SetLinkPreference",{LinkPreference:v,Timeout:w},u)};s.AMT_HeuristicPacketFilterStatistics_ResetSelectedStats=function(v,u){s.Exec("AMT_HeuristicPacketFilterStatistics","ResetSelectedStats",{SelectedStatistics:v},u)};s.AMT_KerberosSettingData_GetCredentialCacheState=function(u){s.Exec("AMT_KerberosSettingData","GetCredentialCacheState",{},u)};s.AMT_KerberosSettingData_SetCredentialCacheState=function(v,u){s.Exec("AMT_KerberosSettingData","SetCredentialCacheState",{Enable:v},u)};s.AMT_MessageLog_CancelIteration=function(v,u){s.Exec("AMT_MessageLog","CancelIteration",{IterationIdentifier:v},u)};s.AMT_MessageLog_RequestStateChange=function(v,w,u){s.Exec("AMT_MessageLog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_MessageLog_ClearLog=function(u){s.Exec("AMT_MessageLog","ClearLog",{},u)};s.AMT_MessageLog_GetRecords=function(v,w,u,x){s.Exec("AMT_MessageLog","GetRecords",{IterationIdentifier:v,MaxReadRecords:w},u,x)};s.AMT_MessageLog_GetRecord=function(v,w,u){s.Exec("AMT_MessageLog","GetRecord",{IterationIdentifier:v,PositionToNext:w},u)};s.AMT_MessageLog_PositionAtRecord=function(v,w,x,u){s.Exec("AMT_MessageLog","PositionAtRecord",{IterationIdentifier:v,MoveAbsolute:w,RecordNumber:x},u)};s.AMT_MessageLog_PositionToFirstRecord=function(u,v){s.Exec("AMT_MessageLog","PositionToFirstRecord",{},u,v)};s.AMT_MessageLog_FreezeLog=function(v,u){s.Exec("AMT_MessageLog","FreezeLog",{Freeze:v},u)};s.AMT_PublicKeyManagementService_AddCRL=function(w,v,u){s.Exec("AMT_PublicKeyManagementService","AddCRL",{Url:w,SerialNumbers:v},u)};s.AMT_PublicKeyManagementService_ResetCRLList=function(u,v){s.Exec("AMT_PublicKeyManagementService","ResetCRLList",{_method_dummy:u},v)};s.AMT_PublicKeyManagementService_AddCertificate=function(v,u){s.Exec("AMT_PublicKeyManagementService","AddCertificate",{CertificateBlob:v},u)};s.AMT_PublicKeyManagementService_AddTrustedRootCertificate=function(v,u){s.Exec("AMT_PublicKeyManagementService","AddTrustedRootCertificate",{CertificateBlob:v},u)};s.AMT_PublicKeyManagementService_AddKey=function(v,u){s.Exec("AMT_PublicKeyManagementService","AddKey",{KeyBlob:v},u)};s.AMT_PublicKeyManagementService_GeneratePKCS10Request=function(w,v,x,u){s.Exec("AMT_PublicKeyManagementService","GeneratePKCS10Request",{KeyPair:w,DNName:v,Usage:x},u)};s.AMT_PublicKeyManagementService_GeneratePKCS10RequestEx=function(v,x,w,u){s.Exec("AMT_PublicKeyManagementService","GeneratePKCS10RequestEx",{KeyPair:v,SigningAlgorithm:x,NullSignedCertificateRequest:w},u)};s.AMT_PublicKeyManagementService_GenerateKeyPair=function(v,w,u){s.Exec("AMT_PublicKeyManagementService","GenerateKeyPair",{KeyAlgorithm:v,KeyLength:w},u)};s.AMT_RedirectionService_RequestStateChange=function(v,u){s.Exec("AMT_RedirectionService","RequestStateChange",{RequestedState:v},u)};s.AMT_RedirectionService_TerminateSession=function(v,u){s.Exec("AMT_RedirectionService","TerminateSession",{SessionType:v},u)};s.AMT_RemoteAccessService_AddMpServer=function(u,z,B,v,x,C,A,y,w){s.Exec("AMT_RemoteAccessService","AddMpServer",{AccessInfo:u,InfoFormat:z,Port:B,AuthMethod:v,Certificate:x,Username:C,Password:A,CN:y},w)};s.AMT_RemoteAccessService_AddRemoteAccessPolicyRule=function(x,y,v,w,u){s.Exec("AMT_RemoteAccessService","AddRemoteAccessPolicyRule",{Trigger:x,TunnelLifeTime:y,ExtendedData:v,MpServer:w},u)};s.AMT_RemoteAccessService_CloseRemoteAccessConnection=function(u,v){s.Exec("AMT_RemoteAccessService","CloseRemoteAccessConnection",{_method_dummy:u},v)};s.AMT_SetupAndConfigurationService_CommitChanges=function(u,v){s.Exec("AMT_SetupAndConfigurationService","CommitChanges",{_method_dummy:u},v)};s.AMT_SetupAndConfigurationService_Unprovision=function(v,u){s.Exec("AMT_SetupAndConfigurationService","Unprovision",{ProvisioningMode:v},u)};s.AMT_SetupAndConfigurationService_PartialUnprovision=function(u,v){s.Exec("AMT_SetupAndConfigurationService","PartialUnprovision",{_method_dummy:u},v)};s.AMT_SetupAndConfigurationService_ResetFlashWearOutProtection=function(u,v){s.Exec("AMT_SetupAndConfigurationService","ResetFlashWearOutProtection",{_method_dummy:u},v)};s.AMT_SetupAndConfigurationService_ExtendProvisioningPeriod=function(v,u){s.Exec("AMT_SetupAndConfigurationService","ExtendProvisioningPeriod",{Duration:v},u)};s.AMT_SetupAndConfigurationService_SetMEBxPassword=function(v,u){s.Exec("AMT_SetupAndConfigurationService","SetMEBxPassword",{Password:v},u)};s.AMT_SetupAndConfigurationService_SetTLSPSK=function(v,w,u){s.Exec("AMT_SetupAndConfigurationService","SetTLSPSK",{PID:v,PPS:w},u)};s.AMT_SetupAndConfigurationService_GetProvisioningAuditRecord=function(u){s.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecord",{},u)};s.AMT_SetupAndConfigurationService_GetUuid=function(u){s.Exec("AMT_SetupAndConfigurationService","GetUuid",{},u)};s.AMT_SetupAndConfigurationService_GetUnprovisionBlockingComponents=function(u){s.Exec("AMT_SetupAndConfigurationService","GetUnprovisionBlockingComponents",{},u)};s.AMT_SetupAndConfigurationService_GetProvisioningAuditRecordV2=function(u){s.Exec("AMT_SetupAndConfigurationService","GetProvisioningAuditRecordV2",{},u)};s.AMT_SystemDefensePolicy_GetTimeout=function(u){s.Exec("AMT_SystemDefensePolicy","GetTimeout",{},u)};s.AMT_SystemDefensePolicy_SetTimeout=function(v,u){s.Exec("AMT_SystemDefensePolicy","SetTimeout",{Timeout:v},u)};s.AMT_SystemDefensePolicy_UpdateStatistics=function(v,x,u,z,w,y){s.Exec("AMT_SystemDefensePolicy","UpdateStatistics",{NetworkInterface:v,ResetOnRead:x},u,z,w,y)};s.AMT_SystemPowerScheme_SetPowerScheme=function(u,v,w){s.Exec("AMT_SystemPowerScheme","SetPowerScheme",{},u,w,0,{InstanceID:v})};s.AMT_TimeSynchronizationService_GetLowAccuracyTimeSynch=function(u,v){s.Exec("AMT_TimeSynchronizationService","GetLowAccuracyTimeSynch",{},u,v)};s.AMT_TimeSynchronizationService_SetHighAccuracyTimeSynch=function(v,x,y,u,w){s.Exec("AMT_TimeSynchronizationService","SetHighAccuracyTimeSynch",{Ta0:v,Tm1:x,Tm2:y},u,w)};s.AMT_UserInitiatedConnectionService_RequestStateChange=function(v,w,u){s.Exec("AMT_UserInitiatedConnectionService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_WebUIService_RequestStateChange=function(v,w,u){s.Exec("AMT_WebUIService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AMT_WiFiPortConfigurationService_AddWiFiSettings=function(y,z,x,w,u,v){s.ExecWithXml("AMT_WiFiPortConfigurationService","AddWiFiSettings",{WiFiEndpoint:y,WiFiEndpointSettingsInput:z,IEEE8021xSettingsInput:x,ClientCredential:w,CACredential:u},v)};s.AMT_WiFiPortConfigurationService_UpdateWiFiSettings=function(y,z,x,w,u,v){s.ExecWithXml("AMT_WiFiPortConfigurationService","UpdateWiFiSettings",{WiFiEndpointSettings:y,WiFiEndpointSettingsInput:z,IEEE8021xSettingsInput:x,ClientCredential:w,CACredential:u},v)};s.AMT_WiFiPortConfigurationService_DeleteAllITProfiles=function(u,v){s.Exec("AMT_WiFiPortConfigurationService","DeleteAllITProfiles",{_method_dummy:u},v)};s.AMT_WiFiPortConfigurationService_DeleteAllUserProfiles=function(u,v){s.Exec("AMT_WiFiPortConfigurationService","DeleteAllUserProfiles",{_method_dummy:u},v)};s.CIM_Account_RequestStateChange=function(v,w,u){s.Exec("CIM_Account","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_AccountManagementService_CreateAccount=function(w,u,v){s.Exec("CIM_AccountManagementService","CreateAccount",{System:w,AccountTemplate:u},v)};s.CIM_BootConfigSetting_ChangeBootOrder=function(v,u){s.Exec("CIM_BootConfigSetting","ChangeBootOrder",{Source:v},u)};s.CIM_BootService_SetBootConfigRole=function(u,w,v){s.Exec("CIM_BootService","SetBootConfigRole",{BootConfigSetting:u,Role:w},v,0,1)};s.CIM_Card_ConnectorPower=function(v,w,u){s.Exec("CIM_Card","ConnectorPower",{Connector:v,PoweredOn:w},u)};s.CIM_Card_IsCompatible=function(v,u){s.Exec("CIM_Card","IsCompatible",{ElementToCheck:v},u)};s.CIM_Chassis_IsCompatible=function(v,u){s.Exec("CIM_Chassis","IsCompatible",{ElementToCheck:v},u)};s.CIM_Fan_SetSpeed=function(v,u){s.Exec("CIM_Fan","SetSpeed",{DesiredSpeed:v},u)};s.CIM_KVMRedirectionSAP_RequestStateChange=function(v,w,u){s.Exec("CIM_KVMRedirectionSAP","RequestStateChange",{RequestedState:v},u)};s.CIM_MediaAccessDevice_LockMedia=function(v,u){s.Exec("CIM_MediaAccessDevice","LockMedia",{Lock:v},u)};s.CIM_MediaAccessDevice_SetPowerState=function(v,w,u){s.Exec("CIM_MediaAccessDevice","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_MediaAccessDevice_Reset=function(u){s.Exec("CIM_MediaAccessDevice","Reset",{},u)};s.CIM_MediaAccessDevice_EnableDevice=function(v,u){s.Exec("CIM_MediaAccessDevice","EnableDevice",{Enabled:v},u)};s.CIM_MediaAccessDevice_OnlineDevice=function(v,u){s.Exec("CIM_MediaAccessDevice","OnlineDevice",{Online:v},u)};s.CIM_MediaAccessDevice_QuiesceDevice=function(v,u){s.Exec("CIM_MediaAccessDevice","QuiesceDevice",{Quiesce:v},u)};s.CIM_MediaAccessDevice_SaveProperties=function(u){s.Exec("CIM_MediaAccessDevice","SaveProperties",{},u)};s.CIM_MediaAccessDevice_RestoreProperties=function(u){s.Exec("CIM_MediaAccessDevice","RestoreProperties",{},u)};s.CIM_MediaAccessDevice_RequestStateChange=function(v,w,u){s.Exec("CIM_MediaAccessDevice","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_PhysicalFrame_IsCompatible=function(v,u){s.Exec("CIM_PhysicalFrame","IsCompatible",{ElementToCheck:v},u)};s.CIM_PhysicalPackage_IsCompatible=function(v,u){s.Exec("CIM_PhysicalPackage","IsCompatible",{ElementToCheck:v},u)};s.CIM_PowerManagementService_RequestPowerStateChange=function(w,v,x,y,u){s.Exec("CIM_PowerManagementService","RequestPowerStateChange",{PowerState:w,ManagedElement:v,Time:x,TimeoutPeriod:y},u,0,1)};s.CIM_PowerSupply_SetPowerState=function(v,w,u){s.Exec("CIM_PowerSupply","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_PowerSupply_Reset=function(u){s.Exec("CIM_PowerSupply","Reset",{},u)};s.CIM_PowerSupply_EnableDevice=function(v,u){s.Exec("CIM_PowerSupply","EnableDevice",{Enabled:v},u)};s.CIM_PowerSupply_OnlineDevice=function(v,u){s.Exec("CIM_PowerSupply","OnlineDevice",{Online:v},u)};s.CIM_PowerSupply_QuiesceDevice=function(v,u){s.Exec("CIM_PowerSupply","QuiesceDevice",{Quiesce:v},u)};s.CIM_PowerSupply_SaveProperties=function(u){s.Exec("CIM_PowerSupply","SaveProperties",{},u)};s.CIM_PowerSupply_RestoreProperties=function(u){s.Exec("CIM_PowerSupply","RestoreProperties",{},u)};s.CIM_PowerSupply_RequestStateChange=function(v,w,u){s.Exec("CIM_PowerSupply","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_Processor_SetPowerState=function(v,w,u){s.Exec("CIM_Processor","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_Processor_Reset=function(u){s.Exec("CIM_Processor","Reset",{},u)};s.CIM_Processor_EnableDevice=function(v,u){s.Exec("CIM_Processor","EnableDevice",{Enabled:v},u)};s.CIM_Processor_OnlineDevice=function(v,u){s.Exec("CIM_Processor","OnlineDevice",{Online:v},u)};s.CIM_Processor_QuiesceDevice=function(v,u){s.Exec("CIM_Processor","QuiesceDevice",{Quiesce:v},u)};s.CIM_Processor_SaveProperties=function(u){s.Exec("CIM_Processor","SaveProperties",{},u)};s.CIM_Processor_RestoreProperties=function(u){s.Exec("CIM_Processor","RestoreProperties",{},u)};s.CIM_Processor_RequestStateChange=function(v,w,u){s.Exec("CIM_Processor","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_RecordLog_ClearLog=function(u){s.Exec("CIM_RecordLog","ClearLog",{},u)};s.CIM_RecordLog_RequestStateChange=function(v,w,u){s.Exec("CIM_RecordLog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_RedirectionService_RequestStateChange=function(v,w,u){s.Exec("CIM_RedirectionService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_Sensor_SetPowerState=function(v,w,u){s.Exec("CIM_Sensor","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_Sensor_Reset=function(u){s.Exec("CIM_Sensor","Reset",{},u)};s.CIM_Sensor_EnableDevice=function(v,u){s.Exec("CIM_Sensor","EnableDevice",{Enabled:v},u)};s.CIM_Sensor_OnlineDevice=function(v,u){s.Exec("CIM_Sensor","OnlineDevice",{Online:v},u)};s.CIM_Sensor_QuiesceDevice=function(v,u){s.Exec("CIM_Sensor","QuiesceDevice",{Quiesce:v},u)};s.CIM_Sensor_SaveProperties=function(u){s.Exec("CIM_Sensor","SaveProperties",{},u)};s.CIM_Sensor_RestoreProperties=function(u){s.Exec("CIM_Sensor","RestoreProperties",{},u)};s.CIM_Sensor_RequestStateChange=function(v,w,u){s.Exec("CIM_Sensor","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_StatisticalData_ResetSelectedStats=function(v,u){s.Exec("CIM_StatisticalData","ResetSelectedStats",{SelectedStatistics:v},u)};s.CIM_Watchdog_KeepAlive=function(u){s.Exec("CIM_Watchdog","KeepAlive",{},u)};s.CIM_Watchdog_SetPowerState=function(v,w,u){s.Exec("CIM_Watchdog","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_Watchdog_Reset=function(u){s.Exec("CIM_Watchdog","Reset",{},u)};s.CIM_Watchdog_EnableDevice=function(v,u){s.Exec("CIM_Watchdog","EnableDevice",{Enabled:v},u)};s.CIM_Watchdog_OnlineDevice=function(v,u){s.Exec("CIM_Watchdog","OnlineDevice",{Online:v},u)};s.CIM_Watchdog_QuiesceDevice=function(v,u){s.Exec("CIM_Watchdog","QuiesceDevice",{Quiesce:v},u)};s.CIM_Watchdog_SaveProperties=function(u){s.Exec("CIM_Watchdog","SaveProperties",{},u)};s.CIM_Watchdog_RestoreProperties=function(u){s.Exec("CIM_Watchdog","RestoreProperties",{},u)};s.CIM_Watchdog_RequestStateChange=function(v,w,u){s.Exec("CIM_Watchdog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.CIM_WiFiPort_SetPowerState=function(v,w,u){s.Exec("CIM_WiFiPort","SetPowerState",{PowerState:v,Time:w},u)};s.CIM_WiFiPort_Reset=function(u){s.Exec("CIM_WiFiPort","Reset",{},u)};s.CIM_WiFiPort_EnableDevice=function(v,u){s.Exec("CIM_WiFiPort","EnableDevice",{Enabled:v},u)};s.CIM_WiFiPort_OnlineDevice=function(v,u){s.Exec("CIM_WiFiPort","OnlineDevice",{Online:v},u)};s.CIM_WiFiPort_QuiesceDevice=function(v,u){s.Exec("CIM_WiFiPort","QuiesceDevice",{Quiesce:v},u)};s.CIM_WiFiPort_SaveProperties=function(u){s.Exec("CIM_WiFiPort","SaveProperties",{},u)};s.CIM_WiFiPort_RestoreProperties=function(u){s.Exec("CIM_WiFiPort","RestoreProperties",{},u)};s.CIM_WiFiPort_RequestStateChange=function(v,w,u){s.Exec("CIM_WiFiPort","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.IPS_HostBasedSetupService_Setup=function(y,z,x,v,A,w,u){s.Exec("IPS_HostBasedSetupService","Setup",{NetAdminPassEncryptionType:y,NetworkAdminPassword:z,McNonce:x,Certificate:v,SigningAlgorithm:A,DigitalSignature:w},u)};s.IPS_HostBasedSetupService_AddNextCertInChain=function(x,v,w,u){s.Exec("IPS_HostBasedSetupService","AddNextCertInChain",{NextCertificate:x,IsLeafCertificate:v,IsRootCertificate:w},u)};s.IPS_HostBasedSetupService_AdminSetup=function(x,y,w,z,v,u){s.Exec("IPS_HostBasedSetupService","AdminSetup",{NetAdminPassEncryptionType:x,NetworkAdminPassword:y,McNonce:w,SigningAlgorithm:z,DigitalSignature:v},u)};s.IPS_HostBasedSetupService_UpgradeClientToAdmin=function(w,x,v,u){s.Exec("IPS_HostBasedSetupService","UpgradeClientToAdmin",{McNonce:w,SigningAlgorithm:x,DigitalSignature:v},u)};s.IPS_HostBasedSetupService_DisableClientControlMode=function(u,v){s.Exec("IPS_HostBasedSetupService","DisableClientControlMode",{_method_dummy:u},v)};s.IPS_KVMRedirectionSettingData_TerminateSession=function(u){s.Exec("IPS_KVMRedirectionSettingData","TerminateSession",{},u)};s.IPS_OptInService_StartOptIn=function(u){s.Exec("IPS_OptInService","StartOptIn",{},u)};s.IPS_OptInService_CancelOptIn=function(u){s.Exec("IPS_OptInService","CancelOptIn",{},u)};s.IPS_OptInService_SendOptInCode=function(v,u){s.Exec("IPS_OptInService","SendOptInCode",{OptInCode:v},u)};s.IPS_OptInService_StartService=function(u){s.Exec("IPS_OptInService","StartService",{},u)};s.IPS_OptInService_StopService=function(u){s.Exec("IPS_OptInService","StopService",{},u)};s.IPS_OptInService_RequestStateChange=function(v,w,u){s.Exec("IPS_OptInService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.IPS_ProvisioningRecordLog_RequestStateChange=function(v,w,u){s.Exec("IPS_ProvisioningRecordLog","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.IPS_ProvisioningRecordLog_ClearLog=function(u,v){s.Exec("IPS_ProvisioningRecordLog","ClearLog",{_method_dummy:u},v)};s.IPS_SecIOService_RequestStateChange=function(v,w,u){s.Exec("IPS_SecIOService","RequestStateChange",{RequestedState:v,TimeoutPeriod:w},u)};s.AmtStatusToStr=function(u){if(s.AmtStatusCodes[u]){return s.AmtStatusCodes[u]}else{return"UNKNOWN_ERROR"}};s.AmtStatusCodes={0:"SUCCESS",1:"INTERNAL_ERROR",2:"NOT_READY",3:"INVALID_PT_MODE",4:"INVALID_MESSAGE_LENGTH",5:"TABLE_FINGERPRINT_NOT_AVAILABLE",6:"INTEGRITY_CHECK_FAILED",7:"UNSUPPORTED_ISVS_VERSION",8:"APPLICATION_NOT_REGISTERED",9:"INVALID_REGISTRATION_DATA",10:"APPLICATION_DOES_NOT_EXIST",11:"NOT_ENOUGH_STORAGE",12:"INVALID_NAME",13:"BLOCK_DOES_NOT_EXIST",14:"INVALID_BYTE_OFFSET",15:"INVALID_BYTE_COUNT",16:"NOT_PERMITTED",17:"NOT_OWNER",18:"BLOCK_LOCKED_BY_OTHER",19:"BLOCK_NOT_LOCKED",20:"INVALID_GROUP_PERMISSIONS",21:"GROUP_DOES_NOT_EXIST",22:"INVALID_MEMBER_COUNT",23:"MAX_LIMIT_REACHED",24:"INVALID_AUTH_TYPE",25:"AUTHENTICATION_FAILED",26:"INVALID_DHCP_MODE",27:"INVALID_IP_ADDRESS",28:"INVALID_DOMAIN_NAME",29:"UNSUPPORTED_VERSION",30:"REQUEST_UNEXPECTED",31:"INVALID_TABLE_TYPE",32:"INVALID_PROVISIONING_STATE",33:"UNSUPPORTED_OBJECT",34:"INVALID_TIME",35:"INVALID_INDEX",36:"INVALID_PARAMETER",37:"INVALID_NETMASK",38:"FLASH_WRITE_LIMIT_EXCEEDED",39:"INVALID_IMAGE_LENGTH",40:"INVALID_IMAGE_SIGNATURE",41:"PROPOSE_ANOTHER_VERSION",42:"INVALID_PID_FORMAT",43:"INVALID_PPS_FORMAT",44:"BIST_COMMAND_BLOCKED",45:"CONNECTION_FAILED",46:"CONNECTION_TOO_MANY",47:"RNG_GENERATION_IN_PROGRESS",48:"RNG_NOT_READY",49:"CERTIFICATE_NOT_READY",1024:"DISABLED_BY_POLICY",2048:"NETWORK_IF_ERROR_BASE",2049:"UNSUPPORTED_OEM_NUMBER",2050:"UNSUPPORTED_BOOT_OPTION",2051:"INVALID_COMMAND",2052:"INVALID_SPECIAL_COMMAND",2053:"INVALID_HANDLE",2054:"INVALID_PASSWORD",2055:"INVALID_REALM",2056:"STORAGE_ACL_ENTRY_IN_USE",2057:"DATA_MISSING",2058:"DUPLICATE",2059:"EVENTLOG_FROZEN",2060:"PKI_MISSING_KEYS",2061:"PKI_GENERATING_KEYS",2062:"INVALID_KEY",2063:"INVALID_CERT",2064:"CERT_KEY_NOT_MATCH",2065:"MAX_KERB_DOMAIN_REACHED",2066:"UNSUPPORTED",2067:"INVALID_PRIORITY",2068:"NOT_FOUND",2069:"INVALID_CREDENTIALS",2070:"INVALID_PASSPHRASE",2072:"NO_ASSOCIATION",2075:"AUDIT_FAIL",2076:"BLOCKING_COMPONENT",2081:"USER_CONSENT_REQUIRED",4096:"APP_INTERNAL_ERROR",4097:"NOT_INITIALIZED",4098:"LIB_VERSION_UNSUPPORTED",4099:"INVALID_PARAM",4100:"RESOURCES",4101:"HARDWARE_ACCESS_ERROR",4102:"REQUESTOR_NOT_REGISTERED",4103:"NETWORK_ERROR",4104:"PARAM_BUFFER_TOO_SHORT",4105:"COM_NOT_INITIALIZED_IN_THREAD",4106:"URL_REQUIRED"};s.GetMessageLog=function(u,v){s.AMT_MessageLog_PositionToFirstRecord(k,[u,v,[]])};function k(w,u,v,x,y){if(x!=200||v.Body.ReturnValue!="0"){y[0](s,null,y[2]);return}s.AMT_MessageLog_GetRecords(v.Body.IterationIdentifier,390,l,y)}function l(D,A,C,E,G){if(E!=200||C.Body.ReturnValue!="0"){G[0](s,null,G[2]);return}var y,z,I,v,u=G[2],F=new Date(),H,B=C.Body.RecordArray;if(typeof B==="string"){C.Body.RecordArray=[C.Body.RecordArray]}for(y in B){v=null;try{v=window.atob(B[y])}catch(w){}if(v!=null){H=ReadIntX(v,0);if((H>0)&&(H<4294967295)){I={DeviceAddress:v.charCodeAt(4),EventSensorType:v.charCodeAt(5),EventType:v.charCodeAt(6),EventOffset:v.charCodeAt(7),EventSourceType:v.charCodeAt(8),EventSeverity:v.charCodeAt(9),SensorNumber:v.charCodeAt(10),Entity:v.charCodeAt(11),EntityInstance:v.charCodeAt(12),EventData:[],Time:new Date((H+(F.getTimezoneOffset()*60))*1000)};for(z=13;z<21;z++){I.EventData.push(v.charCodeAt(z))}I.EntityStr=o[I.Entity];I.Desc=j(I.EventSensorType,I.EventOffset,I.EventData,I.Entity);if(!I.EntityStr){I.EntityStr="Unknown"}u.push(I)}}}if(C.Body.NoMoreRecords!=true){s.AMT_MessageLog_GetRecords(C.Body.IterationIdentifier,390,l,[G[0],u,G[2]])}else{G[0](s,u,G[2])}}var e="Platform firmware (e.g. BIOS)|SMI handler|ISV system management software|Alert ASIC|IPMI|BIOS vendor|System board set vendor|System integrator|Third party add-in|OSV|NIC|System management card".split("|");var p="Unspecified.|No system memory is physically installed in the system.|No usable system memory, all installed memory has experienced an unrecoverable failure.|Unrecoverable hard-disk/ATAPI/IDE device failure.|Unrecoverable system-board failure.|Unrecoverable diskette subsystem failure.|Unrecoverable hard-disk controller failure.|Unrecoverable PS/2 or USB keyboard failure.|Removable boot media not found.|Unrecoverable video controller failure.|No video device detected.|Firmware (BIOS) ROM corruption detected.|CPU voltage mismatch (processors that share same supply have mismatched voltage requirements)|CPU speed matching failure".split("|");var q="Unspecified.|Memory initialization.|Starting hard-disk initialization and test|Secondary processor(s) initialization|User authentication|User-initiated system setup|USB resource configuration|PCI resource configuration|Option ROM initialization|Video initialization|Cache initialization|SM Bus initialization|Keyboard controller initialization|Embedded controller/management controller initialization|Docking station attachment|Enabling docking station|Docking station ejection|Disabling docking station|Calling operating system wake-up vector|Starting operating system boot process|Baseboard or motherboard initialization|reserved|Floppy initialization|Keyboard test|Pointing device test|Primary processor initialization".split("|");var o="Unspecified|Other|Unknown|Processor|Disk|Peripheral|System management module|System board|Memory module|Processor module|Power supply|Add in card|Front panel board|Back panel board|Power system board|Drive backplane|System internal expansion board|Other system board|Processor board|Power unit|Power module|Power management board|Chassis back panel board|System chassis|Sub chassis|Other chassis board|Disk drive bay|Peripheral bay|Device bay|Fan cooling|Cooling unit|Cable interconnect|Memory device|System management software|BIOS|Intel(r) ME|System bus|Group|Intel(r) ME|External environment|Battery|Processing blade|Connectivity switch|Processor/memory module|I/O module|Processor I/O module|Management controller firmware|IPMI channel|PCI bus|PCI express bus|SCSI bus|SATA/SAS bus|Processor front side bus".split("|");s.RealmNames="||Redirection|PT Administration|Hardware Asset|Remote Control|Storage|Event Manager|Storage Admin|Agent Presence Local|Agent Presence Remote|Circuit Breaker|Network Time|General Information|Firmware Update|EIT|LocalUN|Endpoint Access Control|Endpoint Access Control Admin|Event Log Reader|Audit Log|ACL Realm|||Local System".split("|");s.WatchdogCurrentStates={1:"Not Started",2:"Stopped",4:"Running",8:"Expired",16:"Suspended"};function j(x,w,v,u){if(x==15){if(v[0]==235){return"Invalid Data"}if(w==0){return p[v[1]]}return q[v[1]]}if(x==18&&v[0]==170){return"Agent watchdog "+char2hex(v[4])+char2hex(v[3])+char2hex(v[2])+char2hex(v[1])+"-"+char2hex(v[6])+char2hex(v[5])+"-... changed to "+s.WatchdogCurrentStates[v[7]]}if(x==6){return"Authentication failed "+(v[1]+(v[2]<<8))+" times. The system may be under attack."}if(x==30){return"No bootable media"}if(x==32){return"Operating system lockup or power interrupt"}if(x==35){return"System boot failure"}if(x==37){return"System firmware started (at least one CPU is properly executing)."}return"Unknown Sensor Type #"+x}return s}var md5_k=[];for(var i=0;i<64;){md5_k[i]=0|(Math.abs(Math.sin(++i))*4294967296)}function hex_md5(p){var g,k,l,o,r=[],q=unescape(encodeURI(p)),e=q.length,m=[g=1732584193,k=-271733879,~g,~k],n=0;for(;n<=e;){r[n>>2]|=(q.charCodeAt(n)||128)<<8*(n++%4)}r[p=(e+8>>6)*16+14]=e*8;n=0;for(;n<p;n+=16){e=m;o=0;for(;o<64;){e=[l=e[3],((g=e[1]|0)+((l=((e[0]+[g&(k=e[2])|~g&l,l&g|~l&k,g^k^l,k^(g|~l)][e=o>>4])+(md5_k[o]+(r[[o,5*o+1,3*o+5,7*o][e]%16+n]|0))))<<(e=[7,12,17,22,5,9,14,20,4,11,16,23,6,10,15,21][4*e+o++%4])|l>>>32-e)),g,k]}for(o=4;o;){m[--o]=m[o]+e[o]}}p="";for(;o<32;){p+=((m[o>>3]>>((1^o++&7)*4))&15).toString(16)}return p}function rstr_md5(a){return hex2rstr(hex_md5(a))}function execArgumentsToXml(c){if(c===undefined||c===null){return null}var d="";for(var b in c){var a=c[b];if(!a){continue}if(a.__parameterType==="reference"){d+=referenceToXml(b,a)}else{d+=instanceToXml(b,a)}}return d}function instanceToXml(d,c){if(c===undefined||c===null){return null}var b=!!c.__namespace;var j=b?"<q:":"<";var a=b?"</q:":"</";var e=b?(' xmlns:q="'+c.__namespace+'"'):"";var h="<r:"+d+e+">";for(var g in c){if(!c.hasOwnProperty(g)||g.indexOf("__")===0){continue}if(typeof c[g]==="function"||Array.isArray(c[g])){continue}if(typeof c[g]==="object"){console.error("only convert one level down...")}else{h+=j+g+">"+c[g].toString()+a+g+">"}}h+="</r:"+d+">";return h}function referenceToXml(b,a){if(a===undefined||a===null){return null}var c="<r:"+b+"><a:Address>/wsman</a:Address><a:ReferenceParameters><w:ResourceURI>"+a.__resourceUri+"</w:ResourceURI><w:SelectorSet>";for(var d in a){if(!a.hasOwnProperty(d)||d.indexOf("__")===0){continue}if(typeof a[d]==="function"||typeof a[d]==="object"||Array.isArray(a[d])){continue}c+='<w:Selector Name="'+d+'">'+a[d].toString()+"</w:Selector>"}c+="</w:SelectorSet></a:ReferenceParameters></r:"+b+">";return c}function GetSidString(c){var b="S-"+c.charCodeAt(0)+"-"+c.charCodeAt(7);for(var a=2;a<(c.length/4);a++){b+="-"+ReadIntX(c,a*4)}return b}function GetSidByteArray(d){if(!d||d==null){return null}var c=d.split("-");if(c.length<4||(c[0]!="s"&&c[0]!="S")){return null}for(var a=1;a<c.length;a++){var e=parseInt(c[a]);if(e!=c[a]){return null}c[a]=e}var b=String.fromCharCode(c[1])+String.fromCharCode(c.length-3)+ShortToStr(Math.floor(c[2]/Math.pow(2,32)))+IntToStr((c[2])&65535);for(var a=3;a<c.length;a++){b+=IntToStrX(c[a])}return b}var WsmanStackCreateService=function(h,l,n,k,m,g){var j={};j.NextMessageId=1;j.Address="/wsman";j.comm=CreateWsmanComm(h,l,n,k,m,g);j.PerformAjax=function(q,o,s,r,p){if(p==undefined){p=""}j.comm.PerformAjax('<?xml version="1.0" encoding="utf-8"?><Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:w="http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd" xmlns="http://www.w3.org/2003/05/soap-envelope" '+p+"><Header><a:Action>"+q,function(t,u,v){if(u!=200){o(j,null,{Header:{HttpError:u}},u,v);return}var w=j.ParseWsman(t);if(!w||w==null){o(j,null,{Header:{HttpError:u}},601,v)}else{o(j,w.Header.ResourceURI,w,200,v)}},s,r)};j.CancelAllQueries=function(o){j.comm.CancelAllQueries(o)};j.GetNameFromUrl=function(o){var p=o.lastIndexOf("/");return(p==-1)?o:o.substring(p+1)};j.ExecSubscribe=function(w,q,z,o,y,v,x,t,A,u){var r="",s="";if(A!=undefined&&u!=undefined){r="<t:IssuedTokens><t:RequestSecurityTokenResponse><t:TokenType>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken</t:TokenType><t:RequestedSecurityToken><se:UsernameToken><se:Username>"+A+'</se:Username><se:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd#PasswordText">'+u+"</se:Password></se:UsernameToken></t:RequestedSecurityToken></t:RequestSecurityTokenResponse></t:IssuedTokens>";s='<Auth Profile="http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/secprofile/http/digest"/>'}if(t!=undefined&&t!=null){t="<a:ReferenceParameters>"+t+"</a:ReferenceParameters>"}else{t=""}var p="http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+w+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+d(x)+r+'</Header><Body><e:Subscribe><e:Delivery Mode="http://schemas.dmtf.org/wbem/wsman/1/wsman/'+q+'"><e:NotifyTo><a:Address>'+z+"</a:Address></e:NotifyTo>"+s+"</e:Delivery><e:Expires>PT0.000000S</e:Expires></e:Subscribe>";j.PerformAjax(p+"</Body></Envelope>",o,y,v,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing" xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust" xmlns:se="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:m="http://x.com"')};j.ExecUnSubscribe=function(r,o,t,q,s){var p="http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+r+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>"+d(s)+"</Header><Body><e:Unsubscribe/>";j.PerformAjax(p+"</Body></Envelope>",o,t,q,'xmlns:e="http://schemas.xmlsoap.org/ws/2004/08/eventing"')};j.ExecPut=function(s,r,o,u,q,t){var p="http://schemas.xmlsoap.org/ws/2004/09/transfer/Put</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+s+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout>"+d(t)+"</Header><Body>"+c(s,r);j.PerformAjax(p+"</Body></Envelope>",o,u,q)};j.ExecCreate=function(u,t,o,w,s,v){var r=j.GetNameFromUrl(u);var p="http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+u+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+d(v)+"</Header><Body><g:"+r+' xmlns:g="'+u+'">';for(var q in t){p+="<g:"+q+">"+t[q]+"</g:"+q+">"}j.PerformAjax(p+"</g:"+r+"></Body></Envelope>",o,w,s)};j.ExecCreateXml=function(s,o,p,u,r){var q=j.GetNameFromUrl(s),t="";j.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Create</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+s+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60.000S</w:OperationTimeout></Header><Body><r:"+q+' xmlns:r="'+s+'">'+o+"</r:"+q+"></Body></Envelope>",p,u,r)};j.ExecDelete=function(s,r,o,t,q){var p="http://schemas.xmlsoap.org/ws/2004/09/transfer/Delete</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+s+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+d(r)+"</Header><Body /></Envelope>";j.PerformAjax(p,o,t,q)};j.ExecGet=function(q,o,r,p){j.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+q+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body /></Envelope>",o,r,p)};j.ExecMethod=function(u,s,o,q,w,t,v){var p="";for(var r in o){if(o[r]!=null){if(Array.isArray(o[r])){for(var y in o[r]){p+="<r:"+r+">"+o[r][y]+"</r:"+r+">"}}else{p+="<r:"+r+">"+o[r]+"</r:"+r+">"}}}j.ExecMethodXml(u,s,p,q,w,t,v)};j.ExecMethodXml=function(s,q,o,p,u,r,t){j.PerformAjax(s+"/"+q+"</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+s+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+"</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout>"+d(t)+"</Header><Body><r:"+q+'_INPUT xmlns:r="'+s+'">'+o+"</r:"+q+"_INPUT></Body></Envelope>",p,u,r)};j.ExecEnum=function(q,o,r,p){j.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Enumerate</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+q+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Enumerate xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration" /></Body></Envelope>',o,r,p)};j.ExecPull=function(r,p,o,s,q){j.PerformAjax("http://schemas.xmlsoap.org/ws/2004/09/enumeration/Pull</a:Action><a:To>"+j.Address+"</a:To><w:ResourceURI>"+r+"</w:ResourceURI><a:MessageID>"+(j.NextMessageId++)+'</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><w:OperationTimeout>PT60S</w:OperationTimeout></Header><Body><Pull xmlns="http://schemas.xmlsoap.org/ws/2004/09/enumeration"><EnumerationContext>'+p+"</EnumerationContext><MaxElements>999</MaxElements><MaxCharacters>99999</MaxCharacters></Pull></Body></Envelope>",o,s,q)};j.ParseWsman=function(x){try{if(!x.childNodes){x=e(x)}var v={Header:{}},s=x.getElementsByTagName("Header")[0],w;if(!s){s=x.getElementsByTagName("a:Header")[0]}if(!s){return null}for(var u=0;u<s.childNodes.length;u++){var p=s.childNodes[u];v.Header[p.localName]=p.textContent}var o=x.getElementsByTagName("Body")[0];if(!o){o=x.getElementsByTagName("a:Body")[0]}if(!o){return null}if(o.childNodes.length>0){w=o.childNodes[0].localName;if(w.indexOf("_OUTPUT")==w.length-7){w=w.substring(0,w.length-7)}v.Header.Method=w;v.Body=b(o.childNodes[0])}return v}catch(q){console.log("Unable to parse XML: "+x);return null}};function b(u){var q,v={};for(var s=0;s<u.childNodes.length;s++){var o=u.childNodes[s];if(o.childElementCount==0){q=o.textContent}else{q=b(o)}if(q=="true"){q=true}if(q=="false"){q=false}var p=q;if(o.attributes.length>0){p={Value:q};for(var t=0;t<o.attributes.length;t++){p["@"+o.attributes[t].name]=o.attributes[t].value}}if(v[o.localName] instanceof Array){v[o.localName].push(p)}else{if(v[o.localName]==undefined){v[o.localName]=p}else{v[o.localName]=[v[o.localName],p]}}}return v}function c(t,r){if(!t||r===undefined||r===null){return""}var p=j.GetNameFromUrl(t);var s="<r:"+p+' xmlns:r="'+t+'">';for(var q in r){if(!r.hasOwnProperty(q)||q.indexOf("__")===0||q.indexOf("@")===0){continue}if(r[q]===undefined||r[q]===null||typeof r[q]==="function"){continue}if(typeof r[q]==="object"&&r[q]["ReferenceParameters"]){s+="<r:"+q+"><a:Address>"+r[q].Address+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+r[q]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var u=r[q]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(u)){for(var o=0;o<u.length;o++){s+="<w:Selector"+a(u[o])+">"+u[o]["Value"]+"</w:Selector>"}}else{s+="<w:Selector"+a(u)+">"+u.Value+"</w:Selector>"}s+="</w:SelectorSet></a:ReferenceParameters></r:"+q+">"}else{if(Array.isArray(r[q])){for(var o=0;o<r[q].length;o++){s+="<r:"+q+">"+r[q][o].toString()+"</r:"+q+">"}}else{s+="<r:"+q+">"+r[q].toString()+"</r:"+q+">"}}}s+="</r:"+p+">";return s}function a(o){if(!o){return""}var q=" ";for(var p in o){if(!o.hasOwnProperty(p)||p.indexOf("@")!==0){continue}q+=p.substring(1)+'="'+o[p]+'" '}return q}function d(s){if(!s){return""}if(typeof s=="string"){return s}if(s.InstanceID){return'<w:SelectorSet><w:Selector Name="InstanceID">'+s.InstanceID+"</w:Selector></w:SelectorSet>"}var q="<w:SelectorSet>";for(var p in s){if(!s.hasOwnProperty(p)){continue}q+='<w:Selector Name="'+p+'">';if(s[p]["ReferenceParameters"]){q+="<a:EndpointReference>";q+="<a:Address>"+s[p]["Address"]+"</a:Address><a:ReferenceParameters><w:ResourceURI>"+s[p]["ReferenceParameters"]["ResourceURI"]+"</w:ResourceURI><w:SelectorSet>";var r=s[p]["ReferenceParameters"]["SelectorSet"]["Selector"];if(Array.isArray(r)){for(var o=0;o<r.length;o++){q+="<w:Selector"+a(r[o])+">"+r[o]["Value"]+"</w:Selector>"}}else{q+="<w:Selector"+a(r)+">"+r.Value+"</w:Selector>"}q+="</w:SelectorSet></a:ReferenceParameters></a:EndpointReference>"}else{q+=s[p]}q+="</w:Selector>"}q+="</w:SelectorSet>";return q}function e(o){if(window.DOMParser){return new DOMParser().parseFromString(o,"text/xml")}else{var p=new ActiveXObject("Microsoft.XMLDOM");p.async=false;p.loadXML(o);return p}}return j};var CreateAmtRemoteDesktop=function(p,s){var r={};r.canvasid=p;r.CanvasId=Q(p);r.scrolldiv=s;r.canvas=Q(p).getContext("2d");r.protocol=2;r.state=0;r.acc="";r.ScreenWidth=960;r.ScreenHeight=700;r.width=0;r.height=0;r.rwidth=0;r.rheight=0;r.bpp=2;r.useZRLE=true;r.showmouse=true;r.buttonmask=0;r.localKeyMap=true;r.spare=null;r.sparew=0;r.spareh=0;r.sparew2=0;r.spareh2=0;r.sparecache={};r.ZRLEfirst=1;r.onScreenSizeChange=null;r.frameRateDelay=0;r.kvmDataSupported=false;r.onKvmData=null;r.onKvmDataPending=[];r.onKvmDataAck=-1;r.holding=false;r.lastKeepAlive=Date.now();r.mNagleTimer=null;r.mx=0;r.my=0;r.Debug=function(t){console.log(t)};r.xxStateChange=function(t){if(t==0){r.canvas.fillStyle="#000000";r.canvas.fillRect(0,0,r.width,r.height);r.canvas.canvas.width=r.rwidth=r.width=640;r.canvas.canvas.height=r.rheight=r.height=400;QS(r.canvasid).cursor="default"}else{QS(r.canvasid).cursor=r.showmouse?"default":"none"}};r.ProcessData=function(v){if(!v){return}r.acc+=v;while(r.acc.length>0){var t=0;if(r.state==0&&r.acc.length>=12){t=12;r.state=1;r.send("RFB 003.008\n")}else{if(r.state==1&&r.acc.length>=1){t=r.acc.charCodeAt(0)+1;r.send(String.fromCharCode(1));r.state=2}else{if(r.state==2&&r.acc.length>=4){t=4;if(ReadInt(r.acc,0)!=0){return r.Stop()}r.send(String.fromCharCode(1));r.state=3}else{if(r.state==3&&r.acc.length>=24){var G=ReadInt(r.acc,20);if(r.acc.length<24+G){return}t=24+G;r.canvas.canvas.width=r.rwidth=r.width=r.ScreenWidth=ReadShort(r.acc,0);r.canvas.canvas.height=r.rheight=r.height=r.ScreenHeight=ReadShort(r.acc,2);var J="";if(r.useZRLE){J+=IntToStr(16)}J+=IntToStr(0);J+=IntToStr(1092);r.send(String.fromCharCode(2,0)+ShortToStr((J.length/4)+1)+J+IntToStr(-223));if(r.bpp==1){r.send(String.fromCharCode(0,0,0,0,8,8,0,1)+ShortToStr(7)+ShortToStr(7)+ShortToStr(3)+String.fromCharCode(5,2,0,0,0,0))}r.state=4;if(r.parent){r.parent.xxStateChange(3)}h();if(r.onScreenSizeChange!=null){r.onScreenSizeChange(r,r.ScreenWidth,r.ScreenHeight)}}else{if(r.state==4){switch(r.acc.charCodeAt(0)){case 0:if(r.acc.length<4){return}r.state=100+ReadShort(r.acc,2);t=4;break;case 2:t=1;break;case 3:if(r.acc.length<8){return}var F=ReadInt(r.acc,4)+8;if(r.acc.length<F){return}t=q(r.acc);break}}else{if(r.state>100&&r.acc.length>=12){var L=ReadShort(r.acc,0),N=ReadShort(r.acc,2),K=ReadShort(r.acc,4),C=ReadShort(r.acc,6),I=K*C,B=ReadInt(r.acc,8);if(B<17){if(K<1||K>64||C<1||C>64){console.log("Invalid tile size ("+K+","+C+"), disconnecting.");return r.Stop()}if(r.sparew!=K||r.spareh!=C){r.sparew=r.sparew2=K;r.spareh=r.spareh2=C;var M=r.sparew2+"x"+r.spareh2;r.spare=r.sparecache[M];if(!r.spare){r.sparecache[M]=r.spare=r.canvas.createImageData(r.sparew2,r.spareh2);var E=(r.sparew2*r.spareh2)<<2;for(var D=3;D<E;D+=4){r.spare.data[D]=255}}}}if(B==4294967073){r.canvas.canvas.width=r.rwidth=r.width=K;r.canvas.canvas.height=r.rheight=r.height=C;r.send(String.fromCharCode(3,0,0,0,0,0)+ShortToStr(r.width)+ShortToStr(r.height));t=12;if(r.onScreenSizeChange!=null){r.onScreenSizeChange(r,r.ScreenWidth,r.ScreenHeight)}}else{if(B==0){var H=12,u=12+(I*r.bpp);if(r.acc.length<u){return}t=u;if(r.bpp==2){for(var D=0;D<I;D++){j(r.acc.charCodeAt(H++)+(r.acc.charCodeAt(H++)<<8),D)}}else{for(var D=0;D<I;D++){l(r.acc.charCodeAt(H++),D)}}g(r.spare,L,N)}else{if(B==16){if(r.acc.length<16){return}var w=ReadInt(r.acc,12);if(r.acc.length<(16+w)){return}var H=16,z=5,A=0;if(w>5&&r.acc.charCodeAt(H)==0&&ReadShortX(r.acc,H+1)==(w-z)){a(r.acc,H+5,L,N,K,C,I,w)}t=16+w}else{r.Debug("Unknown Encoding: "+B);return r.Stop()}}}if(--r.state==100){r.state=4;if(r.frameRateDelay==0){h()}else{setTimeout(h,r.frameRateDelay)}}}}}}}}if(t==0){return}r.acc=r.acc.substring(t)}};function a(w,E,M,N,L,A,I,z){var J=w.charCodeAt(E++),C,K,H,D={},F=0,G=0,B;if(J==0){if(r.bpp==2){for(B=0;B<I;B++){j(w.charCodeAt(E++)+(w.charCodeAt(E++)<<8),B)}}else{for(B=0;B<I;B++){l(w.charCodeAt(E++),B)}}g(r.spare,M,N)}else{if(J==1){K=w.charCodeAt(E++)+((r.bpp==2)?(w.charCodeAt(E++)<<8):0);r.canvas.fillStyle="rgb("+((r.bpp==1)?((K&224)+","+((K&28)<<3)+","+b((K&3)<<6)):(((K>>8)&248)+","+((K>>3)&252)+","+((K&31)<<3)))+")";r.canvas.fillRect(M,N,L,A)}else{if(J>1&&J<17){var u=4,t=15;if(r.bpp==2){for(B=0;B<J;B++){D[B]=w.charCodeAt(E++)+(w.charCodeAt(E++)<<8)}if(J==2){u=1;t=1}else{if(J<=4){u=2;t=3}}while(F<I&&E<w.length){K=w.charCodeAt(E++);for(B=(8-u);B>=0;B-=u){j(D[(K>>B)&t],F++)}}}else{for(B=0;B<J;B++){D[B]=w.charCodeAt(E++)}if(J==2){u=1;t=1}else{if(J<=4){u=2;t=3}}while(F<I&&E<w.length){K=w.charCodeAt(E++);for(B=(8-u);B>=0;B-=u){l(D[(K>>B)&t],F++)}}}g(r.spare,M,N)}else{if(J==128){if(r.bpp==2){while(F<I&&E<w.length){K=w.charCodeAt(E++)+(w.charCodeAt(E++)<<8);G=1;do{G+=(H=w.charCodeAt(E++))}while(H==255);if(r.rotation==0){k(K,F,G);F+=G}else{while(--G>=0){j(K,F++)}}}}else{while(F<I&&E<w.length){K=w.charCodeAt(E++);G=1;do{G+=(H=w.charCodeAt(E++))}while(H==255);if(r.rotation==0){m(K,F,G);F+=G}else{while(--G>=0){l(K,F++)}}}}g(r.spare,M,N)}else{if(J>129){if(r.bpp==2){for(B=0;B<(J-128);B++){D[B]=w.charCodeAt(E++)+(w.charCodeAt(E++)<<8)}}else{for(B=0;B<(J-128);B++){D[B]=w.charCodeAt(E++)}}while(F<I&&E<w.length){G=1;C=w.charCodeAt(E++);K=D[C%128];if(C>127){do{G+=(H=w.charCodeAt(E++))}while(H==255)}if(r.rotation==0){if(r.bpp==2){k(K,F,G);F+=G}else{m(K,F,G);F+=G}}else{if(r.bpp==2){while(--G>=0){j(K,F++)}}else{while(--G>=0){l(K,F++)}}}}g(r.spare,M,N)}}}}}}r.hold=function(t){if(r.holding==t){return}r.holding=t;r.canvas.fillStyle="#000000";r.canvas.fillRect(0,0,r.width,r.height);if(r.holding==false){if((r.canvas.canvas.width!=r.width)||(r.canvas.canvas.height!=r.height)){r.canvas.canvas.width=r.width;r.canvas.canvas.height=r.height;if(r.onScreenSizeChange!=null){r.onScreenSizeChange(r,r.ScreenWidth,r.ScreenHeight)}}r.Send(String.fromCharCode(3,0,0,0,0,0)+ShortToStr(r.width)+ShortToStr(r.height))}else{r.UnGrabMouseInput();r.UnGrabKeyInput()}};function g(t,u,v){if(r.holding==true){return}r.canvas.putImageData(t,u,v)}function l(w,t){var u=t<<2;r.spare.data[u]=w&224;r.spare.data[u+1]=(w&28)<<3;r.spare.data[u+2]=b((w&3)<<6)}function j(w,t){var u=t<<2;r.spare.data[u]=(w>>8)&248;r.spare.data[u+1]=(w>>3)&252;r.spare.data[u+2]=(w&31)<<3}function m(A,w,z){var x=(w<<2),y=(A&224),u=((A&28)<<3),t=(b((A&3)<<6));while(--z>=0){r.spare.data[x]=y;r.spare.data[x+1]=u;r.spare.data[x+2]=t;x+=4}}function k(A,w,z){var x=(w<<2),y=((A>>8)&248),u=((A>>3)&252),t=((A&31)<<3);while(--z>=0){r.spare.data[x]=y;r.spare.data[x+1]=u;r.spare.data[x+2]=t;x+=4}}function b(t){return(t>127)?(t+32):t}function h(){if(r.holding==true){return}r.send(String.fromCharCode(3,1,0,0,0,0)+ShortToStr(r.rwidth)+ShortToStr(r.rheight))}r.Start=function(){r.state=0;r.acc="";r.ZRLEfirst=1;r.onKvmDataPending=[];r.onKvmDataAck=-1;r.kvmDataSupported=false;for(var t in r.sparecache){delete r.sparecache[t]}};r.Stop=function(){r.UnGrabMouseInput();r.UnGrabKeyInput();if(r.parent){r.parent.Stop()}};r.send=function(t){if(r.parent){r.parent.send(t)}};var o={Pause:19,CapsLock:20,Space:32,Quote:39,Minus:45,NumpadMultiply:42,NumpadAdd:43,PrintScreen:44,Comma:44,NumpadSubtract:45,NumpadDecimal:46,Period:46,Slash:47,NumpadDivide:47,Semicolon:59,Equal:61,OSLeft:91,BracketLeft:91,OSRight:91,Backslash:92,BracketRight:93,ContextMenu:93,Backquote:96,NumLock:144,ScrollLock:145,Backspace:65288,Tab:65289,Enter:65293,NumpadEnter:65293,Escape:65307,Delete:65535,Home:65360,PageUp:65365,PageDown:65366,ArrowLeft:65361,ArrowUp:65362,ArrowRight:65363,ArrowDown:65364,End:65367,Insert:65379,F1:65470,F2:65471,F3:65472,F4:65473,F5:65474,F6:65475,F7:65476,F8:65477,F9:65478,F10:65479,F11:65480,F12:65481,ShiftLeft:65505,ShiftRight:65506,ControlLeft:65507,ControlRight:65508,AltLeft:65513,AltRight:65514,MetaLeft:65511,MetaRight:65512};function n(t){if(t.code.startsWith("Key")&&t.code.length==4){return t.code.charCodeAt(3)+((t.shiftKey==false)?32:0)}if(t.code.startsWith("Digit")&&t.code.length==6){return t.code.charCodeAt(5)}if(t.code.startsWith("Numpad")&&t.code.length==7){return t.code.charCodeAt(6)}return o[t.code]}function c(t,u){if(!u){u=window.event}if(u.code&&(r.localKeyMap==false)){var v=n(u);if(v!=null){r.sendkey(v,t)}}else{var v=u.keyCode,w=v;if(u.shiftKey==false&&v>=65&&v<=90){w=v+32}if(v>=112&&v<=124){w=v+65358}if(v==8){w=65288}if(v==9){w=65289}if(v==13){w=65293}if(v==16){w=65505}if(v==17){w=65507}if(v==18){w=65513}if(v==27){w=65307}if(v==33){w=65365}if(v==34){w=65366}if(v==35){w=65367}if(v==36){w=65360}if(v==37){w=65361}if(v==38){w=65362}if(v==39){w=65363}if(v==40){w=65364}if(v==45){w=65379}if(v==46){w=65535}if(v>=96&&v<=105){w=v-48}if(v==106){w=42}if(v==107){w=43}if(v==109){w=45}if(v==110){w=46}if(v==111){w=47}if(v==186){w=59}if(v==187){w=61}if(v==188){w=44}if(v==189){w=45}if(v==190){w=46}if(v==191){w=47}if(v==192){w=96}if(v==219){w=91}if(v==220){w=92}if(v==221){w=93}if(v==222){w=39}r.sendkey(w,t)}return r.haltEvent(u)}r.sendkey=function(w,u){if(typeof w=="object"){var t="";for(var v in w){t+=(String.fromCharCode(4,w[v][1],0,0)+IntToStr(w[v][0]))}r.send(t)}else{r.send(String.fromCharCode(4,u,0,0)+IntToStr(w))}};function q(t){if(t.length<8){return 0}var v=ReadInt(r.acc,4)+8;if(t.length<v){return 0}if(r.onKvmData!=null){var u=t.substring(8,v);if((u.length>=16)&&(u.substring(0,15)=="\0KvmDataChannel")){if(r.kvmDataSupported==false){r.kvmDataSupported=true;console.log("KVM Data Channel Supported.")}if(((r.onKvmDataAck==-1)&&(u.length==16))||(u.charCodeAt(15)!=0)){r.onKvmDataAck=true}if(u.length>=16){r.onKvmData(u.substring(16))}if((r.onKvmDataAck==true)&&(r.onKvmDataPending.length>0)){r.sendKvmData(r.onKvmDataPending.shift())}}}return v}r.sendKvmData=function(t){if(r.onKvmDataAck!==true){r.onKvmDataPending.push(t)}else{t="\0KvmDataChannel\0"+t;r.send(String.fromCharCode(6,0,0,0)+IntToStr(t.length)+t);r.onKvmDataAck=false}};r.sendKeepAlive=function(){if(r.lastKeepAlive<Date.now()-5000){r.lastKeepAlive=Date.now();r.send(String.fromCharCode(6,0,0,0)+IntToStr(16)+"\0KvmDataChannel\0")}};r.SendCtrlAltDelMsg=function(){r.sendcad()};r.sendcad=function(){r.sendkey([[65507,1],[65513,1],[65535,1],[65535,0],[65513,0],[65507,0]])};var e=false;var d=false;r.GrabMouseInput=function(){if(e==true){return}var t=r.canvas.canvas;t.onmouseup=r.mouseup;t.onmousedown=r.mousedown;t.onmousemove=r.mousemove;e=true};r.UnGrabMouseInput=function(){if(e==false){return}var t=r.canvas.canvas;t.onmousemove=null;t.onmouseup=null;t.onmousedown=null;e=false};r.GrabKeyInput=function(){if(d==true){return}document.onkeyup=r.handleKeyUp;document.onkeydown=r.handleKeyDown;document.onkeypress=r.handleKeys;d=true};r.UnGrabKeyInput=function(){if(d==false){return}document.onkeyup=null;document.onkeydown=null;document.onkeypress=null;d=false};r.handleKeys=function(t){return r.haltEvent(t)};r.handleKeyUp=function(t){return c(0,t)};r.handleKeyDown=function(t){return c(1,t)};r.haltEvent=function(t){if(t.preventDefault){t.preventDefault()}if(t.stopPropagation){t.stopPropagation()}return false};r.mousedblclick=function(t){};r.mousedown=function(t){r.buttonmask|=(1<<t.button);return r.mousemove(t,1)};r.mouseup=function(t){r.buttonmask&=(65535-(1<<t.button));return r.mousemove(t,1)};r.mousemove=function(t,u){if(r.state<4){return true}var w=(r.canvas.canvas.height/Q(r.canvasid).offsetHeight);var x=(r.canvas.canvas.width/Q(r.canvasid).offsetWidth);var v=r.getPositionOfControl(Q(r.canvasid));r.mx=((event.pageX-v[0])*x);r.my=((event.pageY-v[1])*w);if(event.addx){r.mx+=event.addx}if(event.addy){r.my+=event.addy}if(u==1){r.send(String.fromCharCode(5,r.buttonmask)+ShortToStr(r.mx)+ShortToStr(r.my));if(r.mNagleTimer!=null){clearTimeout(r.mNagleTimer);r.mNagleTimer=null}}else{if(r.mNagleTimer==null){r.mNagleTimer=setTimeout(function(){r.send(String.fromCharCode(5,r.buttonmask)+ShortToStr(r.mx)+ShortToStr(r.my));r.mNagleTimer=null},50)}}return r.haltEvent(t)};r.getPositionOfControl=function(t){var u=Array(2);u[0]=u[1]=0;while(t){u[0]+=t.offsetLeft;u[1]+=t.offsetTop;t=t.offsetParent}return u};return r};var CreateAmtRemoteTerminal=function(J,L){var K={};K.DivId=J;K.DivElement=document.getElementById(J);K.protocol=1;if(L.protocol){K.protocol=L.protocol}K.fxEmulation=0;K.lineFeed="\r\n";K.debugmode=0;K.width=80;K.height=25;K.heightLock=0;var x=21;var y=13;var s=["000000","BB0000","00BB00","BBBB00","0000BB","BB00BB","00BBBB","BBBBBB","555555","FF5555","55FF55","FFFF55","5555FF","FF55FF","55FFFF","FFFFFF"];var v=0;var u=7;var t=0;var z=true;var E=0;var F=0;var B=0;var C=0;var D=0;var h=[];var k=0;var j=0;var q=[];var G=[];var I=1;var H=2;var b=false;var c=true;var r;var a=false;var M=[];K.title=null;K.onTitleChange=null;K.Start=function(){};K.Init=function(O,N){K.width=O?O:80;K.height=N?N:25;for(var R=0;R<K.height;R++){G[R]=[];q[R]=[];for(var P=0;P<K.width;P++){G[R][P]=" ";q[R][P]=(7<<6)}}K.TermInit();K.TermDraw()};K.xxStateChange=function(N){if((N==3)&&(L!=null)&&(L.xterm==true)){K.TermSendKeys("stty rows "+K.height+" cols "+K.width+"\nclear\n")}};K.ProcessData=function(N){if(K.debugmode==2){console.log("TRecv("+N.length+"): "+rstr2hex(N))}if(K.capture!=null){K.capture+=N}o(N);K.TermDraw()};function o(O){for(var N=0;N<O.length;N++){n(String.fromCharCode(O.charCodeAt(N)),O.charCodeAt(N))}}function n(N,P){switch(D){case 0:switch(P){case 27:D=1;h=[];k=0;j=0;break;default:m(N);break}break;case 1:switch(N){case"[":D=2;break;case"(":D=4;break;case")":D=5;break;case"]":D=6;break;case"=":a=true;D=0;break;case">":a=false;D=0;break;case"7":B=E;C=F;D=0;break;case"8":E=B;F=C;D=0;break;case"M":var R=1;for(var S=r[1];S>=r[0]+R;S--){for(var T=0;T<K.width;T++){G[S][T]=G[S-R][T];q[S][T]=q[S-R][T]}}for(var S=r[0]+R-1;S>r[0]-1;S--){for(var T=0;T<K.width;T++){G[S][T]=" ";q[S][T]=(7<<6)}}D=0;break;default:console.log("unknown terminal short code",N);D=0;break}break;case 2:if(N>="0"&&N<="9"){if(!h[k]){h[k]=(N-"0")}else{h[k]=((h[k]*10)+(N-"0"))}break}else{if(N==";"){k++;break}else{if(N=="?"){j=1;break}else{if(!h[0]){h[0]=0}l(N,h,k+1,j);D=0}}}break;case 4:D=0;break;case 5:D=0;break;case 6:var O=N.charCodeAt(0);if(N==";"){k++}else{if(O==7){p(h);D=0}else{if(!h[k]){h[k]=N}else{h[k]+=N}}}break}}function p(N){if(N.length==0){return}var O=parseInt(N[0]);if((O==0||O==2)&&(N.length>1)&&(N[1]!="?")){if(K.onTitleChange){K.onTitleChange(K,K.title=N[1])}}}function l(R,N,O,U){if(U==1){switch(R){case"l":if(N[0]==25){c=false}break;case"h":if(N[0]==25){c=true}break}}else{if(U==0){var S;switch(R){case"c":K.TermResetScreen();break;case"A":if(O==1){if(N[0]==0){F--}else{F-=N[0]}if(F<0){F=0}}break;case"B":if(O==1){if(N[0]==0){F++}else{F+=N[0]}if(F>K.height){F=K.height}}break;case"C":if(O==1){if(N[0]==0){E++}else{E+=N[0]}if(E>K.width){E=K.width}}break;case"D":if(O==1){if(N[0]==0){E--}else{E-=N[0]}if(E<0){E=0}}break;case"d":if(O==1){F=N[0]-1;if(F>K.height){F=K.height}if(F<0){F=0}}break;case"G":if(O==1){E=N[0]-1;if(E<0){E=0}if(E>(K.width-1)){E=(K.width-1)}}break;case"P":var V=1;if(O==1){V=N[0]}for(S=E;S<K.width-V;S++){G[F][S]=G[F][S+V];q[F][S]=q[F][S+V]}for(S=(K.width-V);S<K.width;S++){G[F][S]=" ";q[F][S]=(7<<6)}break;case"L":var T=1;if(O==1){T=N[0]}if(T==0){T=1}for(W=r[1];W>=F+T;W--){G[W]=G[W-T];q[W]=q[W-T]}for(W=F;W<F+T;W++){G[W]=[];q[W]=[];for(V=0;V<K.width;V++){G[W][V]=" ";q[W][V]=(7<<6)}}break;case"J":if(O==1&&N[0]==2){K.TermClear((t<<12)+(u<<6));E=0;F=0;M=[]}else{if(O==0||O==1&&N[0]==0){e();for(S=F+1;S<K.height;S++){g(S)}}else{if(O==1&&N[0]==1){e();for(S=0;S<F-1;S++){g(S)}}}}break;case"H":if(O==2){if(N[0]<1){N[0]=1}if(N[1]<1){N[1]=1}if(N[0]>K.height){N[0]=K.height}if(N[1]>K.width){N[1]=K.width}F=N[0]-1;E=N[1]-1}else{F=0;E=0}break;case"m":for(S=0;S<O;S++){if(!N[S]||N[S]==0){t=0;u=7;v=0}else{if(N[S]==1){if(u<8){u+=8}}else{if(N[S]==2||N[S]==22){if(u>=8){u-=8}}else{if(N[S]==7){v=2}else{if(N[S]==27){v=0}else{if(N[S]>=30&&N[S]<=37){var P=(u>=8);u=(N[S]-30);if(P&&u<=8){u+=8}}else{if(N[S]>=40&&N[S]<=47){t=(N[S]-40)}else{if(N[S]>=90&&N[S]<=99){u=(N[S]-82)}else{if(N[S]>=100&&N[S]<=109){t=(N[S]-92)}}}}}}}}}}break;case"K":if(O==0||(O==1&&(!N[0]||N[0]==0))){e()}else{if(O==1){if(N[0]==1){d()}else{if(N[0]==2){g(F)}}}}break;case"h":z=true;break;case"l":z=false;break;case"r":if(O==2){r=[N[0]-1,N[1]-1]}if(r[0]<0){r[0]=0}if(r[0]>(K.height-1)){r[0]=(K.height-1)}if(r[1]<0){r[1]=0}if(r[1]>(K.height-1)){r[1]=(K.height-1)}if(r[0]>r[1]){r[0]=r[1]}break;case"S":var V=1;if(O==1){V=N[0]}for(var W=r[0];W<=r[1]-V;W++){for(var X=0;X<K.width;X++){G[W][X]=G[W+V][X];q[W][X]=q[W+V][X]}}for(var W=r[1]-V+1;W<r[1];W++){for(var X=0;X<K.width;X++){G[W][X]=" ";q[W][X]=(7<<6)}}break;case"M":var V=1;if(O==1){V=N[0]}for(var W=F;W<=r[1]-V;W++){for(var X=0;X<K.width;X++){G[W][X]=G[W+V][X];q[W][X]=q[W+V][X]}}for(var W=r[1]-V+1;W<r[1];W++){for(var X=0;X<K.width;X++){G[W][X]=" ";q[W][X]=(7<<6)}}break;case"T":var V=1;if(O==1){V=N[0]}for(var W=r[1];W>r[0]+V;W--){for(var X=0;X<K.width;X++){G[W][X]=G[W-V][X];q[W][X]=q[W-V][X]}}for(var W=r[0]+V;W>r[0];W--){for(var X=0;X<K.width;X++){G[W][X]=" ";q[W][X]=(7<<6)}}break;case"X":var V=1;if(O==1){V=N[0]}while((V>0)&&(E>0)){G[F][E]=" ";E--;V--}break;default:console.log("unknown terminal code",R,N,U);break}}}}K.ProcessVt100String=function(O){for(var N=0;N<O.length;N++){m(String.fromCharCode(O.charCodeAt(N)))}};function m(N){if(N=="\0"||N.charCodeAt()==7){return}var O=N.charCodeAt();switch(O){case 16:N=" ";break;case 24:N="?";break;case 25:N="?";break}if(E>K.width){E=K.width}if(F>(K.height-1)){F=(K.height-1)}switch(N){case"\b":if(E>0){E--;if(b){w(" ")}}break;case"\t":var P=8-(E%8);for(var R=0;R<P;R++){m(" ")}break;case"\n":F++;if(F>r[1]){K.recordLineTobackBuffer(0);A(1);F=r[1]}if(K.lineFeed="\r"){E=0}break;case"\r":E=0;break;default:if(E>=K.width){E=0;if(z){F++}if(F>=(K.height-1)){A(1);F=(K.height-1)}}w(N);E++;break}}function w(N){G[F][E]=N;q[F][E]=(u<<6)+(t<<12)+v}K.TermClear=function(N){for(var P=0;P<K.height;P++){for(var O=0;O<K.width;O++){G[P][O]=" ";q[P][O]=N}}M=[]};K.TermResetScreen=function(){v=0;u=7;t=0;z=c=true;E=F=0;b=false;r=[0,(K.height-1)];a=false;K.TermClear(7<<6)};function e(){var N=(u<<6)+(t<<12)+v;for(var O=E;O<K.width;O++){G[F][O]=" ";q[F][O]=N}}function d(){var N=(u<<6)+(t<<12)+v;for(var O=0;O<E;O++){G[F][O]=" ";q[F][O]=N}}function g(N){var O=(u<<6)+(t<<12)+v;for(var P=0;P<K.width;P++){G[N][P]=" ";q[N][P]=O}}K.TermSendKeys=function(N){if(K.debugmode==2){console.log("TSend("+N.length+"): "+rstr2hex(N),N)}K.parent.send(N)};K.TermSendKey=function(N){if(K.debugmode==2){console.log("TSend(1): "+rstr2hex(String.fromCharCode(N)),N)}K.parent.send(String.fromCharCode(N))};function A(N){var O,P;for(P=r[0];P<=r[1]-N;P++){G[P]=G[P+N];q[P]=q[P+N]}for(P=r[1]-N+1;P<=r[1];P++){G[P]=[];q[P]=[];for(O=0;O<K.width;O++){G[P][O]=" ";q[P][O]=(7<<6)}}}K.TermHandleKeys=function(N){if(!N.ctrlKey){if(N.which==127){K.TermSendKey(8)}else{if(N.which==13){K.TermSendKeys(K.lineFeed)}else{if(N.which!=0){K.TermSendKey(N.which)}}}return false}if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}};K.TermHandleKeyUp=function(N){if((N.which!=8)&&(N.which!=32)&&(N.which!=9)){return true}if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}return false};K.TermHandleKeyDown=function(N){if((N.which>=65)&&(N.which<=90)&&(N.ctrlKey==true)){K.TermSendKey(N.which-64);if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}return}if(N.which==27){K.TermSendKeys(String.fromCharCode(27));return true}if(a==true){if(N.which==37){K.TermSendKeys(String.fromCharCode(27,79,68));return true}if(N.which==38){K.TermSendKeys(String.fromCharCode(27,79,65));return true}if(N.which==39){K.TermSendKeys(String.fromCharCode(27,79,67));return true}if(N.which==40){K.TermSendKeys(String.fromCharCode(27,79,66));return true}}else{if(N.which==37){K.TermSendKeys(String.fromCharCode(27,91,68));return true}if(N.which==38){K.TermSendKeys(String.fromCharCode(27,91,65));return true}if(N.which==39){K.TermSendKeys(String.fromCharCode(27,91,67));return true}if(N.which==40){K.TermSendKeys(String.fromCharCode(27,91,66));return true}}if(N.which==33){K.TermSendKeys(String.fromCharCode(27,91,53,126));return true}if(N.which==34){K.TermSendKeys(String.fromCharCode(27,91,54,126));return true}if(N.which==35){K.TermSendKeys(String.fromCharCode(27,91,70));return true}if(N.which==36){K.TermSendKeys(String.fromCharCode(27,91,72));return true}if(N.which==45){K.TermSendKeys(String.fromCharCode(27,91,50,126));return true}if(N.which==46){K.TermSendKeys(String.fromCharCode(27,91,51,126));return true}if(N.which==9){K.TermSendKeys("\t");if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}return true}if(N.which!=8&&N.which!=32&&N.which!=9){return true}K.TermSendKey(N.which);if(N.preventDefault){N.preventDefault()}if(N.stopPropagation){N.stopPropagation()}return false};K.recordLineTobackBuffer=function(R){var O="",N="";var P=K.TermDrawLine(N,R,O);N=P[0];O=P[1];M.push(N+O+"<br>")};K.TermDrawLine=function(N,W,P){var R,O,S=1,U,V;for(var T=0;T<K.width;++T){R=q[W][T];if(E==T&&F==W&&c){R|=H}if(R!=S){N+=P;P="";U=6;V=12;if(R&H){U=12;V=6}N+='<span style="color:#'+s[(R>>U)&63]+";background-color:#"+s[(R>>V)&63];if(R&I){N+=";text-decoration:underline"}N+=';">';P="</span>"+P;S=R}O=G[W][T];switch(O){case"&":N+="&";break;case"<":N+="<";break;case">":N+=">";break;case" ":N+=" ";break;default:N+=O;break}}return[N,P]};K.TermDraw=function(){var P="",O="";for(var S=0;S<K.height;++S){var R=K.TermDrawLine(O,S,P);O=R[0];P=R[1];if(S!=(K.height-1)){O+="<br>"}}if(M.length>800){M=M.slice(M.length-800)}var N=M.join("");K.DivElement.innerHTML="<font size='4'><b>"+N+O+P+"</b></font>";K.DivElement.scrollTop=K.DivElement.scrollHeight;if(K.heightLock==0){setTimeout(K.TermLockHeight,10)}};K.TermLockHeight=function(){K.heightLock=K.DivElement.clientHeight;K.DivElement.style.height=K.DivElement.parentNode.style.height=K.heightLock+"px";K.DivElement.style["overflow-y"]="scroll"};K.TermInit=function(){K.TermResetScreen()};K.heightLock=0;K.DivElement.style.height="";if((L!=null)&&(L.width!=null)&&(L.height!=null)){K.Init(L.width,L.height)}else{K.Init()}return K};var ZLIB=(ZLIB||{});if(typeof ZLIB.common_initialized==="undefined"){ZLIB.Z_NO_FLUSH=0;ZLIB.Z_PARTIAL_FLUSH=1;ZLIB.Z_SYNC_FLUSH=2;ZLIB.Z_FULL_FLUSH=3;ZLIB.Z_FINISH=4;ZLIB.Z_BLOCK=5;ZLIB.Z_TREES=6;ZLIB.Z_OK=0;ZLIB.Z_STREAM_END=1;ZLIB.Z_NEED_DICT=2;ZLIB.Z_ERRNO=(-1);ZLIB.Z_STREAM_ERROR=(-2);ZLIB.Z_DATA_ERROR=(-3);ZLIB.Z_MEM_ERROR=(-4);ZLIB.Z_BUF_ERROR=(-5);ZLIB.Z_VERSION_ERROR=(-6);ZLIB.Z_DEFLATED=8;ZLIB.z_stream=function(){this.next_in=0;this.avail_in=0;this.total_in=0;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg=null;this.state=null;this.data_type=0;this.adler=0;this.input_data="";this.output_data="";this.error=0;this.checksum_function=null};ZLIB.gz_header=function(){this.text=0;this.time=0;this.xflags=0;this.os=255;this.extra=null;this.extra_len=0;this.extra_max=0;this.name=null;this.name_max=0;this.comment=null;this.comm_max=0;this.hcrc=0;this.done=0};ZLIB.common_initialized=true}if(typeof ZLIB==="undefined"){alert("ZLIB is not defined. SRC zlib.js before zlib-inflate.js")}(function(){var o=15;var G=0;var D=1;var am=2;var af=3;var A=4;var B=5;var ac=6;var j=7;var F=8;var q=9;var p=10;var an=11;var ao=12;var aj=13;var l=14;var k=15;var al=16;var W=17;var g=18;var S=19;var R=20;var T=21;var r=22;var s=23;var aa=24;var Y=25;var d=26;var V=27;var v=28;var a=29;var ab=30;var ak=31;var z=852;var y=592;var x=(z+y);var h=0;var X=1;var u=2;var N=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var O=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,203,69];var L=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var M=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];ZLIB.inflate_copyright=" inflate 1.2.6 Copyright 1995-2012 Mark Adler ";function K(aR,aV){var aM=15;var aU=aR.next;var at=(aV==u?aR.distbits:aR.lenbits);var aX=aR.work;var aH=aR.lens;var aI=(aV==u?aR.nlen:0);var aS=aR.codes;var au;if(aV==X){au=aR.nlen}else{if(aV==u){au=aR.ndist}else{au=19}}var aG;var aT;var aN,aL;var aQ;var aw;var ax;var aF;var aW;var aD;var aE;var aB;var aJ;var aK;var aC;var aO;var aq;var ar;var az;var aA;var ay;var av=new Array(aM+1);var aP=new Array(aM+1);for(aG=0;aG<=aM;aG++){av[aG]=0}for(aT=0;aT<au;aT++){av[aH[aI+aT]]++}aQ=at;for(aL=aM;aL>=1;aL--){if(av[aL]!=0){break}}if(aQ>aL){aQ=aL}if(aL==0){aC={op:64,bits:1,val:0};aS[aU++]=aC;aS[aU++]=aC;if(aV==u){aR.distbits=1}else{aR.lenbits=1}aR.next=aU;return 0}for(aN=1;aN<aL;aN++){if(av[aN]!=0){break}}if(aQ<aN){aQ=aN}aF=1;for(aG=1;aG<=aM;aG++){aF<<=1;aF-=av[aG];if(aF<0){return -1}}if(aF>0&&(aV==h||aL!=1)){aR.next=aU;return -1}aP[1]=0;for(aG=1;aG<aM;aG++){aP[aG+1]=aP[aG]+av[aG]}for(aT=0;aT<au;aT++){if(aH[aI+aT]!=0){aX[aP[aH[aI+aT]]++]=aT}}switch(aV){case h:aq=az=aX;ar=0;aA=0;ay=19;break;case X:aq=N;ar=-257;az=O;aA=-257;ay=256;break;default:aq=L;az=M;ar=0;aA=0;ay=-1}aD=0;aT=0;aG=aN;aO=aU;aw=aQ;ax=0;aJ=-1;aW=1<<aQ;aK=aW-1;if((aV==X&&aW>=z)||(aV==u&&aW>=y)){aR.next=aU;return 1}for(;;){aC={op:0,bits:aG-ax,val:0};if(aX[aT]<ay){aC.val=aX[aT]}else{if(aX[aT]>ay){aC.op=az[aA+aX[aT]];aC.val=aq[ar+aX[aT]]}else{aC.op=32+64}}aE=1<<(aG-ax);aB=1<<aw;aN=aB;do{aB-=aE;aS[aO+(aD>>>ax)+aB]=aC}while(aB!=0);aE=1<<(aG-1);while(aD&aE){aE>>>=1}if(aE!=0){aD&=aE-1;aD+=aE}else{aD=0}aT++;if(--(av[aG])==0){if(aG==aL){break}aG=aH[aI+aX[aT]]}if(aG>aQ&&(aD&aK)!=aJ){if(ax==0){ax=aQ}aO+=aN;aw=aG-ax;aF=(1<<aw);while(aw+ax<aL){aF-=av[aw+ax];if(aF<=0){break}aw++;aF<<=1}aW+=1<<aw;if((aV==X&&aW>=z)||(aV==u&&aW>=y)){aR.next=aU;return 1}aJ=aD&aK;aS[aU+aJ]={op:aw,bits:aQ,val:aO-aU}}}if(aD!=0){aS[aO+aD]={op:64,bits:aG-ax,val:0}}aR.next=aU+aW;if(aV==u){aR.distbits=aQ}else{aR.lenbits=aQ}return 0}function H(aN,aL){var aM;var aC;var aI;var aD;var aK;var aq;var ax;var aR;var aO;var aQ;var aP;var aB;var ar;var at;var aE;var au;var aH;var aw;var aA;var aJ;var aF;var av;var az=-1;var ay=-1;aM=aN.state;aC=aN.input_data;aI=aN.next_in;aD=aI+aN.avail_in-5;aK=aN.next_out;aq=aK-(aL-aN.avail_out);ax=aK+(aN.avail_out-257);aR=aM.wsize;aO=aM.whave;aQ=aM.wnext;aP=aM.window;aB=aM.hold;ar=aM.bits;at=aM.codes;aE=aM.lencode;au=aM.distcode;aH=(1<<aM.lenbits)-1;aw=(1<<aM.distbits)-1;loop:do{if(ar<15){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8;aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8}aA=at[aE+(aB&aH)];dolen:while(true){aJ=aA.bits;aB>>>=aJ;ar-=aJ;aJ=aA.op;if(aJ==0){aN.output_data+=String.fromCharCode(aA.val);aK++}else{if(aJ&16){aF=aA.val;aJ&=15;if(aJ){if(ar<aJ){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8}aF+=aB&((1<<aJ)-1);aB>>>=aJ;ar-=aJ}if(ar<15){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8;aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8}aA=at[au+(aB&aw)];dodist:while(true){aJ=aA.bits;aB>>>=aJ;ar-=aJ;aJ=aA.op;if(aJ&16){av=aA.val;aJ&=15;if(ar<aJ){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8;if(ar<aJ){aB+=(aC.charCodeAt(aI++)&255)<<ar;ar+=8}}av+=aB&((1<<aJ)-1);aB>>>=aJ;ar-=aJ;aJ=aK-aq;if(av>aJ){aJ=av-aJ;if(aJ>aO){if(aM.sane){aN.msg="invalid distance too far back";aM.mode=a;break loop}}az=0;ay=-1;if(aQ==0){az+=aR-aJ;if(aJ<aF){aF-=aJ;aN.output_data+=aP.substring(az,az+aJ);aK+=aJ;aJ=0;az=-1;ay=aK-av}}else{az+=aQ-aJ;if(aJ<aF){aF-=aJ;aN.output_data+=aP.substring(az,az+aJ);aK+=aJ;az=-1;ay=aK-av}}}else{az=-1;ay=aK-av}if(az>=0){aN.output_data+=aP.substring(az,az+aF);aK+=aF;az+=aF}else{var aG=aF;if(aG>aK-ay){aG=aK-ay}aN.output_data+=aN.output_data.substring(ay,ay+aG);aK+=aG;aF-=aG;ay+=aG;aK+=aF;while(aF>2){aN.output_data+=aN.output_data.charAt(ay++);aN.output_data+=aN.output_data.charAt(ay++);aN.output_data+=aN.output_data.charAt(ay++);aF-=3}if(aF){aN.output_data+=aN.output_data.charAt(ay++);if(aF>1){aN.output_data+=aN.output_data.charAt(ay++)}}}}else{if((aJ&64)==0){aA=at[au+(aA.val+(aB&((1<<aJ)-1)))];continue dodist}else{aN.msg="invalid distance code";aM.mode=a;break loop}}break dodist}}else{if((aJ&64)==0){aA=at[aE+(aA.val+(aB&((1<<aJ)-1)))];continue dolen}else{if(aJ&32){aM.mode=an;break loop}else{aN.msg="invalid literal/length code";aM.mode=a;break loop}}}}break dolen}}while(aI<aD&&aK<ax);aF=ar>>>3;aI-=aF;ar-=aF<<3;aB&=(1<<ar)-1;aN.next_in=aI;aN.next_out=aK;aN.avail_in=(aI<aD?5+(aD-aI):5-(aI-aD));aN.avail_out=(aK<ax?257+(ax-aK):257-(aK-ax));aM.hold=aB;aM.bits=ar}function ae(at){var ar;var aq=new Array(at);for(ar=0;ar<at;ar++){aq[ar]=0}return aq}function E(at,ar,aq){return(at&&(ar in at))?at[ar]:aq}function e(){return 0}function J(){var ar;this.mode=0;this.last=0;this.wrap=0;this.havedict=0;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=0;this.distcode=0;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=0;this.lens=ae(320);this.work=ae(288);this.codes=new Array(x);var aq={op:0,bits:0,val:0};for(ar=0;ar<x;ar++){this.codes[ar]=aq}this.sane=0;this.back=0;this.was=0}ZLIB.inflateResetKeep=function(ar){var aq;if(!ar||!ar.state){return ZLIB.Z_STREAM_ERROR}aq=ar.state;ar.total_in=ar.total_out=aq.total=0;ar.msg=null;if(aq.wrap){ar.adler=aq.wrap&1}aq.mode=G;aq.last=0;aq.havedict=0;aq.dmax=32768;aq.head=null;aq.hold=0;aq.bits=0;aq.lencode=0;aq.distcode=0;aq.next=0;aq.sane=1;aq.back=-1;return ZLIB.Z_OK};ZLIB.inflateReset=function(ar,at){var au;var aq;if(!ar||!ar.state){return ZLIB.Z_STREAM_ERROR}aq=ar.state;if(typeof at==="undefined"){at=o}if(at<0){au=0;at=-at}else{au=(at>>>4)+1;if(at<48){at&=15}}if(au==1&&(typeof ZLIB.adler32==="function")){ar.checksum_function=ZLIB.adler32}else{if(au==2&&(typeof ZLIB.crc32==="function")){ar.checksum_function=ZLIB.crc32}else{ar.checksum_function=e}}if(at&&(at<8||at>15)){return ZLIB.Z_STREAM_ERROR}if(aq.window&&aq.wbits!=at){aq.window=null}aq.wrap=au;aq.wbits=at;aq.wsize=0;aq.whave=0;aq.wnext=0;return ZLIB.inflateResetKeep(ar)};ZLIB.inflateInit=function(ar){var aq=new ZLIB.z_stream();aq.state=new J();ZLIB.inflateReset(aq,ar);return aq};ZLIB.inflatePrime=function(at,aq,au){var ar;if(!at||!at.state){return ZLIB.Z_STREAM_ERROR}ar=at.state;if(aq<0){ar.hold=0;ar.bits=0;return ZLIB.Z_OK}if(aq>16||ar.bits+aq>32){return ZLIB.Z_STREAM_ERROR}au&=(1<<aq)-1;ar.hold+=au<<ar.bits;ar.bits+=aq;return ZLIB.Z_OK};var U=null;var t=null;function C(ar){var aq;if(!U){U=[{op:96,bits:7,val:0},{op:0,bits:8,val:80},{op:0,bits:8,val:16},{op:20,bits:8,val:115},{op:18,bits:7,val:31},{op:0,bits:8,val:112},{op:0,bits:8,val:48},{op:0,bits:9,val:192},{op:16,bits:7,val:10},{op:0,bits:8,val:96},{op:0,bits:8,val:32},{op:0,bits:9,val:160},{op:0,bits:8,val:0},{op:0,bits:8,val:128},{op:0,bits:8,val:64},{op:0,bits:9,val:224},{op:16,bits:7,val:6},{op:0,bits:8,val:88},{op:0,bits:8,val:24},{op:0,bits:9,val:144},{op:19,bits:7,val:59},{op:0,bits:8,val:120},{op:0,bits:8,val:56},{op:0,bits:9,val:208},{op:17,bits:7,val:17},{op:0,bits:8,val:104},{op:0,bits:8,val:40},{op:0,bits:9,val:176},{op:0,bits:8,val:8},{op:0,bits:8,val:136},{op:0,bits:8,val:72},{op:0,bits:9,val:240},{op:16,bits:7,val:4},{op:0,bits:8,val:84},{op:0,bits:8,val:20},{op:21,bits:8,val:227},{op:19,bits:7,val:43},{op:0,bits:8,val:116},{op:0,bits:8,val:52},{op:0,bits:9,val:200},{op:17,bits:7,val:13},{op:0,bits:8,val:100},{op:0,bits:8,val:36},{op:0,bits:9,val:168},{op:0,bits:8,val:4},{op:0,bits:8,val:132},{op:0,bits:8,val:68},{op:0,bits:9,val:232},{op:16,bits:7,val:8},{op:0,bits:8,val:92},{op:0,bits:8,val:28},{op:0,bits:9,val:152},{op:20,bits:7,val:83},{op:0,bits:8,val:124},{op:0,bits:8,val:60},{op:0,bits:9,val:216},{op:18,bits:7,val:23},{op:0,bits:8,val:108},{op:0,bits:8,val:44},{op:0,bits:9,val:184},{op:0,bits:8,val:12},{op:0,bits:8,val:140},{op:0,bits:8,val:76},{op:0,bits:9,val:248},{op:16,bits:7,val:3},{op:0,bits:8,val:82},{op:0,bits:8,val:18},{op:21,bits:8,val:163},{op:19,bits:7,val:35},{op:0,bits:8,val:114},{op:0,bits:8,val:50},{op:0,bits:9,val:196},{op:17,bits:7,val:11},{op:0,bits:8,val:98},{op:0,bits:8,val:34},{op:0,bits:9,val:164},{op:0,bits:8,val:2},{op:0,bits:8,val:130},{op:0,bits:8,val:66},{op:0,bits:9,val:228},{op:16,bits:7,val:7},{op:0,bits:8,val:90},{op:0,bits:8,val:26},{op:0,bits:9,val:148},{op:20,bits:7,val:67},{op:0,bits:8,val:122},{op:0,bits:8,val:58},{op:0,bits:9,val:212},{op:18,bits:7,val:19},{op:0,bits:8,val:106},{op:0,bits:8,val:42},{op:0,bits:9,val:180},{op:0,bits:8,val:10},{op:0,bits:8,val:138},{op:0,bits:8,val:74},{op:0,bits:9,val:244},{op:16,bits:7,val:5},{op:0,bits:8,val:86},{op:0,bits:8,val:22},{op:64,bits:8,val:0},{op:19,bits:7,val:51},{op:0,bits:8,val:118},{op:0,bits:8,val:54},{op:0,bits:9,val:204},{op:17,bits:7,val:15},{op:0,bits:8,val:102},{op:0,bits:8,val:38},{op:0,bits:9,val:172},{op:0,bits:8,val:6},{op:0,bits:8,val:134},{op:0,bits:8,val:70},{op:0,bits:9,val:236},{op:16,bits:7,val:9},{op:0,bits:8,val:94},{op:0,bits:8,val:30},{op:0,bits:9,val:156},{op:20,bits:7,val:99},{op:0,bits:8,val:126},{op:0,bits:8,val:62},{op:0,bits:9,val:220},{op:18,bits:7,val:27},{op:0,bits:8,val:110},{op:0,bits:8,val:46},{op:0,bits:9,val:188},{op:0,bits:8,val:14},{op:0,bits:8,val:142},{op:0,bits:8,val:78},{op:0,bits:9,val:252},{op:96,bits:7,val:0},{op:0,bits:8,val:81},{op:0,bits:8,val:17},{op:21,bits:8,val:131},{op:18,bits:7,val:31},{op:0,bits:8,val:113},{op:0,bits:8,val:49},{op:0,bits:9,val:194},{op:16,bits:7,val:10},{op:0,bits:8,val:97},{op:0,bits:8,val:33},{op:0,bits:9,val:162},{op:0,bits:8,val:1},{op:0,bits:8,val:129},{op:0,bits:8,val:65},{op:0,bits:9,val:226},{op:16,bits:7,val:6},{op:0,bits:8,val:89},{op:0,bits:8,val:25},{op:0,bits:9,val:146},{op:19,bits:7,val:59},{op:0,bits:8,val:121},{op:0,bits:8,val:57},{op:0,bits:9,val:210},{op:17,bits:7,val:17},{op:0,bits:8,val:105},{op:0,bits:8,val:41},{op:0,bits:9,val:178},{op:0,bits:8,val:9},{op:0,bits:8,val:137},{op:0,bits:8,val:73},{op:0,bits:9,val:242},{op:16,bits:7,val:4},{op:0,bits:8,val:85},{op:0,bits:8,val:21},{op:16,bits:8,val:258},{op:19,bits:7,val:43},{op:0,bits:8,val:117},{op:0,bits:8,val:53},{op:0,bits:9,val:202},{op:17,bits:7,val:13},{op:0,bits:8,val:101},{op:0,bits:8,val:37},{op:0,bits:9,val:170},{op:0,bits:8,val:5},{op:0,bits:8,val:133},{op:0,bits:8,val:69},{op:0,bits:9,val:234},{op:16,bits:7,val:8},{op:0,bits:8,val:93},{op:0,bits:8,val:29},{op:0,bits:9,val:154},{op:20,bits:7,val:83},{op:0,bits:8,val:125},{op:0,bits:8,val:61},{op:0,bits:9,val:218},{op:18,bits:7,val:23},{op:0,bits:8,val:109},{op:0,bits:8,val:45},{op:0,bits:9,val:186},{op:0,bits:8,val:13},{op:0,bits:8,val:141},{op:0,bits:8,val:77},{op:0,bits:9,val:250},{op:16,bits:7,val:3},{op:0,bits:8,val:83},{op:0,bits:8,val:19},{op:21,bits:8,val:195},{op:19,bits:7,val:35},{op:0,bits:8,val:115},{op:0,bits:8,val:51},{op:0,bits:9,val:198},{op:17,bits:7,val:11},{op:0,bits:8,val:99},{op:0,bits:8,val:35},{op:0,bits:9,val:166},{op:0,bits:8,val:3},{op:0,bits:8,val:131},{op:0,bits:8,val:67},{op:0,bits:9,val:230},{op:16,bits:7,val:7},{op:0,bits:8,val:91},{op:0,bits:8,val:27},{op:0,bits:9,val:150},{op:20,bits:7,val:67},{op:0,bits:8,val:123},{op:0,bits:8,val:59},{op:0,bits:9,val:214},{op:18,bits:7,val:19},{op:0,bits:8,val:107},{op:0,bits:8,val:43},{op:0,bits:9,val:182},{op:0,bits:8,val:11},{op:0,bits:8,val:139},{op:0,bits:8,val:75},{op:0,bits:9,val:246},{op:16,bits:7,val:5},{op:0,bits:8,val:87},{op:0,bits:8,val:23},{op:64,bits:8,val:0},{op:19,bits:7,val:51},{op:0,bits:8,val:119},{op:0,bits:8,val:55},{op:0,bits:9,val:206},{op:17,bits:7,val:15},{op:0,bits:8,val:103},{op:0,bits:8,val:39},{op:0,bits:9,val:174},{op:0,bits:8,val:7},{op:0,bits:8,val:135},{op:0,bits:8,val:71},{op:0,bits:9,val:238},{op:16,bits:7,val:9},{op:0,bits:8,val:95},{op:0,bits:8,val:31},{op:0,bits:9,val:158},{op:20,bits:7,val:99},{op:0,bits:8,val:127},{op:0,bits:8,val:63},{op:0,bits:9,val:222},{op:18,bits:7,val:27},{op:0,bits:8,val:111},{op:0,bits:8,val:47},{op:0,bits:9,val:190},{op:0,bits:8,val:15},{op:0,bits:8,val:143},{op:0,bits:8,val:79},{op:0,bits:9,val:254},{op:96,bits:7,val:0},{op:0,bits:8,val:80},{op:0,bits:8,val:16},{op:20,bits:8,val:115},{op:18,bits:7,val:31},{op:0,bits:8,val:112},{op:0,bits:8,val:48},{op:0,bits:9,val:193},{op:16,bits:7,val:10},{op:0,bits:8,val:96},{op:0,bits:8,val:32},{op:0,bits:9,val:161},{op:0,bits:8,val:0},{op:0,bits:8,val:128},{op:0,bits:8,val:64},{op:0,bits:9,val:225},{op:16,bits:7,val:6},{op:0,bits:8,val:88},{op:0,bits:8,val:24},{op:0,bits:9,val:145},{op:19,bits:7,val:59},{op:0,bits:8,val:120},{op:0,bits:8,val:56},{op:0,bits:9,val:209},{op:17,bits:7,val:17},{op:0,bits:8,val:104},{op:0,bits:8,val:40},{op:0,bits:9,val:177},{op:0,bits:8,val:8},{op:0,bits:8,val:136},{op:0,bits:8,val:72},{op:0,bits:9,val:241},{op:16,bits:7,val:4},{op:0,bits:8,val:84},{op:0,bits:8,val:20},{op:21,bits:8,val:227},{op:19,bits:7,val:43},{op:0,bits:8,val:116},{op:0,bits:8,val:52},{op:0,bits:9,val:201},{op:17,bits:7,val:13},{op:0,bits:8,val:100},{op:0,bits:8,val:36},{op:0,bits:9,val:169},{op:0,bits:8,val:4},{op:0,bits:8,val:132},{op:0,bits:8,val:68},{op:0,bits:9,val:233},{op:16,bits:7,val:8},{op:0,bits:8,val:92},{op:0,bits:8,val:28},{op:0,bits:9,val:153},{op:20,bits:7,val:83},{op:0,bits:8,val:124},{op:0,bits:8,val:60},{op:0,bits:9,val:217},{op:18,bits:7,val:23},{op:0,bits:8,val:108},{op:0,bits:8,val:44},{op:0,bits:9,val:185},{op:0,bits:8,val:12},{op:0,bits:8,val:140},{op:0,bits:8,val:76},{op:0,bits:9,val:249},{op:16,bits:7,val:3},{op:0,bits:8,val:82},{op:0,bits:8,val:18},{op:21,bits:8,val:163},{op:19,bits:7,val:35},{op:0,bits:8,val:114},{op:0,bits:8,val:50},{op:0,bits:9,val:197},{op:17,bits:7,val:11},{op:0,bits:8,val:98},{op:0,bits:8,val:34},{op:0,bits:9,val:165},{op:0,bits:8,val:2},{op:0,bits:8,val:130},{op:0,bits:8,val:66},{op:0,bits:9,val:229},{op:16,bits:7,val:7},{op:0,bits:8,val:90},{op:0,bits:8,val:26},{op:0,bits:9,val:149},{op:20,bits:7,val:67},{op:0,bits:8,val:122},{op:0,bits:8,val:58},{op:0,bits:9,val:213},{op:18,bits:7,val:19},{op:0,bits:8,val:106},{op:0,bits:8,val:42},{op:0,bits:9,val:181},{op:0,bits:8,val:10},{op:0,bits:8,val:138},{op:0,bits:8,val:74},{op:0,bits:9,val:245},{op:16,bits:7,val:5},{op:0,bits:8,val:86},{op:0,bits:8,val:22},{op:64,bits:8,val:0},{op:19,bits:7,val:51},{op:0,bits:8,val:118},{op:0,bits:8,val:54},{op:0,bits:9,val:205},{op:17,bits:7,val:15},{op:0,bits:8,val:102},{op:0,bits:8,val:38},{op:0,bits:9,val:173},{op:0,bits:8,val:6},{op:0,bits:8,val:134},{op:0,bits:8,val:70},{op:0,bits:9,val:237},{op:16,bits:7,val:9},{op:0,bits:8,val:94},{op:0,bits:8,val:30},{op:0,bits:9,val:157},{op:20,bits:7,val:99},{op:0,bits:8,val:126},{op:0,bits:8,val:62},{op:0,bits:9,val:221},{op:18,bits:7,val:27},{op:0,bits:8,val:110},{op:0,bits:8,val:46},{op:0,bits:9,val:189},{op:0,bits:8,val:14},{op:0,bits:8,val:142},{op:0,bits:8,val:78},{op:0,bits:9,val:253},{op:96,bits:7,val:0},{op:0,bits:8,val:81},{op:0,bits:8,val:17},{op:21,bits:8,val:131},{op:18,bits:7,val:31},{op:0,bits:8,val:113},{op:0,bits:8,val:49},{op:0,bits:9,val:195},{op:16,bits:7,val:10},{op:0,bits:8,val:97},{op:0,bits:8,val:33},{op:0,bits:9,val:163},{op:0,bits:8,val:1},{op:0,bits:8,val:129},{op:0,bits:8,val:65},{op:0,bits:9,val:227},{op:16,bits:7,val:6},{op:0,bits:8,val:89},{op:0,bits:8,val:25},{op:0,bits:9,val:147},{op:19,bits:7,val:59},{op:0,bits:8,val:121},{op:0,bits:8,val:57},{op:0,bits:9,val:211},{op:17,bits:7,val:17},{op:0,bits:8,val:105},{op:0,bits:8,val:41},{op:0,bits:9,val:179},{op:0,bits:8,val:9},{op:0,bits:8,val:137},{op:0,bits:8,val:73},{op:0,bits:9,val:243},{op:16,bits:7,val:4},{op:0,bits:8,val:85},{op:0,bits:8,val:21},{op:16,bits:8,val:258},{op:19,bits:7,val:43},{op:0,bits:8,val:117},{op:0,bits:8,val:53},{op:0,bits:9,val:203},{op:17,bits:7,val:13},{op:0,bits:8,val:101},{op:0,bits:8,val:37},{op:0,bits:9,val:171},{op:0,bits:8,val:5},{op:0,bits:8,val:133},{op:0,bits:8,val:69},{op:0,bits:9,val:235},{op:16,bits:7,val:8},{op:0,bits:8,val:93},{op:0,bits:8,val:29},{op:0,bits:9,val:155},{op:20,bits:7,val:83},{op:0,bits:8,val:125},{op:0,bits:8,val:61},{op:0,bits:9,val:219},{op:18,bits:7,val:23},{op:0,bits:8,val:109},{op:0,bits:8,val:45},{op:0,bits:9,val:187},{op:0,bits:8,val:13},{op:0,bits:8,val:141},{op:0,bits:8,val:77},{op:0,bits:9,val:251},{op:16,bits:7,val:3},{op:0,bits:8,val:83},{op:0,bits:8,val:19},{op:21,bits:8,val:195},{op:19,bits:7,val:35},{op:0,bits:8,val:115},{op:0,bits:8,val:51},{op:0,bits:9,val:199},{op:17,bits:7,val:11},{op:0,bits:8,val:99},{op:0,bits:8,val:35},{op:0,bits:9,val:167},{op:0,bits:8,val:3},{op:0,bits:8,val:131},{op:0,bits:8,val:67},{op:0,bits:9,val:231},{op:16,bits:7,val:7},{op:0,bits:8,val:91},{op:0,bits:8,val:27},{op:0,bits:9,val:151},{op:20,bits:7,val:67},{op:0,bits:8,val:123},{op:0,bits:8,val:59},{op:0,bits:9,val:215},{op:18,bits:7,val:19},{op:0,bits:8,val:107},{op:0,bits:8,val:43},{op:0,bits:9,val:183},{op:0,bits:8,val:11},{op:0,bits:8,val:139},{op:0,bits:8,val:75},{op:0,bits:9,val:247},{op:16,bits:7,val:5},{op:0,bits:8,val:87},{op:0,bits:8,val:23},{op:64,bits:8,val:0},{op:19,bits:7,val:51},{op:0,bits:8,val:119},{op:0,bits:8,val:55},{op:0,bits:9,val:207},{op:17,bits:7,val:15},{op:0,bits:8,val:103},{op:0,bits:8,val:39},{op:0,bits:9,val:175},{op:0,bits:8,val:7},{op:0,bits:8,val:135},{op:0,bits:8,val:71},{op:0,bits:9,val:239},{op:16,bits:7,val:9},{op:0,bits:8,val:95},{op:0,bits:8,val:31},{op:0,bits:9,val:159},{op:20,bits:7,val:99},{op:0,bits:8,val:127},{op:0,bits:8,val:63},{op:0,bits:9,val:223},{op:18,bits:7,val:27},{op:0,bits:8,val:111},{op:0,bits:8,val:47},{op:0,bits:9,val:191},{op:0,bits:8,val:15},{op:0,bits:8,val:143},{op:0,bits:8,val:79},{op:0,bits:9,val:255}]}if(!t){t=[{op:16,bits:5,val:1},{op:23,bits:5,val:257},{op:19,bits:5,val:17},{op:27,bits:5,val:4097},{op:17,bits:5,val:5},{op:25,bits:5,val:1025},{op:21,bits:5,val:65},{op:29,bits:5,val:16385},{op:16,bits:5,val:3},{op:24,bits:5,val:513},{op:20,bits:5,val:33},{op:28,bits:5,val:8193},{op:18,bits:5,val:9},{op:26,bits:5,val:2049},{op:22,bits:5,val:129},{op:64,bits:5,val:0},{op:16,bits:5,val:2},{op:23,bits:5,val:385},{op:19,bits:5,val:25},{op:27,bits:5,val:6145},{op:17,bits:5,val:7},{op:25,bits:5,val:1537},{op:21,bits:5,val:97},{op:29,bits:5,val:24577},{op:16,bits:5,val:4},{op:24,bits:5,val:769},{op:20,bits:5,val:49},{op:28,bits:5,val:12289},{op:18,bits:5,val:13},{op:26,bits:5,val:3073},{op:22,bits:5,val:193},{op:64,bits:5,val:0}]}ar.lencode=0;ar.distcode=512;for(aq=0;aq<512;aq++){ar.codes[aq]=U[aq]}for(aq=0;aq<32;aq++){ar.codes[aq+512]=t[aq]}ar.lenbits=9;ar.distbits=5}function ap(at){var ar=at.state;var aq=at.output_data.length;if(ar.window===null){ar.window=""}if(ar.wsize==0){ar.wsize=1<<ar.wbits}if(aq>=ar.wsize){ar.window=at.output_data.substring(aq-ar.wsize)}else{if(ar.whave+aq<ar.wsize){ar.window+=at.output_data}else{ar.window=ar.window.substring(ar.whave-(ar.wsize-aq))+at.output_data}}ar.whave=ar.window.length;if(ar.whave<ar.wsize){ar.wnext=ar.whave}else{ar.wnext=0}return 0}function m(ar,at){var aq=[at&255,(at>>>8)&255];ar.state.check=ar.checksum_function(ar.state.check,aq,0,2)}function n(ar,at){var aq=[at&255,(at>>>8)&255,(at>>>16)&255,(at>>>24)&255];ar.state.check=ar.checksum_function(ar.state.check,aq,0,4)}function Z(ar,aq){aq.strm=ar;aq.left=ar.avail_out;aq.next=ar.next_in;aq.have=ar.avail_in;aq.hold=ar.state.hold;aq.bits=ar.state.bits;return aq}function ah(aq){var ar=aq.strm;ar.next_in=aq.next;ar.avail_out=aq.left;ar.avail_in=aq.have;ar.state.hold=aq.hold;ar.state.bits=aq.bits}function P(aq){aq.hold=0;aq.bits=0}function ag(aq){if(aq.have==0){return false}aq.have--;aq.hold+=(aq.strm.input_data.charCodeAt(aq.next++)&255)<<aq.bits;aq.bits+=8;return true}function ad(ar,aq){while(ar.bits<aq){if(!ag(ar)){return false}}return true}function b(ar,aq){return ar.hold&((1<<aq)-1)}function w(ar,aq){ar.hold>>>=aq;ar.bits-=aq}function c(aq){aq.hold>>>=aq.bits&7;aq.bits-=aq.bits&7}function ai(aq){return((aq>>>24)&255)+((aq>>>8)&65280)+((aq&65280)<<8)+((aq&255)<<24)}var I=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];ZLIB.inflate=function(aD,at){var aC;var aB;var aq,az;var ar;var av=-1;var au=-1;var aw;var ax;var ay;var aA;if(!aD||!aD.state||(!aD.input_data&&aD.avail_in!=0)){return ZLIB.Z_STREAM_ERROR}aC=aD.state;if(aC.mode==an){aC.mode=ao}aB={};Z(aD,aB);aq=aB.have;az=aB.left;aA=ZLIB.Z_OK;inf_leave:for(;;){switch(aC.mode){case G:if(aC.wrap==0){aC.mode=ao;break}if(!ad(aB,16)){break inf_leave}if((aC.wrap&2)&&aB.hold==35615){aC.check=aD.checksum_function(0,null,0,0);m(aD,aB.hold);P(aB);aC.mode=D;break}aC.flags=0;if(aC.head!==null){aC.head.done=-1}if(!(aC.wrap&1)||((b(aB,8)<<8)+(aB.hold>>>8))%31){aD.msg="incorrect header check";aC.mode=a;break}if(b(aB,4)!=ZLIB.Z_DEFLATED){aD.msg="unknown compression method";aC.mode=a;break}w(aB,4);ay=b(aB,4)+8;if(aC.wbits==0){aC.wbits=ay}else{if(ay>aC.wbits){aD.msg="invalid window size";aC.mode=a;break}}aC.dmax=1<<ay;aD.adler=aC.check=aD.checksum_function(0,null,0,0);aC.mode=aB.hold&512?q:an;P(aB);break;case D:if(!ad(aB,16)){break inf_leave}aC.flags=aB.hold;if((aC.flags&255)!=ZLIB.Z_DEFLATED){aD.msg="unknown compression method";aC.mode=a;break}if(aC.flags&57344){aD.msg="unknown header flags set";aC.mode=a;break}if(aC.head!==null){aC.head.text=(aB.hold>>>8)&1}if(aC.flags&512){m(aD,aB.hold)}P(aB);aC.mode=am;case am:if(!ad(aB,32)){break inf_leave}if(aC.head!==null){aC.head.time=aB.hold}if(aC.flags&512){n(aD,aB.hold)}P(aB);aC.mode=af;case af:if(!ad(aB,16)){break inf_leave}if(aC.head!==null){aC.head.xflags=aB.hold&255;aC.head.os=aB.hold>>>8}if(aC.flags&512){m(aD,aB.hold)}P(aB);aC.mode=A;case A:if(aC.flags&1024){if(!ad(aB,16)){break inf_leave}aC.length=aB.hold;if(aC.head!==null){aC.head.extra_len=aB.hold}if(aC.flags&512){m(aD,aB.hold)}P(aB);aC.head.extra=""}else{if(aC.head!==null){aC.head.extra=null}}aC.mode=B;case B:if(aC.flags&1024){ar=aC.length;if(ar>aB.have){ar=aB.have}if(ar){if(aC.head!==null&&aC.head.extra!==null){ay=aC.head.extra_len-aC.length;aC.head.extra+=aD.input_data.substring(aB.next,aB.next+(ay+ar>aC.head.extra_max?aC.head.extra_max-ay:ar))}if(aC.flags&512){aC.check=aD.checksum_function(aC.check,aD.input_data,aB.next,ar)}aB.have-=ar;aB.next+=ar;aC.length-=ar}if(aC.length){break inf_leave}}aC.length=0;aC.mode=ac;case ac:if(aC.flags&2048){if(aB.have==0){break inf_leave}if(aC.head!==null&&aC.head.name===null){aC.head.name=""}ar=0;do{ay=aD.input_data.charAt(aB.next+ar);ar++;if(ay==="\0"){break}if(aC.head!==null&&aC.length<aC.head.name_max){aC.head.name+=ay;aC.length++}}while(ar<aB.have);if(aC.flags&512){aC.check=aD.checksum_function(aC.check,aD.input_data,aB.next,ar)}aB.have-=ar;aB.next+=ar;if(ay!=="\0"){break inf_leave}}else{if(aC.head!==null){aC.head.name=null}}aC.length=0;aC.mode=j;case j:if(aC.flags&4096){if(aB.have==0){break inf_leave}ar=0;if(aC.head!==null&&aC.head.comment===null){aC.head.comment=""}do{ay=aD.input_data.charAt(aB.next+ar);ar++;if(ay==="\0"){break}if(aC.head!==null&&aC.length<aC.head.comm_max){aC.head.comment+=ay;aC.length++}}while(ar<aB.have);if(aC.flags&512){aC.check=aD.checksum_function(aC.check,aD.input_data,aB.next,ar)}aB.have-=ar;aB.next+=ar;if(ay!=="\0"){break inf_leave}}else{if(aC.head!==null){aC.head.comment=null}}aC.mode=F;case F:if(aC.flags&512){if(!ad(aB,16)){break inf_leave}if(aB.hold!=(aC.check&65535)){aD.msg="header crc mismatch";aC.mode=a;break}P(aB)}if(aC.head!==null){aC.head.hcrc=(aC.flags>>>9)&1;aC.head.done=1}aD.adler=aC.check=aD.checksum_function(0,null,0,0);aC.mode=an;break;case q:if(!ad(aB,32)){break inf_leave}aD.adler=aC.check=ai(aB.hold);P(aB);aC.mode=p;case p:if(aC.havedict==0){ah(aB);return ZLIB.Z_NEED_DICT}aD.adler=aC.check=aD.checksum_function(0,null,0,0);aC.mode=an;case an:if(at==ZLIB.Z_BLOCK||at==ZLIB.Z_TREES){break inf_leave}case ao:if(aC.last){c(aB);aC.mode=d;break}if(!ad(aB,3)){break inf_leave}aC.last=b(aB,1);w(aB,1);switch(b(aB,2)){case 0:aC.mode=aj;break;case 1:C(aC);aC.mode=S;if(at==ZLIB.Z_TREES){w(aB,2);break inf_leave}break;case 2:aC.mode=al;break;case 3:aD.msg="invalid block type";aC.mode=a}w(aB,2);break;case aj:c(aB);if(!ad(aB,32)){break inf_leave}if((aB.hold&65535)!=(((aB.hold>>>16)&65535)^65535)){aD.msg="invalid stored block lengths";aC.mode=a;break}aC.length=aB.hold&65535;P(aB);aC.mode=l;if(at==ZLIB.Z_TREES){break inf_leave}case l:aC.mode=k;case k:ar=aC.length;if(ar){if(ar>aB.have){ar=aB.have}if(ar>aB.left){ar=aB.left}if(ar==0){break inf_leave}aD.output_data+=aD.input_data.substring(aB.next,aB.next+ar);aD.next_out+=ar;aB.have-=ar;aB.next+=ar;aB.left-=ar;aC.length-=ar;break}aC.mode=an;break;case al:if(!ad(aB,14)){break inf_leave}aC.nlen=b(aB,5)+257;w(aB,5);aC.ndist=b(aB,5)+1;w(aB,5);aC.ncode=b(aB,4)+4;w(aB,4);if(aC.nlen>286||aC.ndist>30){aD.msg="too many length or distance symbols";aC.mode=a;break}aC.have=0;aC.mode=W;case W:while(aC.have<aC.ncode){if(!ad(aB,3)){break inf_leave}var aE=b(aB,3);aC.lens[I[aC.have++]]=aE;w(aB,3)}while(aC.have<19){aC.lens[I[aC.have++]]=0}aC.next=0;aC.lencode=0;aC.lenbits=7;aA=K(aC,h);if(aA){aD.msg="invalid code lengths set";aC.mode=a;break}aC.have=0;aC.mode=g;case g:while(aC.have<aC.nlen+aC.ndist){for(;;){aw=aC.codes[aC.lencode+b(aB,aC.lenbits)];if(aw.bits<=aB.bits){break}if(!ag(aB)){break inf_leave}}if(aw.val<16){w(aB,aw.bits);aC.lens[aC.have++]=aw.val}else{if(aw.val==16){if(!ad(aB,aw.bits+2)){break inf_leave}w(aB,aw.bits);if(aC.have==0){aD.msg="invalid bit length repeat";aC.mode=a;break}ay=aC.lens[aC.have-1];ar=3+b(aB,2);w(aB,2)}else{if(aw.val==17){if(!ad(aB,aw.bits+3)){break inf_leave}w(aB,aw.bits);ay=0;ar=3+b(aB,3);w(aB,3)}else{if(!ad(aB,aw.bits+7)){break inf_leave}w(aB,aw.bits);ay=0;ar=11+b(aB,7);w(aB,7)}}if(aC.have+ar>aC.nlen+aC.ndist){aD.msg="invalid bit length repeat";aC.mode=a;break}while(ar--){aC.lens[aC.have++]=ay}}}if(aC.mode==a){break}if(aC.lens[256]==0){aD.msg="invalid code -- missing end-of-block";aC.mode=a;break}aC.next=0;aC.lencode=aC.next;aC.lenbits=9;aA=K(aC,X);if(aA){aD.msg="invalid literal/lengths set";aC.mode=a;break}aC.distcode=aC.next;aC.distbits=6;aA=K(aC,u);if(aA){aD.msg="invalid distances set";aC.mode=a;break}aC.mode=S;if(at==ZLIB.Z_TREES){break inf_leave}case S:aC.mode=R;case R:if(aB.have>=6&&aB.left>=258){ah(aB);H(aD,az);Z(aD,aB);if(aC.mode==an){aC.back=-1}break}aC.back=0;for(;;){aw=aC.codes[aC.lencode+b(aB,aC.lenbits)];if(aw.bits<=aB.bits){break}if(!ag(aB)){break inf_leave}}if(aw.op&&(aw.op&240)==0){ax=aw;for(;;){aw=aC.codes[aC.lencode+ax.val+(b(aB,ax.bits+ax.op)>>>ax.bits)];if(ax.bits+aw.bits<=aB.bits){break}if(!ag(aB)){break inf_leave}}w(aB,ax.bits);aC.back+=ax.bits}w(aB,aw.bits);aC.back+=aw.bits;aC.length=aw.val;if(aw.op==0){aC.mode=Y;break}if(aw.op&32){aC.back=-1;aC.mode=an;break}if(aw.op&64){aD.msg="invalid literal/length code";aC.mode=a;break}aC.extra=aw.op&15;aC.mode=T;case T:if(aC.extra){if(!ad(aB,aC.extra)){break inf_leave}aC.length+=b(aB,aC.extra);w(aB,aC.extra);aC.back+=aC.extra}aC.was=aC.length;aC.mode=r;case r:for(;;){aw=aC.codes[aC.distcode+b(aB,aC.distbits)];if(aw.bits<=aB.bits){break}if(!ag(aB)){break inf_leave}}if((aw.op&240)==0){ax=aw;for(;;){aw=aC.codes[aC.distcode+ax.val+(b(aB,ax.bits+ax.op)>>>ax.bits)];if((ax.bits+aw.bits)<=aB.bits){break}if(!ag(aB)){break inf_leave}}w(aB,ax.bits);aC.back+=ax.bits}w(aB,aw.bits);aC.back+=aw.bits;if(aw.op&64){aD.msg="invalid distance code";aC.mode=a;break}aC.offset=aw.val;aC.extra=aw.op&15;aC.mode=s;case s:if(aC.extra){if(!ad(aB,aC.extra)){break inf_leave}aC.offset+=b(aB,aC.extra);w(aB,aC.extra);aC.back+=aC.extra}aC.mode=aa;case aa:if(aB.left==0){break inf_leave}ar=az-aB.left;if(aC.offset>ar){ar=aC.offset-ar;if(ar>aC.whave){if(aC.sane){aD.msg="invalid distance too far back";aC.mode=a;break}}if(ar>aC.wnext){ar-=aC.wnext;av=aC.wsize-ar;au=-1}else{av=aC.wnext-ar;au=-1}if(ar>aC.length){ar=aC.length}}else{av=-1;au=aD.next_out-aC.offset;ar=aC.length}if(ar>aB.left){ar=aB.left}aB.left-=ar;aC.length-=ar;if(av>=0){aD.output_data+=aC.window.substring(av,av+ar);aD.next_out+=ar;ar=0}else{aD.next_out+=ar;do{aD.output_data+=aD.output_data.charAt(au++)}while(--ar)}if(aC.length==0){aC.mode=R}break;case Y:if(aB.left==0){break inf_leave}aD.output_data+=String.fromCharCode(aC.length);aD.next_out++;aB.left--;aC.mode=R;break;case d:if(aC.wrap){if(!ad(aB,32)){break inf_leave}az-=aB.left;aD.total_out+=az;aC.total+=az;if(az){aD.adler=aC.check=aD.checksum_function(aC.check,aD.output_data,aD.output_data.length-az,az)}az=aB.left;if((aC.flags?aB.hold:ai(aB.hold))!=aC.check){aD.msg="incorrect data check";aC.mode=a;break}P(aB)}aC.mode=V;case V:if(aC.wrap&&aC.flags){if(!ad(aB,32)){break inf_leave}if(aB.hold!=(aC.total&4294967295)){aD.msg="incorrect length check";aC.mode=a;break}P(aB)}aC.mode=v;case v:aA=ZLIB.Z_STREAM_END;break inf_leave;case a:aA=ZLIB.Z_DATA_ERROR;break inf_leave;case ab:return ZLIB.Z_MEM_ERROR;case ak:default:return ZLIB.Z_STREAM_ERROR}}inf_leave:ah(aB);if(aC.wsize||(az!=aD.avail_out&&aC.mode<a&&(aC.mode<d||at!=ZLIB.Z_FINISH))){if(ap(aD)){aC.mode=ab;return ZLIB.Z_MEM_ERROR}}aq-=aD.avail_in;az-=aD.avail_out;aD.total_in+=aq;aD.total_out+=az;aC.total+=az;if(aC.wrap&&az){aD.adler=aC.check=aD.checksum_function(aC.check,aD.output_data,0,aD.output_data.length)}aD.data_type=aC.bits+(aC.last?64:0)+(aC.mode==an?128:0)+(aC.mode==S||aC.mode==l?256:0);if(((aq==0&&az==0)||at==ZLIB.Z_FINISH)&&aA==ZLIB.Z_OK){aA=ZLIB.Z_BUF_ERROR}return aA};ZLIB.inflateEnd=function(ar){var aq;if(!ar||!ar.state){return ZLIB.Z_STREAM_ERROR}aq=ar.state;aq.window=null;ar.state=null;return ZLIB.Z_OK};ZLIB.z_stream.prototype.inflate=function(au,av){var at;var aq;var ar=16384;this.input_data=au;this.next_in=E(av,"next_in",0);this.avail_in=E(av,"avail_in",au.length-this.next_in);at=E(av,"flush",ZLIB.Z_SYNC_FLUSH);aq=E(av,"avail_out",-1);var aw="";do{this.avail_out=(aq>=0?aq:ar);this.output_data="";this.next_out=0;this.error=ZLIB.inflate(this,at);if(aq>=0){return this.output_data}aw+=this.output_data;if(this.avail_out>0){break}}while(this.error==ZLIB.Z_OK);return aw};ZLIB.z_stream.prototype.inflateReset=function(aq){return ZLIB.inflateReset(this,aq)}}());if(typeof ZLIB==="undefined"){alert("ZLIB is not defined. SRC zlib.js before zlib-adler32.js")}(function(){var c=65521;var d=5552;function b(e,g,k,h){var l;var j;l=(e>>>16)&65535;e&=65535;if(h==1){e+=g.charCodeAt(k)&255;if(e>=c){e-=c}l+=e;if(l>=c){l-=c}return e|(l<<16)}if(g===null){return 1}if(h<16){while(h--){e+=g.charCodeAt(k++)&255;l+=e}if(e>=c){e-=c}l%=c;return e|(l<<16)}while(h>=d){h-=d;j=d>>4;do{e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e}while(--j);e%=c;l%=c}if(h){while(h>=16){h-=16;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e;e+=g.charCodeAt(k++)&255;l+=e}while(h--){e+=g.charCodeAt(k++)&255;l+=e}e%=c;l%=c}return e|(l<<16)}function a(e,g,k,h){var l;var j;l=(e>>>16)&65535;e&=65535;if(h==1){e+=g[k];if(e>=c){e-=c}l+=e;if(l>=c){l-=c}return e|(l<<16)}if(g===null){return 1}if(h<16){while(h--){e+=g[k++];l+=e}if(e>=c){e-=c}l%=c;return e|(l<<16)}while(h>=d){h-=d;j=d>>4;do{e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e}while(--j);e%=c;l%=c}if(h){while(h>=16){h-=16;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e;e+=g[k++];l+=e}while(h--){e+=g[k++];l+=e}e%=c;l%=c}return e|(l<<16)}ZLIB.adler32=function(e,g,j,h){if(typeof g==="string"){return b(e,g,j,h)}else{return a(e,g,j,h)}};ZLIB.adler32_combine=function(e,g,h){var k;var l;var j;if(h<0){return 4294967295}h%=c;j=h;k=e&65535;l=j*k;l%=c;k+=(g&65535)+c-1;l+=((e>>16)&65535)+((g>>16)&65535)+c-j;if(k>=c){k-=c}if(k>=c){k-=c}if(l>=(c<<1)){l-=(c<<1)}if(l>=c){l-=c}return k|(l<<16)}}());if(typeof ZLIB==="undefined"){alert("ZLIB is not defined. SRC zlib.js before zlib-crc32.js")}(function(){var a=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918000,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];function c(j,h,l,k){if(h==null){return 0}j=j^4294967295;while(k>=8){j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);j=a[(j^h.charCodeAt(l++))&255]^(j>>>8);k-=8}if(k){do{j=a[(j^h.charCodeAt(l++))&255]^(j>>>8)}while(--k)}return j^4294967295}function b(j,h,l,k){if(h==null){return 0}j=j^4294967295;while(k>=8){j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);j=a[(j^h[l++])&255]^(j>>>8);k-=8}if(k){do{j=a[(j^h[l++])&255]^(j>>>8)}while(--k)}return j^4294967295}ZLIB.crc32=function(j,h,l,k){if(typeof h==="string"){return c(j,h,l,k)}else{return b(j,h,l,k)}};var d=32;function g(h,l){var k;var j=0;k=0;while(l){if(l&1){k^=h[j]}l>>=1;j++}return k}function e(k,h){var j;for(j=0;j<d;j++){k[j]=g(h,h[j])}}ZLIB.crc32_combine=function(h,j,l){var m;var p;var k;var o;if(l<=0){return h}k=new Array(d);o=new Array(d);o[0]=3988292384;p=1;for(m=1;m<d;m++){o[m]=p;p<<=1}e(k,o);e(o,k);do{e(k,o);if(l&1){h=g(k,h)}l>>=1;if(l==0){break}e(o,k);if(l&1){h=g(o,h)}l>>=1}while(l!=0);h^=j;return h}}());var CreateAmtRedirect=function(e,a){var g={};g.m=e;e.parent=g;g.authCookie=a;g.State=0;g.socket=null;g.host=null;g.port=0;g.user=null;g.pass=null;g.authuri="/RedirectionService";g.tlsv1only=0;g.inDataCount=0;g.connectstate=0;g.protocol=e.protocol;g.debugmode=0;g.amtaccumulator="";g.amtsequence=1;g.amtkeepalivetimer=null;g.onStateChanged=null;g.Start=function(h,k,n,j,l){g.host=h;g.port=k;g.user=n;g.pass=j;g.connectstate=0;g.inDataCount=0;var m=window.location.protocol.replace("http","ws")+"//"+window.location.host+window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/webrelay.ashx?p=2&host="+h+"&port="+k+"&tls="+l+((n=="*")?"&serverauth=1":"")+((typeof j==="undefined")?("&serverauth=1&user="+n):"");if((a!=null)&&(a!="")){m+="&auth="+a}g.socket=new WebSocket(m);g.socket.onopen=g.xxOnSocketConnected;g.socket.onmessage=g.xxOnMessage;g.socket.onclose=g.xxOnSocketClosed;g.xxStateChange(1)};g.xxOnSocketConnected=function(){if(g.debugmode==1){console.log("onSocketConnected")}g.xxStateChange(2);if(g.protocol==1){g.xxSend(g.RedirectStartSol)}if(g.protocol==2){g.xxSend(g.RedirectStartKvm)}if(g.protocol==3){g.xxSend(g.RedirectStartIder)}};var b=new FileReader();var d=false,c=[];if(b.readAsBinaryString){b.onload=function(h){g.xxOnSocketData(h.target.result);if(c.length==0){d=false}else{b.readAsBinaryString(new Blob([c.shift()]))}}}else{if(b.readAsArrayBuffer){b.onloadend=function(h){g.xxOnSocketData(h.target.result);if(c.length==0){d=false}else{b.readAsArrayBuffer(c.shift())}}}}g.xxOnMessage=function(k){g.inDataCount++;if(typeof k.data=="object"){if(d==true){c.push(k.data);return}if(b.readAsBinaryString){d=true;b.readAsBinaryString(new Blob([k.data]))}else{if(b.readAsArrayBuffer){d=true;b.readAsArrayBuffer(k.data)}else{var h="",j=new Uint8Array(k.data),m=j.byteLength;for(var l=0;l<m;l++){h+=String.fromCharCode(j[l])}g.xxOnSocketData(h)}}}else{g.xxOnSocketData(k.data)}};g.xxOnSocketData=function(t){if(!t||g.connectstate==-1){return}if(typeof t==="object"){var m="";var o=new Uint8Array(t);var y=o.byteLength;for(var x=0;x<y;x++){m+=String.fromCharCode(o[x])}t=m}else{if(typeof t!=="string"){return}}if((g.protocol==2||g.protocol==3)&&g.connectstate==1){return g.m.ProcessData(t)}g.amtaccumulator+=t;while(g.amtaccumulator.length>=1){var p=0;switch(g.amtaccumulator.charCodeAt(0)){case 17:if(g.amtaccumulator.length<4){return}var L=g.amtaccumulator.charCodeAt(1);switch(L){case 0:if(g.amtaccumulator.length<13){return}var C=g.amtaccumulator.charCodeAt(12);if(g.amtaccumulator.length<13+C){return}g.xxSend(String.fromCharCode(19,0,0,0,0,0,0,0,0));p=(13+C);break;default:g.Stop(1);break}break;case 20:if(g.amtaccumulator.length<9){return}var k=ReadIntX(g.amtaccumulator,5);if(g.amtaccumulator.length<9+k){return}var K=g.amtaccumulator.charCodeAt(1);var l=g.amtaccumulator.charCodeAt(4);var h=[];for(x=0;x<k;x++){h.push(g.amtaccumulator.charCodeAt(9+x))}var j=g.amtaccumulator.substring(9,9+k);p=9+k;if(l==0){if(h.indexOf(4)>=0){g.xxSend(String.fromCharCode(19,0,0,0,4)+IntToStrX(g.user.length+g.authuri.length+8)+String.fromCharCode(g.user.length)+g.user+String.fromCharCode(0,0)+String.fromCharCode(g.authuri.length)+g.authuri+String.fromCharCode(0,0,0,0))}else{if(h.indexOf(3)>=0){g.xxSend(String.fromCharCode(19,0,0,0,3)+IntToStrX(g.user.length+g.authuri.length+7)+String.fromCharCode(g.user.length)+g.user+String.fromCharCode(0,0)+String.fromCharCode(g.authuri.length)+g.authuri+String.fromCharCode(0,0,0))}else{if(h.indexOf(1)>=0){g.xxSend(String.fromCharCode(19,0,0,0,1)+IntToStrX(g.user.length+g.pass.length+2)+String.fromCharCode(g.user.length)+g.user+String.fromCharCode(g.pass.length)+g.pass)}else{g.Stop(2)}}}}else{if((l==3||l==4)&&K==1){var s=0;var G=j.charCodeAt(s);var F=j.substring(s+1,s+1+G);s+=(G+1);var B=j.charCodeAt(s);var A=j.substring(s+1,s+1+B);s+=(B+1);var E=0;var D=null;var q=g.xxRandomNonce(32);var J="00000002";var v="";if(l==4){E=j.charCodeAt(s);D=j.substring(s+1,s+1+E);s+=(E+1);v=J+":"+q+":"+D+":"}var u=hex_md5(hex_md5(g.user+":"+F+":"+g.pass)+":"+A+":"+v+hex_md5("POST:"+g.authuri));var M=g.user.length+F.length+A.length+g.authuri.length+q.length+J.length+u.length+7;if(l==4){M+=(D.length+1)}var n=String.fromCharCode(19,0,0,0,l)+IntToStrX(M)+String.fromCharCode(g.user.length)+g.user+String.fromCharCode(F.length)+F+String.fromCharCode(A.length)+A+String.fromCharCode(g.authuri.length)+g.authuri+String.fromCharCode(q.length)+q+String.fromCharCode(J.length)+J+String.fromCharCode(u.length)+u;if(l==4){n+=(String.fromCharCode(D.length)+D)}g.xxSend(n)}else{if(K==0){if(g.protocol==1){var z=10000;var O=100;var N=0;var I=10000;var H=100;var w=0;g.xxSend(String.fromCharCode(32,0,0,0)+IntToStrX(g.amtsequence++)+ShortToStrX(z)+ShortToStrX(O)+ShortToStrX(N)+ShortToStrX(I)+ShortToStrX(H)+ShortToStrX(w)+IntToStrX(0))}if(g.protocol==2){g.xxSend(String.fromCharCode(64,0,0,0,0,0,0,0))}if(g.protocol==3){g.connectstate=1;g.xxStateChange(3)}}else{g.Stop(3)}}}break;case 33:if(g.amtaccumulator.length<23){break}p=23;g.xxSend(String.fromCharCode(39,0,0,0)+IntToStrX(g.amtsequence++)+String.fromCharCode(0,0,27,0,0,0));if(g.protocol==1){g.amtkeepalivetimer=setInterval(g.xxSendAmtKeepAlive,2000)}g.connectstate=1;g.xxStateChange(3);break;case 41:if(g.amtaccumulator.length<10){break}p=10;break;case 42:if(g.amtaccumulator.length<10){break}var r=(10+((g.amtaccumulator.charCodeAt(9)&255)<<8)+(g.amtaccumulator.charCodeAt(8)&255));if(g.amtaccumulator.length<r){break}g.m.ProcessData(g.amtaccumulator.substring(10,r));p=r;break;case 43:if(g.amtaccumulator.length<8){break}p=8;break;case 65:if(g.amtaccumulator.length<8){break}g.connectstate=1;g.m.Start();if(g.amtaccumulator.length>8){g.m.ProcessData(g.amtaccumulator.substring(8))}p=g.amtaccumulator.length;break;case 240:g.serverIsRecording=true;p=1;break;default:console.log("Unknown Intel AMT command: "+g.amtaccumulator.charCodeAt(0)+" acclen="+g.amtaccumulator.length);g.Stop(4);return}if(p==0){return}g.amtaccumulator=g.amtaccumulator.substring(p)}};g.xxSend=function(l){if(g.socket!=null&&g.socket.readyState==WebSocket.OPEN){if(g.debugmode==1){console.log("Send",l)}var h=new Uint8Array(l.length);for(var k=0;k<l.length;++k){h[k]=l.charCodeAt(k)}try{g.socket.send(h.buffer)}catch(j){}}};g.send=function(h){if(g.socket==null||g.connectstate!=1){return}if(g.protocol==1){g.xxSend(String.fromCharCode(40,0,0,0)+IntToStrX(g.amtsequence++)+ShortToStrX(h.length)+h)}else{g.xxSend(h)}};g.xxSendAmtKeepAlive=function(){if(g.socket==null){return}g.xxSend(String.fromCharCode(43,0,0,0)+IntToStrX(g.amtsequence++))};g.xxRandomNonceX="abcdef0123456789";g.xxRandomNonce=function(j){var k="";for(var h=0;h<j;h++){k+=g.xxRandomNonceX.charAt(Math.floor(Math.random()*g.xxRandomNonceX.length))}return k};g.xxOnSocketClosed=function(){if(g.debugmode==1){console.log("onSocketClosed")}if((g.inDataCount==0)&&(g.tlsv1only==0)){g.tlsv1only=1;g.socket=new WebSocket(window.location.protocol.replace("http","ws")+"//"+window.location.host+window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/webrelay.ashx?p=2&host="+g.host+"&port="+g.port+"&tls="+g.tls+"&tls1only=1"+((g.user=="*")?"&serverauth=1":"")+((typeof pass==="undefined")?("&serverauth=1&user="+g.user):""));g.socket.onopen=g.xxOnSocketConnected;g.socket.onmessage=g.xxOnMessage;g.socket.onclose=g.xxOnSocketClosed}else{g.Stop(5)}};g.xxStateChange=function(h){if(g.State==h){return}g.State=h;g.m.xxStateChange(g.State);if(g.onStateChanged!=null){g.onStateChanged(g,g.State)}};g.Stop=function(h){if(g.debugmode==1){console.log("onSocketStop",h)}g.xxStateChange(0);g.connectstate=-1;g.amtaccumulator="";if(g.socket!=null){g.socket.close();g.socket=null}if(g.amtkeepalivetimer!=null){clearInterval(g.amtkeepalivetimer);g.amtkeepalivetimer=null}};g.RedirectStartSol=String.fromCharCode(16,0,0,0,83,79,76,32);g.RedirectStartKvm=String.fromCharCode(16,1,0,0,75,86,77,82);g.RedirectStartIder=String.fromCharCode(16,0,0,0,73,68,69,82);return g};var CreateWsmanComm=function(l,o,q,n,p){var m={};m.PendingAjax=[];m.ActiveAjaxCount=0;m.MaxActiveAjaxCount=1;m.FailAllError=0;m.challengeParams=null;m.noncecounter=1;m.authcounter=0;m.socket=null;m.socketState=0;m.host=l;m.port=o;m.user=q;m.pass=n;m.tls=p;m.tlsv1only=1;m.cnonce=Math.random().toString(36).substring(7);m.PerformAjax=function(t,s,v,u,w,r){if(m.ActiveAjaxCount<m.MaxActiveAjaxCount&&m.PendingAjax.length==0){m.PerformAjaxEx(t,s,v,w,r)}else{if(u==1){m.PendingAjax.unshift([t,s,v,w,r])}else{m.PendingAjax.push([t,s,v,w,r])}}};m.PerformNextAjax=function(){if(m.ActiveAjaxCount>=m.MaxActiveAjaxCount||m.PendingAjax.length==0){return}var r=m.PendingAjax.shift();m.PerformAjaxEx(r[0],r[1],r[2],r[3],r[4]);m.PerformNextAjax()};m.PerformAjaxEx=function(t,s,u,v,r){if(m.FailAllError!=0){m.gotNextMessagesError({status:m.FailAllError},"error",null,[t,s,u,v,r]);return}if(!t){t=""}m.ActiveAjaxCount++;return m.PerformAjaxExNodeJS(t,s,u,v,r)};m.pendingAjaxCall=[];m.PerformAjaxExNodeJS=function(t,s,u,v,r){m.PerformAjaxExNodeJS2(t,s,u,v,r,3)};m.PerformAjaxExNodeJS2=function(t,s,v,w,r,u){if(u<=0||m.FailAllError!=0){m.ActiveAjaxCount--;if(m.FailAllError!=999){m.gotNextMessages(null,"error",{status:((m.FailAllError==0)?408:m.FailAllError)},[t,s,v,w,r])}m.PerformNextAjax();return}m.pendingAjaxCall.push([t,s,v,w,r,u]);if(m.socketState==0){m.xxConnectHttpSocket()}else{if(m.socketState==2){m.sendRequest(t,w,r)}}};m.sendRequest=function(t,v,r){v=v?v:"/wsman";r=r?r:"POST";var s=r+" "+v+" HTTP/1.1\r\n";if(m.challengeParams!=null){var u=hex_md5(hex_md5(m.user+":"+m.challengeParams.realm+":"+m.pass)+":"+m.challengeParams.nonce+":"+m.noncecounter+":"+m.cnonce+":"+m.challengeParams.qop+":"+hex_md5(r+":"+v));s+="Authorization: "+m.renderDigest({username:m.user,realm:m.challengeParams.realm,nonce:m.challengeParams.nonce,uri:v,qop:m.challengeParams.qop,response:u,nc:m.noncecounter++,cnonce:m.cnonce})+"\r\n"}s+="Host: "+m.host+":"+m.port+"\r\nTransfer-Encoding: chunked\r\n\r\n"+t.length.toString(16).toUpperCase()+"\r\n"+t+"\r\n0\r\n\r\n";g(s)};m.parseDigest=function(r){var s=r.substring(7).split(",");for(i in s){s[i]=s[i].trim()}return s.reduce(function(t,v){var u=v.split("=");t[u[0]]=u[1].replace(/"/g,"");return t},{})};m.renderDigest=function(r){var s=[];for(i in r){s.push(i)}return"Digest "+s.reduce(function(u,t){return u+","+t+'="'+r[t]+'"'},"").substring(1)};m.xxConnectHttpSocket=function(){m.socketParseState=0;m.socketAccumulator="";m.socketHeader=null;m.socketData="";m.socketState=1;console.log(m.tlsv1only);m.socket=new WebSocket(window.location.protocol.replace("http","ws")+"//"+window.location.host+window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/webrelay.ashx?p=1&host="+m.host+"&port="+m.port+"&tls="+m.tls+"&tlsv1only="+m.tlsv1only+((q=="*")?"&serverauth=1":"")+((typeof n==="undefined")?("&serverauth=1&user="+q):""));m.socket.onopen=c;m.socket.onmessage=a;m.socket.onclose=b};function c(){m.socketState=2;for(i in m.pendingAjaxCall){m.sendRequest(m.pendingAjaxCall[i][0],m.pendingAjaxCall[i][3],m.pendingAjaxCall[i][4])}}var h=new FileReader();var k=false,j=[];if(h.readAsBinaryString){h.onload=function(r){d(r.target.result);if(j.length==0){k=false}else{h.readAsBinaryString(new Blob([j.shift()]))}}}else{if(h.readAsArrayBuffer){h.onloadend=function(r){d(r.target.result);if(j.length==0){k=false}else{h.readAsArrayBuffer(j.shift())}}}}function a(t){if(typeof t.data=="object"){if(k==true){j.push(t.data);return}if(h.readAsBinaryString){k=true;h.readAsBinaryString(new Blob([t.data]))}else{if(h.readAsArrayBuffer){k=true;h.readAsArrayBuffer(t.data)}else{var r="",s=new Uint8Array(t.data),v=s.byteLength;for(var u=0;u<v;u++){r+=String.fromCharCode(s[u])}d(r)}}}else{d(t.data)}}function d(v){if(typeof v==="object"){var r="",s=new Uint8Array(v),y=s.byteLength;for(var x=0;x<y;x++){r+=String.fromCharCode(s[x])}v=r}else{if(typeof v!=="string"){return}}m.socketAccumulator+=v;while(true){if(m.socketParseState==0){var w=m.socketAccumulator.indexOf("\r\n\r\n");if(w<0){return}m.socketHeader=m.socketAccumulator.substring(0,w).split("\r\n");m.socketAccumulator=m.socketAccumulator.substring(w+4);m.socketParseState=1;m.socketData="";m.socketXHeader={Directive:m.socketHeader[0].split(" ")};for(x in m.socketHeader){if(x!=0){var z=m.socketHeader[x].indexOf(":");m.socketXHeader[m.socketHeader[x].substring(0,z).toLowerCase()]=m.socketHeader[x].substring(z+2)}}}if(m.socketParseState==1){var u=-1;if((m.socketXHeader.connection!=undefined)&&(m.socketXHeader.connection.toLowerCase()=="close")&&((m.socketXHeader["transfer-encoding"]==undefined)||(m.socketXHeader["transfer-encoding"].toLowerCase()!="chunked"))){u=0}else{if(m.socketXHeader["content-length"]!=undefined){u=parseInt(m.socketXHeader["content-length"]);if(m.socketAccumulator.length<u){return}var v=m.socketAccumulator.substring(0,u);m.socketAccumulator=m.socketAccumulator.substring(u);m.socketData=v;u=0}else{var t=m.socketAccumulator.indexOf("\r\n");if(t<0){return}u=parseInt(m.socketAccumulator.substring(0,t),16);if(isNaN(u)){if(m.websocket){m.websocket.close()}return}if(m.socketAccumulator.length<t+2+u+2){return}var v=m.socketAccumulator.substring(t+2,t+2+u);m.socketAccumulator=m.socketAccumulator.substring(t+2+u+2);m.socketData+=v}}if(u==0){e(m.socketXHeader,m.socketData);m.socketParseState=0;m.socketHeader=null}}}}function e(u,t){var w=parseInt(u.Directive[1]);if(isNaN(w)){w=602}if(w==401&&++(m.authcounter)<3){m.challengeParams=m.parseDigest(u["www-authenticate"])}else{var v=m.pendingAjaxCall.shift();m.authcounter=0;m.ActiveAjaxCount--;m.gotNextMessages(t,"success",{status:w},v);m.PerformNextAjax()}}function b(s){m.socketState=0;if(m.socket!=null){m.socket.close();m.socket=null}if(m.pendingAjaxCall.length>0){var t=m.pendingAjaxCall.shift();var u=t[5];m.PerformAjaxExNodeJS2(t[0],t[1],t[2],t[3],t[4],--u)}}function g(u){if(m.socketState==2&&m.socket!=null&&m.socket.readyState==WebSocket.OPEN){var r=new Uint8Array(u.length);for(var t=0;t<u.length;++t){r[t]=u.charCodeAt(t)}try{m.socket.send(r.buffer)}catch(s){}}}m.gotNextMessages=function(s,u,t,r){if(m.FailAllError==999){return}if(m.FailAllError!=0){r[1](null,m.FailAllError,r[2]);return}if(t.status!=200){r[1](null,t.status,r[2]);return}r[1](s,200,r[2])};m.gotNextMessagesError=function(t,u,s,r){if(m.FailAllError==999){return}if(m.FailAllError!=0){r[1](null,m.FailAllError,r[2]);return}r[1](m,null,{Header:{HttpError:t.status}},t.status,r[2])};m.CancelAllQueries=function(r){while(m.PendingAjax.length>0){var t=m.PendingAjax.shift();t[1](null,r,t[2])}if(m.websocket!=null){m.websocket.close();m.websocket=null;m.socketState=0}};return m};var CreateAgentRedirect=function(g,h,l,a,b){var j={};j.m=h;h.parent=j;j.meshserver=g;j.authCookie=a;j.State=0;j.nodeid=null;j.socket=null;j.connectstate=-1;j.tunnelid=Math.random().toString(36).substring(2);j.protocol=h.protocol;j.onStateChanged=null;j.ctrlMsgAllowed=true;j.attemptWebRTC=false;j.webRtcActive=false;j.webSwitchOk=false;j.webchannel=null;j.webrtc=null;j.debugmode=0;j.serverIsRecording=false;if(b==null){b="/"}j.consoleMessage=null;j.onConsoleMessageChange=null;j.Start=function(m){var o,n=window.location.protocol.replace("http","ws")+"//"+window.location.host+window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/meshrelay.ashx?browser=1&p="+j.protocol+"&nodeid="+m+"&id="+j.tunnelid;if((a!=null)&&(a!="")){n+="&auth="+a}j.nodeid=m;j.connectstate=0;j.socket=new WebSocket(n);j.socket.onopen=j.xxOnSocketConnected;j.socket.onmessage=j.xxOnMessage;j.socket.onerror=function(p){};j.socket.onclose=j.xxOnSocketClosed;j.xxStateChange(1);j.meshserver.send({action:"msg",type:"tunnel",nodeid:j.nodeid,value:"*"+b+"meshrelay.ashx?p="+j.protocol+"&nodeid="+m+"&id="+j.tunnelid,usage:j.protocol})};j.xxOnSocketConnected=function(){if(j.debugmode==1){console.log("onSocketConnected")}j.xxStateChange(2)};j.xxOnControlCommand=function(o){var m;try{m=JSON.parse(o)}catch(n){return}if(m.ctrlChannel!="102938"){j.xxOnSocketData(o);return}if(m.type=="console"){j.consoleMessage=m.msg;if(j.onConsoleMessageChange){j.onConsoleMessageChange(j,j.consoleMessage)}}else{if(j.webrtc!=null){if(m.type=="answer"){j.webrtc.setRemoteDescription(new RTCSessionDescription(m),function(){},j.xxCloseWebRTC)}else{if(m.type=="webrtc0"){j.webSwitchOk=true;k()}else{if(m.type=="webrtc1"){j.sendCtrlMsg('{"ctrlChannel":"102938","type":"webrtc2"}')}else{if(m.type=="webrtc2"){}}}}}}};j.sendCtrlMsg=function(n){if(j.ctrlMsgAllowed==true){if((typeof args!="undefined")&&args.redirtrace){console.log("RedirSend",typeof n,n)}try{j.socket.send(n)}catch(m){}}};function k(){if((j.webSwitchOk==true)&&(j.webRtcActive==true)){j.sendCtrlMsg('{"ctrlChannel":"102938","type":"webrtc0"}');j.sendCtrlMsg('{"ctrlChannel":"102938","type":"webrtc1"}');if(j.onStateChanged!=null){j.onStateChanged(j,j.State)}}}j.xxOnMessage=function(p){if(j.State<3){if((p.data=="c")||(p.data=="cr")){if(p.data=="cr"){j.serverIsRecording=true}try{j.socket.send(j.protocol)}catch(q){}j.xxStateChange(3);if(j.attemptWebRTC==true){var o=null;if(typeof RTCPeerConnection!=="undefined"){j.webrtc=new RTCPeerConnection(o)}else{if(typeof webkitRTCPeerConnection!=="undefined"){j.webrtc=new webkitRTCPeerConnection(o)}}if(j.webrtc!=null){j.webchannel=j.webrtc.createDataChannel("DataChannel",{});j.webchannel.onmessage=j.xxOnMessage;j.webchannel.onopen=function(){j.webRtcActive=true;k()};j.webchannel.onclose=function(t){if(j.webRtcActive){j.Stop()}};j.webrtc.onicecandidate=function(t){if(t.candidate==null){try{j.socket.send(JSON.stringify(j.webrtcoffer))}catch(u){}}else{j.webrtcoffer.sdp+=("a="+t.candidate.candidate+"\r\n")}};j.webrtc.oniceconnectionstatechange=function(){if(j.webrtc!=null){if(j.webrtc.iceConnectionState=="disconnected"){if(j.webRtcActive==true){j.Stop()}else{j.xxCloseWebRTC()}}else{if(j.webrtc.iceConnectionState=="failed"){j.xxCloseWebRTC()}}}};j.webrtc.createOffer(function(t){j.webrtcoffer=t;j.webrtc.setLocalDescription(t,function(){},j.xxCloseWebRTC)},j.xxCloseWebRTC,{mandatory:{OfferToReceiveAudio:false,OfferToReceiveVideo:false}})}}return}}if(typeof p.data=="string"){j.xxOnControlCommand(p.data);return}if(typeof p.data=="object"){if(e==true){d.push(p.data);return}if(c.readAsBinaryString){e=true;c.readAsBinaryString(new Blob([p.data]))}else{if(c.readAsArrayBuffer){e=true;c.readAsArrayBuffer(p.data)}else{var m="",n=new Uint8Array(p.data),s=n.byteLength;for(var r=0;r<s;r++){m+=String.fromCharCode(n[r])}j.xxOnSocketData(m)}}}else{j.xxOnSocketData(p.data)}};var c=new FileReader();var e=false,d=[];if(c.readAsBinaryString){c.onload=function(m){j.xxOnSocketData(m.target.result);if(d.length==0){e=false}else{c.readAsBinaryString(new Blob([d.shift()]))}}}else{if(c.readAsArrayBuffer){c.onloadend=function(m){j.xxOnSocketData(m.target.result);if(d.length==0){e=false}else{c.readAsArrayBuffer(d.shift())}}}}j.xxOnSocketData=function(o){if(!o||j.connectstate==-1){return}if(typeof o==="object"){var m="",n=new Uint8Array(o),q=n.byteLength;for(var p=0;p<q;p++){m+=String.fromCharCode(n[p])}o=m}else{if(typeof o!=="string"){return}}if((typeof args!="undefined")&&args.redirtrace){console.log("RedirRecv",typeof o,o.length,o)}return j.m.ProcessData(o)};j.sendText=function(m){if(typeof m!="string"){m=JSON.stringify(m)}j.send(encode_utf8(m))};j.send=function(q){if((typeof args!="undefined")&&args.redirtrace){console.log("RedirSend",typeof q,q.length,q)}try{if(j.socket!=null&&j.socket.readyState==WebSocket.OPEN){if(typeof q=="string"){if(j.debugmode==1){var m=new Uint8Array(q.length),n=[];for(var p=0;p<q.length;++p){m[p]=q.charCodeAt(p);n.push(q.charCodeAt(p))}if(j.webRtcActive==true){j.webchannel.send(m.buffer)}else{j.socket.send(m.buffer)}}else{var m=new Uint8Array(q.length);for(var p=0;p<q.length;++p){m[p]=q.charCodeAt(p)}if(j.webRtcActive==true){j.webchannel.send(m.buffer)}else{j.socket.send(m.buffer)}}}else{if(j.webRtcActive==true){j.webchannel.send(q)}else{j.socket.send(q)}}}}catch(o){}};j.xxOnSocketClosed=function(){j.Stop(1)};j.xxStateChange=function(m){if(j.State==m){return}j.State=m;j.m.xxStateChange(j.State);if(j.onStateChanged!=null){j.onStateChanged(j,j.State)}};j.xxCloseWebRTC=function(){if(j.webchannel!=null){try{j.webchannel.close()}catch(m){}j.webchannel=null}if(j.webrtc!=null){try{j.webrtc.close()}catch(m){}j.webrtc=null}j.webRtcActive=false};j.Stop=function(n){if(j.debugmode==1){console.log("stop",n)}j.xxCloseWebRTC();j.connectstate=-1;if(j.socket!=null){try{if(j.socket.readyState==1){j.sendCtrlMsg('{"ctrlChannel":"102938","type":"close"}');j.socket.close()}}catch(m){}j.socket=null}j.xxStateChange(0)};return j};var CreateKvmDataChannel=function(h,e,d){var g={};g.m=e;e.parent=g;g.webchannel=h;g.State=0;g.protocol=e.protocol;g.onStateChanged=null;g.onControlMsg=null;g.debugmode=0;g.keepalive=d;g.rtcKeepAlive=null;g.Start=function(){if(g.debugmode==1){console.log("start")}g.xxStateChange(3);g.webchannel.onmessage=g.xxOnMessage;g.rtcKeepAlive=setInterval(g.xxSendRtcKeepAlive,30000)};var a=new FileReader();var c=false,b=[];if(a.readAsBinaryString){a.onload=function(j){g.xxOnSocketData(j.target.result);if(b.length==0){c=false}else{a.readAsBinaryString(new Blob([b.shift()]))}}}else{if(a.readAsArrayBuffer){a.onloadend=function(j){g.xxOnSocketData(j.target.result);if(b.length==0){c=false}else{a.readAsArrayBuffer(b.shift())}}}}g.xxOnMessage=function(l){if(typeof l.data=="string"){if(g.onControlMsg!=null){g.onControlMsg(l.data)}return}if(typeof l.data=="object"){if(c==true){b.push(l.data);return}if(a.readAsBinaryString){c=true;a.readAsBinaryString(new Blob([l.data]))}else{if(f.readAsArrayBuffer){c=true;a.readAsArrayBuffer(l.data)}else{var j="",k=new Uint8Array(l.data),n=k.byteLength;for(var m=0;m<n;m++){j+=String.fromCharCode(k[m])}g.xxOnSocketData(j)}}}else{g.xxOnSocketData(l.data)}};g.xxOnSocketData=function(l){if(!l){return}if(typeof l==="object"){var j="",k=new Uint8Array(l),n=k.byteLength;for(var m=0;m<n;m++){j+=String.fromCharCode(k[m])}l=j}else{if(typeof l!=="string"){return}}return g.m.ProcessData(l)};g.sendCtrlMsg=function(j){if(typeof j=="string"){g.webchannel.send(j);if(g.keepalive!=null){g.keepalive.sendKeepAlive()}}};g.send=function(l){if(typeof l=="string"){var j=new Uint8Array(l.length);for(var k=0;k<l.length;++k){j[k]=l.charCodeAt(k)}l=j}g.webchannel.send(l)};g.xxStateChange=function(j){if(g.State==j){return}g.State=j;g.m.xxStateChange(g.State);if(g.onStateChanged!=null){g.onStateChanged(g,g.State)}};g.Stop=function(){if(g.debugmode==1){console.log("stop")}if(g.rtcKeepAlive!=null){clearInterval(g.rtcKeepAlive);g.rtcKeepAlive=null}g.xxStateChange(0)};g.xxSendRtcKeepAlive=function(){g.sendCtrlMsg(JSON.stringify({action:"ping"}))};return g};var CreateAgentRemoteDesktop=function(a,g){var e={};e.CanvasId=a;if(typeof a==="string"){e.CanvasId=Q(a)}e.Canvas=e.CanvasId.getContext("2d");e.scrolldiv=g;e.State=0;e.PendingOperations=[];e.tilesReceived=0;e.TilesDrawn=0;e.KillDraw=0;e.ipad=false;e.tabletKeyboardVisible=false;e.LastX=0;e.LastY=0;e.touchenabled=0;e.submenuoffset=0;e.touchtimer=null;e.TouchArray={};e.connectmode=0;e.connectioncount=0;e.rotation=0;e.protocol=2;e.debugmode=0;e.firstUpKeys=[];e.stopInput=false;e.localKeyMap=true;e.altPressed=false;e.ctrlPressed=false;e.shiftPressed=false;e.sessionid=0;e.username;e.oldie=false;e.CompressionLevel=50;e.ScalingLevel=1024;e.FrameRateTimer=50;e.FirstDraw=false;e.ScreenWidth=960;e.ScreenHeight=700;e.width=960;e.height=960;e.onScreenSizeChange=null;e.onMessage=null;e.onConnectCountChanged=null;e.onDebugMessage=null;e.onTouchEnabledChanged=null;e.onDisplayinfo=null;e.accumulator=null;var d=["default","progress","crosshair","pointer","help","text","no-drop","move","nesw-resize","ns-resize","nwse-resize","w-resize","alias","wait","none"];e.Start=function(){e.State=0;e.accumulator=null};e.Stop=function(){e.setRotation(0);e.UnGrabKeyInput();e.UnGrabMouseInput();e.touchenabled=0;if(e.onScreenSizeChange!=null){e.onScreenSizeChange(e,e.ScreenWidth,e.ScreenHeight,e.CanvasId)}e.Canvas.clearRect(0,0,e.CanvasId.width,e.CanvasId.height)};e.xxStateChange=function(h){if(e.State==h){return}e.State=h;e.CanvasId.style.cursor="default";switch(h){case 0:e.Stop();break;case 3:break}};e.send=function(h){if(e.debugmode>1){console.log("KSend("+h.length+"): "+rstr2hex(h))}if(e.parent!=null){e.parent.send(h)}};e.ProcessPictureMsg=function(j,l,m){var k=new Image();k.xcount=e.tilesReceived++;var h=e.tilesReceived;k.src="data:image/jpeg;base64,"+btoa(j.substring(4,j.length));k.onload=function(){if(e.Canvas!=null&&e.KillDraw<h&&e.State!=0){e.PendingOperations.push([h,2,k,l,m]);while(e.DoPendingOperations()){}}};k.error=function(){console.log("DecodeTileError")}};e.DoPendingOperations=function(){if(e.PendingOperations.length==0){return false}for(var h=0;h<e.PendingOperations.length;h++){var j=e.PendingOperations[h];if(j[0]==(e.TilesDrawn+1)){if(j[1]==1){e.ProcessCopyRectMsg(j[2])}else{if(j[1]==2){e.Canvas.drawImage(j[2],e.rotX(j[3],j[4]),e.rotY(j[3],j[4]));delete j[2]}}e.PendingOperations.splice(h,1);delete j;e.TilesDrawn++;if(e.TilesDrawn==e.tilesReceived&&e.KillDraw<e.TilesDrawn){e.KillDraw=e.TilesDrawn=e.tilesReceived=0}return true}}if(e.oldie&&e.PendingOperations.length>0){e.TilesDrawn++}return false};e.ProcessCopyRectMsg=function(l){var m=((l.charCodeAt(0)&255)<<8)+(l.charCodeAt(1)&255);var n=((l.charCodeAt(2)&255)<<8)+(l.charCodeAt(3)&255);var h=((l.charCodeAt(4)&255)<<8)+(l.charCodeAt(5)&255);var j=((l.charCodeAt(6)&255)<<8)+(l.charCodeAt(7)&255);var o=((l.charCodeAt(8)&255)<<8)+(l.charCodeAt(9)&255);var k=((l.charCodeAt(10)&255)<<8)+(l.charCodeAt(11)&255);e.Canvas.drawImage(Canvas.canvas,m,n,o,k,h,j,o,k)};e.SendUnPause=function(){e.send(String.fromCharCode(0,8,0,5,0))};e.SendPause=function(){e.send(String.fromCharCode(0,8,0,5,1))};e.SendCompressionLevel=function(l,j,k,h){if(j){e.CompressionLevel=j}if(k){e.ScalingLevel=k}if(h){e.FrameRateTimer=h}e.send(String.fromCharCode(0,5,0,10,l,e.CompressionLevel)+e.shortToStr(e.ScalingLevel)+e.shortToStr(e.FrameRateTimer))};e.SendRefresh=function(){e.send(String.fromCharCode(0,6,0,4))};e.ProcessScreenMsg=function(j,h){if(e.debugmode>0){console.log("ScreenSize: "+j+" x "+h)}e.Canvas.setTransform(1,0,0,1,0,0);e.rotation=0;e.FirstDraw=true;e.ScreenWidth=e.width=j;e.ScreenHeight=e.height=h;e.KillDraw=e.tilesReceived;while(e.PendingOperations.length>0){e.PendingOperations.shift()}e.SendCompressionLevel(1);e.SendUnPause();if(e.onScreenSizeChange!=null){e.onScreenSizeChange(e,e.ScreenWidth,e.ScreenHeight,e.CanvasId)}};e.ProcessData=function(j){var h=0;while(h<j.length){h+=e.ProcessDataEx(j.substring(h))}};e.ProcessDataEx=function(s){if(e.accumulator!=null){s=e.accumulator+s;e.accumulator=null}if(e.debugmode>1){console.log("KRecv("+s.length+"): "+rstr2hex(s.substring(0,Math.min(s.length,40))))}if(s.length<4){return}var h=null,t=0,u=0,k=ReadShort(s,0),j=ReadShort(s,2),q=0;if((k==27)&&(j==8)){if(s.length<12){return}k=ReadShort(s,8);j=ReadInt(s,4);if((j+8)>s.length){e.accumulator=s;return}s=s.substring(8);q=8}if((j!=s.length)&&(e.debugmode>0)){console.log(j,s.length,j==s.length)}if((k>=18)&&(k!=65)&&(k!=88)){console.error("Invalid KVM command "+k+" of size "+j);console.log("Invalid KVM data",s.length,rstr2hex(s.substring(0,40))+"...");return}if(j>s.length){e.accumulator=s;return}if(k==3||k==4||k==7){h=s.substring(4,j);t=((h.charCodeAt(0)&255)<<8)+(h.charCodeAt(1)&255);u=((h.charCodeAt(2)&255)<<8)+(h.charCodeAt(3)&255);if(e.debugmode>0){console.log("CMD"+k+" at X="+t+" Y="+u)}}switch(k){case 3:if(e.FirstDraw){e.onResize()}e.ProcessPictureMsg(h,t,u);break;case 4:if(e.FirstDraw){e.onResize()}if(e.TilesDrawn==e.tilesReceived){e.ProcessCopyRectMsg(h)}else{e.PendingOperations.push([++tilesReceived,1,h])}break;case 7:e.ProcessScreenMsg(t,u);e.SendKeyMsgKC(e.KeyAction.UP,16);e.SendKeyMsgKC(e.KeyAction.UP,17);e.SendKeyMsgKC(e.KeyAction.UP,18);e.SendKeyMsgKC(e.KeyAction.UP,91);e.SendKeyMsgKC(e.KeyAction.UP,92);e.SendKeyMsgKC(e.KeyAction.UP,16);e.send(String.fromCharCode(0,14,0,4));break;case 11:var r=0,o={},m=((s.charCodeAt(4)&255)<<8)+(s.charCodeAt(5)&255);if(m>0){r=((s.charCodeAt(6+(m*2))&255)<<8)+(s.charCodeAt(7+(m*2))&255);for(var p=0;p<m;p++){var n=((s.charCodeAt(6+(p*2))&255)<<8)+(s.charCodeAt(7+(p*2))&255);if(n==65535){o[n]="All Displays"}else{o[n]="Display "+n}}}if(e.onDisplayinfo!=null){e.onDisplayinfo(e,o,r)}break;case 12:break;case 14:e.touchenabled=1;e.TouchArray={};if(e.onTouchEnabledChanged!=null){e.onTouchEnabledChanged(e.touchenabled)}break;case 15:e.TouchArray={};break;case 16:e.connectioncount=ReadInt(s,4);if(e.onConnectCountChanged!=null){e.onConnectCountChanged(e.connectioncount,e)}break;case 17:if(e.onMessage!=null){e.onMessage(s.substring(4,j),e)}break;case 65:s=s.substring(4);if(s[0]!="."){console.log(s);if(e.parent!=null){e.parent.consoleMessage=s;if(e.parent.onConsoleMessageChange){e.parent.onConsoleMessageChange(e.parent,s)}}}else{console.log("KVM: "+s.substring(1))}break;case 88:if(j!=5){break}var l=s.charCodeAt(4);if(l>d.length){l=0}e.CanvasId.style.cursor=d[l];break}return j+q};e.MouseButton={NONE:0,LEFT:2,RIGHT:8,MIDDLE:32};e.KeyAction={NONE:0,DOWN:1,UP:2,SCROLL:3,EXUP:4,EXDOWN:5,DBLCLICK:6};e.InputType={KEY:1,MOUSE:2,CTRLALTDEL:10,TOUCH:15};e.Alternate=0;var c={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 b(h){if(h.code.startsWith("Key")&&h.code.length==4){return h.code.charCodeAt(3)}if(h.code.startsWith("Digit")&&h.code.length==6){return h.code.charCodeAt(5)}if(h.code.startsWith("Numpad")&&h.code.length==7){return h.code.charCodeAt(6)+48}return c[h.code]}e.SendKeyMsg=function(h,j){if(h==null){return}if(!j){j=window.event}if(j.code&&(e.localKeyMap==false)){var k=b(j);if(k!=null){e.SendKeyMsgKC(h,k)}}else{var k=j.keyCode;if(k==59){k=186}else{if(k==173){k=189}else{if(k==61){k=187}}}e.SendKeyMsgKC(h,k)}};e.SendMessage=function(h){if(e.State==3){e.send(String.fromCharCode(0,17)+e.shortToStr(4+h.length)+h)}};e.SendKeyMsgKC=function(h,k){if(e.State!=3){return}if(typeof h=="object"){for(var j in h){e.SendKeyMsgKC(h[j][0],h[j][1])}}else{e.send(String.fromCharCode(0,e.InputType.KEY,0,6,(h-1),k))}};e.sendcad=function(){e.SendCtrlAltDelMsg()};e.SendCtrlAltDelMsg=function(){if(e.State==3){e.send(String.fromCharCode(0,e.InputType.CTRLALTDEL,0,4))}};e.SendEscKey=function(){if(e.State==3){e.send(String.fromCharCode(0,e.InputType.KEY,0,6,0,27,0,e.InputType.KEY,0,6,1,27))}};e.SendStartMsg=function(){e.SendKeyMsgKC(e.KeyAction.EXDOWN,91);e.SendKeyMsgKC(e.KeyAction.EXUP,91)};e.SendCharmsMsg=function(){e.SendKeyMsgKC(e.KeyAction.EXDOWN,91);e.SendKeyMsgKC(e.KeyAction.DOWN,67);e.SendKeyMsgKC(e.KeyAction.UP,67);e.SendKeyMsgKC(e.KeyAction.EXUP,91)};e.SendTouchMsg1=function(j,h,k,l){if(e.State==3){e.send(String.fromCharCode(0,e.InputType.TOUCH)+e.shortToStr(14)+String.fromCharCode(1,j)+e.intToStr(h)+e.shortToStr(k)+e.shortToStr(l))}};e.SendTouchMsg2=function(l,h){var n="";var j;var o="TOUCHSEND: ";for(var m in e.TouchArray){if(m==l){j=h}else{if(e.TouchArray[m].f==1){j=65536|2|4;e.TouchArray[m].f=3;o+="START"+m}else{if(e.TouchArray[m].f==2){j=262144;o+="STOP"+m}else{j=2|4|131072}}}n+=String.fromCharCode(m)+e.intToStr(j)+e.shortToStr(e.TouchArray[m].x)+e.shortToStr(e.TouchArray[m].y);if(e.TouchArray[m].f==2){delete e.TouchArray[m]}}if(e.State==3){e.send(String.fromCharCode(0,e.InputType.TOUCH)+e.shortToStr(5+n.length)+String.fromCharCode(2)+n)}if(Object.keys(e.TouchArray).length==0&&e.touchtimer!=null){clearInterval(e.touchtimer);e.touchtimer=null}};e.SendMouseMsg=function(h,l){if(e.State!=3){return}if(h!=null&&e.Canvas!=null){if(!l){var l=window.event}var o=(e.Canvas.canvas.height/e.CanvasId.clientHeight);var p=(e.Canvas.canvas.width/e.CanvasId.clientWidth);var n=e.GetPositionOfControl(e.Canvas.canvas);var q=((l.pageX-n[0])*p);var r=((l.pageY-n[1])*o);if(l.addx){q+=l.addx}if(l.addy){r+=l.addy}if(q>=0&&q<=e.Canvas.canvas.width&&r>=0&&r<=e.Canvas.canvas.height){var j=0;var k=0;if(h==e.KeyAction.UP||h==e.KeyAction.DOWN){if(l.which){((l.which==1)?(j=e.MouseButton.LEFT):((l.which==2)?(j=e.MouseButton.MIDDLE):(j=e.MouseButton.RIGHT)))}else{if(l.button){((l.button==0)?(j=e.MouseButton.LEFT):((l.button==1)?(j=e.MouseButton.MIDDLE):(j=e.MouseButton.RIGHT)))}}}else{if(h==e.KeyAction.SCROLL){if(l.detail){k=(-1*(l.detail*120))}else{if(l.wheelDelta){k=(l.wheelDelta*3)}}}}var m="";if(h==e.KeyAction.DBLCLICK){m=String.fromCharCode(0,e.InputType.MOUSE,0,10,0,136,((q/256)&255),(q&255),((r/256)&255),(r&255))}else{if(h==e.KeyAction.SCROLL){m=String.fromCharCode(0,e.InputType.MOUSE,0,12,0,0,((q/256)&255),(q&255),((r/256)&255),(r&255),((k/256)&255),(k&255))}else{m=String.fromCharCode(0,e.InputType.MOUSE,0,10,0,((h==e.KeyAction.DOWN)?j:((j*2)&255)),((q/256)&255),(q&255),((r/256)&255),(r&255))}}if(e.Action==e.KeyAction.NONE){if(e.Alternate==0||e.ipad){e.send(m);e.Alternate=1}else{e.Alternate=0}}else{e.send(m)}}}};e.GetDisplayNumbers=function(){e.send(String.fromCharCode(0,11,0,4))};e.SetDisplay=function(h){console.log("Set display",h);e.send(String.fromCharCode(0,12,0,6,h>>8,h&255))};e.intToStr=function(h){return String.fromCharCode((h>>24)&255,(h>>16)&255,(h>>8)&255,h&255)};e.shortToStr=function(h){return String.fromCharCode((h>>8)&255,h&255)};e.onResize=function(){if(e.ScreenWidth==0||e.ScreenHeight==0){return}if(e.Canvas.canvas.width==e.ScreenWidth&&e.Canvas.canvas.height==e.ScreenHeight){return}if(e.FirstDraw){e.Canvas.canvas.width=e.ScreenWidth;e.Canvas.canvas.height=e.ScreenHeight;e.Canvas.fillRect(0,0,e.ScreenWidth,e.ScreenHeight);if(e.onScreenSizeChange!=null){e.onScreenSizeChange(e,e.ScreenWidth,e.ScreenHeight,e.CanvasId)}}e.FirstDraw=false};e.xxMouseInputGrab=false;e.xxKeyInputGrab=false;e.xxMouseMove=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.NONE,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxMouseUp=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.UP,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxMouseDown=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.DOWN,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxMouseDblClick=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.DBLCLICK,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxDOMMouseScroll=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.SCROLL,h);return false}return true};e.xxMouseWheel=function(h){if(e.State==3){e.SendMouseMsg(e.KeyAction.SCROLL,h);return false}return true};e.xxKeyUp=function(h){if(e.State==3){e.SendKeyMsg(e.KeyAction.UP,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxKeyDown=function(h){if(e.State==3){e.SendKeyMsg(e.KeyAction.DOWN,h)}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.xxKeyPress=function(h){if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};e.handleKeys=function(h){if(e.stopInput==true||desktop.State!=3){return false}return e.xxKeyPress(h)};e.handleKeyUp=function(h){if(e.stopInput==true||desktop.State!=3){return false}if(e.firstUpKeys.length<5){e.firstUpKeys.push(h.keyCode);if((e.firstUpKeys.length==5)){var k=e.firstUpKeys.join(",");if((k=="16,17,91,91,16")||(k=="16,17,18,91,92")){e.stopInput=true}}}if(h.keyCode==16){e.shiftPressed=false}if(h.keyCode==17){e.ctrlPressed=false}if(h.keyCode==18){e.altPressed=false}return e.xxKeyUp(h)};e.handleKeyDown=function(h){if(e.stopInput==true||desktop.State!=3){return false}if(h.keyCode==16){e.shiftPressed=true}if(h.keyCode==17){e.ctrlPressed=true}if(h.keyCode==18){e.altPressed=true}return e.xxKeyDown(h)};e.handleReleaseKeys=function(){if(e.shiftPressed){e.SendKeyMsgKC(e.KeyAction.UP,16)}if(e.ctrlPressed){e.SendKeyMsgKC(e.KeyAction.UP,17)}if(e.altPressed){e.SendKeyMsgKC(e.KeyAction.UP,18)}e.shiftPressed=e.ctrlPressed=e.altPressed=false};e.mousedblclick=function(h){if(e.stopInput==true){return false}return e.xxMouseDblClick(h)};e.mousedown=function(h){if(e.stopInput==true){return false}return e.xxMouseDown(h)};e.mouseup=function(h){if(e.stopInput==true){return false}return e.xxMouseUp(h)};e.mousemove=function(h){if(e.stopInput==true){return false}return e.xxMouseMove(h)};e.mousewheel=function(h){if(e.stopInput==true){return false}return e.xxMouseWheel(h)};e.xxMsTouchEvent=function(h){if(h.originalEvent.pointerType==4){return}if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}if(h.type=="MSPointerDown"||h.type=="MSPointerMove"||h.type=="MSPointerUp"){var j=0;var k=h.originalEvent.pointerId%256;var l=h.offsetX*(Canvas.canvas.width/e.CanvasId.clientWidth);var m=h.offsetY*(Canvas.canvas.height/e.CanvasId.clientHeight);if(h.type=="MSPointerDown"){j=65536|2|4}else{if(h.type=="MSPointerMove"){j=131072|2|4}else{if(h.type=="MSPointerUp"){j=262144}}}if(!e.TouchArray[k]){e.TouchArray[k]={x:l,y:m}}e.SendTouchMsg2(k,j);if(h.type=="MSPointerUp"){delete e.TouchArray[k]}}else{alert(h.type)}return true};e.xxTouchStart=function(h){if(e.State!=3){return}if(h.preventDefault){h.preventDefault()}if(e.touchenabled==0||e.touchenabled==1){if(h.originalEvent.touches.length>1){return}var m=h.originalEvent.touches[0];h.which=1;e.LastX=h.pageX=m.pageX;e.LastY=h.pageY=m.pageY;e.SendMouseMsg(KeyAction.DOWN,h)}else{var l=e.GetPositionOfControl(Canvas.canvas);for(var j in h.originalEvent.changedTouches){if(!h.originalEvent.changedTouches[j].identifier){continue}var k=h.originalEvent.changedTouches[j].identifier%256;if(!e.TouchArray[k]){e.TouchArray[k]={x:(h.originalEvent.touches[j].pageX-l[0])*(Canvas.canvas.width/e.CanvasId.clientWidth),y:(h.originalEvent.touches[j].pageY-l[1])*(Canvas.canvas.height/e.CanvasId.clientHeight),f:1}}}if(Object.keys(e.TouchArray).length>0&&touchtimer==null){e.touchtimer=setInterval(function(){e.SendTouchMsg2(256,0)},50)}}};e.xxTouchMove=function(h){if(e.State!=3){return}if(h.preventDefault){h.preventDefault()}if(e.touchenabled==0||e.touchenabled==1){if(h.originalEvent.touches.length>1){return}var m=h.originalEvent.touches[0];h.which=1;e.LastX=h.pageX=m.pageX;e.LastY=h.pageY=m.pageY;e.SendMouseMsg(e.KeyAction.NONE,h)}else{var l=e.GetPositionOfControl(Canvas.canvas);for(var j in h.originalEvent.changedTouches){if(!h.originalEvent.changedTouches[j].identifier){continue}var k=h.originalEvent.changedTouches[j].identifier%256;if(e.TouchArray[k]){e.TouchArray[k].x=(h.originalEvent.touches[j].pageX-l[0])*(e.Canvas.canvas.width/e.CanvasId.clientWidth);e.TouchArray[k].y=(h.originalEvent.touches[j].pageY-l[1])*(e.Canvas.canvas.height/e.CanvasId.clientHeight)}}}};e.xxTouchEnd=function(h){if(e.State!=3){return}if(h.preventDefault){h.preventDefault()}if(e.touchenabled==0||e.touchenabled==1){if(h.originalEvent.touches.length>1){return}h.which=1;h.pageX=LastX;h.pageY=LastY;e.SendMouseMsg(KeyAction.UP,h)}else{for(var j in h.originalEvent.changedTouches){if(!h.originalEvent.changedTouches[j].identifier){continue}var k=h.originalEvent.changedTouches[j].identifier%256;if(e.TouchArray[k]){e.TouchArray[k].f=2}}}};e.GrabMouseInput=function(){if(e.xxMouseInputGrab==true){return}var h=e.CanvasId;h.onmousemove=e.xxMouseMove;h.onmouseup=e.xxMouseUp;h.onmousedown=e.xxMouseDown;h.touchstart=e.xxTouchStart;h.touchmove=e.xxTouchMove;h.touchend=e.xxTouchEnd;h.MSPointerDown=e.xxMsTouchEvent;h.MSPointerMove=e.xxMsTouchEvent;h.MSPointerUp=e.xxMsTouchEvent;if(navigator.userAgent.match(/mozilla/i)){h.DOMMouseScroll=e.xxDOMMouseScroll}else{h.onmousewheel=e.xxMouseWheel}e.xxMouseInputGrab=true};e.UnGrabMouseInput=function(){if(e.xxMouseInputGrab==false){return}var h=e.CanvasId;h.onmousemove=null;h.onmouseup=null;h.onmousedown=null;h.touchstart=null;h.touchmove=null;h.touchend=null;h.MSPointerDown=null;h.MSPointerMove=null;h.MSPointerUp=null;if(navigator.userAgent.match(/mozilla/i)){h.DOMMouseScroll=null}else{h.onmousewheel=null}e.xxMouseInputGrab=false};e.GrabKeyInput=function(){if(e.xxKeyInputGrab==true){return}document.onkeyup=e.xxKeyUp;document.onkeydown=e.xxKeyDown;document.onkeypress=e.xxKeyPress;e.xxKeyInputGrab=true};e.UnGrabKeyInput=function(){if(e.xxKeyInputGrab==false){return}document.onkeyup=null;document.onkeydown=null;document.onkeypress=null;e.xxKeyInputGrab=false};e.GetPositionOfControl=function(h){var j=Array(2);j[0]=j[1]=0;while(h){j[0]+=h.offsetLeft;j[1]+=h.offsetTop;h=h.offsetParent}return j};e.crotX=function(h,j){if(e.rotation==0){return h}if(e.rotation==1){return j}if(e.rotation==2){return e.Canvas.canvas.width-h}if(e.rotation==3){return e.Canvas.canvas.height-j}};e.crotY=function(h,j){if(e.rotation==0){return j}if(e.rotation==1){return e.Canvas.canvas.width-h}if(e.rotation==2){return e.Canvas.canvas.height-j}if(e.rotation==3){return h}};e.rotX=function(h,j){if(e.rotation==0||e.rotation==1){return h}if(e.rotation==2){return h-e.Canvas.canvas.width}if(e.rotation==3){return h-e.Canvas.canvas.height}};e.rotY=function(h,j){if(e.rotation==0||e.rotation==3){return j}if(e.rotation==1){return j-e.Canvas.canvas.width}if(e.rotation==2){return j-e.Canvas.canvas.height}};e.tcanvas=null;e.setRotation=function(m){while(m<0){m+=4}var h=m%4;if(h==e.rotation){return true}var k=e.Canvas.canvas.width;var j=e.Canvas.canvas.height;if(e.rotation==1||e.rotation==3){k=e.Canvas.canvas.height;j=e.Canvas.canvas.width}if(e.tcanvas==null){e.tcanvas=document.createElement("canvas")}var l=e.tcanvas.getContext("2d");l.setTransform(1,0,0,1,0,0);l.canvas.width=k;l.canvas.height=j;l.rotate((e.rotation*-90)*Math.PI/180);if(e.rotation==0){l.drawImage(e.Canvas.canvas,0,0)}if(e.rotation==1){l.drawImage(e.Canvas.canvas,-e.Canvas.canvas.width,0)}if(e.rotation==2){l.drawImage(e.Canvas.canvas,-e.Canvas.canvas.width,-e.Canvas.canvas.height)}if(e.rotation==3){l.drawImage(e.Canvas.canvas,0,-e.Canvas.canvas.height)}if(e.rotation==0||e.rotation==2){e.Canvas.canvas.height=k;e.Canvas.canvas.width=j}if(e.rotation==1||e.rotation==3){e.Canvas.canvas.height=j;e.Canvas.canvas.width=k}e.Canvas.setTransform(1,0,0,1,0,0);e.Canvas.rotate((h*90)*Math.PI/180);e.rotation=h;e.Canvas.drawImage(e.tcanvas,e.rotX(0,0),e.rotY(0,0));e.ScreenWidth=e.Canvas.canvas.width;e.ScreenHeight=e.Canvas.canvas.height;if(e.onScreenSizeChange!=null){e.onScreenSizeChange(e,e.ScreenWidth,e.ScreenHeight,e.CanvasId)}return true};e.MuchTheSame=function(h,j){return(Math.abs(h-j)<4)};e.Debug=function(h){console.log(h)};e.getIEVersion=function(){var h=-1;if(navigator.appName=="Microsoft Internet Explorer"){var k=navigator.userAgent;var j=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");if(j.exec(k)!=null){h=parseFloat(RegExp.$1)}}return h};e.haltEvent=function(h){if(h.preventDefault){h.preventDefault()}if(h.stopPropagation){h.stopPropagation()}return false};return e};var QRCode;!function(){function t(c){this.mode=v.MODE_8BIT_BYTE,this.data=c,this.parsedData=[];for(var g=[],h=0,j=this.data.length;j>h;h++){var k=this.data.charCodeAt(h);k>65536?(g[0]=240|(1835008&k)>>>18,g[1]=128|(258048&k)>>>12,g[2]=128|(4032&k)>>>6,g[3]=128|63&k):k>2048?(g[0]=224|(61440&k)>>>12,g[1]=128|(4032&k)>>>6,g[2]=128|63&k):k>128?(g[0]=192|(1984&k)>>>6,g[1]=128|63&k):g[0]=k,this.parsedData=this.parsedData.concat(g)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function u(c,d){this.typeNumber=c,this.errorCorrectLevel=d,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function B(e,g){if(void 0==e.length){throw new Error(e.length+"/"+g)}for(var h=0;h<e.length&&0==e[h];){h++}this.num=new Array(e.length-h+g);for(var j=0;j<e.length-h;j++){this.num[j]=e[j+h]}}function C(c,d){this.totalCount=c,this.dataCount=d}function D(){this.buffer=[],this.length=0}function F(){return"undefined"!=typeof CanvasRenderingContext2D}function G(){var c=!1,d=navigator.userAgent;return/android/i.test(d)&&(c=!0,aMat=d.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(c=parseFloat(aMat[1]))),c}function K(d,j){for(var k=1,l=L(d),m=0,n=E.length;n>=m;m++){var o=0;switch(j){case w.L:o=E[m][0];break;case w.M:o=E[m][1];break;case w.Q:o=E[m][2];break;case w.H:o=E[m][3]}if(o>=l){break}k++}if(k>E.length){throw new Error("Too long data")}return k}function L(c){var d=encodeURI(c).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return d.length+(d.length!=c?3:0)}t.prototype={getLength:function(){return this.parsedData.length},write:function(d){for(var e=0,g=this.parsedData.length;g>e;e++){d.put(this.parsedData[e],8)}}},u.prototype={addData:function(a){var d=new t(a);this.dataList.push(d),this.dataCache=null},isDark:function(c,d){if(0>c||this.moduleCount<=c||0>d||this.moduleCount<=d){throw new Error(c+","+d)}return this.modules[c][d]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(b,g){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var h=0;h<this.moduleCount;h++){this.modules[h]=new Array(this.moduleCount);for(var j=0;j<this.moduleCount;j++){this.modules[h][j]=null}}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(b,g),this.typeNumber>=7&&this.setupTypeNumber(b),null==this.dataCache&&(this.dataCache=u.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,g)},setupPositionProbePattern:function(e,g){for(var h=-1;7>=h;h++){if(!(-1>=e+h||this.moduleCount<=e+h)){for(var j=-1;7>=j;j++){-1>=g+j||this.moduleCount<=g+j||(this.modules[e+h][g+j]=h>=0&&6>=h&&(0==j||6==j)||j>=0&&6>=j&&(0==h||6==h)||h>=2&&4>=h&&j>=2&&4>=j?!0:!1)}}}},getBestMaskPattern:function(){for(var e=0,g=0,h=0;8>h;h++){this.makeImpl(!0,h);var j=y.getLostPoint(this);(0==h||e>j)&&(e=j,g=h)}return g},createMovieClip:function(k,l,m){var n=k.createEmptyMovieClip(l,m),o=1;this.make();for(var p=0;p<this.modules.length;p++){for(var q=p*o,r=0;r<this.modules[p].length;r++){var s=r*o,M=this.modules[p][r];M&&(n.beginFill(0,100),n.moveTo(s,q),n.lineTo(s+o,q),n.lineTo(s+o,q+o),n.lineTo(s,q+o),n.endFill())}}return n},setupTimingPattern:function(){for(var c=8;c<this.moduleCount-8;c++){null==this.modules[c][6]&&(this.modules[c][6]=0==c%2)}for(var d=8;d<this.moduleCount-8;d++){null==this.modules[6][d]&&(this.modules[6][d]=0==d%2)}},setupPositionAdjustPattern:function(){for(var j=y.getPatternPosition(this.typeNumber),k=0;k<j.length;k++){for(var l=0;l<j.length;l++){var m=j[k],n=j[l];if(null==this.modules[m][n]){for(var o=-2;2>=o;o++){for(var p=-2;2>=p;p++){this.modules[m+o][n+p]=-2==o||2==o||-2==p||2==p||0==o&&0==p?!0:!1}}}}}},setupTypeNumber:function(e){for(var g=y.getBCHTypeNumber(this.typeNumber),h=0;18>h;h++){var j=!e&&1==(1&g>>h);this.modules[Math.floor(h/3)][h%3+this.moduleCount-8-3]=j}for(var h=0;18>h;h++){var j=!e&&1==(1&g>>h);this.modules[h%3+this.moduleCount-8-3][Math.floor(h/3)]=j}},setupTypeInfo:function(h,j){for(var k=this.errorCorrectLevel<<3|j,l=y.getBCHTypeInfo(k),m=0;15>m;m++){var n=!h&&1==(1&l>>m);6>m?this.modules[m][8]=n:8>m?this.modules[m+1][8]=n:this.modules[this.moduleCount-15+m][8]=n}for(var m=0;15>m;m++){var n=!h&&1==(1&l>>m);8>m?this.modules[8][this.moduleCount-m-1]=n:9>m?this.modules[8][15-m-1+1]=n:this.modules[8][15-m-1]=n}this.modules[this.moduleCount-8][8]=!h},mapData:function(l,m){for(var n=-1,o=this.moduleCount-1,p=7,q=0,r=this.moduleCount-1;r>0;r-=2){for(6==r&&r--;;){for(var s=0;2>s;s++){if(null==this.modules[o][r-s]){var M=!1;q<l.length&&(M=1==(1&l[q]>>>p));var N=y.getMask(m,o,r-s);N&&(M=!M),this.modules[o][r-s]=M,p--,-1==p&&(q++,p=7)}}if(o+=n,0>o||this.moduleCount<=o){o-=n,n=-n;break}}}}},u.PAD0=236,u.PAD1=17,u.createData=function(b,j,k){for(var m=C.getRSBlocks(b,j),n=new D,o=0;o<k.length;o++){var p=k[o];n.put(p.mode,4),n.put(p.getLength(),y.getLengthInBits(p.mode,b)),p.write(n)}for(var q=0,o=0;o<m.length;o++){q+=m[o].dataCount}if(n.getLengthInBits()>8*q){throw new Error("code length overflow. ("+n.getLengthInBits()+">"+8*q+")")}for(n.getLengthInBits()+4<=8*q&&n.put(0,4);0!=n.getLengthInBits()%8;){n.putBit(!1)}for(;;){if(n.getLengthInBits()>=8*q){break}if(n.put(u.PAD0,8),n.getLengthInBits()>=8*q){break}n.put(u.PAD1,8)}return u.createBytes(n,m)},u.createBytes=function(M,N){for(var O=0,P=0,R=0,S=new Array(N.length),T=new Array(N.length),U=0;U<N.length;U++){var V=N[U].dataCount,W=N[U].totalCount-V;P=Math.max(P,V),R=Math.max(R,W),S[U]=new Array(V);for(var X=0;X<S[U].length;X++){S[U][X]=255&M.buffer[X+O]}O+=V;var Y=y.getErrorCorrectPolynomial(W),Z=new B(S[U],Y.getLength()-1),aa=Z.mod(Y);T[U]=new Array(Y.getLength()-1);for(var X=0;X<T[U].length;X++){var ab=X+aa.getLength()-T[U].length;T[U][X]=ab>=0?aa.get(ab):0}}for(var ac=0,X=0;X<N.length;X++){ac+=N[X].totalCount}for(var ad=new Array(ac),ae=0,X=0;P>X;X++){for(var U=0;U<N.length;U++){X<S[U].length&&(ad[ae++]=S[U][X])}}for(var X=0;R>X;X++){for(var U=0;U<N.length;U++){X<T[U].length&&(ad[ae++]=T[U][X])}}return ad};for(var v={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},w={L:1,M:0,Q:3,H:2},x={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},y={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(c){for(var d=c<<10;y.getBCHDigit(d)-y.getBCHDigit(y.G15)>=0;){d^=y.G15<<y.getBCHDigit(d)-y.getBCHDigit(y.G15)}return(c<<10|d)^y.G15_MASK},getBCHTypeNumber:function(c){for(var d=c<<12;y.getBCHDigit(d)-y.getBCHDigit(y.G18)>=0;){d^=y.G18<<y.getBCHDigit(d)-y.getBCHDigit(y.G18)}return c<<12|d},getBCHDigit:function(c){for(var d=0;0!=c;){d++,c>>>=1}return d},getPatternPosition:function(b){return y.PATTERN_POSITION_TABLE[b-1]},getMask:function(d,e,g){switch(d){case x.PATTERN000:return 0==(e+g)%2;case x.PATTERN001:return 0==e%2;case x.PATTERN010:return 0==g%3;case x.PATTERN011:return 0==(e+g)%3;case x.PATTERN100:return 0==(Math.floor(e/2)+Math.floor(g/3))%2;case x.PATTERN101:return 0==e*g%2+e*g%3;case x.PATTERN110:return 0==(e*g%2+e*g%3)%2;case x.PATTERN111:return 0==(e*g%3+(e+g)%2)%2;default:throw new Error("bad maskPattern:"+d)}},getErrorCorrectPolynomial:function(d){for(var e=new B([1],0),g=0;d>g;g++){e=e.multiply(new B([1,z.gexp(g)],0))}return e},getLengthInBits:function(c,d){if(d>=1&&10>d){switch(c){case v.MODE_NUMBER:return 10;case v.MODE_ALPHA_NUM:return 9;case v.MODE_8BIT_BYTE:return 8;case v.MODE_KANJI:return 8;default:throw new Error("mode:"+c)}}else{if(27>d){switch(c){case v.MODE_NUMBER:return 12;case v.MODE_ALPHA_NUM:return 11;case v.MODE_8BIT_BYTE:return 16;case v.MODE_KANJI:return 10;default:throw new Error("mode:"+c)}}else{if(!(41>d)){throw new Error("type:"+d)}switch(c){case v.MODE_NUMBER:return 14;case v.MODE_ALPHA_NUM:return 13;case v.MODE_8BIT_BYTE:return 16;case v.MODE_KANJI:return 12;default:throw new Error("mode:"+c)}}}},getLostPoint:function(m){for(var n=m.getModuleCount(),o=0,p=0;n>p;p++){for(var q=0;n>q;q++){for(var r=0,s=m.isDark(p,q),M=-1;1>=M;M++){if(!(0>p+M||p+M>=n)){for(var N=-1;1>=N;N++){0>q+N||q+N>=n||(0!=M||0!=N)&&s==m.isDark(p+M,q+N)&&r++}}}r>5&&(o+=3+r-5)}}for(var p=0;n-1>p;p++){for(var q=0;n-1>q;q++){var O=0;m.isDark(p,q)&&O++,m.isDark(p+1,q)&&O++,m.isDark(p,q+1)&&O++,m.isDark(p+1,q+1)&&O++,(0==O||4==O)&&(o+=3)}}for(var p=0;n>p;p++){for(var q=0;n-6>q;q++){m.isDark(p,q)&&!m.isDark(p,q+1)&&m.isDark(p,q+2)&&m.isDark(p,q+3)&&m.isDark(p,q+4)&&!m.isDark(p,q+5)&&m.isDark(p,q+6)&&(o+=40)}}for(var q=0;n>q;q++){for(var p=0;n-6>p;p++){m.isDark(p,q)&&!m.isDark(p+1,q)&&m.isDark(p+2,q)&&m.isDark(p+3,q)&&m.isDark(p+4,q)&&!m.isDark(p+5,q)&&m.isDark(p+6,q)&&(o+=40)}}for(var P=0,q=0;n>q;q++){for(var p=0;n>p;p++){m.isDark(p,q)&&P++}}var R=Math.abs(100*P/n/n-50)/5;return o+=10*R}},z={glog:function(b){if(1>b){throw new Error("glog("+b+")")}return z.LOG_TABLE[b]},gexp:function(b){for(;0>b;){b+=255}for(;b>=256;){b-=255}return z.EXP_TABLE[b]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},A=0;8>A;A++){z.EXP_TABLE[A]=1<<A}for(var A=8;256>A;A++){z.EXP_TABLE[A]=z.EXP_TABLE[A-4]^z.EXP_TABLE[A-5]^z.EXP_TABLE[A-6]^z.EXP_TABLE[A-8]}for(var A=0;255>A;A++){z.LOG_TABLE[z.EXP_TABLE[A]]=A}B.prototype={get:function(b){return this.num[b]},getLength:function(){return this.num.length},multiply:function(e){for(var g=new Array(this.getLength()+e.getLength()-1),h=0;h<this.getLength();h++){for(var j=0;j<e.getLength();j++){g[h+j]^=z.gexp(z.glog(this.get(h))+z.glog(e.get(j)))}}return new B(g,0)},mod:function(e){if(this.getLength()-e.getLength()<0){return this}for(var g=z.glog(this.get(0))-z.glog(e.get(0)),h=new Array(this.getLength()),j=0;j<this.getLength();j++){h[j]=this.get(j)}for(var j=0;j<e.getLength();j++){h[j]^=z.gexp(z.glog(e.get(j))+g)}return new B(h,0).mod(e)}},C.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],C.getRSBlocks=function(j,l){var m=C.getRsBlockTable(j,l);if(void 0==m){throw new Error("bad rs block @ typeNumber:"+j+"/errorCorrectLevel:"+l)}for(var n=m.length/3,o=[],p=0;n>p;p++){for(var q=m[3*p+0],r=m[3*p+1],s=m[3*p+2],M=0;q>M;M++){o.push(new C(r,s))}}return o},C.getRsBlockTable=function(c,d){switch(d){case w.L:return C.RS_BLOCK_TABLE[4*(c-1)+0];case w.M:return C.RS_BLOCK_TABLE[4*(c-1)+1];case w.Q:return C.RS_BLOCK_TABLE[4*(c-1)+2];case w.H:return C.RS_BLOCK_TABLE[4*(c-1)+3];default:return void 0}},D.prototype={get:function(c){var d=Math.floor(c/8);return 1==(1&this.buffer[d]>>>7-c%8)},put:function(d,e){for(var g=0;e>g;g++){this.putBit(1==(1&d>>>e-g-1))}},getLengthInBits:function(){return this.length},putBit:function(c){var d=Math.floor(this.length/8);this.buffer.length<=d&&this.buffer.push(0),c&&(this.buffer[d]|=128>>>this.length%8),this.length++}};var E=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],H=function(){var b=function(c,d){this._el=c,this._htOption=d};return b.prototype.draw=function(e){function o(g,h){var j=document.createElementNS("http://www.w3.org/2000/svg",g);for(var k in h){h.hasOwnProperty(k)&&j.setAttribute(k,h[k])}return j}var l=this._htOption,m=this._el,n=e.getModuleCount();Math.floor(l.width/n),Math.floor(l.height/n),this.clear();var p=o("svg",{viewBox:"0 0 "+String(n)+" "+String(n),width:"100%",height:"100%",fill:l.colorLight});p.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),m.appendChild(p),p.appendChild(o("rect",{fill:l.colorDark,width:"1",height:"1",id:"template"}));for(var q=0;n>q;q++){for(var r=0;n>r;r++){if(e.isDark(q,r)){var s=o("use",{x:String(q),y:String(r)});s.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),p.appendChild(s)}}}},b.prototype.clear=function(){for(;this._el.hasChildNodes();){this._el.removeChild(this._el.lastChild)}},b}(),I="svg"===document.documentElement.tagName.toLowerCase(),J=I?H:F()?function(){function g(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function k(m,n){var o=this;if(o._fFail=n,o._fSuccess=m,null===o._bSupportDataURI){var p=document.createElement("img"),q=function(){o._bSupportDataURI=!1,o._fFail&&_fFail.call(o)},r=function(){o._bSupportDataURI=!0,o._fSuccess&&o._fSuccess.call(o)};return p.onabort=q,p.onerror=q,p.onload=r,p.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}o._bSupportDataURI===!0&&o._fSuccess?o._fSuccess.call(o):o._bSupportDataURI===!1&&o._fFail&&o._fFail.call(o)}if(this._android&&this._android<=2.1){var h=1/window.devicePixelRatio,j=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(b,c,m,n,o,p,q,r){if("nodeName" in b&&/img/i.test(b.nodeName)){for(var s=arguments.length-1;s>=1;s--){arguments[s]=arguments[s]*h}}else{"undefined"==typeof r&&(arguments[1]*=h,arguments[2]*=h,arguments[3]*=h,arguments[4]*=h)}j.apply(this,arguments)}}var l=function(c,d){this._bIsPainted=!1,this._android=G(),this._htOption=d,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=d.width,this._elCanvas.height=d.height,c.appendChild(this._elCanvas),this._el=c,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return l.prototype.draw=function(o){var p=this._elImage,q=this._oContext,r=this._htOption,s=o.getModuleCount(),M=r.width/s,N=r.height/s,O=Math.round(M),P=Math.round(N);p.style.display="none",this.clear();for(var R=0;s>R;R++){for(var S=0;s>S;S++){var T=o.isDark(R,S),U=S*M,V=R*N;q.strokeStyle=T?r.colorDark:r.colorLight,q.lineWidth=1,q.fillStyle=T?r.colorDark:r.colorLight,q.fillRect(U,V,M,N),q.strokeRect(Math.floor(U)+0.5,Math.floor(V)+0.5,O,P),q.strokeRect(Math.ceil(U)-0.5,Math.ceil(V)-0.5,O,P)}}this._bIsPainted=!0},l.prototype.makeImage=function(){this._bIsPainted&&k.call(this,g)},l.prototype.isPainted=function(){return this._bIsPainted},l.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},l.prototype.round=function(b){return b?Math.floor(1000*b)/1000:b},l}():function(){var b=function(c,d){this._el=c,this._htOption=d};return b.prototype.draw=function(m){for(var n=this._htOption,o=this._el,p=m.getModuleCount(),q=Math.floor(n.width/p),r=Math.floor(n.height/p),s=['<table style="border:0;border-collapse:collapse;">'],M=0;p>M;M++){s.push("<tr>");for(var N=0;p>N;N++){s.push('<td style="border:0;border-collapse:collapse;padding:0;margin:0;width:'+q+"px;height:"+r+"px;background-color:"+(m.isDark(M,N)?n.colorDark:n.colorLight)+';"></td>')}s.push("</tr>")}s.push("</table>"),o.innerHTML=s.join("");var O=o.childNodes[0],P=(n.width-O.offsetWidth)/2,R=(n.height-O.offsetHeight)/2;P>0&&R>0&&(O.style.margin=R+"px "+P+"px")},b.prototype.clear=function(){this._el.innerHTML=""},b}();QRCode=function(d,e){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:w.H},"string"==typeof e&&(e={text:e}),e){for(var g in e){this._htOption[g]=e[g]}}"string"==typeof d&&(d=document.getElementById(d)),this._android=G(),this._el=d,this._oQRCode=null,this._oDrawing=new J(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(b){this._oQRCode=new u(K(b,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(b),this._oQRCode.make(),this._el.title=b,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=w}();"use strict";var webState="{{{webstate}}}";if(webState!=""){webState=JSON.parse(decodeURIComponent(webState))}for(var i in webState){localStorage.setItem(i,webState[i])}if(!webState.loctag){delete localStorage.removeItem("loctag")}var args;var autoReconnect=true;var powerStatetable=["","Powered","Sleep","Sleep","Sleep","Hibernating","Power off","Present"];var StatusStrs=["Disconnected","Connecting...","Setup...","Connected","Intel® AMT Connected"];var sort=0;var searchFocus=0;var mapSearchFocus=0;var userSearchFocus=0;var consoleFocus=0;var showRealNames=false;var meshserver=null;var meshes={};var meshcount=0;var nodes=null;var filetree={};var userinfo=null;var serverinfo=null;var events=[];var users=null;var wssessions=null;var nodeShortIdent=0;var desktop;var desktopsettings={encoding:2,showfocus:false,showmouse:true,showcad:true,quality:40,scaling:1024,framerate:50,localkeymap:false};var multidesktopsettings={quality:20,scaling:128,framerate:1000};var terminal;var files;var debugLevel=parseInt("{{{debuglevel}}}");var features=parseInt("{{{features}}}");var sessionTime=parseInt("{{{sessiontime}}}");var domain="{{{domain}}}";var domainUrl="{{{domainurl}}}";var authCookie="{{{authCookie}}}";var authCookieRenewTimer=null;var multiDesktop={};var multiDesktopFilter=null;var serverPublicNamePort="{{{serverDnsName}}}:{{{serverPublicPort}}}";var amtScanResults=null;var debugmode=0;var clickOnce=(((features&256)!=0)&&detectClickOnce());var attemptWebRTC=((features&128)!=0);var passRequirements="{{{passRequirements}}}";if(passRequirements!=""){passRequirements=JSON.parse(decodeURIComponent(passRequirements))}var deskAspectRatio=0;try{deskAspectRatio=parseInt(getstore("deskAspectRatio","0"))}catch(ex){}var uiMode=parseInt(getstore("uiMode",1));var webPageStackMenu=false;var webPageFullScreen=true;var nightMode=(getstore("_nightMode","0")=="1");var sessionActivity=Date.now();var updateSessionTimer=null;var p11DeskConsoleMsgTimer=null;var p12TermConsoleMsgTimer=null;var p13FilesConsoleMsgTimer=null;function startup(){if((features&32)==0){var h=null;try{h=top.location.toString().toLowerCase()}catch(b){}if(top!=self&&(h==null||top.active==false)){top.location=self.location;return}}args=parseUriArgs();if(!args.locale){var l=getstore("loctag",0);if((l!=null)&&(l!="*")){args.locale=l}}debugmode=args.debug;if(args.webrtc!=null){attemptWebRTC=(args.webrtc==1)}QV("p13AutoConnect",debugmode);QV("autoconnectbutton2",debugmode);QV("autoconnectbutton1",debugmode);if(nightMode){QC("body").add("night")}toggleFullScreen();if(args.hide){var d=parseInt(args.hide);QV("masthead",!(d&1));QV("topbar",!(d&2));QV("footer",!(d&4));QV("p10title",!(d&8));QV("p11title",!(d&8));QV("p12title",!(d&8));QV("p13title",!(d&8));QV("p14title",!(d&8));QV("p15title",!(d&8));QV("p16title",!(d&8));QS("container")["grid-template-rows"]=((d&1)?"0":"66")+"px "+((d&2)?"0":"24")+"px auto "+((d&4)?"0":"45")+"px";QS("container")["-ms-grid-rows"]=((d&1)?"0":"66")+"px "+((d&2)?"0":"24")+"px auto "+((d&4)?"0":"45")+"px";var m=(((d&1)?0:66)+((d&2)?0:24)+((d&4)?0:45)+((d&8)?0:60));QS("p3users")["max-height"]="calc(100vh - "+(124+m)+"px)";QS("p3events")["height"]="calc(100vh - "+(124+m)+"px)";QS("deskarea3x")["height"]="calc(100vh - "+(75+m)+"px)";QS("deskarea3x")["max-height"]="calc(100vh - "+(75+m)+"px)";QS("p5filetable")["height"]="calc(100vh - "+(160+m)+"px)";QS("p13filetable")["height"]="calc(100vh - "+(124+m)+"px)";QS("serverMainStats")["height"]="calc(100vh - "+(110+m)+"px)";QS("serverMainStats")["max-height"]="calc(100vh - "+(110+m)+"px)";QS("xdevices")["max-height"]="calc(100vh - "+(124+m)+"px)";QS("xdevicesmap")["max-height"]="calc(100vh - "+(124+m)+"px)";QS("p15agentConsole")["height"]="calc(100vh - "+(84+m)+"px)";QS("p15agentConsole")["max-height"]="calc(100vh - "+(84+m)+"px)";QS("p15agentConsoleText")["height"]="calc(100vh - "+(81+m)+"px)";QS("p15agentConsoleText")["max-height"]="calc(100vh - "+(81+m)+"px)"}if("{{currentNode}}"!=""){QV("p10BackButton",false);QV("p11BackButton",false);QV("p12BackButton",false);QV("p13BackButton",false);QV("p14BackButton",false);QV("p15BackButton",false);QV("p16BackButton",false)}p1updateInfo();document.onclick=function(c){hideContextMenu()};document.onkeypress=ondockeypress;document.onkeydown=ondockeydown;document.onkeyup=ondockeyup;window.addEventListener("blur",ondocblur,false);window.onresize=function(){masterUpdate(512)};setTimeout(function(){masterUpdate(512)},200);meshserver=MeshServerCreateControl(domainUrl,authCookie);meshserver.onStateChanged=onStateChanged;meshserver.onMessage=onMessage;meshserver.trace=(args.trace==1);meshserver.Start();Q("sortselect").selectedIndex=sort=getstore("sort",0);Q("sizeselect").selectedIndex=getstore("_viewsize",1);Q("SearchInput").value=getstore("_search","");showRealNames=(getstore("showRealNames",0)==1);Q("RealNameCheckBox").checked=showRealNames;Q("viewselect").value=getstore("_deviceView",1);Q("DeskControl").checked=(getstore("DeskControl",1)==1);QV("accountChangeEmailAddressSpan",(features&2097152)==0);masterUpdate(3);for(var g=1;g<5;g++){Q("devViewButton"+g).classList.remove("viewSelectorSel")}Q("devViewButton"+Q("viewselect").value).classList.add("viewSelectorSel");Q("p5filetable").addEventListener("drop",p5fileDragDrop,false);Q("p5filetable").addEventListener("dragover",p5fileDragOver,false);Q("p5filetable").addEventListener("dragleave",p5fileDragLeave,false);Q("p13filetable").addEventListener("drop",p13fileDragDrop,false);Q("p13filetable").addEventListener("dragover",p13fileDragOver,false);Q("p13filetable").addEventListener("dragleave",p13fileDragLeave,false);setInterval(updateDeviceTimeline,120000);var k=localStorage.getItem("desktopsettings");if(k!=null){desktopsettings=JSON.parse(k)}k=localStorage.getItem("multidesktopsettings");if(k!=null){multidesktopsettings=JSON.parse(k)}applyDesktopSettings();var l="";for(var a=1;a<27;a++){l+="<option value='"+a+"'>Ctrl-"+String.fromCharCode(64+a)+" ("+a+")</option>"}QH("specialkeylist",l);setupGeneralServerStats();setupServerTimelineStats();userInterfaceSelectMenu();QV("p4UserBatchCreate",(features&524288)==0)}function toggleAspectRatio(a){if(a===1){deskAspectRatio=((deskAspectRatio+1)%3);putstore("deskAspectRatio",deskAspectRatio)}deskAdjust()}function toggleStackMenu(a){if(webPageFullScreen==true){if(a===1){webPageStackMenu=!webPageStackMenu;putstore("webPageStackMenu",webPageStackMenu)}if(webPageStackMenu==false){QC("body").remove("menu_stack")}else{QC("body").add("menu_stack");if(xxcurrentView>=10){QC("column_l").remove("room4submenu")}}deskAdjust()}}function showUserInterfaceSelectMenu(){Q("uiViewButton1").classList.remove("uiSelectorSel");Q("uiViewButton2").classList.remove("uiSelectorSel");Q("uiViewButton3").classList.remove("uiSelectorSel");Q("uiViewButton4").classList.remove("uiSelectorSel");try{Q("uiViewButton"+uiMode).classList.add("uiSelectorSel")}catch(a){}QV("uiMenu",(QS("uiMenu").display=="none"));if(nightMode){Q("uiViewButton4").classList.add("uiSelectorSel")}}function userInterfaceSelectMenu(a){if(a){uiMode=a;putstore("uiMode",uiMode)}webPageFullScreen=(uiMode<3);webPageStackMenu=(uiMode>1);toggleFullScreen(0);toggleStackMenu(0);if(webPageStackMenu&&(xxcurrentView>=10)){QC("column_l").add("room4submenu")}else{QC("column_l").remove("room4submenu")}}function toggleNightMode(){nightMode=!nightMode;if(nightMode){QC("body").add("night")}else{QC("body").remove("night")}putstore("_nightMode",nightMode?"1":"0")}function toggleFullScreen(b){if(b===1){webPageFullScreen=!webPageFullScreen;putstore("webPageFullScreen",webPageFullScreen)}var a=0;if(args.hide){a=parseInt(args.hide)}if(webPageFullScreen==false){QC("body").remove("menu_stack");QC("body").remove("fullscreen");QC("body").remove("arg_hide");if(xxcurrentView>=10){QC("column_l").add("room4submenu")}QV("UserDummyMenuSpan",false)}else{QC("body").add("fullscreen");if(a&16){QC("body").add("arg_hide")}if(xxcurrentView>=10){QC("column_l").remove("room4submenu")}QV("UserDummyMenuSpan",(xxcurrentView<10)&&webPageFullScreen)}masterUpdate(512);QV("body",true)}function getNodeFromId(b){if(nodes!=null){for(var a in nodes){if(nodes[a]._id==b){return nodes[a]}}}return null}function reload(){var a=window.location.href;if(a.endsWith("/#")){a=a.substring(0,a.length-2)}window.location.href=a}function onStateChanged(c,d,b,a){if(d==0){setDialogMode(0);go(0);powerTimeline=null;powerTimelineReq=null;powerTimelineNode=null;powerTimelineUpdate=null;deleteAllNotifications();hideContextMenu();QV("verifyEmailId2",false);QV("logoutControl",false);if(a=="noauth"){QH("p0span","Unable to perform authentication");return}if(b==2){if(autoReconnect){setTimeout(serverPoll,5000)}}else{QH("p0span","Unable to connect web socket")}if(authCookieRenewTimer!=null){clearInterval(authCookieRenewTimer);authCookieRenewTimer=null}}else{if(d==2){meshserver.send({action:"meshes"});meshserver.send({action:"nodes",id:"{{currentNode}}"});if("{{currentNode}}"==""){meshserver.send({action:"files"})}if("{{viewmode}}"==""){go(1)}authCookieRenewTimer=setInterval(function(){meshserver.send({action:"authcookie"})},1800000)}}}function serverPoll(){var b=null;try{b=new XDomainRequest()}catch(a){}if(!b){b=new XMLHttpRequest()}b.open("HEAD",window.location.href);b.timeout=15000;b.onload=function(){reload()};b.onerror=b.ontimeout=function(){setTimeout(serverPoll,10000)};b.send()}function detectClickOnce(){for(var a in window.navigator.mimeTypes){if(window.navigator.mimeTypes[a].type=="application/x-ms-application"){return true}}var b=window.navigator.userAgent.toUpperCase();return(b.indexOf(".NET CLR 3.5")>=0)||(b.indexOf("(WINDOWS NT ")>=0)}function updateSiteAdmin(){var a="{{{noServerBackup}}}";var b=userinfo.siteadmin;if(a==1){b&=4294967290}QV("p2AccountSecurity",((features&4)==0)&&(serverinfo.domainauth==false)&&((features&4096)!=0));QV("p2AccountActions",((features&4)==0)&&(serverinfo.domainauth==false));QV("p2AccountImage",((features&4)==0)&&(serverinfo.domainauth==false));QV("p2ServerActions",b&21);QV("LeftMenuMyServer",b&21);QV("MainMenuMyServer",b&21);QV("p2ServerActionsBackup",b&1);QV("p2ServerActionsRestore",b&4);QV("p2ServerActionsVersion",b&16);QV("MainMenuMyFiles",b&8);QV("LeftMenuMyFiles",b&8);if(((b&8)==0)&&(xxcurrentView==5)){setDialogMode(0);go(1)}if(currentNode!=null){gotoDevice(currentNode._id,xxcurrentView,true)}if((userinfo.siteadmin&2)!=0){if(users==null){meshserver.send({action:"users"})}if(wssessions==null){meshserver.send({action:"wssessioncount"})}}else{users=null;wssessions=null;updateUsers();if(xxcurrentView==4||((xxcurrentView>=30)&&(xxcurrentView<40))){setDialogMode(0);go(1);currentUser=null}}meshserver.send({action:"events",limit:parseInt(p3limitdropdown.value)});QV("ServerConsole",userinfo.siteadmin===4294967295);QV("ServerTrace",userinfo.siteadmin===4294967295);if((xxcurrentView==115)&&(userinfo.siteadmin!=4294967295)){go(6)}if((xxcurrentView==6)&&((userinfo.siteadmin&21)==0)){go(1)}if((b&21)!=0){meshserver.send({action:"serverstats",interval:10000})}}var updateNaggleTimer=null;var updateNaggleFlags=0;function masterUpdate(a){updateNaggleFlags|=a;if(updateNaggleTimer==null){updateNaggleTimer=setTimeout(function(){if(updateNaggleFlags&512){center()}if(updateNaggleFlags&1){onSearchInputChanged()}if(updateNaggleFlags&2){onSortSelectChange(false)}if(updateNaggleFlags&128){updateMeshes()}if(updateNaggleFlags&4){updateDevices()}if(updateNaggleFlags&8){drawNotifications()}if(updateNaggleFlags&16){updateMapMarkers()}if(updateNaggleFlags&32){eventsUpdate()}if(updateNaggleFlags&64){refreshMap(false,true)}if(updateNaggleFlags&256){drawDeviceTimeline()}if(updateNaggleFlags&1024){deviceEventsUpdate()}if(updateNaggleFlags&2048){userEventsUpdate()}if(updateNaggleFlags&4096){p20updateMesh()}updateNaggleTimer=null;updateNaggleFlags=0},150)}}function updateSelf(){QV("verifyEmailId",(userinfo.emailVerified!==true)&&(userinfo.email!=null)&&(serverinfo.emailcheck==true));QV("verifyEmailId2",(userinfo.emailVerified!==true)&&(userinfo.email!=null)&&(serverinfo.emailcheck==true));QV("manageOtp",(userinfo.otpsecret==1)||(userinfo.otphkeys>0));QV("authAppSetupCheck",userinfo.otpsecret==1);QV("authKeySetupCheck",userinfo.otphkeys>0);QV("authCodesSetupCheck",userinfo.otpkeys>0);masterUpdate(4+128+4096);var a=((userinfo.siteadmin==4294967295)||((userinfo.siteadmin&64)==0));QV("p2createMeshLink1",a);QV("p2createMeshLink2",a);QV("getStarted1",a);QV("getStarted2",!a);if(typeof userinfo.passchange=="number"){if(userinfo.passchange==-1){QH("p2nextPasswordUpdateTime"," - Reset on next login.")}else{if((passRequirements!=null)&&(typeof passRequirements.reset=="number")){var b=(userinfo.passchange)+(passRequirements.reset*86400)-Math.floor(Date.now()/1000);if(b<0){QH("p2nextPasswordUpdateTime"," - Reset on next login.")}else{if(b<3600){QH("p2nextPasswordUpdateTime"," - Reset in "+Math.floor(b/60)+" minute"+addLetterS(Math.floor(b/60))+".")}else{if(b<86400){QH("p2nextPasswordUpdateTime"," - Reset in "+Math.floor(b/3600)+" hour"+addLetterS(Math.floor(b/3600))+".")}else{QH("p2nextPasswordUpdateTime"," - Reset in "+Math.floor(b/86400)+" day"+addLetterS(Math.floor(b/86400))+".")}}}}}}}function addLetterS(a){return(a>1)?"s":""}function setSessionActivity(){sessionActivity=Date.now();QH("idleTimeoutNotify","")}function checkIdleSessionTimeout(){var a=(Date.now()-sessionActivity);if(a>serverinfo.timeout){window.location.href="logout"}else{var b=Math.round((serverinfo.timeout-a)/1000);if(b<=60){QH("idleTimeoutNotify","<br />"+b+" second"+addLetterS(b)+" until disconnect")}else{b=Math.round(b/60);if(b<=5){QH("idleTimeoutNotify","<br />"+b+" minute"+addLetterS(b)+" until disconnect")}}}}function onMessage(T,u){switch(u.action){case"trace":serverTrace.unshift(u);displayServerTrace();break;case"traceinfo":if(typeof u.traceSources=="object"){if((u.traceSources!=null)&&(u.traceSources.length>0)){serverTraceSources=u.traceSources;QH("p41traceStatus",EscapeHtml(u.traceSources.join(", ")))}else{serverTraceSources=[];QH("p41traceStatus","None")}}break;case"serverstats":updateGeneralServerStats(u);break;case"servertimelinestats":setServerTimelineStats(u.events);break;case"authcookie":authCookie=u.cookie;break;case"serverinfo":serverinfo=u.serverinfo;if(serverinfo.timeout){setInterval(checkIdleSessionTimeout,10000);checkIdleSessionTimeout()}break;case"userinfo":userinfo=u.userinfo;updateSiteAdmin();updateSelf();break;case"users":users={};for(var o in u.users){users[u.users[o]._id]=u.users[o]}updateUsers();break;case"wssessioncount":wssessions=u.wssessions;updateUsers();break;case"meshes":meshes={};for(var o in u.meshes){meshes[u.meshes[o]._id]=u.meshes[o]}masterUpdate(4+128);break;case"files":filetree=setupBackPointers(u.filetree);updateFiles();d3updatefiles();break;case"nodes":nodes=[];for(var o in u.nodes){if(!meshes[o]){console.log("Invalid mesh (1): "+o);continue}for(var v in u.nodes[o]){if(u.nodes[o][v]._id==null){console.log("Invalid node ("+v+"): "+JSON.stringify(u.nodes));continue}u.nodes[o][v].namel=u.nodes[o][v].name.toLowerCase();if(u.nodes[o][v].rname){u.nodes[o][v].rnamel=u.nodes[o][v].rname.toLowerCase()}else{u.nodes[o][v].rnamel=u.nodes[o][v].namel}u.nodes[o][v].meshnamel=meshes[o].name.toLowerCase();u.nodes[o][v].meshid=o;u.nodes[o][v].state=(u.nodes[o][v].state)?(u.nodes[o][v].state):0;u.nodes[o][v].desc=u.nodes[o][v].desc;u.nodes[o][v].ip=u.nodes[o][v].ip;if(!u.nodes[o][v].icon){u.nodes[o][v].icon=1}u.nodes[o][v].ident=++nodeShortIdent;nodes.push(u.nodes[o][v])}}masterUpdate(1|2|4|64);if(xxcurrentView==-1){if("{{viewmode}}"!=""){go(parseInt("{{viewmode}}"))}else{setDialogMode(0);go(1)}}if("{{currentNode}}"!=""){gotoDevice("{{currentNode}}",parseInt("{{viewmode}}"))}break;case"powertimeline":if(u.nodeid!=powerTimelineReq){break}powerTimelineNode=u.nodeid;powerTimeline=u.timeline;powerTimelineUpdate=Date.now()+300000;for(var e in powerTimeline){if(e%2==1){powerTimeline[e]=powerTimeline[e]*1000}}if(currentNode._id==u.nodeid){masterUpdate(256)}break;case"getsysinfo":if(u.nodeid!=powerTimelineReq){break}console.log("getsysinfo",u);if(u.noinfo===true){QH("p17info","No information for this device.")}else{var ad="",R={};if(u.hardware){if(u.hardware.identifiers){var g=u.hardware.identifiers;ad+="<div class=DevSt style=margin-bottom:3px><b>BIOS</b></div>";if(g.bios_vendor){ad+=addDetailItem("Vendor",g.bios_vendor,R)}if(g.bios_version){ad+=addDetailItem("Version",g.bios_version,R)}ad+="<br />";ad+="<div class=DevSt style=margin-bottom:3px><b>Motherboard</b></div>";if(g.board_vendor){ad+=addDetailItem("Vendor",g.board_vendor,R)}if(g.board_name){ad+=addDetailItem("Name",g.board_name,R)}if(g.board_serial&&(g.board_serial!="")){ad+=addDetailItem("Serial",g.board_serial,R)}if(g.board_version){ad+=addDetailItem("Version",g.board_version,R)}if(g.product_uuid){ad+=addDetailItem("Identifier",g.product_uuid,R)}ad+="<br />"}if(u.hardware.windows){if(u.hardware.windows.memory){ad+="<div class=DevSt style=margin-bottom:3px><b>Memory</b></div>";function q(j,m){if(j.BankLabel>m.BankLabel){return 1}if(j.BankLabel<m.BankLabel){return -1}return 0}u.hardware.windows.memory.sort(q);ad+="<table style=width:100%>";for(var e in u.hardware.windows.memory){var o=u.hardware.windows.memory[e];ad+='<tr><td VALIGN=Top style=width:38px><img src="images/ram2.png" />';ad+="<td><div style=background-color:lightgray;border-radius:5px;padding:8px>";ad+="<div><b>"+o.BankLabel+"</b></div>";if(o.Capacity){ad+=addDetailItem("Capacity / Speed",(o.Capacity/1024/1024)+" Mb, "+o.Speed+" Mhz",R)}if(o.PartNumber){ad+=addDetailItem("Part Number",((o.Manufacturer&&o.Manufacturer!="Undefined")?(o.Manufacturer+", "):"")+o.PartNumber,R)}ad+="</div>"}ad+="</table><br />"}if(u.hardware.windows.osinfo){var o=u.hardware.windows.osinfo;ad+="<div class=DevSt style=margin-bottom:3px><b>Operating System</b></div>";if(o.Caption){ad+=addDetailItem("Name",o.Caption,R)}if(o.Version){ad+=addDetailItem("Version",o.Version,R)}if(o.OSArchitecture){ad+=addDetailItem("Architecture",o.OSArchitecture,R)}ad+="<br />"}}}QH("p17info",ad)}break;case"lastconnect":var C=getNodeFromId(u.nodeid);if(C!=null){C.lastconnect=u.time;C.lastaddr=u.addr;if((currentNode._id==C._id)&&(Q("MainComputerState").innerHTML=="")){QH("MainComputerState","<span>Last seen:<br />"+printDateTime(new Date(C.lastconnect))+"</span>")}}break;case"msg":if(u.nodeid!=null){var h=-1;if(nodes!=null){for(var e in nodes){if(nodes[e]._id==u.nodeid){h=e;break}}}if(h!=-1){if(u.type=="console"){p15consoleReceive(nodes[h],u.value)}else{if(u.type=="notify"){var v=getstore("notifications",0);if(((v&8)==0)&&(u.amtMessage!=null)){break}var v={text:u.value,title:u.title,icon:u.icon};if(u.nodeid!=null){v.nodeid=u.nodeid}if(u.tag!=null){v.tag=u.tag}if(u.username!=null){v.username=u.username}addNotification(v)}else{if(u.type=="ps"){showDeskToolsProcesses(u)}else{if(u.type=="services"){showDeskToolsServices(u)}else{if((u.type=="getclip")&&(xxdialogTag=="clipboard")&&(currentNode!=null)&&(currentNode._id==u.nodeid)){Q("d2clipText").value=u.data}else{if((u.type=="setclip")&&(xxdialogTag=="clipboard")&&(currentNode!=null)&&(currentNode._id==u.nodeid)){QH("dlgClipStatus",u.success?"<span style=color:green>Success</span>":"<span style=color:red>Failed</span>");setTimeout(function(){try{QH("dlgClipStatus","")}catch(j){}},2000)}}}}}}}}else{if(u.type=="notify"){var v={text:u.value,title:u.title,icon:u.icon};if(u.tag!=null){v.tag=u.tag}if(u.username!=null){v.username=u.username}addNotification(v)}}break;case"getnetworkinfo":if((currentNode._id==u.nodeid)&&(xxdialogMode==2)&&(xxdialogTag=="if"+u.nodeid)){if(u.netif==null){QH("d2netinfo","No network interface information available for this device.")}else{var ad="<div class=dialogText>";if(currentNode.lastconnect){ad+=addHtmlValue2("Last agent connection",printDateTime(new Date(currentNode.lastconnect)))}if(currentNode.lastaddr){var W=currentNode.lastaddr.split(":");if(W.length>2){ad+=addHtmlValue2("Last agent address",currentNode.lastaddr+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(currentNode.lastaddr)+'") width=10 height=10>')}else{if(isPrivateIP(currentNode.lastaddr)){ad+=addHtmlValue2("Last agent address",W[0]+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(W[0])+'") width=10 height=10>')}else{ad+=addHtmlValue2("Last agent address",'<a href="https://iplocation.com/?ip='+W[0]+'" rel="noreferrer noopener" target="MeshIPLoopup">'+W[0]+'</a> <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(W[0])+'") width=10 height=10>')}}}ad+=addHtmlValue2("Last interfaces update",printDateTime(new Date(u.updateTime)));for(var e in u.netif){var w=u.netif[e];ad+="<hr />";if(w.name){ad+=addHtmlValue2("Name","<b>"+EscapeHtml(w.name)+"</b>")}if(w.desc){ad+=addHtmlValue2("Description",EscapeHtml(w.desc).replace("(R)","®").replace("(r)","®"))}if(w.dnssuffix){ad+=addHtmlValue2("DNS suffix",EscapeHtml(w.dnssuffix)+' <img src="images/link4.png" title="Copy name to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(w.dnssuffix)+'") width=10 height=10>')}if(w.mac){ad+=addHtmlValue2("MAC address",'<a href="https://dnslytics.com/mac-address-lookup/'+w.mac.substring(0,6)+'" rel="noreferrer noopener" target="MeshMACLoopup">'+EscapeHtml(w.mac.toLowerCase())+'</a> <img src="images/link4.png" title="Copy MAC address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(w.mac.toLowerCase())+'") width=10 height=10>')}if(w.v4addr){ad+=addHtmlValue2("IPv4 address",EscapeHtml(w.v4addr)+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(w.v4addr)+'") width=10 height=10>')}if(w.v4mask){ad+=addHtmlValue2("IPv4 mask",EscapeHtml(w.v4mask)+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(w.v4mask)+'") width=10 height=10>')}if(w.v4gateway){ad+=addHtmlValue2("IPv4 gateway",EscapeHtml(w.v4gateway)+' <img src="images/link4.png" title="Copy address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(w.v4gateway)+'") width=10 height=10>')}if(w.gatewaymac){ad+=addHtmlValue2("Gateway MAC",'<a href="https://dnslytics.com/mac-address-lookup/'+w.gatewaymac.substring(0,6)+'" rel="noreferrer noopener" target="MeshMACLoopup">'+EscapeHtml(w.gatewaymac.toLowerCase())+'</a> <img src="images/link4.png" title="Copy MAC address to clipboard" style="cursor:pointer" onclick=copyTextToClip2("'+encodeURIComponent(w.gatewaymac.toLowerCase())+'") width=10 height=10>')}}ad+="</div>";QH("d2netinfo",ad)}}break;case"serverversion":if((xxdialogMode==2)&&(xxdialogTag=="MeshCentralServerUpdate")){var ad="<div class=dialogText>";if(!u.current){u.current="Unknown"}if(!u.latest){u.latest="Unknown"}ad+=addHtmlValue2("Current Version","<b>"+EscapeHtml(u.current)+"</b>");ad+=addHtmlValue2("Latest Version","<b>"+EscapeHtml(u.latest)+"</b>");ad+="</div>";if((u.latest.indexOf(".")==-1)||(u.current==u.latest)||((features&2048)==0)){setDialogMode(2,"MeshCentral Version",1,null,ad)}else{setDialogMode(2,"MeshCentral Version",3,server_showVersionDlgEx,ad+"<br /><label><input id=d2updateCheck type=checkbox onclick=server_showVersionDlgUpdate() /> Check and click OK to start server self-update.</label>");server_showVersionDlgUpdate()}}break;case"servererrors":if((xxdialogMode==2)&&(xxdialogTag=="MeshCentralServerErrors")){if(u.data==null){setDialogMode(2,"MeshCentral Server Errors",1,null,"Server has no error log.")}else{var ad='<div class="dialogText dialogTextLog"><pre id=d2ServerErrorsLogPre>'+u.data+"<pre></div>";setDialogMode(2,"MeshCentral Server Errors",3,server_showErrorsDlgEx,ad+'<br /><div style=float:right><img src=images/link4.png height=10 width=10 title="Download error log" style=cursor:pointer onclick=d2CopyServerErrorsToClip()></div><div><label><input id=d2updateCheck type=checkbox onclick=server_showVersionDlgUpdate() /> Check and click OK to clear error log.</label></div>');server_showVersionDlgUpdate()}}break;case"serverconsole":p15consoleReceive("serverconsole",u.value);break;case"events":if((u.nodeid!=null)&&(u.nodeid==currentNode._id)){currentDeviceEvents=u.events;masterUpdate(1024)}else{if((u.user!=null)&&(u.user==currentUser.name)){currentUserEvents=u.events;masterUpdate(2048)}else{events=u.events;masterUpdate(32)}}break;case"getcookie":if(u.tag=="clickonce"){var a="{{{serverRedirPort}}}"==""?"{{{serverPublicPort}}}":"{{{serverRedirPort}}}";var O="http://"+window.location.hostname+":"+a+"/clickonce/minirouter/MeshMiniRouter.application?WS=wss%3A%2F%2F"+window.location.hostname+"%2Fmeshrelay.ashx%3Fauth="+u.cookie+"&CH={{{webcerthash}}}&AP="+u.protocol+((debugmode==1)?"":"&HOL=1");var A=window.open(O,"_blank");A.opener=null}break;case"getNotes":var v=Q("d2devNotes");if(v&&(u.id==decodeURIComponent(v.attributes.noteid.value))){if(u.notes){QH("d2devNotes",decodeURIComponent(u.notes))}else{QH("d2devNotes","")}var P=(v.attributes.ro.value=="true");if(P==false){v.removeAttribute("readonly");QE("idx_dlgOkButton",true);QV("idx_dlgOkButton",true);focusTextBox("d2devNotes")}}break;case"otpauth-request":if((xxdialogMode==2)&&(xxdialogTag=="otpauth-request")){var S=u.secret;if(S.length==52){S=S.split(/(.............)/).filter(Boolean).join(" ")}else{if(S.length==32){S=S.split(/(....)/).filter(Boolean).join(" ");S=S.substring(0,20)+"<br/>"+S.substring(20)}}QH("d2optinfo",'<table style=width:380px><tr><td style=vertical-align:top>Install <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" rel="noreferrer noopener" target=_blank>Google Authenticator</a> or a compatible application and scan the barcode, use <a href="'+u.url+'" rel="noreferrer noopener" target=_blank> this link</a> or enter the secret. Then, enter the current 6 digit token below to activate 2-Step login.<br /><br />Secret<br /><tt id=d2optsecret secret="'+u.secret+'" style=font-size:12px>'+S+'</tt><br /><br /></td><td style=width:1px;vertical-align:top><a href="'+u.url+'" rel="noreferrer noopener" target=_blank><div id="qrcode"></div></a></td><tr><td colspan=2 style="text-align:center;border-top:1px solid black"><br />Enter the token here for 2-step login: <input type=text onkeypress="return (event.keyCode == 8) || (event.charCode >= 48 && event.charCode <= 57)" onkeyup=account_addOtpCheck(event) onkeydown=account_addOtpCheck() maxlength=6 id=d2otpauthinput type=text></td></table>');new QRCode(Q("qrcode"),{text:u.url,width:128,height:128,colorDark:"#000000",colorLight:"#EEE",correctLevel:QRCode.CorrectLevel.H});QV("idx_dlgOkButton",true);QE("idx_dlgOkButton",false);Q("d2otpauthinput").focus()}break;case"otpauth-setup":if(xxdialogMode){return}setDialogMode(2,"Authenticator App",1,null,u.success?"<b style=color:green>Authenticator app activation successful</b>. You will now need a valid token to login again.":"<b style=color:red>2-step login activation failed</b>. Clear the secret from the application and try again. You only have a few minutes to enter the proper code.");break;case"otpauth-clear":if(xxdialogMode){return}setDialogMode(2,"Authenticator App",1,null,u.success?"<b>Authenticator application removed</b>. You can reactivate this feature at any time.":"<b style=color:red>2-step login activation removal failed</b>. Try again.");break;case"otpauth-getpasswords":if(xxdialogMode){return}var ad="One time tokens can be used as secondary authentication. Generate a set, print them and keep them in a safe place.";ad+="<div style='border-radius:6px;border: 2px dashed #888;width:100%;margin-top:8px'><div style='padding:8px;font-family:Arial, Helvetica, sans-serif;font-size:20px;font-weight:bold'><table style=width:100%;text-align:center>";if(u.passwords){var k=0;for(var e in u.passwords){if(++k%2){ad+="<tr>"}var K=""+u.passwords[e].p;while(K.length<8){K="0"+K}if(u.passwords[e].u===true){ad+="<td>"+K.substring(0,4)+" "+K.substring(4)}else{ad+="<td><strike style=color:#BBB>"+K.substring(0,4)+" "+K.substring(4);+"</strike>"}}}else{ad+="<tr><td>No Active Tokens"}ad+="</table></div></div><br />";ad+="<div><input type=button value='Close' onclick=setDialogMode(0) style=float:right></input>";ad+="<input type=button value='Generate New Tokens' onclick='account_manageOtp(1);'></input>";if(u.passwords!=null){ad+="<input type=button value='Clear Tokens' onclick='account_manageOtp(2);'></input>"}ad+="</div><br />";setDialogMode(2,"Manage Backup Codes",8,null,ad,"otpauth-manage");break;case"otp-hkey-get":if(xxdialogMode&&(xxdialogTag!="otpauth-hardware-manage")){return}var X="<div style='border-radius:6px;border:2px solid #CCC;background-color:#BBB;width:100%;box-sizing:border-box;margin-bottom:6px'><div style='margin:3px;font-family:Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold'><table style=width:100%;text-align:left>";var c="</table></div></div>";var ad="<a href='https://www.yubico.com/' rel='noreferrer noopener' target='_blank'>Hardware keys</a> are used as secondary login authentication.";ad+="<div style='max-height:150px;overflow-y:auto;overflow-x:hidden;margin-top:6px;margin-bottom:6px'>";if(u.keys&&u.keys.length>0){for(var e in u.keys){var l=u.keys[e],aa=(l.type==2)?"OTP":"WebAuthn";ad+=X+'<tr style=margin:5px><td style=width:30px><img width=24 height=18 src="images/hardware-key-'+aa+'-24.png" style=margin-top:4px><td style=width:250px>'+l.name+"<td><input type=button value='Remove' onclick=account_removehkey("+l.i+")></input>"+c}}else{ad+=X+"<tr style=text-align:center><td>No Keys Configured"+c}ad+="</div>";ad+="<div><input type=button value='Close' onclick=setDialogMode(0) style=float:right></input>";if((features&131072)!=0){ad+="<input id=d2addkey3 type=button value='Add Key' onclick='account_addhkey(3);'></input>"}if((features&16384)!=0){ad+="<input id=d2addkey2 type=button value='Add YubiKey® OTP' onclick='account_addhkey(2);'></input>"}ad+="</div><br />";setDialogMode(2,"Manage Security Keys",8,null,ad,"otpauth-hardware-manage");if(u2fSupported()==false){QE("d2addkey1",false)}break;case"otp-hkey-yubikey-add":if(u.result){meshserver.send({action:"otp-hkey-get"})}else{setDialogMode(2,"Add Security Key",1,null,"<br />Error, Unable to add key.<br /><br />")}break;case"otp-hkey-setup-response":if(xxdialogMode&&(xxdialogTag!="otpauth-hardware-manage")){return}if(u.result==true){meshserver.send({action:"otp-hkey-get"})}else{setDialogMode(2,"Add Security Key",1,null,"<br />ERROR: Unable to add key.<br /><br />","otpauth-hardware-manage")}break;case"webauthn-startregister":if(xxdialogMode&&(xxdialogTag!="otpauth-hardware-manage")){return}var ad="Press the key button now.<br /><br /><div style=width:100%;text-align:center><img width=120 height=117 src='images/hardware-keypress-120.png' /></div><input id=dp1keyname style=display:none value="+u.name+" />";setDialogMode(2,"Add Security Key",2,null,ad);var M=u.request;u.request.challenge=Uint8Array.from(atob(u.request.challenge),function(j){return j.charCodeAt(0)});u.request.user.id=Uint8Array.from(atob(u.request.user.id),function(j){return j.charCodeAt(0)});navigator.credentials.create({publicKey:M}).then(function(j){var m={rawId:btoa(String.fromCharCode.apply(null,new Uint8Array(j.rawId))),response:{attestationObject:btoa(String.fromCharCode.apply(null,new Uint8Array(j.response.attestationObject))),clientDataJSON:btoa(String.fromCharCode.apply(null,new Uint8Array(j.response.clientDataJSON)))},type:j.type};meshserver.send({action:"webauthn-endregister",response:m});setDialogMode(0)},function(j){setDialogMode(2,"Add Security Key",1,null,"ERROR: "+j)});break;case"event":if(!u.event.nolog){if(currentNode&&(u.event.nodeid==currentNode._id)){currentDeviceEvents.unshift(u.event);var d=parseInt(p16limitdropdown.value);while(currentDeviceEvents.length>d){currentDeviceEvents.pop()}masterUpdate(1024)}if(currentUser&&(u.event.userid==currentUser._id)){currentUserEvents.unshift(u.event);var d=parseInt(p31limitdropdown.value);while(currentUserEvents.length>d){currentUserEvents.pop()}masterUpdate(2048)}events.unshift(u.event);var d=parseInt(p3limitdropdown.value);while(events.length>d){events.pop()}masterUpdate(32)}if(u.event.noact){break}switch(u.event.action){case"userWebState":if(localStorage!=null){var G=localStorage.getItem("showRealNames");var J=localStorage.getItem("uiMode");var I=localStorage.getItem("sort");var F=localStorage.getItem("loctag");var ac=JSON.parse(u.event.state);for(var e in ac){localStorage.setItem(e,ac[e])}if((ac.deskAspectRatio!=null)&&(ac.deskAspectRatio!=deskAspectRatio)){deskAspectRatio=ac.deskAspectRatio;deskAdjust()}if((ac.showRealNames!=null)&&(ac.showRealNames!=G)){showRealNames=Q("RealNameCheckBox").checked=(ac.showRealNames=="1");masterUpdate(6)}if((ac.uiMode!=null)&&(ac.uiMode!=J)){userInterfaceSelectMenu(parseInt(ac.uiMode))}if((ac.sort!=null)&&(ac.sort!=I)){document.getElementById("sortselect").selectedIndex=sort=parseInt(ac.sort);masterUpdate(6)}if((ac.loctag!=null)&&(ac.loctag!=F)){if(ac.loctag!=null){args.locale=ac.loctag}else{delete args.locale}masterUpdate(4294967295)}}break;case"servertimelinestats":addServerTimelineStats(u.event.data);break;case"accountcreate":case"accountchange":if(userinfo.name==u.event.account.name){var z=u.event.account.siteadmin?u.event.account.siteadmin:0;var H=userinfo.siteadmin?userinfo.siteadmin:0;if((u.event.account.quota!=userinfo.quota)||(((userinfo.siteadmin&8)==0)&&((u.event.account.siteadmin&8)!=0))){meshserver.send({action:"files"})}var E=userinfo.groups;userinfo=u.event.account;if(H!=z){updateSiteAdmin()}updateSelf();if((userinfo.siteadmin&2)!=0){var D=E?E:[];var B=userinfo.groups?userinfo.groups:[];if(D.join(",")!=B.join(",")){users=wssessions=null;meshserver.send({action:"users"});meshserver.send({action:"wssessioncount"})}}}if(users==null){break}if((userinfo.groups==null)||(userinfo.groups.length==0)||(findOne(u.event.account.groups,userinfo.groups)==true)){users[u.event.account._id]=u.event.account}else{delete users[u.event.account._id]}updateUsers();break;case"accountremove":if(users==null){break}delete users["user/"+domain+"/"+u.event.username.toLowerCase()];updateUsers();break;case"createmesh":if((meshes[u.event.meshid]==null)&&(u.event.links[userinfo._id]!=null)){meshes[u.event.meshid]={_id:u.event.meshid,name:u.event.name,mtype:u.event.mtype,desc:u.event.desc,links:u.event.links};masterUpdate(4+128);meshserver.send({action:"files"})}break;case"meshchange":if(meshes[u.event.meshid]==null){meshes[u.event.meshid]={_id:u.event.meshid,name:u.event.name,mtype:u.event.mtype,desc:u.event.desc,links:u.event.links};meshserver.send({action:"nodes"})}else{if(u.event.name!=null){meshes[u.event.meshid].name=u.event.name}if(u.event.desc!=null){meshes[u.event.meshid].desc=u.event.desc}if(u.event.flags!=null){meshes[u.event.meshid].flags=u.event.flags}if(u.event.consent!=null){meshes[u.event.meshid].consent=u.event.consent}if(u.event.links){meshes[u.event.meshid].links=u.event.links}if(u.event.amt){meshes[u.event.meshid].amt=u.event.amt}if(meshes[u.event.meshid].links[userinfo._id]==null){if((xxcurrentView==20)&&(currentMesh==meshes[u.event.meshid])){go(2)}delete meshes[u.event.meshid];var y=[];for(var e in nodes){if(nodes[e].meshid!=u.event.meshid){y.push(nodes[e])}}nodes=y;if(xxcurrentView>=10&&xxcurrentView<20&¤tNode&¤tNode.meshid==u.event.meshid){setDialogMode(0);go(1)}}}masterUpdate(4+128);if(currentNode&&(currentNode.meshid==u.event.meshid)){currentNode=null;if((xxcurrentView>=10)&&(xxcurrentView<20)){go(1)}}if(xxcurrentView==20&¤tMesh._id==u.event.meshid){masterUpdate(4096)}break;case"deletemesh":if(meshes[u.event.meshid]){delete meshes[u.event.meshid];masterUpdate(128);meshserver.send({action:"files"})}var y=[];if(nodes!=null){for(var e in nodes){if(nodes[e].meshid!=u.event.meshid){y.push(nodes[e])}}}nodes=y;masterUpdate(4);if(xxcurrentView>=20&&xxcurrentView<30&¤tMesh._id==u.event.meshid){setDialogMode(0);go(2)}if(xxcurrentView>=10&&xxcurrentView<20&¤tNode&¤tNode.meshid==u.event.meshid){setDialogMode(0);go(1)}break;case"addnode":var C=u.event.node;if(!meshes[C.meshid]){break}if(getNodeFromId(C._id)!=null){break}C.namel=C.name.toLowerCase();if(C.rname){C.rnamel=C.rname.toLowerCase()}else{C.rnamel=C.namel}C.meshnamel=meshes[C.meshid].name.toLowerCase();C.state=0;if(!C.icon){C.icon=1}C.ident=++nodeShortIdent;if(nodes==null){}nodes.push(C);masterUpdate(1|2|4|16);break;case"removenode":var h=-1;for(var e in nodes){if(nodes[e]._id==u.event.nodeid){h=e;break}}if(h!=-1){var C=nodes[h];if(currentNode==C){if(xxcurrentView>=10&&xxcurrentView<20){setDialogMode(0);go(1)}currentNode=null}nodes.splice(h,1);masterUpdate(4|16)}break;case"changenode":var h=-1;for(var e in nodes){if(nodes[e]._id==u.event.nodeid){h=e;break}}if(h!=-1){var C=nodes[h];C.name=u.event.node.name;C.rname=u.event.node.rname;C.users=u.event.node.users;C.host=u.event.node.host;C.desc=u.event.node.desc;C.ip=u.event.node.ip;C.osdesc=u.event.node.osdesc;C.publicip=u.event.node.publicip;C.iploc=u.event.node.iploc;C.wifiloc=u.event.node.wifiloc;C.gpsloc=u.event.node.gpsloc;C.tags=u.event.node.tags;C.userloc=u.event.node.userloc;if(u.event.node.agent!=null){if(C.agent==null){C.agent={}}if(u.event.node.agent.ver!=null){C.agent.ver=u.event.node.agent.ver}if(u.event.node.agent.id!=null){C.agent.id=u.event.node.agent.id}if(u.event.node.agent.caps!=null){C.agent.caps=u.event.node.agent.caps}if(u.event.node.agent.core!=null){C.agent.core=u.event.node.agent.core}else{if(C.agent.core){delete C.agent.core}}C.agent.tag=u.event.node.agent.tag}if(u.event.node.intelamt!=null){if(C.intelamt==null){C.intelamt={}}if(u.event.node.intelamt.state!=null){C.intelamt.state=u.event.node.intelamt.state}if(u.event.node.intelamt.host!=null){C.intelamt.user=u.event.node.intelamt.host}if(u.event.node.intelamt.user!=null){C.intelamt.user=u.event.node.intelamt.user}if(u.event.node.intelamt.tls!=null){C.intelamt.tls=u.event.node.intelamt.tls}if(u.event.node.intelamt.ver!=null){C.intelamt.ver=u.event.node.intelamt.ver}if(u.event.node.intelamt.tag!=null){C.intelamt.tag=u.event.node.intelamt.tag}if(u.event.node.intelamt.uuid!=null){C.intelamt.uuid=u.event.node.intelamt.uuid}if(u.event.node.intelamt.realm!=null){C.intelamt.realm=u.event.node.intelamt.realm}}if(u.event.node.av!=null){C.av=u.event.node.av}C.namel=C.name.toLowerCase();if(C.rname){C.rnamel=C.rname.toLowerCase()}else{C.rnamel=C.namel}if(u.event.node.icon){C.icon=u.event.node.icon}masterUpdate(2|4|8|16);refreshDevice(C._id);if((currentNode==C)&&(xxdialogMode!=null)&&(xxdialogTag=="@xxmap")){p10showNodeLocationDialog()}}break;case"nodemeshchange":var h=-1;for(var e in nodes){if(nodes[e]._id==u.event.nodeid){h=e;break}}if(h!=-1){var C=nodes[h];if(meshes[u.event.newMeshId]==null){if(currentNode==C){if(xxcurrentView>=10&&xxcurrentView<20){setDialogMode(0);go(1)}currentNode=null}nodes.splice(h,1);masterUpdate(4|16)}else{C.meshid=u.event.newMeshId;C.meshnamel=meshes[u.event.newMeshId].name.toLowerCase();masterUpdate(1|2|4)}refreshDevice(u.event.nodeid)}else{var C=u.event.node;if(!meshes[C.meshid]){break}C.namel=C.name.toLowerCase();if(C.rname){C.rnamel=C.rname.toLowerCase()}else{C.rnamel=C.namel}C.meshnamel=meshes[C.meshid].name.toLowerCase();C.state=0;if(!C.icon){C.icon=1}C.ident=++nodeShortIdent;if(nodes==null){}nodes.push(C);masterUpdate(1|2|4|16)}break;case"nodeconnect":var h=-1;for(var e in nodes){if(nodes[e]._id==u.event.nodeid){h=e;break}}if(h!=-1){var C=nodes[h];var v=getstore("notifications",0);if(u.event.meshid&&userinfo.links&&userinfo.links[u.event.meshid]&&userinfo.links[u.event.meshid].notify){v&=userinfo.links[u.event.meshid].notify}else{v=0}if(v&2){if(((C.conn&1)==0)&&((u.event.conn&1)!=0)){addNotification({text:"Agent connected",title:C.name,icon:C.icon,nodeid:C._id})}if(((C.conn&2)==0)&&((u.event.conn&2)!=0)){addNotification({text:"Intel AMT detected",title:C.name,icon:C.icon,nodeid:C._id})}if(((C.conn&4)==0)&&((u.event.conn&4)!=0)){addNotification({text:"Intel AMT CIRA connected",title:C.name,icon:C.icon,nodeid:C._id})}}if(v&4){if(((C.conn&1)!=0)&&((u.event.conn&1)==0)){addNotification({text:"Agent disconnected",title:C.name,icon:C.icon,nodeid:C._id})}if(((C.conn&2)!=0)&&((u.event.conn&2)==0)){addNotification({text:"Intel AMT not detected",title:C.name,icon:C.icon,nodeid:C._id})}if(((C.conn&4)!=0)&&((u.event.conn&4)==0)){addNotification({text:"Intel AMT CIRA disconnected",title:C.name,icon:C.icon,nodeid:C._id})}}C.conn=u.event.conn;C.pwr=u.event.pwr;masterUpdate(4|16);refreshDevice(C._id)}break;case"wssessioncount":if(wssessions!=null){if(u.event.count==0&&wssessions["user/"+domain+"/"+u.event.username.toLowerCase()]){delete wssessions["user/"+domain+"/"+u.event.username.toLowerCase()]}else{wssessions["user/"+domain+"/"+u.event.username.toLowerCase()]=u.event.count}updateUsers()}break;case"login":if(users!=null&&users["user/"+domain+"/"+u.event.username.toLowerCase()]){users["user/"+domain+"/"+u.event.username.toLowerCase()].login=Math.floor(new Date(u.event.time).getTime()/1000)}break;case"scanamtdevice":if((xxdialogMode==null)||(!Q("dp1range"))||(Q("dp1range").value!=u.event.range)){return}var ad="";if(u.event.results==null){ad="<div style=width:100%;text-align:center;margin-top:12px>Unable to scan this address range.</div><div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>"}else{amtScanResults=u.event.results;for(var e in u.event.results){var N=u.event.results[e],V=N.hostname;if(V.length>20){V=V.substring(0,20)+"..."}var Y='<b title="'+EscapeHtml(N.hostname)+'">'+EscapeHtml(V)+"</b> - v"+N.ver;if(N.state==2){if(N.tls==1){Y+=" with TLS."}else{Y+=" without TLS."}}else{Y+=" not activated."}ad+='<div style=width:100%;margin-bottom:2px;background-color:lightgray><div style=padding:4px><div style=display:inline-block;margin-right:5px><input class=DevScanCheckbox name=dp1checkbox tag="'+EscapeHtml(e)+'" type=checkbox onclick=addAmtScanToMeshCheckbox() /></div><div class=j1 style=display:inline-block></div><div style=display:inline-block;margin-left:5px;overflow-x:auto;white-space:nowrap>'+Y+"</div></div></div>"}if(ad==""){ad="<div style=width:100%;text-align:center;margin-top:12px>Scan returned no results.</div><div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>"}}QH("dp1results",ad);QE("dp1range",true);QE("dp1rangebutton",true);break;case"notify":var v={text:u.event.value,title:u.event.title,icon:u.event.icon};if(u.event.tag!=null){v.tag=u.event.tag}addNotification(v);break;case"traceinfo":if(typeof u.event.traceSources=="object"){if((u.event.traceSources!=null)&&(u.event.traceSources.length>0)){serverTraceSources=u.event.traceSources;QH("p41traceStatus",EscapeHtml(u.event.traceSources.join(", ")))}else{serverTraceSources=[];QH("p41traceStatus","None")}}break;case"stopped":break;default:break}break;case"createInviteLink":if(xxdialogTag!=u.meshid){break}var U=serverinfo.name;if((U.indexOf(".")==-1)||((features&2)!=0)){U=window.location.hostname}var b=domainUrl.substring(0,domainUrl.length-1);var ab;if(serverinfo.https==true){var L=(serverinfo.port==443)?"":(":"+serverinfo.port);ab="https://"+U+L+domainUrl+"agentinvite?c="+u.cookie}else{var L=(serverinfo.port==80)?"":(":"+serverinfo.port);ab="http://"+U+L+domainUrl+"agentinvite?c="+u.cookie}Q("agentInvitationLink").href=ab;var Z=u.expire+" hour"+addLetterS(u.expire);if(u.expire==24){Z="1 day"}if(u.expire==168){Z="1 week"}if(u.expire==5040){Z="1 month"}if(u.expire==0){Z="Unlimited"}QH("agentInvitationLink","Invitation Link ("+Z+")");QV("agentInvitationLinkDiv",true);break;case"stopped":autoReconnect=false;QH("p0span",u.msg);break;default:break}}function onRealNameCheckBox(){showRealNames=Q("RealNameCheckBox").checked;putstore("showRealNames",showRealNames?1:0);masterUpdate(6);return}function onDeviceViewChange(a){if(a!=null){Q("viewselect").value=a}for(var b=1;b<5;b++){Q("devViewButton"+b).classList.remove("viewSelectorSel")}Q("devViewButton"+Q("viewselect").value).classList.add("viewSelectorSel");putstore("_deviceView",Q("viewselect").value);putstore("_viewsize",Q("sizeselect").value);masterUpdate(4);setTimeout(function(){masterUpdate(512)},200)}function ondockeypress(a){setSessionActivity();if(!xxdialogMode&&xxcurrentView==11&&desktop&&Q("DeskControl").checked){if(currentNode!=null){var d=meshes[currentNode.meshid];var g=d.links[userinfo._id].rights;var b=((g==4294967295)||(((g&8)!=0)&&((g&256)==0)));if(b==false){return false}var c=((g!=4294967295)&&(((g&8)!=0)&&((g&256)==0)&&((g&4096)!=0)));if(c==true){if((a.altKey==true)||(a.ctrlKey==true)||((a.keyCode<32)&&(a.keyCode!=8)&&(a.keyCode!=13))||(a.keyCode>90)){return false}}}return desktop.m.handleKeys(a)}if(!xxdialogMode&&xxcurrentView==12&&terminal&&terminal.State==3){return terminal.m.TermHandleKeys(a)}if(!xxdialogMode&&((xxcurrentView==15)||(xxcurrentView==115))){return agentConsoleHandleKeys(a)}if(!xxdialogMode&&xxcurrentView==4){if(a.ctrlKey==true||a.altKey==true||a.metaKey==true){return}var h=0;if(a.key){if(a.key.length===1&&userSearchFocus==0){Q("UserSearchInput").value=((Q("UserSearchInput").value+a.key));h=1}if(a.keyCode==8&&userSearchFocus==0){var j=Q("UserSearchInput").value;Q("UserSearchInput").value=j.substring(0,j.length-1);h=1}if(a.keyCode==27){Q("UserSearchInput").value="";h=1}}else{if(a.charCode!=0&&userSearchFocus==0){Q("UserSearchInput").value=((Q("UserSearchInput").value+String.fromCharCode(a.charCode)));h=1}}if(h>0){if(h==1){onUserSearchInputChanged()}return haltEvent(a)}}if(xxdialogMode||xxcurrentView!=1){return}if(a.ctrlKey==true&&a.charCode==96){showRealNames=!showRealNames;Q("RealNameCheckBox").value=showRealNames;putstore("showRealNames",showRealNames?1:0);masterUpdate(6);return}if(a.ctrlKey==true||a.altKey==true||a.metaKey==true){return}if(Q("viewselect").value<3){var h=0;if(a.key){if(a.key.length===1&&searchFocus==0){Q("SearchInput").value=((Q("SearchInput").value+a.key));h=1}if(a.keyCode==8&&searchFocus==0){var j=Q("SearchInput").value;Q("SearchInput").value=j.substring(0,j.length-1);h=1}if(a.keyCode==27){Q("SearchInput").value="";h=1}}else{if(a.charCode!=0&&searchFocus==0){Q("SearchInput").value=((Q("SearchInput").value+String.fromCharCode(a.charCode)));h=1}}if(h>0){if(h==1){masterUpdate(5)}return haltEvent(a)}}if(Q("viewselect").value==3){if(a.key){if(a.key.length===1&&mapSearchFocus==0){Q("mapSearchLocation").value=((Q("mapSearchLocation").value+a.key));h=1}if(a.keyCode==27){Q("mapSearchLocation").value="";mapCloseSearchWindow();h=1}if(a.keyCode==13){getSearchLocation()}}else{if(a.charCode!=0&&mapSearchFocus==0){Q("mapSearchLocation").value=((Q("mapSearchLocation").value+String.fromCharCode(a.charCode)));h=1}}}}function ondockeydown(a){setSessionActivity();if(!xxdialogMode&&xxcurrentView==11&&desktop&&Q("DeskControl").checked){if(currentNode!=null){var d=meshes[currentNode.meshid];var g=d.links[userinfo._id].rights;var b=((g==4294967295)||(((g&8)!=0)&&((g&256)==0)));if(b==false){return false}var c=((g!=4294967295)&&(((g&8)!=0)&&((g&256)==0)&&((g&4096)!=0)));if(c==true){if((a.altKey==true)||(a.ctrlKey==true)||((a.keyCode<32)&&(a.keyCode!=8)&&(a.keyCode!=13))||(a.keyCode>90)){return false}}}return desktop.m.handleKeyDown(a)}if(!xxdialogMode&&xxcurrentView==12&&terminal&&terminal.State==3){terminal.m.TermHandleKeyDown(a);if((a.keyCode>=37)&&(a.keyCode<=40)){haltEvent(a)}}if(!xxdialogMode&&xxcurrentView==13&&a.keyCode==116&&p13filetree!=null){haltEvent(a);return false}if(!xxdialogMode&&((xxcurrentView==15)||(xxcurrentView==115))){return agentConsoleHandleKeys(a)}if(!xxdialogMode&&xxcurrentView==4){if(a.keyCode===8&&userSearchFocus==0){var j=Q("UserSearchInput").value;Q("UserSearchInput").value=(j.substring(0,j.length-1));h=1}if(a.keyCode===27){Q("UserSearchInput").value="";h=1}if(h>0){if(h==1){masterUpdate(5)}return haltEvent(a)}}if(xxdialogMode||xxcurrentView!=1||a.ctrlKey==true||a.altKey==true||a.metaKey==true){return}var h=0;if(Q("viewselect").value<3){if(a.keyCode===8&&searchFocus==0){var j=Q("SearchInput").value;Q("SearchInput").value=(j.substring(0,j.length-1));h=1}if(a.keyCode===27){Q("SearchInput").value="";h=1}if(h>0){if(h==1){masterUpdate(5)}return haltEvent(a)}}if(Q("viewselect").value==3){if(a.keyCode===8&&mapSearchFocus==0){var j=Q("mapSearchLocation").value;Q("mapSearchLocation").value=(j.substring(0,j.length-1));h=1}if(a.keyCode===27){Q("mapSearchLocation").value="";mapCloseSearchWindow();h=1}}}function ondockeyup(a){setSessionActivity();if(!xxdialogMode&&xxcurrentView==11&&desktop&&Q("DeskControl").checked){if(currentNode!=null){var d=meshes[currentNode.meshid];var g=d.links[userinfo._id].rights;var b=((g==4294967295)||(((g&8)!=0)&&((g&256)==0)));if(b==false){return false}var c=((g!=4294967295)&&(((g&8)!=0)&&((g&256)==0)&&((g&4096)!=0)));if(c==true){if((a.altKey==true)||(a.ctrlKey==true)||((a.keyCode<32)&&(a.keyCode!=8)&&(a.keyCode!=13))||(a.keyCode>90)){return false}}}return desktop.m.handleKeyUp(a)}if(!xxdialogMode&&xxcurrentView==12&&terminal&&terminal.State==3){return terminal.m.TermHandleKeyUp(a)}if(!xxdialogMode&&xxcurrentView==13&&a.keyCode==116&&p13filetree!=null){p13folderup(9999);haltEvent(a);return false}if(!xxdialogMode&&xxcurrentView==4){if((a.keyCode===8&&searchFocus==0)||a.keyCode===27){return haltEvent(a)}}if(xxdialogMode&&a.keyCode==27){dialogclose(0)}if(xxdialogMode||xxcurrentView!=0||a.ctrlKey==true||a.altKey==true||a.metaKey==true){return}if(Q("viewselect").value<3){if((a.keyCode===8&&searchFocus==0)||a.keyCode===27){return haltEvent(a)}}if(Q("viewselect").value==3){if((a.keyCode===8&&mapSearchFocus==0)||a.keyCode===27){return haltEvent(a)}}}function ondocblur(){if(!xxdialogMode&&xxcurrentView==11&&desktop&&Q("DeskControl").checked&&desktop.m.handleReleaseKeys){return desktop.m.handleReleaseKeys()}}function devMouseHover(b,c){setSessionActivity();var d=Q("viewselect").value;if(d==1){var a=b.children[1].children[1];a.children[0].classList.remove("g1s");a.children[1].classList.remove("e2s");a.children[2].classList.remove("g2s");if(c==1){a.children[0].classList.add("g1s");a.children[1].classList.add("e2s");a.children[2].classList.add("g2s")}}else{if(d==2){var a=b;a.children[2].classList.remove("g1s");a.children[4].classList.remove("e2s");a.children[3].classList.remove("g2s");if(c==1){a.children[2].classList.add("g1s");a.children[4].classList.add("e2s");a.children[3].classList.add("g2s")}}}}var deviceHeaderId=0;var deviceHeaderTotal=0;var deviceHeadersTitles={};var deviceHeaderCount;var deviceHeaders={};var oldviewmode=0;function updateDevices(){if(nodes==null){return}var G="",a=0,g=null,e=0,l={},O=Q("viewselect").value,s={},p={};QV("xdevices",O<4);QV("xdevicesmap",O==4);QV("devListToolbar",O<3);QV("kvmListToolbar",O==3);QV("devMapToolbar",O==4);QV("devListToolbarSize",O==3);QV("NoMeshesPanel",meshcount==0);QV("devListToolbarViewIcons",(meshcount!=0)&&(nodes.length>0));QV("devListToolbarSort",(meshcount!=0)&&(nodes.length>0)&&(O<4));if((meshcount==0)||(nodes.length==0)){O=1;sort=0}if(O==4){setTimeout(function(){if(xxmap.map!=null){xxmap.map.updateSize()}},200)}else{deviceHeaderId=0;deviceHeaderCount={};deviceHeaderTotal=0;deviceHeaders={};deviceHeadersTitles={};var x=[];if(sort==0){nodes.sort(meshSort)}else{if(sort==1){nodes.sort(powerSort)}else{if(sort==2){if(showRealNames==true){nodes.sort(deviceHostSort)}else{nodes.sort(deviceSort)}}}}var d=[],m=document.getElementsByClassName("DeviceCheckbox"),b=0;for(var t=0;t<m.length;t++){if(m[t].checked){d.push(m[t].value)}}if((oldviewmode<3)&&(O==3)){multiDesktopFilter=d}else{if((oldviewmode==3)&&(O<3)){d=multiDesktopFilter}}var M=Q("column_l").clientWidth-60;var k=Math.floor(M/301);k=301+Math.floor((M-(k*301))/k);if((O==2)&&(sort!=3)){G+="<table style=width:100%;margin-top:4px cellpadding=0 cellspacing=0><th style=color:gray><th style=color:gray;width:120px>User<th style=color:gray;width:120px>Address<th style=color:gray;width:100px>Connectivity"}for(var t in nodes){var E=nodes[t];if(E.v==false){continue}var z=meshes[E.meshid],B=z.links[userinfo._id];if(B==null){continue}var C=B.rights;if((O==3)&&(z.mtype==1)){continue}if(sort==0){if(E.meshid!=g){deviceHeaderSet();var o="";if(O==2){G+="<tr><td colspan=5>"}if(meshes[E.meshid].mtype==1){o="<span class=devHeaderx>, Intel® AMT only</span>"}if((O==1)&&(g!=null)){if(a==2){G+="<td><div style=width:301px></div></td>"}if(G!=""){G+="</tr></table>"}}if(O==2){G+="<div>"}G+="<div class=DevSt style=width:100%;padding-top:4px><span style=float:right>";G+="<span id=DevxHeader"+deviceHeaderId+" class=devHeaderx></span>"+o;G+='</span><span id=MxMESH tabindex=0 style=cursor:pointer onclick=gotoMesh("'+E.meshid+"\") onkeypress=\"if (event.key=='Enter') gotoMesh('"+E.meshid+"')\">"+EscapeHtml(meshes[E.meshid].name)+"</span>"+getMeshActions(z,C)+"</div>";if(O==2){G+="</div>"}g=E.meshid;l[g]=1;a=0}}else{if(sort==1){var F=E.pwr?E.pwr:0;if(F!==g){deviceHeaderSet();if((O==1)&&(g!==null)){if(a==2){G+="<td><div style=width:301px></div></td>"}if(G!=""){G+="</tr></table>"}}if(O==2){G+="<tr><td>"}G+="<div class=DevSt style=width:100%;padding-top:4px><span id=DevxHeader"+deviceHeaderId+" class=devHeaderx style=float:right></span><span>"+PowerStateStr2(E.pwr)+"</span></div>";g=F;a=0}}else{if(sort==2){if(g==null){g="1"}}}}e++;var L=EscapeHtml(E.name);if(L.length==0){L="<i>None</i>"}if((E.rname!=null)&&(E.rname.length>0)){L+=" / "+EscapeHtml(E.rname)}var D=EscapeHtml(E.name);if(showRealNames==true&&E.rname!=null){D=EscapeHtml(E.rname)}if(D.length==0){D="<i>None</i>"}var u=E.icon;if((!E.conn)||(E.conn==0)){u+=" gray"}if(O==1){G+="<div id=devs onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=display:inline-block;width:"+k+'px;height:50px;padding-top:1px;padding-bottom:1px><div style=width:22px;height:50%;float:left;padding-top:12px><input class="'+E.meshid+' DeviceCheckbox" onclick=p1updateInfo() value=devid_'+E._id+" type=checkbox></div><div style=height:100%;cursor:pointer tabindex=0 onclick=gotoDevice('"+E._id+"',null,null,event) onkeypress=\"if (event.key=='Enter') gotoDevice('"+E._id+'\',null,null,event)"><div class="i'+u+'" style=width:50px;float:left></div><div style=height:100%><div class=g1></div><div class=e2><div class=e1 style=width:'+(k-100)+'px title="'+L+'">'+D+"</div><div>"+NodeStateStr(E)+"</div></div><div class=g2></div></div></div></div>"}else{if(O==2){var J=[];if(E.conn){if((E.conn&1)!=0){J.push('<span title="Mesh agent is connected and ready for use.">Agent</span>')}if((E.conn&2)!=0){J.push('<span title="Intel® AMT CIRA is connected and ready for use.">CIRA</span>')}else{if((E.conn&4)!=0){J.push('<span title="Intel® AMT is routable.">AMT</span>')}}if((E.conn&8)!=0){J.push('<span title="Mesh agent is reachable using another agent as relay.">Relay</span>')}}G+="<tr><td><div id=devs class=bar18 tabindex=0 onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=height:18px;width:100%;font-size:medium onkeypress=\"if (event.key=='Enter') gotoDevice('"+E._id+"',null,null,event)\">";G+='<div class=deviceBarCheckbox><input class="'+E.meshid+' DeviceCheckbox" onclick=p1updateInfo() value=devid_'+E._id+" type=checkbox></div>";G+="<div class=deviceBarIcon onclick=gotoDevice('"+E._id+"',null,null,event)><div class=\"j"+u+'" style=width:16px;margin-top:1px;margin-left:2px;height:16px></div></div>';G+="<div class=g1 style=height:18px;float:left></div><div class=g2 style=height:18px;float:right></div>";G+='<div style=cursor:pointer;font-size:14px title="'+L+"\" onclick=gotoDevice('"+E._id+"',null,null,event)><span style=width:300px>"+D+"</span></div></div></td>";G+="<td style=text-align:center>"+getUserShortStr(E);G+="<td style=text-align:center>"+(E.ip!=null?E.ip:"");G+="<td style=text-align:center>"+J.join(" + ");G+="</tr>"}else{if((O==3)&&(E.conn&1)&&(((C&8)||(C&256))!=0)&&((E.agent.caps&1)!=0)){if((multiDesktopFilter)&&((multiDesktopFilter.length==0)||(multiDesktopFilter.indexOf("devid_"+E._id)>=0))){G+="<div id=devs style=display:inline-block;margin:1px;background-color:lightgray;border-radius:5px;position:relative><div tabindex=0 style=padding:3px;cursor:pointer onclick=gotoDevice('"+E._id+"',11,null,event) onkeypress=\"if (event.key=='Enter') gotoDevice('"+E._id+"',11,null,event)\">";G+='<div class="j'+u+'" style=width:16px;float:left></div> '+D+"</div>";G+="<span onclick=gotoDevice('"+E._id+"',null,null,event)></span><div id=xkvmid_"+E._id.split("/")[2]+"><div id=skvmid_"+E._id.split("/")[2]+' tabindex=0 style="position:absolute;color:white;left:5px;top:27px;text-shadow:0px 0px 5px #000;z-index:1000;cursor:default" onclick=toggleKvmDevice(\''+E._id+"') onkeypress=\"if (event.key=='Enter') toggleKvmDevice('"+E._id+"')\">Disconnected</div></div>";G+="</div>";x.push(E._id)}}}}if((sort==3)&&(G!="")){if(E.tags){for(var w in E.tags){var K=E.tags[w];if(s[K]==null){s[K]=G;p[K]=1}else{s[K]+=G;p[K]+=1}if(O==3){break}}}G=""}deviceHeaderTotal++;if(typeof deviceHeaderCount[E.state]=="undefined"){deviceHeaderCount[E.state]=1}else{deviceHeaderCount[E.state]++}}if(sort==3){if(O==2){G="<table style=width:100%;margin-top:4px cellpadding=0 cellspacing=0><th style=color:gray><th style=color:gray;width:120px>User<th style=color:gray;width:120px>Address<th style=color:gray;width:100px>Connectivity"}var q=[];for(var t in s){q.push(t)}q.sort(function(c,j){return c.toLowerCase().localeCompare(j.toLowerCase())});for(var w in q){var t=q[w];if(O==2){G+="<tr><td colspan=4><div class=DevSt style=width:100%;padding-top:4px><span class=devHeaderx style=float:right>"+p[t]+" node"+((p[t]>1)?"s":"")+"</span><span>"+t+"</span></div>"+s[t]}else{G+="<div class=DevSt style=width:100%;padding-top:4px><span class=devHeaderx style=float:right>"+p[t]+" node"+((p[t]>1)?"s":"")+"</span><span>"+t+"</span></div>"+s[t]}}}if((G=="")&&(meshcount>0)&&(Q("SearchInput").value!="")){if(sort==3){G='<div style="margin:30px">No devices are included in any groups, click on a device\'s "Groups" to add to a group.</div>'}else{G='<div style="margin:30px">No devices matching this search.</div>'}}if((O==1)&&(a==2)){G+="<td><div style=width:301px></div></td>"}if((sort==0)&&(Q("SearchInput").value=="")&&(O<3)){for(var t in meshes){var y=meshes[t],A=y.links[userinfo._id];if(A!=null){var C=A.rights;if(l[y._id]==null){if((g!="")&&(G!="")){G+="</tr></table>"}G+='<table style=width:100%;padding-top:4px cellpadding=0 cellspacing=0><tr><td colspan=3 class=DevSt><span id=MxMESH style=cursor:pointer onclick=gotoMesh("'+y._id+'")>'+EscapeHtml(y.name)+"</span><span>";G+=getMeshActions(y,C);G+="</span></td></tr><tr>";if(y.mtype==1){G+="<td><div style=padding:10px><i>No Intel® AMT devices in this mesh";if((C&4)!=0){G+=", <a href=# style=cursor:pointer onclick='return addDeviceToMesh(\""+y._id+"\")'>add one</a>"}}if(y.mtype==2){G+="<td><div style=padding:10px><i>No devices in this mesh";if((C&4)!=0){G+=", <a href=# style=cursor:pointer onclick='return addAgentToMesh(\""+y._id+"\")'>add one</a>"}}G+=".</i></div></td>";g=y._id;e++}}}}G+="</tr></table><div style=height:1px></div>";G+="<div style=border-top-style:solid;border-top-width:1px;border-top-color:#DDDDDD;cursor:pointer;font-size:10px>";if((O<3)&&(sort==0)&&(meshcount>0)&&((userinfo.siteadmin==4294967295)||((userinfo.siteadmin&64)==0))){G+='<a href=# onclick="return account_createMesh()" title="Create a new group of devices." style=cursor:pointer>Add Device Group</a> '}if((userinfo.siteadmin==4294967295)||((userinfo.siteadmin&128)==0)){G+="<a href=# onclick='return p10showMeshCmdDialog(0)' style=cursor:pointer title=\"Download MeshCmd, a command line tool that performs many functions.\">MeshCmd</a> ";if(navigator.platform.toLowerCase()=="win32"){G+="<a href=# onclick='return p10showMeshRouterDialog()' style=cursor:pointer title=\"Download MeshCentral Router, a TCP port mapping tool.\">Router</a> "}}G+="</div><br/>";QH("xdevices",G);deviceHeaderSet();var m=document.getElementsByClassName("DeviceCheckbox"),b=0;if(d){for(var t=0;t<m.length;t++){m[t].checked=(d.indexOf(m[t].value)>=0)}}for(var t in deviceHeaders){QH(t,deviceHeaders[t])}for(var t in deviceHeadersTitles){Q(t).title=deviceHeadersTitles[t]}p1updateInfo();if(O==3){var P=[{x:180,y:101},{x:302,y:169},{x:454,y:255}][Q("sizeselect").selectedIndex];var H=P.x+2,N=M-5,R=Math.floor(N/H);R=H+Math.floor((N-(R*H))/R);P.y=P.y*(R/P.x);P.x=R;for(var t in multiDesktop){multiDesktop[t].xxdelete=true}for(var t in x){var v=x[t],I=v.split("/")[2],h=multiDesktop[v];if(h!=null){h.m.CanvasId.setAttribute("style","background-color:black;width:"+P.x+"px;height:"+P.y+"px");Q("xkvmid_"+I).appendChild(h.m.CanvasId);delete h.xxdelete;QH("skvmid_"+I,["Disconnected","Connecting...","Setup...","",""][((h.m.State==null)?h.m.state:h.m.State)])}else{var E=getNodeFromId(v);if((desktopNode==E)&&(desktop!=null)){var a=desktop.m.CanvasId;a.setAttribute("id","kvmid_"+I);a.setAttribute("style","background-color:black;width:"+P.x+"px;height:"+P.y+"px");a.setAttribute("onclick","toggleKvmDevice('"+v+"')");a.removeAttribute("onmousedown");a.removeAttribute("onmouseup");a.removeAttribute("onmousemove");Q("xkvmid_"+I).appendChild(a);QH("skvmid_"+I,["Disconnected","Connecting...","Setup...","",""][((desktop.m.State==null)?desktop.m.state:desktop.m.State)]);if(desktop.m.SendCompressionLevel){desktop.m.SendCompressionLevel(1,multidesktopsettings.quality,multidesktopsettings.scaling,multidesktopsettings.framerate)}desktop.shortid=I;desktop.onStateChanged=onMultiDesktopStateChange;multiDesktop[v]=desktop;desktop=desktopNode=currentNode=null;QH("DeskParent",'<canvas id="Desk" oncontextmenu="return false" onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event)></canvas>')}else{var a=document.createElement("canvas");a.setAttribute("id","kvmid_"+I);a.setAttribute("width",640);a.setAttribute("height",480);a.setAttribute("oncontextmenu","return false");a.setAttribute("style","background-color:black;width:"+P.x+"px;height:"+P.y+"px");a.setAttribute("onclick","toggleKvmDevice('"+v+"')");try{Q("xkvmid_"+I).appendChild(a)}catch(n){}if(Q("autoConnectDesktopCheckbox").checked==true){setTimeout(function(){connectMultiDesktop(E,1)},100)}}}}for(var t in multiDesktop){if(multiDesktop[t].xxdelete==true){multiDesktop[t].Stop();delete multiDesktop[t]}else{if(debugmode&&multiDesktop[t].m&&multiDesktop[t].m.onScreenSizeChange){mdeskAdjust(multiDesktop[t].m,multiDesktop[t].m.ScreenWidth,multiDesktop[t].m.ScreenHeight,multiDesktop[t].m.CanvasId)}}}deskAdjust()}else{disconnectAllKvmFunction();Q("autoConnectDesktopCheckbox").checked=false}}oldviewmode=O}function toggleKvmDevice(d){var c=getNodeFromId(d),a=meshes[c.meshid],b=a.links[userinfo._id].rights;if((b&8)||(b&256)){if(c.conn&1){connectMultiDesktop(c,1)}}}function getUserShortStr(b){if(b==null||b.users==null||b.users.length==0){return""}if(b.users.length>1){return'<span title="'+EscapeHtml(b.users.join(", "))+'">'+b.users.length+" users</span>"}var d=b.users[0],c=d,a=d.indexOf("\\");if(a>0){c=d.substring(a+1)}c=EscapeHtml(c);if(c.length>15){c=c.substring(0,14)+"…"}return'<span title="'+EscapeHtml(d)+'">'+c+"</span>"}function autoConnectDesktops(){if(Q("autoConnectDesktopCheckbox").checked==true){connectAllKvmFunction()}}function connectAllKvmFunction(){for(var a in nodes){if(multiDesktop[nodes[a]._id]==null){toggleKvmDevice(nodes[a]._id)}}}function disconnectAllKvmFunction(){for(var a in multiDesktop){multiDesktop[a].Stop()}multiDesktop={}}function onMultiDesktopStateChange(a,c){try{QH("skvmid_"+a.shortid,["Disconnected","Connecting...","Setup...","",""][c])}catch(b){}}function showMultiDesktopSettings(){QV("d7amtkvm",false);QV("d7meshkvm",true);d7bitmapquality.value=multidesktopsettings.quality;d7bitmapscaling.value=multidesktopsettings.scaling;if(multidesktopsettings.framerate){d7framelimiter.value=multidesktopsettings.framerate}else{d7framelimiter.value=1000}setDialogMode(7,"Remote Desktop Settings",3,showMultiDesktopSettingsChanged)}function showMultiDesktopSettingsChanged(){multidesktopsettings.quality=d7bitmapquality.value;multidesktopsettings.scaling=d7bitmapscaling.value;multidesktopsettings.framerate=d7framelimiter.value;localStorage.setItem("multidesktopsettings",JSON.stringify(multidesktopsettings));for(var a in multiDesktop){multiDesktop[a].m.SendCompressionLevel(1,multidesktopsettings.quality,multidesktopsettings.scaling,multidesktopsettings.framerate)}}function connectMultiDesktop(c,a){var d=c._id,e=d.split("/")[2];var b=multiDesktop[d];if(b==null){if(Q("kvmid_"+e)==null){return}if(a==2){if((c.intelamt.user==null)||(c.intelamt.user=="")){return}b=CreateAmtRedirect(CreateAmtRemoteDesktop("kvmid_"+e),authCookie);b.shortid=e;b.onStateChanged=onMultiDesktopStateChange;b.m.bpp=1;b.m.useZRLE=true;b.m.showmouse=true;b.m.onKvmData=function(g){console.log("KVM Data received in multi-desktop mode, this is not supported.")};if(debugmode>0){b.m.onScreenSizeChange=mdeskAdjust}b.Start(d,16994,"*","*",0);b.contype=2;multiDesktop[d]=b}else{if(a==1){b=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("kvmid_"+e),serverPublicNamePort,authCookie,domainUrl);b.shortid=e;b.attemptWebRTC=attemptWebRTC;b.onStateChanged=onMultiDesktopStateChange;b.m.CompressionLevel=multidesktopsettings.quality;b.m.ScalingLevel=multidesktopsettings.scaling;b.m.FrameRateTimer=multidesktopsettings.framerate;if(debugmode>0){b.m.onScreenSizeChange=mdeskAdjust}b.Start(d);b.contype=1;multiDesktop[d]=b}}}else{b.Stop();delete multiDesktop[d]}}function getMeshActions(a,b){if((b&4)==0){return""}var c="";if((features&1024)==0){c+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new Intel® AMT computer that is located on the internet." onclick=\'return addCiraDeviceToMesh("'+a._id+"\")'>Add CIRA</a>"}if(a.mtype==1){if((features&1)==0){c+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new Intel® AMT computer that is located on the local network." onclick=\'return addDeviceToMesh("'+a._id+"\")'>Add Local</a>";c+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new Intel® AMT computer by scanning the local network." onclick=\'return addAmtScanToMesh("'+a._id+"\")'>Scan Network</a>"}if(a.amt&&(a.amt.type==2)){c+=' <a href=# style=cursor:pointer;font-size:10px title="Perform Intel AMT client control mode (CCM) activation." onclick=\'return showCcmActivation("'+a._id+"\")'>Activation</a>"}else{if(a.amt&&(a.amt.type==3)&&((features&1048576)!=0)){c+=' <a href=# style=cursor:pointer;font-size:10px title="Perform Intel AMT admin control mode (ACM) activation." onclick=\'return showAcmActivation("'+a._id+"\")'>Activation</a>"}}}if(a.mtype==2){c+=' <a href=# style=cursor:pointer;font-size:10px title="Add a new computer to this mesh by installing the mesh agent." onclick=\'return addAgentToMesh("'+a._id+"\")'>Add Agent</a>";c+=' <a href=# style=cursor:pointer;font-size:10px title="Invite someone to install the mesh agent on this mesh." onclick=\'return inviteAgentToMesh("'+a._id+"\")'>Invite</a>"}return c}function addDeviceToMesh(b){if(xxdialogMode){return false}var a=meshes[b];var c='Add a new Intel® AMT device to device group "'+EscapeHtml(a.name)+'".<br /><br />';c+=addHtmlValue("Device Name","<input id=dp1devicename style=width:230px maxlength=32 autocomplete=off onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />");c+=addHtmlValue("Hostname",'<input id=dp1hostname style=width:230px maxlength=32 autocomplete=off placeholder="Same as device name" onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />');c+=addHtmlValue("Username",'<input id=dp1username style=width:230px maxlength=32 autocomplete=off placeholder="admin" onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />');c+=addHtmlValue("Password","<input id=dp1password type=password style=width:230px autocomplete=off maxlength=32 onchange=validateDeviceToMesh() onkeyup=validateDeviceToMesh() />");c+=addHtmlValue("Security","<select id=dp1tls style=width:236px><option value=0>No TLS security</option><option value=1>TLS security required</option></select>");setDialogMode(2,"Add Intel® AMT device",3,addDeviceToMeshEx,c,b);validateDeviceToMesh();Q("dp1devicename").focus();return false}function showCcmActivation(c){if(xxdialogMode){return false}var e=serverinfo.name,b=meshes[c];if((e.indexOf(".")==-1)||((features&2)!=0)){e=window.location.hostname}var g,a=domainUrl.substring(0,domainUrl.length-1);if(serverinfo.https==true){var d=(serverinfo.port==443)?"":(":"+serverinfo.port);g="wss://"+e+d+domainUrl}else{var d=(serverinfo.port==80)?"":(":"+serverinfo.port);g="ws://"+e+d+domainUrl}var h='Perform Intel AMT client control mode (CCM) activation to group "'+EscapeHtml(b.name)+'" by downloading the MeshCMD tool and running it like this:<br /><br />';h+="<textarea readonly=readonly style=width:100%;resize:none;height:100px;overflow:auto;font-size:12px readonly>meshcmd amtccm --url "+g+"amtactivate?id="+c.split("/")[2]+" --serverhttpshash "+serverinfo.tlshash+"</textarea>";setDialogMode(2,"Intel® AMT activation",9,null,h);Q("idx_dlgOkButton").focus();return false}function showAcmActivation(c){if(xxdialogMode){return false}var e=serverinfo.name,b=meshes[c];if((e.indexOf(".")==-1)||((features&2)!=0)){e=window.location.hostname}var g,a=domainUrl.substring(0,domainUrl.length-1);if(serverinfo.https==true){var d=(serverinfo.port==443)?"":(":"+serverinfo.port);g="wss://"+e+d+domainUrl}else{var d=(serverinfo.port==80)?"":(":"+serverinfo.port);g="ws://"+e+d+domainUrl}var h='Perform Intel AMT admin control mode (ACM) activation to group "'+EscapeHtml(b.name)+'" by downloading the MeshCMD tool and running it like this:<br /><br />';h+="<textarea readonly=readonly style=width:100%;resize:none;height:100px;overflow:auto;font-size:12px readonly>meshcmd amtacm --url "+g+"amtactivate?id="+c.split("/")[2]+" --serverhttpshash "+serverinfo.tlshash+"</textarea>";if(serverinfo.amtAcmFqdn!=null){h+="<div style=margin-top:8px>Intel AMT will need to be set with a Trusted FQDN in MEBx or have a wired LAN on the network: <b>"+serverinfo.amtAcmFqdn.join(", ")+"</b></div>"}setDialogMode(2,"Intel® AMT activation",9,null,h);Q("idx_dlgOkButton").focus();return false}function addAmtScanToMesh(a){if(xxdialogMode){return false}var b="Enter a range of IP addresses to scan for Intel AMT devices.<br /><br />";b+=addHtmlValue("IP Range",'<input id=dp1range style=width:184px value="192.168.1.0/24" onkeyup=addAmtScanToMeshKeyUp(event) /><input id=dp1rangebutton type=button value=Scan onclick=addAmtScanToMeshButton()></input>');b+='<div id=dp1results style="width:100%;height:200px;background-color:white;border:1px gray solid;overflow-y:scroll"></div>';setDialogMode(2,"Scan for Intel® AMT devices",3,addAmtScanToMeshEx,b,a);QE("idx_dlgOkButton",false);QH("dp1results","<div style=width:100%;text-align:center;margin-top:12px;color:gray;line-height:1.5>Sample IP range values<br />192.168.0.100<br />192.168.1.0/24<br />192.167.0.1-192.168.0.100</div>");focusTextBox("dp1range");return false}function addAmtScanToMeshKeyUp(a){if(a.keyCode==13){haltEvent(a);addAmtScanToMeshButton()}}function addAmtScanToMeshEx(b,h){var d=document.getElementsByClassName("DevScanCheckbox"),c=0;for(var e=0;e<d.length;e++){if(d[e].checked){var g=d[e].getAttribute("tag");var a=amtScanResults[g];meshserver.send({action:"addamtdevice",meshid:h,devicename:g,hostname:a.hostname,amtusername:"",amtpassword:"",amttls:a.tls})}}}function addAmtScanToMeshButton(){QE("dp1range",false);QE("dp1rangebutton",false);QH("dp1results","<div style=width:100%;text-align:center;margin-top:12px>Scanning...</div>");meshserver.send({action:"scanamtdevice",range:Q("dp1range").value})}function addAmtScanToMeshCheckbox(){var b=document.getElementsByClassName("DevScanCheckbox"),a=0;for(var c=0;c<b.length;c++){if(b[c].checked){a++}}QE("idx_dlgOkButton",a>0)}function addCiraDeviceToMesh(b){if(xxdialogMode){return false}var a=meshes[b];var c=b.split("/")[2].replace(/\@/g,"X").replace(/\$/g,"X");var e="<select id=dlgAddCiraSel onclick=dlgAddCiraSelClick() style=width:230px><option value=0>MeshCommander Script</option><option value=1>Manual Username/Password</option>";if((features&16)==0){e+="<option value=2>Manual Certificate</option></select>"}var d="";d+=addHtmlValue("Setup Method",e);d+="<hr>";d+='<div id=dlgAddCira0>To add a new Intel® AMT device to device group "'+EscapeHtml(a.name)+"\" with CIRA, download the following script files and use <a href='http://meshcommander.com' rel='noreferrer noopener' target='_blank'>MeshCommander</a> to run the script to configure computers.<br /><br />";d+=addHtmlValue("Setup CIRA",'<a href="mescript.ashx?type=1&meshid='+b+'" download>cira_setup.mescript</a>');d+=addHtmlValue("Cleanup CIRA",'<a href="mescript.ashx?type=2" download>cira_clean.mescript</a>');d+="</div>";d+='<div id=dlgAddCira1 style=display:none>To add a new Intel® AMT device to device group "'+EscapeHtml(a.name)+'" with CIRA, load the following certificate as trusted root within Intel AMT';if(serverinfo.mpspass){d+=" and authenticate to the server using this username and password.<br /><br />"}else{d+=" and authenticate to the server using this username and any password.<br /><br />"}d+=addHtmlValue("Root Certificate",'<a href="MeshServerRootCert.cer" download>Root Certificate File</a>');d+=addHtmlValue("Username",'<input style=width:230px readonly value="'+c.substring(0,16)+'" />');if(serverinfo.mpspass){d+=addHtmlValue("Password",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpspass)+'" />')}if(serverinfo!=null){d+=addHtmlValue("MPS Server",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpsname)+":"+serverinfo.mpsport+'" />')}d+="</div>";if((features&16)==0){d+='<div id=dlgAddCira2 style=display:none>To add a new Intel® AMT device to device group "'+EscapeHtml(a.name)+'" with CIRA, load the following certificate as trusted root within Intel AMT, authenticate using a client certificate with the following common name and connect to the following server.<br /><br />';d+=addHtmlValue("Root Certificate",'<a href="MeshServerRootCert.cer" download>Root Certificate File</a>');d+=addHtmlValue("Organization",'<input style=width:230px readonly value="'+c+'" />');if(serverinfo!=null){d+=addHtmlValue("MPS Server",'<input style=width:230px readonly value="'+EscapeHtml(serverinfo.mpsname)+":"+serverinfo.mpsport+'" />')}d+="</div>"}setDialogMode(2,"Add Intel® AMT CIRA device",2,null,d,"fileDownload");Q("dlgAddCiraSel").focus();return false}function dlgAddCiraSelClick(){var a=Q("dlgAddCiraSel").value;QV("dlgAddCira0",a==0);QV("dlgAddCira1",a==1);QV("dlgAddCira2",a==2)}function checkEmail(c){var d=c.split("@");var b=((d.length==2)&&(d[0].length>0)&&(d[1].split(".").length>1)&&(d[1].length>2));if(b==true){var e=d[1].split(".");for(var a in e){if(e[a].length==0){b=false}}}return b}function inviteAgentToMesh(b){if(xxdialogMode){return false}var c="",a=meshes[b];if(features&64){c+=addHtmlValue("Invitation Type","<select id=d2InviteType onchange=d2ChangedInviteType() style=width:236px><option value=0>Link invitation</option><option value=1>Email invitation</option></select>")+"<hr />";c+='<div id=emailInviteDiv style=display:none>Invite someone to install the mesh agent. An email with be sent with the link to the mesh agent installation for the "'+EscapeHtml(a.name)+'" device group.<br /><br />';c+=addHtmlValue("Name (optional)",'<input id=agentInviteName value="" style=width:230px maxlength=64 />');c+=addHtmlValue("Email",'<input id=agentInviteEmail style=width:230px placeholder="example@email.com" onkeyup=validateAgentInvite()></input>');c+=addHtmlValue("Operating System","<select id=agentInviteNameOs onchange=d2ChangedInviteType() style=width:236px><option value=4>Send installation link</option><option value=0 selected>Any supported</option><option value=1>Windows only</option><option value=3>Apple MacOS only</option><option value=2>Linux only</option></select>");c+="<div id=d2agentexpirediv>";c+=addHtmlValue("Link Expiration","<select id=agentInviteExpire style=width:236px><option value=1>1 hour</option><option value=8>8 hours</option><option value=24>1 day</option><option value=168>1 week</option><option value=5040>1 month</option><option value=0>Unlimited</option></select>");c+="</div>";c+=addHtmlValue("Installation Type","<select id=agentInviteType style=width:236px><option value=0>Background and interactive</option><option value=2>Background only</option><option value=1>Interactive only</option></select>");c+=addHtmlValue("Message<br />(optional)",'<textarea id=agentInviteMessage value="" style=width:230px;height:100px;resize:none maxlength=1024 /></textarea>');c+="</div>"}c+='<div id=urlInviteDiv>Invite someone to install the mesh agent by sharing an invitation link. This link points the user to installation instructions for the "'+EscapeHtml(a.name)+'" device group. The link is public and no account for this server is needed.<br /><br />';c+=addHtmlValue("Link Expiration","<select id=d2inviteExpire style=width:236px onchange=d2RequestInvitationLink()><option value=1>1 hour</option><option value=8>8 hours</option><option value=24>1 day</option><option value=168>1 week</option><option value=5040>1 month</option><option value=0>Unlimited</option></select>");c+='<div id=agentInvitationLinkDiv style="text-align:center;font-size:large;margin:16px;display:none"><a href=# id=agentInvitationLink target="_blank" style=cursor:pointer></a> <img src=images/link4.png height=10 width=10 title="Copy link to clipboard" style=cursor:pointer onclick=d2CopyInviteToClip()></div></div>';setDialogMode(2,"Invite",3,performAgentInvite,c,b);if(features&64){Q("d2InviteType").focus();d2ChangedInviteType()}else{Q("d2inviteExpire").focus();validateAgentInvite()}d2RequestInvitationLink();return false}function d2RequestInvitationLink(){meshserver.send({action:"createInviteLink",meshid:xxdialogTag,expire:parseInt(Q("d2inviteExpire").value),flags:0})}function d2ChangedInviteType(){QV("urlInviteDiv",Q("d2InviteType").value==0);QV("d2agentexpirediv",Q("agentInviteNameOs").value==4);QV("emailInviteDiv",Q("d2InviteType").value==1);validateAgentInvite()}function d2CopyInviteToClip(){copyTextToClip(Q("agentInvitationLink").href)}function validateAgentInvite(){if((features&64)&&(Q("d2InviteType").value==1)){QE("idx_dlgOkButton",checkEmail(Q("agentInviteEmail").value));QV("idx_dlgCancelButton",true)}else{QE("idx_dlgOkButton",true);QV("idx_dlgCancelButton",false)}}function performAgentInvite(a,b){if((features&64)&&(Q("d2InviteType").value==1)){meshserver.send({action:"inviteAgent",meshid:b,email:Q("agentInviteEmail").value,name:Q("agentInviteName").value,os:Q("agentInviteNameOs").value,flags:Q("agentInviteType").value,msg:Q("agentInviteMessage").value,expire:parseInt(Q("agentInviteExpire").value)})}}function addAgentToMesh(e){if(xxdialogMode){return false}var c=meshes[e],j="",b=0;j+=addHtmlValue("Operating System","<select id=aginsSelect onchange=addAgentToMeshClick() style=width:236px><option value=0>Windows</option><option value=1>Linux / BSD</option><option value=2>Apple MacOS</option><option value=3>Windows (UnInstall)</option><option value=4>Linux / BSD (UnInstall)</option></select>");j+="<div id=aginsTypeDiv>";j+=addHtmlValue("Installation Type","<select id=aginsType onchange=addAgentToMeshClick() style=width:236px><option value=0>Background & interactive</option><option value=2>Background only</option><option value=1>Interactive only</option></select>");j+="</div><hr>";var d=c.name;d=d.split("\\").join("").split("/").join("").split(":").join("").split("*").join("").split("?").join("").split('"').join("").split("<").join("").split(">").join("").split("|").join("").split(" ").join("").split("'").join("");j+='<div id=agins_windows>To add a new computer to device group "'+EscapeHtml(c.name)+'", download the mesh agent and install it the computer to manage. This agent has server and device group information embedded within it.<br /><br />';j+=addHtmlValue("Mesh Agent",'<a id=aginsw32lnk href="meshagents?id=3&meshid='+e.split("/")[2]+'&installflags=0" download onclick="setDialogMode(0)" title="32bit version of the MeshAgent">Windows (.exe)</a> <img src=images/link4.png height=10 width=10 title="Copy Windows 32bit agent URL to clipboard" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=3&meshid='+e.split("/")[2]+'&installflags=",1)>');j+=addHtmlValue("Mesh Agent",'<a id=aginsw64lnk href="meshagents?id=4&meshid='+e.split("/")[2]+'&installflags=0" download onclick="setDialogMode(0)" title="64bit version of the MeshAgent">Windows x64 (.exe)</a> <img src=images/link4.png height=10 width=10 title="Copy Windows 64bit agent URL to clipboard" style=cursor:pointer onclick=copyAgentUrl("meshagents?id=4&meshid='+e.split("/")[2]+'&installflags=",1)>');if(debugmode>0){j+=addHtmlValue("Settings File",'<a id=aginswmshlnk href="meshsettings?id='+e.split("/")[2]+'&installflags=0" rel="noreferrer noopener" target="_blank">'+EscapeHtml(c.name)+" settings (.msh)</a>")}j+="</div>";j+="<div id=agins_linux style=display:none>To add a computer to "+EscapeHtml(c.name)+" run the following command. Root credentials will be needed.<br />";j+="<textarea id=agins_linux_area rows=2 cols=20 readonly=readonly style=width:100%;resize:none;height:120px;overflow:scroll;font-size:12px readonly></textarea>";j+="<div style='font-size:x-small'>* For BSD, run \"pkg install wget sudo bash\" first.</div></div>";j+='<div id=agins_osx style=display:none>To add a new computer to device group "'+EscapeHtml(c.name)+'", download the mesh agent and install it the computer to manage. This agent installer has server and device group information embedded within it.<br /><br />';j+=addHtmlValue("Mesh Agent",'<a href="meshosxagent?id=16&meshid='+e.split("/")[2]+'" rel="noreferrer noopener" target="_blank" title="64bit version of MacOS Mesh Agent">MacOS Agent (64bit)</a> <img src=images/link4.png height=10 width=10 title="Copy MacOS agent URL to clipboard" style=cursor:pointer onclick=copyAgentUrl("meshosxagent?id=16&meshid='+e.split("/")[2]+'",0)>');j+="</div>";j+='<div id=agins_windows_un style=display:none>To remove a mesh agent, download the file below, run it and click "uninstall".<br /><br />';j+=addHtmlValue("Mesh Agent",'<a href="meshagents?id=3" download onclick="setDialogMode(0)" title="32bit version of the MeshAgent">Windows (.exe)</a>');j+=addHtmlValue("Mesh Agent",'<a href="meshagents?id=4" download onclick="setDialogMode(0)" title="64bit version of the MeshAgent">Windows x64 (.exe)</a>');j+="</div>";j+="<div id=agins_linux_un style=display:none>To remove a mesh agent, run the following command. Root credentials will be needed.<br />";j+="<textarea id=agins_linux_area_un rows=2 cols=20 readonly=readonly style=width:100%;resize:none;height:120px;overflow:scroll;font-size:12px readonly></textarea>";j+="</div>";setDialogMode(2,"Add Mesh Agent",2,null,j,"fileDownload");var h=serverinfo.name;if((h.indexOf(".")==-1)||((features&2)!=0)){h=window.location.hostname}var a=domainUrl.substring(0,domainUrl.length-1);if(serverinfo.https==true){var g=(serverinfo.port==443)?"":(":"+serverinfo.port);if((features&8192)==0){Q("agins_linux_area").value="(wget https://"+h+g+domainUrl+"meshagents?script=1 --no-check-certificate -O ./meshinstall.sh || wget https://"+h+g+domainUrl+"meshagents?script=1 --no-proxy --no-check-certificate -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo -E ./meshinstall.sh https://"+h+g+a+" '"+e.split("/")[2]+"'\r\n";Q("agins_linux_area_un").value="(wget https://"+h+g+domainUrl+"meshagents?script=1 --no-check-certificate -O ./meshinstall.sh || wget https://"+h+g+domainUrl+"meshagents?script=1 --no-proxy --no-check-certificate -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n"}else{Q("agins_linux_area").value="wget https://"+h+g+domainUrl+"meshagents?script=1 --no-proxy --no-check-certificate -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh https://"+h+g+a+" '"+e.split("/")[2]+"'\r\n";Q("agins_linux_area_un").value="wget https://"+h+g+domainUrl+"meshagents?script=1 --no-proxy --no-check-certificate -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n"}}else{var g=(serverinfo.port==80)?"":(":"+serverinfo.port);if((features&8192)==0){Q("agins_linux_area").value="(wget http://"+h+g+domainUrl+"meshagents?script=1 -O ./meshinstall.sh || wget http://"+h+g+domainUrl+"meshagents?script=1 --no-proxy -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo -E ./meshinstall.sh http://"+h+g+a+" '"+e.split("/")[2]+"'\r\n";Q("agins_linux_area_un").value="(wget http://"+h+g+domainUrl+"meshagents?script=1 -O ./meshinstall.sh || wget http://"+h+g+domainUrl+"meshagents?script=1 --no-proxy -O ./meshinstall.sh) && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n"}else{Q("agins_linux_area").value="wget http://"+h+g+domainUrl+"meshagents?script=1 --no-proxy -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh http://"+h+g+a+" '"+e.split("/")[2]+"'\r\n";Q("agins_linux_area_un").value="wget http://"+h+g+domainUrl+"meshagents?script=1 --no-proxy -O ./meshinstall.sh && chmod 755 ./meshinstall.sh && sudo ./meshinstall.sh uninstall\r\n"}}Q("aginsSelect").focus();addAgentToMeshClick();return false}function copyAgentUrl(h,a){var g=serverinfo.name;if((g.indexOf(".")==-1)||((features&2)!=0)){g=window.location.hostname}var d=domainUrl.substring(0,domainUrl.length-1);var e=(serverinfo.port==443)?"":(":"+serverinfo.port);var b="https://"+g+e+domainUrl+h;if(a==1){b+=Q("aginsType").value}copyTextToClip(b)}function addAgentToMeshClick(){var a=Q("aginsSelect").value;QV("agins_windows",a==0);QV("agins_linux",a==1);QV("agins_osx",a==2);QV("agins_windows_un",a==3);QV("agins_linux_un",a==4);QV("aginsTypeDiv",a==0);Q("aginsw32lnk").href=(Q("aginsw32lnk").href.split("installflags=")[0])+"installflags="+Q("aginsType").value;Q("aginsw64lnk").href=(Q("aginsw64lnk").href.split("installflags=")[0])+"installflags="+Q("aginsType").value;if(debugmode>0){Q("aginswmshlnk").href=(Q("aginswmshlnk").href.split("installflags=")[0])+"installflags="+Q("aginsType").value}}function validateDeviceToMesh(){QE("idx_dlgOkButton",(Q("dp1devicename").value.length>0)&&(passwordcheck(Q("dp1password").value)))}function addDeviceToMeshEx(b,d){var a=Q("dp1username").value;if(a==""){a="admin"}var c=Q("dp1hostname").value;if(c==""){c=Q("dp1devicename").value}meshserver.send({action:"addamtdevice",meshid:d,devicename:Q("dp1devicename").value,hostname:c,amtusername:a,amtpassword:Q("dp1password").value,amttls:Q("dp1tls").value})}function deviceHeaderSet(){if(deviceHeaderId==0){deviceHeaderId=1;return}deviceHeaders["DevxHeader"+deviceHeaderId]=deviceHeaderTotal+((deviceHeaderTotal==1)?" node":" nodes");deviceHeaderId++;deviceHeaderCount={};deviceHeaderTotal=0}var powerStateStrings=["",'<span title="Device is powered on.">Powered</span>','<span title="Device is in sleep state (S1).">Sleeping</span>','<span title="Device is in sleep state (S2).">Sleeping</span>','<span title="Device is in deep sleep state (S3).">Deep Sleep</span>','<span title="Device is in hibernating state (S4).">Hibernating</span>','<span title="Device is in powered off state (S5).">Soft-Off</span>','<span title="Device is detected but power state could not be obtained.">Present</span>'];var powerStateStrings2=["","Device is powered","Device is in sleep state (S1)","Device is in sleep state (S2)","Device is in deep sleep state (S3)","Device is hibernating (S4)","Device is in soft-off state (S5)","Device is present, but power state cannot be determined"];var powerColorTable=["pwsTransparent","pwsBlack","pwsBlue","pwsBlue2","pwsLightblue","pwsBlueviolet","pwsDarkgreen","pwsLightseagreen","pwsLightseagreen2"];function NodeStateStr(a){var b=[];if(a.state>0&&a.state<powerStatetable.length){state.push(powerStatetable[a.state])}if(a.conn){if((a.conn&1)!=0){b.push('<span title="Mesh agent is connected and ready for use.">Agent</span>')}if((a.conn&2)!=0){b.push('<span title="Intel® AMT CIRA is connected and ready for use.">CIRA</span>')}else{if((a.conn&4)!=0){b.push('<span title="Intel® AMT is routable.">Intel® AMT</span>')}}if((a.conn&8)!=0){b.push('<span title="Mesh agent is reachable using another agent as relay.">Relay</span>')}}if((a.pwr!=null)&&(a.pwr!=0)){b.push(powerStateStrings[a.pwr])}return b.join(", ")}function PowerStateStr(a){if(a<powerStatetable.length){return powerStatetable[a]}return""}function PowerStateStr2(a){if((a!=0)&&(a<powerStatetable.length)){return powerStatetable[a]}return"Unknown"}function selectallButtonFunction(){var b=document.getElementsByClassName("DeviceCheckbox"),a=0;for(var c=0;c<b.length;c++){if(b[c].checked===true){a++}}for(var c=0;c<b.length;c++){b[c].checked=(a==0)}p1updateInfo()}function p1updateInfo(){var b=document.getElementsByClassName("DeviceCheckbox"),a=0;for(var c=0;c<b.length;c++){if(b[c].checked===true){a++}}if(a>0){QE("GroupActionButton",true);Q("SelectAllButton").value="Select None";QV("cxmgroupsplit",true);QV("cxmdesktop",true)}else{QE("GroupActionButton",false);Q("SelectAllButton").value="Select All";QV("cxmgroupsplit",false);QV("cxmdesktop",false)}}function groupActionFunction(){var a="Select an operation to perform on all selected devices. Actions will be performed only with proper rights.<br /><br />";a+=addHtmlValue("Operation","<select id=d2groupop><option value=100>Wake-up devices</option><option value=4>Sleep devices</option><option value=3>Reset devices</option><option value=2>Power off devices</option><option value=102>Move to device group</option><option value=101>Delete devices</option></select>");setDialogMode(2,"Group Action",3,groupActionFunctionEx,a)}function getCheckedDevices(){var e=[],b=document.getElementsByClassName("DeviceCheckbox"),a=0;for(var c=0;c<b.length;c++){if(b[c].checked){if(b[c].value){var d=b[c].value.substring(6);if(e.indexOf(d)==-1){e.push(d)}}}}return e}function groupActionFunctionEx(){var a=Q("d2groupop").value;if(a==100){meshserver.send({action:"wakedevices",nodeids:getCheckedDevices()})}else{if(a==101){var b="Confirm delete selected devices(s)?<br /><br />";b+="<label><input id=d2check type=checkbox onchange=d2groupActionFunctionDelEx() />Confirm</label>";setDialogMode(2,"Delete Nodes",3,groupActionFunctionDelEx,b);QE("idx_dlgOkButton",false)}else{if(a==102){p10showChangeGroupDialog(getCheckedDevices())}else{meshserver.send({action:"poweraction",nodeids:getCheckedDevices(),actiontype:a})}}}}function d2groupActionFunctionDelEx(){QE("idx_dlgOkButton",Q("d2check").checked)}function groupActionFunctionDelEx(){meshserver.send({action:"removedevices",nodeids:getCheckedDevices()})}function onSortSelectChange(a){sort=document.getElementById("sortselect").selectedIndex;if(!a){putstore("sort",sort)}}function meshSort(c,d){if(c.meshnamel>d.meshnamel){return 1}if(c.meshnamel<d.meshnamel){return -1}if(c.meshid==d.meshid){if(showRealNames==true){if(c.rnamel>d.rnamel){return 1}if(c.rnamel<d.rnamel){return -1}return 0}else{if(c.namel>d.namel){return 1}if(c.namel<d.namel){return -1}return 0}}return 0}function powerSort(c,e){var d=c.pwr?c.pwr:0;var g=e.pwr?e.pwr:0;if(d>g){return -1}if(d<g){return 1}if(d==g){if(showRealNames==true){if(c.rnamel>e.rnamel){return 1}if(c.rnamel<e.rnamel){return -1}return 0}else{if(c.namel>e.namel){return 1}if(c.namel<e.namel){return -1}return 0}}return 0}function deviceSort(c,d){if(c.namel>d.namel){return 1}if(c.namel<d.namel){return -1}return 0}function deviceHostSort(c,d){if(c.rnamel>d.rnamel){return 1}if(c.rnamel<d.rnamel){return -1}return 0}function onSearchFocus(a){searchFocus=a}function onMapSearchFocus(a){mapSearchFocus=a}function onUserSearchFocus(a){userSearchFocus=a}function onConsoleFocus(a){consoleFocus=a}function onSearchInputChanged(){var m=Q("SearchInput").value.toLowerCase().trim();putstore("_search",m);var l=null,g=null,c=null;if(m.startsWith("user:")){l=m.substring(5)}else{if(m.startsWith("u:")){l=m.substring(2)}else{if(m.startsWith("ip:")){g=m.substring(3)}else{if(m.startsWith("group:")){c=m.substring(6)}else{if(m.startsWith("g:")){c=m.substring(2)}}}}}if(m==""){for(var a in nodes){nodes[a].v=true}}else{if(g!=null){for(var a in nodes){nodes[a].v=((nodes[a].ip!=null)&&(nodes[a].ip.indexOf(g)>=0))}}else{if(c!=null){for(var a in nodes){nodes[a].v=(meshes[nodes[a].meshid].name.toLowerCase().indexOf(c)>=0)}}else{if(l!=null){for(var a in nodes){nodes[a].v=false;if(nodes[a].users&&nodes[a].users.length>0){for(var e in nodes[a].users){if(nodes[a].users[e].toLowerCase().indexOf(l)>=0){nodes[a].v=true}}}}}else{try{var h=m.split(/\s+/).join("|"),j=new RegExp(h);for(var a in nodes){nodes[a].v=(j.test(nodes[a].name.toLowerCase()))||(nodes[a].rnamel!=null&&j.test(nodes[a].rnamel.toLowerCase()));if((nodes[a].v==false)&&nodes[a].tags){for(var k in nodes[a].tags){if(j.test(nodes[a].tags[k].toLowerCase())){nodes[a].v=true;break}else{nodes[a].v=false}}}}}catch(b){for(var a in nodes){nodes[a].v=true}}}}}}}var contextelement=null;function handleContextMenu(d){hideContextMenu();var m=(window.pageXOffset!==null)?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft;var n=(window.pageYOffset!==null)?window.pageYOffset:(document.documentElement||document.body.parentNode||document.body).scrollTop;var c=document.elementFromPoint(d.pageX-m,d.pageY-n);if(c&&c!=null&&c.id=="connectbutton2"&¤tNode&¤tNode.agent&&(currentNode.agent.id>0)&&(currentNode.agent.id<5)){contextelement=c;var b=document.getElementById("termShellContextMenu");b.style.left=d.pageX+"px";b.style.top=d.pageY+"px";b.style.display="block"}else{if(c&&c!=null&&c.id=="MxMESH"){contextelement=c;var b=document.getElementById("meshContextMenu");b.style.left=d.pageX+"px";b.style.top=d.pageY+"px";b.style.display="block"}else{while(c&&c!=null&&c.id!="devs"){c=c.parentElement}if(!c||c==null){return true}contextelement=c;var b=document.getElementById("contextMenu");b.style.left=d.pageX+"px";b.style.top=d.pageY+"px";b.style.display="block";var l=contextelement.children[1].attributes.onclick.value;var k=getNodeFromId(l.substring(12,l.length-18));var g=meshes[k.meshid];var h=g.links[userinfo._id];var j=h.rights;var a=((j&16)!=0);var o=((j==4294967295)||((j&512)==0));var e=((j==4294967295)||((j&1024)==0));QV("cxdesktop",((g.mtype==1)||(k.agent==null)||(k.agent.caps==null)||((k.agent.caps&1)!=0)||(k.intelamt&&(k.intelamt.state==2)))&&((j&8)||(j&256)));QV("cxterminal",((g.mtype==1)||(k.agent==null)||(k.agent.caps==null)||((k.agent.caps&2)!=0)||(k.intelamt&&(k.intelamt.state==2)))&&(j&8)&&o);QV("cxfiles",((g.mtype==2)&&((k.agent==null)||(k.agent.caps==null)||((k.agent.caps&4)!=0)))&&(j&8)&&e);QV("cxevents",(k.intelamt!=null)&&((k.intelamt.state==2)||(k.conn&2))&&(j&8));QV("cxconsole",(a&&(g.mtype==2)&&((k.agent==null)||(k.agent.caps==null)||((k.agent.caps&8)!=0)))&&(j&8))}}return haltEvent(d)}function cmaction(a,b){var d=contextelement.children[1].attributes.onclick.value;d=d.substring(12,d.length-18);if(a==7){Q("viewselect").value=3;Q("viewselect").onchange();Q("autoConnectDesktopCheckbox").checked=true;Q("autoConnectDesktopCheckbox").onclick()}if((a>0)&&(a<7)){var e=[0,10,12,11,13,16,15][a];if(b&&(b.shiftKey==true)){window.open(window.location.origin+"?node="+d.split("/")[2]+"&viewmode="+e+"&hide=16","meshcentral:"+d)}else{gotoDevice(d,e);var c=meshes[currentNode.meshid];if((currentNode.conn&1)&&(c.mtype==2)){if((e==11)&&(desktop==null)&&(currentNode.agent.caps&1)){connectDesktop(null,1)}if((e==12)&&(terminal==null)&&(currentNode.agent.caps&2)){connectTerminal(null,1)}if((e==13)&&(files==null)){connectFiles(null)}}}}}function cmmeshaction(a){var d=contextelement.attributes.onclick.value.substring(10,contextelement.attributes.onclick.value.length-2);var b=document.getElementsByClassName("DeviceCheckbox");if((a==1)||(a==2)){for(var c=0;c<b.length;c++){if((b[c].attributes)&&(b[c].attributes["class"]["value"].split(" ")[0]==d)){b[c].checked=(a==1)}}}p1updateInfo()}function cmtermaction(a){connectTerminal(null,1,{powershell:(a==2)})}function hideContextMenu(){QV("contextMenu",false);QV("meshContextMenu",false);QV("termShellContextMenu",false);contextelement=null}var xxmap={map:null,contextmenu:null,activeInteractions:[],showindex:0,markersSource:null,markersLayer:null,mapLayer:null,mapView:null,};function updateMapMarkers(j){if((xxmap!=null)&&(xxmap.map==null)){try{loadmap()}catch(b){console.error("loadmap() exception",b)}}if(xxmap==null){return}var a=null;for(var d in nodes){try{var g=map_parseNodeLoc(nodes[d]),c=xxmap.markersSource.getFeatureById(nodes[d]._id);if((g!=null)&&((nodes[d].meshid==j)||(j==null))){var e=g[0],h=g[1],k=g[2];if(a==null){a=[e,h,e,h,0]}else{if(e<a[0]){a[0]=e}if(h<a[1]){a[1]=h}if(e>a[2]){a[2]=e}if(h>a[3]){a[3]=h}}if(c==null){addFeature(nodes[d]);a[4]=1}else{updateFeature(nodes[d],c);c.setStyle(markerStyle(nodes[d],g[2]))}}else{if(c){xxmap.markersSource.removeFeature(c)}}}catch(b){console.error("updateMapMarkers() exception",b,JSON.stringify(nodes[d]))}}return a}var map_cm_popup=new ol.Overlay({element:Q("xmap-info-window"),positioning:"bottom-center",stopEvent:false});var map_cm_editMarker={text:"Modify node location",callback:function(a){modifyMarkerloc(a.data)}};var map_cm_clearMarker={text:"Remove node location",callback:function(a){meshserver.send({action:"changedevice",nodeid:a.data.a,userloc:[]})}};var map_cm_saveMarker={text:"Save node location",callback:function(a){saveMarkerloc(a.data)}};var map_cm_nodemenu_items=[{text:"General information",callback:function(a){if(a.data!=null){gotoDevice(a.data,10)}}},{text:"Desktop",callback:function(a){if(a.data!=null){gotoDevice(a.data,11)}}},{text:"Terminal",callback:function(a){if(a.data!=null){gotoDevice(a.data,12)}}},{text:"Intel® AMT",callback:function(a){if(a.data!=null){gotoDevice(a.data,14)}}},"-",{text:"Zoom-in to extent",callback:function(b){var a=b.data.getGeometry().getCoordinates();zoomToLocation(a,19)}},{text:"Zoom-out to extent",callback:function(b){var a=b.data.getGeometry().getCoordinates();zoomToLocation(a,2)}}];var contextmenu_items=[{text:"Refresh",callback:function(){refreshMap(true,true)}},{text:"Zoom to fit extent",callback:function(){zoomToFitExtent()}},{text:"Center map here",callback:function(a){xxmap.mapView.animate({center:a.coordinate})}},{text:"Place node here",callback:function(a){placeNode(a.coordinate)}}];function stringToIntHash(c){var a=0,b;for(b=0;b<c.length;b++){a=((a<<5)-a)+c.charCodeAt(b);a|=0}return a}function map_parseNodeLoc(b){var a=null,c=0;if(b.iploc){a=b.iploc;c=1}if(b.wifiloc){a=b.wifiloc;c=2}if(b.gpsloc){a=b.gpsloc;c=3}if(b.userloc){a=b.userloc;c=4}if((a==null)||(typeof a!="string")){return null}a=a.split(",");if(c==1){return[parseFloat(a[0])+(stringToIntHash(b._id.substring(0,20))/100000000000),parseFloat(a[1])+(stringToIntHash(b._id.substring(20))/100000000000),c]}else{return[parseFloat(a[0]),parseFloat(a[1]),c]}}function loadmap(){if(xxmap==null){return}if((features&32768)==0){QV("viewselectmapoption",false);QV("devViewButton4",false);xxmap=null;return}try{xxmap.markersSource=new ol.source.Vector();xxmap.markersLayer=new ol.layer.Vector({source:xxmap.markersSource});xxmap.mapLayer=new ol.layer.Tile({source:new ol.source.OSM()});xxmap.mapView=new ol.View({center:ol.proj.transform([0,0],"EPSG:4326","EPSG:3857"),zoom:2,minZoom:2,maxZoom:20,extent:ol.proj.transformExtent([-100000,-69.55,100000,69.55],"EPSG:4326","EPSG:3857")});xxmap.map=new ol.Map({target:"xdevicesmap",layers:[xxmap.mapLayer,xxmap.markersLayer],view:xxmap.mapView});xxmap.map.addOverlay(map_cm_popup);xxmap.map.on("click",function(c){var d=xxmap.map.forEachFeatureAtPixel(c.pixel,function(h,j){return h});if(d){var g=d.getId();if(g!=null){gotoDevice(g,10)}else{var e=getCorrespondingFeature(d);gotoDevice(e.getId(),10)}}});xxmap.map.on("pointermove",function(d){var g=xxmap.map.forEachFeatureAtPixel(d.pixel,function(j,k){return j});if(g){xxmap.map.getTargetElement().style.cursor="pointer";var c=g.getGeometry().getCoordinates();map_cm_popup.setPosition(c);var e=g.getId();if(e){QH("xmap-info-window",g.get("name"))}else{var h=getCorrespondingFeature(g);QH("xmap-info-window",h.get("name"))}}else{xxmap.map.getTargetElement().style.cursor="";QH("xmap-info-window","")}});var a=new ContextMenu({width:160,defaultItems:false,items:contextmenu_items});a.on("open",function(c){var e=xxmap.map.forEachFeatureAtPixel(c.pixel,function(h,j){return h});xxmap.contextmenu.clear();if(e){var d=e.getId();if(d){addContextMenuItems(e)}else{var g=getCorrespondingFeature(e);if(g){addContextMenuItems(g)}else{xxmap.contextmenu.extend(contextmenu_items)}}}else{xxmap.contextmenu.extend(contextmenu_items)}});if(xxmap.contextmenu==null){xxmap.contextmenu=a}xxmap.map.addControl(xxmap.contextmenu)}catch(b){console.log(b);QV("viewselectmapoption",false);QV("devViewButton4",false);xxmap=null}}function addFeature(g,c,e){var a=getModifiedFeature(g._id);if(a){xxmap.markersSource.addFeature(a)}else{if(!c&&!e){var d=map_parseNodeLoc(g);c=d[0];e=d[1]}if(e>180){e=180-e;meshserver.send({action:"changedevice",nodeid:g._id,userloc:[c,e]})}if((c<90)&&(c>-90)&&(e<180)&&(e>-180)){var b=new ol.Feature({geometry:new ol.geom.Point(ol.proj.transform([e,c],"EPSG:4326","EPSG:3857")),name:g.name,status:g.conn,lat:c,lon:e});b.setId(g._id);b.setStyle(markerStyle(g));xxmap.markersSource.addFeature(b)}}}function removeFeature(b){var a=xxmap.markersSource.getFeatureById(b._id);if(a){xxmap.markersSource.removeFeature(a)}}function updateFeature(g,a){if(g.conn!=a.get("status")){a.set("status",g.conn);a.setStyle(markerStyle(g))}var c=map_parseNodeLoc(g);if(c!=null){var b=c[0],d=c[1];if((b!=a.get("lat"))||(d!=a.get("lon"))){a.set("lat",b);a.set("lon",d);var e=ol.proj.transform([parseFloat(d),parseFloat(b)],"EPSG:4326","EPSG:3857");a.getGeometry().setCoordinates(e)}}if(g.name!=a.get("name")){a.set("name",g.name)}}function modifyMarkerloc(c){var b=c.getId();if(b){c.setStyle(markerStyle(getNodeFromId(c.a),4));if(!getActiveInteractions(c)){var a=new ol.interaction.Modify({features:new ol.Collection([c]),pixelTolerance:10});xxmap.activeInteractions.push({featureid:b,feature:c,interaction:a});xxmap.map.addInteraction(a)}}}function saveMarkerloc(d){var c=d.getId();if(c){var a=getActiveInteractions(d);if(a){xxmap.map.removeInteraction(a);removeInteraction(c);var b=d.getGeometry().getCoordinates();var e=ol.proj.transform(b,"EPSG:3857","EPSG:4326");if(e[0]>180){e[0]=180-e[0]}var g=[e[1],e[0]];meshserver.send({action:"changedevice",nodeid:c,userloc:g})}}}function markerStyle(b,d){if(d==null){d=0;if(b.iploc){d=1}if(b.wifiloc){d=2}if(b.gpsloc){d=3}if(b.userloc){d=4}}var e=["","-ip","-wifi","-gps","-user"];var a=connStateColor(b);var c=new ol.style.Style({image:new ol.style.Icon({color:a,anchor:[0.5,1],src:"images/mapmarker"+e[d]+".png"})});return[c]}function connStateColor(a){if(a.conn==1||a.conn==3||a.conn==5){return"#00ffdd"}return"#C70039"}function addContextMenuItems(a){if(getActiveInteractions(a)){map_cm_saveMarker.data=a;xxmap.contextmenu.push(map_cm_saveMarker)}else{map_cm_editMarker.data=a;xxmap.contextmenu.push(map_cm_editMarker);var b=getNodeFromId(a.a);if(b.userloc){map_cm_clearMarker.data=a;xxmap.contextmenu.push(map_cm_clearMarker)}}map_cm_nodemenu_items.forEach(function(c){if(c.text=="Zoom-in to extent"||c.text=="Zoom-out to extent"){c.data=a}else{if(c!="-"){c.data=a.getId()}}});xxmap.contextmenu.extend(map_cm_nodemenu_items)}function getActiveInteractions(b){var a=b.getId();for(var c=0;c<xxmap.activeInteractions.length;c++){if(xxmap.activeInteractions[c].featureid==a){return xxmap.activeInteractions[c].interaction}}return false}function getModifiedFeature(a){if(a){for(var b=0;b<xxmap.activeInteractions.length;b++){if(xxmap.activeInteractions[b].featureid==a){return xxmap.activeInteractions[b].feature}}}return null}function removeInteraction(a){var c=-1;for(var b=0;b<xxmap.activeInteractions.length;b++){if(xxmap.activeInteractions[b].featureid===a){c=b;break}}if(c>=0){xxmap.activeInteractions.splice(c,1)}}function getCorrespondingFeature(e){var d=e.getGeometry().getCoordinates();for(var b=0;b<xxmap.activeInteractions.length;b++){var c=xxmap.activeInteractions[b].feature;var a=c.getGeometry().getCoordinates();if(a[0].toFixed(5)==d[0].toFixed(5)&&a[1].toFixed(5)==d[1].toFixed(5)){return c}}return null}function refreshMap(k,h){if(k){xxmap.map.setTarget(null);xxmap.map=null;xxmap.markersSource=null;xxmap.mapView=null;xxmap.mapLayer=null;xxmap.activeInteractions=[]}var a=updateMapMarkers();if((a!=null)&&(h||(a[4]==1))){var b=(a[0]+a[2])/2;var c=(a[1]+a[3])/2;var d=Math.max(Math.abs(a[0]-a[2]),Math.abs(a[1]-a[3]));var l=xxmap.map.getView();l.setCenter(ol.proj.transform([c,b],"EPSG:4326","EPSG:3857"));var e=360,g=-2;while(e>d){g++;e=e/2}l.setZoom(g)}}function placeNode(a){if(xxdialogMode){return}var c='<div style=margin-bottom:6px><label for=selectnode-search>Search</label>  <input type=text placeholder="Device name" id="selectnode-search" onchange=onPlaceNodeInputChange() onkeyup=onPlaceNodeInputChange() autocomplete=off style=width:120px></div><div id=placenode style="height:254px;overflow-y:auto;width:100%;margin:12px 1px 4px 1px;"><div id=noNodesMapPlace style=text-align:center;width:100%;display:none>No devices found.</div>';for(var b in nodes){c+="<div class=noselect id="+nodes[b]._id+"-rowid onclick=selectNodeToPlace(event,'"+nodes[b]._id+"') style=background-color:lightgray;margin-bottom:4px;border-radius:2px><input name=PlaceMapDeviceCheckbox id="+nodes[b]._id+"-checkid type=checkbox style=width:16px;display:inline />";c+="<div class=j"+nodes[b].icon+" style=width:16px;height:16px;margin-top:2px;margin-right:4px;display:inline-block></div><div style=width:16px;display:inline>"+nodes[b].name+"</div></div>"}setDialogMode(2,"Select a node to place",3,placeNodeEx,c+"</div>",a);onPlaceNodeInputChange()}function placeNodeEx(b,c){var d=document.getElementsByName("PlaceMapDeviceCheckbox");for(var g in d){if(d[g].checked){var h=getNodeFromId(d[g].id.substring(0,d[g].id.length-8));if(h){var e=xxmap.markersSource.getFeatureById(g);var j=ol.proj.transform(c,"EPSG:3857","EPSG:4326");var k=[j[1],j[0]];if(e){e.getGeometry().setCoordinates(c);var a=getActiveInteractions(e);if(a){saveMarkerloc(e)}else{meshserver.send({action:"changedevice",nodeid:h._id,userloc:k})}}else{meshserver.send({action:"changedevice",nodeid:h._id,userloc:k})}}}}}function onPlaceNodeInputChange(){updatePlaceNodeTable(Q("selectnode-search").value.trim().toLowerCase())}function updatePlaceNodeTable(d){var b=document.getElementsByName("PlaceMapDeviceCheckbox"),a=0;for(var c in nodes){var e=((nodes[c].namel.indexOf(d)>=0||d=="")||(nodes[c].rnamel!=null&&nodes[c].rnamel.indexOf(d)>=0));if(e){a++}QV(nodes[c]._id+"-rowid",e)}QV("noNodesMapPlace",a==0)}function selectNodeToPlace(b,g){if(b.target.name!="PlaceMapDeviceCheckbox"){var h=Q(g+"-checkid");h.checked=!h.checked}var c=document.getElementsByName("PlaceMapDeviceCheckbox"),a=0;for(var d in c){if(c[d].checked){a++}}QE("idx_dlgOkButton",a>0)}function addMeshOptions(a,b){}function meshOptionRmvMod(a,b){}function meshExists(){for(var a in meshes){if(meshes[a]){return true}}return false}function setMeshView(a){var c=Q("select-mesh");var b=c.selectedIndex;if(c[b].value==a){c[0].selected=true;onSelectMeshChange()}}function clearMeshOptions(){}function getSearchLocation(){try{var b=Q("mapSearchLocation").value.trim();if(b.length>0){var c=new XMLHttpRequest();c.onreadystatechange=function(){if(c.readyState==4&&c.status==200){formatSearchData(c.responseText)}};c.open("GET","https://nominatim.openstreetmap.org/search?q="+b+"&format=json",true);c.send()}}catch(a){}}function formatSearchData(b){try{QH("xmapSearchResults","");var c=JSON.parse(b),a=0,k='<div class="xmapItem">';for(var h=0;h<c.length;h++){if(c[h].display_name&&c[h].boundingbox[0]&&c[h].boundingbox[1]&&c[h].boundingbox[2]&&c[h].boundingbox[3]){a++;var j=(h%2==0)?"xmapItemSel1":"xmapItemSel1";k+='<div class="'+j+'" onclick=mapGotoSelectedLocation(this)><div>'+c[h].display_name+"</div><div style=display:none>"+c[h].boundingbox[0]+"!#!"+c[h].boundingbox[1]+"!#!"+c[h].boundingbox[2]+"!#!"+c[h].boundingbox[3]+"</div></div>"}}k+="</div>";if(a==1){var g=[parseFloat(c[0].boundingbox[2]),parseFloat(c[0].boundingbox[0]),parseFloat(c[0].boundingbox[3]),parseFloat(c[0].boundingbox[1])];zoomToExtent(g)}else{if(a==0){k="<div style=width:200px>No location found.<div>"}QV("xmapSearchResultsDlg",true)}QH("xmapSearchResults",k)}catch(d){}}function mapGotoSelectedLocation(c){var d=c.children;var a=d[1].innerHTML.split("!#!");var b=[parseFloat(a[2]),parseFloat(a[0]),parseFloat(a[3]),parseFloat(a[1])];zoomToExtent(b);mapCloseSearchWindow()}function mapCloseSearchWindow(){QH("xmapSearchResults","");QV("xmapSearchResultsDlg",false)}function zoomToLocation(a,c){var b=xxmap.map.getView();b.setCenter(a);b.setZoom(c)}function zoomToFitExtent(){var b=xxmap.markersSource.getFeatures();if(b.length>0){var a=xxmap.markersSource.getExtent();xxmap.map.getView().fit(a,xxmap.map.getSize())}}function zoomToExtent(b){var a=ol.proj.transformExtent(b,ol.proj.get("EPSG:4326"),ol.proj.get("EPSG:3857"));xxmap.map.getView().fit(a,xxmap.map.getSize())}function refreshDevice(a){if(!currentNode||currentNode._id!=a){return}gotoDevice(a,xxcurrentView,true)}function getNodeRights(c){var b=getNodeFromId(c),a=meshes[b.meshid];return a.links[userinfo._id].rights}var currentNode;var powerTimelineNode=null;var powerTimelineReq=null;var powerTimelineUpdate=null;var powerTimeline=null;function getCurrentNode(){return currentNode}function gotoDevice(s,u,z,k){if((userinfo.emailVerified!==true)&&(serverinfo.emailcheck==true)&&(userinfo.siteadmin!=4294967295)){setDialogMode(2,"Account Security",1,null,'Unable to access a device until a email address is verified. This is required for password recovery. Go to the "My Account" tab to change and verify an email address.');return}if((features&262144)&&!((userinfo.otpsecret==1)||(userinfo.otphkeys>0)||(userinfo.otpkeys>0))){setDialogMode(2,"Account Security",1,null,'Unable to access a device until two-factor authentication is enabled. This is required for extra security. Go to the "My Account" tab and look at the "Account Security" section.');return}if(k&&(k.shiftKey==true)){window.open(window.location.origin+"?node="+s.split("/")[2]+"&viewmode=10&hide=16","meshcentral:"+s);return}var r=getNodeFromId(s);var o=meshes[r.meshid];var p=o.links[userinfo._id].rights;if(!currentNode||currentNode._id!=r._id||z==true){currentNode=r;var q=EscapeHtml(r.name);if(q.length==0){q="<i>None</i>"}if(((p&4)!=0)&&((!o.flags)||((o.flags&2)==0))){q='<span tabindex=0 title="Click here to edit the server-side device name" onclick=showEditNodeValueDialog(0) onkeyup="if (event.key == \'Enter\') showEditNodeValueDialog(0)" style=cursor:pointer>'+q+' <img class=hoverButton src="images/link5.png" /></span>'}q+="<span style=color:#AAA;font-size:small> - "+EscapeHtml(o.name)+"</span>";QH("p10deviceName",q);QH("p11deviceName",q);QH("p12deviceName",q);QH("p13deviceName",q);QH("p14deviceName",q);QH("p15deviceName","Console - "+q);QH("p16deviceName",q);QH("p17deviceName",q);var D="<table style=width:100%>";D+=addDeviceAttribute('<span title="The name of the device group this computer belong to.">Group</span>','<a href=# title="The name of the device group this computer belong to" onclick=gotoMesh("'+r.meshid+'") style=cursor:pointer>'+EscapeHtml(meshes[r.meshid].name)+"</a>");if((r.rname!=null)&&(r.name!=r.rname)){D+=addDeviceAttribute('<span title="The name of this computer as set in the operating system">Name</span>','<span title="The name of this computer as set in the operating system">'+EscapeHtml(r.rname)+"</span>")}if((features&1)==0){if((p&4)!=0){if(r.host){D+=addDeviceAttribute("Hostname","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer>"+EscapeHtml(r.host)+"</span>")}else{D+=addDeviceAttribute("Hostname","<span onclick=showEditNodeValueDialog(1) style=cursor:pointer><i>None</i></span>")}}else{D+=addDeviceAttribute("Hostname",EscapeHtml(r.host))}}var j=r.desc?EscapeHtml(r.desc):"<i>None</i>";if((p&4)!=0){D+=addDeviceAttribute("Description","<span onclick=showEditNodeValueDialog(2) style=cursor:pointer>"+j+' <img class=hoverButton src="images/link5.png" /></span>')}else{D+=addDeviceAttribute("Description",j)}var a=["Unknown","Windows 32bit console","Windows 64bit console","Windows 32bit service","Windows 64bit service","Linux 32bit","Linux 64bit","MIPS","XENx86","Android ARM","Linux ARM","MacOS 32bit","Android x86","PogoPlug ARM","Android APK","Linux Poky x86-32bit","MacOS 64bit","ChromeOS","Linux Poky x86-64bit","Linux NoKVM x86-32bit","Linux NoKVM x86-64bit","Windows MinCore console","Windows MinCore service","NodeJS","ARM-Linaro","ARMv6l / ARMv7l","ARMv8 64bit","ARMv6l / ARMv7l / NoKVM","Unknown","Unknown","FreeBSD x86-64"];if((r.agent!=null)&&(r.agent.id!=null)&&(r.agent.ver!=null)){var A="";if(r.agent.id<=a.length){A=a[r.agent.id]}else{A=a[0]}if(r.agent.ver!=0){A+=" v"+r.agent.ver}D+=addDeviceAttribute("Mesh Agent",A)}if(r.intelamt!=null){var A="";var w={0:"Not Activated (Pre)",1:"Not Activated (In)",2:"Activated"};if(r.intelamt.ver!=null&&r.intelamt.state==null){A+="<i>Unknown State</i>, v"+r.intelamt.ver}else{if((r.intelamt.ver==null)&&(r.intelamt.state==2)){A+="<i>Activated</i>"}else{if((r.intelamt.ver==null)||(r.intelamt.state==null)){A+="<i>Unknown Version & State</i>"}else{A+=w[r.intelamt.state];if((r.intelamt.state==2)&&r.intelamt.flags){if(r.intelamt.flags&2){A+=' <span title="Intel AMT is activated in Client Control Mode">CCM</span>'}else{if(r.intelamt.flags&4){A+=' <span title="Intel AMT is activated in Admin Control Mode">ACM</span>'}}}A+=(", v"+r.intelamt.ver)}}}if(r.intelamt.tls==1){A+=', <span title="Intel AMT is setup with TLS network security">TLS</span>'}if(r.intelamt.state==2){if(r.intelamt.user==null||r.intelamt.user==""){if((p&4)!=0){A+=', <i style=color:#FF0000;cursor:pointer title="Edit Intel® AMT credentials" onclick=editDeviceAmtSettings("'+r._id+'")>No Credentials</i>'}else{A+=", <i style=color:#FF0000>No Credentials</i>"}}A+=" ";if((p&4)!=0){A+='<img src=images/link4.png height=10 width=10 title="Edit Intel® AMT credentials" style=cursor:pointer onclick=editDeviceAmtSettings("'+r._id+'")>'}}D+=addDeviceAttribute("Intel® AMT",A)}if(o.mtype==2){if((r.agent!=null)&&(r.agent.tag!=null)){var B=EscapeHtml(r.agent.tag);if(B.startsWith("mailto:")){B='<a href="'+B+'">'+B.substring(7)+"</a>"}D+=addDeviceAttribute("Agent Tag",B)}}else{if((r.intelamt!=null)&&(r.intelamt.tag!=null)){var B=EscapeHtml(r.intelamt.tag);if(B.startsWith("mailto:")){B='<a href="'+B+'">'+B.substring(7)+"</a>"}D+=addDeviceAttribute("Intel® AMT Tag",B)}}if(r.osdesc){D+=addDeviceAttribute("Operating System",r.osdesc)}if(r.av&&r.av.length>0){var E=[];for(var n in r.av){if(r.av[n].product){var d=EscapeHtml(r.av[n].product);if(r.av[n].enabled!==true){d+=" - <span style=color:red>Disabled</span>"}if(r.av[n].updated!==true){d+=" - <span style=color:red>Out of date</span>"}if((r.av[n].enabled==true)&&(r.av[n].updated==true)){d+=" - <span style=color:green>OK</span>"}E.push(d)}}D+=addDeviceAttribute("Antivirus",E.join("<br />"))}if(r.users&&r.conn&&(r.users.length>0)&&(r.conn&1)){D+=addDeviceAttribute("Active User"+((r.users.length>1)?"s":""),r.users.join(", "))}var e=r.conn;if(e&&e>1){var h=[];if((r.conn&1)!=0){h.push('<span title="Mesh agent is connected and ready for use.">Mesh Agent</span>')}if((r.conn&2)!=0){h.push('<span title="Intel® AMT CIRA is connected and ready for use.">Intel® AMT CIRA</span>')}else{if((r.conn&4)!=0){h.push('<span title="Intel® AMT is routable and ready for use.">Intel® AMT</span>')}}if((r.conn&8)!=0){h.push('<span title="Mesh agent is reachable using another agent as relay.">Mesh Relay</span>')}D+=addDeviceAttribute("Connectivity",h.join(", "))}var m="<i>None</i>";if(r.tags!=null){m="";for(var n in r.tags){m+='<span class="tagSpan">'+r.tags[n]+"</span>"}}if((p&4)!=0){D+=addDeviceAttribute("Tags","<span onclick=showEditNodeValueDialog(3) style=cursor:pointer>"+m+' <img class=hoverButton src="images/link5.png" /></span>')}else{D+=addDeviceAttribute("Tags",m)}D+="</table><br />";if((p&76)!=0){D+='<input type=button value=Actions title="Perform power actions on the device" onclick=deviceActionFunction() />'}D+='<input type=button value=Notes title="View notes about this device" onclick=showNotes('+((p&128)==0)+',"'+encodeURIComponent(r._id)+'") />';QH("p10html",D);masterUpdate(256);D='<div class="p10html3right">';if((p&4)!=0){D+=' <a href=# onclick=p10showChangeGroupDialog(["'+r._id+'"]) title="Move this device to a different device group">Change Group</a>';D+=' <a href=# onclick=p10showDeleteNodeDialog("'+r._id+'") title="Remove this device">Delete Device</a>'}D+='</div><div class="p10html3left">';if(o.mtype==2){D+='<a href=# onclick=p10showNodeNetInfoDialog("'+r._id+'") title="Show device network interface information">Interfaces</a> '}if(xxmap!=null){D+='<a href=# onclick=p10showNodeLocationDialog("'+r._id+'") title="Show device locations information">Location</a> '}if(((p&8)!=0)&&(o.mtype==2)){D+='<a href=# onclick=p10showMeshCmdDialog(1,"'+r._id+'") title="Traffic router used to connect to a device thru this server.">Router</a> '}if(((e&1)!=0)&&(clickOnce==true)&&(o.mtype==2)&&((p&8)!=0)){if((r.agent.id>0)&&(r.agent.id<5)){D+='<a href=# onclick=p10clickOnce("'+r._id+'","RDP2",3389) title="Requires Microsoft ClickOnce support in your browser.">RDP</a> '}if(r.agent.id>4){D+='<a href=# onclick=p10clickOnce("'+r._id+'","PSSH",22) title="Requires Microsoft ClickOnce support in your browser.">Putty</a> ';D+='<a href=# onclick=p10clickOnce("'+r._id+'","WSCP",22) title="Requires Microsoft ClickOnce support in your browser.">WinSCP</a> '}}D+="</div><br>";QH("p10html3",D);var v=PowerStateStr(r.state);if((e&1)!=0){if(v.length>0){v+="<br/>"}v+='<span style=font-size:12px title="Agent connected">Agent connected</span>'}if((e&2)!=0){if(v.length>0){v+="<br/>"}v+='<span style=font-size:12px title="Intel® AMT connected">Intel® AMT connected</span>'}else{if((e&4)!=0){if(v.length>0){v+="<br/>"}v+='<span style=font-size:12px title="Intel® AMT detected">Intel® AMT detected</span>'}}if((v=="")&&r.lastconnect){v="<span style=font-size:12px>Last seen:<br />"+printDateTime(new Date(r.lastconnect))+"</span>"}QH("MainComputerState",v);Q("MainComputerImage").setAttribute("src","images/icons256-"+r.icon+"-1.png");Q("MainComputerImage").className=((!r.conn)||(r.conn==0)?"gray":"");var C=((p==4294967295)||((p&512)==0));var l=((p==4294967295)||((p&1024)==0));var b=((p==4294967295)||((p&2048)==0));if(C){setupTerminal()}if(l){setupFiles()}var g=((p&16)!=0);if(g){setupConsole()}else{if(u==15){u=10}}QV("MainDevDesktop",((o.mtype==1)||(r.agent==null)||(r.agent.caps==null)||((r.agent.caps&1)!=0)||(r.intelamt&&(r.intelamt.state==2)))&&((p&8)||(p&256)));QV("MainDevTerminal",((o.mtype==1)||(r.agent==null)||(r.agent.caps==null)||((r.agent.caps&2)!=0)||(r.intelamt&&(r.intelamt.state==2)))&&(p&8)&&C);QV("MainDevFiles",((o.mtype==2)&&((r.agent==null)||(r.agent.caps==null)||((r.agent.caps&4)!=0)))&&(p&8)&&l);QV("MainDevAmt",(r.intelamt!=null)&&((r.intelamt.state==2)||(r.conn&2))&&(p&8)&&b);QV("MainDevConsole",(g&&(o.mtype==2)&&((r.agent==null)||(r.agent.caps==null)||((r.agent.caps&8)!=0)))&&(p&8));QV("p15uploadCore",(r.agent!=null)&&(r.agent.caps!=null)&&((r.agent.caps&16)!=0));QH("p15coreName",((r.agent!=null)&&(r.agent.core!=null))?r.agent.core:"");var c=Q("p14iframe").contentWindow.getCurrentMeshNode();if((c!=null)&&(c._id!=currentNode._id)){Q("p14iframe").contentWindow.disconnect()}var t=((r.conn&6)!=0)?true:false;Q("p14iframe").contentWindow.setConnectionState(t);Q("p14iframe").contentWindow.setFrameHeight("650px");Q("p14iframe").contentWindow.setAuthCallback(updateAmtCredentials);QV("deskActionsBtn",(p&72)!=0);QV("termActionsBtn",(p&72)!=0);QV("filesActionsBtn",(p&72)!=0);if((powerTimelineNode!=currentNode._id)&&(powerTimelineReq!=currentNode._id)){QH("p10html2","");powerTimelineReq=currentNode._id;meshserver.send({action:"powertimeline",nodeid:currentNode._id});meshserver.send({action:"lastconnect",nodeid:currentNode._id});meshserver.send({action:"getsysinfo",nodeid:currentNode._id});QH("p17info","")}QV("DeskTools",false);showDeskToolsProcesses();refreshDeviceEvents();if((currentNode)&&(xxcurrentView>=10)&&(xxcurrentView<20)){document.title=decodeURIComponent("{{{extitle}}}")+" - "+currentNode.name+" - "+o.name}else{document.title=decodeURIComponent("{{{extitle}}}")}p11clearConsoleMsg();p12clearConsoleMsg();p13clearConsoleMsg()}setupDesktop();if(!u){u=10}go(u)}function showNotes(b,a){if(xxdialogMode){return}setDialogMode(2,"Notes",2,showNotesEx,"<textarea id=d2devNotes ro="+b+" noteid="+a+" readonly style=background-color:#fcf3cf;width:100%;height:200px;resize:none;overflow-y:scroll></textarea><span style=font-size:10px>Device group notes can be viewed and changed by other device group administrators.<span>",a);meshserver.send({action:"getNotes",id:decodeURIComponent(a)})}function showNotesEx(a,b){meshserver.send({action:"setNotes",id:decodeURIComponent(b),notes:encodeURIComponent(Q("d2devNotes").value)})}function deviceChat(){if(xxdialogMode){return}var a="/messenger?id=meshmessenger/"+encodeURIComponent(currentNode._id)+"/"+encodeURIComponent(userinfo._id)+"&title="+currentNode.name;if((authCookie!=null)&&(authCookie!="")){a+="&auth="+authCookie}window.open(a,"meshmessenger:"+currentNode._id);meshserver.send({action:"meshmessenger",nodeid:decodeURIComponent(currentNode._id)})}function deviceUrlFunction(){if(xxdialogMode){return}setDialogMode(2,"Open Page on Device",3,deviceUrlFunctionEx,'<input id=d2devurl placeholder="http://server.com" style=width:100%;overflow-y:scroll></input>');Q("d2devurl").focus()}function deviceUrlFunctionEx(){meshserver.send({action:"msg",type:"openUrl",nodeid:currentNode._id,url:Q("d2devurl").value})}function deviceToastFunction(){if(xxdialogMode){return}setDialogMode(2,"Device Notification",3,deviceToastFunctionEx,"<textarea id=d2devToast style=width:100%;height:80px;resize:none;overflow-y:scroll></textarea>");Q("d2devToast").focus()}function deviceToastFunctionEx(){meshserver.send({action:"toast",nodeids:[currentNode._id],title:"MeshCentral",msg:Q("d2devToast").value})}function deviceActionFunction(){if(xxdialogMode){return}var a=meshes[currentNode.meshid].links[userinfo._id].rights;var b="Select an operation to perform on this device.<br /><br />";var c="<select id=d2deviceop style=float:right;width:250px>";if((a&64)!=0){c+="<option value=100>Wake-up</option>"}if((a&8)!=0){c+="<option value=4>Sleep</option><option value=3>Reset</option><option value=2>Power off</option>"}c+="</select>";b+=addHtmlValue("Operation",c);setDialogMode(2,"Device Action",3,deviceActionFunctionEx,b)}function deviceActionFunctionEx(){var a=Q("d2deviceop").value;if(a==100){meshserver.send({action:"wakedevices",nodeids:[currentNode._id]})}else{meshserver.send({action:"poweraction",nodeids:[currentNode._id],actiontype:a})}}function updateAmtCredentials(a){var b=getNodeFromId(currentNode._id);if((a==true)||(b.intelamt.user==null)||(b.intelamt.user=="")){editDeviceAmtSettings(currentNode._id,updateAmtCredentialsEx)}else{Q("p14iframe").contentWindow.connectButtonfunctionEx()}}function updateAmtCredentialsEx(a,b){Q("p14iframe").contentWindow.connectButtonfunctionEx()}function updateDeviceTimeline(){if((meshserver.State!=2)||(powerTimelineNode==null)||(powerTimelineUpdate==null)||(currentNode==null)){return}if((powerTimelineNode==powerTimelineReq)&&(currentNode._id==powerTimelineNode)&&(powerTimelineUpdate<Date.now())){powerTimelineUpdate=null;meshserver.send({action:"powertimeline",nodeid:currentNode._id});meshserver.send({action:"lastconnect",nodeid:currentNode._id})}}function drawDeviceTimeline(){if((currentNode==null)||(xxcurrentView<10)||(xxcurrentView>19)){return}var s=null,o=Date.now();if(currentNode._id==powerTimelineNode){s=powerTimeline}var e=new Date();e.setHours(0,0,0,0);e=new Date(e.getTime()-(1000*60*60*24*6));var u=e.getTime();var t=[];if(s!=null&&s.length>1){t.push([0,s[1],s[0]]);var c=s[1];for(var m=2;m<s.length;m+=2){var p=s[m],k=o;if(s.length>(m+1)){k=s[m+1]}t.push([c,c+k,p]);c=c+k}}var A="",b=1,h=new Date();var w=Q("masthead").offsetWidth-(160+9+9+14);h.setHours(0,0,0,0);for(var m=0;m<7;m++){var g="",q=h.getTime(),l=q+(1000*60*60*24);for(var n in t){var a=t[n];if(isTimeBlockInside(q,l,a[0],a[1])==true){var y=Math.max(q,a[0]);var r=Math.min(Math.min(l,a[1]),o);var z=Math.round(((r-y)*w)/86400000);if(z>0){var v=powerStateStrings2[a[2]]+" from "+printTime(new Date(y))+" to "+printTime(new Date(r))+".";g+='<div class="pwState '+powerColor(a[2])+'" title="'+v+'" style="width:'+z+'px;"></div>'}}}A+="<tr class="+(((b%2)==0)?"altBack":"")+"><td><div> "+printDate(h)+"<div></div></div></td><td><div>"+g+"</div></td></tr>";++b;h=new Date(h.getTime()-(1000*60*60*24))}QH("p10html2",'<table cellpadding=2 cellspacing=0><thead><tr style=><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center><a download href="devicepowerevents.ashx?id='+currentNode._id+'" onclick="setDialogMode(0)"><img title="Download power events" src="images/link4.png" /></a>7 Day Power State</th></tr></thead><tbody>'+A+"</tbody></table>")}function powerColor(a){if(a<powerColorTable.length){return powerColorTable[a]}return"pwsYellow"}function isTimeBlockInside(d,c,b,a){if((b<d)&&(a>c)){return true}if((b>d)&&(b<c)){return true}if((a>d)&&(a<c)){return true}return false}function addDeviceAttribute(a,b){return"<tr><td class=style7>"+a+"</td><td class=style9>"+b+"</td></tr>"}function editDeviceAmtSettings(g,c,a){if(xxdialogMode){return}var h="",e=getNodeFromId(g),b=3,d=getNodeRights(g);if((d&4)==0){return}h+=addHtmlValue("Username",'<input id=dp10username style=width:230px maxlength=32 autocomplete=nope placeholder="admin" onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />');h+=addHtmlValue("Password","<input id=dp10password type=password style=width:230px autocomplete=nope maxlength=32 onchange=validateDeviceAmtSettings() onkeyup=validateDeviceAmtSettings() />");h+=addHtmlValue("Security","<select id=dp10tls style=width:236px><option value=0>No TLS security</option><option value=1>TLS security required</option></select>");if((e.intelamt.user!=null)&&(e.intelamt.user!="")){b=7}setDialogMode(2,"Edit Intel® AMT credentials",b,editDeviceAmtSettingsEx,h,{node:e,func:c,arg:a});if((e.intelamt.user!=null)&&(e.intelamt.user!="")){Q("dp10username").value=e.intelamt.user}else{Q("dp10username").value="admin"}Q("dp10tls").value=e.intelamt.tls;validateDeviceAmtSettings()}function validateDeviceAmtSettings(){QE("idx_dlgOkButton",passwordcheck(Q("dp10password").value))}function editDeviceAmtSettingsEx(c,d){if(c==2){meshserver.send({action:"changedevice",nodeid:d.node._id,intelamt:{user:"",pass:""}})}else{var b=Q("dp10username").value;if(b==""){b="admin"}var a=Q("dp10password").value;if(a==""){b=""}meshserver.send({action:"changedevice",nodeid:d.node._id,intelamt:{user:b,pass:a,tls:Q("dp10tls").value}});d.node.intelamt.user=b;d.node.intelamt.tls=Q("dp10tls").value;if(d.func){setTimeout(function(){d.func(null,d.arg)},300)}}}function p10showChangeGroupDialog(e){if(xxdialogMode){return false}var g=null;if(e.length==1){try{g=meshes[getNodeFromId(e[0])]._id}catch(b){}}var j="<select id=p10newGroup style=width:236px>",a=0;for(var c in meshes){var d=meshes[c].links[userinfo._id].rights;if((meshes[c]._id!=g)&&(d&4)){a++;j+="<option value='"+meshes[c]._id+"'>"+meshes[c].name+"</option>"}}j+="</select>";if(a>0){var h=(e.length==1)?"Select a new group for this device<br /><br />":"Select a new group for selected devices<br /><br />";h+=addHtmlValue("New Device Group",j);setDialogMode(2,"Change Group",3,p10showChangeGroupDialogEx,h,e)}else{setDialogMode(2,"Change Group",1,null,"No other device group of same type exists.")}return false}function p10showChangeGroupDialogEx(a,c){meshserver.send({action:"changeDeviceMesh",nodeids:c,meshid:Q("p10newGroup").value})}function p10showDeleteNodeDialog(a){if(xxdialogMode){return false}var b='Are you sure you want to delete node "'+EscapeHtml(currentNode.name)+'"?<br /><br />';b+="<label><input id=p10check type=checkbox onchange=p10validateDeleteNodeDialog() />Confirm</label>";setDialogMode(2,"Delete Node",3,p10showDeleteNodeDialogEx,b,a);p10validateDeleteNodeDialog();return false}function p10validateDeleteNodeDialog(){QE("idx_dlgOkButton",Q("p10check").checked)}function p10showDeleteNodeDialogEx(a,b){meshserver.send({action:"removedevices",nodeids:[b]})}function p10clickOnce(a,c,b){meshserver.send({action:"getcookie",nodeid:a,tcpport:b,tag:"clickonce",protocol:c});return false}var d2map=null;function p10showNodeLocationDialog(){if((xxdialogMode!=null)&&(xxdialogTag=="@xxmap")){setDialogMode(0)}else{if(xxdialogMode){return false}}var m=[],n=["iploc","wifiloc","gpsloc","userloc"],a=null;for(var k in n){if(currentNode[n[k]]!=null){var j=currentNode[n[k]].split(","),h=parseFloat(j[0]),l=parseFloat(j[1]);if((h<90)&&(h>-90)&&(l<180)&&(l>-180)){var e=new ol.Feature({geometry:new ol.geom.Point(ol.proj.fromLonLat([l,h]))});e.setStyle(markerStyle(currentNode,parseInt(k)+1));m.push(e);if(a==null){a=[h,l,h,l,0]}else{if(h<a[0]){a[0]=h}if(l<a[1]){a[1]=l}if(h>a[2]){a[2]=h}if(l>a[3]){a[3]=l}}}}}var p=new ol.source.Vector({features:m});var o=new ol.layer.Vector({source:p});var q="<div id=d2map style=width:100%;height:300px></div>";setDialogMode(2,"Device Location",1,null,q,"@xxmap");var c=0,b=0,r=8;if(a!=null){var b=(a[0]+a[2])/2;var c=(a[1]+a[3])/2;var d=Math.max(Math.abs(a[0]-a[2]),Math.abs(a[1]-a[3]));var g=360,r=-2;while(g>d){r++;g=g/2}}if(m.length==1){r=8}d2map=new ol.Map({target:"d2map",interactions:ol.interaction.defaults({dragPan:false,mouseWheelZoom:false}),layers:[new ol.layer.Tile({source:new ol.source.OSM()}),o],view:new ol.View({center:ol.proj.fromLonLat([c,b]),zoom:r})});return false}function p10showNodeNetInfoDialog(){if(xxdialogMode){return false}setDialogMode(2,"Network Interfaces",1,null,"<div id=d2netinfo>Loading...</div>","if"+currentNode._id);meshserver.send({action:"getnetworkinfo",nodeid:currentNode._id});return false}function p10showMeshRouterDialog(){if(xxdialogMode){return}var a="<div>MeshCentral Router is a Windows tool for TCP port mapping. You can, for example, RDP into a remote device thru this server.</div><br />";a+=addHtmlValue("Win32 Executable",'<a style=cursor:pointer download href="meshagents?meshaction=winrouter" onclick="setDialogMode(0)">MeshCentralRouter.exe</a>');setDialogMode(2,"MeshCentral Router",1,null,a,"fileDownload")}function p10showMeshCmdDialog(a,b){if(xxdialogMode){return}var d="<select id=aginsSelect onclick=meshCmdOsClick() style=width:236px>";d+="<option value=3>Windows (32bit)</option>";d+="<option value=4>Windows (64bit)</option>";d+="<option value=5>Linux x86 (32bit)</option>";d+="<option value=6>Linux x86 (64bit)</option>";d+="<option value=16>MacOS (64bit)</option>";d+="<option value=25>Linux ARM, Raspberry Pi (32bit)</option>";d+="</select>";var c="";if(a==0){c+="<div>MeshCmd is a command line tool that performs lots of different operations. The action file can optionally be downloaded and edited to provide server information and credentials.<br /><br />"}if(a==1){c+='<div>Download "meshcmd" with an action file to route traffic thru this server to this device. Make sure to edit meshaction.txt and add your account password or make any changes needed.<br /><br />'}c+=addHtmlValue("Operating System",d);c+=addHtmlValue("MeshCmd",'<a id=meshcmddownloadid href="meshagents?meshcmd=3" download></a>');if(a==0){c+=addHtmlValue("Action File",'<a href="meshagents?meshaction=generic" download>MeshAction (.txt)</a>')}if(a==1){c+=addHtmlValue("Action File",'<a href="meshagents?meshaction=route&nodeid='+b+'" download>MeshAction (.txt)</a>')}c+="</div>";setDialogMode(2,["Download MeshCmd","Network Router"][a],9,null,c,"fileDownload");meshCmdOsClick()}function meshCmdOsClick(){var a=Q("aginsSelect").value,b="",c="";if(a==3){b="MeshCmd (Win32 executable)"}if(a==4){b="MeshCmd (Win64 executable)"}if(a==5){b="MeshCmd (Linux x86, 32bit)"}if(a==6){b="MeshCmd (Linux x86, 64bit)"}if(a==16){b="MeshCmd (MacOS, 64bit)"}if(a==25){b="MeshCmd (Linux ARM, 32bit)"}QH("meshcmddownloadid",b);Q("meshcmddownloadid").setAttribute("href","meshagents?meshcmd="+a)}function p10showiconselector(){if(xxdialogMode){return}var a=meshes[currentNode.meshid];var b=a.links[userinfo._id].rights;if((b&4)==0){return}var c="<br><div style=display:inline-block;width:40px></div>";c+="<div tabindex=0 style=display:inline-block class=i1 onclick=p10setIcon(1) onkeypress=\"if (event.key=='Enter') p10setIcon(1)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i2 onclick=p10setIcon(2) onkeypress=\"if (event.key=='Enter') p10setIcon(2)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i3 onclick=p10setIcon(3) onkeypress=\"if (event.key=='Enter') p10setIcon(3)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i4 onclick=p10setIcon(4) onkeypress=\"if (event.key=='Enter') p10setIcon(4)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i5 onclick=p10setIcon(5) onkeypress=\"if (event.key=='Enter') p10setIcon(5)\"></div>";c+="<div tabindex=0 style=display:inline-block class=i6 onclick=p10setIcon(6) onkeypress=\"if (event.key=='Enter') p10setIcon(6)\"></div><br><br>";setDialogMode(2,"Icon Selection",0,null,c);QV("id_dialogclose",true)}function p10setIcon(a){setDialogMode(0);meshserver.send({action:"changedevice",nodeid:currentNode._id,icon:a})}var showEditNodeValueDialog_modes=["Device Name","Hostname","Description","Tags"];var showEditNodeValueDialog_modes2=["name","host","desc","tags"];var showEditNodeValueDialog_modes3=["","","","Tag1, Tag2, Tag3"];function showEditNodeValueDialog(a){if(xxdialogMode){return}var c=addHtmlValue(showEditNodeValueDialog_modes[a],'<input id=dp10devicevalue maxlength=64 placeholder="'+showEditNodeValueDialog_modes3[a]+'" onchange=p10editdevicevalueValidate('+a+",event) onkeyup=p10editdevicevalueValidate("+a+",event) />");setDialogMode(2,"Edit Device",3,showEditNodeValueDialogEx,c,a);var b=currentNode[showEditNodeValueDialog_modes2[a]];if(b==null){b=""}if(Array.isArray(b)){b=b.join(", ")}Q("dp10devicevalue").value=b;p10editdevicevalueValidate();Q("dp10devicevalue").focus()}function showEditNodeValueDialogEx(a,b){var c={action:"changedevice",nodeid:currentNode._id};c[showEditNodeValueDialog_modes2[b]]=Q("dp10devicevalue").value;meshserver.send(c)}function p10editdevicevalueValidate(b,a){var c=((b>1)||(Q("dp10devicevalue").value.length>0));QE("idx_dlgOkButton",c);if((a!=null)&&(c==true)&&(a.keyCode==13)){dialogclose(1)}}var desktopNode;function setupDesktop(){if((desktopNode!=currentNode)&&(desktop!=null)){desktop.Stop();desktopNode=null;desktop=null}if((desktopNode!=currentNode)||(desktop==null)){var b=multiDesktop[currentNode._id];if(b!=null){QH("DeskParent","");var a=b.m.CanvasId;a.setAttribute("id","Desk");a.setAttribute("onmousedown","dmousedown(event)");a.setAttribute("onmouseup","dmouseup(event)");a.setAttribute("onmousemove","dmousemove(event)");a.removeAttribute("onclick");Q("DeskParent").appendChild(a);desktop=b;if(desktop.m.SendCompressionLevel){desktop.m.SendCompressionLevel(1,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate)}desktop.onStateChanged=onDesktopStateChange;desktopNode=currentNode;onDesktopStateChange(desktop,desktop.State);delete multiDesktop[currentNode._id]}else{QH("DeskParent",'<canvas id=Desk oncontextmenu="return false" onmousedown=dmousedown(event) onmouseup=dmouseup(event) onmousemove=dmousemove(event)></canvas>');desktopNode=currentNode}Q("Desk").addEventListener("DOMMouseScroll",function(c){return dmousewheel(c)});Q("Desk").addEventListener("mousewheel",function(c){return dmousewheel(c)})}desktopNode=currentNode;updateDesktopButtons();deskAdjust();if(!Q("Desk")["toBlob"]){QV("deskSaveBtn",false)}}function updateDesktopButtons(){var d=meshes[currentNode.meshid];var a=0;if(desktop!=null){a=desktop.State}var e=d.links[userinfo._id].rights;QV("disconnectbutton1span",(a!=0));QV("connectbutton1span",(a==0)&&((e&8)||(e&256))&&(d.mtype==2)&&(currentNode.agent.caps&1));QV("connectbutton1hspan",(a==0)&&(e&8)&&((currentNode.intelamt!=null)&&(d.mtype==1||currentNode.intelamt.state==2)&&((currentNode.intelamt.ver!=null)||(d.mtype==1))));QV("d7amtkvm",(currentNode.intelamt!=null&&((currentNode.intelamt.ver!=null)||(d.mtype==1)))&&((a==0)||(desktop.contype==2)));QV("d7meshkvm",(webRtcDesktop)||((d.mtype==2)&&(currentNode.agent.caps&1)&&((a==false)||(desktop.contype==1))));var c=(e==4294967295)||(((e&8)!=0)&&((e&256)==0)&&((e&4096)==0));var g=((currentNode.conn&1)!=0);QE("connectbutton1",g);var b=((currentNode.conn&6)!=0);QE("connectbutton1h",b);QE("deskSaveBtn",a==3);QV("deskFocusBtn",(desktop!=null)&&(desktop.contype==2)&&(a!=0)&&(desktopsettings.showfocus));QV("DeskClip",(currentNode.agent)&&(currentNode.agent.id!=11)&&(currentNode.agent.id!=16)&&((desktop==null)||(desktop.contype!=2)));QE("DeskClip",a==3);QE("DeskType",a==3);QV("DeskWD",(currentNode.agent)&&(currentNode.agent.id<5)&&c);QE("DeskWD",a==3);QV("deskkeys",(currentNode.agent)&&(currentNode.agent.id<5)&&c);QE("deskkeys",a==3);QV("DeskToolsButton",(c)&&(d.mtype==2)&&g);QV("DeskChatButton",(browserfullscreen==false)&&(c)&&(d.mtype==2)&&g);QV("DeskNotifyButton",(browserfullscreen==false)&&(currentNode.agent)&&(currentNode.agent.id<5)&&(c)&&(d.mtype==2)&&g);QV("DeskOpenWebButton",(browserfullscreen==false)&&(c)&&(d.mtype==2)&&g);QV("DeskControlSpan",c);QV("deskActionsBtn",(browserfullscreen==false));QV("deskActionsSettings",(browserfullscreen==false));if(e&8){Q("DeskControl").checked=(getstore("DeskControl",1)==1)}else{Q("DeskControl").checked=false}if(g==false){QV("DeskTools",false)}}var autoConnectDesktopTimer=null;function autoConnectDesktop(a){if(autoConnectDesktopTimer==null){autoConnectDesktopTimer=setInterval(connectDesktop,100)}else{clearInterval(autoConnectDesktopTimer);autoConnectDesktopTimer=null}}function connectDesktop(b,a){p11clearConsoleMsg();if(desktop==null){desktopNode=currentNode;if(a==2){if((desktopNode.intelamt.user==null)||(desktopNode.intelamt.user=="")){editDeviceAmtSettings(desktopNode._id,connectDesktop,2);return}desktop=CreateAmtRedirect(CreateAmtRemoteDesktop("Desk"),authCookie);desktop.debugmode=debugmode;desktop.onStateChanged=onDesktopStateChange;desktop.m.bpp=(desktopsettings.encoding==1||desktopsettings.encoding==3)?1:2;desktop.m.useZRLE=(desktopsettings.encoding<3);desktop.m.localKeyMap=desktopsettings.localkeymap;desktop.m.showmouse=desktopsettings.showmouse;desktop.m.onScreenSizeChange=deskAdjust;desktop.m.onKvmData=function(h){if(h.length==0){if(!desktop.m._sentPresence){desktop.m._sentPresence=true;desktop.m.sendKvmData(JSON.stringify({action:"present",ver:1}))}return}var d=null;try{d=JSON.parse(h)}catch(g){}if((d!=null)&&(d.action!=null)){if(d.action=="restart"){webRtcDesktopReset();desktop.m.sendKvmData(JSON.stringify({action:"present",ver:1}))}else{if((d.action=="present")&&(webRtcDesktop==null)){webRtcDesktop={platform:d.platform};var c=null;if(typeof RTCPeerConnection!=="undefined"){webRtcDesktop.webrtc=new RTCPeerConnection(c)}else{if(typeof webkitRTCPeerConnection!=="undefined"){webRtcDesktop.webrtc=new webkitRTCPeerConnection(c)}}webRtcDesktop.webchannel=webRtcDesktop.webrtc.createDataChannel("DataChannel",{});webRtcDesktop.webchannel.onopen=function(){console.log("WebRTC Data Channel Open");Q("deskstatus").textContent=StatusStrs[desktop.State]+", Soft-KVM";desktop.m.hold(true);webRtcDesktop.webRtcActive=true;webRtcDesktop.softdesktop=CreateKvmDataChannel(webRtcDesktop.webchannel,CreateAgentRemoteDesktop("Desk",Q("id_mainarea")),desktop.m);webRtcDesktop.softdesktop.m.setRotation(desktop.m.rotation);webRtcDesktop.softdesktop.m.onScreenSizeChange=deskAdjust;if(desktopsettings.quality){webRtcDesktop.softdesktop.m.CompressionLevel=desktopsettings.quality}if(desktopsettings.scaling){webRtcDesktop.softdesktop.m.ScalingLevel=desktopsettings.scaling}webRtcDesktop.softdesktop.Start()};webRtcDesktop.webchannel.onclose=function(e){console.log("WebRTC Data Channel Closed");webRtcDesktopReset()};webRtcDesktop.webrtc.onicecandidate=function(j){if(j.candidate==null){desktop.m.sendKvmData(JSON.stringify({action:"offer",ver:1,sdp:webRtcDesktop.webrtcoffer.sdp}))}else{webRtcDesktop.webrtcoffer.sdp+=("a="+j.candidate.candidate+"\r\n")}};webRtcDesktop.webrtc.oniceconnectionstatechange=function(){if((webRtcDesktop!=null)&&(webRtcDesktop.webrtc!=null)&&((webRtcDesktop.webrtc.iceConnectionState=="disconnected")||(webRtcDesktop.webrtc.iceConnectionState=="failed"))){webRtcDesktopReset()}};webRtcDesktop.webrtc.createOffer(function(e){webRtcDesktop.webrtcoffer=e;webRtcDesktop.webrtc.setLocalDescription(e,function(){},webRtcDesktopReset)},webRtcDesktopReset,{mandatory:{OfferToReceiveAudio:false,OfferToReceiveVideo:false}})}else{if((d.action=="answer")&&(webRtcDesktop!=null)){webRtcDesktop.webrtc.setRemoteDescription(new RTCSessionDescription({type:"answer",sdp:d.sdp}),function(){},webRtcDesktopReset)}}}}};desktop.Start(desktopNode._id,16994,"*","*",0);desktop.contype=2}else{desktop=CreateAgentRedirect(meshserver,CreateAgentRemoteDesktop("Desk"),serverPublicNamePort,authCookie,domainUrl);desktop.debugmode=debugmode;desktop.m.debugmode=debugmode;desktop.attemptWebRTC=attemptWebRTC;desktop.onStateChanged=onDesktopStateChange;desktop.onConsoleMessageChange=function(){p11clearConsoleMsg();if(desktop.consoleMessage){QH("p11DeskConsoleMsg",EscapeHtml(desktop.consoleMessage).split("\n").join("<br />"));QV("p11DeskConsoleMsg",true);p11DeskConsoleMsgTimer=setTimeout(p11clearConsoleMsg,8000)}};desktop.m.CompressionLevel=desktopsettings.quality;desktop.m.ScalingLevel=desktopsettings.scaling;desktop.m.FrameRateTimer=desktopsettings.framerate;desktop.m.onDisplayinfo=deskDisplayInfo;desktop.m.onScreenSizeChange=deskAdjust;desktop.Start(desktopNode._id);desktop.contype=1}}else{desktop.Stop();webRtcDesktopReset();desktopNode=desktop=null}}function p11clearConsoleMsg(){QV("p11DeskConsoleMsg",false);if(p11DeskConsoleMsgTimer){clearTimeout(p11DeskConsoleMsgTimer);p11DeskConsoleMsgTimer=null}}function p12clearConsoleMsg(){QV("p12TermConsoleMsg",false);if(p12TermConsoleMsgTimer){clearTimeout(p12TermConsoleMsgTimer);p12TermConsoleMsgTimer=null}}function p13clearConsoleMsg(){QV("p13FilesConsoleMsg",false);if(p13FilesConsoleMsgTimer){clearTimeout(p13FilesConsoleMsgTimer);p13FilesConsoleMsgTimer=null}}var webRtcDesktop=null;function webRtcDesktopReset(){if(webRtcDesktop==null){return}if(webRtcDesktop.softdesktop!=null){webRtcDesktop.softdesktop.Stop();webRtcDesktop.softdesktop=null}if(webRtcDesktop.webchannel!=null){try{webRtcDesktop.webchannel.close()}catch(a){}webRtcDesktop.webchannel=null}if(webRtcDesktop.webrtc!=null){try{webRtcDesktop.webrtc.close()}catch(a){}webRtcDesktop.webrtc=null}webRtcDesktop=null;if(desktop&&desktop.m){desktop.m.hold(false);Q("deskstatus").textContent=StatusStrs[desktop.State]}}function onDesktopStateChange(c,a){var d=a;if((d==3)&&(c.contype==2)){d++}var b=StatusStrs[d];if((desktop!=null)&&(desktop.webRtcActive==true)){b+=", WebRTC"}QH("deskstatus",b);switch(a){case 0:desktop.Stop();desktopNode=desktop=null;QV("DeskFocus",false);QV("termdisplays",false);QV("deskRecordIcon",false);deskFocusBtn.value="All Focus";if(fullscreen==true){deskToggleFull()}webRtcDesktopReset();deskPreferedStickyDisplay=0;break;case 2:break;case 3:if(desktop&&(desktop.serverIsRecording==true)){QV("deskRecordIcon",true)}desktop.startTime=new Date();if(updateSessionTimer==null){updateSessionTimer=setInterval(updateSessionTime,1000)}break;default:break}updateDesktopButtons();deskAdjust();setTimeout(deskAdjust,50)}function updateSessionTime(){var a=0;if(desktop&&desktop.startTime){a=Math.floor((new Date()-desktop.startTime)/1000);QH("DeskTimer",zeroPad(Math.floor(a/3600),2)+":"+zeroPad((Math.floor(a/60)%60),2)+":"+zeroPad((a%60),2))}else{QH("DeskTimer","")}a=0;if(terminal&&terminal.startTime){a=Math.floor((new Date()-terminal.startTime)/1000);QH("TermTimer",zeroPad(Math.floor(a/3600),2)+":"+zeroPad((Math.floor(a/60)%60),2)+":"+zeroPad((a%60),2))}else{QH("TermTimer","")}if((desktop==null)&&(terminal==null)){clearInterval(updateSessionTimer);updateSessionTimer=null}}function showDesktopSettings(){if(xxdialogMode){return}applyDesktopSettings();updateDesktopButtons();setDialogMode(7,"Remote Desktop Settings",3,showDesktopSettingsChanged)}function showDesktopSettingsChanged(){desktopsettings.encoding=d7desktopmode.value;desktopsettings.showfocus=d7showfocus.checked;desktopsettings.showmouse=d7showcursor.checked;desktopsettings.quality=d7bitmapquality.value;desktopsettings.scaling=d7bitmapscaling.value;desktopsettings.framerate=d7framelimiter.value;desktopsettings.localkeymap=d7localKeyMap.checked;localStorage.setItem("desktopsettings",JSON.stringify(desktopsettings));applyDesktopSettings();if(desktop){if(desktop.contype==1){if(desktop.State!=0){desktop.m.SendCompressionLevel(1,desktopsettings.quality,desktopsettings.scaling,desktopsettings.framerate)}}if(desktop.contype==2){if(desktopsettings.showfocus==false){desktop.m.focusmode=0;deskFocusBtn.value="All Focus"}if(desktop.State!=0){desktop.Stop();setTimeout(function(){connectDesktop(null,2)},50)}}}}function applyDesktopSettings(){var c="",b=(features&512)?[90,80,70,60,50,40,30,20,10,5,1]:[60,50,40,30,20,10,5,1];for(var a in b){c+="<option value="+b[a]+">"+b[a]+"%</option>"}QH("d7bitmapquality",c);d7desktopmode.value=desktopsettings.encoding;d7showfocus.checked=desktopsettings.showfocus;d7showcursor.checked=desktopsettings.showmouse;d7bitmapquality.value=40;if(b.indexOf(parseInt(desktopsettings.quality))>=0){d7bitmapquality.value=desktopsettings.quality}d7bitmapscaling.value=desktopsettings.scaling;if(desktopsettings.framerate){d7framelimiter.value=desktopsettings.framerate}if(desktopsettings.localkeymap){d7localKeyMap.checked=desktopsettings.localkeymap}QV("deskFocusBtn",(desktop!=null)&&(desktop.contype==2)&&(desktop.state!=0)&&(desktopsettings.showfocus))}function enterBrowserFullscreen(a){if(a.requestFullscreen){a.requestFullscreen()}else{if(a.msRequestFullscreen){a.msRequestFullscreen()}else{if(a.mozRequestFullScreen){a.mozRequestFullScreen()}else{if(a.webkitRequestFullscreen){a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}}}}}function exitBrowserFullscreen(){if(document.exitFullscreen){document.exitFullscreen()}else{if(document.msExitFullscreen){document.msExitFullscreen()}else{if(document.mozCancelFullScreen){document.mozCancelFullScreen()}else{if(document.webkitExitFullscreen){document.webkitExitFullscreen()}}}}}function isBrowserFullscreen(){if(!document.fullscreenElement&&!document.mozFullScreenElement&&!document.webkitFullscreenElement&&!document.msFullscreenElement){return false}else{return true}}var fullscreen=false;var browserfullscreen=false;function deskToggleFull(a){fullscreen=!fullscreen;if(fullscreen){QC("body").add("fulldesk");if(a.shiftKey==true){enterBrowserFullscreen(Q("deskarea0"));browserfullscreen=true}}else{QC("body").remove("fulldesk");if(browserfullscreen==true){exitBrowserFullscreen();browserfullscreen=false;toggleFullScreen()}}deskAdjust();updateDesktopButtons()}function deskToggleFocus(){desktop.m.focusmode=(desktop.m.focusmode+64)%192;Q("deskFocusBtn").value=["All Focus","Small Focus","Large Focus"][desktop.m.focusmode/64]}function deskAdjust(){var d=Q("DeskParent").clientHeight,e=Q("DeskParent").clientWidth;var a=Q("Desk").height,b=Q("Desk").width;if(deskAspectRatio==2){QS("Desk")["margin-top"]=null;QS("Desk").height="100%";QS("Desk").width="100%";QS("DeskParent").overflow="hidden"}else{if(deskAspectRatio==1){QS("Desk")["margin-top"]="0px";QS("Desk").height=a+"px";QS("Desk").width=b+"px";QS("DeskParent").overflow="scroll"}else{if((d/e)>(a/b)){var c=((a*e)/b)+"px";QS("Desk").height=c;QS("Desk").width="100%"}else{var g=((b*d)/a)+"px";if(webPageFullScreen||fullscreen){QS("Desk").height=null}else{QS("Desk").height="100%"}QS("Desk").width=g}QS("Desk")["margin-top"]=null;QS("DeskParent").overflow="hidden"}}}function mdeskAdjust(c,h,g,a){if(!c||!h||!g||!a){return}if(a.id=="Desk"){deskAdjust();return}var k=[{x:180,y:101},{x:302,y:169},{x:454,y:255}][Q("sizeselect").selectedIndex];var e=k.x+2,j=Q("xdevices").clientWidth-30,l=Math.floor(j/e);l=e+Math.floor((j-(l*e))/l);k.y=k.y*(l/k.x);k.x=l;var b=k.y,d=k.x;if(c.State!=0){b=k.y;d=(h/g)*k.y}QS(a.id)["max-height"]=b+"px";QS(a.id)["max-width"]=d+"px";QS(a.id)["margin-top"]="0";QS(a.id)["margin-bottom"]="0"}function deskSendKeys(){if(xxdialogMode||desktop==null||desktop.State!=3){return}var a=Q("deskkeys").value;if(a==0){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65364,1],[65364,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,40],[desktop.m.KeyAction.UP,40],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==1){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65362,1],[65362,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,38],[desktop.m.KeyAction.UP,38],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==2){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[108,1],[108,0],[65511,0]])}else{desktop.sendCtrlMsg('{"action":"lock"}')}}else{if(a==3){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[109,1],[109,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==4){if(desktop.contype==2){desktop.m.sendkey([[65505,1],[65511,1],[109,1],[109,0],[65511,0],[65505,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.DOWN,16],[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,77],[desktop.m.KeyAction.UP,77],[desktop.m.KeyAction.EXUP,91],[desktop.m.KeyAction.UP,16]])}}else{if(a==5){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==6){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[114,1],[114,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,82],[desktop.m.KeyAction.UP,82],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==7){if(desktop.contype==2){desktop.m.sendkey([[65513,1],[65473,1],[65473,0],[65513,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,18],[desktop.m.KeyAction.DOWN,115],[desktop.m.KeyAction.UP,115],[desktop.m.KeyAction.EXUP,18]])}}else{if(a==8){if(desktop.contype==2){desktop.m.sendkey([[65507,1],[119,1],[119,0],[65507,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,17],[desktop.m.KeyAction.DOWN,87],[desktop.m.KeyAction.UP,87],[desktop.m.KeyAction.EXUP,17]])}}else{if(a==9){if(desktop.contype==2){desktop.m.sendkey([[65513,1],[65289,1],[65289,0],[65513,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,18],[desktop.m.KeyAction.DOWN,9],[desktop.m.KeyAction.UP,9],[desktop.m.KeyAction.EXUP,18]])}}else{if(a==10){desktop.m.sendcad()}else{if(a==11){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65361,1],[65361,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,37],[desktop.m.KeyAction.UP,37],[desktop.m.KeyAction.EXUP,91]])}}else{if(a==12){if(desktop.contype==2){desktop.m.sendkey([[65511,1],[65363,1],[65363,0],[65511,0]])}else{desktop.m.SendKeyMsgKC([[desktop.m.KeyAction.EXDOWN,91],[desktop.m.KeyAction.DOWN,39],[desktop.m.KeyAction.UP,39],[desktop.m.KeyAction.EXUP,91]])}}}}}}}}}}}}}}}function showDeskType(){if(xxdialogMode||desktop==null||desktop.State!=3){return}Q("DeskType").blur();var a="<div>Enter text and click OK to remotely type it using a US english keyboard. Make sure to place the remote cursor at the correct position before proceeding.<div>";a+='<textarea id=d2typeText style="margin-top:5px;width:100%;height:184px;resize:none" maxlength=2000></textarea>';setDialogMode(2,"Remote Keyboard Entry",3,showDeskTypeEx,a);Q("d2typeText").focus()}var AmtDeskTypeTimer=null;var AmtDeskTypeContent=null;var DeskTypeTranslate={39:222,42:106,43:107,44:188,45:189,46:190,47:191,59:186,61:187,91:219,92:220,93:221,96:192,191:111};var DeskTypeShiftTranslate={33:49,34:222,35:51,36:52,37:53,38:55,40:57,41:48,58:186,60:188,62:190,63:191,64:50,94:54,95:189,106:56,107:187,123:219,124:220,125:221,126:192};function showDeskTypeEx(){var j=Q("d2typeText").value,g=Q("d2typeText").value.toUpperCase(),k=[],h=false;if(desktop.contype==2){for(var e in j){var c=j.charCodeAt(e);k.push([c,1],[c,0])}AmtDeskTypeContent=k;AmtDeskTypeTimer=setInterval(function(){var a=AmtDeskTypeContent.shift();if(desktop){desktop.m.sendkey(a[0],a[1])}if((desktop==null)||(AmtDeskTypeContent.length==0)){clearInterval(AmtDeskTypeTimer);AmtDeskTypeContent=null}},10)}else{for(var e in j){var c=j.charCodeAt(e),d=g.charCodeAt(e);if(((c>=65)&&(c<=90))||((c>=97)&&(c<=122))){if((c==d)&&(h==false)){k.push([desktop.m.KeyAction.DOWN,16]);h=true}if((c!=d)&&(h==true)){k.push([desktop.m.KeyAction.UP,16]);h=false}}else{if((c>=48)&&(c<=57)){if(h==true){k.push([desktop.m.KeyAction.UP,16]);h=false}}else{if(DeskTypeTranslate[c]){if(h==true){k.push([desktop.m.KeyAction.UP,16]);h=false}d=DeskTypeTranslate[c]}else{if(DeskTypeShiftTranslate[c]){if(h==false){k.push([desktop.m.KeyAction.DOWN,16]);h=true}d=DeskTypeShiftTranslate[c]}}}}k.push([desktop.m.KeyAction.DOWN,d],[desktop.m.KeyAction.UP,d])}if(h==true){k.push([desktop.m.KeyAction.UP,16]);h=false}desktop.m.SendKeyMsgKC(k)}}function showDeskClip(){if(xxdialogMode||desktop==null||desktop.State!=3){return}Q("DeskClip").blur();var a="";a+='<input id=dlgClipGet type=button value="Get Clipboard" style=width:120px onclick=showDeskClipGet()>';a+='<input id=dlgClipSet type=button value="Set Clipboard" style=width:120px onclick=showDeskClipSet()>';a+='<div id=dlgClipStatus style="display:inline-block;margin-left:8px" ></div>';a+='<textarea id=d2clipText style="width:100%;height:184px;resize:none" maxlength=65535></textarea>';a+='<input type=button value="Close" style=width:80px;float:right onclick=dialogclose(0)><div style=height:26px;margin-top:3px><span id=linuxClipWarn style=display:none>Remote clipboard is valid for 60 seconds.</span> </div><div></div>';setDialogMode(2,"Remote Clipboard",8,null,a,"clipboard");Q("d2clipText").focus()}function showDeskClipGet(){if(desktop==null||desktop.State!=3){return}meshserver.send({action:"msg",type:"getclip",nodeid:currentNode._id})}function showDeskClipSet(){if(desktop==null||desktop.State!=3){return}meshserver.send({action:"msg",type:"setclip",nodeid:currentNode._id,data:Q("d2clipText").value});QV("linuxClipWarn",currentNode&¤tNode.agent&&(currentNode.agent.id>4)&&(currentNode.agent.id!=21)&&(currentNode.agent.id!=22))}function sendCAD(){if(xxdialogMode||desktop==null||desktop.State!=3){return}desktop.m.sendcad()}function toggleDeskTools(){if(xxdialogMode){return}if(QS("DeskTools").display=="none"){QV("DeskTools",true);Q("DeskTools").nodeid=currentNode._id;QH("DeskToolsProcesses","");QH("DeskToolsServices","");QV("deskToolsTopTabService",false);changeDeskToolTab(0);refreshDeskTools(0);refreshDeskTools(1)}else{QV("DeskTools",false)}}var deskToolTabSelection=0;function changeDeskToolTab(a){deskToolTabSelection=a;QV("DeskToolsProcessTab",a==0);QV("DeskToolsServiceTab",a==1);QS("deskToolsTopTabProcess")["bottom"]=(a==0)?"0px":"3px";QS("deskToolsTopTabService")["bottom"]=(a==1)?"0px":"3px";QS("deskToolsTopTabProcess")["color"]=(a==0)?"black":"gray";QS("deskToolsTopTabService")["color"]=(a==1)?"black":"gray"}function refreshDeskTools(b){var a=(b==null)?deskToolTabSelection:b;QV("DeskToolsRefreshButton",false);setTimeout(refreshDeskToolsEx,500);if(a==0){meshserver.send({action:"msg",type:"ps",nodeid:currentNode._id})}if(a==1){meshserver.send({action:"msg",type:"services",nodeid:currentNode._id})}}function refreshDeskToolsEx(){QV("DeskToolsRefreshButton",true)}var deskTools={sort:1,ssort:1,msg:null,smsg:null};function sortProcess(a){deskTools.sort=a;showDeskToolsProcesses(deskTools.msg)}function sortService(a){deskTools.ssort=a;showDeskToolsServices(deskTools.smsg)}function sortProcessPid(c,d){if(c.p>d.p){return 1}if(c.p<d.p){return(-1)}return sortProcessName(c,d)}function sortProcessName(c,d){if(c.d>d.d){return 1}if(c.d<d.d){return(-1)}return 0}function showDeskToolsProcesses(g){deskTools.msg=g;if(g==null){QH("DeskToolsProcesses","");return}if(Q("DeskTools").nodeid!=g.nodeid){return}var h=[],k=null;try{k=JSON.parse(g.value)}catch(b){}if(k!=null){for(var j in k){h.push({p:parseInt(j),c:k[j].cmd,d:k[j].cmd.toLowerCase(),u:k[j].user})}if(deskTools.sort==0){h.sort(sortProcessPid)}else{if(deskTools.sort==1){h.sort(sortProcessName)}}var l="";for(var d in h){if(h[d].p!=0){var a=h[d].c;if(a.length>30){a='<span title="'+a+'">'+a.substring(0,30)+"...</span>"}l+="<div class=deskToolsBar><div style=width:50px;float:left;text-align:right;padding-right:5px>"+h[d].p+'</div><a href=# style=float:right;padding-right:5px;cursor:pointer title="Stop process" onclick=\'return stopProcess('+h[d].p+',"'+h[d].c+'")\'><img width=10 height=10 src="images/trash.png"></a><div style=float:right;padding-right:5px>'+(h[d].u?h[d].u:"")+"</div><div>"+a+"</div></div>"}}QH("DeskToolsProcesses",l)}}function showDeskToolsServices(g){deskTools.smsg=g;if(g==null){QH("DeskToolsProcesses","");return}if(Q("DeskTools").nodeid!=g.nodeid){return}QV("deskToolsTopTabService",true);var h=[],j=null;try{j=JSON.parse(g.value)}catch(b){}deskTools.services=j;if(j!=null){for(var d in j){if(j[d].status){h.push({p:capitalizeFirstLetter(j[d].status.state.toLowerCase()),d:j[d].displayName,i:d})}}if(deskTools.ssort==0){h.sort(sortProcessPid)}else{if(deskTools.ssort==1){h.sort(sortProcessName)}}var k="";for(var d in h){if(h[d].p!=0){var a=h[d].d;if(a.length>30){a='<span title="'+a+'">'+a.substring(0,30)+"...</span>"}k+="<div onclick=showServiceDetailsDialog("+h[d].i+") class=deskToolsBar><div style=width:70px;float:left;padding-right:5px>"+h[d].p+"</div><div>"+a+"</div></div>"}}QH("DeskToolsServices",k)}}function showServiceDetailsDialog(a){if(xxdialogMode){return}var b=deskTools.services[a];if(b!=null){var d="";if(b.name){d+=addHtmlValue("Name",b.name)}if(b.displayName){d+=addHtmlValue("Display name",b.displayName)}if(b.status){if(b.status.state){d+=addHtmlValue("State",capitalizeFirstLetter(b.status.state.toLowerCase()))}if(b.status.pid){d+=addHtmlValue("PID",b.status.pid)}var c=[];if(b.status.isFileSystemDriver===true){c.push("FileSystemDriver")}if(b.status.isInteractive===true){c.push("Interactive")}if(b.status.isKernelDriver===true){c.push("KernelDriver")}if(b.status.isOwnProcess===true){c.push("OwnProcess")}if(b.status.isSharedProcess===true){c.push("SharedProcess")}if(c.length>0){d+=addHtmlValue("Type",c.join(", "))}}d+='<br/><div style=float:right;margin-bottom:12px><input type=button value="Close" onclick=showServiceDetailsDialogEx(0,'+a+')></div><div style=margin-bottom:12px><input type=button value="Start" onclick=showServiceDetailsDialogEx(1,'+a+')><input type=button value="Stop" onclick=showServiceDetailsDialogEx(2,'+a+')><input type=button value="Restart" onclick=showServiceDetailsDialogEx(3,'+a+")></div>";setDialogMode(2,"Service Details",8,null,d,name)}}function showServiceDetailsDialogEx(a,b){setDialogMode(0);if(a==0){return}var c=deskTools.services[b];if(c!=null){if(a==1){meshserver.send({action:"msg",type:"serviceStart",nodeid:currentNode._id,serviceName:c.name})}if(a==2){meshserver.send({action:"msg",type:"serviceStop",nodeid:currentNode._id,serviceName:c.name})}if(a==3){meshserver.send({action:"msg",type:"serviceRestart",nodeid:currentNode._id,serviceName:c.name})}setTimeout(function(){refreshDeskTools(1)},1000)}}function toggleKvmControl(){putstore("DeskControl",(Q("DeskControl").checked?1:0))}function deskSaveImage(){if(xxdialogMode||desktop==null||desktop.State!=3){return}var a=new Date(),b="Desktop-"+currentNode.name+"-"+a.getFullYear()+"-"+("0"+(a.getMonth()+1)).slice(-2)+"-"+("0"+a.getDate()).slice(-2)+"-"+("0"+a.getHours()).slice(-2)+"-"+("0"+a.getMinutes()).slice(-2);Q("Desk")["toBlob"](function(c){saveAs(c,b+".jpg")})}function deskDisplayInfo(g,b,e){var a=0,c="";for(var d in b){a++;c+="<option"+((e==d)?" selected":"")+" value="+d+">"+b[d]+"</option>";if((deskPreferedStickyDisplay==d)&&(e!=deskPreferedStickyDisplay)){desktop.m.SetDisplay(d)}}QH("termdisplays",c);QV("termdisplays",a>1)}function deskGetDisplayNumbers(a){desktop.m.GetDisplayNumbers()}var deskPreferedStickyDisplay=0;function deskSetDisplay(a){desktop.m.SetDisplay(deskPreferedStickyDisplay=parseInt(Q("termdisplays").value));Q("termdisplays").blur()}var dblClickDetectArgs={t:0,x:0,y:0};function dblClickDetect(a){if(a.buttons!=1){return}var b=Date.now();if(((b-dblClickDetectArgs.t)<250)&&(Math.abs(a.clientX-dblClickDetectArgs.x)<2)&&(Math.abs(a.clientY-dblClickDetectArgs.y)<2)){if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mousedblclick(a);desktop.m.sendKeepAlive()}else{desktop.m.mousedblclick(a)}}}dblClickDetectArgs.t=b;dblClickDetectArgs.x=a.clientX;dblClickDetectArgs.y=a.clientY}function dmousedown(a){setSessionActivity();a.addx=Q("DeskParent").scrollLeft;a.addy=Q("DeskParent").scrollTop;if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mousedown(a);desktop.m.sendKeepAlive()}else{desktop.m.mousedown(a)}}dblClickDetect(a)}function dmouseup(a){setSessionActivity();a.addx=Q("DeskParent").scrollLeft;a.addy=Q("DeskParent").scrollTop;if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mouseup(a);desktop.m.sendKeepAlive()}else{desktop.m.mouseup(a)}}}function dmousemove(a){setSessionActivity();a.addx=Q("DeskParent").scrollLeft;a.addy=Q("DeskParent").scrollTop;if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mousemove(a);desktop.m.sendKeepAlive()}else{desktop.m.mousemove(a)}}}function dmousewheel(a){setSessionActivity();a.addx=Q("DeskParent").scrollLeft;a.addy=Q("DeskParent").scrollTop;if(!xxdialogMode&&desktop!=null&&Q("DeskControl").checked){if((webRtcDesktop!=null)&&(webRtcDesktop.softdesktop!=null)){webRtcDesktop.softdesktop.m.mousewheel(a);desktop.m.sendKeepAlive()}else{if(desktop.m.mousewheel){desktop.m.mousewheel(a)}}haltEvent(a);return true}return false}function drotate(a){if(!xxdialogMode&&desktop!=null){desktop.m.setRotation(desktop.m.rotation+a);deskAdjust();deskAdjust()}}function stopProcess(a,b){setDialogMode(2,"Process Control",3,stopProcessEx,"Stop process #"+a+' "'+b+'"?',a);return false}function stopProcessEx(a,b){meshserver.send({action:"msg",type:"pskill",nodeid:currentNode._id,value:b});setTimeout(refreshDeskTools,300)}var terminalNode;function setupTerminal(){if((terminalNode!=currentNode)&&(terminal!=null)){terminal.Stop();terminal=null}terminalNode=currentNode;updateTerminalButtons()}function updateTerminalButtons(){var b=meshes[terminalNode.meshid];var d=((terminal!=null)&&(terminal.state!=0));QV("disconnectbutton2span",(d==true));QV("connectbutton2span",(d==false)&&(b.mtype==2)&&(currentNode.agent.caps&2));QV("connectbutton2hspan",(d==false)&&((terminalNode.intelamt!=null)&&(b.mtype==1||terminalNode.intelamt.state==2)&&((terminalNode.intelamt.ver!=null)||(b.mtype==1))));var c=((terminalNode.conn&1)!=0);QE("connectbutton2",c);var a=((terminalNode.conn&6)!=0);QE("connectbutton2h",a);QE("ctrlcbutton",d);QE("ctrlxbutton",d);QE("escbutton",d);QE("bsbutton",d);QE("pastebutton",d);QE("specialkeylist",d);QE("specialkeylistinput",d);QV("terminalSettingsButtons",(terminal)&&(terminal.contype==2));if(terminal){Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation];Q("id_tfxkeysbutton").value=fxEmulations[terminal.m.fxEmulation];Q("id_tcrbutton").value=(terminal.m.lineFeed=="\r\n")?"CR+LF":"LF"}}function onTerminalStateChange(d,a){var c=a;if((c==3)&&(d.contype==2)){c++}var b=StatusStrs[c];if(terminal.webRtcActive==true){b+=", WebRTC"}QH("termstatus",b);switch(a){case 0:QE("termSizeList",true);QH("termtitle","");QV("termRecordIcon",false);d.m.TermResetScreen();d.m.TermDraw();if(terminal!=null){terminal.Stop();terminal=null}break;case 3:QE("termSizeList",false);if(d&&(d.serverIsRecording==true)){QV("termRecordIcon",true)}terminal.startTime=new Date();if(updateSessionTimer==null){updateSessionTimer=setInterval(updateSessionTime,1000)}break;default:QE("termSizeList",false);break}updateTerminalButtons()}var autoConnectTerminalTimer=null;function autoConnectTerminal(a){if(autoConnectTerminalTimer==null){autoConnectTerminalTimer=setInterval(connectTerminal,100)}else{clearInterval(autoConnectTerminalTimer);autoConnectTerminalTimer=null}}function connectTerminal(b,a,c){p12clearConsoleMsg();if(!terminal){if(a==2){if((terminalNode.intelamt.user==null)||(terminalNode.intelamt.user=="")){editDeviceAmtSettings(terminalNode._id,connectTerminal,2);return}var d={};if(Q("termSizeList").value==2){d.width=100;d.height=30}terminal=CreateAmtRedirect(CreateAmtRemoteTerminal("Term",d),authCookie);terminal.debugmode=debugmode;terminal.m.debugmode=debugmode;terminal.m.onTitleChange=function(e,g){QH("termtitle"," - "+EscapeHtml(g))};terminal.onStateChanged=onTerminalStateChange;terminal.Start(terminalNode._id,16994,"*","*",0);terminal.contype=2;Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation]}else{var d={};if([1,2,3,4,21,22].indexOf(currentNode.agent.id)==-1){if(Q("termSizeList").value==2){d.width=100;d.height=30;d.xterm=true}if(Q("termSizeList").value==3){d.width=Math.floor((Q("column_l").clientWidth-60)/10);d.height=Math.floor((Q("column_l").clientHeight-120)/20);d.xterm=true}}if((b&&(b.shiftKey==true))||(c&&(c.powershell))){d.protocol=6}terminal=CreateAgentRedirect(meshserver,CreateAmtRemoteTerminal("Term",d),serverPublicNamePort,authCookie,domainUrl);terminal.debugmode=debugmode;terminal.m.debugmode=debugmode;terminal.m.onTitleChange=function(e,g){QH("termtitle"," - "+EscapeHtml(g))};terminal.m.lineFeed=([1,2,3,4,21,22].indexOf(currentNode.agent.id)>=0)?"\r\n":"\r";terminal.attemptWebRTC=attemptWebRTC;terminal.onStateChanged=onTerminalStateChange;terminal.onConsoleMessageChange=function(){p12clearConsoleMsg();if(terminal.consoleMessage){QH("p12TermConsoleMsg",EscapeHtml(terminal.consoleMessage).split("\n").join("<br />"));QV("p12TermConsoleMsg",true);p12TermConsoleMsgTimer=setTimeout(p12clearConsoleMsg,8000)}};terminal.Start(terminalNode._id);terminal.contype=1;terminal.m.terminalEmulation=0;terminal.m.fxEmulation=0;Q("id_ttypebutton").value=terminalEmulations[0]}}else{terminal.Stop();terminal=null}Q("connectbutton2").blur()}var terminalEmulations=["UTF8 Terminal","Extended ASCII","Intel ASCII"];function termToggleType(){if(!terminal||xxdialogMode){return}terminal.m.terminalEmulation=(terminal.m.terminalEmulation+1)%3;Q("id_ttypebutton").value=terminalEmulations[terminal.m.terminalEmulation];Q("id_ttypebutton").blur()}var fxEmulations=["Intel (F10 = ESC+[OM)","Alternate (F10 = ESC+0)","VT100+ (F10 = ESC+[OY)"];function termToggleFx(){if(!terminal||xxdialogMode){return}terminal.m.fxEmulation=(terminal.m.fxEmulation+1)%3;Q("id_tfxkeysbutton").value=fxEmulations[terminal.m.fxEmulation];Q("id_tfxkeysbutton").blur()}function termToggleCr(){if(!terminal||xxdialogMode){return}if(terminal.m.lineFeed=="\n"){terminal.m.lineFeed="\r\n"}else{terminal.m.lineFeed="\n"}Q("id_tcrbutton").value=(terminal.m.lineFeed=="\r\n")?"CR+LF":"LF"}function termSendKey(b,a){if(!terminal||xxdialogMode){return}terminal.m.TermSendKey(b);Q(a).blur()}function showTermPasteDialog(){if(!terminal||xxdialogMode){return}Q("pastebutton").blur();setDialogMode(2,"Paste",3,showTermPasteDialogEx,'<textarea id=d2pasteText style="width:100%;height:184px;resize:none"></textarea>');Q("d2pasteText").focus()}function showTermPasteDialogEx(){if(!terminal){return}terminal.m.TermSendKeys(Q("d2pasteText").value)}function sendSpecialKey(){terminal.m.TermSendKey(Q("specialkeylist").value);Q("specialkeylist").blur();Q("specialkeylistinput").blur()}var filesNode;function setupFiles(){var b=(filesNode==currentNode);filesNode=currentNode;var a=((filesNode.conn&1)!=0)?true:false;QE("p13Connect",a);if(((b==false)||(a==false))&&files){files.Stop();files=null}}function onFilesStateChange(c,a){p13Connect.value=(a==0)?"Connect":"Disconnect";var b=StatusStrs[a];if(files.webRtcActive==true){b+=", WebRTC"}Q("p13Status").textContent=b;switch(a){case 0:QH("p13files","");p13filetree=null;p13filetreelocation=[];QH("p13currentpath","");QE("p13FolderUp",false);QV("filesRecordIcon",false);p13setActions();if(files!=null){files.Stop();files=null}break;case 3:p13targetpath="";if(files){files.sendText({action:"ls",reqid:1,path:""});if(files.serverIsRecording==true){QV("filesRecordIcon",true)}}break;default:break}}function CreateRemoteFiles(b){var a={protocol:5};a.onFileUpdate=b;a.xxStateChange=function(c){};a.ProcessData=function(c){a.onFileUpdate(c)};return a}var autoConnectFilesTimer=null;function autoConnectFiles(a){if(autoConnectFilesTimer==null){autoConnectFilesTimer=setInterval(connectFiles,100)}else{clearInterval(autoConnectFilesTimer);autoConnectFilesTimer=null}}function connectFiles(a){p13clearConsoleMsg();if(!files){files=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotFiles),serverPublicNamePort,authCookie,domainUrl);files.attemptWebRTC=attemptWebRTC;files.onStateChanged=onFilesStateChange;files.onConsoleMessageChange=function(){p13clearConsoleMsg();if(files.consoleMessage){QH("p13FilesConsoleMsg",EscapeHtml(files.consoleMessage).split("\n").join("<br />"));QV("p13FilesConsoleMsg",true);p13FilesConsoleMsgTimer=setTimeout(p13clearConsoleMsg,8000)}};files.Start(filesNode._id)}else{files.Stop();files=null}p13clipboard=p13clipboardFolder=null;p13clipboardCut=0;p13updateClipview()}var p13filetree=null;var p13targetpath=null;var p13filetreelocation=[];function p13gotFiles(b){if((b.length>0)&&(b.charCodeAt(0)!=123)){p13gotDownloadBinaryData(b);return}b=JSON.parse(decode_utf8(b));if(b.action=="download"){p13gotDownloadCommand(b);return}b.path=b.path.replace(/\//g,"\\");if((p13filetree!=null)&&(b.path==p13filetree.path)){var a=p13getCheckedNames();p13filetree=b;p13updateFiles(a)}else{var c=b.path.replace(/\//g,"\\"),d=p13targetpath.replace(/\//g,"\\");while((c.length>0)&&(c[0]=="\\")){c=c.substring(1)}while((d.length>0)&&(d[0]=="\\")){d=d.substring(1)}if((c==d)||((b.path=="\\")&&(p13targetpath==""))){p13filetree=b;p13updateFiles()}}}function p13getCheckedNames(){var b=[],a=document.getElementsByName("fd");for(var c=0;c<a.length;c++){if(a[c].checked){b.push(p13filetree.dir[a[c].value].n)}}return b}function p13updateFiles(b){var n="",o="",c='<a href=# style=cursor:pointer onclick="return p13folderup(0)">Root</a>',l="Root";var w=p13filetree.path.split("\\");p13filetreelocation=[];for(var p in w){if(w[p]!=""){p13filetreelocation.push(w[p])}}for(var p in p13filetreelocation){c+=' / <a href=# style=cursor:pointer onclick="return p13folderup('+(parseInt(p)+1)+')">'+p13filetreelocation[p]+"</a>"}var s=p13filetreelocation.join("/");var j=p13sort_files(p13filetree.dir);for(var p in j){var d=j[p],r=d.n,u;u=r;if(r.length>70){u='<span title="'+EscapeHtml(r)+'">'+EscapeHtml(r.substring(0,70))+"...</span>"}else{u=EscapeHtml(r)}r=EscapeHtml(r);var g="";if(d.d!=null){var e=new Date(d.d),g=printDateTime(e)+" "}var k="";if(d.s!=null){k=getFileSizeStr(d.s)}var m="";if(d.t<3){var t="",v="";m="<div class=filelist file=999><input file=999 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'> <span style=float:right title=\""+v+'">'+t+"</span><span><div class=fileIcon"+d.t+' onclick=p13folderset("'+encodeURIComponent(d.nx)+'")></div><a href=# style=cursor:pointer onclick=\'return p13folderset("'+encodeURIComponent(d.nx)+"\")'>"+u+"</a></span></div>"}else{var q=u;if(d.s>0){q='<a hrf=# rel="noreferrer noopener" target="_blank" style=cursor:pointer onclick="return p13downloadfile(\''+encodeURIComponent(s+"/"+r)+"','"+encodeURIComponent(r)+"',"+d.s+')">'+u+"</a>"}m="<div class=filelist file=3><input file=3 style=float:left name=fd class=fcb type=checkbox onchange=p13setActions() value='"+d.nx+"'> <span class=fsize>"+g+"</span><span style=float:right>"+k+"</span><span><div class=fileIcon"+d.t+"></div>"+q+"</span></div>"}if(d.t<3){n+=m}else{o+=m}}QH("p13files",n+o);QH("p13currentpath",c);QE("p13FolderUp",p13filetreelocation.length!=0);if(b!=null){var a=document.getElementsByName("fd");for(var p=0;p<a.length;p++){if(b.indexOf(p13filetree.dir[a[p].value].n)>=0){a[p].checked=true}}}p13setActions()}function p13folderset(a){p13targetpath=joinPaths(p13filetree.path,p13filetree.dir[a].n).split("\\").join("/");files.sendText({action:"ls",reqid:1,path:p13targetpath})}function p13folderup(a){if(a==null){p13filetreelocation.pop()}else{while(p13filetreelocation.length>a){p13filetreelocation.pop()}}p13targetpath=p13filetreelocation.join("/");files.sendText({action:"ls",reqid:1,path:p13targetpath});return false}var p13sortorder;function p13sort_filename(c,d){if(c.ln>d.ln){return(1*p13sortorder)}if(c.ln<d.ln){return(-1*p13sortorder)}return 0}function p13sort_timestamp(c,d){if(c.d>d.d){return(1*p13sortorder)}if(c.d<d.d){return(-1*p13sortorder)}return 0}function p13sort_bysize(c,d){if(c.s==d.s){return p13sort_filename(c,d)}return(((c.s-d.s))*p13sortorder)}function p13sort_files(a){var c=[],d=Q("p13sortdropdown").value;for(var b in a){a[b].nx=b;if(a[b].s==null){a[b].s=0}if(a[b].n==null){a[b].n=b}a[b].ln=a[b].n.toLowerCase();c.push(a[b])}p13sortorder=1;if(d>3){p13sortorder=-1;d-=3}if(d==1){c.sort(p13sort_filename)}else{if(d==2){c.sort(p13sort_bysize)}else{if(d==3){c.sort(p13sort_timestamp)}}}return c}function p13setActions(){if(p13filetree==null){QE("p13DeleteFileButton",false);QE("p13NewFolderButton",false);QE("p13UploadButton",false);QE("p13RenameFileButton",false);QE("p13SelectAllButton",false);Q("p13SelectAllButton").value="Select All";QE("p13RefreshButton",false);QE("p13CutButton",false);QE("p13CopyButton",false);QE("p13PasteButton",false)}else{var a=p13getFileSelCount(),c=p13getFileCount(),b=p13getFileSelCount(false);var d=((currentNode.agent.id>0)&&(currentNode.agent.id<5));QE("p13DeleteFileButton",(a>0)&&((p13filetreelocation.length>0)||(d==false)));QE("p13NewFolderButton",((p13filetreelocation.length>0)||(d==false)));QE("p13UploadButton",((p13filetreelocation.length>0)||(d==false)));QE("p13RenameFileButton",(a==1)&&((p13filetreelocation.length>0)||(d==false)));QE("p13SelectAllButton",c>0);Q("p13SelectAllButton").value=(a>0?"Select None":"Select All");QE("p13RefreshButton",true);QE("p13CutButton",(a>0)&&(a==b)&&((p13filetreelocation.length>0)||(d==false)));QE("p13CopyButton",(a>0)&&(a==b)&&((p13filetreelocation.length>0)||(d==false)));QE("p13PasteButton",((p13filetreelocation.length>0)||(d==false))&&((p13clipboard!=null)&&(p13clipboard.length>0)))}}function p13getFileSelCount(d){var a=0;var b=document.getElementsByName("fd");for(var c=0;c<b.length;c++){if((b[c].checked)&&((d!=false)||(b[c].attributes.file.value=="3"))){a++}}return a}function p13getFileSelDirCount(){var a=0,b=document.getElementsByName("fd");for(var c=0;c<b.length;c++){if((b[c].checked)&&(b[c].attributes.file.value=="999")){a++}}return a}function p13getFileCount(){var a=0;var b=document.getElementsByName("fd");return b.length}function p13selectallfile(){var c=(p13getFileSelCount()==0),a=document.getElementsByName("fd");for(var b=0;b<a.length;b++){a[b].checked=c}p13setActions()}function p13createfolder(){setDialogMode(2,"New Folder",3,p13createfolderEx,"<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% />");focusTextBox("p13renameinput");p13fileNameCheck()}function p13createfolderEx(){files.sendText({action:"mkdir",reqid:1,path:p13filetreelocation.join("/")+"/"+Q("p13renameinput").value});p13folderup(999)}function p13deletefile(){var a=p13getFileSelCount(),b=(p13getFileSelDirCount()>0)?"<br /><br /><label><input type=checkbox id=p13recdeleteinput>Recursive delete</label><br>":"<input type=checkbox id=p13recdeleteinput style='display:none'>";setDialogMode(2,"Delete",3,p13deletefileEx,(a>1)?("Delete "+a+" selected items?"+b):("Delete selected item?"+b))}function p13deletefileEx(){var b=[],a=document.getElementsByName("fd");for(var c=0;c<a.length;c++){if(a[c].checked){b.push(p13filetree.dir[a[c].value].n)}}files.sendText({action:"rm",reqid:1,path:p13filetreelocation.join("/"),delfiles:b,rec:Q("p13recdeleteinput").checked});p13folderup(999)}function p13renamefile(){var c,a=document.getElementsByName("fd");for(var b=0;b<a.length;b++){if(a[b].checked){c=p13filetree.dir[a[b].value].n}}setDialogMode(2,"Rename",3,p13renamefileEx,'<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="'+c+'" />',{action:"rename",path:p13filetreelocation.join("/"),oldname:c});focusTextBox("p13renameinput");p13fileNameCheck()}function p13renamefileEx(a,c){c.newname=Q("p13renameinput").value;files.sendText(c);p13folderup(999)}function p13fileNameCheck(a){var b=isFilenameValid(Q("p13renameinput").value);QE("idx_dlgOkButton",b);if((b==true)&&(a!=null)&&(a.keyCode==13)){dialogclose(1)}}function p13uploadFile(){setDialogMode(2,"Upload File",3,p13uploadFileEx,"<input type=file name=files id=p13uploadinput style=width:100% multiple=multiple onchange=\"updateUploadDialogOk('p13uploadinput')\" />");updateUploadDialogOk("p13uploadinput")}function p13uploadFileEx(){p13doUploadFiles(Q("p13uploadinput").files)}var p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0;function p13copyFile(b){var a=document.getElementsByName("fd");p13clipboard=[];p13clipboardCut=b,p13clipboardFolder=p13targetpath;for(var c=0;c<a.length;c++){if((a[c].checked)&&(a[c].attributes.file.value=="3")){p13clipboard.push(p13filetree.dir[a[c].value].n)}}p13updateClipview()}function p13pasteFile(){var a="";if((p13clipboard!=null)&&(p13clipboard.length>0)){a="Confim "+(p13clipboardCut==0?"copy":"move")+" of "+p13clipboard.length+" entrie"+((p13clipboard.length>1)?"s":"")+" to this location?"}setDialogMode(2,"Paste",3,p13pasteFileEx,a)}function p13pasteFileEx(){files.sendText({action:(p13clipboardCut==0?"copy":"move"),reqid:1,scpath:p13clipboardFolder,dspath:p13targetpath,names:p13clipboard});p13folderup(999);if(p13clipboardCut==1){p13clipboard=null,p13clipboardFolder=null,p13clipboardCut=0;p13updateClipview()}}function p13updateClipview(){var a="";if((p13clipboard!=null)&&(p13clipboard.length>0)){a="Holding "+p13clipboard.length+" entrie"+((p13clipboard.length>1)?"s":"")+" for "+(p13clipboardCut==0?"copy":"move")+', <a href=# onclick="return p13clearClip()" style=cursor:pointer>Clear</a>.'}QH("p13bottomstatus",a);p13setActions()}function p13clearClip(){p13clipboard=null;p13clipboardFolder=null;p13clipboardCut=0;p13updateClipview();return false}function p13fileDragDrop(a){haltEvent(a);QV("p13bigfail",false);QV("p13bigok",false);if(a.dataTransfer==null||a.dataTransfer.files.length==0||p13filetree==null){return}var b=[];for(var c in a.dataTransfer.files){if((a.dataTransfer.files[c].size!=null)&&(a.dataTransfer.files[c].size!=0)){b.push(a.dataTransfer.files[c])}}if(b.length==0){return}p13doUploadFiles(b)}var p13dragtimer=null;function p13fileDragOver(b){haltEvent(b);if(p13dragtimer!=null){clearTimeout(p13dragtimer);p13dragtimer=null}var a=(p13filetree!=null);QV("p13bigok",a);QV("p13bigfail",!a)}function p13fileDragLeave(a){haltEvent(a);if(a.target.id!="p13filetable"){QV("p13bigfail",false);QV("p13bigok",false)}else{p13dragtimer=setTimeout(function(){QV("p13bigfail",false);QV("p13bigok",false);p13dragtimer=null},10)}}var downloadFile;function p13downloadfile(a,b,c){if(xxdialogMode||downloadFile||!files){return}downloadFile={path:decodeURIComponent(a),file:decodeURIComponent(b),size:c,tsize:0,data:"",state:0,id:Math.random()};files.sendText({action:"download",sub:"start",id:downloadFile.id,path:downloadFile.path});setDialogMode(2,"Download File",10,p13downloadFileCancel,"<div>"+downloadFile.file+"</div><br /><progress id=d2progressBar style=width:100% value=0 max="+c+" />")}function p13downloadFileCancel(){setDialogMode(0);files.sendText({action:"download",sub:"cancel",id:downloadFile.id});downloadFile=null}function p13gotDownloadCommand(a){if((downloadFile==null)||(a.id!=downloadFile.id)){return}if(a.sub=="start"){downloadFile.state=1;files.sendText({action:"download",sub:"startack",id:downloadFile.id})}else{if(a.sub=="cancel"){downloadFile=null;setDialogMode(0)}}}function p13gotDownloadBinaryData(a){if(!downloadFile||downloadFile.state==0){return}if(a.length>4){downloadFile.tsize+=(a.length-4);downloadFile.data+=a.substring(4);Q("d2progressBar").value=downloadFile.tsize}if((ReadInt(a,0)&1)!=0){saveAs(data2blob(downloadFile.data),downloadFile.file);downloadFile=null;setDialogMode(0)}else{files.sendText({action:"download",sub:"ack",id:downloadFile.id})}}var uploadFile;function p13doUploadFiles(a){if(xxdialogMode){return}uploadFile={};uploadFile.xpath=p13filetreelocation.join("/");uploadFile.xfiles=a;uploadFile.xfilePtr=-1;setDialogMode(2,"Upload File",10,p13uploadFileCancel,"<div id=p13dfileName>Connecting...</div><br /><progress id=d2progressBar style=width:100% value=0 max=0 />");p13uploadReconnect()}function onFileUploadStateChange(b,a){switch(a){case 0:p13folderup(9999);break;case 3:p13uploadNextFile();break;default:break}}function p13uploadReconnect(){uploadFile.ws=CreateAgentRedirect(meshserver,CreateRemoteFiles(p13gotUploadData),serverPublicNamePort,authCookie,domainUrl);uploadFile.ws.attemptWebRTC=false;uploadFile.ws.ctrlMsgAllowed=false;uploadFile.ws.onStateChanged=onFileUploadStateChange;uploadFile.ws.Start(filesNode._id)}function p13uploadNextFile(){uploadFile.xfilePtr++;if(uploadFile.xfiles.length>uploadFile.xfilePtr){uploadFile.xptr=0;var a=uploadFile.xfiles[uploadFile.xfilePtr];QH("p13dfileName",a.name);Q("d2progressBar").max=a.size;Q("d2progressBar").value=0;uploadFile.xreader=new FileReader();uploadFile.xreader.onload=function(){uploadFile.xdata=uploadFile.xreader.result;uploadFile.ws.sendText(JSON.stringify({action:"upload",reqid:uploadFile.xfilePtr,path:uploadFile.xpath,name:a.name,size:uploadFile.xdata.byteLength}))};uploadFile.xreader.readAsArrayBuffer(a)}else{p13uploadFileCancel()}}function p13uploadFileCancel(a,b){if(uploadFile!=null){if(uploadFile.ws!=null){uploadFile.ws.Stop();uploadFile.ws=null}uploadFile=null}setDialogMode(0)}function p13gotUploadData(b){var a=JSON.parse(b);if((uploadFile==null)||(parseInt(uploadFile.xfilePtr)!=parseInt(a.reqid))){return}if(a.action=="uploadstart"){p13uploadNextPart(false);for(var c=0;c<8;c++){p13uploadNextPart(true)}}else{if(a.action=="uploadack"){p13uploadNextPart(false)}else{if(a.action=="uploaderror"){p13uploadFileCancel()}}}}function p13uploadNextPart(c){var a=uploadFile.xdata;var e=uploadFile.xptr;var d=uploadFile.xptr+4096;if(d>a.byteLength){if(c==true){return}d=a.byteLength}if(e==a.byteLength){if(uploadFile.ws!=null){uploadFile.ws.Stop();uploadFile.ws=null}if(uploadFile.xfiles.length>uploadFile.xfilePtr+1){p13uploadReconnect()}else{p13uploadFileCancel()}}else{var b=a.slice(e,d);uploadFile.ws.send(b);uploadFile.xptr=d;Q("d2progressBar").value=d}}var currentDeviceEvents=null;function deviceEventsUpdate(){var h="",a=null;for(var c in currentDeviceEvents){var b=currentDeviceEvents[c],g=new Date(b.time);if(b.msg){if(b.h==null){b.h=Math.random()}if(printDate(g)!=a){if(a!=null){h+="</table>"}a=printDate(g);h+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+a+"</td></tr>"}var d="si3";if(b.etype=="user"){d="m2"}if(b.etype=="server"){d="si3"}var e=EscapeHtml(b.msg).split("(R)").join("®");if(b.username){if((userinfo.siteadmin&2)&&(b.userid)){e="<a href=# onclick='gotoUser(\""+encodeURIComponent(b.userid)+"\");haltEvent(event);'>"+EscapeHtml(b.username)+"</a> → "+e}else{e=EscapeHtml(b.username)+" → "+e}}if(b.etype=="relay"||b.action=="relaylog"){d="relayIcon16"}h+="<tr onclick=showEventDetails("+b.h+",1) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+d+"></div></td><td class=g1> </td><td class=style10>"+printTime(g)+" - "+e+"</td><td class=g2> </td></tr><tr style=height:2px></tr>"}}if(a!=null){h+="</table>"}if(h==""){h="<br><i>No Events Found</i><br><br>"}QH("p16events",h)}function refreshDeviceEvents(){meshserver.send({action:"events",nodeid:currentNode._id,limit:parseInt(p16limitdropdown.value)})}function showEventDetails(b,d){var a,g;if(d==1){a=currentDeviceEvents}if(d==2){a=events}if(d==3){a=currentUserEvents}for(var c in a){if(a[c].h==b){g=a[c];break}}if(g){if(xxdialogMode){return false}var e="<div style=overflow-y:auto>";for(var c in g){if((c=="h")||(c=="_id")||(c=="ids")||(c=="domain")||(g[c]==null)||(typeof g[c]=="object")){continue}e+=addHtmlValue3(EscapeHtml(c),EscapeHtml(g[c]))}e+="</div>";setDialogMode(2,"Event Details",9,null,e)}}function agentConsoleHandleKeys(b){if((b.ctrlKey)||(b.altKey)){return true}var d=0,a=Q("p15consoleText");if(b.key){if(b.keyCode==13&&consoleFocus==0){p15consoleSend(b);d=1}else{if(b.keyCode==8&&consoleFocus==0){var g=a.value;a.value=g.substring(0,g.length-1);d=1}else{if(b.keyCode==27){a.value="";d=1}else{if((b.keyCode==38)||(b.keyCode==40)){var c=consoleHistory.indexOf(a.value);if((b.keyCode==38)&&((consoleHistory.length-1)>c)){a.value=consoleHistory[c+1]}else{if((b.keyCode==40)&&(c>0)){a.value=consoleHistory[c-1]}else{if((b.keyCode==40)&&(c==0)){a.value=""}}}d=1}else{if(b.key.length===1){insertTextAtCursor(a,b.key);d=1}}}}}}else{if(b.charCode!=0&&consoleFocus==0){a.value=((a.value+String.fromCharCode(b.charCode)));d=1}}if(d>0){return haltEvent(b)}}function insertTextAtCursor(a,d){if(document.selection){a.focus();sel=document.selection.createRange();sel.text=d}else{if(a.selectionStart||a.selectionStart=="0"){var c=a.selectionStart,b=a.selectionEnd;a.value=a.value.substring(0,c)+d+a.value.substring(b,a.value.length);a.setSelectionRange(b+1,b+1)}else{a.value+=myValue}}}var consoleNode;var consoleServerText="";function setupConsole(){if(xxcurrentView==115){var d=(consoleNode=="server");consoleNode="server";QH("p15deviceName","My Server Console");QE("p15consoleText",true);QH("p15statetext","");QH("p15coreName","");if(d==false){QH("p15agentConsoleText",consoleServerText);Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight}}else{var d=(consoleNode==currentNode);consoleNode=currentNode;var a=meshes[consoleNode.meshid];var b=a.links[userinfo._id].rights;if((b&16)!=0){if(consoleNode.consoleText==null){consoleNode.consoleText=""}if(d==false){QH("p15agentConsoleText",consoleNode.consoleText);Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight}var c=((consoleNode.conn&1)!=0)?true:false;QH("p15statetext",c?"Agent is online":"Agent is offline");QE("p15consoleText",c);QE("p15uploadCore",c)}else{QH("p15statetext","Access Denied");QE("p15consoleText",false);QE("p15uploadCore",false)}}}function p15consoleClear(){QH("p15agentConsoleText","");Q("id_p15consoleClear").blur();if(xxcurrentView==115){consoleServerText=""}else{consoleNode.consoleText=""}}var consoleHistory=[];function p15consoleSend(a){if(a&&a.keyCode!=13){return}var d=Q("p15consoleText").value,c="<div style=color:green>> "+EscapeHtml(Q("p15consoleText").value)+"<br/></div>";Q("p15agentConsoleText").innerHTML+=c;Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight;Q("p15consoleText").value="";if(xxcurrentView==115){consoleServerText+=c;meshserver.send({action:"serverconsole",value:d})}else{consoleNode.consoleText+=c;meshserver.send({action:"msg",type:"console",nodeid:consoleNode._id,value:d})}if(d.length>0){var b=consoleHistory.indexOf(d);if(b>=0){consoleHistory.splice(b,1)}consoleHistory.unshift(d);consoleHistory.splice(10)}}function p15consoleReceive(b,a){a="<div>"+a+"</div>";if(b==="serverconsole"){consoleServerText+=a;if(consoleNode=="server"){Q("p15agentConsoleText").innerHTML+=a;Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight}}else{if(b.consoleText==null){b.consoleText=a}else{b.consoleText+=a}if(consoleNode==b){Q("p15agentConsoleText").innerHTML+=a;Q("p15agentConsoleText").scrollTop=Q("p15agentConsoleText").scrollHeight}}}function p15downloadConsoleText(){saveAs(new Blob([Q("p15agentConsoleText").innerText],{type:"application/octet-stream"}),"console.txt")}function p15uploadCore(a){if(xxdialogMode){return}if(a.shiftKey==true){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"})}else{if(a.altKey==true){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"})}else{if(a.ctrlKey==true){p15uploadCore2()}else{setDialogMode(2,"Perform Agent Action",3,p15uploadCoreEx,addHtmlValue("Action","<select id=d3coreMode style=width:230px><option value=1>Upload default server core</option><option value=2>Clear the core</option><option value=6>Upload recovery core</option><option value=3>Upload a core file</option><option value=4>Soft disconnect agent</option><option value=5>Hard disconnect agent</option></select>"))}}}}function p15uploadCoreEx(){if(Q("d3coreMode").value==1){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"default"})}else{if(Q("d3coreMode").value==2){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"clear"})}else{if(Q("d3coreMode").value==3){p15uploadCore2()}else{if(Q("d3coreMode").value==4){meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:1})}else{if(Q("d3coreMode").value==5){meshserver.send({action:"agentdisconnect",nodeid:consoleNode._id,disconnectMode:2})}else{if(Q("d3coreMode").value==6){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"recovery"})}}}}}}}function p15uploadCore2(){if(xxdialogMode){return}Q("d3localmodeform").action="uploadmeshcorefile.ashx";Q("d3attrib").value=currentNode._id;setDialogMode(3,"Upload Mesh Agent Core",3,p15uploadCoreEx2);d3init()}function p15uploadCoreEx2(){var b=Q("d3uploadMode").value;if(b==1){Q("d3submit").click()}else{var a=d3getFileSel();if(a.length==1){meshserver.send({action:"uploadagentcore",nodeid:consoleNode._id,type:"custom",path:d3filetreelocation.join("/")+"/"+a[0]})}}}function account_manageAuthApp(){if(xxdialogMode||((features&4096)==0)){return}if(userinfo.otpsecret==1){account_removeOtp()}else{account_addOtp()}return false}function account_addOtp(){if(xxdialogMode||(userinfo.otpsecret==1)||((features&4096)==0)){return}setDialogMode(2,"Authenticator App",2,function(){meshserver.send({action:"otpauth-setup",secret:Q("d2optsecret").attributes.secret.value,token:Q("d2otpauthinput").value})},"<div id=d2optinfo>Loading...</div>","otpauth-request");meshserver.send({action:"otpauth-request"})}function account_addOtpCheck(a){var b=(Q("d2otpauthinput").value.length==6);QE("idx_dlgOkButton",b);if(a&&(a.keyCode==13)&&b){dialogclose(1)}}function account_removeOtp(){if(xxdialogMode||(userinfo.otpsecret!=1)||((features&4096)==0)){return}setDialogMode(2,"Authenticator App",3,function(){meshserver.send({action:"otpauth-clear"})},"Confirm removal of authenticator application 2-step login?")}function account_manageOtp(a){if((xxdialogMode==2)&&(xxdialogTag=="otpauth-manage")){dialogclose(0)}if(xxdialogMode||((features&4096)==0)){return false}if((userinfo.otpsecret==1)||(userinfo.otphkeys>0)){meshserver.send({action:"otpauth-getpasswords",subaction:a})}return false}function account_manageHardwareOtp(){if((xxdialogMode==2)&&(xxdialogTag=="otpauth-hardware-manage")){dialogclose(0)}if(xxdialogMode||((features&4096)==0)){return false}meshserver.send({action:"otp-hkey-get"});return false}function account_addhkey(a){if(a==3){var b="Type in the name of the key to add.<br /><br />";b+=addHtmlValue("Key Name",'<input id=dp1keyname style=width:230px maxlength=20 autocomplete=off placeholder="MyKey" onkeyup=account_addhkeyValidate(event,2) />')}else{if(a==2){var b="Type in a key name, select the OTP box and press the button on the YubiKey™.<br /><br />";b+=addHtmlValue("Key Name",'<input id=dp1keyname style=width:230px maxlength=20 autocomplete=off placeholder="MyKey" onkeyup=account_addhkeyValidate(event,1) />');b+=addHtmlValue("YubiKey™ OTP","<input id=dp1key style=width:230px autocomplete=off onkeyup=account_addhkeyValidate(event,2) />")}}setDialogMode(2,"Add Security Key",3,account_addhkeyEx,b,a);Q("dp1keyname").focus()}function account_addhkeyValidate(b,a){if((b!=null)&&(b.keyCode==13)){if(a==2){dialogclose(1)}else{Q("dp1key").focus()}}}function account_addhkeyEx(a,c){var b=Q("dp1keyname").value;if(b==""){b="MyKey"}if(c==2){meshserver.send({action:"otp-hkey-yubikey-add",name:b,otp:Q("dp1key").value});setDialogMode(2,"Add Security Key",0,null,"<br />Checking...<br /><br /><br />","otpauth-hardware-manage")}else{if(c==3){meshserver.send({action:"webauthn-startregister",name:b})}}}function account_removehkey(a){meshserver.send({action:"otp-hkey-remove",index:a});meshserver.send({action:"otp-hkey-get"})}var loclist={af:"Afrikaans",sq:"Albanian",ar:"Arabic (Standard)","ar-dz":"Arabic (Algeria)","ar-bh":"Arabic (Bahrain)","ar-eg":"Arabic (Egypt)","ar-iq":"Arabic (Iraq)","ar-jo":"Arabic (Jordan)","ar-kw":"Arabic (Kuwait)","ar-lb":"Arabic (Lebanon)","ar-ly":"Arabic (Libya)","ar-ma":"Arabic (Morocco)","ar-om":"Arabic (Oman)","ar-qa":"Arabic (Qatar)","ar-sa":"Arabic (Saudi Arabia)","ar-sy":"Arabic (Syria)","ar-tn":"Arabic (Tunisia)","ar-ae":"Arabic (U.A.E.)","ar-ye":"Arabic (Yemen)",an:"Aragonese",hy:"Armenian",as:"Assamese",ast:"Asturian",az:"Azerbaijani",eu:"Basque",bg:"Bulgarian",be:"Belarusian",bn:"Bengali",bs:"Bosnian",br:"Breton",my:"Burmese",ca:"Catalan",ch:"Chamorro",ce:"Chechen",zh:"Chinese","zh-hk":"Chinese (Hong Kong)","zh-cn":"Chinese (PRC)","zh-sg":"Chinese (Singapore)","zh-tw":"Chinese (Taiwan)",cv:"Chuvash",co:"Corsican",cr:"Cree",hr:"Croatian",cs:"Czech",da:"Danish",nl:"Dutch (Standard)","nl-be":"Dutch (Belgian)",en:"English","en-au":"English (Australia)","en-bz":"English (Belize)","en-ca":"English (Canada)","en-ie":"English (Ireland)","en-jm":"English (Jamaica)","en-nz":"English (New Zealand)","en-ph":"English (Philippines)","en-za":"English (South Africa)","en-tt":"English (Trinidad & Tobago)","en-gb":"English (United Kingdom)","en-us":"English (United States)","en-zw":"English (Zimbabwe)",eo:"Esperanto",et:"Estonian",fo:"Faeroese",fa:"Farsi (Persian)",fj:"Fijian",fi:"Finnish",fr:"French (Standard)","fr-be":"French (Belgium)","fr-ca":"French (Canada)","fr-fr":"French (France)","fr-lu":"French (Luxembourg)","fr-mc":"French (Monaco)","fr-ch":"French (Switzerland)",fy:"Frisian",fur:"Friulian",gd:"Gaelic (Scots)","gd-ie":"Gaelic (Irish)",gl:"Galacian",ka:"Georgian",de:"German (Standard)","de-at":"German (Austria)","de-de":"German (Germany)","de-li":"German (Liechtenstein)","de-lu":"German (Luxembourg)","de-ch":"German (Switzerland)",el:"Greek",gu:"Gujurati",ht:"Haitian",he:"Hebrew",hi:"Hindi",hu:"Hungarian",is:"Icelandic",id:"Indonesian",iu:"Inuktitut",ga:"Irish",it:"Italian (Standard)","it-ch":"Italian (Switzerland)",ja:"Japanese",kn:"Kannada",ks:"Kashmiri",kk:"Kazakh",km:"Khmer",ky:"Kirghiz",tlh:"Klingon",ko:"Korean","ko-kp":"Korean (North Korea)","ko-kr":"Korean (South Korea)",la:"Latin",lv:"Latvian",lt:"Lithuanian",lb:"Luxembourgish",mk:"FYRO Macedonian",ms:"Malay",ml:"Malayalam",mt:"Maltese",mi:"Maori",mr:"Marathi",mo:"Moldavian",nv:"Navajo",ng:"Ndonga",ne:"Nepali",no:"Norwegian",nb:"Norwegian (Bokmal)",nn:"Norwegian (Nynorsk)",oc:"Occitan",or:"Oriya",om:"Oromo","fa-ir":"Persian/Iran",pl:"Polish",pt:"Portuguese","pt-br":"Portuguese (Brazil)",pa:"Punjabi","pa-in":"Punjabi (India)","pa-pk":"Punjabi (Pakistan)",qu:"Quechua",rm:"Rhaeto-Romanic",ro:"Romanian","ro-mo":"Romanian (Moldavia)",ru:"Russian","ru-mo":"Russian (Moldavia)",sz:"Sami (Lappish)",sg:"Sango",sa:"Sanskrit",sc:"Sardinian",sd:"Sindhi",si:"Singhalese",sr:"Serbian",sk:"Slovak",sl:"Slovenian",so:"Somani",sb:"Sorbian",es:"Spanish","es-ar":"Spanish (Argentina)","es-bo":"Spanish (Bolivia)","es-cl":"Spanish (Chile)","es-co":"Spanish (Colombia)","es-cr":"Spanish (Costa Rica)","es-do":"Spanish (Dominican Republic)","es-ec":"Spanish (Ecuador)","es-sv":"Spanish (El Salvador)","es-gt":"Spanish (Guatemala)","es-hn":"Spanish (Honduras)","es-mx":"Spanish (Mexico)","es-ni":"Spanish (Nicaragua)","es-pa":"Spanish (Panama)","es-py":"Spanish (Paraguay)","es-pe":"Spanish (Peru)","es-pr":"Spanish (Puerto Rico)","es-es":"Spanish (Spain)","es-uy":"Spanish (Uruguay)","es-ve":"Spanish (Venezuela)",sx:"Sutu",sw:"Swahili",sv:"Swedish","sv-fi":"Swedish (Finland)","sv-sv":"Swedish (Sweden)",ta:"Tamil",tt:"Tatar",te:"Teluga",th:"Thai",tig:"Tigre",ts:"Tsonga",tn:"Tswana",tr:"Turkish",tk:"Turkmen",uk:"Ukrainian",hsb:"Upper Sorbian",ur:"Urdu",ve:"Venda",vi:"Vietnamese",vo:"Volapuk",wa:"Walloon",cy:"Welsh",xh:"Xhosa",ji:"Yiddish",zu:"Zulu"};function account_showLocalizationSettings(){if(xxdialogMode){return false}var b=getstore("loctag",0);var c='<select id=d2locselect style=width:100%><option value="*">User browser value</option>';for(var a in loclist){c+='<option value="'+a+'"'+((b==a)?" selected":"")+">"+a+" - "+loclist[a]+"</option>"}c+="</select>";var d=addHtmlValue("Localization",c);setDialogMode(2,"Localization Settings",3,account_showLocalizationSettingsEx,d);return false}function account_showLocalizationSettingsEx(){var b=getstore("loctag",0);var a=Q("d2locselect").value;if(b!=a){if(a!="*"){args.locale=a}else{delete args.locale}putstore("loctag",args.locale);masterUpdate(4294967295)}}function account_enableNotifications(){if(Notification){Notification.requestPermission().then(function(a){QV("accountEnableNotificationsSpan",a!="granted")})}return false}function account_showAccountNotifySettings(){if(xxdialogMode){return false}var b="";b+="<div><label><input id=p2notifyPlayNotifySound type=checkbox />Notification sound.</label></div>";b+="<div><label><input id=p2notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>";b+="<div><label><input id=p2notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>";b+="<div><label><input id=p2notifyIntelAmtKvmActions type=checkbox />Intel® AMT desktop and serial events.</label></div>";setDialogMode(2,"Notification Settings",3,account_showAccountNotifySettingsEx,b);var a=getstore("notifications",0);Q("p2notifyPlayNotifySound").checked=(a&1);Q("p2notifyIntelDeviceConnect").checked=(a&2);Q("p2notifyIntelDeviceDisconnect").checked=(a&4);Q("p2notifyIntelAmtKvmActions").checked=(a&8);return false}function account_showAccountNotifySettingsEx(){var a=0;a+=Q("p2notifyPlayNotifySound").checked?1:0;a+=Q("p2notifyIntelDeviceConnect").checked?2:0;a+=Q("p2notifyIntelDeviceDisconnect").checked?4:0;a+=Q("p2notifyIntelAmtKvmActions").checked?8:0;putstore("notifications",a)}function account_showVerifyEmail(){if(xxdialogMode||(userinfo.emailVerified==true)||(serverinfo.emailcheck!=true)){return false}var a="Click ok to send a verification mail to:<br /><div style=padding:8px><b>"+EscapeHtml(userinfo.email)+"</b></div>Please wait a few minute to receive the verification.";setDialogMode(2,"Email Verification",3,account_showVerifyEmailEx,a);return false}function account_showVerifyEmailEx(){meshserver.send({action:"verifyemail",email:userinfo.email})}function account_showChangeEmail(){if(xxdialogMode){return false}var a="Change your account email address here.<br /><br />";a+=addHtmlValue("Email","<input id=dp2email style=width:230px maxlength=256 onchange=account_validateEmail() onkeyup=account_validateEmail(event) />");setDialogMode(2,"Email Address Change",3,account_changeEmail,a);if(userinfo.email!=null){Q("dp2email").value=userinfo.email}account_validateEmail();Q("dp2email").focus();return false}function account_validateEmail(a,b){QE("idx_dlgOkButton",validateEmail(Q("dp2email").value)&&(Q("dp2email").value!=userinfo.email));if((a!=null)&&(a.keyCode==13)){dialogclose(1)}}function account_changeEmail(){meshserver.send({action:"changeemail",email:Q("dp2email").value})}function account_showDeleteAccount(){if(xxdialogMode){return false}var a="To delete this account, type in the account password in both boxes below and hit ok.<br /><br />";a+="<form method=post><input type=hidden name=action value=deleteaccount /><input type=hidden name=authcookie value="+authCookie+" /><table style=margin-left:80px><tr>";a+="<td align=right>Password:</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>";a+="</tr><tr><td align=right>Password:</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateDeleteAccount() onkeyup=account_validateDeleteAccount() /></td>";a+="</tr></table><br /><div style=padding:10px;margin-bottom:4px>";a+="<input id=account_dlgCancelButton type=button value=Cancel style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>";a+='<input id=account_dlgOkButton type=submit value=OK style="float:right;width:80px" onclick=dialogclose(1)>';a+="</div><br /></form>";setDialogMode(2,"Delete Account",0,null,a);account_validateDeleteAccount();Q("apassword1").focus();return false}function account_showChangePassword(){if(xxdialogMode){return false}var d="Change your account password by entering the old password and new password twice in the boxes below.";if(features&65536){" Password hint can be used but is not recommanded."}d+="<br /><br />";d+="<table style=margin-left:60px>";d+="<tr><td align=right>Old password:</td><td><input id=apassword0 type=password name=apassword0 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b></b></td></tr>";d+="<tr><td align=right>New password:</td><td><input id=apassword1 type=password name=apassword1 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /> <b><span id=dxPassWarn></span></b></td></tr>";d+="<tr><td align=right>New password:</td><td><input id=apassword2 type=password name=apassword2 autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>";if(features&65536){d+="<tr><td align=right>Password hint:</td><td><input id=apasswordhint name=apasswordhint maxlength=250 type=text autocomplete=off onchange=account_validateNewPassword() onkeyup=account_validateNewPassword() onkeydown=account_validateNewPassword() /></td></tr>"}d+="</table>";if(passRequirements){var b=[],c=0;for(var a in passRequirements){if((a!="reset")&&(a!="hint")){b.push(a+":"+passRequirements[a]);c++}}if(c>0){d+="<br /><span style=font-size:x-small>Requirements: "+b.join(", ")+".</span>"}}d+="<br />";setDialogMode(2,"Change Password",3,account_showChangePasswordEx,d);Q("apassword0").focus();account_validateNewPassword();return false}function account_showChangePasswordEx(){if(Q("apassword1").value==Q("apassword2").value){var a={action:"changepassword",oldpass:Q("apassword0").value,newpass:Q("apassword1").value};if(features&65536){a.hint=Q("apasswordhint").value}meshserver.send(a)}}function account_createMesh(){if(xxdialogMode){return false}if((userinfo.siteadmin!=4294967295)&&((userinfo.siteadmin&64)!=0)){setDialogMode(2,"New Device Group",1,null,"This account does not have the rights to create a new device group.");return false}if((userinfo.emailVerified!==true)&&(serverinfo.emailcheck==true)&&(userinfo.siteadmin!=4294967295)){setDialogMode(2,"Account Security",1,null,'Unable to access a device until a email address is verified. This is required for password recovery. Go to the "My Account" tab to change and verify an email address.');return false}if((features&262144)&&!((userinfo.otpsecret==1)||(userinfo.otphkeys>0)||(userinfo.otpkeys>0))){setDialogMode(2,"Account Security",1,null,'Unable to access a device until two-factor authentication is enabled. This is required for extra security. Go to the "My Account" tab and look at the "Account Security" section.');return false}var a="Create a new device group using the options below.<br /><br />";a+=addHtmlValue("Name","<input id=dp2meshname style=width:230px maxlength=64 onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,1) />");a+=addHtmlValue("Type","<div style=width:230px;margin:0;padding:0><select id=dp2meshtype style=width:100% onchange=account_validateMeshCreate() onkeyup=account_validateMeshCreate(event,2) ><option value=2>Manage using a software agent</option><option value=1>Intel® AMT only, no agent</option></select></div>");a+=addHtmlValue("Description","<div style=width:230px;margin:0;padding:0><textarea id=dp2meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>");setDialogMode(2,"New Device Group",3,account_createMeshEx,a);account_validateMeshCreate();Q("dp2meshname").focus();return false}function account_validateMeshCreate(a,b){if((b==1)&&(a!=null)&&(a.key=="Enter")&&(Q("dp2meshname").value.length>0)){Q("dp2meshtype").focus()}if((b==2)&&(a!=null)&&(a.key=="Enter")){Q("dp2meshdesc").focus()}QE("idx_dlgOkButton",Q("dp2meshname").value.length>0)}function account_createMeshEx(a,b){meshserver.send({action:"createmesh",meshname:Q("dp2meshname").value,meshtype:Q("dp2meshtype").value,desc:Q("dp2meshdesc").value})}function account_validateDeleteAccount(){QE("account_dlgOkButton",(Q("apassword1").value.length>0)&&(Q("apassword1").value==Q("apassword2").value))}function account_validateNewPassword(){var d="",a=(Q("apassword0").value.length>0)&&(Q("apassword1").value.length>0)&&(Q("apassword1").value==Q("apassword2").value)&&(Q("apassword0").value!=Q("apassword1").value);if((features&65536)&&(Q("apasswordhint").value==Q("apassword1").value)){a=false}if(Q("apassword1").value!=""){if(passRequirements==null||passRequirements==""){var c=checkPasswordStrength(Q("apassword1").value);if(c>=80){d="<span style=color:green>Strong<span>"}else{if(c>=60){d="<span style=color:blue>Good<span>"}else{d="<span style=color:red>Weak<span>"}}}else{var b=checkPasswordRequirements(Q("apassword1").value,passRequirements);if(b==false){a=false;d="<span style=color:red>Policy<span>"}}}QH("dxPassWarn",d);QE("idx_dlgOkButton",a)}function checkPasswordStrength(e){var g=0,d={},h=0,j={digits:/\d/.test(e),lower:/[a-z]/.test(e),upper:/[A-Z]/.test(e),nonWords:/\W/.test(e)};if(!e){return 0}for(var b=0;b<e.length;b++){d[e[b]]=(d[e[b]]||0)+1;g+=5/d[e[b]]}for(var a in j){h+=(j[a]==true)?1:0}return parseInt(g+(h-1)*10)}function checkPasswordRequirements(e,g){if((g==null)||(g=="")||(typeof g!="object")){return true}if(g.min){if(e.length<g.min){return false}}if(g.max){if(e.length>g.max){return false}}var d=0,b=0,h=0,c=0;for(var a=0;a<e.length;a++){if(/\d/.test(e[a])){d++}if(/[a-z]/.test(e[a])){b++}if(/[A-Z]/.test(e[a])){h++}if(/\W/.test(e[a])){c++}}if(g.num&&(d<g.num)){return false}if(g.lower&&(b<g.lower)){return false}if(g.upper&&(h<g.upper)){return false}if(g.nonalpha&&(c<g.nonalpha)){return false}return true}function updateMeshes(){var e="";var a=0,b=0;for(i in meshes){if(a>1){e+="</tr><tr>";a=0}a++;b++;var d=0;if(meshes[i].links[userinfo._id]){d=meshes[i].links[userinfo._id].rights}var g="Partial Rights";if(d==4294967295){g="Full Administrator"}else{if(d==0){g="No Rights"}}e+="<div onmouseover=devMouseHover(this,1) onmouseout=devMouseHover(this,0) style=display:inline-block;width:431px;height:50px;padding-top:1px;padding-bottom:1px;float:left><div style=float:left;width:30px;height:100%></div><div tabindex=0 style=height:100%;cursor:pointer onclick=gotoMesh('"+i+"') onkeypress=\"if (event.key=='Enter') gotoMesh('"+i+"')\"><div class=mi style=float:left;width:50px;height:50px></div><div style=height:100%><div class=g1></div><div class=e2 style=width:300px><div class=e1>"+EscapeHtml(meshes[i].name)+"</div><div>"+g+"</div></div><div class=g2 style=float:left></div></div></div></div>"}meshcount=b;QH("p2meshes",e);QV("p2noMeshFound",b==0)}function gotoMesh(a){currentMesh=meshes[a];p20updateMesh();go(20);return false}function server_showRestoreDlg(){if(xxdialogMode){return false}var a="Restore the server using a backup, <span style=color:red>this will delete the existing server data</span>. Only do this if you know what you are doing.<br /><br />";a+='<form action="/restoreserver.ashx" enctype="multipart/form-data" method="post"><div>';a+='<input id=account_dlgFileInput type=file name=datafile style=width:100% accept=".zip,application/octet-stream,application/zip,application/x-zip,application/x-zip-compressed" onchange=account_validateServerRestore()>';a+="<input id=account_dlgCancelButton type=button value=Cancel style=float:right;width:80px;margin-left:5px onclick=dialogclose(0)>";a+="<input id=account_dlgOkButton type=submit value=OK style=float:right;width:80px onclick=dialogclose(1)>";a+="</div><br /><br /></form>";setDialogMode(2,"Restore Server",0,null,a);account_validateServerRestore();return false}function account_validateServerRestore(){QE("account_dlgOkButton",Q("account_dlgFileInput").files.length==1)}function server_showVersionDlg(){if(xxdialogMode){return false}setDialogMode(2,"MeshCentral Version",1,null,"Loading...","MeshCentralServerUpdate");meshserver.send({action:"serverversion"});return false}function server_showVersionDlgUpdate(){QE("idx_dlgOkButton",Q("d2updateCheck").checked)}function server_showVersionDlgEx(){meshserver.send({action:"serverupdate"})}function server_showErrorsDlg(){if(xxdialogMode){return false}setDialogMode(2,"MeshCentral Errors",1,null,"Loading...","MeshCentralServerErrors");meshserver.send({action:"servererrors"});return false}function server_showErrorsDlgUpdate(){QE("idx_dlgOkButton",Q("d2updateCheck").checked)}function server_showErrorsDlgEx(){meshserver.send({action:"serverclearerrorlog"})}function d2CopyServerErrorsToClip(){saveAs(new Blob([Q("d2ServerErrorsLogPre").innerText],{type:"application/octet-stream"}),"servererrors.txt")}var currentMesh;function p20updateMesh(){if(currentMesh==null){return}QH("p20meshName",EscapeHtml(currentMesh.name));var m="Unknown #"+currentMesh.mtype;var l=0;try{l=currentMesh.links[userinfo._id].rights}catch(d){}if(currentMesh.mtype==1){m="Intel® AMT only, no agent"}if(currentMesh.mtype==2){m="Managed using a software agent"}var t="";t+=addHtmlValue("Name",addLinkConditional(EscapeHtml(currentMesh.name),"p20editmesh(1)",(l&1)!=0));t+=addHtmlValue("Description",addLinkConditional(((currentMesh.desc&¤tMesh.desc!="")?EscapeHtml(currentMesh.desc):"<i>None</i>"),"p20editmesh(2)",(l&1)!=0));t+=addHtmlValue("Type",m);if(currentMesh.mtype==2){var h=[];if(currentMesh.flags){if(currentMesh.flags&1){h.push("Auto-Remove")}if(currentMesh.flags&2){h.push("Hostname Sync")}}h=h.join(", ");if(h==""){h="<i>None</i>"}t+=addHtmlValue("Features",addLinkConditional(h,"p20editmeshfeatures()",l&1))}if(currentMesh.mtype==2){h=[];var a=0;if(currentMesh.consent){a=currentMesh.consent}if(serverinfo.consent){a|=serverinfo.consent}if(a&8){h.push("Desktop Prompt")}else{if(a&1){h.push("Desktop Notify")}}if(a&16){h.push("Terminal Prompt")}else{if(a&2){h.push("Terminal Notify")}}if(a&32){h.push("Files Prompt")}else{if(a&4){h.push("Files Notify")}}if(a==7){h=["Always Notify"]}if((a&56)==56){h=["Always Prompt"]}h=h.join(", ");if(h==""){h="<i>None</i>"}t+=addHtmlValue("User Consent",addLinkConditional(h,"p20editmeshconsent()",l&1))}var j=0,k=[];if(userinfo.links&&userinfo.links[currentMesh._id]&&userinfo.links[currentMesh._id].notify){j=userinfo.links[currentMesh._id].notify}if(j&2){k.push("Connect")}if(j&4){k.push("Disconnect")}if(j&8){k.push("Intel® AMT")}if(k.length==0){k.push("None")}t+=addHtmlValue("Notifications",addLink(k.join(", "),"p20editMeshNotify()"));var g="No Policy";if(currentMesh.amt){if(currentMesh.amt.type==1){g="Deactivate Client Control Mode (CCM)"}else{if(currentMesh.amt.type==2){g="Simple Client Control Mode (CCM)";if(currentMesh.amt.cirasetup==2){g+=" + CIRA"}}else{if(currentMesh.amt.type==3){g="Simple Admin Control Mode (ACM)";if(currentMesh.amt.cirasetup==2){g+=" + CIRA"}}}}}t+=addHtmlValue("Intel® AMT",addLinkConditional(g,"p20editMeshAmt()",l&1));if(l&1){t+='<br><input type=button value=Notes title="View notes about this device group" onclick=showNotes(false,"'+encodeURIComponent(currentMesh._id)+'") />'}t+="<br style=clear:both><br>";var c=currentMesh.links[userinfo._id];if(c&&((c.rights&2)!=0)){t+='<a href=# onclick="return p20showAddMeshUserDialog()" style=cursor:pointer;margin-right:10px><img src=images/icon-addnew.png border=0 height=12 width=12> Add Users</a>'}if((l&4)!=0){if(currentMesh.mtype==1){t+="<a href=# onclick='return addCiraDeviceToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Add a new Intel® AMT computer that is located on the internet."><img src=images/icon-installmesh.png border=0 height=12 width=12> Install CIRA</a>';t+="<a href=# onclick='return addDeviceToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Add a new Intel® AMT computer that is located on the local network."><img src=images/icon-installmesh.png border=0 height=12 width=12> Install local</a>';if(currentMesh.amt&&(currentMesh.amt.type==2)){t+="<a href=# onclick='return showCcmActivation(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Perform Intel AMT client control mode (CCM) activation."><img src=images/icon-installmesh.png border=0 height=12 width=12> Activation</a>'}else{if(currentMesh.amt&&(currentMesh.amt.type==3)&&((features&1048576)!=0)){t+="<a href=# onclick='return showAcmActivation(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Perform Intel AMT admin control mode (ACM) activation."><img src=images/icon-installmesh.png border=0 height=12 width=12> Activation</a>'}}}if(currentMesh.mtype==2){t+="<a href=# onclick='return addAgentToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Add a new computer to this mesh by installing the mesh agent."><img src=images/icon-addnew.png border=0 height=12 width=12> Install</a>';t+="<a href=# onclick='return inviteAgentToMesh(\""+currentMesh._id+'")\' style=cursor:pointer;margin-right:10px title="Invite someone to install the mesh agent on this mesh."><img src=images/icon-addnew.png border=0 height=12 width=12> Invite</a>'}}t+='<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:left;width:430px>User Authorizations</th><th scope=col style=text-align:left></th></tr>';var b=1,p=[];for(var e in currentMesh.links){var s=e.split("/")[2];if(currentMesh.links[e].name){s=currentMesh.links[e].name}if(e==userinfo._id){s=userinfo.name}p.push({id:e,name:s,rights:currentMesh.links[e].rights})}p.sort(function(r,u){if(r.name>u.name){return 1}if(r.name<u.name){return -1}return 0});for(var e in p){var q="",o="Partial Rights",n=p[e].rights;if(n==4294967295){o="Full Administrator"}else{if(n==0){o="No Rights"}}if((p[e].id!=userinfo._id)&&(l==4294967295||(((l&2)!=0)))){q="<a href=# onclick='return p20deleteUser(event,\""+encodeURIComponent(p[e].id)+'")\' title="Remote user rights to this mesh" style=cursor:pointer><img src=images/trash.png border=0 height=10 width=10></a>'}t+='<tr tabindex=0 onclick=p20viewuser("'+encodeURIComponent(p[e].id)+"\") onkeypress=\"if (event.key=='Enter') p20viewuser('"+encodeURIComponent(p[e].id)+"')\" style=cursor:pointer"+(((b%2)==0)?";background-color:#DDD":"")+'><td><div title="User" class=m2></div><div> '+EscapeHtml(decodeURIComponent(p[e].name))+"<div></div></div></td><td><div style=float:right>"+q+"</div><div>"+o+"</div></td></tr>";++b}t+="</tbody></table>";if(l==4294967295){t+="<div style=font-size:x-small;text-align:right><span><a href=# onclick=p20showDeleteMeshDialog() style=cursor:pointer>Delete Group</a></span></div>"}QH("p20info",t)}function p20editMeshAmt(){if(xxdialogMode){return}var b="",a="";if((features&1048576)!=0){a="<option value=3>Simple Admin Control Mode (ACM)</option>"}if(currentMesh.mtype==1){b+=addHtmlValue("Type","<select id=dp20amtpolicy style=width:230px onchange=p20editMeshAmtChange()><option value=0>No Policy</option><option value=2>Simple Client Control Mode (CCM)</option>"+a+"</select>")}else{b+=addHtmlValue("Type","<select id=dp20amtpolicy style=width:230px onchange=p20editMeshAmtChange()><option value=0>No Policy</option><option value=1>Deactivate Client Control Mode (CCM)</option><option value=2>Simple Client Control Mode (CCM)</option>"+a+"</select>")}b+="<div id=dp20amtpolicydiv></div>";setDialogMode(2,"Intel® AMT Policy",3,p20editMeshAmtEx,b);if(currentMesh.amt){Q("dp20amtpolicy").value=currentMesh.amt.type}p20editMeshAmtChange();if(currentMesh.amt&&(currentMesh.amt.type==2)||(currentMesh.amt.type==3)){Q("dp20amtpolicypass").value=currentMesh.amt.password;if((currentMesh.amt.type==2)&&(currentMesh.amt.badpass!=null)){Q("dp20amtbadpass").value=currentMesh.amt.badpass}if((features&1024)==0){Q("dp20amtcira").value=currentMesh.amt.cirasetup}}dp20amtValidatePolicy()}function p20editMeshAmtChange(){var a=Q("dp20amtpolicy").value,b="";if(a>=2){b=addHtmlValue("Password*","<input id=dp20amtpolicypass type=password style=width:230px maxlength=32 onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />");b+=addHtmlValue("Password*","<input id=dp20amtpolicypass2 type=password style=width:230px maxlength=32 onchange=dp20amtValidatePolicy() onkeyup=dp20amtValidatePolicy() autocomplete=off />");if((a==2)&&(currentMesh.mtype==2)){b+=addHtmlValue("Password mismatch","<select id=dp20amtbadpass style=width:230px><option value=0>Do nothing</option><option value=1>Reactivate Intel® AMT</option></select>")}if((features&1024)==0){if(a==2){b+=addHtmlValue('<span title="Client Initiated Remote Access">CIRA</span>',"<select id=dp20amtcira style=width:230px><option value=0>Don't configure</option><option value=1>Don't connect to server</option><option value=2>Connect to server</option></select>")}else{b+=addHtmlValue('<span title="Client Initiated Remote Access">CIRA</span>',"<select id=dp20amtcira style=width:230px><option value=0>Don't configure</option><option value=2>Connect to server</option></select>")}}b+='<br/><span style="font-size:10px">* Leave blank to assign a random password to each device.</span><br/>';if(currentMesh.mtype==2){if(a==2){b+='<span style="font-size:10px">This policy will not impact devices with Intel® AMT in ACM mode.</span><br/>';b+='<span style="font-size:10px">This is not a secure policy as agents will be performing activation.</span>'}else{b+='<span style="font-size:10px">During activation, the agent will have access to admin password infomation.</span>'}}}QH("dp20amtpolicydiv",b);setTimeout(dp20amtValidatePolicy,1)}function dp20amtValidatePolicy(){var a=true,d=Q("dp20amtpolicy").value;if((d==2)||(d==3)){var b=Q("dp20amtpolicypass").value,c=Q("dp20amtpolicypass2").value;a=((b===c)&&((b==="")?true:passwordcheck(b)))}QE("idx_dlgOkButton",a)}function p20editMeshAmtEx(){var b=parseInt(Q("dp20amtpolicy").value),a={type:b};if(b==2){a={type:b,password:Q("dp20amtpolicypass").value};if(currentMesh.mtype==2){a.badpass=parseInt(Q("dp20amtbadpass").value)}if((features&1024)==0){a.cirasetup=parseInt(Q("dp20amtcira").value)}else{a.cirasetup=1}}else{if(b==3){a={type:b,password:Q("dp20amtpolicypass").value};if((features&1024)==0){a.cirasetup=parseInt(Q("dp20amtcira").value)}else{a.cirasetup=1}}}meshserver.send({action:"meshamtpolicy",meshid:currentMesh._id,amtpolicy:a})}function p20showDeleteMeshDialog(){if(xxdialogMode){return false}var a='Are you sure you want to delete group "'+EscapeHtml(currentMesh.name)+'"? Deleting the device group will also delete all information about devices within this group.<br /><br />';a+="<label><input id=p20check type=checkbox onchange=p20validateDeleteMeshDialog() />Confirm</label>";setDialogMode(2,"Delete Group",3,p20showDeleteMeshDialogEx,a);p20validateDeleteMeshDialog();return false}function p20validateDeleteMeshDialog(){QE("idx_dlgOkButton",Q("p20check").checked)}function p20showDeleteMeshDialogEx(a,b){meshserver.send({action:"deletemesh",meshid:currentMesh._id,meshname:currentMesh.name})}function p20editmesh(a){if(xxdialogMode){return}var b=addHtmlValue("Name","<input id=dp20meshname style=width:230px maxlength=32 onchange=p20editmeshValidate() onkeyup=p20editmeshValidate(event) />");b+=addHtmlValue("Description","<div style=width:230px;margin:0;padding:0><textarea id=dp20meshdesc maxlength=1024 style=width:100%;resize:none></textarea></div>");setDialogMode(2,"Edit Device Group",3,p20editmeshEx,b);Q("dp20meshname").value=currentMesh.name;if(currentMesh.desc){Q("dp20meshdesc").value=currentMesh.desc}p20editmeshValidate();if(a==2){Q("dp20meshdesc").focus()}else{Q("dp20meshname").focus()}}function p20editmeshEx(){meshserver.send({action:"editmesh",meshid:currentMesh._id,meshname:Q("dp20meshname").value,desc:Q("dp20meshdesc").value})}function p20editmeshValidate(a){QE("idx_dlgOkButton",Q("dp20meshname").value.length>0);if(a&&a.key=="Enter"){Q("dp20meshdesc").focus()}}function p20editmeshconsent(){if(xxdialogMode){return}var b="",a=(currentMesh.consent)?currentMesh.consent:0;b+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px"><b>Desktop</b></div>';b+="<div><label><input type=checkbox id=d20flag1 "+((a&1)?"checked":"")+">Notify user</label></div>";b+="<div><label><input type=checkbox id=d20flag2 "+((a&8)?"checked":"")+">Prompt for user consent</label></div>";b+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:8px"><b>Terminal</b></div>';b+="<div><label><input type=checkbox id=d20flag3 "+((a&2)?"checked":"")+">Notify user</label></div>";b+="<div><label><input type=checkbox id=d20flag4 "+((a&16)?"checked":"")+">Prompt for user consent</label></div>";b+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:8px"><b>Files</b></div>';b+="<div><label><input type=checkbox id=d20flag5 "+((a&4)?"checked":"")+">Notify user</label></div>";b+="<div><label><input type=checkbox id=d20flag6 "+((a&32)?"checked":"")+">Prompt for user consent</label></div>";setDialogMode(2,"Edit Device Group User Consent",3,p20editmeshconsentEx,b);if(serverinfo.consent){if(serverinfo.consent&1){Q("d20flag1").checked=true}if(serverinfo.consent&8){Q("d20flag2").checked=true}if(serverinfo.consent&2){Q("d20flag3").checked=true}if(serverinfo.consent&16){Q("d20flag4").checked=true}if(serverinfo.consent&4){Q("d20flag5").checked=true}if(serverinfo.consent&32){Q("d20flag6").checked=true}QE("d20flag1",!(serverinfo.consent&1));QE("d20flag2",!(serverinfo.consent&8));QE("d20flag3",!(serverinfo.consent&2));QE("d20flag4",!(serverinfo.consent&16));QE("d20flag5",!(serverinfo.consent&4));QE("d20flag6",!(serverinfo.consent&32))}}function p20editmeshconsentEx(){var a=0;if(Q("d20flag1").checked){a+=1}if(Q("d20flag2").checked){a+=8}if(Q("d20flag3").checked){a+=2}if(Q("d20flag4").checked){a+=16}if(Q("d20flag5").checked){a+=4}if(Q("d20flag6").checked){a+=32}meshserver.send({action:"editmesh",meshid:currentMesh._id,consent:a})}function p20editmeshfeatures(){if(xxdialogMode){return}var a=(currentMesh.flags)?currentMesh.flags:0;var b="<div><label><input type=checkbox id=d20flag1 "+((a&1)?"checked":"")+">Remove device on disconnect</label><br></div>";b+="<div><label><input type=checkbox id=d20flag2 "+((a&2)?"checked":"")+">Sync server device name to hostname</label><br></div>";setDialogMode(2,"Edit Device Group Features",3,p20editmeshfeaturesEx,b)}function p20editmeshfeaturesEx(){var a=0;if(Q("d20flag1").checked){a+=1}if(Q("d20flag2").checked){a+=2}meshserver.send({action:"editmesh",meshid:currentMesh._id,flags:a})}function p20showAddMeshUserDialog(d){if(xxdialogMode){return false}var e="";if(d==null){e+="Allow users to manage this device group and devices in this group.";if(features&524288){e+=" Users need to login to this server once before they can be added to a device group."}e+="<br /><br /><div style='position:relative'>";e+=addHtmlValue("User Names",'<input id=dp20username style=width:230px maxlength=32 onchange=p20validateAddMeshUserDialog() onkeyup=p20validateAddMeshUserDialog() placeholder="user1, user2, user3" />');e+="<div id=dp20usersuggest class=suggestionBox style='top:30px;left:130px;display:none'></div>";e+="</div><br>"}else{d=decodeURIComponent(d);var c=d.split("/")[2];if(users&&users[d]){c=users[d].name}if(userinfo._id==d){c=userinfo.name}e+="Group permissions for user "+c+".<br /><br />"}e+='<div style="height:120px;overflow-y:scroll;border:1px solid gray">';e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20fulladmin>Full Administrator</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editmesh>Edit Device Group</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20manageusers>Manage Device Group Users</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20managecomputers>Manage Device Group Computers</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotecontrol>Remote Control</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remoteview style=margin-left:12px>Remote View Only</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20remotelimitedinput style=margin-left:12px>Limited Input Only</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noterminal style=margin-left:12px>No Terminal Access</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20nofiles style=margin-left:12px>No File Access</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20noamt style=margin-left:12px>No Intel® AMT</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshagentconsole>Mesh Agent Console</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20meshserverfiles>Server Files</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20wakedevices>Wake Devices</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20editnotes>Edit Device Notes</label><br>";e+="<label><input type=checkbox onchange=p20validateAddMeshUserDialog() id=p20limitevents>Show Only Own Events</label><br>";e+="</div>";if(d==null){setDialogMode(2,"Add Users to Device Group",3,p20showAddMeshUserDialogEx,e);Q("dp20username").focus()}else{setDialogMode(2,"Edit User Device Group Permissions",7,p20showAddMeshUserDialogEx,e,d);var a=currentMesh.links[userinfo._id].rights,b=currentMesh.links[d].rights;if(b==4294967295){Q("p20fulladmin").checked=true}else{if(b&1){Q("p20editmesh").checked=true}if(b&2){Q("p20manageusers").checked=true}if(b&4){Q("p20managecomputers").checked=true}if(b&8){Q("p20remotecontrol").checked=true;if(b&256){Q("p20remoteview").checked=true}if(b&512){Q("p20remotelimitedinput").checked=true}if(b&1024){Q("p20noterminal").checked=true}if(b&2048){Q("p20nofiles").checked=true}if(b&4096){Q("p20noamt").checked=true}}if(b&16){Q("p20meshagentconsole").checked=true}if(b&32){Q("p20meshserverfiles").checked=true}if(b&64){Q("p20wakedevices").checked=true}if(b&128){Q("p20editnotes").checked=true}if(b&8192){Q("p20limitevents").checked=true}}}p20validateAddMeshUserDialog();return false}function p20setname(b){b=decodeURIComponent(b);var c=Q("dp20username").value.split(",");for(var a in c){c[a]=c[a].trim()}c[c.length-1]=b;Q("dp20username").value=c.join(", ");p20validateAddMeshUserDialog();return false}function p20validateAddMeshUserDialog(){var g=currentMesh.links[userinfo._id].rights;var h=true,m=null;if(Q("dp20username")){Q("dp20username").value.split(",");for(var b in m){var l=m[b]=m[b].trim();if(l.length==0){h=false}else{if(l.indexOf('"')>=0){h=false}}}var j=false,a=false;if(users!=null){var c=m[m.length-1].trim(),d=c.toLowerCase(),e=[];if(c.length>0){for(var b in users){if(users[b].name===c){a=true;break}if(users[b].name.toLowerCase().indexOf(d)>=0){e.push(users[b].name);if(e.length>=8){break}}}if((a==false)&&(e.length>0)){var k="";for(var b in e){k+="<a href=# onclick='p20setname(\""+encodeURIComponent(e[b])+"\")'>"+e[b]+"</a><br />"}QH("dp20usersuggest",k);j=true}}}QV("dp20usersuggest",j)}QE("idx_dlgOkButton",h);QE("p20fulladmin",g==4294967295);QE("p20editmesh",(!Q("p20fulladmin").checked)&&(g==4294967295));QE("p20manageusers",!Q("p20fulladmin").checked);QE("p20managecomputers",!Q("p20fulladmin").checked);QE("p20remotecontrol",!Q("p20fulladmin").checked);QE("p20meshagentconsole",!Q("p20fulladmin").checked);QE("p20meshserverfiles",!Q("p20fulladmin").checked);QE("p20wakedevices",!Q("p20fulladmin").checked);QE("p20editnotes",!Q("p20fulladmin").checked);QE("p20limitevents",!Q("p20fulladmin").checked);QE("p20remoteview",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked);QE("p20remotelimitedinput",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked&&!Q("p20remoteview").checked);QE("p20noterminal",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked);QE("p20nofiles",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked);QE("p20noamt",!Q("p20fulladmin").checked&&Q("p20remotecontrol").checked)}function p20showAddMeshUserDialogEx(a,e){if(a==2){p20viewuserEx(a,e)}else{var d=0;if(Q("p20fulladmin").checked==true){d=4294967295}else{if(Q("p20editmesh").checked==true){d+=1}if(Q("p20manageusers").checked==true){d+=2}if(Q("p20managecomputers").checked==true){d+=4}if(Q("p20remotecontrol").checked==true){d+=8}if(Q("p20meshagentconsole").checked==true){d+=16}if(Q("p20meshserverfiles").checked==true){d+=32}if(Q("p20wakedevices").checked==true){d+=64}if(Q("p20editnotes").checked==true){d+=128}if(Q("p20remoteview").checked==true){d+=256}if(Q("p20noterminal").checked==true){d+=512}if(Q("p20nofiles").checked==true){d+=1024}if(Q("p20noamt").checked==true){d+=2048}if(Q("p20remotelimitedinput").checked==true){d+=4096}if(Q("p20limitevents").checked==true){d+=8192}}if(e==null){var g=Q("dp20username").value.split(","),h=[];for(var c in g){h.push(g[c].trim())}meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,usernames:h,meshadmin:d})}else{meshserver.send({action:"addmeshuser",meshid:currentMesh._id,meshname:currentMesh.name,usernames:[e.split("/")[2]],meshadmin:d})}}}function p20viewuser(g){if(xxdialogMode){return}var j=decodeURIComponent(g);var b=currentMesh.links[userinfo._id].rights,c=currentMesh.links[j].rights;if(((userinfo._id)!=j)&&(b==4294967295||(((b&2)!=0)&&(c!=4294967295)))){p20showAddMeshUserDialog(g)}else{var d="";if(c==4294967295){d=", Full Administrator (all rights)"}else{if((c&1)!=0){d+=", Edit Device Group"}if((c&2)!=0){d+=", Manage Device Group Users"}if((c&4)!=0){d+=", Manage Device Group Computers"}if((c&8)!=0){d+=", Remote Control"}if((c&16)!=0){d+=", Agent Console"}if((c&32)!=0){d+=", Server Files"}if((c&64)!=0){d+=", Wake Devices"}if((c&128)!=0){d+=", Edit Notes"}if(((c&8)!=0)&&(c&256)!=0){d+=", Remote View Only"}if(((c&8)!=0)&&(c&512)!=0){d+=", No Terminal"}if(((c&8)!=0)&&(c&1024)!=0){d+=", No Files"}if(((c&8)!=0)&&(c&2048)!=0){d+=", No Intel® AMT"}if(((c&8)!=0)&&((c&4096)!=0)&&((c&256)==0)){d+=", Limited Input"}if((c&8192)!=0){d+=", Self Events Only"}}d=d.substring(2);if(d==""){d="No Rights"}var e=j.split("/")[2];if(users&&users[j]){e=users[j].name}if(userinfo._id==j){e=userinfo.name}var a=1,h=addHtmlValue("User Name",EscapeHtml(decodeURIComponent(e)));if(j.split("/")[2]!=e){h+=addHtmlValue("User Identifier",EscapeHtml(j.split("/")[2]))}h+=addHtmlValue("Permissions",d);if(((userinfo._id)!=j)&&(b==4294967295||(((b&2)!=0)&&(c!=4294967295)))){a+=4}setDialogMode(2,"Device Group User",a,p20viewuserEx,h,j)}}function p20viewuserEx(a,c){if(a!=2){return}var b=c.split("/")[2];if(users&&users[c]){b=users[c].name}if(userinfo._id==c){b=userinfo.name}setDialogMode(2,"Remote Mesh User",3,p20viewuserEx2,"Confirm removal of user "+EscapeHtml(decodeURIComponent(b))+"?",c)}function p20deleteUser(a,b){haltEvent(a);p20viewuserEx(2,decodeURIComponent(b));return false}function p20viewuserEx2(a,b){meshserver.send({action:"removemeshuser",meshid:currentMesh._id,meshname:currentMesh.name,userid:b})}function p20editMeshNotify(){if(xxdialogMode){return false}var a=0;if(userinfo.links&&userinfo.links[currentMesh._id]&&userinfo.links[currentMesh._id].notify){a=userinfo.links[currentMesh._id].notify}var b="Notification settings must also be turned on in account settings.<br /><br />";b+="<div><label><input id=p20notifyIntelDeviceConnect type=checkbox />Device connections.</label></div>";b+="<div><label><input id=p20notifyIntelDeviceDisconnect type=checkbox />Device disconnections.</label></div>";b+="<div><label><input id=p20notifyIntelAmtKvmActions type=checkbox />Intel® AMT desktop and serial events.</label></div>";setDialogMode(2,"Notification Settings",3,p20editMeshNotifyEx,b);Q("p20notifyIntelDeviceConnect").checked=(a&2);Q("p20notifyIntelDeviceDisconnect").checked=(a&4);Q("p20notifyIntelAmtKvmActions").checked=(a&8);return false}function p20editMeshNotifyEx(){var a=0;a+=Q("p20notifyIntelDeviceConnect").checked?2:0;a+=Q("p20notifyIntelDeviceDisconnect").checked?4:0;a+=Q("p20notifyIntelAmtKvmActions").checked?8:0;meshserver.send({action:"changemeshnotify",meshid:currentMesh._id,notify:a})}var filetreelinkpath;var filetreelocation=[];function updateFiles(){QV("MainMenuMyFiles",((features&8)==0));if((features&8)!=0){return}var q="",r="",c='<a href=# style=cursor:pointer onclick="return p5folderup(0)">Root</a>',o="Root",y,k=filetree,m=1;var j=[],v=filetreelinkpath,b=[],a=document.getElementsByName("fc");for(var s=0;s<a.length;s++){if(a[s].checked){b.push(a[s].value)}}filetreelinkpath="";for(var s in filetreelocation){if((k.f!=null)&&(k.f[filetreelocation[s]]!=null)){j.push(filetreelocation[s]);o+=" / "+filetreelocation[s];if((m==1)){var B=filetreelocation[s].split("/");y=window.location+B[0]+"files/"+B[2];filetreelinkpath+=filetreelocation[s]}else{if(filetreelinkpath!=""){filetreelinkpath+="/"+filetreelocation[s];if(m>2){y+="/"+filetreelocation[s]}}}k=k.f[filetreelocation[s]];c+=' / <a href=# style=cursor:pointer onclick="return p5folderup('+m+')">'+(k.n!=null?k.n:filetreelocation[s])+"</a>";m++}else{break}}filetreelocation=j;var w=o.toLowerCase().startsWith("root / "+userinfo._id+" / public");var l=p5sort_files(k.f);for(var s in l){var d=l[s],u=d.n,A;A=u;if(u.length>70){A='<span title="'+EscapeHtml(u)+'">'+EscapeHtml(u.substring(0,70))+"...</span>"}else{A=EscapeHtml(u)}u=EscapeHtml(u);var g="";if(d.d!=null){var e=new Date(d.d),g=printDateTime(e)+" "}var n="";if(d.s!=null){n=getFileSizeStr(d.s)}var p="";if(d.t<3||d.t==4){var z=(d.t==1||d.t==4)?p5getQuotabar(d):"",C="";p="<div class=filelist file=999><input file=999 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+u+"'> <span style=float:right title=\""+C+'">'+z+"</span><span><div class=fileIcon"+d.t+' onclick=p5folderset("'+encodeURIComponent(d.nx)+'")></div><a href=# style=cursor:pointer onclick=\'return p5folderset("'+encodeURIComponent(d.nx)+"\")'>"+A+"</a></span></div>"}else{var t=A,x="";if(w){x=' (<a style=cursor:pointer title="Display public link" onclick=\'return p5showPublicLink("'+y+"/"+d.nx+"\")'>Link</a>)"}if(d.s>0){t='<a rel="noreferrer noopener" target="_blank" download href="downloadfile.ashx?link='+encodeURIComponent(filetreelinkpath+"/"+d.nx)+'">'+A+"</a>"+x}p="<div class=filelist file=3><input file=3 style=float:left name=fc class=fcb type=checkbox onchange=p5setActions() value='"+d.nx+"'> <span class=fsize>"+g+"</span><span style=float:right>"+n+"</span><span><div class=fileIcon"+d.t+"></div>"+t+"</span></div>"}if(d.t<3){q+=p}else{r+=p}}QH("p5rightOfButtons",p5getQuotabar(k));QH("p5files",q+r);QH("p5currentpath",c);QE("p5FolderUp",filetreelocation.length!=0);QV("p5PublicShare",w);if(v==filetreelinkpath){a=document.getElementsByName("fc");for(var s=0;s<a.length;s++){a[s].checked=(b.indexOf(a[s].value)>=0)}}p5setActions()}function getNiceSize(a){if(a<=0){return"Storage limit exceed"}if(a<2048){return a+" bytes remaining"}if(a<2097152){return Math.round(a/1024)+" kilobytes remaining"}if(a<2147483648){return Math.round(a/1024/1024)+" megabytes remaining"}return Math.round(a/1024/1024/1024)+" gigabytes remaining"}function getNiceSize2(a){if(a<=0){return"None"}if(a<2048){return a+" b"}if(a<2097152){return Math.round(a/1024)+" Kb"}if(a<2147483648){return Math.round(a/1024/1024)+" Mb"}return Math.round(a/1024/1024/1024)+" Gb"}function p5getQuotabar(a){while(a.t>1&&a.t!=4){a=a.parent}if((a.t!=1&&a.t!=4)||(a.maxbytes==null)){return""}var b=Math.floor(a.s/1024),c=(a.maxbytes-a.s);return'<span title="'+b+"k in "+a.c+" file"+(a.c>1?"s":"")+". "+(Math.floor(a.maxbytes/1024/1024))+'k maxinum">'+getNiceSize(c)+" <progress style=height:10px;width:100px value="+a.s+" max="+a.maxbytes+" /></span>"}function p5showPublicLink(a){setDialogMode(2,"Public Link",1,null,'<input type=text style=width:100% value="'+a+'" readonly />');return false}var sortorder;function p5sort_filename(c,d){if(c.ln>d.ln){return(1*sortorder)}if(c.ln<d.ln){return(-1*sortorder)}return 0}function p5sort_timestamp(c,d){if(c.d>d.d){return(1*sortorder)}if(c.d<d.d){return(-1*sortorder)}return 0}function p5sort_bysize(c,d){if(c.s==d.s){return p5sort_filename(c,d)}return(((c.s-d.s))*sortorder)}function p5sort_files(a){var c=[],d=Q("p5sortdropdown").value;for(var b in a){a[b].nx=b;if(a[b].n==null){a[b].n=b}a[b].ln=a[b].n.toLowerCase();c.push(a[b])}sortorder=1;if(d>3){sortorder=-1;d-=3}if(d==1){c.sort(p5sort_filename)}else{if(d==2){c.sort(p5sort_bysize)}else{if(d==3){c.sort(p5sort_timestamp)}}}return c}function p5setActions(){var a=getFileSelCount(),c=getFileCount(),b=getFileSelCount(false);QE("p5DeleteFileButton",(a>0)&&(filetreelocation.length>0));QE("p5NewFolderButton",filetreelocation.length>0);QE("p5UploadButton",filetreelocation.length>0);QE("p5RenameFileButton",(a==1)&&(filetreelocation.length>0));QE("p5SelectAllButton",c>0);Q("p5SelectAllButton").value=(a>0?"Select None":"Select All");QE("p5CutButton",(b>0)&&(a==b));QE("p5CopyButton",(b>0)&&(a==b));QE("p5PasteButton",(p5clipboard!=null)&&(p5clipboard.length>0)&&(filetreelocation.length>0))}function getFileSelCount(d){var a=0,b=document.getElementsByName("fc");for(var c=0;c<b.length;c++){if((b[c].checked)&&((d!=false)||(b[c].attributes.file.value=="3"))){a++}}return a}function getFileSelDirCount(){var a=0,b=document.getElementsByName("fc");for(var c=0;c<b.length;c++){if((b[c].checked)&&(b[c].attributes.file.value=="999")){a++}}return a}function getFileCount(){var a=0;var b=document.getElementsByName("fc");return b.length}function p5selectallfile(){var c=(getFileSelCount()==0),a=document.getElementsByName("fc");for(var b=0;b<a.length;b++){a[b].checked=c}p5setActions()}function setupBackPointers(d){if(d.f!=null){var b=0,a=0;for(var c in d.f){setupBackPointers(d.f[c]);d.f[c].parent=d;if(d.f[c].s){b+=d.f[c].s}if(d.f[c].c){a+=d.f[c].c}if(d.f[c].t==3){a++}}d.s=b;d.c=a}return d}function getFileSizeStr(a){if(a==1){return"1 byte"}return""+a+" bytes"}function p5folderup(a){if(a==null){filetreelocation.pop()}else{while(filetreelocation.length>a){filetreelocation.pop()}}updateFiles();return false}function p5folderset(a){filetreelocation.push(decodeURIComponent(a));updateFiles();return false}function p5createfolder(){setDialogMode(2,"New Folder",3,p5createfolderEx,"<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% />");focusTextBox("p5renameinput");p5fileNameCheck()}function p5createfolderEx(){meshserver.send({action:"fileoperation",fileop:"createfolder",path:filetreelocation,newfolder:Q("p5renameinput").value})}function p5deletefile(){var a=getFileSelCount(),b=(getFileSelDirCount()>0)?"<br /><br /><label><input type=checkbox id=p5recdeleteinput>Recursive delete</label><br>":"<input type=checkbox id=p5recdeleteinput style='display:none'>";setDialogMode(2,"Delete",3,p5deletefileEx,(a>1)?("Delete "+a+" selected items?"+b):("Delete selected item?"+b))}function p5deletefileEx(){var b=[],a=document.getElementsByName("fc");for(var c=0;c<a.length;c++){if(a[c].checked){b.push(a[c].value)}}meshserver.send({action:"fileoperation",fileop:"delete",path:filetreelocation,delfiles:b,rec:Q("p5recdeleteinput").checked})}function p5renamefile(){var c,a=document.getElementsByName("fc");for(var b=0;b<a.length;b++){if(a[b].checked){c=a[b].value}}setDialogMode(2,"Rename",3,p5renamefileEx,'<input type=text id=p5renameinput maxlength=64 onkeyup=p5fileNameCheck(event) style=width:100% value="'+c+'" />',{action:"fileoperation",fileop:"rename",path:filetreelocation,oldname:c});focusTextBox("p5renameinput");p5fileNameCheck()}function p5renamefileEx(a,c){c.newname=Q("p5renameinput").value;meshserver.send(c)}function p5fileNameCheck(a){var b=isFilenameValid(Q("p5renameinput").value);QE("idx_dlgOkButton",b);if((b==true)&&(a&&a.keyCode==13)){dialogclose(1)}}var isFilenameValid=(function(){var b=/^[^\\/:\*\?"<>\|]+$/,c=/^\./,d=/^(nul|prn|con|lpt[0-9]|com[0-9])(\.|$)/i;return function a(e){return b.test(e)&&!c.test(e)&&!d.test(e)&&(e[0]!=".")}})();function p5uploadFile(){setDialogMode(2,"Upload File",3,p5uploadFileEx,'<form method=post enctype=multipart/form-data action=uploadfile.ashx target=fileUploadFrame><input type=text name=link style=display:none id=p5uploadpath value="'+encodeURIComponent(filetreelinkpath)+'" /><input type=file name=files id=p5uploadinput style=width:100% multiple=multiple onchange="updateUploadDialogOk(\'p5uploadinput\')" /><input type=submit id=p5loginSubmit style=display:none /></form>');updateUploadDialogOk("p5uploadinput")}function p5uploadFileEx(){Q("p5loginSubmit").click()}function updateUploadDialogOk(a){QE("idx_dlgOkButton",Q(a).value!="")}var p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0;function p5copyFile(b){var a=document.getElementsByName("fc");p5clipboard=[];p5clipboardCut=b,p5clipboardFolder=Clone(filetreelocation);for(var c=0;c<a.length;c++){if((a[c].checked)&&(a[c].attributes.file.value=="3")){p5clipboard.push(a[c].value)}}p5updateClipview()}function p5pasteFile(){var a="";if((p5clipboard!=null)&&(p5clipboard.length>0)){a="Confim "+(p5clipboardCut==0?"copy":"move")+" of "+p5clipboard.length+" entrie"+((p5clipboard.length>1)?"s":"")+" to this location?"}setDialogMode(2,"Paste",3,p5pasteFileEx,a)}function p5pasteFileEx(){meshserver.send({action:"fileoperation",fileop:(p5clipboardCut==0?"copy":"move"),scpath:p5clipboardFolder,path:filetreelocation,names:p5clipboard});p5folderup(999);if(p5clipboardCut==1){p5clipboard=null,p5clipboardFolder=null,p5clipboardCut=0;p5updateClipview()}}function p5updateClipview(){var a="";if((p5clipboard!=null)&&(p5clipboard.length>0)){a="Holding "+p5clipboard.length+" entrie"+((p5clipboard.length>1)?"s":"")+" for "+(p5clipboardCut==0?"copy":"move")+', <a href=# onclick="return p5clearClip()" style=cursor:pointer>Clear</a>.'}QH("p5bottomstatus",a);p5setActions()}function p5clearClip(){p5clipboard=null;p5clipboardFolder=null;p5clipboardCut=0;p5updateClipview();return false}function p5fileDragDrop(b){if(xxdialogMode){return}haltEvent(b);QV("bigfail",false);QV("bigok",false);if(b.dataTransfer==null){return}var h=[];for(var j in b.dataTransfer.files){if((b.dataTransfer.files[j].size!=null)&&(b.dataTransfer.files[j].size!=0)){h.push(b.dataTransfer.files[j])}}if(h.length==0){return}var c=0;p5uploadFile();try{Q("p5uploadinput").files=b.dataTransfer.files}catch(d){c=1}if(c==0){p5uploadFileEx()}setDialogMode(0);if(c==1){if(filetreelocation.length==0){return}var k=[],n=[],p=[],a=[],m=h.length,o=0;for(var j=0;j<h.length;j++){o+=h[j].size}if(o>1300000){p5uploadFile();return}for(var j=0;j<h.length;j++){var l=new FileReader(),g=h[j];k.push(g.name);n.push(g.size);p.push(g.type);l.onload=function(e){a.push(e.target.result);if(--m==0){Q("p5fileDragName").value=k.join("*");Q("p5fileDragSize").value=n.join("*");Q("p5fileDragType").value=p.join("*");Q("p5fileDragData").value=a.join("*");Q("p5fileDragLink").value=encodeURIComponent(filetreelinkpath);Q("p5loginSubmit2").click()}};l.readAsDataURL(g)}}}var p5dragtimer=null;function p5fileDragOver(b){if(xxdialogMode){return}haltEvent(b);if(p5dragtimer!=null){clearTimeout(p5dragtimer);p5dragtimer=null}var a=true;if(filetreelocation.length==0){a=false}QV("bigok",a);QV("bigfail",!a)}function p5fileDragLeave(a){if(xxdialogMode){return}haltEvent(a);if(a.target.id!="p5filetable"){QV("bigfail",false);QV("bigok",false)}else{p5dragtimer=setTimeout(function(){QV("bigfail",false);QV("bigok",false);p5dragtimer=null},10)}}function eventMouseHover(a,b){a.children[1].classList.remove("g1s");a.children[2].style["background-color"]=((b==0)?"#c9c9c9":"#b9b9b9");a.children[3].classList.remove("g2s");if(b==1){a.children[1].classList.add("g1s");a.children[3].classList.add("g2s")}}function eventsUpdate(){var j="",a=null;for(var c in events){var b=events[c],h=new Date(b.time);if(b.msg){if(b.h==null){b.h=Math.random()}if(printDate(h)!=a){if(a!=null){j+="</table>"}a=printDate(h);j+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+a+"</td></tr>"}var d="si3";if(b.etype=="user"){d="m2"}if(b.etype=="server"){d="si3"}var e=EscapeHtml(b.msg).split("(R)").join("®");if(b.nodeid){var g=getNodeFromId(b.nodeid);if(g!=null){d="si"+g.icon;e="<a href=# onclick='gotoDevice(\""+b.nodeid+"\",10);haltEvent(event);'>"+EscapeHtml(g.name)+"</a> → "+e}}if(b.username){if((userinfo.siteadmin&2)&&(b.userid)){e="<a href=# onclick='gotoUser(\""+encodeURIComponent(b.userid)+"\");haltEvent(event);'>"+EscapeHtml(b.username)+"</a> → "+e}else{e=EscapeHtml(b.username)+" → "+e}}if(b.etype=="relay"||b.action=="relaylog"){d="relayIcon16"}j+="<tr onclick=showEventDetails("+b.h+",2) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+d+"></div></td><td class=g1> </td><td class=style10>"+printTime(h)+" - "+e+"</td><td class=g2> </td></tr><tr style=height:2px></tr>"}}if(a!=null){j+="</table>"}if(j==""){j="<br><i>No Events Found</i><br><br>"}QH("p3events",j)}function refreshEvents(){meshserver.send({action:"events",limit:parseInt(p3limitdropdown.value)})}function p3showDownloadEventsDialog(a){if(xxdialogMode){return}var b="Download the list of events with one of the file formats below.<br /><br />";b+=addHtmlValue("CSV Format",'<a href=# style=cursor:pointer onclick="return p3downloadEventsDialogCSV('+a+')">eventslist.csv</a>');b+=addHtmlValue("JSON Format",'<a href=# style=cursor:pointer onclick="return p3downloadEventsDialogJSON('+a+')">eventslist.json</a>');setDialogMode(2,"Event List Export",1,null,b,a)}function p3downloadEventsDialogCSV(d){var a,b;if(d==1){b=currentDeviceEvents}if(d==2){b=events}if(d==3){b=currentUserEvents}a="time, type, action, user, message\r\n";for(var c in b){a+='"'+b[c].time+'","'+b[c].etype+'","'+((b[c].action!=null)?b[c].action:"")+'","'+((b[c].username!=null)?b[c].username:"")+'","'+((b[c].msg!=null)?b[c].msg:"")+'"\r\n'}saveAs(new Blob([a],{type:"application/octet-stream"}),"eventslist.csv");return false}function p3downloadEventsDialogJSON(c){var d=[],a;if(c==1){a=currentDeviceEvents}if(c==2){a=events}if(c==3){a=currentUserEvents}for(var b in a){d.push(events[b])}saveAs(new Blob([JSON.stringify(d)],{type:"application/octet-stream"}),"eventslist.json");return false}function updateUsers(){QV("MainMenuMyUsers",(users!=null)&&((features&4)==0));QV("LeftMenuMyUsers",(users!=null)&&((features&4)==0));QV("UserNewAccountButton",((features&4)==0)&&(serverinfo.domainauth==false));if((users==null)||((features&4)!=0)){QH("p3users","");return}var h=[],e=100,c=0;for(var d in users){h.push(d)}h.sort();var k=Q("UserSearchInput").value.toLowerCase();var b=k;if(k.startsWith("email:")){k=null;b=b.substring(6)}else{if(k.startsWith("name:")){b=null;k=k.substring(5)}else{if(k.startsWith("e:")){k=null;b=b.substring(2)}else{if(k.startsWith("n:")){b=null;k=k.substring(2)}}}}var l="<table class=p3usersTable cellpadding=0 cellspacing=0>",a=true;l+="<th>Name<th style=width:80px>Groups<th style=width:120px>Last Access<th style=width:120px>Permissions";for(var d in h){var j=users[h[d]],g=null;if(wssessions!=null){g=wssessions[j._id]}if((g!=null)&&((k!=null)&&((k=="")||(j.name.toLowerCase().indexOf(k)>=0))||((b!=null)&&((j.email!=null)&&(j.email.toLowerCase().indexOf(b)>=0))))){if(e>0){if(a){l+="<tr><td class=userTableHeader colspan=4>Online Users";a=false}l+=addUserHtml(j,g);e--}else{c++}}}a=true;for(var d in h){var j=users[h[d]],g=null;if(wssessions!=null){g=wssessions[j._id]}if((g==null)&&((k!=null)&&((k=="")||(j.name.toLowerCase().indexOf(k)>=0))||((b!=null)&&((j.email!=null)&&(j.email.toLowerCase().indexOf(b)>=0))))){if(e>0){if(a){l+="<tr><td class=userTableHeader colspan=4>Offline Users";a=false}l+=addUserHtml(j,g);e--}else{c++}}}l+="</table>";if(c==1){l+="<br />1 more user not shown, use search box to look for users...<br />"}else{if(c>1){l+="<br />"+c+" more users not shown, use search box to look for users...<br />"}}if(e==100){l+="<br />No users found.<br />"}QH("p3users",l);if((currentUser!=null)&&(xxcurrentView==30)){gotoUser(encodeURIComponent(currentUser._id),true)}}function addUserHtml(n,l){var p="",b=" gray",e="m2",h="",k=(n.name!=userinfo.name),g="",j="";if(l!=null){b="";if(k){h='<span style=float:right;margin-top:1px;margin-right:4px title=Chat><a href=# onclick=userChat(event,"'+encodeURIComponent(n._id)+'","'+encodeURIComponent(n.name)+"\")><img src='images/icon-chat.png' height=16 width=16 style=padding-top:2px /></a></span>";h+="<span style=float:right;margin-top:1px;margin-left:4px;margin-right:4px title=Notify><a href=# onclick='return showUserAlertDialog(event,\""+encodeURIComponent(n._id)+"\")'><img src='images/icon-notify.png' height=16 width=16 style=padding-top:2px /></a></span>"}if(l==1){g+="1 session"}else{g+=l+" sessions"}}else{if(n.login){g+='<span title="Last login: '+printDateTime(new Date(n.login*1000))+'">'+printDate(new Date(n.login*1000))+"</span>"}}if(k){j+="<a href=# style=cursor:pointer onclick='return showUserAdminDialog(event,\""+encodeURIComponent(n._id)+"\")'>"}if((n.siteadmin!=null)&&((n.siteadmin&32)!=0)&&(n.siteadmin!=4294967295)){j+="Locked, "}j+="<span title='Server Permissions'>";var m=n.siteadmin&(4294967295-224);if((n.siteadmin==null)||(m==0)){j+="User"}else{if(m==8){j+="User + Files"}else{if(n.siteadmin==4294967295){j+="Administrator"}else{if((m&2)!=0){j+="Manager"}else{j+="Partial"}}}}if((n.siteadmin!=null)&&(n.siteadmin!=4294967295)&&((n.siteadmin&(64+128))!=0)){j+="*"}j+="</span>";if(k){j+="</a>"}var c=0;if(n.links){for(var d in n.links){c++}}var o=EscapeHtml(n.name),a="";if(serverinfo.emailcheck==true){a=((n.emailVerified!=true)?' <b style=color:red title="Email is not verified">✗</b>':' <b style=color:green title="Email is verified">✓</b>')}if(n.email!=null){if(((features&2097152)==0)||(n.email.toLowerCase()!=n.name.toLowerCase())){o+=", <a href=# onclick='return doemail(event,\""+n.email+"\")'>"+n.email+"</a>"+a}else{o+=" <a href=# onclick='return doemail(event,\""+n.email+'")\'><img src="images/mail12.png" height=9 width=12 title="Send email to user" style="margin-top:2px" /></a>'+a}}if((n.otpsecret>0)||(n.otphkeys>0)){o+=' <img src="images/key12.png" height=12 width=11 title="2nd factor authentication enabled" style="margin-top:2px" />'}if((n.siteadmin!=null)&&((n.siteadmin&32)!=0)&&(n.siteadmin!=4294967295)){o+=' <img src="images/padlock12.png" height=12 width=8 title="Account is locked" style="margin-top:2px" />'}p+="<tr tabindex=0 onmouseover=userMouseHover(this,1) onmouseout=userMouseHover(this,0) onkeypress=\"if (event.key=='Enter') gotoUser('"+encodeURIComponent(n._id)+'\')"><td style=cursor:pointer onclick=gotoUser("'+encodeURIComponent(n._id)+'")>';p+="<div class=bar>";p+='<div class=baricon><div class="'+e+b+'"></div></div>';p+="<div class=g1></div><div class=g2></div>";p+="<div><span>"+o+"</span>"+h+"</div></div><td style=text-align:center>"+c+"<td style=text-align:center>"+g+"<td style=text-align:center>"+j;return p}function userMouseHover(b,c){var a=b.children[0].children[0];a.children[1].classList.remove("g1s");a.children[2].classList.remove("g2s");if(c==1){a.children[1].classList.add("g1s");a.children[2].classList.add("g2s")}b.children[0].children[0].style["background-color"]=((c==0)?"#c9c9c9":"#b9b9b9")}function userChat(a,d,b){haltEvent(a);var c="/messenger?id=meshmessenger/"+d+"/"+encodeURIComponent(userinfo._id)+"&title="+b;if((authCookie!=null)&&(authCookie!="")){c+="&auth="+authCookie}window.open(c,"meshmessenger:"+d);meshserver.send({action:"meshmessenger",userid:decodeURIComponent(d)});return false}function showUserAlertDialog(a,b){if(xxdialogMode){return}haltEvent(a);setDialogMode(2,"Notify "+EscapeHtml(users[decodeURIComponent(b)].name),3,showUserAlertDialogEx,'Send a text notification to this user.<textarea id=d2notifyText maxlength=2048 style="width:100%;height:184px;resize:none"></textarea>',b);Q("d2notifyText").focus();return false}function showUserAlertDialogEx(a,b){meshserver.send({action:"notifyuser",userid:decodeURIComponent(b),msg:Q("d2notifyText").value})}function doemail(b,a){if(xxdialogMode){return false}haltEvent(b);window.open("mailto:"+a);return false}function p4batchAccountCreate(){if(xxdialogMode){return}var a='Create many accounts at once by importing a JSON file with the following format:<br /><pre>[\r\n {"user":"x1","pass":"x","email":"x1@x"},\r\n {"user":"x2","pass":"x","resetNextLogin":true}\r\n]</pre><input style=width:370px type=file id=d4importFile accept=".json" onchange=p4batchAccountCreateValidate() />';setDialogMode(2,"User Account Import",3,p4batchAccountCreateEx,a);QE("idx_dlgOkButton",false)}function p4batchAccountCreateValidate(){QE("idx_dlgOkButton",Q("d4importFile").value!=null)}function p4batchAccountCreateEx(){var a=new FileReader();a.onload=function(g){var d=null;try{d=JSON.parse(g.target.result)}catch(b){setDialogMode(2,"User Account Import",1,null,"Invalid JSON file: "+b+".");return}if((d!=null)&&(Array.isArray(d))){var e=true;for(var c in d){if((typeof d[c].user!="string")||(d[c].user.length<1)||(d[c].user.length>64)){e=false}if((typeof d[c].pass!="string")||(d[c].pass.length<1)||(d[c].pass.length>256)){e=false}if(checkPasswordRequirements(d[c].pass,passRequirements)==false){e=false}if((d[c].email!=null)&&((typeof d[c].email!="string")||(d[c].email.length<1)||(d[c].email.length>128))){e=false}}if(e==false){setDialogMode(2,"User Account Import",1,null,"Invalid JSON file format.")}else{meshserver.send({action:"adduserbatch",users:d})}}else{setDialogMode(2,"User Account Import",1,null,"Invalid JSON file format.")}};a.readAsText(Q("d4importFile").files[0])}function p4downloadUserInfo(){if(xxdialogMode){return}var a="Download the list of users with one of the file formats below.<br /><br />";a+=addHtmlValue("CSV Format","<a href=# style=cursor:pointer onclick='return p4downloadUserInfoCSV()'>userlist.csv</a>");a+=addHtmlValue("JSON Format","<a href=# style=cursor:pointer onclick='return p4downloadUserInfoJSON()'>userlist.json</a>");setDialogMode(2,"User List Export",1,null,a)}function p4downloadUserInfoCSV(){var a="id, name, email, creation, lastlogin, groups, authfactors\r\n";for(var c in users){var d=false,b=[];if((users[c].otpsecret>0)||(users[c].otphkeys>0)){d=true;if(users[c].otpsecret>0){b.push("AuthApp")}if(users[c].otphkeys>0){b.push("SecurityKey")}if(users[c].otpkeys>0){b.push("BackupCodes")}}a+='"'+users[c]._id+'","'+users[c].name+'","'+(users[c].email?users[c].email:"")+'","'+(users[c].creation?new Date(users[c].creation*1000):"")+'","'+(users[c].login?new Date(users[c].login*1000):"")+'","'+(users[c].groups?users[c].groups.join(","):"")+'","'+(d?b.join(","):"")+'"\r\n'}saveAs(new Blob([a],{type:"application/octet-stream"}),"userlist.csv");return false}function p4downloadUserInfoJSON(){var b=[];for(var a in users){b.push(users[a])}saveAs(new Blob([JSON.stringify(b)],{type:"application/octet-stream"}),"userlist.json");return false}function showUserBroadcastDialog(){if(xxdialogMode){return}var a='Broadcast a message to all connected users.<textarea id=broadcastMessage value="" maxlength="256"/></textarea>';setDialogMode(2,"Broadcast Message",3,showUserBroadcastDialogEx,a);Q("broadcastMessage").focus()}function showUserBroadcastDialogEx(){meshserver.send({action:"userbroadcast",msg:Q("broadcastMessage").value})}function showCreateNewAccountDialog(){if(xxdialogMode){return}var d="";if((features&2097152)==0){d+=addHtmlValue("Name","<input id=p4name maxlength=64 onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />")}d+=addHtmlValue("Email","<input id=p4email maxlength=256 onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />");d+=addHtmlValue("Password","<input id=p4pass1 type=password maxlength=256 onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />");d+=addHtmlValue("Password","<input id=p4pass2 type=password maxlength=256 onchange=showCreateNewAccountDialogValidate() onkeyup=showCreateNewAccountDialogValidate() />");d+="<div><label><input id=p4randomPassword onchange=showCreateNewAccountDialogValidate() type=checkbox />Randomize the password.</label></div>";d+="<div><label><input id=p4resetNextLogin onchange=showCreateNewAccountDialogValidate() type=checkbox />Force password reset on next login.</label></div>";if(serverinfo.emailcheck){d+="<div><label><input id=p4verifiedEmail onchange=showCreateNewAccountDialogValidate() type=checkbox />Email is verified.</label></div>";d+="<div><label><input id=p4invitationEmail type=checkbox />Send invitation email.</label></div>"}if(passRequirements){var b=[],c=0;for(var a in passRequirements){if((a!="reset")&&(a!="hint")){b.push(a+":"+passRequirements[a]);c++}}if(c>0){d+="<div style=font-size:x-small;padding:6px>Requirements: "+b.join(", ")+".</div>"}}setDialogMode(2,"Create Account",3,showCreateNewAccountDialogEx,d);showCreateNewAccountDialogValidate();if((features&2097152)==0){Q("p4name").focus()}else{Q("p4email").focus()}}function showCreateNewAccountDialogValidate(c){var b=validateEmail(Q("p4email").value);if(serverinfo.emailcheck){QE("p4verifiedEmail",b);QE("p4invitationEmail",b&&Q("p4resetNextLogin").checked&&Q("p4verifiedEmail").checked);if(b==false){Q("p4verifiedEmail").checked=false}if((Q("p4resetNextLogin").checked==false)||(Q("p4verifiedEmail").checked==false)){Q("p4invitationEmail").checked=false}}QE("p4pass1",!Q("p4randomPassword").checked);QE("p4pass2",!Q("p4randomPassword").checked);if((c==null)&&(Q("p4email").value.length>0)&&(b==false)){QE("idx_dlgOkButton",false);return}var a=true;if((features&2097152)==0){a&=(!Q("p4name")||((Q("p4name").value.length>0)&&(Q("p4name").value.indexOf(" ")==-1)))}if(Q("p4randomPassword").checked==false){a&=(Q("p4pass1").value.length>0&&Q("p4pass1").value==Q("p4pass2").value&&checkPasswordRequirements(Q("p4pass1").value,passRequirements))}if(a&&passRequirements){if(checkPasswordRequirements(Q("p4pass1").value,passRequirements)==false){a=false}}QE("idx_dlgOkButton",a)}function showCreateNewAccountDialogEx(){var a=((features&2097152)==0)?Q("p4name").value:Q("p4email").value;var b={action:"adduser",username:a,email:Q("p4email").value,pass:Q("p4pass1").value,resetNextLogin:Q("p4resetNextLogin").checked,randomPassword:Q("p4randomPassword").checked};if(serverinfo.emailcheck){b.emailVerified=Q("p4verifiedEmail").checked;b.emailInvitation=Q("p4invitationEmail").checked}meshserver.send(b)}function showUserGroupDialog(a,d){if(xxdialogMode){return}haltEvent(a);d=decodeURIComponent(d);var c=users[d.toLowerCase()],b="";if(c.groups!=null){b=c.groups.join(", ")}var g="Enter a comma seperate list of administrative realms names.<br /><br />";g+=addHtmlValue("Realms",'<input id=dp4usergroups style=width:230px value="'+b+'" placeholder="Name1, Name2, Name3" maxlength=256 onchange=p4validateUserGroups() onkeyup=p4validateUserGroups() />');setDialogMode(2,"Administrative Realms",3,showUserGroupDialogEx,g,c);focusTextBox("dp4usergroups");p4validateUserGroups();return false}function p4validateUserGroups(){var b=Q("dp4usergroups").value;var e=0,c=b.indexOf('"')+b.indexOf("/")+b.indexOf(">")+b.indexOf("<")+b.indexOf("'");var a=b.split(",");for(var d in a){if(a[d].trim().length==0){e++}}QE("idx_dlgOkButton",(b=="")||((c==-5)&&(e<1)))}function showUserGroupDialogEx(a,h){var d=Q("dp4usergroups").value,b=d.split(","),c=[];for(var e in b){var k=b[e].trim();if(k.length>0){c.push(k)}}meshserver.send({action:"edituser",id:h._id,groups:c})}function showUserAdminDialog(a,c){if(xxdialogMode){return}haltEvent(a);c=decodeURIComponent(c);var d="<div><div id=d2AdminPermissions>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_fileaccess>Server Files</label>, <input type=number onchange=showUserAdminDialogValidate() maxlength=10 id=ua_fileaccessquota>k max, blank for default<br><hr/>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_fulladmin>Full Administrator</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverbackup>Server Backup</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverrestore>Server Restore</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_serverupdate>Server Updates</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_manageusers>Manage Users</label><br>";d+="<hr/></div><label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_lockedaccount>Lock Account</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_nonewgroups>No New Device Groups</label><br>";d+="<label><input type=checkbox onchange=showUserAdminDialogValidate() id=ua_nomeshcmd>No Tools (MeshCmd/Router)</label><br>";d+="</div>";var b=users[c.toLowerCase()];setDialogMode(2,"Server Permissions",3,showUserAdminDialogEx,d,b);if(b.siteadmin&&b.siteadmin!=0){Q("ua_fulladmin").checked=(b.siteadmin==4294967295);Q("ua_serverbackup").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&1)!=0));Q("ua_manageusers").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&2)!=0));Q("ua_serverrestore").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&4)!=0));Q("ua_fileaccess").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&8)!=0));Q("ua_serverupdate").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&16)!=0));Q("ua_lockedaccount").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&32)!=0));Q("ua_nonewgroups").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&64)!=0));Q("ua_nomeshcmd").checked=((b.siteadmin!=4294967295)&&((b.siteadmin&128)!=0))}QE("ua_fulladmin",userinfo.siteadmin==4294967295);QE("ua_serverbackup",userinfo.siteadmin==4294967295);QE("ua_manageusers",userinfo.siteadmin==4294967295);QE("ua_serverrestore",userinfo.siteadmin==4294967295);QE("ua_fileaccess",userinfo.siteadmin==4294967295);QE("ua_fileaccessquota",userinfo.siteadmin==4294967295);QE("ua_serverupdate",userinfo.siteadmin==4294967295);QV("d2AdminPermissions",userinfo.siteadmin==4294967295);QE("ua_lockedaccount",(userinfo.siteadmin&2)&&(b.siteadmin!=4294967295)&&(userinfo._id!=b._id));QE("ua_nonewgroups",(userinfo.siteadmin&2)&&(b.siteadmin!=4294967295)&&(userinfo._id!=b._id));QE("ua_nomeshcmd",(userinfo.siteadmin&2)&&(b.siteadmin!=4294967295)&&(userinfo._id!=b._id));Q("ua_fileaccessquota").value=(b.quota!=null)?(b.quota/1024):"";showUserAdminDialogValidate();return false}function showUserAdminDialogValidate(){if(userinfo.siteadmin==4294967295){QE("ua_serverbackup",!Q("ua_fulladmin").checked);QE("ua_manageusers",!Q("ua_fulladmin").checked);QE("ua_serverrestore",!Q("ua_fulladmin").checked);QE("ua_fileaccess",!Q("ua_fulladmin").checked);QE("ua_serverupdate",!Q("ua_fulladmin").checked);QE("ua_lockedaccount",!Q("ua_fulladmin").checked);QE("ua_nonewgroups",!Q("ua_fulladmin").checked);QE("ua_nomeshcmd",!Q("ua_fulladmin").checked);QE("ua_fileaccessquota",Q("ua_fileaccess").checked&&!Q("ua_fulladmin").checked)}}function showUserAdminDialogEx(a,d){var c=0,b=parseInt(Q("ua_fileaccessquota").value);if(Q("ua_fulladmin").checked==true){c=4294967295}else{if(Q("ua_serverbackup").checked==true){c+=1}if(Q("ua_manageusers").checked==true){c+=2}if(Q("ua_serverrestore").checked==true){c+=4}if(Q("ua_fileaccess").checked==true){c+=8}if(Q("ua_serverupdate").checked==true){c+=16}if(Q("ua_lockedaccount").checked==true){c+=32}if(Q("ua_nonewgroups").checked==true){c+=64}if(Q("ua_nomeshcmd").checked==true){c+=128}}var e={action:"edituser",id:d._id,siteadmin:c};if(isNaN(b)==false){e.quota=(b*1024)}meshserver.send(e)}function onUserSearchInputChanged(){updateUsers()}var currentUser=null;function gotoUser(r,g){if(xxdialogMode&&!g){return}var p=currentUser=users[decodeURIComponent(r)];if(p==null){setDialogMode(0);go(4);return}QH("p30userName",p.name);QH("p31userName",p.name);var o=(p.name==userinfo.name),a=0;if(wssessions!=null&&wssessions[p._id]){a=wssessions[p._id]}Q("MainUserImage").classList.remove("gray");if(a==0){Q("MainUserImage").classList.add("gray")}var l=[],n="";if((p.siteadmin!=null)&&((p.siteadmin&32)!=0)&&(p.siteadmin!=4294967295)){n='<img src="images/padlock12.png" height=12 width=8 title="Account is locked" style="margin-top:2px" /> ';l.push("Locked account")}if((p.siteadmin==null)||((p.siteadmin&(4294967295-224))==0)){l.push("No server rights")}else{if(p.siteadmin==8){l.push("Access to server files")}else{if(p.siteadmin==4294967295){l.push("Full administrator")}else{l.push("Partial rights")}}}if((p.siteadmin!=null)&&(p.siteadmin!=4294967295)&&((p.siteadmin&(64+128))!=0)){l.push("Restrictions")}var s="<div style=min-height:80px><table style=width:100%>";var c=p.email?EscapeHtml(p.email):"<i>Not set</i>",d="";if(serverinfo.emailcheck){d=((p.emailVerified==true)?'<b style=color:green;cursor:pointer title="Email is verified">✓</b> ':'<b style=color:red;cursor:pointer title="Email not verified">✗</b> ')}if(p.name.toLowerCase()!=p._id.split("/")[2]){s+=addDeviceAttribute("User Identifier",p._id.split("/")[2])}if(((features&2097152)==0)&&((p.siteadmin!=4294967295)||(userinfo.siteadmin==4294967295))){s+=addDeviceAttribute("Email",d+'<a href=# style=cursor:pointer onclick=p30showUserEmailChangeDialog(event,"'+r+'")>'+c+"</a> <a href=# style=cursor:pointer onclick='return doemail(event,\""+p.email+'")\'><img class=hoverButton src="images/link1.png" /></a>')}else{s+=addDeviceAttribute("Email",d+c+" <a href=# style=cursor:pointer onclick='return doemail(event,\""+p.email+'")\'><img class=hoverButton src="images/link1.png" /></a>')}s+=addDeviceAttribute("Server Rights",n+"<a href=# style=cursor:pointer onclick='return showUserAdminDialog(event,\""+r+"\")'>"+l.join(", ")+"</a>");if(p.quota){s+=addDeviceAttribute("Server Quota",EscapeHtml(parseInt(p.quota)/1024)+" k")}s+=addDeviceAttribute("Creation",printDateTime(new Date(p.creation*1000)));if(p.login){s+=addDeviceAttribute("Last Login",printDateTime(new Date(p.login*1000)))}if(p.passchange==-1){s+=addDeviceAttribute("Password","Will be changed on next login.")}else{if(p.passchange){s+=addDeviceAttribute("Password","Last changed: "+printDateTime(new Date(p.passchange*1000)))}}var j=0,k="<i>None<i>";if(p.links){for(var h in p.links){j++}if(j==1){k="1 group"}else{if(j>1){k=j+" groups"}}}s+=addDeviceAttribute("Device Groups",k);if((userinfo.siteadmin==4294967295)||(userinfo.siteadmin&2)){var q="<i>None</i>";if(p.groups){q="";for(var h in p.groups){q+='<span class="tagSpan">'+p.groups[h]+"</span>"}}s+=addDeviceAttribute("Admin Realms",addLinkConditional(q,'showUserGroupDialog(event,"'+r+'")',(userinfo.siteadmin==4294967295)||((userinfo.groups==null)&&(userinfo._id!=p._id)&&(p.siteadmin!=4294967295))))}var m=0;if((p.otpsecret>0)||(p.otphkeys>0)){m=1;var e=[];if(p.otpsecret>0){e.push("Authentication App")}if(p.otphkeys>0){e.push("Security Key")}if(p.otpkeys>0){e.push("Backup Codes")}s+=addDeviceAttribute("Security",'<img src="images/key12.png" height=12 width=11 title="2nd factor authentication enabled" style="margin-top:2px" /> '+e.join(", "))}s+="</table></div><br />";s+='<input type=button value=Notes title="View notes about this user" onclick=showNotes(false,"'+r+'") />';if(!o&&(a>0)){s+='<input type=button value=Notify title="Send user notification" onclick=showUserAlertDialog(event,"'+r+'") />'}QH("p30html",s);drawUserTimeline();var b=true;if(p._id==userinfo._id){b=false}if(p.siteadmin&&p.siteadmin>0&&userinfo.siteadmin!=4294967295){b=false}s="<div style=float:right;font-size:x-small>";if(b){s+="<a href=# style=cursor:pointer onclick='return p30showDeleteUserDialog()' title=\"Remove this user\">Delete User</a>"}s+="</div><div style=font-size:x-small>";if(userinfo.siteadmin==4294967295){s+="<a href=# style=cursor:pointer onclick='return p30showUserChangePassDialog("+m+')\' title="Change the password for this user">Change Password</a>'}s+="</div><br>";QH("p30html3",s);s="";if(a==1){s="1 active session"}else{if(a>1){s=a+" active sessions"}}QH("MainUserState",s);go(30);QH("p31events","");refreshUsersEvents()}function p30showUserEmailChangeDialog(a){if(xxdialogMode){return false}var b="";b+=addHtmlValue("Email","<input id=dp30email style=width:230px maxlength=32 onchange=p30validateEmail() onkeyup=p30validateEmail() />");if(serverinfo.emailcheck){b+=addHtmlValue("Status","<select id=dp30verified style=width:230px onchange=p30validateEmail()><option value=0>Not verified</option><option value=1>Verified</option></select>")}setDialogMode(2,"Change Email for "+EscapeHtml(currentUser.name),3,p30showUserEmailChangeDialogEx,b);Q("dp30email").focus();Q("dp30email").value=(currentUser.email?currentUser.email:"");if(serverinfo.emailcheck){Q("dp30verified").value=currentUser.emailVerified?1:0}p30validateEmail();return false}function p30validateEmail(){var a=Q("dp30email").value,b=a.split("@");b=(b.length==2)&&(b[0].length>0)&&(b[1].split(".").length>1)&&(b[1].length>2)&&(a.length<1024)&&((a!=userinfo.email)||((serverinfo.emailcheck==true)&&(Q("dp30verified").value!=(userinfo.emailVerified?1:0))));QE("idx_dlgOkButton",b)}function p30showUserEmailChangeDialogEx(){var a={action:"edituser",id:currentUser._id,email:Q("dp30email").value};if(serverinfo.emailcheck){a.emailVerified=(Q("dp30verified").value==1)}meshserver.send(a)}function p30showUserChangePassDialog(b){if(xxdialogMode){return}var e="";e+=addHtmlValue("Password","<input id=p4pass1 type=password style=width:230px maxlength=256 onchange=showCreateNewAccountDialogValidate(1) onkeyup=p30showUserChangePassDialogValidate(1)></input>");e+=addHtmlValue("Password","<input id=p4pass2 type=password style=width:230px maxlength=256 onchange=showCreateNewAccountDialogValidate(1) onkeyup=p30showUserChangePassDialogValidate(1)></input>");if(features&65536){e+=addHtmlValue("Password hint","<input id=p4hint type=text style=width:230px maxlength=256></input>")}if(passRequirements){var c=[],d=0;for(var a in passRequirements){if((a!="reset")&&(a!="hint")){c.push(a+":"+passRequirements[a]);d++}}if(d>0){e+="<div style=font-size:x-small;padding:6px>Requirements: "+c.join(", ")+".</div>"}}e+="<div><label><input id=p4resetNextLogin type=checkbox />Force password reset on next login.</label></div>";if(b==1){e+="<div><label><input id=p4twoFactorRemove type=checkbox />Remove all 2nd factor authentication.</label></div>"}setDialogMode(2,"Change Password for "+EscapeHtml(currentUser.name),3,p30showUserChangePassDialogEx,e,b);p30showUserChangePassDialogValidate();Q("p4pass1").focus();if(currentUser.passchange==-1){Q("p4resetNextLogin").checked=true}}function p30showUserChangePassDialogValidate(){var a=true;if((Q("p4pass1").value!="")||(Q("p4pass2").value!="")){if(Q("p4pass1").value!=Q("p4pass2").value){a=false}else{if(passRequirements){if(checkPasswordRequirements(Q("p4pass1").value,passRequirements)==false){a=false}}}}QE("idx_dlgOkButton",a)}function p30showUserChangePassDialogEx(a,e){var d=false;if((e==1)&&(Q("p4twoFactorRemove").checked==true)){d=true}if(Q("p4pass1").value==Q("p4pass2").value){var c={action:"changeuserpass",userid:currentUser._id,pass:Q("p4pass1").value,removeMultiFactor:d,resetNextLogin:Q("p4resetNextLogin").checked};if(features&65536){c.hint=Q("p4hint").value}meshserver.send(c)}}function p30showDeleteUserDialog(){if(xxdialogMode){return}setDialogMode(2,"Delete User "+EscapeHtml(currentUser.name),3,p30showDeleteUserDialogEx,"Confirm deletion of user "+EscapeHtml(currentUser.name)+"?")}function p30showDeleteUserDialogEx(){meshserver.send({action:"deleteuser",userid:currentUser._id,username:currentUser.name})}function drawUserTimeline(){var s=null,o=Date.now();s=[];var e=new Date();e.setHours(0,0,0,0);e=new Date(e.getTime()-(1000*60*60*24*6));var u=e.getTime();var t=[];if(s!=null&&s.length>1){t.push([0,s[1],s[0]]);var c=s[1];for(var m=2;m<s.length;m+=2){var p=s[m],k=o;if(s.length>(m+1)){k=s[m+1]}t.push([c,c+k,p]);c=c+k}}var z="",b=1,h=new Date();h.setHours(0,0,0,0);for(var m=0;m<7;m++){var g="",q=h.getTime(),l=q+(1000*60*60*24);for(var n in t){var a=t[n];if(isTimeBlockInside(q,l,a[0],a[1])==true){var w=Math.max(q,a[0]);var r=Math.min(Math.min(l,a[1]),o);var y=Math.round((r-w)/112794);if(y>0){var v=powerStateStrings2[a[2]]+" from "+printTime(new Date(w))+" to "+printTime(new Date(r))+".";g+='<div title="'+v+'" style=display:table-cell;width:'+y+"px;background-color:"+powerColor(a[2])+";height:16px></div>"}}}z+="<tr style="+(((b%2)==0)?"background-color:#DDD":"")+"><td><div> "+printDate(h)+"<div></div></div></td><td><div>"+g+"</div></td></tr>";++b;h=new Date(h.getTime()-(1000*60*60*24))}QH("p30html2",'<table style="color:black;background-color:#EEE;border-color:#AAA;border-width:1px;border-style:solid;border-collapse:collapse" border=0 cellpadding=2 cellspacing=0 width=100%><tbody><tr style=background-color:#AAAAAA;font-weight:bold><th scope=col style=text-align:center;width:150px>Day</th><th scope=col style=text-align:center>7 Day Login State</th></tr>'+z+"</tbody></table>")}var currentUserEvents=null;function userEventsUpdate(){var j="",a=null;for(var c in currentUserEvents){var b=currentUserEvents[c],h=new Date(b.time);if(b.msg){if(b.h==null){b.h=Math.random()}if(printDate(h)!=a){if(a!=null){j+="</table>"}a=printDate(h);j+="<table class=p3eventsTable cellpadding=0 cellspacing=0><tr><td colspan=4 class=DevSt>"+a+"</td></tr>"}var d="si3";if(b.etype=="user"){d="m2"}if(b.etype=="server"){d="si3"}var e=EscapeHtml(b.msg).split("(R)").join("®");if(b.nodeid){var g=getNodeFromId(b.nodeid);if(g!=null){d="si"+g.icon;e="<a href=# onclick='gotoDevice(\""+b.nodeid+"\",10);haltEvent(event);'>"+EscapeHtml(g.name)+"</a> → "+e}}if(b.username&&(b.username!=currentUser.name)){if((userinfo.siteadmin&2)&&(b.userid)){e="<a href=# onclick='gotoUser(\""+encodeURIComponent(b.userid)+"\");haltEvent(event);'>"+EscapeHtml(b.username)+"</a> → "+e}else{e=EscapeHtml(b.username)+" → "+e}}if(b.etype=="relay"||b.action=="relaylog"){d="relayIcon16"}j+="<tr onclick=showEventDetails("+b.h+",3) onmouseover=eventMouseHover(this,1) onmouseout=eventMouseHover(this,0) style=cursor:pointer><td style=width:18px><div class="+d+"></div></td><td class=g1> </td><td class=style10>"+printTime(h)+" - "+e+"</td><td class=g2> </td></tr><tr style=height:2px></tr>"}}if(a!=null){j+="</table>"}if(j==""){j="<br><i>No Events Found</i><br><br>"}QH("p31events",j)}function refreshUsersEvents(){meshserver.send({action:"events",limit:parseInt(p31limitdropdown.value),user:currentUser.name})}function d3init(){Q("d3localFile").value="";d3modechange()}function d3modechange(){var a=Q("d3uploadMode").value;QV("d3localmode",a==1);QV("d3servermode",a==2);if(a==1){d3setActions()}else{d3updatefiles()}}var d3filetreelinkpath;var d3filetreelocation=[];function d3updatefiles(){if(Q("d3uploadMode").value==1){return}var m="",n="",e=filetree,j=1;var c=[],r=d3filetreelinkpath,b=[],a=document.getElementsByName("fc");for(var o=0;o<a.length;o++){if(a[o].checked){b.push(a[o].value)}}d3filetreelinkpath="";for(var o in d3filetreelocation){if((e.f!=null)&&(e.f[d3filetreelocation[o]]!=null)){c.push(d3filetreelocation[o]);if((j==1)){var t=d3filetreelocation[o].split("/");publicPath=window.location+t[0]+"files/"+t[2];if(d3filetreelocation[o]===userinfo._id){d3filetreelinkpath+="self"}else{d3filetreelinkpath+=(t[0]+"/"+t[2])}}else{if(d3filetreelinkpath!=""){d3filetreelinkpath+="/"+d3filetreelocation[o];if(j>2){publicPath+="/"+d3filetreelocation[o]}}}e=e.f[d3filetreelocation[o]];j++}else{break}}d3filetreelocation=c;var g=p5sort_files(e.f);for(var o in g){var d=g[o],q=d.n,s;s=q;if(q.length>70){s='<span title="'+EscapeHtml(q)+'">'+EscapeHtml(q.substring(0,70))+"...</span>"}else{s=EscapeHtml(q)}q=EscapeHtml(q);var k="";if(d.s!=null){k=getFileSizeStr(d.s)}var l="";if(d.t<3){var u="";l='<div class=filelist file=999><span style=float:right title="'+u+'"></span><span><div class=fileIcon'+d.t+' onclick=d3folderset("'+encodeURIComponent(d.nx)+'")></div> <a href=# style=cursor:pointer onclick=\'return d3folderset("'+encodeURIComponent(d.nx)+"\")'>"+s+"</a></span></div>"}else{var p=s;l="<div class=filelist file=3><input style=float:left name=fcx class=fcb type=checkbox onchange=d3setActions() value='"+d.nx+"'> <span style=float:right>"+k+"</span><span><div class=fileIcon"+d.t+"></div>"+p+"</span></div>"}if(d.t<3){m+=l}else{n+=l}}QH("d3serverfiles",m+n);QE("p3FolderUp",d3filetreelocation.length>0);d3setActions()}function d3folderset(a){d3filetreelocation.push(decodeURIComponent(a));d3updatefiles();return false}function d3folderup(a){if(a==null){d3filetreelocation.pop()}else{while(d3filetreelocation.length>a){d3filetreelocation.pop()}}d3updatefiles()}function d3getFileSel(){var a=[];var b=document.getElementsByName("fcx");for(var c=0;c<b.length;c++){if(b[c].checked){a.push(b[c].value)}}return a}function d3setActions(){var a=Q("d3uploadMode").value;if(a==1){QE("idx_dlgOkButton",Q("d3localFile").value.length>0)}else{QE("idx_dlgOkButton",d3getFileSel().length==1)}}var notifications=[];function clickNotificationIcon(a){if(a==true){QV("notifiyBox",true)}else{if(a==false){QV("notifiyBox",false)}else{QV("notifiyBox",QS("notifiyBox")["display"]=="none")}}drawNotifications()}function setNotificationCount(a){if(parseInt(Q("notificationCount").innerHTML)==a){return}QH("notificationCount",a);QS("notificationCount")["background-color"]=(a==0)?"lightblue":"orange";QV("notificationCount",a>0)}function drawNotifications(){var j="";if(notifications.length==0){j="<div style=margin:5px>There are currently no notifications</div>"}else{for(var c in notifications){var g=notifications[c];var k="";if(g.title!=null){k="<b>"+g.title+"</b>: "}var a=new Date(g.time);var e=0;if(g.nodeid!=null){var h=getNodeFromId(g.nodeid);if(h!=null){e=h.icon;k="<b>"+h.name+"</b>: "}}j+='<div title="Occured at '+printDateTime(a)+'" id="notifyx'+g.id+'" class=notification style="cursor:pointer;border-top:1px solid '+((j=="")?"transparent":"orange")+'">';if(e){j+="<div class=j"+e+' onclick="notificationSelected('+g.id+')" style=margin:5px;float:left></div>'}j+='<div onclick="notificationDelete('+g.id+')" class=unselectable title="Clear this notification" style=margin:5px;float:right;color:orange><b>X</b></div><div onclick="notificationSelected('+g.id+')" style=margin:5px>'+k+g.text+"</div></div>"}}var b="";if(notifications.length>1){b='<div id="notifyRemoveAll" onclick="deleteAllNotifications()" style="cursor:pointer;border-top:1px solid orange;margin:5px;color:orange;text-align:right;padding-right:3px">Clear all</div>'}QH("notifiyBox",'<div class=customScroll style="max-height:170px;overflow-y:auto;margin:5px">'+j+"</div>"+b)}function notificationSelected(c,a){var d=-1;for(var b in notifications){if(notifications[b].id==c){d=b}}if(d!=-1){notificationSelectedEx(notifications[d],c);if(a&¬ifications[d]){if(notifications[d].notification){notifications[d].notification.close();delete notifications[d].notification}notificationDelete(c)}}}function notificationSelectedEx(b,a){if(b.nodeid!=null){if(b.tag=="desktop"){gotoDevice(b.nodeid,12)}else{if(b.tag=="terminal"){gotoDevice(b.nodeid,11)}else{if(b.tag=="files"){gotoDevice(b.nodeid,13)}else{if(b.tag=="intelamt"){gotoDevice(b.nodeid,14)}else{if(b.tag=="console"){gotoDevice(b.nodeid,15)}else{gotoDevice(b.nodeid,10)}}}}}}else{if((b.tag!=null)&&b.tag.startsWith("meshmessenger/")){window.open("/messenger?id="+b.tag+"&title="+encodeURIComponent(b.username),b.tag.split("/")[2]);notificationDelete(a)}}}function notificationDelete(c){var d=-1,a=Q("notifyx"+c);if(a!=null){for(var b in notifications){if(notifications[b].id==c){d=b}}if(d!=-1){if(notifications[d].notification){notifications[d].notification.close();delete notifications[d].notification}notifications.splice(d,1);a.parentNode.removeChild(a);setNotificationCount(notifications.length);if(notifications.length==0){QV("notifiyBox",false)}if(notifications.length==1){QV("notifyRemoveAll",false)}if((notifications.length>0)&&(d==0)){var g=notifications[0];QS("notifyx"+g.id)["border-top"]="1px solid transparent"}}}}function addNotification(a){if(a.time==null){a.time=Date.now()}if(a.id==null){a.id=Math.random()}notifications.unshift(a);setNotificationCount(notifications.length);clickNotificationIcon(true);var d=getstore("notifications",0);if(d&1){Q("chimes").play()}var c=null;if(Notification&&(Notification.permission=="granted")){var e=a.text.split("®").join("").split("<b>").join("").split("</b>").join("").split("<br />").join("\r\n");if(a.nodeid){var b=getNodeFromId(a.nodeid);if(b){c=new Notification("{{{title}}} - "+b.name,{tag:a.tag,body:e,icon:"/images/notify/icons128-"+b.icon+".png"})}}else{if(a.icon==null){a.icon=0}var g=a.title;if(g==null){g=""}else{g=" - "+a.title}c=new Notification("{{{title}}}"+g,{tag:a.tag,body:e,icon:"/images/notify/icons128-"+a.icon+".png"})}c.id=a.id;c.xtag=a.tag;c.nodeid=a.nodeid;c.username=a.username;c.onclick=function(h){notificationSelected(h.target.id,true)};a.notification=c}}function deleteAllNotifications(){notifications=[];setNotificationCount(0);drawNotifications();QV("notifiyBox",false)}function setupGeneralServerStats(){window.serverStatCpu=new Chart(document.getElementById("serverCpuChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#AAAAAA","#00AA00"]}],labels:["Used","Free"]},options:{responsive:true,legend:{position:"none",},animation:{animateScale:true,animateRotate:true},width:"60px"}});window.serverStatMemory=new Chart(document.getElementById("serverMemoryChart").getContext("2d"),{type:"doughnut",data:{datasets:[{data:[0,0],backgroundColor:["#AAAAAA","#00AA00"]}],labels:["Used","Free"]},options:{responsive:true,legend:{position:"none",},animation:{animateScale:true,animateRotate:true},width:"60px"}})}var lastServerStats=null;function updateGeneralServerStats(d){if(d!=null){lastServerStats=d}else{d=lastServerStats}if(d==null){return}if(typeof d.cpuavg=="object"){var c=Math.min(d.cpuavg[0],1);window.serverStatCpu.config.data.datasets[0].data=[c,1-c];QH("serverCpuChartText",'<div style=margin-bottom:5px>CPU Load</div><div><b title="CPU load in the last minute">'+(Math.round(d.cpuavg[0]*100)/100)+'</b>, <b title="CPU load in the last 5 minutes">'+(Math.round(d.cpuavg[1]*100)/100)+'</b>, <b title="CPU load in the 15 minutes">'+(Math.round(d.cpuavg[2]*100)/100)+"</b></div>");QS("serverCpuChartView")["display"]="inline-block";window.serverStatCpu.update()}if((typeof d.totalmem=="number")&&(typeof d.freemem=="number")){window.serverStatMemory.config.data.datasets[0].data=[d.totalmem-d.freemem,d.freemem];QH("serverMemoryChartText","<div style=margin-bottom:5px>Memory</div><div><b>"+getNiceSize2(d.freemem)+"</b> free, <b>"+getNiceSize2(d.totalmem)+"</b> total</div>");QS("serverMemoryChartView")["display"]="inline-block";window.serverStatMemory.update()}var e="<div style=width:100% cellpadding=0 cellspacing=0>";if(typeof d.values=="object"){for(var a in d.values){e+="<div class=userTableHeader style=margin-bottom:4px;width:200px>"+a+"</div>";for(var b in d.values[a]){e+="<div style=display:inline-block><table class=serverStateTableCell><tr><td class=h1></td><td><span>"+b+"</span><span style=float:right>"+d.values[a][b]+"</span></td><td class=h2></td></tr></table></div>"}}}e+="</div>";QH("serverStatsTable",e)}var serverTimelineStats=null;var serverTimelineConfig={type:"line",data:{labels:[],datasets:[{label:"",backgroundColor:"rgba(255, 99, 132, .5)",borderColor:"rgb(255, 99, 132)",data:[],fill:true}]},options:{responsive:true,maintainAspectRatio:false,elements:{line:{cubicInterpolationMode:"monotone"}},scales:{xAxes:[{type:"time",time:{tooltipFormat:"ll HH:mm"},display:true,scaleLabel:{display:false,labelString:""}}],yAxes:[{type:"linear",display:true,scaleLabel:{display:true,labelString:""}}]}}};function refreshServerTimelineStats(a){meshserver.send({action:"servertimelinestats",hours:24*30})}function pastDate(a){var b=new Date();b.setTime(b.getTime()-(60*60*1000*a));return b}function setServerTimelineStats(a){serverTimelineStats=a;updateServerTimelineStats()}function addServerTimelineStats(b){if(serverTimelineStats==null){return}serverTimelineStats.push(b);var a=Q("p40type").value;if(a==0){serverTimelineConfig.data.datasets[0].data.push({x:b.time,y:b.conn.ca});serverTimelineConfig.data.datasets[1].data.push({x:b.time,y:b.conn.cu});serverTimelineConfig.data.datasets[2].data.push({x:b.time,y:b.conn.us});serverTimelineConfig.data.datasets[3].data.push({x:b.time,y:b.conn.rs});if(b.conn.am!=null){serverTimelineConfig.data.datasets[4].data.push({x:b.time,y:b.conn.am})}}else{if(a==1){serverTimelineConfig.data.datasets[0].data.push({x:b.time,y:b.mem.external/(1024*1024)});serverTimelineConfig.data.datasets[1].data.push({x:b.time,y:b.mem.heapUsed/(1024*1024)});serverTimelineConfig.data.datasets[2].data.push({x:b.time,y:b.mem.heapTotal/(1024*1024)});serverTimelineConfig.data.datasets[3].data.push({x:b.time,y:b.mem.rss/(1024*1024)})}}updateServerTimelineHours()}function updateServerTimelineHours(){serverTimelineConfig.options.scales.yAxes[0].type=(Q("p40log").checked?"logarithmic":"linear");serverTimelineConfig.options.scales.xAxes[0].time={min:pastDate(Q("p40time").value)};window.serverMainStats.update()}function setupServerTimelineStats(){window.serverMainStats=new Chart(document.getElementById("serverMainStats").getContext("2d"),serverTimelineConfig)}function updateServerTimelineStats(){var b,a=Q("p40type").value,e=pastDate(Q("p40time").value);serverTimelineConfig.options.scales.xAxes[0].time={min:e};if(a==0){serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString="Connection Count";b={labels:[pastDate(0),e],datasets:[{label:"Agents",data:[],backgroundColor:"rgba(158, 151, 16, .1)",borderColor:"rgb(158, 151, 16)",fill:true},{label:"Users",data:[],backgroundColor:"rgba(16, 84, 158, .1)",borderColor:"rgb(16, 84, 158)",fill:true},{label:"User Sessions",data:[],backgroundColor:"rgba(255, 99, 132, .1)",borderColor:"rgb(255, 99, 132)",fill:true},{label:"Relay Sessions",data:[],backgroundColor:"rgba(39, 158, 16, .1)",borderColor:"rgb(39, 158, 16)",fill:true},{label:"Intel AMT",data:[],backgroundColor:"rgba(134, 16, 158, .1)",borderColor:"rgb(134, 16, 158)",fill:true}]};for(var c=0;c<serverTimelineStats.length;c++){var d=new Date(serverTimelineStats[c].time);if(serverTimelineStats[c].conn){b.datasets[0].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.ca});b.datasets[1].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.cu});b.datasets[2].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.us});b.datasets[3].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.rs});if(serverTimelineStats[c].conn.am!=null){b.datasets[4].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].conn.am})}}}}else{if(a==1){serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString="Megabytes";b={labels:[pastDate(0),e],datasets:[{label:"External",data:[],backgroundColor:"rgba(158, 151, 16, .1)",borderColor:"rgb(158, 151, 16)",fill:true},{label:"Heap Used",data:[],backgroundColor:"rgba(16, 84, 158, .1)",borderColor:"rgb(16, 84, 158)",fill:true},{label:"Heap Total",data:[],backgroundColor:"rgba(255, 99, 132, .1)",borderColor:"rgb(255, 99, 132)",fill:true},{label:"RSS",data:[],backgroundColor:"rgba(39, 158, 16, .1)",borderColor:"rgb(39, 158, 16)",fill:true}]};for(var c=0;c<serverTimelineStats.length;c++){b.datasets[0].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].mem.external/(1024*1024)});b.datasets[1].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].mem.heapUsed/(1024*1024)});b.datasets[2].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].mem.heapTotal/(1024*1024)});b.datasets[3].data.push({x:serverTimelineStats[c].time,y:serverTimelineStats[c].mem.rss/(1024*1024)})}}}serverTimelineConfig.data=b;window.serverMainStats.update()}function p40downloadEvents(){var a="time, conn.agent, conn.users, conn.usersessions, conn.relaysession, conn.intelamt, mem.external, mem.heapused, mem.heaptotal, mem.rss\r\n";for(var b=0;b<serverTimelineStats.length;b++){if(serverTimelineStats[b].conn&&serverTimelineStats[b].mem){a+=new Date(serverTimelineStats[b].time)+", "+serverTimelineStats[b].conn.ca+", "+serverTimelineStats[b].conn.cu+", "+serverTimelineStats[b].conn.us+", "+serverTimelineStats[b].conn.rs+", "+(serverTimelineStats[b].conn.am?serverTimelineStats[b].conn.am:"")+", "+serverTimelineStats[b].mem.external+", "+serverTimelineStats[b].mem.heapUsed+", "+serverTimelineStats[b].mem.heapTotal+", "+serverTimelineStats[b].mem.rss+"\r\n"}}saveAs(new Blob([a],{type:"application/octet-stream"}),"ServerStats.csv")}var serverTrace=[];var serverTraceSources=[];function displayServerTrace(){var c="",b=parseInt(Q("p41limitdropdown").value);if(serverTrace.length>b){serverTrace.splice(b)}for(var a in serverTrace){c+="<div class=traceEvent>"+EscapeHtml(new Date(serverTrace[a].time).toLocaleTimeString())+" - <b>"+EscapeHtml(serverTrace[a].source.toUpperCase())+"</b>: "+EscapeHtml(serverTrace[a].args.join(", "))+"</div>"}QH("p41events",c)}function clearServerTracing(){serverTrace=[];displayServerTrace()}function setServerTracing(){var a="";a+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Core Server</b></div>';a+="<div><label><input type=checkbox id=p41c1 "+((serverTraceSources.indexOf("cookie")>=0)?"checked":"")+">Cookie encoder</label></div>";a+="<div><label><input type=checkbox id=p41c2 "+((serverTraceSources.indexOf("dispatch")>=0)?"checked":"")+">Message Dispatcher</label></div>";a+="<div><label><input type=checkbox id=p41c3 "+((serverTraceSources.indexOf("main")>=0)?"checked":"")+">Main Server Messages</label></div>";a+="<div><label><input type=checkbox id=p41c4 "+((serverTraceSources.indexOf("peer")>=0)?"checked":"")+">MeshCentral Server Peering</label></div>";a+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Web Server</b></div>';a+="<div><label><input type=checkbox id=p41c5 "+((serverTraceSources.indexOf("web")>=0)?"checked":"")+">Web Server</label></div>";a+="<div><label><input type=checkbox id=p41c6 "+((serverTraceSources.indexOf("webrequest")>=0)?"checked":"")+">Web Server Requests</label></div>";a+="<div><label><input type=checkbox id=p41c7 "+((serverTraceSources.indexOf("relay")>=0)?"checked":"")+">Web Socket Relay</label></div>";a+='<div style="width:100%;border-bottom:1px solid gray;margin-bottom:5px;margin-top:5px"><b>Intel AMT</b></div>';a+="<div><label><input type=checkbox id=p41c9 "+((serverTraceSources.indexOf("webrelay")>=0)?"checked":"")+">Connection Relay</label></div>";a+="<div><label><input type=checkbox id=p41c10 "+((serverTraceSources.indexOf("mps")>=0)?"checked":"")+">CIRA Server</label></div>";a+="<div><label><input type=checkbox id=p41c11 "+((serverTraceSources.indexOf("mpscmd")>=0)?"checked":"")+">CIRA Server Commands</label></div>";setDialogMode(2,"Server Tracing",7,setServerTracingEx,a)}function setServerTracingEx(c){var g=[],a=["cookie","dispatch","main","peer","web","webrequest","relay","webrelaydata","webrelay","mps","mpscmd","swarm","swarmcmd"];if(c==1){for(var e=1;e<13;e++){try{if(Q("p41c"+e).checked){g.push(a[e-1])}}catch(d){}}}meshserver.send({action:"traceinfo",traceSources:g})}function p41downloadServerTrace(){var a="time, source, message\r\n";for(var b in serverTrace){a+='"'+new Date(serverTrace[b].time).toLocaleTimeString()+'","'+serverTrace[b].source+'","'+serverTrace[b].args.join(", ")+'"\r\n'}saveAs(new Blob([a],{type:"application/octet-stream"}),"servertrace.csv");return false}var xxdialogMode;var xxdialogFunc;var xxdialogButtons;var xxdialogTag;var xxcurrentView=-1;function setDialogMode(j,k,a,e,d,h){setSessionActivity();QV("uiMenu",false);xxdialogMode=j;xxdialogFunc=e;xxdialogButtons=a;xxdialogTag=h;QE("idx_dlgOkButton",true);QV("idx_dlgOkButton",a&1);QV("idx_dlgCancelButton",a&2);QV("id_dialogclose",(a&2)||(a&8));QV("idx_dlgDeleteButton",a&4);QV("idx_dlgButtonBar",a&7);if(k){QH("id_dialogtitle",k)}for(var g=1;g<24;g++){QV("dialog"+g,g==j)}QV("dialog",j);if(d){if(j==2){QH("id_dialogOptions",d)}else{QH("id_dialogMessage",d)}}}function dialogclose(e){setSessionActivity();var c=xxdialogFunc,a=xxdialogButtons,d=xxdialogTag;setDialogMode();if(((a&8)||e)&&c){c(e,d)}}function center(){setSessionActivity();if(xxcurrentView==11){deskAdjust()}else{if(xxcurrentView==10){masterUpdate(256)}else{if(xxcurrentView==1){masterUpdate(4)}}}}function messagebox(b,a){setSessionActivity();QH("id_dialogMessage",a);setDialogMode(1,b,1)}function statusbox(b,a){setSessionActivity();QH("id_dialogMessage",a);setDialogMode(1,b)}function goBack(){setSessionActivity();if(xxdialogMode){return}if(fullscreen){deskToggleFull()}if((xxcurrentView>=10)&&(xxcurrentView<20)){go(1)}if((xxcurrentView>=20)&&(xxcurrentView<30)){go(2)}if((xxcurrentView>=30)&&(xxcurrentView<40)){go(4)}}function go(h){setSessionActivity();if(xxdialogMode||xxcurrentView==h){return}QV("uiMenu",false);for(var a=0;a<42;a++){QV("p"+a,a==h)}xxcurrentView=h;var d=["MainMenuMyDevices","MainMenuMyAccount","MainMenuMyEvents","MainMenuMyFiles","MainMenuMyUsers","MainMenuMyServer"];for(var a in d){QC(d[a]).remove("fullselect");QC(d[a]).remove("semiselect")}var b=["LeftMenuMyDevices","LeftMenuMyAccount","LeftMenuMyEvents","LeftMenuMyFiles","LeftMenuMyUsers","LeftMenuMyServer"];for(var a in b){QC(b[a]).remove("lbbuttonsel");QC(b[a]).remove("lbbuttonsel2")}var e=(h<9?"fullselect":"semiselect");var c=(h<9?"lbbuttonsel2":"lbbuttonsel");if(h==1||(h>=10&&h<20)){QC("MainMenuMyDevices").add(e)}if(h==1||(h>=10&&h<20)){QC("LeftMenuMyDevices").add(c)}if(h==2||(h>=20&&h<30)){QC("MainMenuMyAccount").add(e)}if(h==2||(h>=20&&h<30)){QC("LeftMenuMyAccount").add(c)}if(h==3){QC("MainMenuMyEvents").add(e)}if(h==3){QC("LeftMenuMyEvents").add(c)}if(h==4||(h>=30&&h<40)){QC("MainMenuMyUsers").add(e)}if(h==4||(h>=30&&h<40)){QC("LeftMenuMyUsers").add(c)}if(h==5){QC("MainMenuMyFiles").add(e)}if(h==5){QC("LeftMenuMyFiles").add(c)}if((h==6)||(h==115)){QC("MainMenuMyServer").add(e)}if((h==6)||(h==115)||(h==40)){QC("LeftMenuMyServer").add(c)}if(webPageStackMenu&&(h>=10)){QC("column_l").add("room4submenu")}else{QC("column_l").remove("room4submenu")}QV("topbar",h!=0);if((h==0)&&(webPageFullScreen)){QC("body").add("arg_hide")}QV("MainSubMenuSpan",h>=10&&h<20);QV("UserDummyMenuSpan",(h<10)&&(h!=6)&&webPageFullScreen);QV("MeshSubMenuSpan",h>=20&&h<30);QV("UserSubMenuSpan",h>=30&&h<40);QV("ServerSubMenuSpan",h==6||h==115||h==40||h==41);var g={10:"MainDev",11:"MainDevDesktop",12:"MainDevTerminal",13:"MainDevFiles",14:"MainDevAmt",15:"MainDevConsole",16:"MainDevEvents",17:"MainDevInfo",20:"MeshGeneral",30:"UserGeneral",31:"UserEvents",6:"ServerGeneral",40:"ServerStats",41:"ServerTrace",115:"ServerConsole"};for(var a in g){QC(g[a]).remove("style3x");QC(g[a]).remove("style3sel");QC(g[a]).add((h==a)?"style3sel":"style3x")}if(h==11){deskAdjust()}if(h==115){QV("p15",true)}QV("p15uploadCore",h!=115);QV("p15BackButton",h!=115);if((h==15)||(h==115)){setupConsole()}if(h==1){masterUpdate(4)}if((h==2)&&Notification){QV("accountEnableNotificationsSpan",Notification.permission!="granted")}if((h==40)&&(serverTimelineStats==null)){refreshServerTimelineStats()}if((currentNode)&&(h>=10)&&(h<20)){document.title=decodeURIComponent("{{{extitle}}}")+" - "+currentNode.name+" - "+meshes[currentNode.meshid].name}else{document.title=decodeURIComponent("{{{extitle}}}")}}function joinPaths(){var c=[];for(var a in arguments){var b=arguments[a];if((b!=null)&&(b!="")){while(b.endsWith("/")||b.endsWith("\\")){b=b.substring(0,b.length-1)}while(b.startsWith("/")||b.startsWith("\\")){b=b.substring(1)}c.push(b)}}return c.join("/")}function putstore(g,j){try{if((typeof(localStorage)==="undefined")||(localStorage.getItem(g)==j)){return}if(j==null){localStorage.removeItem(g)}else{localStorage.setItem(g,j)}}catch(a){}if(g[0]!="_"){var h={};for(var b=0,d=localStorage.length;b<d;++b){var c=localStorage.key(b);if(c[0]!="_"){h[c]=localStorage.getItem(c)}}meshserver.send({action:"userWebState",state:JSON.stringify(h)})}}function getstore(b,d){try{if(typeof(localStorage)==="undefined"){return d}var c=localStorage.getItem(b);if((c==null)||(c==null)){return d}return c}catch(a){return d}}function addLink(b,a){return"<span tabindex=0 style=cursor:pointer;text-decoration:none onclick='"+a+"' onkeypress=\"if (event.key=='Enter') {"+a+'} ">'+b+" <img class=hoverButton src=images/link5.png></span>"}function addLinkConditional(d,b,a){if(a){return addLink(d,b)}return d}function haltEvent(a){if(a.preventDefault){a.preventDefault()}if(a.stopPropagation){a.stopPropagation()}return false}function addOption(c,d,a){var b=document.createElement("option");b.text=d;b.value=a;Q(c).add(b)}function passwordcheck(a){return(a.length>7)&&(/\d/.test(a))&&(/[a-z]/.test(a))&&(/[A-Z]/.test(a))&&(/\W/.test(a))}function methodcheck(a){if(a&&a!=null&&a.Body&&a.Body.ReturnValueStr!="SUCCESS"){messagebox("Call Error",a.Header.Method+": "+a.Body.ReturnValueStr.replace("_"," "));return true}return false}function TableStart(){return"<table cellpadding=0 cellspacing=0 style=width:100%;border-radius:8px><tr><td width=200px><p><td>"}function TableStart2(){return"<table cellpadding=0 cellspacing=0 style=width:100%;border-radius:8px><tr><td><p><td>"}function TableEntry(a,b){return"<tr><td><p>"+a+"<td>"+b}function FullTable(c,a){var b=TableStart();for(i in c){if(i&&c[i]){b+=TableEntry(i,c[i])}}return b+TableEnd(a)}function TableEnd(a){return"<tr><td colspan=2><p>"+(a?a:"")+"</table>"}function AddButton(b,a){return"<input type=button value='"+b+"' onclick='"+a+"' style=margin:4px>"}function AddButton2(b,a){return"<input type=button value='"+b+"' onclick='"+a+"'>"}function AddRefreshButton(a){return"<input type=button name=refreshbtn value=Refresh onclick='refreshButtons(false);"+a+"' style=margin:4px "+(refreshButtonsState==false?"disabled":"")+">"}function MoreStart(){return'<a href=# style=cursor:pointer;color:blue id=morexxx1 onclick=QV("morexxx1",false);QV("morexxx2",true)>▼ More</a><div id=morexxx2 style=display:none><br><hr>'}function MoreEnd(){return'<a href=# style=cursor:pointer;color:blue onclick=QV("morexxx2",false);QV("morexxx1",true)>▲ Less</a></div>'}function getSelectedOptions(e){var d=[],c;for(var a=0,b=e.options.length;a<b;a++){c=e.options[a];if(c.selected){d.push(c.value)}}return d}function getInstance(b,c){for(var a in b){if(b[a]["InstanceID"]==c){return b[a]}}return null}function getItem(b,c,d){for(var a in b){if(b[a][c]==d){return b[a]}}return null}function guidToStr(a){return a.substring(6,8)+a.substring(4,6)+a.substring(2,4)+a.substring(0,2)+"-"+a.substring(10,12)+a.substring(8,10)+"-"+a.substring(14,16)+a.substring(12,14)+"-"+a.substring(16,20)+"-"+a.substring(20)}function getUrlVars(){var d,a,e=[],b=window.location.href.slice(window.location.href.indexOf("?")+1).split("&");for(var c=0;c<b.length;c++){d=b[c].indexOf("=");if(d>0){e[b[c].substring(0,d)]=b[c].substring(d+1,b[c].length)}}return e}function addHtmlValue(a,b){return"<table><td style=width:120px>"+a+"<td><b>"+b+"</b></table>"}function addHtmlValue2(a,b){return"<div><div style=display:inline-block;float:right>"+b+"</div><div style=display:inline-block>"+a+"</div></div>"}function addHtmlValue3(a,b){return"<div><b>"+a+"</b></div><div style=margin-left:16px>"+b+"</div>"}function parseUriArgs(){var a,c={},b=window.document.location.href.split(/[\?&|\=]/);b.splice(0,1);for(d in b){switch(d%2){case 0:a=decodeURIComponent(b[d]);break;case 1:c[a]=decodeURIComponent(b[d]);var d=parseInt(c[a]);if(d==c[a]){c[a]=d}break;default:break}}return c}function focusTextBox(a){setTimeout(function(){Q(a).selectionStart=Q(a).selectionEnd=65535;Q(a).focus()},0)}function validateEmail(b){var a=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return a.test(b)}function isPrivateIP(b){return(b.startsWith("10.")||b.startsWith("172.16.")||b.startsWith("192.168."))}function u2fSupported(){return(window.u2f&&((navigator.userAgent.indexOf("Chrome/")>0)||(navigator.userAgent.indexOf("Firefox/")>0)||(navigator.userAgent.indexOf("Opera/")>0)||(navigator.userAgent.indexOf("Safari/")>0)))}function findOne(a,b){if((a==null)||(b==null)){return false}return b.some(function(c){return a.indexOf(c)>=0})}function copyTextToClip(c){function b(d){if(document.selection){var g=document.body.createTextRange();g.moveToElementText(d);g.select()}else{if(window.getSelection){var g=document.createRange();g.selectNode(d);window.getSelection().removeAllRanges();window.getSelection().addRange(g)}}}var a=document.createElement("DIV");a.textContent=c;document.body.appendChild(a);b(a);document.execCommand("copy");a.remove()}function copyTextToClip2(c){function b(d){if(document.selection){var g=document.body.createTextRange();g.moveToElementText(d);g.select()}else{if(window.getSelection){var g=document.createRange();g.selectNode(d);window.getSelection().removeAllRanges();window.getSelection().addRange(g)}}}var a=document.createElement("DIV");a.textContent=decodeURIComponent(c);document.body.appendChild(a);b(a);document.execCommand("copy");a.remove()}function capitalizeFirstLetter(a){return a.charAt(0).toUpperCase()+a.slice(1)}function printDate(a){return a.toLocaleDateString(args.locale)}function printTime(a){return a.toLocaleTimeString(args.locale)}function printDateTime(a){return a.toLocaleString(args.locale)}function addDetailItem(b,c,a){return"<div><span style=float:right>"+c+"</span><span>"+b+"</span></div>"};</script></body></html>
\ No newline at end of file