gamelet-cli 0.3.20 → 0.3.23
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/assets/package.json.twig +4 -4
- package/build/package.json +2 -1
- package/package.json +2 -1
- package/build/src/gamelet/download.js +0 -730
- package/build/src/gamelet/merges.js +0 -106
- package/build/src/gamelet/prepare.js +0 -275
- package/build/src/gamelet/upload.js +0 -279
- package/build/src/index.js +0 -86
- package/build/src/server/Constant.js +0 -10
- package/build/src/server/entities/Client.js +0 -57
- package/build/src/server/entities/ClientOwner.js +0 -67
- package/build/src/server/entities/ClientProject.js +0 -68
- package/build/src/server/entities/Gameroom.js +0 -88
- package/build/src/server/entities/GameroomBase.js +0 -244
- package/build/src/server/entities/Gamezone.js +0 -73
- package/build/src/server/entities/ListFilter.js +0 -193
- package/build/src/server/entities/Monitor.js +0 -81
- package/build/src/server/entities/Player.js +0 -132
- package/build/src/server/managers/ClientManager.js +0 -61
- package/build/src/server/managers/Database.js +0 -586
- package/build/src/server/managers/GameroomManager.js +0 -392
- package/build/src/server/managers/ManagerBase.js +0 -17
- package/build/src/server/managers/MonitorManager.js +0 -73
- package/build/src/server/managers/PlayerManager.js +0 -104
- package/build/src/server/managers/SocketManager.js +0 -50
- package/build/src/server/managers/UserManager.js +0 -58
- package/build/src/server/messages/Message.js +0 -141
- package/build/src/server/server.js +0 -110
- package/build/src/server/services/ServiceBase.js +0 -25
- package/build/src/server/services/clientService.js +0 -16
- package/build/src/server/services/gameroomService.js +0 -122
- package/build/src/server/services/gltserver.service.js +0 -24
- package/build/src/server/services/playerService.js +0 -30
- package/build/src/server/startServer.js +0 -31
- package/build/src/server/types/BadgeStatus.js +0 -25
- package/build/src/server/types/OrderType.js +0 -38
- package/build/src/server/types/SubmitType.js +0 -24
- package/build/src/server/types/TimeRange.js +0 -26
- package/build/src/server/utils/ArrayUtil.js +0 -126
- package/build/src/server/utils/IntUtil.js +0 -10
- package/build/src/server/utils/ObjectUtil.js +0 -191
- package/build/src/server/utils/StringUtil.js +0 -37
- package/build/src/server/vo/Database.js +0 -1
- package/build/src/server/vo/Gameroom.js +0 -1
- package/build/src/server/vo/Gamezone.js +0 -1
- package/build/src/server/vo/Player.js +0 -1
- package/build/src/server/vo/Response.js +0 -1
- package/build/src/server/vo/System.js +0 -1
- package/build/src/utils/cli.js +0 -49
- package/build/src/utils/file.js +0 -327
- package/build/src/utils/init.js +0 -42
- package/build/src/utils/log.js +0 -17
- package/build/src/utils/net.js +0 -39
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Gameroom = exports.GameroomState = void 0;
|
|
4
|
-
const GameroomBase_1 = require("./GameroomBase");
|
|
5
|
-
var GameroomState;
|
|
6
|
-
(function (GameroomState) {
|
|
7
|
-
GameroomState[GameroomState["OPEN"] = 0] = "OPEN";
|
|
8
|
-
GameroomState[GameroomState["LOCKED"] = 1] = "LOCKED";
|
|
9
|
-
GameroomState[GameroomState["OVER"] = 2] = "OVER";
|
|
10
|
-
})(GameroomState = exports.GameroomState || (exports.GameroomState = {}));
|
|
11
|
-
class Gameroom extends GameroomBase_1.GameroomBase {
|
|
12
|
-
constructor(server, client, code, creator, gamezone, name, password, maxPlayers, state, stateJson, allowGuest) {
|
|
13
|
-
super('gameroom', code, server, client, stateJson);
|
|
14
|
-
this.creator = creator;
|
|
15
|
-
this.gamezone = gamezone;
|
|
16
|
-
this.name = name;
|
|
17
|
-
this.password = password;
|
|
18
|
-
this.maxPlayers = maxPlayers;
|
|
19
|
-
this.state = state;
|
|
20
|
-
this.allowGuest = allowGuest;
|
|
21
|
-
this.brainer = creator;
|
|
22
|
-
}
|
|
23
|
-
get monitorChannel() {
|
|
24
|
-
return `(room) ${this.code}`;
|
|
25
|
-
}
|
|
26
|
-
dispose() {
|
|
27
|
-
this.gamezone.removeGameroom(this);
|
|
28
|
-
super.dispose();
|
|
29
|
-
}
|
|
30
|
-
addPlayer(player) {
|
|
31
|
-
if (this.playersCount >= this.maxPlayers) {
|
|
32
|
-
throw new Error('The number of players has reached the limit of the gameroom size.');
|
|
33
|
-
}
|
|
34
|
-
if (super.addPlayer(player)) {
|
|
35
|
-
player.setGameroom(this);
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
removePlayer(player) {
|
|
41
|
-
if (player.getGameroom() == this) {
|
|
42
|
-
player.setGameroom(null);
|
|
43
|
-
}
|
|
44
|
-
if (super.removePlayer(player)) {
|
|
45
|
-
if (!this.playersCount) {
|
|
46
|
-
this.dispose();
|
|
47
|
-
}
|
|
48
|
-
return true;
|
|
49
|
-
}
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
toVo() {
|
|
53
|
-
const json = {
|
|
54
|
-
code: this.code,
|
|
55
|
-
creator: this.creator.toVo(),
|
|
56
|
-
name: this.name,
|
|
57
|
-
zoneCode: this.gamezone.code,
|
|
58
|
-
maxPlayers: this.maxPlayers,
|
|
59
|
-
allowGuest: this.allowGuest,
|
|
60
|
-
createTime: this.createTime,
|
|
61
|
-
};
|
|
62
|
-
this.password && (json.pwd = 1);
|
|
63
|
-
return json;
|
|
64
|
-
}
|
|
65
|
-
toStatusVo() {
|
|
66
|
-
return {
|
|
67
|
-
state: this.state,
|
|
68
|
-
stateJson: this.stateJson,
|
|
69
|
-
players: this.playersCount
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
toAndStatusVo() {
|
|
73
|
-
return {
|
|
74
|
-
room: this.toVo(),
|
|
75
|
-
status: this.toStatusVo()
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
toFullVo() {
|
|
79
|
-
return {
|
|
80
|
-
room: this.toVo(),
|
|
81
|
-
status: this.toStatusVo(),
|
|
82
|
-
brainer: this.getBrainer().code,
|
|
83
|
-
playerStates: this.playerStates
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
exports.Gameroom = Gameroom;
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXJvb20uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0dhbWVyb29tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLGlEQUE4QztBQUc5QyxJQUFZLGFBSVg7QUFKRCxXQUFZLGFBQWE7SUFDckIsaURBQUksQ0FBQTtJQUNKLHFEQUFNLENBQUE7SUFDTixpREFBSSxDQUFBO0FBQ1IsQ0FBQyxFQUpXLGFBQWEsR0FBYixxQkFBYSxLQUFiLHFCQUFhLFFBSXhCO0FBRUQsTUFBYSxRQUFTLFNBQVEsMkJBQVk7SUFFdEMsWUFDSSxNQUEwQixFQUMxQixNQUFjLEVBQ2QsSUFBWSxFQUNMLE9BQWUsRUFDZixRQUFrQixFQUNsQixJQUFZLEVBQ1osUUFBZ0IsRUFDaEIsVUFBa0IsRUFDbEIsS0FBb0IsRUFDM0IsU0FBaUMsRUFDMUIsVUFBbUI7UUFFMUIsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQVQ1QyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNoQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWU7UUFFcEIsZUFBVSxHQUFWLFVBQVUsQ0FBUztRQUcxQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsU0FBUyxDQUFDLE1BQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxtRUFBbUUsQ0FBQyxDQUFBO1NBQ3ZGO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBYztRQUN2QixJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDcEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJO1FBQ0EsTUFBTSxJQUFJLEdBQVE7WUFDZCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDNUIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUM5QixDQUFBO1FBQ0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPO1lBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDN0IsQ0FBQTtJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQzVCLENBQUE7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUk7WUFDL0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ2xDLENBQUE7SUFDTCxDQUFDO0NBQ0o7QUF6RkQsNEJBeUZDIn0=
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GameroomBase = void 0;
|
|
4
|
-
const Message_1 = require("../messages/Message");
|
|
5
|
-
const ArrayUtil_1 = require("./../utils/ArrayUtil");
|
|
6
|
-
const events_1 = require("events");
|
|
7
|
-
const MonitorManager_1 = require("../managers/MonitorManager");
|
|
8
|
-
class GameroomBase extends events_1.EventEmitter {
|
|
9
|
-
constructor(roomType, code, server, client, stateJson) {
|
|
10
|
-
super();
|
|
11
|
-
this.roomType = roomType;
|
|
12
|
-
this.code = code;
|
|
13
|
-
this.server = server;
|
|
14
|
-
this.client = client;
|
|
15
|
-
this.stateJson = stateJson;
|
|
16
|
-
this.players = [];
|
|
17
|
-
// private states for each player, playerCode: object
|
|
18
|
-
this.playerStates = {};
|
|
19
|
-
this.createTime = Math.floor(Date.now() / 1000);
|
|
20
|
-
this.stateJson = this.stateJson || {};
|
|
21
|
-
}
|
|
22
|
-
get monitorChannel() {
|
|
23
|
-
return this.code;
|
|
24
|
-
}
|
|
25
|
-
dispose() {
|
|
26
|
-
this.listPlayers().forEach(player => this.removePlayer(player));
|
|
27
|
-
this.emit(GameroomBase.EVENT.DISPOSED);
|
|
28
|
-
MonitorManager_1.monitorManager.log(this.client.project.code, this.monitorChannel, this.roomType + ' disposed', this.code);
|
|
29
|
-
}
|
|
30
|
-
setPlayerSynced(player, value, updateBrainer) {
|
|
31
|
-
let promise;
|
|
32
|
-
if (this.setPlayerState(player, 'synced', value, false)) {
|
|
33
|
-
if (updateBrainer) {
|
|
34
|
-
promise = this.updateBrainer(true);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return (promise || Promise.resolve()).then(() => {
|
|
38
|
-
this.emit(GameroomBase.EVENT.PLAYER_SYNCED_CHANGED, player, value, this.brainer.code);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
isPlayerSynced(player) {
|
|
42
|
-
return !!this.getPlayerState(player, 'synced');
|
|
43
|
-
}
|
|
44
|
-
setPlayerState(player, key, value, emitEvent = true) {
|
|
45
|
-
if (this.players.includes(player)) {
|
|
46
|
-
let states = this.playerStates[player.code];
|
|
47
|
-
if (!states) {
|
|
48
|
-
this.playerStates[player.code] = states = {};
|
|
49
|
-
}
|
|
50
|
-
if (this._setPlayerState(states, key, value)) {
|
|
51
|
-
emitEvent && this.emit(GameroomBase.EVENT.PLAYER_STATE_CHANGED, player, key, value);
|
|
52
|
-
return true;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
throw new Error('Tried to set player state of a player who is not in this ' + this.roomType);
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
_setPlayerState(states, key, value) {
|
|
61
|
-
if (states[key] !== value) {
|
|
62
|
-
if (value === undefined || value === null) {
|
|
63
|
-
value = null;
|
|
64
|
-
delete states[key];
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
states[key] = value;
|
|
68
|
-
}
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
setPlayerStates(player, newStates) {
|
|
74
|
-
if (this.players.includes(player)) {
|
|
75
|
-
let result = false;
|
|
76
|
-
if (newStates) {
|
|
77
|
-
let states = this.playerStates[player.code];
|
|
78
|
-
if (!states) {
|
|
79
|
-
this.playerStates[player.code] = states = {};
|
|
80
|
-
}
|
|
81
|
-
for (let key in newStates) {
|
|
82
|
-
if (this._setPlayerState(states, key, newStates[key])) {
|
|
83
|
-
result = true;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
else if (this.playerStates[player.code]) {
|
|
88
|
-
result = true;
|
|
89
|
-
this.deletePlayerState(player);
|
|
90
|
-
}
|
|
91
|
-
if (result) {
|
|
92
|
-
this.emit(GameroomBase.EVENT.PLAYER_STATES_CHANGED, player, newStates);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
throw new Error('Tried to set player state of a player who is not in this ' + this.roomType);
|
|
97
|
-
}
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
getPlayer(code) {
|
|
101
|
-
return this.players.find(p => p.code == code);
|
|
102
|
-
}
|
|
103
|
-
includesPlayer(player) {
|
|
104
|
-
return this.players.includes(player);
|
|
105
|
-
}
|
|
106
|
-
getPlayerState(player, key) {
|
|
107
|
-
let state = this.playerStates[player.code];
|
|
108
|
-
return state && state[key];
|
|
109
|
-
}
|
|
110
|
-
getPlayerStates(player) {
|
|
111
|
-
return this.playerStates[player.code];
|
|
112
|
-
}
|
|
113
|
-
deletePlayerState(player) {
|
|
114
|
-
if (this.playerStates[player.code]) {
|
|
115
|
-
delete this.playerStates[player.code];
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
return false;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
listPlayers() {
|
|
123
|
-
return this.players.slice();
|
|
124
|
-
}
|
|
125
|
-
getPlayersStates() {
|
|
126
|
-
return this.playerStates;
|
|
127
|
-
}
|
|
128
|
-
get playersCount() {
|
|
129
|
-
return this.players.length;
|
|
130
|
-
}
|
|
131
|
-
get socketChannel() {
|
|
132
|
-
return this.code;
|
|
133
|
-
}
|
|
134
|
-
addPlayer(player) {
|
|
135
|
-
if (ArrayUtil_1.ArrayUtil.addUniqueElement(this.players, player)) {
|
|
136
|
-
if (!this.brainer) {
|
|
137
|
-
this.updateBrainer(false);
|
|
138
|
-
}
|
|
139
|
-
player.socket.join(this.socketChannel);
|
|
140
|
-
this.emit(GameroomBase.EVENT.PLAYER_ADDED, player);
|
|
141
|
-
this.emit(GameroomBase.EVENT.STATUS_CHANGED);
|
|
142
|
-
return true;
|
|
143
|
-
}
|
|
144
|
-
return false;
|
|
145
|
-
}
|
|
146
|
-
removePlayer(player) {
|
|
147
|
-
if (ArrayUtil_1.ArrayUtil.removeElement(this.players, player)) {
|
|
148
|
-
player.socket.leave(this.socketChannel);
|
|
149
|
-
if (this.deletePlayerState(player)) {
|
|
150
|
-
this.emit(GameroomBase.EVENT.PLAYER_STATES_CHANGED, player, null);
|
|
151
|
-
}
|
|
152
|
-
if (player == this.brainer) {
|
|
153
|
-
// must do this before we send playerLeft event
|
|
154
|
-
this.updateBrainer(false);
|
|
155
|
-
}
|
|
156
|
-
this.emit(GameroomBase.EVENT.STATUS_CHANGED);
|
|
157
|
-
this.emit(GameroomBase.EVENT.PLAYER_REMOVED, player);
|
|
158
|
-
return true;
|
|
159
|
-
}
|
|
160
|
-
return false;
|
|
161
|
-
}
|
|
162
|
-
setBrainerByPlayer(playerCode, needPreset) {
|
|
163
|
-
let brainer = this.players.find(p => p.code == playerCode);
|
|
164
|
-
if (!brainer) {
|
|
165
|
-
throw new Error('The player is not in room.');
|
|
166
|
-
}
|
|
167
|
-
return this._setBrainer(brainer, needPreset);
|
|
168
|
-
}
|
|
169
|
-
updateBrainer(needPreset) {
|
|
170
|
-
return this._setBrainer(this.chooseBrainer(), needPreset);
|
|
171
|
-
}
|
|
172
|
-
_setBrainer(brainer, needPreset) {
|
|
173
|
-
if (brainer != this.brainer) {
|
|
174
|
-
if (needPreset) {
|
|
175
|
-
return brainer.send(Message_1.Message.forRoomBrainerSet(this.code))
|
|
176
|
-
.then(() => {
|
|
177
|
-
this.brainer = brainer;
|
|
178
|
-
this.emit(GameroomBase.EVENT.BRAINER_CHANGED);
|
|
179
|
-
return this.brainer;
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
else {
|
|
183
|
-
this.brainer = brainer;
|
|
184
|
-
this.emit(GameroomBase.EVENT.BRAINER_CHANGED);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return Promise.resolve(this.brainer);
|
|
188
|
-
}
|
|
189
|
-
chooseBrainer() {
|
|
190
|
-
if (this.players.length) {
|
|
191
|
-
let idleStart = Date.now() - 10000;
|
|
192
|
-
let brainer = this.players[0];
|
|
193
|
-
let bestDelay = this.calcNetworkDelayValue(brainer, idleStart);
|
|
194
|
-
for (let i = this.players.length - 1; i > 0; --i) {
|
|
195
|
-
let player = this.players[i];
|
|
196
|
-
if (this.isPlayerSynced(player)) {
|
|
197
|
-
let delay = this.calcNetworkDelayValue(player, idleStart);
|
|
198
|
-
if (player.cheats) {
|
|
199
|
-
delay += 500;
|
|
200
|
-
}
|
|
201
|
-
if (delay < bestDelay) {
|
|
202
|
-
brainer = player;
|
|
203
|
-
bestDelay = delay;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return brainer;
|
|
208
|
-
}
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* network delay + idle factor
|
|
213
|
-
*/
|
|
214
|
-
calcNetworkDelayValue(player, idleStart) {
|
|
215
|
-
let value = player.networkDelay;
|
|
216
|
-
if (idleStart > player.lastMsgTime) {
|
|
217
|
-
value += (idleStart - player.lastMsgTime) / 100;
|
|
218
|
-
}
|
|
219
|
-
return value;
|
|
220
|
-
}
|
|
221
|
-
getBrainer() {
|
|
222
|
-
return this.brainer;
|
|
223
|
-
}
|
|
224
|
-
broadcast(msg) {
|
|
225
|
-
MonitorManager_1.monitorManager.logOutgoing(this.client.project.code, this.monitorChannel, this.roomType + '.broadcast', [this.code, msg.type, msg.params]);
|
|
226
|
-
msg.send(this.server.to(this.socketChannel));
|
|
227
|
-
}
|
|
228
|
-
broadcastByPlayer(msg, sender) {
|
|
229
|
-
MonitorManager_1.monitorManager.logIncoming(this.client.project.code, this.monitorChannel, this.roomType + '.broadcast', [this.code, msg.type, msg.params], sender);
|
|
230
|
-
msg.send(this.server.to(this.socketChannel));
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
exports.GameroomBase = GameroomBase;
|
|
234
|
-
GameroomBase.EVENT = {
|
|
235
|
-
DISPOSED: 'disposed',
|
|
236
|
-
PLAYER_ADDED: 'playerAdded',
|
|
237
|
-
PLAYER_REMOVED: 'playerRemoved',
|
|
238
|
-
BRAINER_CHANGED: 'brainerChanged',
|
|
239
|
-
STATUS_CHANGED: 'statusChanged',
|
|
240
|
-
PLAYER_STATE_CHANGED: 'playerStateChanged',
|
|
241
|
-
PLAYER_STATES_CHANGED: 'playerStatesChanged',
|
|
242
|
-
PLAYER_SYNCED_CHANGED: 'playerSyncedChanged',
|
|
243
|
-
};
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXJvb21CYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9HYW1lcm9vbUJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQThDO0FBQzlDLG9EQUFpRDtBQUVqRCxtQ0FBc0M7QUFDdEMsK0RBQTREO0FBRTVELE1BQWEsWUFBYSxTQUFRLHFCQUFZO0lBc0IxQyxZQUFtQixRQUFnQixFQUN4QixJQUFZLEVBQ1gsTUFBMEIsRUFDM0IsTUFBYyxFQUNkLFNBQWtDO1FBRXpDLEtBQUssRUFBRSxDQUFDO1FBTk8sYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUN4QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1gsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBYm5DLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFJakMscURBQXFEO1FBQzNDLGlCQUFZLEdBQThDLEVBQUUsQ0FBQztRQUVoRSxlQUFVLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFTdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkMsK0JBQWMsQ0FBQyxHQUFHLENBQUMsSUFB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
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Gamezone = void 0;
|
|
4
|
-
const ArrayUtil_1 = require("./../utils/ArrayUtil");
|
|
5
|
-
const GameroomBase_1 = require("./GameroomBase");
|
|
6
|
-
class Gamezone extends GameroomBase_1.GameroomBase {
|
|
7
|
-
constructor(code, server, client) {
|
|
8
|
-
super('gamezone', code, server, client);
|
|
9
|
-
this.gamerooms = [];
|
|
10
|
-
this._socketChannel = this.client.key + '|' + this.code;
|
|
11
|
-
}
|
|
12
|
-
get monitorChannel() {
|
|
13
|
-
return `(zone) ${this.code}`;
|
|
14
|
-
}
|
|
15
|
-
get socketChannel() {
|
|
16
|
-
return this._socketChannel;
|
|
17
|
-
}
|
|
18
|
-
listGamerooms(filter, length) {
|
|
19
|
-
let list = [];
|
|
20
|
-
for (let room of this.gamerooms) {
|
|
21
|
-
if (filter.test(room)) {
|
|
22
|
-
list.push(room);
|
|
23
|
-
if (list.length >= length) {
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return list;
|
|
29
|
-
}
|
|
30
|
-
listAllGamerooms() {
|
|
31
|
-
return this.gamerooms;
|
|
32
|
-
}
|
|
33
|
-
addPlayer(player) {
|
|
34
|
-
if (super.addPlayer(player)) {
|
|
35
|
-
player.addGamezone(this);
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
removePlayer(player) {
|
|
41
|
-
if (super.removePlayer(player)) {
|
|
42
|
-
player.removeGamezone(this);
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
addGameroom(gameroom) {
|
|
48
|
-
return ArrayUtil_1.ArrayUtil.addUniqueElement(this.gamerooms, gameroom);
|
|
49
|
-
}
|
|
50
|
-
removeGameroom(gameroom) {
|
|
51
|
-
return ArrayUtil_1.ArrayUtil.removeElement(this.gamerooms, gameroom);
|
|
52
|
-
}
|
|
53
|
-
toVo() {
|
|
54
|
-
return {
|
|
55
|
-
code: this.code
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
toStatusVo() {
|
|
59
|
-
return {
|
|
60
|
-
stateJson: this.stateJson,
|
|
61
|
-
players: this.players.length,
|
|
62
|
-
brainer: this.brainer ? this.brainer.code : '',
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
toAndStatusVo() {
|
|
66
|
-
return {
|
|
67
|
-
zone: this.toVo(),
|
|
68
|
-
status: this.toStatusVo(),
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
exports.Gamezone = Gamezone;
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2FtZXpvbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0dhbWV6b25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG9EQUFpRDtBQUNqRCxpREFBOEM7QUFJOUMsTUFBYSxRQUFTLFNBQVEsMkJBQVk7SUFNdEMsWUFDSSxJQUFZLEVBQ1osTUFBMEIsRUFDMUIsTUFBYztRQUVkLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQVRwQyxjQUFTLEdBQWUsRUFBRSxDQUFDO1FBVS9CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sVUFBVSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWtCLEVBQUUsTUFBYztRQUM1QyxJQUFJLElBQUksR0FBZSxFQUFFLENBQUM7UUFDMUIsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzdCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRTtvQkFDdkIsTUFBTTtpQkFDVDthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBYztRQUNwQixJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3ZCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM1QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWtCO1FBQzFCLE9BQU8scUJBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBa0I7UUFDN0IsT0FBTyxxQkFBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJO1FBQ0EsT0FBTztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNsQixDQUFBO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDTixPQUFPO1lBQ0gsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2pELENBQUE7SUFDTCxDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtTQUM1QixDQUFBO0lBQ0wsQ0FBQztDQUNKO0FBcEZELDRCQW9GQyJ9
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parsePropFilter = exports.PropFilter = void 0;
|
|
4
|
-
/*
|
|
5
|
-
export class ListFilter {
|
|
6
|
-
|
|
7
|
-
static EMPTY = new ListFilter([]);
|
|
8
|
-
|
|
9
|
-
constructor(private propFilters: Array<PropFilter>) {
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
filter(list: Array<any>): Array<any> {
|
|
14
|
-
return list.filter(item => this.test(item));
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
test(item: any): boolean {
|
|
18
|
-
for(let filter of this.propFilters) {
|
|
19
|
-
if(!filter.test(item)) {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
static parse(list: IPropFilter[]): ListFilter {
|
|
27
|
-
if (list && list.length) {
|
|
28
|
-
let filters: Array<PropFilter> = list.map(json => parsePropFilter(json));
|
|
29
|
-
return new ListFilter(filters);
|
|
30
|
-
}
|
|
31
|
-
return ListFilter.EMPTY;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
*/
|
|
35
|
-
class PropFilter {
|
|
36
|
-
constructor(property) {
|
|
37
|
-
this.property = property;
|
|
38
|
-
this.propertyList = this.property.split('.');
|
|
39
|
-
}
|
|
40
|
-
getPropertyValue(obj) {
|
|
41
|
-
for (let prop of this.propertyList) {
|
|
42
|
-
if (!obj) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
obj = obj[prop];
|
|
46
|
-
}
|
|
47
|
-
return obj;
|
|
48
|
-
}
|
|
49
|
-
test(obj) {
|
|
50
|
-
return this.getPropertyValue(obj);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
exports.PropFilter = PropFilter;
|
|
54
|
-
class FakeFilter extends PropFilter {
|
|
55
|
-
constructor() {
|
|
56
|
-
super('');
|
|
57
|
-
}
|
|
58
|
-
test(_obj) {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
const fakeFilter = new FakeFilter();
|
|
63
|
-
class ExistFilter extends PropFilter {
|
|
64
|
-
constructor(property) {
|
|
65
|
-
super(property);
|
|
66
|
-
}
|
|
67
|
-
test(obj) {
|
|
68
|
-
return !!this.getPropertyValue(obj);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
class EmptyFilter extends PropFilter {
|
|
72
|
-
constructor(property) {
|
|
73
|
-
super(property);
|
|
74
|
-
}
|
|
75
|
-
test(obj) {
|
|
76
|
-
return !this.getPropertyValue(obj);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
class EqualFilter extends PropFilter {
|
|
80
|
-
constructor(property, value) {
|
|
81
|
-
super(property);
|
|
82
|
-
this.value = value;
|
|
83
|
-
}
|
|
84
|
-
test(obj) {
|
|
85
|
-
return this.getPropertyValue(obj) === this.value;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
class IncludeFilter extends PropFilter {
|
|
89
|
-
constructor(property, values) {
|
|
90
|
-
super(property);
|
|
91
|
-
this.values = values;
|
|
92
|
-
}
|
|
93
|
-
test(obj) {
|
|
94
|
-
return this.values.includes(this.getPropertyValue(obj));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
class ExcludeFilter extends PropFilter {
|
|
98
|
-
constructor(property, values) {
|
|
99
|
-
super(property);
|
|
100
|
-
this.values = values;
|
|
101
|
-
}
|
|
102
|
-
test(obj) {
|
|
103
|
-
return !this.values.includes(this.getPropertyValue(obj));
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
class RangeFilter extends PropFilter {
|
|
107
|
-
constructor(property, min, max) {
|
|
108
|
-
super(property);
|
|
109
|
-
this.min = min;
|
|
110
|
-
this.max = max;
|
|
111
|
-
}
|
|
112
|
-
test(obj) {
|
|
113
|
-
let value = this.getPropertyValue(obj);
|
|
114
|
-
if (value !== null) {
|
|
115
|
-
return value >= this.min && value <= this.max;
|
|
116
|
-
}
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
class MatchFilter extends PropFilter {
|
|
121
|
-
constructor(property, regexp) {
|
|
122
|
-
super(property);
|
|
123
|
-
let search = regexp.match(/^\/(.+)\/$/);
|
|
124
|
-
if (search) {
|
|
125
|
-
this.regexp = new RegExp(search[1]);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
this.regexp = new RegExp(regexp);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
test(obj) {
|
|
132
|
-
let value = this.getPropertyValue(obj);
|
|
133
|
-
if (value !== null) {
|
|
134
|
-
return this.regexp.test(value);
|
|
135
|
-
}
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
class OrFilter extends PropFilter {
|
|
140
|
-
constructor(filters) {
|
|
141
|
-
super('');
|
|
142
|
-
this.filters = filters.map(f => parsePropFilter(f));
|
|
143
|
-
}
|
|
144
|
-
test(obj) {
|
|
145
|
-
for (let filter of this.filters) {
|
|
146
|
-
if (filter.test(obj)) {
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
class AndFilter extends OrFilter {
|
|
154
|
-
test(obj) {
|
|
155
|
-
for (let filter of this.filters) {
|
|
156
|
-
if (!filter.test(obj)) {
|
|
157
|
-
return false;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return true;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
class NotFilter extends PropFilter {
|
|
164
|
-
constructor(filter) {
|
|
165
|
-
super('');
|
|
166
|
-
this.filter = parsePropFilter(filter);
|
|
167
|
-
}
|
|
168
|
-
test(obj) {
|
|
169
|
-
return !this.filter.test(obj);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
function parsePropFilter(json) {
|
|
173
|
-
if (json && json.type) {
|
|
174
|
-
switch (json.type) {
|
|
175
|
-
case 'equal': return new EqualFilter(json.prop, json.data);
|
|
176
|
-
case 'include': return new IncludeFilter(json.prop, json.data);
|
|
177
|
-
case 'exclude': return new ExcludeFilter(json.prop, json.data);
|
|
178
|
-
case 'range': return new RangeFilter(json.prop, json.data.min, json.data.max);
|
|
179
|
-
case 'match': return new MatchFilter(json.prop, json.data);
|
|
180
|
-
case 'exist': return new ExistFilter(json.prop);
|
|
181
|
-
case 'empty': return new EmptyFilter(json.prop);
|
|
182
|
-
case 'or': return new OrFilter(json.data);
|
|
183
|
-
case 'and': return new AndFilter(json.data);
|
|
184
|
-
case 'not': return new NotFilter(json.data);
|
|
185
|
-
}
|
|
186
|
-
return new PropFilter(json.prop);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
return fakeFilter;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
exports.parsePropFilter = parsePropFilter;
|
|
193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGlzdEZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvTGlzdEZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOEJFO0FBRUYsTUFBYSxVQUFVO0lBSW5CLFlBQW1CLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBUTtRQUNyQixLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDaEMsSUFBRyxDQUFDLEdBQUcsRUFBRTtnQkFDTCxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFRO1FBQ1QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUVKO0FBdEJELGdDQXNCQztBQUVELE1BQU0sVUFBVyxTQUFRLFVBQVU7SUFDL0I7UUFDSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVM7UUFDVixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBR3BDLE1BQU0sV0FBWSxTQUFRLFVBQVU7SUFDaEMsWUFBWSxRQUFnQjtRQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFRO1FBQ1QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDSjtBQUVELE1BQU0sV0FBWSxTQUFRLFVBQVU7SUFDaEMsWUFBWSxRQUFnQjtRQUN4QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFRO1FBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0o7QUFFRCxNQUFNLFdBQVksU0FBUSxVQUFVO0lBQ2hDLFlBQVksUUFBZ0IsRUFBUyxLQUFVO1FBQzNDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURpQixVQUFLLEdBQUwsS0FBSyxDQUFLO0lBRS9DLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBUTtRQUNULE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckQsQ0FBQztDQUNKO0FBRUQsTUFBTSxhQUFjLFNBQVEsVUFBVTtJQUNsQyxZQUFZLFFBQWdCLEVBQVMsTUFBYTtRQUM5QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFEaUIsV0FBTSxHQUFOLE1BQU0sQ0FBTztJQUVsRCxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQVE7UUFDVCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDSjtBQUVELE1BQU0sYUFBYyxTQUFRLFVBQVU7SUFDbEMsWUFBWSxRQUFnQixFQUFTLE1BQWE7UUFDOUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRGlCLFdBQU0sR0FBTixNQUFNLENBQU87SUFFbEQsQ0FBQztJQUVELElBQUksQ0FBQyxHQUFRO1FBQ1QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7Q0FDSjtBQUVELE1BQU0sV0FBWSxTQUFRLFVBQVU7SUFDaEMsWUFBWSxRQUFnQixFQUFTLEdBQVcsRUFBUyxHQUFXO1FBQ2hFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQURpQixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUVwRSxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQVE7UUFDVCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2hCLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDakQ7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0o7QUFFRCxNQUFNLFdBQVksU0FBUSxVQUFVO0lBR2hDLFlBQVksUUFBZ0IsRUFBRSxNQUFjO1FBQ3hDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hDLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QzthQUFNO1lBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBUTtRQUNULElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSjtBQUVELE1BQU0sUUFBUyxTQUFRLFVBQVU7SUFJN0IsWUFBWSxPQUFzQjtRQUM5QixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsSUFBSSxDQUFDLEdBQVE7UUFDVCxLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDN0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0o7QUFFRCxNQUFNLFNBQVUsU0FBUSxRQUFRO0lBQzVCLElBQUksQ0FBQyxHQUFRO1FBQ1QsS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQixPQUFPLEtBQUssQ0FBQzthQUNoQjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxTQUFVLFNBQVEsVUFBVTtJQUk5QixZQUFZLE1BQW1CO1FBQzNCLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNWLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBUTtRQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0o7QUFFRCxTQUFnQixlQUFlLENBQUMsSUFBaUI7SUFDN0MsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtRQUNuQixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZixLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsS0FBSyxTQUFTLENBQUMsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9ELEtBQUssU0FBUyxDQUFDLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvRCxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlFLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hELEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEQsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVDLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0M7UUFDRCxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNwQztTQUFNO1FBQ0gsT0FBTyxVQUFVLENBQUM7S0FDckI7QUFDTCxDQUFDO0FBbEJELDBDQWtCQyJ9
|