homebridge-unifi-protect 5.0.6 → 5.3.0
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 +5 -2
- package/config.schema.json +7 -0
- package/dist/protect-accessory.js +3 -1
- package/dist/protect-accessory.js.map +1 -1
- package/dist/protect-camera.js +170 -8
- package/dist/protect-camera.js.map +1 -1
- package/dist/protect-ffmpeg.js +350 -81
- package/dist/protect-ffmpeg.js.map +1 -1
- package/dist/protect-nvr-events.js +94 -52
- package/dist/protect-nvr-events.js.map +1 -1
- package/dist/protect-nvr.js +1 -1
- package/dist/protect-nvr.js.map +1 -1
- package/dist/protect-platform.js.map +1 -1
- package/dist/protect-record.js +250 -0
- package/dist/protect-record.js.map +1 -0
- package/dist/protect-stream.js +193 -121
- package/dist/protect-stream.js.map +1 -1
- package/dist/protect-timeshift.js +170 -0
- package/dist/protect-timeshift.js.map +1 -0
- package/dist/settings.js +8 -2
- package/dist/settings.js.map +1 -1
- package/package.json +10 -10
package/dist/protect-stream.js
CHANGED
|
@@ -7,8 +7,8 @@ exports.ProtectStreamingDelegate = void 0;
|
|
|
7
7
|
const unifi_protect_1 = require("unifi-protect");
|
|
8
8
|
const settings_1 = require("./settings");
|
|
9
9
|
const protect_ffmpeg_1 = require("./protect-ffmpeg");
|
|
10
|
+
const protect_record_1 = require("./protect-record");
|
|
10
11
|
const protect_rtp_1 = require("./protect-rtp");
|
|
11
|
-
const url_1 = require("url");
|
|
12
12
|
const ws_1 = __importDefault(require("ws"));
|
|
13
13
|
const ffmpeg_for_homebridge_1 = __importDefault(require("ffmpeg-for-homebridge"));
|
|
14
14
|
const camera_utils_1 = require("@homebridge/camera-utils");
|
|
@@ -22,20 +22,70 @@ class ProtectStreamingDelegate {
|
|
|
22
22
|
this.config = protectCamera.platform.config;
|
|
23
23
|
this.debug = protectCamera.platform.debug.bind(protectCamera.platform);
|
|
24
24
|
this.hap = protectCamera.api.hap;
|
|
25
|
+
this.hksv = null;
|
|
25
26
|
this.log = protectCamera.platform.log;
|
|
26
27
|
this.name = protectCamera.name.bind(protectCamera);
|
|
27
28
|
this.ongoingSessions = {};
|
|
28
29
|
this.protectCamera = protectCamera;
|
|
29
30
|
this.pendingSessions = {};
|
|
30
31
|
this.platform = protectCamera.platform;
|
|
32
|
+
this.rtspEntry = null;
|
|
33
|
+
this.savedBitrate = 0;
|
|
31
34
|
this.snapshotCache = {};
|
|
32
|
-
this.isTalkbackLive = false;
|
|
33
35
|
this.videoEncoder = this.config.videoEncoder || "libx264";
|
|
34
36
|
this.videoProcessor = this.config.videoProcessor || ffmpeg_for_homebridge_1.default || "ffmpeg";
|
|
37
|
+
// Setup for HKSV, if enabled.
|
|
38
|
+
if (this.protectCamera.isHksv) {
|
|
39
|
+
this.hksv = new protect_record_1.ProtectRecordingDelegate(protectCamera);
|
|
40
|
+
}
|
|
35
41
|
// Setup for our camera controller.
|
|
36
42
|
const options = {
|
|
43
|
+
// HomeKit requires at least 2 streams, and HomeKit Secure Video requires 1.
|
|
37
44
|
cameraStreamCount: 10,
|
|
45
|
+
// Our streaming delegate - aka us.
|
|
38
46
|
delegate: this,
|
|
47
|
+
// Our recording capabilities for HomeKit Secure Video.
|
|
48
|
+
recording: !this.protectCamera.isHksv ? undefined : {
|
|
49
|
+
delegate: this.hksv,
|
|
50
|
+
options: {
|
|
51
|
+
audio: {
|
|
52
|
+
codecs: [
|
|
53
|
+
{
|
|
54
|
+
// Protect supports a 48 KHz sampling rate, and the low complexity AAC profile.
|
|
55
|
+
samplerate: 5 /* KHZ_48 */,
|
|
56
|
+
type: 0 /* AAC_LC */
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
mediaContainerConfiguration: [
|
|
61
|
+
{
|
|
62
|
+
// The default HKSV segment length is 4000ms. It turns out that any setting less than that will disable
|
|
63
|
+
// HomeKit Secure Video.
|
|
64
|
+
fragmentLength: settings_1.PROTECT_HKSV_SEGMENT_LENGTH,
|
|
65
|
+
type: 0 /* FRAGMENTED_MP4 */
|
|
66
|
+
}
|
|
67
|
+
],
|
|
68
|
+
// Maximum prebuffer length supported. In Protect, this is effectively unlimited, but HomeKit only seems to
|
|
69
|
+
// request a maximum of a 4000ms prebuffer.
|
|
70
|
+
prebufferLength: settings_1.PROTECT_HKSV_BUFFER_LENGTH,
|
|
71
|
+
video: {
|
|
72
|
+
parameters: {
|
|
73
|
+
// Through admittedly anecdotal testing on various G3 and G4 models, UniFi Protect seems to support
|
|
74
|
+
// only the H.264 Main profile, though it does support various H.264 levels, ranging from Level 3
|
|
75
|
+
// through Level 5.1 (G4 Pro at maximum resolution). However, HomeKit only supports Level 3.1, 3.2,
|
|
76
|
+
// and 4.0 currently.
|
|
77
|
+
levels: [0 /* LEVEL3_1 */, 1 /* LEVEL3_2 */, 2 /* LEVEL4_0 */],
|
|
78
|
+
profiles: [1 /* MAIN */]
|
|
79
|
+
},
|
|
80
|
+
resolutions: resolutions,
|
|
81
|
+
type: 0 /* H264 */
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
// Our motion sensor.
|
|
86
|
+
sensors: !this.protectCamera.isHksv ? undefined : {
|
|
87
|
+
motion: this.protectCamera.accessory.getService(this.hap.Service.MotionSensor)
|
|
88
|
+
},
|
|
39
89
|
streamingOptions: {
|
|
40
90
|
audio: {
|
|
41
91
|
codecs: [
|
|
@@ -91,7 +141,7 @@ class ProtectStreamingDelegate {
|
|
|
91
141
|
// Check if audio support is enabled.
|
|
92
142
|
const isAudioEnabled = this.protectCamera.nvr.optionEnabled(cameraConfig, "Audio", true, request.targetAddress);
|
|
93
143
|
// We need to check for AAC support because it's going to determine whether we support audio.
|
|
94
|
-
const hasLibFdk = isAudioEnabled && (await protect_ffmpeg_1.
|
|
144
|
+
const hasLibFdk = isAudioEnabled && (await protect_ffmpeg_1.FfmpegStreamingProcess.codecEnabled(this.videoProcessor, "libfdk_aac", this.log));
|
|
95
145
|
// Setup our audio plumbing.
|
|
96
146
|
const audioIncomingRtcpPort = (await (0, camera_utils_1.reservePorts)({ count: 1 }))[0];
|
|
97
147
|
const audioIncomingPort = (hasLibFdk && this.protectCamera.twoWayAudio) ? (await (0, camera_utils_1.reservePorts)({ count: 1 }))[0] : -1;
|
|
@@ -107,30 +157,10 @@ class ProtectStreamingDelegate {
|
|
|
107
157
|
rtpDemuxer = new protect_rtp_1.RtpDemuxer(this, request.addressVersion, audioIncomingPort, audioIncomingRtcpPort, audioIncomingRtpPort);
|
|
108
158
|
// Request the talkback websocket from the controller.
|
|
109
159
|
const params = new URLSearchParams({ camera: cameraConfig.id });
|
|
110
|
-
|
|
160
|
+
talkBack = await this.protectCamera.nvr.nvrApi.getWsEndpoint(this.protectCamera.nvr.nvrApi.wsUrl() + "/talkback?" + params.toString());
|
|
111
161
|
// Something went wrong and we don't have a talkback websocket.
|
|
112
|
-
if (!
|
|
113
|
-
this.log.error("%s: Unable to
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
try {
|
|
117
|
-
const tb = await response.json();
|
|
118
|
-
// Adjust the URL for our address.
|
|
119
|
-
const tbUrl = new url_1.URL(tb.url);
|
|
120
|
-
tbUrl.hostname = this.protectCamera.nvr.nvrAddress;
|
|
121
|
-
talkBack = tbUrl.toString();
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
if (error instanceof unifi_protect_1.FetchError) {
|
|
125
|
-
switch (error.code) {
|
|
126
|
-
default:
|
|
127
|
-
this.log.error("%s: Unknown error while preparing the return audio channel: %s", this.name(), error.message);
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
this.log.error("%s: An error occurred while preparing the return audio channel: %s.", this.name(), error);
|
|
132
|
-
talkBack = null;
|
|
133
|
-
}
|
|
162
|
+
if (!talkBack) {
|
|
163
|
+
this.log.error("%s: Unable to open the return audio channel.", this.name());
|
|
134
164
|
}
|
|
135
165
|
}
|
|
136
166
|
// Setup our video plumbing.
|
|
@@ -180,7 +210,7 @@ class ProtectStreamingDelegate {
|
|
|
180
210
|
callback(undefined, response);
|
|
181
211
|
}
|
|
182
212
|
// Launch the Protect video (and audio) stream.
|
|
183
|
-
startStream(request, callback) {
|
|
213
|
+
async startStream(request, callback) {
|
|
184
214
|
var _a, _b, _c, _d, _e, _f;
|
|
185
215
|
const cameraConfig = this.protectCamera.accessory.context.device;
|
|
186
216
|
const sessionInfo = this.pendingSessions[request.sessionID];
|
|
@@ -193,13 +223,23 @@ class ProtectStreamingDelegate {
|
|
|
193
223
|
return;
|
|
194
224
|
}
|
|
195
225
|
// Find the best RTSP stream based on what we're looking for.
|
|
196
|
-
|
|
197
|
-
if (!rtspEntry) {
|
|
226
|
+
this.rtspEntry = this.protectCamera.findRtsp(request.video.width, request.video.height, cameraConfig, sessionInfo.address);
|
|
227
|
+
if (!this.rtspEntry) {
|
|
198
228
|
const errorMessage = "Unable to start video stream: no valid RTSP stream profile was found.";
|
|
199
229
|
this.log.error("%s: %s %sx%s, %s fps, %s kbps.", this.name(), errorMessage, request.video.width, request.video.height, request.video.fps, request.video.max_bit_rate);
|
|
200
230
|
callback(new Error(this.name() + ": " + errorMessage));
|
|
201
231
|
return;
|
|
202
232
|
}
|
|
233
|
+
// Save our current bitrate before we modify it, but only if we're the first stream to catch concurrent streaming clients.
|
|
234
|
+
if (!this.savedBitrate) {
|
|
235
|
+
this.savedBitrate = this.protectCamera.getBitrate(this.rtspEntry.channel.id);
|
|
236
|
+
if (this.savedBitrate < 0) {
|
|
237
|
+
this.savedBitrate = 0;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Set the desired bitrate in Protect. We don't need to for this to return, because Protect
|
|
241
|
+
// will adapt the stream once it processes the configuration change.
|
|
242
|
+
await this.protectCamera.setBitrate(this.rtspEntry.channel.id, request.video.max_bit_rate * 1000);
|
|
203
243
|
// Are we transcoding?
|
|
204
244
|
const isTranscoding = this.protectCamera.nvr.optionEnabled(cameraConfig, "Video.Transcode", false, sessionInfo.address);
|
|
205
245
|
// Set our packet size to be 564. Why? MPEG transport stream (TS) packets are 188 bytes in size each.
|
|
@@ -223,42 +263,37 @@ class ProtectStreamingDelegate {
|
|
|
223
263
|
// a negative impact.
|
|
224
264
|
const videomtu = 188 * 3;
|
|
225
265
|
const audiomtu = 188 * 1;
|
|
226
|
-
// -hide_banner
|
|
227
|
-
// -rtsp_transport tcp
|
|
228
|
-
// -
|
|
229
|
-
//
|
|
230
|
-
//
|
|
231
|
-
//
|
|
232
|
-
|
|
266
|
+
// -hide_banner suppress printing the startup banner in FFmpeg.
|
|
267
|
+
// -rtsp_transport tcp tell the RTSP stream handler that we're looking for a TCP connection.
|
|
268
|
+
// -i this.rtspEntry.url RTSPS URL to get our input stream from.
|
|
269
|
+
// -map 0:v selects the first available video track from the stream. Protect actually maps audio
|
|
270
|
+
// and video tracks in opposite locations from where FFmpeg typically expects them. This
|
|
271
|
+
// setting is a more general solution than naming the track locations directly in case
|
|
272
|
+
// Protect changes this in the future.
|
|
273
|
+
const ffmpegArgs = ["-hide_banner", "-rtsp_transport", "tcp", "-i", this.rtspEntry.url, "-map", "0:v"];
|
|
233
274
|
// Inform the user.
|
|
234
|
-
this.log.info("%s: Streaming request from %s: %sx%s@%sfps, %s kbps. %s RTSP stream profile: %s, %s kbps.", this.name(), sessionInfo.address, request.video.width, request.video.height, request.video.fps, request.video.max_bit_rate, isTranscoding ? "Transcoding" : "Using", rtspEntry.name, rtspEntry.channel.bitrate / 1000);
|
|
275
|
+
this.log.info("%s: Streaming request from %s: %sx%s@%sfps, %s kbps. %s RTSP stream profile: %s, %s kbps.", this.name(), sessionInfo.address, request.video.width, request.video.height, request.video.fps, request.video.max_bit_rate, isTranscoding ? "Transcoding" : "Using", this.rtspEntry.name, this.rtspEntry.channel.bitrate / 1000);
|
|
235
276
|
// Check to see if we're transcoding. If we are, set the right FFmpeg encoder options. If not, copy the video stream.
|
|
236
277
|
if (isTranscoding) {
|
|
237
278
|
// Configure our video parameters for transcoding:
|
|
238
279
|
//
|
|
239
|
-
// -vcodec libx264
|
|
240
|
-
// -pix_fmt yuvj420p
|
|
241
|
-
// -profile:v high
|
|
242
|
-
// -preset veryfast
|
|
243
|
-
// -bf 0
|
|
244
|
-
// -b:v bitrate
|
|
245
|
-
// -bufsize size
|
|
246
|
-
// -maxrate bitrate
|
|
247
|
-
//
|
|
248
|
-
// -filter:v fps=fps=
|
|
249
|
-
//
|
|
280
|
+
// -vcodec libx264 Copy the stream withour reencoding it.
|
|
281
|
+
// -pix_fmt yuvj420p Use the yuvj420p pixel format, which is what Protect uses.
|
|
282
|
+
// -profile:v high Use the H.264 high profile when encoding, which provides for better stream quality and size efficiency.
|
|
283
|
+
// -preset veryfast Use the veryfast encoding preset in libx264, which provides a good balance of encoding speed and quality.
|
|
284
|
+
// -bf 0 Disable B-frames when encoding to increase compatibility against occasionally finicky HomeKit clients.
|
|
285
|
+
// -b:v bitrate The average bitrate to use for this stream. This is specified by HomeKit.
|
|
286
|
+
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
287
|
+
// -maxrate bitrate The maximum bitrate tolerance, used with -bufsize. We set this to max_bit_rate to effectively
|
|
288
|
+
// create a constant bitrate.
|
|
289
|
+
// -filter:v fps=fps= Use the fps filter to get to the frame rate requested by HomeKit. This has better performance characteristics
|
|
290
|
+
// for Protect rather than using "-r".
|
|
250
291
|
ffmpegArgs.push("-vcodec", this.videoEncoder, "-pix_fmt", "yuvj420p", "-profile:v", "high", "-preset", "veryfast", "-bf", "0", "-b:v", request.video.max_bit_rate.toString() + "k", "-bufsize", (2 * request.video.max_bit_rate).toString() + "k", "-maxrate", request.video.max_bit_rate.toString() + "k", "-filter:v", "fps=fps=" + request.video.fps.toString());
|
|
251
292
|
}
|
|
252
293
|
else {
|
|
253
294
|
// Configure our video parameters for just copying the input stream from Protect - it tends to be quite solid in most cases:
|
|
254
295
|
//
|
|
255
|
-
// -vcodec copy
|
|
256
|
-
// -pix_fmt yuvj420p use the yuvj420p pixel format, which is what Protect uses.
|
|
257
|
-
// -r fps frame rate to use for this stream. This is specified by HomeKit.
|
|
258
|
-
// -b:v bitrate the average bitrate to use for this stream. This is specified by HomeKit.
|
|
259
|
-
// -bufsize size this is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
260
|
-
// -maxrate bitrate the maximum bitrate tolerance, used with -bufsize. We set this to max_bit_rate to effectively
|
|
261
|
-
// create a constant bitrate.
|
|
296
|
+
// -vcodec copy Copy the stream withour reencoding it.
|
|
262
297
|
ffmpegArgs.push("-vcodec", "copy");
|
|
263
298
|
}
|
|
264
299
|
// Add in any user-specified options for FFmpeg.
|
|
@@ -267,27 +302,27 @@ class ProtectStreamingDelegate {
|
|
|
267
302
|
}
|
|
268
303
|
// Configure our video parameters for SRTP streaming:
|
|
269
304
|
//
|
|
270
|
-
// -payload_type num
|
|
271
|
-
// -ssrc
|
|
272
|
-
// -f rtp
|
|
273
|
-
// -srtp_out_suite enc
|
|
274
|
-
// -srtp_out_params params
|
|
305
|
+
// -payload_type num Payload type for the RTP stream. This is negotiated by HomeKit and is usually 99 for H.264 video.
|
|
306
|
+
// -ssrc Synchronization source stream identifier. Random number negotiated by HomeKit to identify this stream.
|
|
307
|
+
// -f rtp Specify that we're using the RTP protocol.
|
|
308
|
+
// -srtp_out_suite enc Specify the output encryption encoding suites.
|
|
309
|
+
// -srtp_out_params params Specify the output encoding parameters. This is negotiated by HomeKit.
|
|
275
310
|
ffmpegArgs.push("-payload_type", request.video.pt.toString(), "-ssrc", sessionInfo.videoSSRC.toString(), "-f", "rtp", "-srtp_out_suite", "AES_CM_128_HMAC_SHA1_80", "-srtp_out_params", sessionInfo.videoSRTP.toString("base64"), "srtp://" + sessionInfo.address + ":" + sessionInfo.videoPort.toString() + "?rtcpport=" + sessionInfo.videoPort.toString() +
|
|
276
311
|
"&localrtcpport=" + sessionInfo.videoPort.toString() + "&pkt_size=" + videomtu.toString());
|
|
277
312
|
// Configure the audio portion of the command line, if we have a version of FFmpeg supports libfdk_aac. Options we use are:
|
|
278
313
|
//
|
|
279
|
-
// -map 0:a
|
|
280
|
-
//
|
|
281
|
-
//
|
|
282
|
-
//
|
|
283
|
-
// -acodec libfdk_aac
|
|
284
|
-
// -profile:a aac_eld
|
|
285
|
-
// -flags +global_header
|
|
286
|
-
// -f null
|
|
287
|
-
// -ar samplerate
|
|
288
|
-
// -b:a bitrate
|
|
289
|
-
// -bufsize size
|
|
290
|
-
// -ac 1
|
|
314
|
+
// -map 0:a Selects the first available audio track from the stream. Protect actually maps audio
|
|
315
|
+
// and video tracks in opposite locations from where FFmpeg typically expects them. This
|
|
316
|
+
// setting is a more general solution than naming the track locations directly in case
|
|
317
|
+
// Protect changes this in the future.
|
|
318
|
+
// -acodec libfdk_aac Encode to AAC.
|
|
319
|
+
// -profile:a aac_eld Specify enhanced, low-delay AAC for HomeKit.
|
|
320
|
+
// -flags +global_header Sets the global header in the bitstream.
|
|
321
|
+
// -f null Null filter to pass the audio unchanged without running through a muxing operation.
|
|
322
|
+
// -ar samplerate Sample rate to use for this audio. This is specified by HomeKit.
|
|
323
|
+
// -b:a bitrate Bitrate to use for this audio. This is specified by HomeKit.
|
|
324
|
+
// -bufsize size This is the decoder buffer size, which drives the variability / quality of the output bitrate.
|
|
325
|
+
// -ac 1 Set the number of audio channels to 1.
|
|
291
326
|
if (sessionInfo.hasLibFdk) {
|
|
292
327
|
// Configure our audio parameters.
|
|
293
328
|
ffmpegArgs.push("-map", "0:a", "-acodec", "libfdk_aac", "-profile:a", "aac_eld", "-flags", "+global_header", "-f", "null", "-ar", request.audio.sample_rate.toString() + "k", "-b:a", request.audio.max_bit_rate.toString() + "k", "-bufsize", (2 * request.audio.max_bit_rate).toString() + "k", "-ac", "1");
|
|
@@ -310,11 +345,12 @@ class ProtectStreamingDelegate {
|
|
|
310
345
|
ffmpegArgs.push("-af", "highpass=f=" + highpass.toString() + ",lowpass=f=" + lowpass.toString());
|
|
311
346
|
}
|
|
312
347
|
// Add the required RTP settings and encryption for the stream:
|
|
313
|
-
//
|
|
314
|
-
// -
|
|
315
|
-
// -
|
|
316
|
-
// -
|
|
317
|
-
// -
|
|
348
|
+
//
|
|
349
|
+
// -payload_type num Payload type for the RTP stream. This is negotiated by HomeKit and is usually 110 for AAC-ELD audio.
|
|
350
|
+
// -ssrc synchronization source stream identifier. Random number negotiated by HomeKit to identify this stream.
|
|
351
|
+
// -f rtp Specify that we're using the RTP protocol.
|
|
352
|
+
// -srtp_out_suite enc Specify the output encryption encoding suites.
|
|
353
|
+
// -srtp_out_params params Specify the output encoding parameters. This is negotiated by HomeKit.
|
|
318
354
|
ffmpegArgs.push("-payload_type", request.audio.pt.toString(), "-ssrc", sessionInfo.audioSSRC.toString(), "-f", "rtp", "-srtp_out_suite", "AES_CM_128_HMAC_SHA1_80", "-srtp_out_params", sessionInfo.audioSRTP.toString("base64"), "srtp://" + sessionInfo.address + ":" + sessionInfo.audioPort.toString() + "?rtcpport=" + sessionInfo.audioPort.toString() +
|
|
319
355
|
"&localrtcpport=" + sessionInfo.audioPort.toString() + "&pkt_size=" + audiomtu.toString());
|
|
320
356
|
}
|
|
@@ -326,9 +362,9 @@ class ProtectStreamingDelegate {
|
|
|
326
362
|
ffmpegArgs.push("-loglevel", "level+debug");
|
|
327
363
|
}
|
|
328
364
|
// Combine everything and start an instance of FFmpeg.
|
|
329
|
-
const
|
|
365
|
+
const ffmpegStream = new protect_ffmpeg_1.FfmpegStreamingProcess(this, request.sessionID, ffmpegArgs, (sessionInfo.hasLibFdk && this.protectCamera.twoWayAudio) ? undefined : { addressVersion: sessionInfo.addressVersion, port: sessionInfo.videoReturnPort }, callback);
|
|
330
366
|
// Some housekeeping for our FFmpeg and demuxer sessions.
|
|
331
|
-
this.ongoingSessions[request.sessionID] = { ffmpeg: [
|
|
367
|
+
this.ongoingSessions[request.sessionID] = { ffmpeg: [ffmpegStream], rtpDemuxer: sessionInfo.rtpDemuxer };
|
|
332
368
|
delete this.pendingSessions[request.sessionID];
|
|
333
369
|
// If we aren't doing two-way audio, we're done here. For two-way audio...we have some more plumbing to do.
|
|
334
370
|
if (!sessionInfo.hasLibFdk || !this.protectCamera.twoWayAudio) {
|
|
@@ -338,16 +374,17 @@ class ProtectStreamingDelegate {
|
|
|
338
374
|
// SDP messages tell the other side of the connection what we're expecting to receive.
|
|
339
375
|
//
|
|
340
376
|
// Parameters are:
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
//
|
|
344
|
-
//
|
|
345
|
-
//
|
|
346
|
-
//
|
|
347
|
-
//
|
|
348
|
-
//
|
|
349
|
-
// a=
|
|
350
|
-
// a=
|
|
377
|
+
//
|
|
378
|
+
// v Protocol version - always 0.
|
|
379
|
+
// o Originator and session identifier.
|
|
380
|
+
// s Session description.
|
|
381
|
+
// c Connection information.
|
|
382
|
+
// t Timestamps for the start and end of the session.
|
|
383
|
+
// m Media type - audio, adhering to RTP/AVP, payload type 110.
|
|
384
|
+
// b Bandwidth information - application specific, 24k.
|
|
385
|
+
// a=rtpmap Payload type 110 corresponds to an MP4 stream.
|
|
386
|
+
// a=fmtp For payload type 110, use these format parameters.
|
|
387
|
+
// a=crypto Crypto suite to use for this session.
|
|
351
388
|
const sdpReturnAudio = [
|
|
352
389
|
"v=0",
|
|
353
390
|
"o=- 0 0 IN " + sdpIpVersion + " 127.0.0.1",
|
|
@@ -362,17 +399,18 @@ class ProtectStreamingDelegate {
|
|
|
362
399
|
].join("\n");
|
|
363
400
|
// Configure the audio portion of the command line, if we have a version of FFmpeg supports libfdk_aac. Options we use are:
|
|
364
401
|
//
|
|
365
|
-
// -protocol_whitelist
|
|
366
|
-
// -f sdp
|
|
367
|
-
// -acodec libfdk_aac
|
|
368
|
-
// -i pipe:0
|
|
369
|
-
// -map 0:a
|
|
370
|
-
// -acodec aac
|
|
371
|
-
// -flags +global_header
|
|
372
|
-
// -ar samplerate
|
|
373
|
-
// -b:a bitrate
|
|
374
|
-
// -ac 1
|
|
375
|
-
// -f adts
|
|
402
|
+
// -protocol_whitelist Set the list of allowed protocols for this FFmpeg session.
|
|
403
|
+
// -f sdp Specify that our input will be an SDP file.
|
|
404
|
+
// -acodec libfdk_aac Decode AAC input.
|
|
405
|
+
// -i pipe:0 Read input from standard input.
|
|
406
|
+
// -map 0:a Selects the first available audio track from the stream.
|
|
407
|
+
// -acodec aac Encode to AAC. This is set by Protect.
|
|
408
|
+
// -flags +global_header Sets the global header in the bitstream.
|
|
409
|
+
// -ar samplerate Sample rate to use for this audio. This is specified by Protect.
|
|
410
|
+
// -b:a bitrate Bitrate to use for this audio. This is specified by Protect.
|
|
411
|
+
// -ac 1 Set the number of audio channels to 1. This is specified by Protect.
|
|
412
|
+
// -f adts Transmit an ADTS stream.
|
|
413
|
+
// pipe:1 Output the ADTS stream to standard output.
|
|
376
414
|
const ffmpegReturnAudioCmd = [
|
|
377
415
|
"-hide_banner",
|
|
378
416
|
"-protocol_whitelist", "pipe,udp,rtp,file,crypto",
|
|
@@ -385,7 +423,7 @@ class ProtectStreamingDelegate {
|
|
|
385
423
|
"-ar", cameraConfig.talkbackSettings.samplingRate.toString(),
|
|
386
424
|
"-b:a", "64k",
|
|
387
425
|
"-f", "adts",
|
|
388
|
-
"
|
|
426
|
+
"pipe:1"
|
|
389
427
|
];
|
|
390
428
|
// Additional logging, but only if we're debugging.
|
|
391
429
|
if (this.platform.verboseFfmpeg) {
|
|
@@ -397,12 +435,15 @@ class ProtectStreamingDelegate {
|
|
|
397
435
|
try {
|
|
398
436
|
// Now it's time to talkback.
|
|
399
437
|
let ws = null;
|
|
438
|
+
let isTalkbackLive = false;
|
|
439
|
+
let dataListener;
|
|
440
|
+
let openListener;
|
|
400
441
|
if (sessionInfo.talkBack) {
|
|
401
442
|
// Open the talkback connection.
|
|
402
443
|
ws = new ws_1.default(sessionInfo.talkBack, { rejectUnauthorized: false });
|
|
403
|
-
|
|
444
|
+
isTalkbackLive = true;
|
|
404
445
|
// Catch any errors and inform the user, if needed.
|
|
405
|
-
ws === null || ws === void 0 ? void 0 : ws.
|
|
446
|
+
ws === null || ws === void 0 ? void 0 : ws.once("error", (error) => {
|
|
406
447
|
// Ignore timeout errors, but notify the user about anything else.
|
|
407
448
|
if (error.code !== "ETIMEDOUT") {
|
|
408
449
|
this.log.error("%s: Error in communicating with the return audio channel: %s", this.name(), error);
|
|
@@ -410,32 +451,44 @@ class ProtectStreamingDelegate {
|
|
|
410
451
|
ws === null || ws === void 0 ? void 0 : ws.terminate();
|
|
411
452
|
});
|
|
412
453
|
// Catch any stray open events after we've closed.
|
|
413
|
-
ws === null || ws === void 0 ? void 0 : ws.on("open", () => {
|
|
454
|
+
ws === null || ws === void 0 ? void 0 : ws.on("open", openListener = () => {
|
|
414
455
|
// If we've somehow opened after we've wrapped up talkback, terminate the connection.
|
|
415
|
-
if (!
|
|
456
|
+
if (!isTalkbackLive) {
|
|
416
457
|
ws === null || ws === void 0 ? void 0 : ws.terminate();
|
|
417
458
|
}
|
|
418
459
|
});
|
|
460
|
+
// Cleanup after ourselves on close.
|
|
461
|
+
ws === null || ws === void 0 ? void 0 : ws.once("close", () => {
|
|
462
|
+
ws === null || ws === void 0 ? void 0 : ws.removeListener("open", openListener);
|
|
463
|
+
});
|
|
419
464
|
}
|
|
420
465
|
// Fire up FFmpeg.
|
|
421
|
-
const ffmpegReturnAudio = new protect_ffmpeg_1.
|
|
466
|
+
const ffmpegReturnAudio = new protect_ffmpeg_1.FfmpegStreamingProcess(this, request.sessionID, ffmpegReturnAudioCmd);
|
|
422
467
|
// Make sure we terminate the talkback websocket when we're done.
|
|
423
|
-
(_c = ffmpegReturnAudio.
|
|
468
|
+
(_c = ffmpegReturnAudio.stdout) === null || _c === void 0 ? void 0 : _c.once("close", () => {
|
|
469
|
+
var _a;
|
|
424
470
|
// Make sure we catch any stray connections that may be too slow to open.
|
|
425
|
-
|
|
471
|
+
isTalkbackLive = false;
|
|
426
472
|
// Close the websocket.
|
|
427
473
|
if (((ws === null || ws === void 0 ? void 0 : ws.readyState) === ws_1.default.CLOSING) || ((ws === null || ws === void 0 ? void 0 : ws.readyState) === ws_1.default.OPEN)) {
|
|
428
474
|
ws === null || ws === void 0 ? void 0 : ws.terminate();
|
|
429
475
|
}
|
|
476
|
+
(_a = ffmpegReturnAudio.stdout) === null || _a === void 0 ? void 0 : _a.removeListener("data", dataListener);
|
|
430
477
|
});
|
|
431
478
|
// Setup housekeeping for the twoway FFmpeg session.
|
|
432
479
|
this.ongoingSessions[request.sessionID].ffmpeg.push(ffmpegReturnAudio);
|
|
433
480
|
// Feed the SDP session description to FFmpeg on stdin.
|
|
434
|
-
(_d = ffmpegReturnAudio.
|
|
435
|
-
(_e = ffmpegReturnAudio.
|
|
481
|
+
(_d = ffmpegReturnAudio.stdin) === null || _d === void 0 ? void 0 : _d.write(sdpReturnAudio);
|
|
482
|
+
(_e = ffmpegReturnAudio.stdin) === null || _e === void 0 ? void 0 : _e.end();
|
|
436
483
|
// Send the audio.
|
|
437
|
-
(_f = ffmpegReturnAudio.
|
|
438
|
-
ws === null || ws === void 0 ? void 0 : ws.send(data
|
|
484
|
+
(_f = ffmpegReturnAudio.stdout) === null || _f === void 0 ? void 0 : _f.on("data", dataListener = (data) => {
|
|
485
|
+
ws === null || ws === void 0 ? void 0 : ws.send(data, error => {
|
|
486
|
+
// This happens when an error condition is encountered on sending data to the websocket.
|
|
487
|
+
// We assume the worst and close our talkback channel.
|
|
488
|
+
if (error) {
|
|
489
|
+
ws === null || ws === void 0 ? void 0 : ws.terminate();
|
|
490
|
+
}
|
|
491
|
+
});
|
|
439
492
|
});
|
|
440
493
|
}
|
|
441
494
|
catch (error) {
|
|
@@ -443,19 +496,23 @@ class ProtectStreamingDelegate {
|
|
|
443
496
|
}
|
|
444
497
|
}
|
|
445
498
|
// Process incoming stream requests.
|
|
446
|
-
handleStreamRequest(request, callback) {
|
|
499
|
+
async handleStreamRequest(request, callback) {
|
|
447
500
|
switch (request.type) {
|
|
448
501
|
case "start" /* START */:
|
|
449
|
-
this.startStream(request, callback);
|
|
502
|
+
await this.startStream(request, callback);
|
|
450
503
|
break;
|
|
451
504
|
case "reconfigure" /* RECONFIGURE */:
|
|
452
505
|
// Once FFmpeg is updated to support this, we'll enable this one.
|
|
453
|
-
this.
|
|
506
|
+
this.log.info("%s: Streaming parameters adjustment requested by HomeKit: %sx%s, %s fps, %s kbps.", this.name(), request.video.width, request.video.height, request.video.fps, request.video.max_bit_rate);
|
|
507
|
+
// Set the desired bitrate in Protect.
|
|
508
|
+
if (this.rtspEntry) {
|
|
509
|
+
await this.protectCamera.setBitrate(this.rtspEntry.channel.id, request.video.max_bit_rate * 1000);
|
|
510
|
+
}
|
|
454
511
|
callback();
|
|
455
512
|
break;
|
|
456
513
|
case "stop" /* STOP */:
|
|
457
514
|
default:
|
|
458
|
-
this.stopStream(request.sessionID);
|
|
515
|
+
await this.stopStream(request.sessionID);
|
|
459
516
|
callback();
|
|
460
517
|
break;
|
|
461
518
|
}
|
|
@@ -526,8 +583,8 @@ class ProtectStreamingDelegate {
|
|
|
526
583
|
}
|
|
527
584
|
}
|
|
528
585
|
// Close a video stream.
|
|
529
|
-
stopStream(sessionId) {
|
|
530
|
-
var _a;
|
|
586
|
+
async stopStream(sessionId) {
|
|
587
|
+
var _a, _b;
|
|
531
588
|
try {
|
|
532
589
|
// Stop any FFmpeg instances we have running.
|
|
533
590
|
if (this.ongoingSessions[sessionId]) {
|
|
@@ -542,15 +599,30 @@ class ProtectStreamingDelegate {
|
|
|
542
599
|
// Delete the entries.
|
|
543
600
|
delete this.pendingSessions[sessionId];
|
|
544
601
|
delete this.ongoingSessions[sessionId];
|
|
602
|
+
// If we've completed all streaming sessions, restore any changed settings, such as bitrate, for HomeKit Secure Video.
|
|
603
|
+
if (!this.ongoingSessions.length) {
|
|
604
|
+
if ((_b = this.hksv) === null || _b === void 0 ? void 0 : _b.isRecording) {
|
|
605
|
+
// Restore HKSV settings.
|
|
606
|
+
await this.hksv.updateRecordingActive(this.hksv.isRecording);
|
|
607
|
+
}
|
|
608
|
+
else if (this.savedBitrate) {
|
|
609
|
+
// Restore our original bitrate.
|
|
610
|
+
if (this.rtspEntry) {
|
|
611
|
+
await this.protectCamera.setBitrate(this.rtspEntry.channel.id, this.savedBitrate);
|
|
612
|
+
}
|
|
613
|
+
this.savedBitrate = 0;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
545
616
|
}
|
|
546
617
|
catch (error) {
|
|
547
618
|
this.log.error("%s: Error occurred while ending the FFmpeg video processes: %s.", this.name(), error);
|
|
548
619
|
}
|
|
549
620
|
}
|
|
550
621
|
// Shutdown all our video streams.
|
|
551
|
-
shutdown() {
|
|
622
|
+
async shutdown() {
|
|
552
623
|
for (const session of Object.keys(this.ongoingSessions)) {
|
|
553
|
-
|
|
624
|
+
// eslint-disable-next-line no-await-in-loop
|
|
625
|
+
await this.stopStream(session);
|
|
554
626
|
}
|
|
555
627
|
}
|
|
556
628
|
// Temporarily increase the verbosity of FFmpeg output for end users.
|
|
@@ -568,7 +640,7 @@ class ProtectStreamingDelegate {
|
|
|
568
640
|
}, settings_1.PROTECT_FFMPEG_VERBOSE_DURATION * 60 * 1000);
|
|
569
641
|
this.log.info("FFmpeg exited unexpectedly." +
|
|
570
642
|
" Increasing logging output of FFmpeg for the next %s minutes to provide additional detail for future attempts to stream video.", settings_1.PROTECT_FFMPEG_VERBOSE_DURATION);
|
|
571
|
-
this.platform.verboseFfmpeg = true;
|
|
643
|
+
// this.platform.verboseFfmpeg = true;
|
|
572
644
|
}
|
|
573
645
|
}
|
|
574
646
|
exports.ProtectStreamingDelegate = ProtectStreamingDelegate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protect-stream.js","sourceRoot":"","sources":["../src/protect-stream.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"protect-stream.js","sourceRoot":"","sources":["../src/protect-stream.ts"],"names":[],"mappings":";;;;;;AA2BA,iDAAgE;AAChE,yCAMoB;AAEpB,qDAA0D;AAG1D,qDAA4D;AAC5D,+CAA2C;AAC3C,4CAA2B;AAC3B,kFAA+C;AAC/C,2DAAwD;AAExD,gIAAgI;AAChI,0GAA0G;AAC1G,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,mBAAmB,GAAG,GAAG,CAAC;AAuBzD,wDAAwD;AACxD,MAAa,wBAAwB;IAqBnC,YAAY,aAA4B,EAAE,WAAuC;QAE/E,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,+BAAU,IAAI,QAAQ,CAAC;QAE3E,8BAA8B;QAC9B,IAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,yCAAwB,CAAC,aAAa,CAAC,CAAC;SACzD;QAED,mCAAmC;QACnC,MAAM,OAAO,GAA4B;YAEvC,4EAA4E;YAC5E,iBAAiB,EAAE,EAAE;YAErB,mCAAmC;YACnC,QAAQ,EAAE,IAAI;YAEd,uDAAuD;YACvD,SAAS,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAElD,QAAQ,EAAE,IAAI,CAAC,IAAgC;gBAE/C,OAAO,EAAE;oBAEP,KAAK,EAAE;wBAEL,MAAM,EAAE;4BACN;gCAEE,+EAA+E;gCAC/E,UAAU,gBAA8C;gCACxD,IAAI,gBAA6C;6BAClD;yBACF;qBACF;oBAED,2BAA2B,EAAE;wBAC3B;4BAEE,uGAAuG;4BACvG,wBAAwB;4BACxB,cAAc,EAAE,sCAA2B;4BAC3C,IAAI,wBAAgD;yBACrD;qBACF;oBAED,2GAA2G;oBAC3G,2CAA2C;oBAC3C,eAAe,EAAE,qCAA0B;oBAE3C,KAAK,EAAE;wBAEL,UAAU,EAAE;4BAEV,mGAAmG;4BACnG,iGAAiG;4BACjG,mGAAmG;4BACnG,qBAAqB;4BACrB,MAAM,EAAE,sDAAuF;4BAC/F,QAAQ,EAAE,cAA6B;yBACxC;wBAED,WAAW,EAAE,WAAW;wBAExB,IAAI,cAAkC;qBAEvC;iBACF;aACF;YAED,qBAAqB;YACrB,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBAEhD,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;aAC/E;YAED,gBAAgB,EAAE;gBAChB,KAAK,EAAE;oBACL,MAAM,EAAE;wBACN;4BACE,UAAU,iBAAiC;4BAC3C,IAAI,yBAAiC;yBACtC;qBACF;oBAED,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW;iBAC5C;gBAED,qBAAqB,EAAE,iCAAmD;gBAE1E,KAAK,EAAE;oBACL,KAAK,EAAE;wBACL,mGAAmG;wBACnG,iGAAiG;wBACjG,mGAAmG;wBACnG,qBAAqB;wBACrB,MAAM,EAAE,sDAAuF;wBAC/F,QAAQ,EAAE,cAA6B;qBACxC;oBAED,mGAAmG;oBACnG,kGAAkG;oBAClG,2FAA2F;oBAC3F,sGAAsG;oBACtG,wEAAwE;oBACxE,WAAW,EAAE,WAAW;iBACzB;aACF;SACF,CAAC;QAEF,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,0CAA0C;IACnC,KAAK,CAAC,qBAAqB,CAAC,OAAyB,EAAE,QAAkC;;QAE9F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEjD,8CAA8C;QAC9C,IAAG,CAAC,QAAQ,EAAE;YAEZ,IAAG,QAAQ,EAAE;gBACX,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,iCAAiC,CAAC,CAAC,CAAC;aACtE;YAED,OAAO;SACR;QAED,+BAA+B;QAC/B,IAAG,QAAQ,EAAE;YACX,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SAC/B;QAED,6DAA6D;QAC7D,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,0CAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,yBAAyB,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1I,CAAC;IAED,sCAAsC;IAC/B,KAAK,CAAC,aAAa,CAAC,OAA6B,EAAE,QAA+B;QAEvF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,MAA6B,CAAC;QAExF,qCAAqC;QACrC,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAEhH,6FAA6F;QAC7F,MAAM,SAAS,GAAG,cAAc,IAAI,CAAC,MAAM,uCAAsB,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7H,4BAA4B;QAC5B,MAAM,qBAAqB,GAAG,CAAC,MAAM,IAAA,2BAAY,EAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,iBAAiB,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAA,2BAAY,EAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrH,MAAM,oBAAoB,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAA,2BAAY,EAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,CAAC;QAE5E,IAAG,CAAC,SAAS,EAAE;YACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,IAAI,CAAC,IAAI,EAAE,EACxD,cAAc,CAAC,CAAC,CAAC,0FAA0F,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACrH;QAED,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,QAAQ,GAAG,IAAI,CAAC;QAEpB,IAAG,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAE9C,qDAAqD;YACrD,UAAU,GAAG,IAAI,wBAAU,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,CAAC;YAE1H,sDAAsD;YACtD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEvI,+DAA+D;YAC/D,IAAG,CAAC,QAAQ,EAAE;gBAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8CAA8C,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aAC7E;SACF;QAED,4BAA4B;QAC5B,MAAM,eAAe,GAAG,CAAC,MAAM,IAAA,2BAAY,EAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,CAAC;QAE5E,MAAM,WAAW,GAAgB;YAC/B,OAAO,EAAE,OAAO,CAAC,aAAa;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YAEtC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe;YAC/C,qBAAqB,EAAE,qBAAqB;YAC5C,oBAAoB,EAAE,oBAAoB;YAC1C,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;YAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3E,SAAS,EAAE,SAAS;YAEpB,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,UAAU;YACtB,QAAQ,EAAE,QAAQ;YAElB,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe;YAC/C,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;YAC7B,eAAe,EAAE,eAAe;YAChC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3E,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,kHAAkH;QAClH,oHAAoH;QACpH,qCAAqC;QACrC,MAAM,QAAQ,GAA0B;YACtC,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,qBAAqB;gBAC/F,qCAAqC;gBACrC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;gBAChC,qCAAqC;gBACrC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;gBAClC,IAAI,EAAE,SAAS;aAChB;YAED,KAAK,EAAE;gBACL,IAAI,EAAE,eAAe;gBACrB,qCAAqC;gBACrC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;gBAChC,qCAAqC;gBACrC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS;gBAClC,IAAI,EAAE,SAAS;aAChB;SACF,CAAC;QAEF,sFAAsF;QACtF,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;QACtD,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,+CAA+C;IACvC,KAAK,CAAC,WAAW,CAAC,OAA2B,EAAE,QAA+B;;QAEpF,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,MAA6B,CAAC;QACxF,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAA,CAAC,CAAC,KAAK,CAAC;QAE3E,sCAAsC;QACtC,IAAG,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE;YACrC,MAAM,YAAY,GAAG,qEAAqE,CAAC;YAE3F,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;YACpD,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;YACvD,OAAO;SACR;QAED,6DAA6D;QAC7D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAE3H,IAAG,CAAC,IAAI,CAAC,SAAS,EAAE;YAElB,MAAM,YAAY,GAAG,uEAAuE,CAAC;YAE7F,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,EACxE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAE5F,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;YACvD,OAAO;SACR;QAED,0HAA0H;QAC1H,IAAG,CAAC,IAAI,CAAC,YAAY,EAAE;YAErB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAE7E,IAAG,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;gBAExB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;aACvB;SACF;QAED,2FAA2F;QAC3F,oEAAoE;QACpE,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;QAElG,sBAAsB;QACtB,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAExH,qGAAqG;QACrG,yGAAyG;QACzG,sGAAsG;QACtG,0GAA0G;QAC1G,sGAAsG;QACtG,4GAA4G;QAC5G,2GAA2G;QAC3G,4GAA4G;QAC5G,uGAAuG;QACvG,oGAAoG;QACpG,2BAA2B;QAC3B,EAAE;QACF,8GAA8G;QAC9G,6GAA6G;QAC7G,8DAA8D;QAC9D,EAAE;QACF,iHAAiH;QACjH,mHAAmH;QACnH,qBAAqB;QACrB,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;QAEzB,yEAAyE;QACzE,+FAA+F;QAC/F,iEAAiE;QACjE,8GAA8G;QAC9G,+GAA+G;QAC/G,6GAA6G;QAC7G,6DAA6D;QAC7D,MAAM,UAAU,GAAG,CAAE,cAAc,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAE,CAAC;QAEzG,mBAAmB;QACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2FAA2F,EACvG,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAC1H,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAEvG,qHAAqH;QACrH,IAAG,aAAa,EAAE;YAEhB,kDAAkD;YAClD,EAAE;YACF,6DAA6D;YAC7D,iFAAiF;YACjF,8HAA8H;YAC9H,gIAAgI;YAChI,6HAA6H;YAC7H,gGAAgG;YAChG,qHAAqH;YACrH,oHAAoH;YACpH,iDAAiD;YACjD,oIAAoI;YACpI,0DAA0D;YAC1D,UAAU,CAAC,IAAI,CACb,SAAS,EAAE,IAAI,CAAC,YAAY,EAC5B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,UAAU,EACrB,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,GAAG,EACnD,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,EAC7D,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,GAAG,EACvD,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CACvD,CAAC;SAEH;aAAM;YAEL,4HAA4H;YAC5H,EAAE;YACF,uDAAuD;YACvD,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;SACpC;QAED,gDAAgD;QAChD,IAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE;YAErC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;SACxD;QAED,qDAAqD;QACrD,EAAE;QACF,6HAA6H;QAC7H,kIAAkI;QAClI,sEAAsE;QACtE,0EAA0E;QAC1E,kGAAkG;QAClG,UAAU,CAAC,IAAI,CACb,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,EAC5C,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EACzC,IAAI,EAAE,KAAK,EACX,iBAAiB,EAAE,yBAAyB,EAC5C,kBAAkB,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC5D,SAAS,GAAG,WAAW,CAAC,OAAO,GAAG,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC1H,iBAAiB,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAC1F,CAAC;QAEF,2HAA2H;QAC3H,EAAE;QACF,8GAA8G;QAC9G,+GAA+G;QAC/G,6GAA6G;QAC7G,6DAA6D;QAC7D,wCAAwC;QACxC,sEAAsE;QACtE,kEAAkE;QAClE,6GAA6G;QAC7G,0FAA0F;QAC1F,sFAAsF;QACtF,wHAAwH;QACxH,gEAAgE;QAChE,IAAG,WAAW,CAAC,SAAS,EAAE;YAExB,kCAAkC;YAClC,UAAU,CAAC,IAAI,CACb,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,YAAY,EACvB,YAAY,EAAE,SAAS,EACvB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,EACjD,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,GAAG,EACnD,UAAU,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,GAAG,GAAG,EAC7D,KAAK,EAAE,GAAG,CACX,CAAC;YAEF,8CAA8C;YAC9C,IAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,EAAE,oBAAoB,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE;gBAEvG,IAAI,QAAQ,CAAC;gBACb,IAAI,OAAO,CAAC;gBAEZ,qEAAqE;gBACrE,QAAQ,GAAG,QAAQ,CAAC,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,6BAA6B,EAAE,WAAW,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC,CAAC;gBAE9H,mDAAmD;gBACnD,IAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE;oBAC5C,QAAQ,GAAG,+CAAoC,CAAC;iBACjD;gBAED,qEAAqE;gBACrE,OAAO,GAAG,QAAQ,CAAC,MAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,4BAA4B,EAAE,WAAW,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC,CAAC;gBAE5H,mDAAmD;gBACnD,IAAG,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;oBACzC,OAAO,GAAG,8CAAmC,CAAC;iBAC/C;gBAED,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,aAAa,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;aAClG;YAED,+DAA+D;YAC/D,EAAE;YACF,gIAAgI;YAChI,kIAAkI;YAClI,sEAAsE;YACtE,0EAA0E;YAC1E,kGAAkG;YAClG,UAAU,CAAC,IAAI,CAEb,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,EAC5C,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,EACzC,IAAI,EAAE,KAAK,EACX,iBAAiB,EAAE,yBAAyB,EAC5C,kBAAkB,EAAE,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC5D,SAAS,GAAG,WAAW,CAAC,OAAO,GAAG,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE;gBAC1H,iBAAiB,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAC1F,CAAC;SACH;QAED,mDAAmD;QACnD,IAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;YAE9B,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;SAC/C;QAED,IAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;YAEhC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;SAC7C;QAED,sDAAsD;QACtD,MAAM,YAAY,GAAG,IAAI,uCAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,EACjF,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE,IAAI,EAAE,WAAW,CAAC,eAAe,EAAE,EACzJ,QAAQ,CAAC,CAAC;QAEZ,yDAAyD;QACzD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,CAAE,YAAY,CAAE,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC;QAC3G,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAE/C,2GAA2G;QAC3G,IAAG,CAAC,WAAW,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAE5D,OAAO;SACR;QAED,4EAA4E;QAC5E,sFAAsF;QACtF,EAAE;QACF,kBAAkB;QAClB,EAAE;QACF,6CAA6C;QAC7C,mDAAmD;QACnD,qCAAqC;QACrC,wCAAwC;QACxC,iEAAiE;QACjE,2EAA2E;QAC3E,mEAAmE;QACnE,+DAA+D;QAC/D,mEAAmE;QACnE,sDAAsD;QACtD,MAAM,cAAc,GAAG;YACrB,KAAK;YACL,aAAa,GAAG,YAAY,GAAG,YAAY;YAC3C,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,iBAAiB;YACtC,OAAO,GAAG,YAAY,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO;YAClD,OAAO;YACP,UAAU,GAAG,WAAW,CAAC,oBAAoB,CAAC,QAAQ,EAAE,GAAG,cAAc;YACzE,SAAS;YACT,oCAAoC;YACpC,kHAAkH;YAClH,4CAA4C,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACxF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,2HAA2H;QAC3H,EAAE;QACF,oFAAoF;QACpF,qEAAqE;QACrE,2CAA2C;QAC3C,yDAAyD;QACzD,kFAAkF;QAClF,gEAAgE;QAChE,kEAAkE;QAClE,0FAA0F;QAC1F,sFAAsF;QACtF,8FAA8F;QAC9F,kDAAkD;QAClD,oEAAoE;QACpE,MAAM,oBAAoB,GAAG;YAE3B,cAAc;YACd,qBAAqB,EAAE,0BAA0B;YACjD,IAAI,EAAE,KAAK;YACX,SAAS,EAAE,YAAY;YACvB,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACxD,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,YAAY,CAAC,gBAAgB,CAAC,OAAO;YAChD,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,YAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC5D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,MAAM;YACZ,QAAQ;SACT,CAAC;QAEF,mDAAmD;QACnD,IAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE;YAC9B,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;SACzD;QAED,IAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;YAChC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;SACvD;QAED,IAAI;YAEF,6BAA6B;YAC7B,IAAI,EAAE,GAAqB,IAAI,CAAC;YAChC,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,YAAoC,CAAC;YACzC,IAAI,YAAwB,CAAC;YAE7B,IAAG,WAAW,CAAC,QAAQ,EAAE;gBAEvB,gCAAgC;gBAChC,EAAE,GAAG,IAAI,YAAS,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxE,cAAc,GAAG,IAAI,CAAC;gBAEtB,mDAAmD;gBACnD,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAE1B,kEAAkE;oBAClE,IAAI,KAA+B,CAAC,IAAI,KAAK,WAAW,EAAE;wBAExD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8DAA8D,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;qBACpG;oBAED,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,SAAS,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC;gBAEH,kDAAkD;gBAClD,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,GAAS,EAAE;oBAEvC,qFAAqF;oBACrF,IAAG,CAAC,cAAc,EAAE;wBAElB,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,SAAS,EAAE,CAAC;qBACjB;gBACH,CAAC,CAAC,CAAC;gBAEH,oCAAoC;gBACpC,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;oBAErB,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;aACJ;YAED,kBAAkB;YAClB,MAAM,iBAAiB,GAAG,IAAI,uCAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;YAEpG,iEAAiE;YACjE,MAAA,iBAAiB,CAAC,MAAM,0CAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;;gBAE3C,yEAAyE;gBACzE,cAAc,GAAG,KAAK,CAAC;gBAEvB,uBAAuB;gBACvB,IAAG,CAAC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,UAAU,MAAK,YAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,UAAU,MAAK,YAAS,CAAC,IAAI,CAAC,EAAE;oBAEhF,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,SAAS,EAAE,CAAC;iBACjB;gBAED,MAAA,iBAAiB,CAAC,MAAM,0CAAE,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,oDAAoD;YACpD,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEvE,uDAAuD;YACvD,MAAA,iBAAiB,CAAC,KAAK,0CAAE,KAAK,CAAC,cAAc,CAAC,CAAC;YAC/C,MAAA,iBAAiB,CAAC,KAAK,0CAAE,GAAG,EAAE,CAAC;YAE/B,kBAAkB;YAClB,MAAA,iBAAiB,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,CAAC,IAAY,EAAQ,EAAE;gBAEzE,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;oBAErB,wFAAwF;oBACxF,sDAAsD;oBACtD,IAAG,KAAK,EAAE;wBAER,EAAE,aAAF,EAAE,uBAAF,EAAE,CAAE,SAAS,EAAE,CAAC;qBACjB;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SAEJ;QAAC,OAAM,KAAK,EAAE;YAEb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uDAAuD,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;SAC7F;IACH,CAAC;IAED,oCAAoC;IAC7B,KAAK,CAAC,mBAAmB,CAAC,OAAyB,EAAE,QAA+B;QAEzF,QAAO,OAAO,CAAC,IAAI,EAAE;YAEnB;gBAEE,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC1C,MAAM;YAER;gBAEE,iEAAiE;gBACjE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mFAAmF,EAC/F,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAEzG,sCAAsC;gBACtC,IAAG,IAAI,CAAC,SAAS,EAAE;oBAEjB,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;iBACnG;gBAED,QAAQ,EAAE,CAAC;gBACX,MAAM;YAER,uBAA6B;YAC7B;gBAEE,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACzC,QAAQ,EAAE,CAAC;gBACX,MAAM;SACT;IACH,CAAC;IAED,4CAA4C;IACpC,iBAAiB,CAAC,SAAiB;QAEzC,uFAAuF;QACvF,IAAG,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE;YACtG,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC;IAED,mBAAmB;IACX,KAAK,CAAC,WAAW,CAAC,OAAyB;QAEjD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,MAA6B,CAAC;QACxF,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAEtD,sCAAsC;QACtC,IAAG,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0EAA0E,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxG,OAAO,IAAI,CAAC;SACb;QAED,gFAAgF;QAChF,IAAG,OAAO,EAAE;YACV,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;SACpD;QAED,yCAAyC;QACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAErJ,iGAAiG;QACjG,iFAAiF;QACjF,IAAG,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,EAAE,CAAA,EAAE;YAEhB,0DAA0D;YAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAEhE,IAAG,cAAc,EAAE;gBACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mFAAmF,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjH,OAAO,cAAc,CAAC;aACvB;YAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,EACnD,IAAI,CAAC,IAAI,EAAE,EACX,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAExF,OAAO,IAAI,CAAC;SACb;QAED,IAAI;YAEF,sBAAsB;YACtB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9G,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;SAEnD;QAAC,OAAM,KAAK,EAAE;YAEb,IAAG,KAAK,YAAY,0BAAU,EAAE;gBAC9B,IAAI,cAAc,CAAC;gBAEnB,QAAO,KAAK,CAAC,IAAI,EAAE;oBACjB,KAAK,4BAA4B;wBAE/B,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;wBAE1D,IAAG,cAAc,EAAE;4BACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qEAAqE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;4BACnG,OAAO,cAAc,CAAC;yBACvB;wBAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8FAA8F,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC5H,OAAO,IAAI,CAAC;wBACZ,MAAM;oBAER;wBACE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;wBACpE,OAAO,IAAI,CAAC;wBACZ,MAAM;iBACT;aACF;YAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4DAA4D,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YACjG,OAAO,IAAI,CAAC;SACb;IACH,CAAC;IAED,wBAAwB;IACjB,KAAK,CAAC,UAAU,CAAC,SAAiB;;QAEvC,IAAI;YAEF,6CAA6C;YAC7C,IAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;gBAElC,KAAI,MAAM,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE;oBACjE,aAAa,CAAC,IAAI,EAAE,CAAC;iBACtB;gBAED,qCAAqC;gBACrC,MAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,UAAU,0CAAE,KAAK,EAAE,CAAC;gBAEpD,mBAAmB;gBACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACpE;YAED,sBAAsB;YACtB,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAEvC,sHAAsH;YACtH,IAAG,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;gBAE/B,IAAG,MAAA,IAAI,CAAC,IAAI,0CAAE,WAAW,EAAE;oBAEzB,yBAAyB;oBACzB,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBAC9D;qBAAM,IAAG,IAAI,CAAC,YAAY,EAAE;oBAE3B,gCAAgC;oBAChC,IAAG,IAAI,CAAC,SAAS,EAAE;wBAEjB,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;qBACnF;oBAED,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;iBACvB;aACF;SAEF;QAAC,OAAM,KAAK,EAAE;YAEb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iEAAiE,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;SACvG;IACH,CAAC;IAED,kCAAkC;IAC3B,KAAK,CAAC,QAAQ;QAEnB,KAAI,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;YAEtD,4CAA4C;YAC5C,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;SAChC;IACH,CAAC;IAED,qEAAqE;IAC9D,gBAAgB;QAErB,sDAAsD;QACtD,IAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzD,OAAO;SACR;QAED,iDAAiD;QACjD,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,KAAK,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAEnE,2BAA2B;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC,EAAE,0CAA+B,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B;YACzC,gIAAgI,EAAE,0CAA+B,CAAC,CAAC;QAEzK,yCAAyC;IACvC,CAAC;CACF;AAr2BD,4DAq2BC"}
|