ngx-kel-agent 0.4.9 → 0.5.2
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 +0 -26
- package/esm2020/lib/agent-message.service.mjs +18 -0
- package/esm2020/lib/agent.service.mjs +91 -187
- package/esm2020/lib/hamlib-messages.mjs +2 -0
- package/esm2020/lib/hamlib.service.mjs +48 -0
- package/esm2020/lib/wsjtx-messages.mjs +2 -0
- package/esm2020/lib/wsjtx.service.mjs +247 -0
- package/esm2020/public-api.mjs +8 -2
- package/fesm2015/ngx-kel-agent.mjs +362 -166
- package/fesm2015/ngx-kel-agent.mjs.map +1 -1
- package/fesm2020/ngx-kel-agent.mjs +361 -159
- package/fesm2020/ngx-kel-agent.mjs.map +1 -1
- package/lib/agent-message.service.d.ts +9 -0
- package/lib/agent.service.d.ts +113 -28
- package/lib/hamlib-messages.d.ts +10 -0
- package/lib/hamlib.service.d.ts +16 -0
- package/lib/{messages.d.ts → wsjtx-messages.d.ts} +4 -12
- package/lib/wsjtx.service.d.ts +62 -0
- package/package.json +4 -4
- package/public-api.d.ts +5 -1
- package/esm2020/lib/messages.mjs +0 -2
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';
|
|
3
|
+
import { debounceTime } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./agent-message.service";
|
|
6
|
+
export class WsjtxService {
|
|
7
|
+
constructor(messages) {
|
|
8
|
+
this.messages = messages;
|
|
9
|
+
/** Whether we're getting any messages from WSJT-X. */
|
|
10
|
+
this.connected$ = new BehaviorSubject(false);
|
|
11
|
+
/** Subject for listening to WSJT-X "Heartbeat" messages. */
|
|
12
|
+
this.heartbeat$ = new ReplaySubject(1);
|
|
13
|
+
/** Subject for listening to WSJT-X "Status" messages. */
|
|
14
|
+
this.status$ = new ReplaySubject(1);
|
|
15
|
+
/** Subject for listening to WSJT-X "Decode" messages. */
|
|
16
|
+
this.decode$ = new Subject();
|
|
17
|
+
/** Subject for listening to WSJT-X "Clear" messages. */
|
|
18
|
+
this.clear$ = new Subject();
|
|
19
|
+
/** Subject for listening to WSJT-X "QsoLogged" messages. */
|
|
20
|
+
this.qsoLogged$ = new Subject();
|
|
21
|
+
/** Subject for listening to WSJT-X "Close" messages. */
|
|
22
|
+
this.close$ = new Subject();
|
|
23
|
+
/** Subject for listening to WSJT-X "WsprDecode" messages. */
|
|
24
|
+
this.wsprDecode$ = new Subject();
|
|
25
|
+
/** Subject for listening to WSJT-X "LoggedAdif" messages. */
|
|
26
|
+
this.loggedAdif$ = new Subject();
|
|
27
|
+
this.wsjtxId = 'WSJT-X';
|
|
28
|
+
this.setupBehaviors();
|
|
29
|
+
}
|
|
30
|
+
setupBehaviors() {
|
|
31
|
+
this.messages.rxMessage$.subscribe((msg) => this.handleMessage(msg));
|
|
32
|
+
// if we haven't heard from WSJT-X in 15 seconds, consider it "down"
|
|
33
|
+
this.connected$
|
|
34
|
+
.pipe(debounceTime(15000))
|
|
35
|
+
.subscribe(() => this.connected$.next(false));
|
|
36
|
+
// When WSJT-X announces it's closing, set it to "down" immediately
|
|
37
|
+
this.close$.subscribe(() => {
|
|
38
|
+
this.connected$.next(false);
|
|
39
|
+
});
|
|
40
|
+
// When WSJT-X goes down, clear its persistent message subjects
|
|
41
|
+
this.connected$.subscribe((isUp) => {
|
|
42
|
+
if (!isUp) {
|
|
43
|
+
this.heartbeat$.next(null);
|
|
44
|
+
this.status$.next(null);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
handleMessage(msg) {
|
|
49
|
+
if (!msg.wsjtx) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
this.connected$.next(true);
|
|
53
|
+
this.wsjtxId = msg.wsjtx.payload.id;
|
|
54
|
+
switch (msg.wsjtx.type) {
|
|
55
|
+
case 'HeartbeatMessage':
|
|
56
|
+
this.heartbeat$.next(msg.wsjtx.payload);
|
|
57
|
+
return;
|
|
58
|
+
case 'StatusMessage':
|
|
59
|
+
this.status$.next(msg.wsjtx.payload);
|
|
60
|
+
return;
|
|
61
|
+
case 'DecodeMessage':
|
|
62
|
+
this.decode$.next(msg.wsjtx.payload);
|
|
63
|
+
return;
|
|
64
|
+
case 'ClearMessage':
|
|
65
|
+
this.clear$.next(msg.wsjtx.payload);
|
|
66
|
+
return;
|
|
67
|
+
case 'QsoLoggedMessage':
|
|
68
|
+
this.qsoLogged$.next(msg.wsjtx.payload);
|
|
69
|
+
return;
|
|
70
|
+
case 'CloseMessage':
|
|
71
|
+
this.close$.next(msg.wsjtx.payload);
|
|
72
|
+
return;
|
|
73
|
+
case 'WSPRDecodeMessage':
|
|
74
|
+
this.wsprDecode$.next(msg.wsjtx.payload);
|
|
75
|
+
return;
|
|
76
|
+
case 'LoggedAdifMessage':
|
|
77
|
+
this.loggedAdif$.next(msg.wsjtx.payload);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** Send a command to WSJT-X to clear the Band Activity window. */
|
|
82
|
+
clearBandActivity() {
|
|
83
|
+
const wsMsg = {
|
|
84
|
+
wsjtx: {
|
|
85
|
+
type: 'ClearMessage',
|
|
86
|
+
payload: { id: this.wsjtxId, window: 0 },
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
this.messages.txMessage$.next(wsMsg);
|
|
90
|
+
}
|
|
91
|
+
/** Send a command to WSJT-X to clear the Rx Frequency window. */
|
|
92
|
+
clearRxFreqWindow() {
|
|
93
|
+
const wsMsg = {
|
|
94
|
+
wsjtx: {
|
|
95
|
+
type: 'ClearMessage',
|
|
96
|
+
payload: { id: this.wsjtxId, window: 1 },
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
this.messages.txMessage$.next(wsMsg);
|
|
100
|
+
}
|
|
101
|
+
/** Send a command to WSJT-X to clear the Band Activity and Rx Frequency windows. */
|
|
102
|
+
clearAll() {
|
|
103
|
+
const wsMsg = {
|
|
104
|
+
wsjtx: {
|
|
105
|
+
type: 'ClearMessage',
|
|
106
|
+
payload: { id: this.wsjtxId, window: 2 },
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
this.messages.txMessage$.next(wsMsg);
|
|
110
|
+
}
|
|
111
|
+
/** Send a command to WSJT-X to replay messages. Useful for a fresh client that wants to hear
|
|
112
|
+
* previous WSJT-X decodes. */
|
|
113
|
+
replay() {
|
|
114
|
+
const wsMsg = {
|
|
115
|
+
wsjtx: {
|
|
116
|
+
type: 'ReplayMessage',
|
|
117
|
+
payload: { id: this.wsjtxId },
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
this.messages.txMessage$.next(wsMsg);
|
|
121
|
+
}
|
|
122
|
+
/** Send a command to WSJT-X to halt any transmissions immediately. */
|
|
123
|
+
haltTxNow() {
|
|
124
|
+
const wsMsg = {
|
|
125
|
+
wsjtx: {
|
|
126
|
+
type: 'HaltTxMessage',
|
|
127
|
+
payload: { id: this.wsjtxId, autoTxOnly: false },
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
this.messages.txMessage$.next(wsMsg);
|
|
131
|
+
}
|
|
132
|
+
/** Send a command to WSJT-X to stop auto-transmitting after finishing the current round. */
|
|
133
|
+
haltTxAfterCurrent() {
|
|
134
|
+
const wsMsg = {
|
|
135
|
+
wsjtx: {
|
|
136
|
+
type: 'HaltTxMessage',
|
|
137
|
+
payload: { id: this.wsjtxId, autoTxOnly: true },
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
this.messages.txMessage$.next(wsMsg);
|
|
141
|
+
}
|
|
142
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
143
|
+
reply(decode) {
|
|
144
|
+
const wsMsg = {
|
|
145
|
+
wsjtx: {
|
|
146
|
+
type: 'ReplyMessage',
|
|
147
|
+
payload: {
|
|
148
|
+
id: decode.id,
|
|
149
|
+
time: decode.time,
|
|
150
|
+
snr: decode.snr,
|
|
151
|
+
deltaTime: decode.deltaTime,
|
|
152
|
+
deltaFrequency: decode.deltaFrequency,
|
|
153
|
+
mode: decode.mode,
|
|
154
|
+
message: decode.message,
|
|
155
|
+
lowConfidence: decode.lowConfidence,
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
this.messages.txMessage$.next(wsMsg);
|
|
160
|
+
}
|
|
161
|
+
/** Send a command to WSJT-X to reply to the given decode. The message must include CQ or QRZ. */
|
|
162
|
+
highlightCallsign(highlightMsg) {
|
|
163
|
+
highlightMsg.id = this.wsjtxId;
|
|
164
|
+
const wsMsg = {
|
|
165
|
+
wsjtx: {
|
|
166
|
+
type: 'HighlightCallsignMessage',
|
|
167
|
+
payload: highlightMsg,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
this.messages.txMessage$.next(wsMsg);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Send a command to WSJT-X to transmit the given free text. If the text is too long to be
|
|
174
|
+
* encoded in a single message, it may be silently truncated. */
|
|
175
|
+
sendFreeText(freeText) {
|
|
176
|
+
freeText.id = this.wsjtxId;
|
|
177
|
+
const wsMsg = {
|
|
178
|
+
wsjtx: {
|
|
179
|
+
type: 'FreeTextMessage',
|
|
180
|
+
payload: freeText,
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
this.messages.txMessage$.next(wsMsg);
|
|
184
|
+
}
|
|
185
|
+
/** Send a command to WSJT-X to set the local station's Maidenhead grid. This is temporary,
|
|
186
|
+
* lasting only as long as WSJT-X is running. */
|
|
187
|
+
setLocation(grid) {
|
|
188
|
+
const wsMsg = {
|
|
189
|
+
wsjtx: {
|
|
190
|
+
type: 'LocationMessage',
|
|
191
|
+
payload: {
|
|
192
|
+
id: this.wsjtxId,
|
|
193
|
+
location: grid,
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
this.messages.txMessage$.next(wsMsg);
|
|
198
|
+
}
|
|
199
|
+
/** Send a command to WSJT-X to switch to the named configuration. */
|
|
200
|
+
switchConfiguration(configName) {
|
|
201
|
+
const wsMsg = {
|
|
202
|
+
wsjtx: {
|
|
203
|
+
type: 'SwitchConfigurationMessage',
|
|
204
|
+
payload: {
|
|
205
|
+
id: this.wsjtxId,
|
|
206
|
+
configurationName: configName,
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
this.messages.txMessage$.next(wsMsg);
|
|
211
|
+
}
|
|
212
|
+
/** Send a command to WSJT-X to set the given configuration parameters. */
|
|
213
|
+
configure(config) {
|
|
214
|
+
config.id = this.wsjtxId;
|
|
215
|
+
const wsMsg = {
|
|
216
|
+
wsjtx: {
|
|
217
|
+
type: 'ConfigureMessage',
|
|
218
|
+
payload: config,
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
this.messages.txMessage$.next(wsMsg);
|
|
222
|
+
}
|
|
223
|
+
/** Given a decode message, format a string the same way as displayed in the WSJT-X Band
|
|
224
|
+
* Activity/Rx Frequency windows. */
|
|
225
|
+
static formatDecode(msg) {
|
|
226
|
+
const secondsSinceMidnight = Math.floor(msg.time / 1000);
|
|
227
|
+
const hours = Math.floor(secondsSinceMidnight / 3600);
|
|
228
|
+
const secondsSinceHour = secondsSinceMidnight - hours * 3600;
|
|
229
|
+
const minutes = Math.floor(secondsSinceHour / 60);
|
|
230
|
+
const seconds = secondsSinceHour - minutes * 60;
|
|
231
|
+
const timeStr = `${hours.toString().padStart(2, '0')}${minutes
|
|
232
|
+
.toString()
|
|
233
|
+
.padStart(2, '0')}${seconds.toString().padStart(2, '0')}`;
|
|
234
|
+
return `${timeStr} ${msg.snr.toString().padStart(3)} ${msg.deltaTime
|
|
235
|
+
.toFixed(1)
|
|
236
|
+
.padStart(4)} ${msg.deltaFrequency.toString().padStart(4)} ~ ${msg.message}`;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
WsjtxService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, deps: [{ token: i1.AgentMessageService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
240
|
+
WsjtxService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, providedIn: 'root' });
|
|
241
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: WsjtxService, decorators: [{
|
|
242
|
+
type: Injectable,
|
|
243
|
+
args: [{
|
|
244
|
+
providedIn: 'root',
|
|
245
|
+
}]
|
|
246
|
+
}], ctorParameters: function () { return [{ type: i1.AgentMessageService }]; } });
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3NqdHguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL2xpYi93c2p0eC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBbUIvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU05QyxNQUFNLE9BQU8sWUFBWTtJQXNCdkIsWUFBb0IsUUFBNkI7UUFBN0IsYUFBUSxHQUFSLFFBQVEsQ0FBcUI7UUFyQmpELHNEQUFzRDtRQUN0QyxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakUsNERBQTREO1FBQzVDLGVBQVUsR0FBRyxJQUFJLGFBQWEsQ0FBd0IsQ0FBQyxDQUFDLENBQUM7UUFDekUseURBQXlEO1FBQ3pDLFlBQU8sR0FBRyxJQUFJLGFBQWEsQ0FBcUIsQ0FBQyxDQUFDLENBQUM7UUFDbkUseURBQXlEO1FBQ3pDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3JELHdEQUF3RDtRQUN4QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUNuRCw0REFBNEQ7UUFDNUMsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBQzNELHdEQUF3RDtRQUN4QyxXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUNuRCw2REFBNkQ7UUFDN0MsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUM3RCw2REFBNkQ7UUFDN0MsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUVyRCxZQUFPLEdBQVcsUUFBUSxDQUFDO1FBR2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FB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R0FBRyxDQUFDLEVBQUUsQ0FBQztRQUU1RCxPQUFPLEdBQUcsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTO2FBQ2pFLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDVixRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQ3pELEdBQUcsQ0FBQyxPQUNOLEVBQUUsQ0FBQztJQUNMLENBQUM7O3lHQTFQVSxZQUFZOzZHQUFaLFlBQVksY0FGWCxNQUFNOzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBXc2p0eENsZWFyLFxuICBXc2p0eENsb3NlLFxuICBXc2p0eENvbmZpZ3VyZSxcbiAgV3NqdHhEZWNvZGUsXG4gIFdzanR4RnJlZVRleHQsXG4gIFdzanR4SGFsdFR4LFxuICBXc2p0eEhlYXJ0YmVhdCxcbiAgV3NqdHhIaWdobGlnaHRDYWxsc2lnbixcbiAgV3NqdHhMb2NhdGlvbixcbiAgV3NqdHhMb2dnZWRBZGlmLFxuICBXc2p0eFFzb0xvZ2dlZCxcbiAgV3NqdHhSZXBsYXksXG4gIFdzanR4UmVwbHksXG4gIFdzanR4U3RhdHVzLFxuICBXc2p0eFN3aXRjaENvbmZpZ3VyYXRpb24sXG4gIFdzanR4V3NwckRlY29kZSxcbn0gZnJvbSAnLi93c2p0eC1tZXNzYWdlcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZ2VudE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9hZ2VudC1tZXNzYWdlLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgV3NqdHhTZXJ2aWNlIHtcbiAgLyoqIFdoZXRoZXIgd2UncmUgZ2V0dGluZyBhbnkgbWVzc2FnZXMgZnJvbSBXU0pULVguICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8qKiBTdWJqZWN0IGZvciBsaXN0ZW5pbmcgdG8gV1NKVC1YIFwiSGVhcnRiZWF0XCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBoZWFydGJlYXQkID0gbmV3IFJlcGxheVN1YmplY3Q8V3NqdHhIZWFydGJlYXQgfCBudWxsPigxKTtcbiAgLyoqIFN1YmplY3QgZm9yIGxpc3RlbmluZyB0byBXU0pULVggXCJTdGF0dXNcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyQgPSBuZXcgUmVwbGF5U3ViamVjdDxXc2p0eFN0YXR1cyB8IG51bGw+KDEpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkRlY29kZVwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVjb2RlJCA9IG5ldyBTdWJqZWN0PFdzanR4RGVjb2RlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkNsZWFyXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBjbGVhciQgPSBuZXcgU3ViamVjdDxXc2p0eENsZWFyPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIlFzb0xvZ2dlZFwiIG1lc3NhZ2VzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcXNvTG9nZ2VkJCA9IG5ldyBTdWJqZWN0PFdzanR4UXNvTG9nZ2VkPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkNsb3NlXCIgbWVzc2FnZXMuICovXG4gIHB1YmxpYyByZWFkb25seSBjbG9zZSQgPSBuZXcgU3ViamVjdDxXc2p0eENsb3NlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIldzcHJEZWNvZGVcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdzcHJEZWNvZGUkID0gbmV3IFN1YmplY3Q8V3NqdHhXc3ByRGVjb2RlPigpO1xuICAvKiogU3ViamVjdCBmb3IgbGlzdGVuaW5nIHRvIFdTSlQtWCBcIkxvZ2dlZEFkaWZcIiBtZXNzYWdlcy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dlZEFkaWYkID0gbmV3IFN1YmplY3Q8V3NqdHhMb2dnZWRBZGlmPigpO1xuXG4gIHByaXZhdGUgd3NqdHhJZDogc3RyaW5nID0gJ1dTSlQtWCc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtZXNzYWdlczogQWdlbnRNZXNzYWdlU2VydmljZSkge1xuICAgIHRoaXMuc2V0dXBCZWhhdmlvcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBCZWhhdmlvcnMoKTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlcy5yeE1lc3NhZ2UkLnN1YnNjcmliZSgobXNnKSA9PiB0aGlzLmhhbmRsZU1lc3NhZ2UobXNnKSk7XG4gICAgLy8gaWYgd2UgaGF2ZW4ndCBoZWFyZCBmcm9tIFdTSlQtWCBpbiAxNSBzZWNvbmRzLCBjb25zaWRlciBpdCBcImRvd25cIlxuICAgIHRoaXMuY29ubmVjdGVkJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDE1MDAwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpKTtcbiAgICAvLyBXaGVuIFdTSlQtWCBhbm5vdW5jZXMgaXQncyBjbG9zaW5nLCBzZXQgaXQgdG8gXCJkb3duXCIgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmNsb3NlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jb25uZWN0ZWQkLm5leHQoZmFsc2UpO1xuICAgIH0pO1xuICAgIC8vIFdoZW4gV1NKVC1YIGdvZXMgZG93biwgY2xlYXIgaXRzIHBlcnNpc3RlbnQgbWVzc2FnZSBzdWJqZWN0c1xuICAgIHRoaXMuY29ubmVjdGVkJC5zdWJzY3JpYmUoKGlzVXApID0+IHtcbiAgICAgIGlmICghaXNVcCkge1xuICAgICAgICB0aGlzLmhlYXJ0YmVhdCQubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5zdGF0dXMkLm5leHQobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1lc3NhZ2UobXNnOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIW1zZy53c2p0eCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbm5lY3RlZCQubmV4dCh0cnVlKTtcbiAgICB0aGlzLndzanR4SWQgPSBtc2cud3NqdHgucGF5bG9hZC5pZDtcbiAgICBzd2l0Y2ggKG1zZy53c2p0eC50eXBlKSB7XG4gICAgICBjYXNlICdIZWFydGJlYXRNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5oZWFydGJlYXQkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhIZWFydGJlYXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdTdGF0dXNNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5zdGF0dXMkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhTdGF0dXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdEZWNvZGVNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5kZWNvZGUkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhEZWNvZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdDbGVhck1lc3NhZ2UnOlxuICAgICAgICB0aGlzLmNsZWFyJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4Q2xlYXIpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdRc29Mb2dnZWRNZXNzYWdlJzpcbiAgICAgICAgdGhpcy5xc29Mb2dnZWQkLm5leHQobXNnLndzanR4LnBheWxvYWQgYXMgV3NqdHhRc29Mb2dnZWQpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdDbG9zZU1lc3NhZ2UnOlxuICAgICAgICB0aGlzLmNsb3NlJC5uZXh0KG1zZy53c2p0eC5wYXlsb2FkIGFzIFdzanR4Q2xvc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdXU1BSRGVjb2RlTWVzc2FnZSc6XG4gICAgICAgIHRoaXMud3NwckRlY29kZSQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eFdzcHJEZWNvZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdMb2dnZWRBZGlmTWVzc2FnZSc6XG4gICAgICAgIHRoaXMubG9nZ2VkQWRpZiQubmV4dChtc2cud3NqdHgucGF5bG9hZCBhcyBXc2p0eExvZ2dlZEFkaWYpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBjbGVhciB0aGUgQmFuZCBBY3Rpdml0eSB3aW5kb3cuICovXG4gIHB1YmxpYyBjbGVhckJhbmRBY3Rpdml0eSgpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdDbGVhck1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhDbGVhcj57IGlkOiB0aGlzLndzanR4SWQsIHdpbmRvdzogMCB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIFJ4IEZyZXF1ZW5jeSB3aW5kb3cuICovXG4gIHB1YmxpYyBjbGVhclJ4RnJlcVdpbmRvdygpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdDbGVhck1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhDbGVhcj57IGlkOiB0aGlzLndzanR4SWQsIHdpbmRvdzogMSB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gY2xlYXIgdGhlIEJhbmQgQWN0aXZpdHkgYW5kIFJ4IEZyZXF1ZW5jeSB3aW5kb3dzLiAqL1xuICBwdWJsaWMgY2xlYXJBbGwoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnQ2xlYXJNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4Q2xlYXI+eyBpZDogdGhpcy53c2p0eElkLCB3aW5kb3c6IDIgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHJlcGxheSBtZXNzYWdlcy4gVXNlZnVsIGZvciBhIGZyZXNoIGNsaWVudCB0aGF0IHdhbnRzIHRvIGhlYXJcbiAgICogcHJldmlvdXMgV1NKVC1YIGRlY29kZXMuICovXG4gIHB1YmxpYyByZXBsYXkoKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnUmVwbGF5TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eFJlcGxheT57IGlkOiB0aGlzLndzanR4SWQgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIGhhbHQgYW55IHRyYW5zbWlzc2lvbnMgaW1tZWRpYXRlbHkuICovXG4gIHB1YmxpYyBoYWx0VHhOb3coKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnSGFsdFR4TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IDxXc2p0eEhhbHRUeD57IGlkOiB0aGlzLndzanR4SWQsIGF1dG9UeE9ubHk6IGZhbHNlIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byBzdG9wIGF1dG8tdHJhbnNtaXR0aW5nIGFmdGVyIGZpbmlzaGluZyB0aGUgY3VycmVudCByb3VuZC4gKi9cbiAgcHVibGljIGhhbHRUeEFmdGVyQ3VycmVudCgpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdIYWx0VHhNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogPFdzanR4SGFsdFR4PnsgaWQ6IHRoaXMud3NqdHhJZCwgYXV0b1R4T25seTogdHJ1ZSB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gcmVwbHkgdG8gdGhlIGdpdmVuIGRlY29kZS4gVGhlIG1lc3NhZ2UgbXVzdCBpbmNsdWRlIENRIG9yIFFSWi4gKi9cbiAgcHVibGljIHJlcGx5KGRlY29kZTogV3NqdHhEZWNvZGUpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdSZXBseU1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhSZXBseT57XG4gICAgICAgICAgaWQ6IGRlY29kZS5pZCxcbiAgICAgICAgICB0aW1lOiBkZWNvZGUudGltZSxcbiAgICAgICAgICBzbnI6IGRlY29kZS5zbnIsXG4gICAgICAgICAgZGVsdGFUaW1lOiBkZWNvZGUuZGVsdGFUaW1lLFxuICAgICAgICAgIGRlbHRhRnJlcXVlbmN5OiBkZWNvZGUuZGVsdGFGcmVxdWVuY3ksXG4gICAgICAgICAgbW9kZTogZGVjb2RlLm1vZGUsXG4gICAgICAgICAgbWVzc2FnZTogZGVjb2RlLm1lc3NhZ2UsXG4gICAgICAgICAgbG93Q29uZmlkZW5jZTogZGVjb2RlLmxvd0NvbmZpZGVuY2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5tZXNzYWdlcy50eE1lc3NhZ2UkLm5leHQod3NNc2cpO1xuICB9XG5cbiAgLyoqIFNlbmQgYSBjb21tYW5kIHRvIFdTSlQtWCB0byByZXBseSB0byB0aGUgZ2l2ZW4gZGVjb2RlLiBUaGUgbWVzc2FnZSBtdXN0IGluY2x1ZGUgQ1Egb3IgUVJaLiAqL1xuICBwdWJsaWMgaGlnaGxpZ2h0Q2FsbHNpZ24oaGlnaGxpZ2h0TXNnOiBXc2p0eEhpZ2hsaWdodENhbGxzaWduKSB7XG4gICAgaGlnaGxpZ2h0TXNnLmlkID0gdGhpcy53c2p0eElkO1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0hpZ2hsaWdodENhbGxzaWduTWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IGhpZ2hsaWdodE1zZyxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHRyYW5zbWl0IHRoZSBnaXZlbiBmcmVlIHRleHQuIElmIHRoZSB0ZXh0IGlzIHRvbyBsb25nIHRvIGJlXG4gICAqIGVuY29kZWQgaW4gYSBzaW5nbGUgbWVzc2FnZSwgaXQgbWF5IGJlIHNpbGVudGx5IHRydW5jYXRlZC4gKi9cbiAgcHVibGljIHNlbmRGcmVlVGV4dChmcmVlVGV4dDogV3NqdHhGcmVlVGV4dCkge1xuICAgIGZyZWVUZXh0LmlkID0gdGhpcy53c2p0eElkO1xuICAgIGNvbnN0IHdzTXNnID0ge1xuICAgICAgd3NqdHg6IHtcbiAgICAgICAgdHlwZTogJ0ZyZWVUZXh0TWVzc2FnZScsXG4gICAgICAgIHBheWxvYWQ6IGZyZWVUZXh0LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gc2V0IHRoZSBsb2NhbCBzdGF0aW9uJ3MgTWFpZGVuaGVhZCBncmlkLiBUaGlzIGlzIHRlbXBvcmFyeSxcbiAgICogbGFzdGluZyBvbmx5IGFzIGxvbmcgYXMgV1NKVC1YIGlzIHJ1bm5pbmcuICovXG4gIHB1YmxpYyBzZXRMb2NhdGlvbihncmlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdMb2NhdGlvbk1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhMb2NhdGlvbj57XG4gICAgICAgICAgaWQ6IHRoaXMud3NqdHhJZCxcbiAgICAgICAgICBsb2NhdGlvbjogZ3JpZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLm1lc3NhZ2VzLnR4TWVzc2FnZSQubmV4dCh3c01zZyk7XG4gIH1cblxuICAvKiogU2VuZCBhIGNvbW1hbmQgdG8gV1NKVC1YIHRvIHN3aXRjaCB0byB0aGUgbmFtZWQgY29uZmlndXJhdGlvbi4gKi9cbiAgcHVibGljIHN3aXRjaENvbmZpZ3VyYXRpb24oY29uZmlnTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgd3NNc2cgPSB7XG4gICAgICB3c2p0eDoge1xuICAgICAgICB0eXBlOiAnU3dpdGNoQ29uZmlndXJhdGlvbk1lc3NhZ2UnLFxuICAgICAgICBwYXlsb2FkOiA8V3NqdHhTd2l0Y2hDb25maWd1cmF0aW9uPntcbiAgICAgICAgICBpZDogdGhpcy53c2p0eElkLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb25OYW1lOiBjb25maWdOYW1lLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBTZW5kIGEgY29tbWFuZCB0byBXU0pULVggdG8gc2V0IHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuICovXG4gIHB1YmxpYyBjb25maWd1cmUoY29uZmlnOiBXc2p0eENvbmZpZ3VyZSkge1xuICAgIGNvbmZpZy5pZCA9IHRoaXMud3NqdHhJZDtcbiAgICBjb25zdCB3c01zZyA9IHtcbiAgICAgIHdzanR4OiB7XG4gICAgICAgIHR5cGU6ICdDb25maWd1cmVNZXNzYWdlJyxcbiAgICAgICAgcGF5bG9hZDogY29uZmlnLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubWVzc2FnZXMudHhNZXNzYWdlJC5uZXh0KHdzTXNnKTtcbiAgfVxuXG4gIC8qKiBHaXZlbiBhIGRlY29kZSBtZXNzYWdlLCBmb3JtYXQgYSBzdHJpbmcgdGhlIHNhbWUgd2F5IGFzIGRpc3BsYXllZCBpbiB0aGUgV1NKVC1YIEJhbmRcbiAgICogQWN0aXZpdHkvUnggRnJlcXVlbmN5IHdpbmRvd3MuICovXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0RGVjb2RlKG1zZzogV3NqdHhEZWNvZGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlY29uZHNTaW5jZU1pZG5pZ2h0ID0gTWF0aC5mbG9vcihtc2cudGltZSAvIDEwMDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihzZWNvbmRzU2luY2VNaWRuaWdodCAvIDM2MDApO1xuICAgIGNvbnN0IHNlY29uZHNTaW5jZUhvdXIgPSBzZWNvbmRzU2luY2VNaWRuaWdodCAtIGhvdXJzICogMzYwMDtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzU2luY2VIb3VyIC8gNjApO1xuICAgIGNvbnN0IHNlY29uZHMgPSBzZWNvbmRzU2luY2VIb3VyIC0gbWludXRlcyAqIDYwO1xuICAgIGNvbnN0IHRpbWVTdHIgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9JHttaW51dGVzXG4gICAgICAudG9TdHJpbmcoKVxuICAgICAgLnBhZFN0YXJ0KDIsICcwJyl9JHtzZWNvbmRzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gO1xuXG4gICAgcmV0dXJuIGAke3RpbWVTdHJ9ICR7bXNnLnNuci50b1N0cmluZygpLnBhZFN0YXJ0KDMpfSAke21zZy5kZWx0YVRpbWVcbiAgICAgIC50b0ZpeGVkKDEpXG4gICAgICAucGFkU3RhcnQoNCl9ICR7bXNnLmRlbHRhRnJlcXVlbmN5LnRvU3RyaW5nKCkucGFkU3RhcnQoNCl9IH4gICR7XG4gICAgICBtc2cubWVzc2FnZVxuICAgIH1gO1xuICB9XG59XG4iXX0=
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -2,5 +2,11 @@
|
|
|
2
2
|
* Public API Surface of ngx-kel-agent
|
|
3
3
|
*/
|
|
4
4
|
export * from './lib/agent.service';
|
|
5
|
-
export * from './lib/
|
|
6
|
-
|
|
5
|
+
export * from './lib/agent-message.service';
|
|
6
|
+
export * from './lib/hamlib-messages';
|
|
7
|
+
export * from './lib/hamlib.service';
|
|
8
|
+
export * from './lib/wsjtx-messages';
|
|
9
|
+
export * from './lib/wsjtx.service';
|
|
10
|
+
// export * from './lib/ngx-kel-agent.component';
|
|
11
|
+
// export * from './lib/ngx-kel-agent.module';
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1rZWwtYWdlbnQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxpREFBaUQ7QUFDakQsOENBQThDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gta2VsLWFnZW50XG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWdlbnQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hZ2VudC1tZXNzYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGFtbGliLW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hhbWxpYi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzanR4LW1lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dzanR4LnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LWtlbC1hZ2VudC5tb2R1bGUnO1xuIl19
|