@bigtyphoon/melo 1.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +55 -0
- package/bin/commadtest.ts +10 -0
- package/bin/commands/add.ts +43 -0
- package/bin/commands/init.ts +292 -0
- package/bin/commands/kill.ts +21 -0
- package/bin/commands/list.ts +60 -0
- package/bin/commands/masterha.ts +40 -0
- package/bin/commands/restart.ts +48 -0
- package/bin/commands/start.ts +65 -0
- package/bin/commands/stop.ts +26 -0
- package/bin/melo.ts +30 -0
- package/bin/utils/constants.ts +27 -0
- package/bin/utils/utils.ts +130 -0
- package/dist/bin/commadtest.js +9 -0
- package/dist/bin/commands/add.js +40 -0
- package/dist/bin/commands/init.js +279 -0
- package/dist/bin/commands/kill.js +21 -0
- package/dist/bin/commands/list.js +65 -0
- package/dist/bin/commands/masterha.js +36 -0
- package/dist/bin/commands/restart.js +45 -0
- package/dist/bin/commands/start.js +58 -0
- package/dist/bin/commands/stop.js +20 -0
- package/dist/bin/melo.js +26 -0
- package/dist/bin/utils/constants.js +28 -0
- package/dist/bin/utils/utils.js +134 -0
- package/dist/lib/application.js +888 -0
- package/dist/lib/common/manager/appManager.js +112 -0
- package/dist/lib/common/manager/taskManager.js +39 -0
- package/dist/lib/common/remote/backend/msgRemote.js +63 -0
- package/dist/lib/common/remote/frontend/channelRemote.js +78 -0
- package/dist/lib/common/remote/frontend/sessionRemote.js +76 -0
- package/dist/lib/common/service/backendSessionService.js +337 -0
- package/dist/lib/common/service/channelService.js +514 -0
- package/dist/lib/common/service/connectionService.js +95 -0
- package/dist/lib/common/service/filterService.js +112 -0
- package/dist/lib/common/service/handlerService.js +187 -0
- package/dist/lib/common/service/sessionService.js +610 -0
- package/dist/lib/components/backendSession.js +14 -0
- package/dist/lib/components/channel.js +13 -0
- package/dist/lib/components/connection.js +12 -0
- package/dist/lib/components/connector.js +437 -0
- package/dist/lib/components/dictionary.js +93 -0
- package/dist/lib/components/master.js +39 -0
- package/dist/lib/components/monitor.js +25 -0
- package/dist/lib/components/protobuf.js +156 -0
- package/dist/lib/components/proxy.js +236 -0
- package/dist/lib/components/pushScheduler.js +62 -0
- package/dist/lib/components/remote.js +127 -0
- package/dist/lib/components/server.js +63 -0
- package/dist/lib/components/session.js +20 -0
- package/dist/lib/connectors/commands/handshake.js +119 -0
- package/dist/lib/connectors/commands/heartbeat.js +67 -0
- package/dist/lib/connectors/commands/kick.js +15 -0
- package/dist/lib/connectors/common/coder.js +90 -0
- package/dist/lib/connectors/common/handler.js +57 -0
- package/dist/lib/connectors/hybrid/IHybridSocket.js +3 -0
- package/dist/lib/connectors/hybrid/switcher.js +100 -0
- package/dist/lib/connectors/hybrid/tcpprocessor.js +40 -0
- package/dist/lib/connectors/hybrid/tcpsocket.js +171 -0
- package/dist/lib/connectors/hybrid/wsprocessor.js +49 -0
- package/dist/lib/connectors/hybridconnector.js +89 -0
- package/dist/lib/connectors/hybridsocket.js +139 -0
- package/dist/lib/connectors/mqtt/generate.js +113 -0
- package/dist/lib/connectors/mqtt/mqttadaptor.js +81 -0
- package/dist/lib/connectors/mqtt/protocol.js +48 -0
- package/dist/lib/connectors/mqttconnector.js +107 -0
- package/dist/lib/connectors/mqttsocket.js +59 -0
- package/dist/lib/connectors/sioconnector.js +135 -0
- package/dist/lib/connectors/siosocket.js +69 -0
- package/dist/lib/connectors/udpconnector.js +76 -0
- package/dist/lib/connectors/udpsocket.js +93 -0
- package/dist/lib/filters/handler/serial.js +44 -0
- package/dist/lib/filters/handler/time.js +32 -0
- package/dist/lib/filters/handler/timeout.js +45 -0
- package/dist/lib/filters/handler/toobusy.js +36 -0
- package/dist/lib/filters/rpc/rpcLog.js +43 -0
- package/dist/lib/filters/rpc/toobusy.js +41 -0
- package/dist/lib/index.js +81 -0
- package/dist/lib/interfaces/IComponent.js +3 -0
- package/dist/lib/interfaces/IConnector.js +3 -0
- package/dist/lib/interfaces/IHandlerFilter.js +3 -0
- package/dist/lib/interfaces/ILifeCycle.js +3 -0
- package/dist/lib/interfaces/IPlugin.js +3 -0
- package/dist/lib/interfaces/IPushScheduler.js +3 -0
- package/dist/lib/interfaces/ISocket.js +3 -0
- package/dist/lib/interfaces/IStore.js +3 -0
- package/dist/lib/interfaces/define.js +3 -0
- package/dist/lib/master/master.js +129 -0
- package/dist/lib/master/starter.js +236 -0
- package/dist/lib/master/watchdog.js +120 -0
- package/dist/lib/melo.js +125 -0
- package/dist/lib/modules/console.js +436 -0
- package/dist/lib/modules/masterwatcher.js +98 -0
- package/dist/lib/modules/monitorwatcher.js +124 -0
- package/dist/lib/modules/onlineUser.js +69 -0
- package/dist/lib/modules/restartNotifyModule.js +107 -0
- package/dist/lib/modules/watchServer.js +737 -0
- package/dist/lib/monitor/monitor.js +80 -0
- package/dist/lib/pushSchedulers/buffer.js +96 -0
- package/dist/lib/pushSchedulers/direct.js +58 -0
- package/dist/lib/pushSchedulers/multi.js +80 -0
- package/dist/lib/server/server.js +500 -0
- package/dist/lib/util/appUtil.js +306 -0
- package/dist/lib/util/constants.js +117 -0
- package/dist/lib/util/countDownLatch.js +51 -0
- package/dist/lib/util/events.js +20 -0
- package/dist/lib/util/handlerHelper.js +8 -0
- package/dist/lib/util/log.js +14 -0
- package/dist/lib/util/moduleUtil.js +101 -0
- package/dist/lib/util/pathUtil.js +134 -0
- package/dist/lib/util/remoterHelper.js +8 -0
- package/dist/lib/util/utils.js +358 -0
- package/dist/test/application.js +522 -0
- package/dist/test/config/log4js.json +28 -0
- package/dist/test/config/master.json +9 -0
- package/dist/test/config/servers.json +6 -0
- package/dist/test/filters/handler/serial.js +41 -0
- package/dist/test/filters/handler/time.js +41 -0
- package/dist/test/filters/handler/timeout.js +41 -0
- package/dist/test/filters/handler/toobusy.js +57 -0
- package/dist/test/filters/rpc/rpcLog.js +22 -0
- package/dist/test/filters/rpc/toobusy.js +39 -0
- package/dist/test/manager/mockChannelManager.js +77 -0
- package/dist/test/manager/taskManager.js +68 -0
- package/dist/test/mock-base/app/servers/other-file +0 -0
- package/dist/test/mock-plugin/components/mockPlugin.js +10 -0
- package/dist/test/mock-plugin/events/mockEvent.js +12 -0
- package/dist/test/modules/console.js +242 -0
- package/dist/test/pomelo.js +19 -0
- package/dist/test/remote/channelRemote.js +159 -0
- package/dist/test/service/channel.js +134 -0
- package/dist/test/service/channelService.js +216 -0
- package/dist/test/service/connectionService.js +114 -0
- package/dist/test/service/filterService.js +144 -0
- package/dist/test/service/handlerService.js +65 -0
- package/dist/test/service/sessionService.js +387 -0
- package/dist/test/util/countDownLatch.js +70 -0
- package/dist/test/util/pathUtil.js +108 -0
- package/dist/test/util/utils.js +140 -0
- package/lib/application.ts +1240 -0
- package/lib/common/manager/appManager.ts +118 -0
- package/lib/common/manager/taskManager.ts +50 -0
- package/lib/common/remote/backend/msgRemote.ts +134 -0
- package/lib/common/remote/frontend/channelRemote.ts +91 -0
- package/lib/common/remote/frontend/sessionRemote.ts +91 -0
- package/lib/common/service/backendSessionService.ts +388 -0
- package/lib/common/service/channelService.ts +609 -0
- package/lib/common/service/connectionService.ts +112 -0
- package/lib/common/service/filterService.ts +118 -0
- package/lib/common/service/handlerService.ts +224 -0
- package/lib/common/service/sessionService.ts +731 -0
- package/lib/components/backendSession.ts +14 -0
- package/lib/components/channel.ts +11 -0
- package/lib/components/connection.ts +13 -0
- package/lib/components/connector.ts +533 -0
- package/lib/components/dictionary.ts +121 -0
- package/lib/components/master.ts +41 -0
- package/lib/components/monitor.ts +30 -0
- package/lib/components/protobuf.ts +208 -0
- package/lib/components/proxy.ts +282 -0
- package/lib/components/pushScheduler.ts +70 -0
- package/lib/components/remote.ts +166 -0
- package/lib/components/server.ts +71 -0
- package/lib/components/session.ts +22 -0
- package/lib/connectors/commands/handshake.ts +155 -0
- package/lib/connectors/commands/heartbeat.ts +83 -0
- package/lib/connectors/commands/kick.ts +11 -0
- package/lib/connectors/common/coder.ts +93 -0
- package/lib/connectors/common/handler.ts +62 -0
- package/lib/connectors/hybrid/IHybridSocket.ts +9 -0
- package/lib/connectors/hybrid/switcher.ts +142 -0
- package/lib/connectors/hybrid/tcpprocessor.ts +43 -0
- package/lib/connectors/hybrid/tcpsocket.ts +223 -0
- package/lib/connectors/hybrid/wsprocessor.ts +57 -0
- package/lib/connectors/hybridconnector.ts +134 -0
- package/lib/connectors/hybridsocket.ts +168 -0
- package/lib/connectors/mqtt/generate.ts +103 -0
- package/lib/connectors/mqtt/mqttadaptor.ts +114 -0
- package/lib/connectors/mqtt/protocol.ts +49 -0
- package/lib/connectors/mqttconnector.ts +134 -0
- package/lib/connectors/mqttsocket.ts +79 -0
- package/lib/connectors/sioconnector.ts +161 -0
- package/lib/connectors/siosocket.ts +85 -0
- package/lib/connectors/udpconnector.ts +113 -0
- package/lib/connectors/udpsocket.ts +110 -0
- package/lib/filters/handler/serial.ts +46 -0
- package/lib/filters/handler/time.ts +35 -0
- package/lib/filters/handler/timeout.ts +50 -0
- package/lib/filters/handler/toobusy.ts +37 -0
- package/lib/filters/rpc/rpcLog.ts +42 -0
- package/lib/filters/rpc/toobusy.ts +41 -0
- package/lib/index.ts +74 -0
- package/lib/interfaces/IComponent.ts +47 -0
- package/lib/interfaces/IConnector.ts +20 -0
- package/lib/interfaces/IHandlerFilter.ts +15 -0
- package/lib/interfaces/ILifeCycle.ts +16 -0
- package/lib/interfaces/IPlugin.ts +65 -0
- package/lib/interfaces/IPushScheduler.ts +52 -0
- package/lib/interfaces/ISocket.ts +26 -0
- package/lib/interfaces/IStore.ts +10 -0
- package/lib/interfaces/define.ts +15 -0
- package/lib/master/master.ts +148 -0
- package/lib/master/starter.ts +234 -0
- package/lib/master/watchdog.ts +135 -0
- package/lib/melo.ts +152 -0
- package/lib/modules/console.ts +465 -0
- package/lib/modules/masterwatcher.ts +120 -0
- package/lib/modules/monitorwatcher.ts +151 -0
- package/lib/modules/onlineUser.ts +78 -0
- package/lib/modules/restartNotifyModule.ts +128 -0
- package/lib/modules/watchServer.ts +766 -0
- package/lib/monitor/monitor.ts +99 -0
- package/lib/pushSchedulers/buffer.ts +117 -0
- package/lib/pushSchedulers/direct.ts +65 -0
- package/lib/pushSchedulers/multi.ts +94 -0
- package/lib/server/server.ts +554 -0
- package/lib/util/appUtil.ts +313 -0
- package/lib/util/constants.ts +154 -0
- package/lib/util/countDownLatch.ts +72 -0
- package/lib/util/events.ts +15 -0
- package/lib/util/handlerHelper.ts +5 -0
- package/lib/util/log.ts +11 -0
- package/lib/util/moduleUtil.ts +110 -0
- package/lib/util/pathUtil.ts +132 -0
- package/lib/util/remoterHelper.ts +68 -0
- package/lib/util/utils.ts +365 -0
- package/package.json +93 -0
- package/template/game-server/.vscode/launch.json +27 -0
- package/template/game-server/app/servers/connector/handler/entryHandler.ts +50 -0
- package/template/game-server/app/servers/connector/remote/authRemoter.ts +36 -0
- package/template/game-server/app.ts +30 -0
- package/template/game-server/app.ts.mqtt +32 -0
- package/template/game-server/app.ts.sio +36 -0
- package/template/game-server/app.ts.sio.wss +34 -0
- package/template/game-server/app.ts.udp +31 -0
- package/template/game-server/app.ts.wss +40 -0
- package/template/game-server/config/adminServer.json +5 -0
- package/template/game-server/config/adminUser.json +22 -0
- package/template/game-server/config/clientProtos.json +1 -0
- package/template/game-server/config/dictionary.json +1 -0
- package/template/game-server/config/log4js.json +150 -0
- package/template/game-server/config/master.json +8 -0
- package/template/game-server/config/serverProtos.json +1 -0
- package/template/game-server/config/servers.json +12 -0
- package/template/game-server/copy.js +5 -0
- package/template/game-server/package.json +28 -0
- package/template/game-server/preload.ts +40 -0
- package/template/game-server/tsconfig.json +36 -0
- package/template/npm-install.bat +4 -0
- package/template/npm-install.sh +5 -0
- package/template/readme.md +31 -0
- package/template/shared/server.crt +15 -0
- package/template/shared/server.key +15 -0
- package/template/web-server/app.js +25 -0
- package/template/web-server/app.js.https +36 -0
- package/template/web-server/bin/component.bat +1 -0
- package/template/web-server/bin/component.sh +1 -0
- package/template/web-server/package.json +10 -0
- package/template/web-server/public/css/base.css +76 -0
- package/template/web-server/public/image/logo.png +0 -0
- package/template/web-server/public/image/sp.png +0 -0
- package/template/web-server/public/index.html +57 -0
- package/template/web-server/public/index.html.sio +58 -0
- package/template/web-server/public/js/lib/build/build.js +1730 -0
- package/template/web-server/public/js/lib/build/build.js.wss +1721 -0
- package/template/web-server/public/js/lib/component.json +6 -0
- package/template/web-server/public/js/lib/local/boot/component.json +11 -0
- package/template/web-server/public/js/lib/local/boot/index.js +11 -0
- package/template/web-server/public/js/lib/meloclient.js +456 -0
- package/template/web-server/public/js/lib/meloclient.js.wss +456 -0
- package/template/web-server/public/js/lib/socket.io.js +3 -0
- package/test/application.ts +607 -0
- package/test/filters/handler/serial.ts +47 -0
- package/test/filters/handler/time.ts +47 -0
- package/test/filters/handler/timeout.ts +46 -0
- package/test/filters/handler/toobusy.ts +59 -0
- package/test/filters/rpc/rpcLog.ts +20 -0
- package/test/filters/rpc/toobusy.ts +40 -0
- package/test/manager/mockChannelManager.ts +92 -0
- package/test/manager/taskManager.ts +78 -0
- package/test/mock-base/app/servers/other-file +0 -0
- package/test/mock-plugin/components/mockPlugin.ts +8 -0
- package/test/mock-plugin/events/mockEvent.ts +12 -0
- package/test/modules/console.ts +264 -0
- package/test/pomelo.ts +18 -0
- package/test/remote/channelRemote.ts +176 -0
- package/test/service/channel.ts +161 -0
- package/test/service/channelService.ts +243 -0
- package/test/service/connectionService.ts +142 -0
- package/test/service/filterService.ts +165 -0
- package/test/service/handlerService.ts +77 -0
- package/test/service/sessionService.ts +464 -0
- package/test/util/countDownLatch.ts +81 -0
- package/test/util/pathUtil.ts +122 -0
- package/test/util/utils.ts +165 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPluginCronPath = exports.getPluginHandlerPath = exports.getPluginRemotePath = exports.getLogPath = exports.getScriptPath = exports.getHandlerPath = exports.remotePathRecord = exports.listUserRemoteDir = exports.getCronPath = exports.getUserRemotePath = exports.getSysRemotePath = exports.getRelativePath = void 0;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const Constants = require("./constants");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
/**
|
|
9
|
+
* Get relative path
|
|
10
|
+
*
|
|
11
|
+
* @param {String} path full path
|
|
12
|
+
* @return {String} relative path
|
|
13
|
+
*/
|
|
14
|
+
function getRelativePath(path) {
|
|
15
|
+
return path.replace(process.cwd(), '');
|
|
16
|
+
}
|
|
17
|
+
exports.getRelativePath = getRelativePath;
|
|
18
|
+
/**
|
|
19
|
+
* Get system remote service path
|
|
20
|
+
*
|
|
21
|
+
* @param {String} role server role: frontend, backend
|
|
22
|
+
* @return {String} path string if the path exist else null
|
|
23
|
+
*/
|
|
24
|
+
function getSysRemotePath(role) {
|
|
25
|
+
let p = path.join(__dirname, '/../common/remote/', role);
|
|
26
|
+
return fs.existsSync(p) ? p : null;
|
|
27
|
+
}
|
|
28
|
+
exports.getSysRemotePath = getSysRemotePath;
|
|
29
|
+
/**
|
|
30
|
+
* Get user remote service path
|
|
31
|
+
*
|
|
32
|
+
* @param {String} appBase application base path
|
|
33
|
+
* @param {String} serverType server type
|
|
34
|
+
* @return {String} path string if the path exist else null
|
|
35
|
+
*/
|
|
36
|
+
function getUserRemotePath(appBase, serverType) {
|
|
37
|
+
let p = path.join(appBase, '/app/servers/', serverType, Constants.DIR.REMOTE);
|
|
38
|
+
return fs.existsSync(p) ? p : null;
|
|
39
|
+
}
|
|
40
|
+
exports.getUserRemotePath = getUserRemotePath;
|
|
41
|
+
/**
|
|
42
|
+
* Get user remote cron path
|
|
43
|
+
*
|
|
44
|
+
* @param {String} appBase application base path
|
|
45
|
+
* @param {String} serverType server type
|
|
46
|
+
* @return {String} path string if the path exist else null
|
|
47
|
+
*/
|
|
48
|
+
function getCronPath(appBase, serverType) {
|
|
49
|
+
let p = path.join(appBase, '/app/servers/', serverType, Constants.DIR.CRON);
|
|
50
|
+
return fs.existsSync(p) ? p : null;
|
|
51
|
+
}
|
|
52
|
+
exports.getCronPath = getCronPath;
|
|
53
|
+
/**
|
|
54
|
+
* List all the subdirectory names of user remote directory
|
|
55
|
+
* which hold the codes for all the server types.
|
|
56
|
+
*
|
|
57
|
+
* @param {String} appBase application base path
|
|
58
|
+
* @return {Array} all the subdiretory name under servers/
|
|
59
|
+
*/
|
|
60
|
+
function listUserRemoteDir(appBase) {
|
|
61
|
+
let base = path.join(appBase, '/app/servers/');
|
|
62
|
+
let files = fs.readdirSync(base);
|
|
63
|
+
return files.filter(function (fn) {
|
|
64
|
+
if (fn.charAt(0) === '.') {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return fs.statSync(path.join(base, fn)).isDirectory();
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
exports.listUserRemoteDir = listUserRemoteDir;
|
|
71
|
+
/**
|
|
72
|
+
* Compose remote path record
|
|
73
|
+
*
|
|
74
|
+
* @param {String} namespace remote path namespace, such as: 'sys', 'user'
|
|
75
|
+
* @param {String} serverType
|
|
76
|
+
* @param {String} path remote service source path
|
|
77
|
+
* @param {Boolean} relativePath convert path to relative path
|
|
78
|
+
* @return {Object} remote path record
|
|
79
|
+
*/
|
|
80
|
+
function remotePathRecord(namespace, serverType, path, relativePath) {
|
|
81
|
+
if (relativePath) {
|
|
82
|
+
path = getRelativePath(path);
|
|
83
|
+
}
|
|
84
|
+
return { namespace: namespace, serverType: serverType, path: path };
|
|
85
|
+
}
|
|
86
|
+
exports.remotePathRecord = remotePathRecord;
|
|
87
|
+
/**
|
|
88
|
+
* Get handler path
|
|
89
|
+
*
|
|
90
|
+
* @param {String} appBase application base path
|
|
91
|
+
* @param {String} serverType server type
|
|
92
|
+
* @return {String} path string if the path exist else null
|
|
93
|
+
*/
|
|
94
|
+
function getHandlerPath(appBase, serverType) {
|
|
95
|
+
let p = path.join(appBase, '/app/servers/', serverType, Constants.DIR.HANDLER);
|
|
96
|
+
return fs.existsSync(p) ? p : null;
|
|
97
|
+
}
|
|
98
|
+
exports.getHandlerPath = getHandlerPath;
|
|
99
|
+
/**
|
|
100
|
+
* Get admin script root path.
|
|
101
|
+
*
|
|
102
|
+
* @param {String} appBase application base path
|
|
103
|
+
* @return {String} script path string
|
|
104
|
+
*/
|
|
105
|
+
function getScriptPath(appBase) {
|
|
106
|
+
return path.join(appBase, Constants.DIR.SCRIPT);
|
|
107
|
+
}
|
|
108
|
+
exports.getScriptPath = getScriptPath;
|
|
109
|
+
/**
|
|
110
|
+
* Get logs path.
|
|
111
|
+
*
|
|
112
|
+
* @param {String} appBase application base path
|
|
113
|
+
* @return {String} logs path string
|
|
114
|
+
*/
|
|
115
|
+
function getLogPath(appBase) {
|
|
116
|
+
return path.join(appBase, Constants.DIR.LOG);
|
|
117
|
+
}
|
|
118
|
+
exports.getLogPath = getLogPath;
|
|
119
|
+
function getPluginRemotePath(basePath) {
|
|
120
|
+
let p = path.join(basePath, constants_1.DIR.REMOTE);
|
|
121
|
+
return fs.existsSync(p) ? p : null;
|
|
122
|
+
}
|
|
123
|
+
exports.getPluginRemotePath = getPluginRemotePath;
|
|
124
|
+
function getPluginHandlerPath(basePath) {
|
|
125
|
+
let p = path.join(basePath, constants_1.DIR.HANDLER);
|
|
126
|
+
return fs.existsSync(p) ? p : null;
|
|
127
|
+
}
|
|
128
|
+
exports.getPluginHandlerPath = getPluginHandlerPath;
|
|
129
|
+
function getPluginCronPath(basePath) {
|
|
130
|
+
let p = path.join(basePath, constants_1.DIR.CRON);
|
|
131
|
+
return fs.existsSync(p) ? p : null;
|
|
132
|
+
}
|
|
133
|
+
exports.getPluginCronPath = getPluginCronPath;
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aFV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbC9wYXRoVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLHlDQUF5QztBQUV6QywyQ0FBa0M7QUFFbEM7Ozs7O0dBS0c7QUFDSCxTQUFnQixlQUFlLENBQUMsSUFBWTtJQUN4QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQzFDLENBQUM7QUFGRCwwQ0FFQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsSUFBWTtJQUN6QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZDLENBQUM7QUFIRCw0Q0FHQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxVQUFrQjtJQUNqRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2QyxDQUFDO0FBSEQsOENBR0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixXQUFXLENBQUMsT0FBZSxFQUFFLFVBQWtCO0lBQzNELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxF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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bindRemoterMethod = void 0;
|
|
4
|
+
function bindRemoterMethod(method, thisArg, routeParamType) {
|
|
5
|
+
return method.bind(thisArg);
|
|
6
|
+
}
|
|
7
|
+
exports.bindRemoterMethod = bindRemoterMethod;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlckhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi91dGlsL3JlbW90ZXJIZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbURBLFNBQWdCLGlCQUFpQixDQUE4QyxNQUFTLEVBQUUsT0FBVSxFQUFFLGNBQThDO0lBQ2hKLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQVEsQ0FBQztBQUN2QyxDQUFDO0FBRkQsOENBRUMifQ==
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.promisify = exports.extendsObject = exports.isObject = exports.headHandler = exports.loadCluster = exports.isLocal = exports.checkPort = exports.ping = exports.unicodeToUtf8 = exports.hasChineseChar = exports.format = exports.arrayDiff = exports.startsWith = exports.endsWith = exports.size = exports.invokeCallback = void 0;
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const util = require("util");
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const melo_logger_1 = require("@bigtyphoon/melo-logger");
|
|
8
|
+
const Constants = require("./constants");
|
|
9
|
+
const path = require("path");
|
|
10
|
+
const melo_1 = require("../melo");
|
|
11
|
+
let logger = (0, melo_logger_1.getLogger)('melo', path.basename(__filename));
|
|
12
|
+
/**
|
|
13
|
+
* Invoke callback with check
|
|
14
|
+
*/
|
|
15
|
+
function invokeCallback(cb, ...args) {
|
|
16
|
+
if (typeof cb === 'function') {
|
|
17
|
+
let len = args.length + 1;
|
|
18
|
+
if (len === 1) {
|
|
19
|
+
return cb();
|
|
20
|
+
}
|
|
21
|
+
if (len === 2) {
|
|
22
|
+
return cb(args[0]);
|
|
23
|
+
}
|
|
24
|
+
if (len === 3) {
|
|
25
|
+
return cb(args[0], args[1]);
|
|
26
|
+
}
|
|
27
|
+
if (len === 4) {
|
|
28
|
+
return cb(args[0], args[1], args[2]);
|
|
29
|
+
}
|
|
30
|
+
cb.apply(null, args);
|
|
31
|
+
// cb.apply(null, Array.prototype.slice.call(arguments, 1));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.invokeCallback = invokeCallback;
|
|
35
|
+
/**
|
|
36
|
+
* Get the count of elements of object
|
|
37
|
+
*/
|
|
38
|
+
function size(obj) {
|
|
39
|
+
let count = 0;
|
|
40
|
+
for (let i in obj) {
|
|
41
|
+
if (obj.hasOwnProperty(i) && typeof obj[i] !== 'function') {
|
|
42
|
+
count++;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return count;
|
|
46
|
+
}
|
|
47
|
+
exports.size = size;
|
|
48
|
+
/**
|
|
49
|
+
* Check a string whether ends with another string
|
|
50
|
+
*/
|
|
51
|
+
function endsWith(str, suffix) {
|
|
52
|
+
if (typeof str !== 'string' || typeof suffix !== 'string' ||
|
|
53
|
+
suffix.length > str.length) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return str.indexOf(suffix, str.length - suffix.length) !== -1;
|
|
57
|
+
}
|
|
58
|
+
exports.endsWith = endsWith;
|
|
59
|
+
/**
|
|
60
|
+
* Check a string whether starts with another string
|
|
61
|
+
*/
|
|
62
|
+
function startsWith(str, prefix) {
|
|
63
|
+
if (typeof str !== 'string' || typeof prefix !== 'string' ||
|
|
64
|
+
prefix.length > str.length) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return str.indexOf(prefix) === 0;
|
|
68
|
+
}
|
|
69
|
+
exports.startsWith = startsWith;
|
|
70
|
+
/**
|
|
71
|
+
* Compare the two arrays and return the difference.
|
|
72
|
+
*/
|
|
73
|
+
function arrayDiff(array1, array2) {
|
|
74
|
+
let o = {};
|
|
75
|
+
for (let i = 0, len = array2.length; i < len; i++) {
|
|
76
|
+
o[array2[i]] = true;
|
|
77
|
+
}
|
|
78
|
+
let result = [];
|
|
79
|
+
for (let i = 0, len = array1.length; i < len; i++) {
|
|
80
|
+
let v = array1[i];
|
|
81
|
+
if (o[v])
|
|
82
|
+
continue;
|
|
83
|
+
result.push(v);
|
|
84
|
+
}
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
exports.arrayDiff = arrayDiff;
|
|
88
|
+
/*
|
|
89
|
+
* Date format
|
|
90
|
+
*/
|
|
91
|
+
function format(date, format) {
|
|
92
|
+
format = format || 'MMddhhmm';
|
|
93
|
+
let o = {
|
|
94
|
+
'M+': date.getMonth() + 1,
|
|
95
|
+
'd+': date.getDate(),
|
|
96
|
+
'h+': date.getHours(),
|
|
97
|
+
'm+': date.getMinutes(),
|
|
98
|
+
's+': date.getSeconds(),
|
|
99
|
+
'q+': Math.floor((date.getMonth() + 3) / 3),
|
|
100
|
+
'S': date.getMilliseconds() // millisecond
|
|
101
|
+
};
|
|
102
|
+
if (/(y+)/.test(format)) {
|
|
103
|
+
format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
|
|
104
|
+
}
|
|
105
|
+
for (let k in o) {
|
|
106
|
+
if (new RegExp('(' + k + ')').test(format)) {
|
|
107
|
+
format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] :
|
|
108
|
+
('00' + o[k]).substr(('' + o[k]).length));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return format;
|
|
112
|
+
}
|
|
113
|
+
exports.format = format;
|
|
114
|
+
/**
|
|
115
|
+
* check if has Chinese characters.
|
|
116
|
+
*/
|
|
117
|
+
function hasChineseChar(str) {
|
|
118
|
+
if (/.*[\u4e00-\u9fa5]+.*$/.test(str)) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.hasChineseChar = hasChineseChar;
|
|
126
|
+
/**
|
|
127
|
+
* transform unicode to utf8
|
|
128
|
+
*/
|
|
129
|
+
function unicodeToUtf8(str) {
|
|
130
|
+
let i, len, ch;
|
|
131
|
+
let utf8Str = '';
|
|
132
|
+
len = str.length;
|
|
133
|
+
for (i = 0; i < len; i++) {
|
|
134
|
+
ch = str.charCodeAt(i);
|
|
135
|
+
if ((ch >= 0x0) && (ch <= 0x7F)) {
|
|
136
|
+
utf8Str += str.charAt(i);
|
|
137
|
+
}
|
|
138
|
+
else if ((ch >= 0x80) && (ch <= 0x7FF)) {
|
|
139
|
+
utf8Str += String.fromCharCode(0xc0 | ((ch >> 6) & 0x1F));
|
|
140
|
+
utf8Str += String.fromCharCode(0x80 | (ch & 0x3F));
|
|
141
|
+
}
|
|
142
|
+
else if ((ch >= 0x800) && (ch <= 0xFFFF)) {
|
|
143
|
+
utf8Str += String.fromCharCode(0xe0 | ((ch >> 12) & 0xF));
|
|
144
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 6) & 0x3F));
|
|
145
|
+
utf8Str += String.fromCharCode(0x80 | (ch & 0x3F));
|
|
146
|
+
}
|
|
147
|
+
else if ((ch >= 0x10000) && (ch <= 0x1FFFFF)) {
|
|
148
|
+
utf8Str += String.fromCharCode(0xF0 | ((ch >> 18) & 0x7));
|
|
149
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 12) & 0x3F));
|
|
150
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 6) & 0x3F));
|
|
151
|
+
utf8Str += String.fromCharCode(0x80 | (ch & 0x3F));
|
|
152
|
+
}
|
|
153
|
+
else if ((ch >= 0x200000) && (ch <= 0x3FFFFFF)) {
|
|
154
|
+
utf8Str += String.fromCharCode(0xF8 | ((ch >> 24) & 0x3));
|
|
155
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 18) & 0x3F));
|
|
156
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 12) & 0x3F));
|
|
157
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 6) & 0x3F));
|
|
158
|
+
utf8Str += String.fromCharCode(0x80 | (ch & 0x3F));
|
|
159
|
+
}
|
|
160
|
+
else if ((ch >= 0x4000000) && (ch <= 0x7FFFFFFF)) {
|
|
161
|
+
utf8Str += String.fromCharCode(0xFC | ((ch >> 30) & 0x1));
|
|
162
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 24) & 0x3F));
|
|
163
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 18) & 0x3F));
|
|
164
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 12) & 0x3F));
|
|
165
|
+
utf8Str += String.fromCharCode(0x80 | ((ch >> 6) & 0x3F));
|
|
166
|
+
utf8Str += String.fromCharCode(0x80 | (ch & 0x3F));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return utf8Str;
|
|
170
|
+
}
|
|
171
|
+
exports.unicodeToUtf8 = unicodeToUtf8;
|
|
172
|
+
/**
|
|
173
|
+
* Ping server to check if network is available
|
|
174
|
+
*
|
|
175
|
+
*/
|
|
176
|
+
function ping(host, cb) {
|
|
177
|
+
if (!isLocal(host)) {
|
|
178
|
+
let cmd = 'ping -w 15 ' + host;
|
|
179
|
+
(0, child_process_1.exec)(cmd, function (err, stdout, stderr) {
|
|
180
|
+
if (!!err) {
|
|
181
|
+
cb(false);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
cb(true);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
cb(true);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.ping = ping;
|
|
192
|
+
/**
|
|
193
|
+
* Check if server is exsit.
|
|
194
|
+
*
|
|
195
|
+
*/
|
|
196
|
+
function checkPort(app, server, cb) {
|
|
197
|
+
if (!server.port && !server.clientPort) {
|
|
198
|
+
invokeCallback(cb, 'leisure');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
let port = server.port || server.clientPort;
|
|
202
|
+
const host = server.host;
|
|
203
|
+
const generateCommand = function (host, port) {
|
|
204
|
+
let cmd;
|
|
205
|
+
let ssh_params = app.get(Constants.RESERVED.SSH_CONFIG_PARAMS);
|
|
206
|
+
if (!!ssh_params && Array.isArray(ssh_params)) {
|
|
207
|
+
ssh_params = ssh_params.join(' ');
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
ssh_params = '';
|
|
211
|
+
}
|
|
212
|
+
if (!isLocal(host)) {
|
|
213
|
+
cmd = util.format('ssh %s %s "netstat -an|awk \'{print $4}\'|grep %s|wc -l"', host, ssh_params, port);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
cmd = util.format('netstat -an|awk \'{print $4}\'|grep %s|wc -l', port);
|
|
217
|
+
}
|
|
218
|
+
return cmd;
|
|
219
|
+
};
|
|
220
|
+
const cmd1 = generateCommand(host, port);
|
|
221
|
+
(0, child_process_1.exec)(cmd1, function (err, stdout, stderr) {
|
|
222
|
+
if (err) {
|
|
223
|
+
logger.error('command %s execute with error: %j', cmd1, err.stack);
|
|
224
|
+
invokeCallback(cb, 'error');
|
|
225
|
+
}
|
|
226
|
+
else if (stdout.trim() !== '0') {
|
|
227
|
+
invokeCallback(cb, 'busy');
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
port = server.clientPort;
|
|
231
|
+
const cmd2 = generateCommand(host, port);
|
|
232
|
+
(0, child_process_1.exec)(cmd2, function (err, stdout, stderr) {
|
|
233
|
+
if (err) {
|
|
234
|
+
logger.error('command %s execute with error: %j', cmd2, err.stack);
|
|
235
|
+
invokeCallback(cb, 'error');
|
|
236
|
+
}
|
|
237
|
+
else if (stdout.trim() !== '0') {
|
|
238
|
+
invokeCallback(cb, 'busy');
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
invokeCallback(cb, 'leisure');
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
exports.checkPort = checkPort;
|
|
248
|
+
function isLocal(host) {
|
|
249
|
+
const app = melo_1.melo.app;
|
|
250
|
+
if (!app) {
|
|
251
|
+
return host === '127.0.0.1' || host === 'localhost' || host === '0.0.0.0' || inLocal(host);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
return host === '127.0.0.1' || host === 'localhost' || host === '0.0.0.0' || inLocal(host) || host === app.master.host;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
exports.isLocal = isLocal;
|
|
258
|
+
/**
|
|
259
|
+
* Load cluster server.
|
|
260
|
+
*
|
|
261
|
+
*/
|
|
262
|
+
function loadCluster(app, server, serverMap) {
|
|
263
|
+
let increaseFields = {};
|
|
264
|
+
let host = server.host;
|
|
265
|
+
let count = Number(server[Constants.RESERVED.CLUSTER_COUNT]);
|
|
266
|
+
let seq = app.clusterSeq[server.serverType];
|
|
267
|
+
if (!seq) {
|
|
268
|
+
seq = 0;
|
|
269
|
+
app.clusterSeq[server.serverType] = count;
|
|
270
|
+
}
|
|
271
|
+
else {
|
|
272
|
+
app.clusterSeq[server.serverType] = seq + count;
|
|
273
|
+
}
|
|
274
|
+
for (let key in server) {
|
|
275
|
+
let value = server[key].toString();
|
|
276
|
+
if (value.indexOf(Constants.RESERVED.CLUSTER_SIGNAL) > 0) {
|
|
277
|
+
let base = server[key].slice(0, -2);
|
|
278
|
+
increaseFields[key] = base;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
let clone = function (src) {
|
|
282
|
+
let rs = {};
|
|
283
|
+
for (let key in src) {
|
|
284
|
+
rs[key] = src[key];
|
|
285
|
+
}
|
|
286
|
+
return rs;
|
|
287
|
+
};
|
|
288
|
+
for (let i = 0, l = seq; i < count; i++, l++) {
|
|
289
|
+
let cserver = clone(server);
|
|
290
|
+
cserver.id = Constants.RESERVED.CLUSTER_PREFIX + server.serverType + '-' + l;
|
|
291
|
+
for (let k in increaseFields) {
|
|
292
|
+
let v = parseInt(increaseFields[k]);
|
|
293
|
+
cserver[k] = v + i;
|
|
294
|
+
}
|
|
295
|
+
serverMap[cserver.id] = cserver;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
exports.loadCluster = loadCluster;
|
|
299
|
+
// export function extends(origin, add)
|
|
300
|
+
// {
|
|
301
|
+
// if (!add || !this.isObject(add)) return origin;
|
|
302
|
+
// let keys = Object.keys(add);
|
|
303
|
+
// let i = keys.length;
|
|
304
|
+
// while (i--)
|
|
305
|
+
// {
|
|
306
|
+
// origin[keys[i]] = add[keys[i]];
|
|
307
|
+
// }
|
|
308
|
+
// return origin;
|
|
309
|
+
// };
|
|
310
|
+
function headHandler(headBuffer) {
|
|
311
|
+
let len = 0;
|
|
312
|
+
for (let i = 1; i < 4; i++) {
|
|
313
|
+
if (i > 1) {
|
|
314
|
+
len <<= 8;
|
|
315
|
+
}
|
|
316
|
+
len += headBuffer.readUInt8(i);
|
|
317
|
+
}
|
|
318
|
+
return len;
|
|
319
|
+
}
|
|
320
|
+
exports.headHandler = headHandler;
|
|
321
|
+
let inLocal = function (host) {
|
|
322
|
+
for (let index in localIps) {
|
|
323
|
+
if (host === localIps[index]) {
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
return false;
|
|
328
|
+
};
|
|
329
|
+
let localIps = function () {
|
|
330
|
+
let ifaces = os.networkInterfaces();
|
|
331
|
+
let ips = [];
|
|
332
|
+
let func = function (details) {
|
|
333
|
+
if (details.family === 'IPv4') {
|
|
334
|
+
ips.push(details.address);
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
for (let dev in ifaces) {
|
|
338
|
+
ifaces[dev].forEach(func);
|
|
339
|
+
}
|
|
340
|
+
return ips;
|
|
341
|
+
}();
|
|
342
|
+
function isObject(arg) {
|
|
343
|
+
return typeof arg === 'object' && arg !== null;
|
|
344
|
+
}
|
|
345
|
+
exports.isObject = isObject;
|
|
346
|
+
function extendsObject(origin, add) {
|
|
347
|
+
if (!add || !isObject(add))
|
|
348
|
+
return origin;
|
|
349
|
+
let keys = Object.keys(add);
|
|
350
|
+
let i = keys.length;
|
|
351
|
+
while (i--) {
|
|
352
|
+
origin[keys[i]] = add[keys[i]];
|
|
353
|
+
}
|
|
354
|
+
return origin;
|
|
355
|
+
}
|
|
356
|
+
exports.extendsObject = extendsObject;
|
|
357
|
+
exports.promisify = util.promisify;
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvdXRpbC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLGlEQUFtQztBQUNuQyx5REFBa0Q7QUFDbEQseUNBQXlDO0FBR3pDLDZCQUE2QjtBQUM3QixrQ0FBK0I7QUFFL0IsSUFBSSxNQUFNLEdBQUcsSUFBQSx1QkFBUyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFHMUQ7O0dBRUc7QUFDSCxTQUFnQixjQUFjLENBQUMsRUFBWSxFQUFFLEdBQUcsSUFBVztJQUN2RCxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtRQUMxQixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUU7WUFDWCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QjtRQUVELElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtZQUNYLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQjtRQUVELElBQUksR0FBRyxLQUFLLENBQUMsRUFBRTtZQUNYLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEM7UUFDRCxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQiw0REFBNEQ7S0FDL0Q7QUFDTCxD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LENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7U0FFdEQ7YUFBTSxJQUFJLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFO1lBQzVDLE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBRXREO2FBQU0sSUFBSSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRTtZQUM5QyxPQUFPLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDM0QsT0FBTyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksTUFBTSxDQUFD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
|