oceanic.js 1.0.0-dev.5de1d4e → 1.0.0-dev.5f062dd
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/README.md +4 -2
- package/dist/lib/Client.d.ts +16 -9
- package/dist/lib/Client.js +49 -23
- package/dist/lib/gateway/Shard.js +37 -47
- package/dist/lib/routes/Channels.js +8 -8
- package/dist/lib/routes/Guilds.js +17 -19
- package/dist/lib/structures/AutoModerationRule.js +2 -2
- package/dist/lib/structures/AutocompleteInteraction.js +2 -2
- package/dist/lib/structures/CommandInteraction.js +2 -2
- package/dist/lib/structures/ComponentInteraction.js +2 -2
- package/dist/lib/structures/Guild.d.ts +11 -0
- package/dist/lib/structures/Guild.js +46 -6
- package/dist/lib/structures/GuildChannel.js +2 -2
- package/dist/lib/structures/GuildScheduledEvent.js +2 -2
- package/dist/lib/structures/Member.d.ts +1 -1
- package/dist/lib/structures/Member.js +5 -4
- package/dist/lib/structures/Message.js +3 -7
- package/dist/lib/structures/ModalSubmitInteraction.js +2 -2
- package/dist/lib/structures/Role.js +2 -2
- package/dist/lib/structures/StageChannel.d.ts +5 -2
- package/dist/lib/structures/StageChannel.js +17 -3
- package/dist/lib/structures/StageInstance.js +2 -2
- package/dist/lib/structures/VoiceChannel.d.ts +6 -3
- package/dist/lib/structures/VoiceChannel.js +18 -4
- package/dist/lib/types/channels.d.ts +1 -0
- package/dist/lib/types/discordjs-voice.d.ts +12 -0
- package/dist/lib/util/Util.d.ts +4 -2
- package/dist/lib/util/Util.js +27 -2
- package/dist/package.json +4 -1
- package/package.json +4 -1
- package/dist/lib/voice/VoiceConnection.d.ts +0 -7
- package/dist/lib/voice/VoiceConnection.js +0 -16
- package/dist/lib/voice/VoiceConnectionManager.d.ts +0 -7
- package/dist/lib/voice/VoiceConnectionManager.js +0 -15
package/README.md
CHANGED
|
@@ -9,10 +9,12 @@ NodeJS **16.16.0** or higher is required.
|
|
|
9
9
|
**See [Development Builds](#development-builds) if you wish to install in-dev versions.**
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
|
-
npm i oceanic.js
|
|
12
|
+
npm i oceanic.js --no-optional
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
If you need voice support, remove `--no-optional`. Voice support is currently provided by [@discordjs/voice](https://discord.js.org/#/docs/voice/main/general/welcome).
|
|
16
|
+
|
|
17
|
+
See the [examples](https://github.com/OceanicJS/Oceanic/tree/dev/examples) folder on GitHub for some examples, and visit [this site](https://oceanic.owo-whats-this.dev) for documentation.
|
|
16
18
|
|
|
17
19
|
### Development Builds
|
|
18
20
|
```sh
|
package/dist/lib/Client.d.ts
CHANGED
|
@@ -11,16 +11,18 @@ import type { ClientInstanceOptions, ClientOptions } from "./types/client";
|
|
|
11
11
|
import TypedEmitter from "./util/TypedEmitter";
|
|
12
12
|
import type ClientApplication from "./structures/ClientApplication";
|
|
13
13
|
import ShardManager from "./gateway/ShardManager";
|
|
14
|
-
import type { BotActivity, SendStatuses
|
|
14
|
+
import type { BotActivity, SendStatuses } from "./types/gateway";
|
|
15
15
|
import UnavailableGuild from "./structures/UnavailableGuild";
|
|
16
|
-
import VoiceConnectionManager from "./voice/VoiceConnectionManager";
|
|
17
16
|
import type ExtendedUser from "./structures/ExtendedUser";
|
|
18
17
|
import Util from "./util/Util";
|
|
19
18
|
import { ClientEvents } from "./types/events";
|
|
19
|
+
import type { JoinVoiceChannelOptions } from "./types/discordjs-voice";
|
|
20
|
+
import type { VoiceConnection } from "@discordjs/voice";
|
|
20
21
|
/** The primary class for interfacing with Discord. See {@link types/events~ClientEvents | Client Events} for a list of events. */
|
|
21
22
|
export default class Client extends TypedEmitter<ClientEvents> {
|
|
22
23
|
private _application?;
|
|
23
24
|
private _user?;
|
|
25
|
+
private voiceAdapters;
|
|
24
26
|
channelGuildMap: Record<string, string>;
|
|
25
27
|
gatewayURL: string;
|
|
26
28
|
groupChannels: TypedCollection<string, RawGroupChannel, GroupChannel>;
|
|
@@ -36,7 +38,6 @@ export default class Client extends TypedEmitter<ClientEvents> {
|
|
|
36
38
|
unavailableGuilds: TypedCollection<string, RawUnavailableGuild, UnavailableGuild>;
|
|
37
39
|
users: TypedCollection<string, RawUser, User>;
|
|
38
40
|
util: Util;
|
|
39
|
-
voiceConnections: VoiceConnectionManager;
|
|
40
41
|
/**
|
|
41
42
|
* @constructor
|
|
42
43
|
* @param options The options to create the client with.
|
|
@@ -47,6 +48,8 @@ export default class Client extends TypedEmitter<ClientEvents> {
|
|
|
47
48
|
get uptime(): number;
|
|
48
49
|
/** The client's user application. This will throw an error if not using a gateway connection or no shard is READY. */
|
|
49
50
|
get user(): ExtendedUser;
|
|
51
|
+
/** The active voice connections of this client. */
|
|
52
|
+
get voiceConnections(): Map<string, VoiceConnection>;
|
|
50
53
|
/** Connect the client to Discord. */
|
|
51
54
|
connect(): Promise<void>;
|
|
52
55
|
/**
|
|
@@ -57,14 +60,18 @@ export default class Client extends TypedEmitter<ClientEvents> {
|
|
|
57
60
|
editStatus(status: SendStatuses, activities?: Array<BotActivity>): Promise<void>;
|
|
58
61
|
getChannel<T extends AnyChannel = AnyChannel>(id: string): T | undefined;
|
|
59
62
|
/**
|
|
60
|
-
*
|
|
61
|
-
* @param
|
|
62
|
-
* @param options The options for joining the voice channel.
|
|
63
|
+
* Get a voice connection.
|
|
64
|
+
* @param guildID The ID of the guild the voice channel belongs to.
|
|
63
65
|
*/
|
|
64
|
-
|
|
66
|
+
getVoiceConnection(guildID: string): VoiceConnection | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Join a voice channel.
|
|
69
|
+
* @param options The options to join the channel with.
|
|
70
|
+
* */
|
|
71
|
+
joinVoiceChannel(options: JoinVoiceChannelOptions): VoiceConnection;
|
|
65
72
|
/**
|
|
66
73
|
* Leave a voice channel.
|
|
67
|
-
* @param
|
|
74
|
+
* @param guildID The ID of the guild the voice channel belongs to.
|
|
68
75
|
*/
|
|
69
|
-
leaveVoiceChannel(
|
|
76
|
+
leaveVoiceChannel(guildID: string): void;
|
|
70
77
|
}
|
package/dist/lib/Client.js
CHANGED
|
@@ -13,10 +13,17 @@ const Guild_1 = __importDefault(require("./structures/Guild"));
|
|
|
13
13
|
const TypedEmitter_1 = __importDefault(require("./util/TypedEmitter"));
|
|
14
14
|
const ShardManager_1 = __importDefault(require("./gateway/ShardManager"));
|
|
15
15
|
const UnavailableGuild_1 = __importDefault(require("./structures/UnavailableGuild"));
|
|
16
|
-
const VoiceConnectionManager_1 = __importDefault(require("./voice/VoiceConnectionManager"));
|
|
17
16
|
const Util_1 = __importDefault(require("./util/Util"));
|
|
18
17
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
19
18
|
// @ts-ignore
|
|
19
|
+
let DiscordJSVoice;
|
|
20
|
+
try {
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
22
|
+
DiscordJSVoice = require("@discordjs/voice");
|
|
23
|
+
}
|
|
24
|
+
catch { }
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
26
|
+
// @ts-ignore
|
|
20
27
|
let Erlpack;
|
|
21
28
|
try {
|
|
22
29
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
@@ -27,6 +34,7 @@ catch { }
|
|
|
27
34
|
class Client extends TypedEmitter_1.default {
|
|
28
35
|
_application;
|
|
29
36
|
_user;
|
|
37
|
+
voiceAdapters;
|
|
30
38
|
channelGuildMap;
|
|
31
39
|
gatewayURL;
|
|
32
40
|
groupChannels;
|
|
@@ -42,7 +50,6 @@ class Client extends TypedEmitter_1.default {
|
|
|
42
50
|
unavailableGuilds;
|
|
43
51
|
users;
|
|
44
52
|
util;
|
|
45
|
-
voiceConnections;
|
|
46
53
|
/**
|
|
47
54
|
* @constructor
|
|
48
55
|
* @param options The options to create the client with.
|
|
@@ -68,6 +75,7 @@ class Client extends TypedEmitter_1.default {
|
|
|
68
75
|
defaultImageFormat: options?.defaultImageFormat ?? "png",
|
|
69
76
|
defaultImageSize: options?.defaultImageSize ?? 4096
|
|
70
77
|
};
|
|
78
|
+
this.voiceAdapters = new Map();
|
|
71
79
|
this.channelGuildMap = {};
|
|
72
80
|
this.groupChannels = new TypedCollection_1.default(GroupChannel_1.default, this, 10);
|
|
73
81
|
this.guilds = new TypedCollection_1.default(Guild_1.default, this);
|
|
@@ -80,7 +88,6 @@ class Client extends TypedEmitter_1.default {
|
|
|
80
88
|
this.unavailableGuilds = new TypedCollection_1.default(UnavailableGuild_1.default, this);
|
|
81
89
|
this.users = new TypedCollection_1.default(User_1.default, this, this.options.collectionLimits.users);
|
|
82
90
|
this.util = new Util_1.default(this);
|
|
83
|
-
this.voiceConnections = new VoiceConnectionManager_1.default(this);
|
|
84
91
|
}
|
|
85
92
|
/** The client's partial application. This will throw an error if not using a gateway connection or no shard is READY. */
|
|
86
93
|
get application() {
|
|
@@ -103,6 +110,14 @@ class Client extends TypedEmitter_1.default {
|
|
|
103
110
|
return this._user;
|
|
104
111
|
}
|
|
105
112
|
}
|
|
113
|
+
/** The active voice connections of this client. */
|
|
114
|
+
get voiceConnections() {
|
|
115
|
+
if (!DiscordJSVoice) {
|
|
116
|
+
throw new Error("Voice is only supported with @discordjs/voice installed.");
|
|
117
|
+
}
|
|
118
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access
|
|
119
|
+
return DiscordJSVoice.getVoiceConnections();
|
|
120
|
+
}
|
|
106
121
|
/** Connect the client to Discord. */
|
|
107
122
|
async connect() {
|
|
108
123
|
if (!this.options.auth || !this.options.auth.startsWith("Bot ")) {
|
|
@@ -175,32 +190,43 @@ class Client extends TypedEmitter_1.default {
|
|
|
175
190
|
return (this.privateChannels.get(id) ?? this.groupChannels.get(id));
|
|
176
191
|
}
|
|
177
192
|
/**
|
|
178
|
-
*
|
|
179
|
-
* @param
|
|
180
|
-
* @param options The options for joining the voice channel.
|
|
193
|
+
* Get a voice connection.
|
|
194
|
+
* @param guildID The ID of the guild the voice channel belongs to.
|
|
181
195
|
*/
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
throw new Error("Invalid channel. Make sure the id is correct, and the channel is cached.");
|
|
196
|
+
getVoiceConnection(guildID) {
|
|
197
|
+
if (!DiscordJSVoice) {
|
|
198
|
+
throw new Error("Voice is only supported with @discordjs/voice installed.");
|
|
186
199
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
200
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
|
201
|
+
return DiscordJSVoice.getVoiceConnection(guildID);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Join a voice channel.
|
|
205
|
+
* @param options The options to join the channel with.
|
|
206
|
+
* */
|
|
207
|
+
joinVoiceChannel(options) {
|
|
208
|
+
if (!DiscordJSVoice) {
|
|
209
|
+
throw new Error("Voice is only supported with @discordjs/voice installed.");
|
|
210
|
+
}
|
|
211
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access
|
|
212
|
+
return DiscordJSVoice.joinVoiceChannel({
|
|
213
|
+
channelId: options.channelID,
|
|
214
|
+
guildId: options.guildID,
|
|
215
|
+
debug: options.debug,
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
217
|
+
adapterCreator: options.voiceAdapterCreator,
|
|
218
|
+
selfDeaf: options.selfDeaf,
|
|
219
|
+
selfMute: options.selfMute
|
|
220
|
+
});
|
|
192
221
|
}
|
|
193
222
|
/**
|
|
194
223
|
* Leave a voice channel.
|
|
195
|
-
* @param
|
|
224
|
+
* @param guildID The ID of the guild the voice channel belongs to.
|
|
196
225
|
*/
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
return;
|
|
201
|
-
}
|
|
202
|
-
this.shards.get(this.guildShardMap[channel.guildID] ?? 0).updateVoiceState(channel.guildID, null, { selfDeaf: false, selfMute: false });
|
|
226
|
+
leaveVoiceChannel(guildID) {
|
|
227
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access
|
|
228
|
+
return this.getVoiceConnection(guildID)?.destroy();
|
|
203
229
|
}
|
|
204
230
|
}
|
|
205
231
|
exports.default = Client;
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL0NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJDQUE4QztBQUM5QyxxRUFBNkM7QUFDN0MsNkVBQXFEO0FBQ3JELGlGQUF5RDtBQUN6RCw2RUFBcUQ7QUFDckQsNkRBQXFDO0FBQ3JDLCtEQUF1QztBQUt2Qyx1RUFBK0M7QUFFL0MsMEVBQWtEO0FBRWxELHFGQUE2RDtBQUU3RCx1REFBK0I7QUFPL0IsNkRBQTZEO0FBQzdELGFBQWE7QUFDYixJQUFJLGNBQTZELENBQUM7QUFDbEUsSUFBSTtJQUNBLG1FQUFtRTtJQUNuRSxjQUFjLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7Q0FDaEQ7QUFBQyxNQUFNLEdBQUU7QUFFViw2REFBNkQ7QUFDN0QsYUFBYTtBQUNiLElBQUksT0FBNkMsQ0FBQztBQUNsRCxJQUFJO0lBQ0EsbUVBQW1FO0lBQ25FLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Q0FDaEM7QUFBQyxNQUFNLEdBQUU7QUFFVixrSUFBa0k7QUFDbEksTUFBcUIsTUFBTyxTQUFRLHNCQUEwQjtJQUNsRCxZQUFZLENBQXFCO0lBQ2pDLEtBQUssQ0FBZ0I7SUFDckIsYUFBYSxDQUFtRDtJQUN4RSxlQUFlLENBQXlCO0lBQ3hDLFVBQVUsQ0FBVTtJQUNwQixhQUFhLENBQXlEO0lBQ3RFLGFBQWEsQ0FBeUI7SUFDdEMsTUFBTSxDQUEyQztJQUNqRCxPQUFPLENBQXdCO0lBQy9CLGVBQWUsQ0FBNkQ7SUFDNUUsS0FBSyxDQUFVO0lBQ2YsSUFBSSxDQUFjO0lBQ2xCLE1BQU0sQ0FBZTtJQUNyQixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsY0FBYyxDQUF5QjtJQUN2QyxpQkFBaUIsQ0FBaUU7SUFDbEYsS0FBSyxDQUF5QztJQUM5QyxJQUFJLENBQU87SUFDWDs7O09BR0c7SUFDSCxZQUFZLE9BQXVCO1FBQy9CLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNYLGVBQWUsRUFBRSxPQUFPLEVBQUUsZUFBZSxJQUFJO2dCQUN6QyxRQUFRLEVBQUssS0FBSztnQkFDbEIsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLEtBQUssRUFBUSxJQUFJO2dCQUNqQixLQUFLLEVBQVEsSUFBSTthQUNwQjtZQUNELElBQUksRUFBYyxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUk7WUFDdkMsZ0JBQWdCLEVBQUU7Z0JBQ2QsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUMzSCxPQUFPLEVBQUUsUUFBUTtvQkFDakIsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTztpQkFDdEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU87Z0JBQ3BDLFFBQVEsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxJQUFJLEdBQUc7Z0JBQ3BELEtBQUssRUFBSyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxJQUFJLFFBQVE7YUFDekQ7WUFDRCxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLElBQUksS0FBSztZQUN4RCxnQkFBZ0IsRUFBSSxPQUFPLEVBQUUsZ0JBQWdCLElBQUksSUFBSTtTQUN4RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx5QkFBZSxDQUFDLHNCQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSx5QkFBZSxDQUFDLGVBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUkseUJBQWUsQ0FBQyx3QkFBYyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUkscUJBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxzQkFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUkseUJBQWUsQ0FBQywwQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUkseUJBQWUsQ0FBQyxjQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQseUhBQXlIO0lBQ3pILElBQUksV0FBVztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksMElBQTBJLENBQUMsQ0FBQztTQUN2TDthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsc0hBQXNIO0lBQ3RILElBQUksSUFBSTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxtSUFBbUksQ0FBQyxDQUFDO1NBQ2hMO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDckI7SUFDTCxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUksZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsOElBQThJO1FBQzlJLE9BQU8sY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxLQUFLLENBQUMsT0FBTztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUM7U0FDM0c7UUFDRCxJQUFJLEdBQVcsRUFBRSxJQUF1QyxDQUFDO1FBQ3pELElBQUk7WUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hGLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2xCO2lCQUFNO2dCQUNILEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQzthQUM1QztTQUNKO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQVksRUFBRSxDQUFDLENBQUM7U0FDbEY7UUFDRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLEdBQUcsSUFBSSxHQUFHLENBQUM7U0FDZDtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLE1BQU0sMkJBQWUsYUFBYSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFVBQVUsSUFBSSx1QkFBdUIsQ0FBQztTQUM5QztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7YUFDdEY7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3JEO1NBQ0o7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQzthQUN6RjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztTQUM5RDtRQUdELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDckM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzNDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO2dCQUNqRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN0RixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN4QzthQUNKO1NBQ0o7UUFHRCxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFvQixFQUFFLGFBQWlDLEVBQUU7UUFDdEUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELFVBQVUsQ0FBb0MsRUFBVTtRQUNwRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQU0sQ0FBQztTQUM1RTtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBTSxDQUFDO0lBQzdFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FBQyxPQUFlO1FBQzlCLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QseUdBQXlHO1FBQ3pHLE9BQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7O1NBR0s7SUFDTCxnQkFBZ0IsQ0FBQyxPQUFnQztRQUM3QyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztTQUMvRTtRQUNELDhJQUE4STtRQUM5SSxPQUFPLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNuQyxTQUFTLEVBQU8sT0FBTyxDQUFDLFNBQVM7WUFDakMsT0FBTyxFQUFTLE9BQU8sQ0FBQyxPQUFPO1lBQy9CLEtBQUssRUFBVyxPQUFPLENBQUMsS0FBSztZQUM3QixtRUFBbUU7WUFDbkUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7WUFDM0MsUUFBUSxFQUFRLE9BQU8sQ0FBQyxRQUFRO1lBQ2hDLFFBQVEsRUFBUSxPQUFPLENBQUMsUUFBUTtTQUNuQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsT0FBZTtRQUM3Qiw4SUFBOEk7UUFDOUksT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDdkQsQ0FBQztDQUNKO0FBak5ELHlCQWlOQyJ9
|