@tuki-io/tuki-widgets 0.0.219-dev.54 → 0.0.219-dev.56
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/contact-center/cc-import/cc-import.module.d.ts +13 -0
- package/contact-center/cc-import/cc-import.service.d.ts +85 -0
- package/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.d.ts +56 -0
- package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.d.ts +77 -0
- package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.d.ts +3 -0
- package/contact-center/cc-import/constants/cc-import.constants.d.ts +37 -0
- package/contact-center/cc-import/mock/cc-import.mock.d.ts +4 -0
- package/contact-center/cc-import/types/cc-import.d.ts +73 -0
- package/contact-center/cc-import/types/uccx.d.ts +109 -0
- package/contact-center/cc-readiness/cc-readiness.module.d.ts +3 -3
- package/contact-center/public-api.d.ts +8 -0
- package/contact-center/shared/api.endpoints.d.ts +25 -0
- package/contact-center/shared/api.service.d.ts +3 -1
- package/contact-center/shared/components/card/card.component.d.ts +13 -0
- package/contact-center/shared/dcp-api.service.d.ts +15 -0
- package/contact-center/shared/shared.module.d.ts +11 -5
- package/esm2020/contact-center/cc-import/cc-import.module.mjs +45 -0
- package/esm2020/contact-center/cc-import/cc-import.service.mjs +228 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.mjs +144 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.mjs +243 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.mjs +3 -0
- package/esm2020/contact-center/cc-import/constants/cc-import.constants.mjs +62 -0
- package/esm2020/contact-center/cc-import/mock/cc-import.mock.mjs +78 -0
- package/esm2020/contact-center/cc-import/types/cc-import.mjs +2 -0
- package/esm2020/contact-center/cc-import/types/uccx.mjs +24 -0
- package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +7 -6
- package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +5 -5
- package/esm2020/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.mjs +2 -2
- package/esm2020/contact-center/public-api.mjs +9 -1
- package/esm2020/contact-center/shared/api.endpoints.mjs +26 -1
- package/esm2020/contact-center/shared/api.service.mjs +8 -3
- package/esm2020/contact-center/shared/components/card/card.component.mjs +24 -0
- package/esm2020/contact-center/shared/dcp-api.service.mjs +26 -0
- package/esm2020/contact-center/shared/shared.module.mjs +15 -5
- package/esm2020/user-device-manage/public-api.mjs +4 -1
- package/esm2020/user-device-manage/src/app.constants.mjs +9 -3
- package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +311 -0
- package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
- package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +2 -2
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +34 -17
- package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +207 -0
- package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +401 -0
- package/esm2020/user-device-manage/src/services/device.service.mjs +32 -2
- package/esm2020/user-device-manage/src/services/user.service.mjs +34 -6
- package/esm2020/user-device-manage/src/user-device-manage.module.mjs +19 -4
- package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +17 -4
- package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +66 -0
- package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +6 -3
- package/esm2020/workspaces/src/services/workspace-detail.service.mjs +43 -1
- package/esm2020/workspaces/src/services/workspaces.service.mjs +2 -1
- package/esm2020/workspaces/src/types/workspace.mjs +1 -1
- package/esm2020/workspaces/src/workspaces.module.mjs +4 -1
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +998 -127
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +1018 -40
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +142 -16
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +989 -127
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +1001 -39
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +133 -16
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
- package/package.json +1 -1
- package/user-device-manage/public-api.d.ts +3 -0
- package/user-device-manage/src/app.constants.d.ts +6 -0
- package/user-device-manage/src/associate-lines/associate-lines.component.d.ts +95 -0
- package/user-device-manage/src/classes/device.d.ts +15 -0
- package/user-device-manage/src/classes/deviceProfile.d.ts +5 -0
- package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +1 -0
- package/user-device-manage/src/device-manage-widget.component.d.ts +6 -1
- package/user-device-manage/src/device-settings/device-settings.component.d.ts +53 -0
- package/user-device-manage/src/line-key-config/line-key-config.component.d.ts +84 -0
- package/user-device-manage/src/services/device.service.d.ts +6 -1
- package/user-device-manage/src/services/user.service.d.ts +2 -1
- package/user-device-manage/src/user-device-manage.module.d.ts +10 -7
- package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +6 -1
- package/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.d.ts +25 -0
- package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +1 -0
- package/workspaces/src/services/workspace-detail.service.d.ts +2 -0
- package/workspaces/src/types/workspace.d.ts +19 -0
- package/workspaces/src/workspaces.module.d.ts +8 -7
- package/contact-center/cc-readiness/components/card/card.component.d.ts +0 -6
- package/esm2020/contact-center/cc-readiness/components/card/card.component.mjs +0 -13
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
3
|
+
import { catchError, finalize, map, of, Subject, switchMap, takeUntil } from 'rxjs';
|
|
4
|
+
import { RecordingOptions } from '../classes/device';
|
|
5
|
+
import { RECORDING_MEDIA_SOURCE, STATIC_OPTIONS } from '../app.constants';
|
|
6
|
+
import { InfoDialogComponent } from '../confirm-dialog/info-dialog.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../services/user.service";
|
|
9
|
+
import * as i2 from "../services/api.service";
|
|
10
|
+
import * as i3 from "../services/site-settings.service";
|
|
11
|
+
import * as i4 from "../services/device.service";
|
|
12
|
+
import * as i5 from "../services/line.service";
|
|
13
|
+
import * as i6 from "@angular/material/dialog";
|
|
14
|
+
import * as i7 from "@angular/router";
|
|
15
|
+
import * as i8 from "@angular/common";
|
|
16
|
+
import * as i9 from "@angular/forms";
|
|
17
|
+
import * as i10 from "@angular/cdk/drag-drop";
|
|
18
|
+
import * as i11 from "@angular/material/divider";
|
|
19
|
+
import * as i12 from "@angular/material/tooltip";
|
|
20
|
+
import * as i13 from "@angular/material/slide-toggle";
|
|
21
|
+
import * as i14 from "../utils/app-loader/app-loader";
|
|
22
|
+
export class AssociateLinesComponent {
|
|
23
|
+
constructor(userService, apiService, siteSettingsService, deviceService, lineService, dialog, router) {
|
|
24
|
+
this.userService = userService;
|
|
25
|
+
this.apiService = apiService;
|
|
26
|
+
this.siteSettingsService = siteSettingsService;
|
|
27
|
+
this.deviceService = deviceService;
|
|
28
|
+
this.lineService = lineService;
|
|
29
|
+
this.dialog = dialog;
|
|
30
|
+
this.router = router;
|
|
31
|
+
this.goBack = new EventEmitter();
|
|
32
|
+
this.destroy$ = new Subject();
|
|
33
|
+
this.dataPending = false;
|
|
34
|
+
this.device = null;
|
|
35
|
+
this.hasChanges = false;
|
|
36
|
+
this.expandedOrder = null;
|
|
37
|
+
this.recordingOptions = RecordingOptions;
|
|
38
|
+
this.recordingMediaSources = RECORDING_MEDIA_SOURCE;
|
|
39
|
+
this.recordingProfiles = ['None'];
|
|
40
|
+
this.visualMwiOptions = STATIC_OPTIONS.VISUAL_MWI;
|
|
41
|
+
this.audibleMwiOptions = STATIC_OPTIONS.AUDIBLE_MWI;
|
|
42
|
+
this.ringSettingIdleOptions = STATIC_OPTIONS.RING_SETTING_IDLE;
|
|
43
|
+
this.ringSettingActiveOptions = STATIC_OPTIONS.RING_SETTING_ACTIVE;
|
|
44
|
+
this.pickupAasIdleOptions = STATIC_OPTIONS.CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_IDLE;
|
|
45
|
+
this.pickupAasActiveOptions = STATIC_OPTIONS.CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_ACTIVE;
|
|
46
|
+
this.rows = [];
|
|
47
|
+
this.originRows = [];
|
|
48
|
+
}
|
|
49
|
+
ngOnInit() {
|
|
50
|
+
this.apiService.token = this.token;
|
|
51
|
+
this.apiService.apiUrl = this.host;
|
|
52
|
+
this.loadDevice();
|
|
53
|
+
this.loadRecordingProfiles();
|
|
54
|
+
}
|
|
55
|
+
loadDevice() {
|
|
56
|
+
if (this.userService.userDevice) {
|
|
57
|
+
this.device = this.userService.userDevice;
|
|
58
|
+
this.dataPending = true;
|
|
59
|
+
this.fetchLineSlots()
|
|
60
|
+
.pipe(takeUntil(this.destroy$), finalize(() => this.dataPending = false))
|
|
61
|
+
.subscribe((lineSlots) => this.initRows(lineSlots));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this.dataPending = true;
|
|
65
|
+
const deviceType = localStorage.getItem('deviceType') || '';
|
|
66
|
+
this.userService.fetchDIUserDevice(Number(this.siteId), this.userId, deviceType, this.deviceName)
|
|
67
|
+
.pipe(switchMap((device) => {
|
|
68
|
+
this.device = device;
|
|
69
|
+
return this.fetchLineSlots();
|
|
70
|
+
}), takeUntil(this.destroy$), finalize(() => this.dataPending = false))
|
|
71
|
+
.subscribe((lineSlots) => this.initRows(lineSlots));
|
|
72
|
+
}
|
|
73
|
+
fetchLineSlots() {
|
|
74
|
+
const buttonTemplate = this.device?.buttonTemplate;
|
|
75
|
+
if (!buttonTemplate) {
|
|
76
|
+
return of(undefined);
|
|
77
|
+
}
|
|
78
|
+
return this.deviceService.getSlotsByButtonTemplate(Number(this.siteId), buttonTemplate)
|
|
79
|
+
.pipe(map((template) => template?.lineSlots), catchError(() => of(undefined)));
|
|
80
|
+
}
|
|
81
|
+
loadRecordingProfiles() {
|
|
82
|
+
this.siteSettingsService.getRecordingProfile(Number(this.siteId))
|
|
83
|
+
.pipe(takeUntil(this.destroy$))
|
|
84
|
+
.subscribe((profiles) => {
|
|
85
|
+
this.recordingProfiles = ['None', ...(profiles || []).filter(profile => profile !== 'None')];
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
initRows(lineSlots) {
|
|
89
|
+
const lines = this.device?.lines || [];
|
|
90
|
+
if (lineSlots?.length) {
|
|
91
|
+
this.rows = lineSlots.map((position) => {
|
|
92
|
+
const line = lines.find((current) => Number(current?.position) === Number(position));
|
|
93
|
+
return this.createRow(position, line);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const fallbackLines = lines.length ? lines : [{}, {}, {}];
|
|
98
|
+
this.rows = fallbackLines.map((line, index) => this.createRow(index + 1, line));
|
|
99
|
+
}
|
|
100
|
+
this.originRows = this.rows.map(row => ({ ...row }));
|
|
101
|
+
}
|
|
102
|
+
createRow(order, line) {
|
|
103
|
+
return {
|
|
104
|
+
id: order,
|
|
105
|
+
pkid: line?.pkid || '',
|
|
106
|
+
extension: line?.extension || '',
|
|
107
|
+
routePartitionName: line?.routePartitionName || '',
|
|
108
|
+
order,
|
|
109
|
+
lineNumber: line ? (line?.number || line?.extension || '') : '',
|
|
110
|
+
displayCallerId: line?.displayLabel || '',
|
|
111
|
+
textLabel: line?.textLabel || '',
|
|
112
|
+
e164Mask: line?.e164Mask || '',
|
|
113
|
+
maxNumberOfCalls: 6,
|
|
114
|
+
busyTrigger: 2,
|
|
115
|
+
recordingOption: RecordingOptions.disabled,
|
|
116
|
+
recordingMediaSource: this.recordingMediaSources[0],
|
|
117
|
+
recordingProfile: this.recordingProfiles[0],
|
|
118
|
+
visualMWI: this.visualMwiOptions[0],
|
|
119
|
+
ringSettingIdle: this.ringSettingIdleOptions[0],
|
|
120
|
+
pickupAASIdle: this.pickupAasIdleOptions[0],
|
|
121
|
+
monitorCSS: 'None',
|
|
122
|
+
audibleMWI: this.audibleMwiOptions[0],
|
|
123
|
+
ringSettingActive: this.ringSettingActiveOptions[0],
|
|
124
|
+
pickupAASActive: this.pickupAasActiveOptions[0],
|
|
125
|
+
logMissedCalls: line?.logMissedCall === 'true',
|
|
126
|
+
callerName: line?.callInfoDisplay?.callerName === 'true',
|
|
127
|
+
redirectedNumber: line?.callInfoDisplay?.redirectedNumber === 'true',
|
|
128
|
+
callerNumber: line?.callInfoDisplay?.callerNumber === 'true',
|
|
129
|
+
dialedNumber: line?.callInfoDisplay?.dialedNumber === 'true',
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
isRowEditable(row) {
|
|
133
|
+
return !!row.pkid;
|
|
134
|
+
}
|
|
135
|
+
toggleExpanded(row) {
|
|
136
|
+
if (!this.isRowEditable(row)) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
this.expandedOrder = this.expandedOrder === row.order ? null : row.order;
|
|
140
|
+
}
|
|
141
|
+
isExpanded(row) {
|
|
142
|
+
return this.expandedOrder === row.order;
|
|
143
|
+
}
|
|
144
|
+
onFieldChange() {
|
|
145
|
+
this.hasChanges = true;
|
|
146
|
+
}
|
|
147
|
+
recordingOptionChanged(row) {
|
|
148
|
+
if (row.recordingOption === RecordingOptions.disabled) {
|
|
149
|
+
row.recordingProfile = this.recordingProfiles[0];
|
|
150
|
+
}
|
|
151
|
+
this.onFieldChange();
|
|
152
|
+
}
|
|
153
|
+
isRecordingProfileDisabled(row) {
|
|
154
|
+
return row.recordingOption === RecordingOptions.disabled;
|
|
155
|
+
}
|
|
156
|
+
drop(event) {
|
|
157
|
+
if (event.previousIndex === event.currentIndex) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const orders = this.rows.map(row => row.order);
|
|
161
|
+
moveItemInArray(this.rows, event.previousIndex, event.currentIndex);
|
|
162
|
+
this.rows.forEach((row, index) => row.order = orders[index]);
|
|
163
|
+
this.hasChanges = true;
|
|
164
|
+
}
|
|
165
|
+
confirmDisassociate(row) {
|
|
166
|
+
if (!this.isRowEditable(row)) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const dialogRef = this.dialog.open(InfoDialogComponent, {
|
|
170
|
+
data: {
|
|
171
|
+
title: 'Disassociate Line',
|
|
172
|
+
message: `Are you sure you want to disassociate line ${row.lineNumber || 'this line'} from device ${this.deviceName || this.device?.name || ''}? The line will also be removed from it's Remote destination profile.`,
|
|
173
|
+
confirmButtonText: 'Disassociate',
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
dialogRef.afterClosed()
|
|
177
|
+
.subscribe((confirmed) => {
|
|
178
|
+
if (confirmed) {
|
|
179
|
+
this.disassociateLine(row);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
disassociateLine(row) {
|
|
184
|
+
this.dataPending = true;
|
|
185
|
+
const line = {
|
|
186
|
+
directoryNumber: {
|
|
187
|
+
directoryNumber: row.extension,
|
|
188
|
+
routePartitionName: row.routePartitionName,
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
this.lineService.checkLineDeletion(line, Number(this.siteId))
|
|
192
|
+
.pipe(switchMap(() => this.userService.persistUserCache()), takeUntil(this.destroy$), finalize(() => this.dataPending = false))
|
|
193
|
+
.subscribe(() => {
|
|
194
|
+
if (this.expandedOrder === row.order) {
|
|
195
|
+
this.expandedOrder = null;
|
|
196
|
+
}
|
|
197
|
+
this.rows = this.rows.filter(current => current.order !== row.order);
|
|
198
|
+
this.rows.forEach((current, index) => current.order = index + 1);
|
|
199
|
+
this.hasChanges = true;
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
onGoBack() {
|
|
203
|
+
const [path] = this.router.url.split('?');
|
|
204
|
+
const segments = path.split('/').filter(Boolean);
|
|
205
|
+
if (segments[segments.length - 2] === 'associate-lines') {
|
|
206
|
+
segments.splice(segments.length - 2, 2);
|
|
207
|
+
}
|
|
208
|
+
else if (segments[segments.length - 1] === 'associate-lines') {
|
|
209
|
+
segments.pop();
|
|
210
|
+
}
|
|
211
|
+
this.router.navigateByUrl('/' + segments.join('/'));
|
|
212
|
+
this.goBack.emit();
|
|
213
|
+
}
|
|
214
|
+
onCancel() {
|
|
215
|
+
this.onGoBack();
|
|
216
|
+
}
|
|
217
|
+
onSave() {
|
|
218
|
+
if (!this.hasChanges) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const body = this.buildUpdateBody();
|
|
222
|
+
if (!body.length) {
|
|
223
|
+
this.hasChanges = false;
|
|
224
|
+
this.onGoBack();
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
this.dataPending = true;
|
|
228
|
+
const deviceName = this.deviceName || this.device?.name || '';
|
|
229
|
+
this.deviceService.putDeviceFields(Number(this.siteId), deviceName, this.userService.userToken, body)
|
|
230
|
+
.pipe(switchMap(() => this.userService.persistUserCache()), takeUntil(this.destroy$), finalize(() => this.dataPending = false))
|
|
231
|
+
.subscribe(() => {
|
|
232
|
+
this.originRows = this.rows.map(row => ({ ...row }));
|
|
233
|
+
this.hasChanges = false;
|
|
234
|
+
this.onGoBack();
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
buildUpdateBody() {
|
|
238
|
+
const body = [];
|
|
239
|
+
this.rows.forEach(row => {
|
|
240
|
+
if (!row.pkid) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const originRow = this.originRows.find(orig => orig.id === row.id);
|
|
244
|
+
if (!originRow) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
if (row.order !== originRow.order) {
|
|
248
|
+
body.push(`device.lineAssociations.${row.pkid}.position=${row.order}`);
|
|
249
|
+
}
|
|
250
|
+
Object.keys(AssociateLinesComponent.FIELD_MAP).forEach(rowField => {
|
|
251
|
+
const currentValue = row[rowField];
|
|
252
|
+
const originValue = originRow[rowField];
|
|
253
|
+
if (currentValue === originValue) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const cucmField = AssociateLinesComponent.FIELD_MAP[rowField];
|
|
257
|
+
const value = AssociateLinesComponent.BOOLEAN_FIELDS.has(rowField) ? String(!!currentValue) : currentValue;
|
|
258
|
+
body.push(`device.lineAssociations.${row.pkid}.${cucmField}=${value}`);
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
return body;
|
|
262
|
+
}
|
|
263
|
+
ngOnDestroy() {
|
|
264
|
+
this.destroy$.next();
|
|
265
|
+
this.destroy$.complete();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
AssociateLinesComponent.FIELD_MAP = {
|
|
269
|
+
displayCallerId: 'displayLabel',
|
|
270
|
+
textLabel: 'textLabel',
|
|
271
|
+
e164Mask: 'e164Mask',
|
|
272
|
+
maxNumberOfCalls: 'maxNumberOfCalls',
|
|
273
|
+
busyTrigger: 'busyTrigger',
|
|
274
|
+
recordingOption: 'recordingOption',
|
|
275
|
+
recordingMediaSource: 'recordingMediaSource',
|
|
276
|
+
recordingProfile: 'recordingProfile',
|
|
277
|
+
visualMWI: 'visualMWI',
|
|
278
|
+
ringSettingIdle: 'ringSetting_idle',
|
|
279
|
+
pickupAASIdle: 'pickupAAS_idle',
|
|
280
|
+
monitorCSS: 'monitorCSS',
|
|
281
|
+
audibleMWI: 'audibleMWI',
|
|
282
|
+
ringSettingActive: 'ringSetting_active',
|
|
283
|
+
pickupAASActive: 'pickupAAS_active',
|
|
284
|
+
logMissedCalls: 'logMissedCall',
|
|
285
|
+
callerName: 'callInfoDisplay.callerName',
|
|
286
|
+
redirectedNumber: 'callInfoDisplay.redirectedNumber',
|
|
287
|
+
callerNumber: 'callInfoDisplay.callerNumber',
|
|
288
|
+
dialedNumber: 'callInfoDisplay.dialedNumber',
|
|
289
|
+
};
|
|
290
|
+
AssociateLinesComponent.BOOLEAN_FIELDS = new Set([
|
|
291
|
+
'logMissedCalls', 'callerName', 'redirectedNumber', 'callerNumber', 'dialedNumber',
|
|
292
|
+
]);
|
|
293
|
+
AssociateLinesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AssociateLinesComponent, deps: [{ token: i1.UserService }, { token: i2.APIService }, { token: i3.SiteSettingsService }, { token: i4.DeviceService }, { token: i5.LineService }, { token: i6.MatDialog }, { token: i7.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
294
|
+
AssociateLinesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AssociateLinesComponent, selector: "app-associate-lines", inputs: { token: "token", host: "host", siteId: "siteId", userId: "userId", deviceName: "deviceName" }, outputs: { goBack: "goBack" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending\"></app-loader>\n\n<div class=\"go-back-box\" (click)=\"onGoBack()\">\n <div class=\"go-back-box-container\">\n <span class=\"app-icon icon-webex-left-arrow\"></span>\n <span class=\"go-back-title\">Device General Info</span>\n </div>\n</div>\n\n<div class=\"associate-lines\" >\n <div class=\"panel-header\">\n <span class=\"panel-header__title\">Associate Lines</span>\n </div>\n\n <div class=\"panel-body\">\n <div class=\"panel-card\">\n\n <p class=\"step-description\">\n The users and workspaces that appear on this phone are displayed below in the order of appearance.\n Lines must be configured sequentially.\n </p>\n\n <div class=\"lines-list\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <ng-container *ngFor=\"let row of rows\">\n\n <div class=\"line-row\" cdkDrag [class.expanded]=\"isExpanded(row)\">\n <div class=\"line-row__header\">\n <div class=\"line-row__main\">\n <i class=\"icon dragger-icon rem1\" cdkDragHandle></i>\n <span class=\"line-row__order\">{{ row.order }}</span>\n <span class=\"line-row__divider\">|</span>\n <span class=\"line-row__label\">{{ row.lineNumber ? 'Line ' + row.lineNumber : 'None' }}</span>\n </div>\n <div class=\"line-row__actions\">\n <i class=\"icon delete-icon rem1\" [class.disabled]=\"!isRowEditable(row)\" matTooltip=\"Disassociate line\" (click)=\"confirmDisassociate(row)\"></i>\n <i class=\"icon chevron-icon rem1_25\" [class.expanded]=\"isExpanded(row)\" [class.disabled]=\"!isRowEditable(row)\" (click)=\"toggleExpanded(row)\"></i>\n </div>\n </div>\n\n <div class=\"line-row__details\" *ngIf=\"isExpanded(row)\">\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Line setting on the device</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Display caller ID</div>\n <input type=\"text\" [(ngModel)]=\"row.displayCallerId\" (ngModelChange)=\"onFieldChange()\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Text label</div>\n <input type=\"text\" [(ngModel)]=\"row.textLabel\" (ngModelChange)=\"onFieldChange()\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">External phone number mask</div>\n <input type=\"text\" [(ngModel)]=\"row.e164Mask\" (ngModelChange)=\"onFieldChange()\">\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Multiple Call/Call Waiting Settings</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Max calls</div>\n <input type=\"number\" [(ngModel)]=\"row.maxNumberOfCalls\" (ngModelChange)=\"onFieldChange()\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Busy trigger</div>\n <input type=\"number\" [(ngModel)]=\"row.busyTrigger\" (ngModelChange)=\"onFieldChange()\">\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Call Recording</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Recording option</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingOption\" (ngModelChange)=\"recordingOptionChanged(row)\">\n <option *ngFor=\"let option of recordingOptions | keyvalue\" [value]=\"option.value\">{{ option.value }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Recording media source</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingMediaSource\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let source of recordingMediaSources\" [value]=\"source\">{{ source }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Recording profile</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingProfile\" (ngModelChange)=\"onFieldChange()\" [disabled]=\"isRecordingProfileDisabled(row)\">\n <option *ngFor=\"let profile of recordingProfiles\" [value]=\"profile\">{{ profile }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Additional Line Settings on the Device</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Visual Message Waiting Indicator Policy</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.visualMWI\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of visualMwiOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Ring Setting (Phone Idle)</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.ringSettingIdle\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of ringSettingIdleOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Call Pickup Group Audio Alert Setting (Phone Idle)</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.pickupAASIdle\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of pickupAasIdleOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Monitoring Calling Search Space</div>\n <input type=\"text\" [(ngModel)]=\"row.monitorCSS\" (ngModelChange)=\"onFieldChange()\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Audible Message Waiting Indicator Policy</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.audibleMWI\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of audibleMwiOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Ring Setting (Phone Active)</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.ringSettingActive\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of ringSettingActiveOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Call Pickup Group AudioAlert Setting (Phone Active)</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.pickupAASActive\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of pickupAasActiveOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Log Missed Calls</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.logMissedCalls\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Forwarded Call Information Display</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Caller name</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.callerName\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Redirected number</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.redirectedNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Caller number</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.callerNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Dialed number</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.dialedNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n\n <div class=\"disassociate-row\">\n <span class=\"link disassociate-link\" (click)=\"confirmDisassociate(row)\">\n <i class=\"icon disassociate-icon rem1\"></i>\n Disassociate Line\n </span>\n </div>\n\n </div>\n </div>\n\n </ng-container>\n </div>\n\n </div>\n </div>\n\n <div class=\"panel-footer\">\n <div class=\"panel-footer__actions panel-footer__actions--right\">\n <button type=\"button\" class=\"btn-outline\" (click)=\"onCancel()\">Cancel</button>\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"!hasChanges\" (click)=\"onSave()\">Save</button>\n </div>\n </div>\n\n</div>\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";*{margin:0}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center;transition:all .15s ease-out}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-left%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{width:95%;margin:auto;margin-left:.5rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.icon{background-repeat:no-repeat;background-position:center;display:inline-block;background-size:contain}.icon.disabled{opacity:.35;cursor:not-allowed;pointer-events:none}.dragger-icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath d%3D%22M13.125 5C12.7935 5 12.4755 4.8683 12.2411 4.63388C12.0067 4.39946 11.875 4.08152 11.875 3.75C11.875 3.41848 12.0067 3.10054 12.2411 2.86612C12.4755 2.6317 12.7935 2.5 13.125 2.5C13.4565 2.5 13.7745 2.6317 14.0089 2.86612C14.2433 3.10054 14.375 3.41848 14.375 3.75C14.375 4.08152 14.2433 4.39946 14.0089 4.63388C13.7745 4.8683 13.4565 5 13.125 5ZM6.875 5C6.54348 5 6.22554 4.8683 5.99112 4.63388C5.7567 4.39946 5.625 4.08152 5.625 3.75C5.625 3.41848 5.7567 3.10054 5.99112 2.86612C6.22554 2.6317 6.54348 2.5 6.875 2.5C7.20652 2.5 7.52446 2.6317 7.75888 2.86612C7.9933 3.10054 8.125 3.41848 8.125 3.75C8.125 4.08152 7.9933 4.39946 7.75888 4.63388C7.52446 4.8683 7.20652 5 6.875 5ZM13.125 11.25C12.7935 11.25 12.4755 11.1183 12.2411 10.8839C12.0067 10.6495 11.875 10.3315 11.875 10C11.875 9.66848 12.0067 9.35054 12.2411 9.11612C12.4755 8.8817 12.7935 8.75 13.125 8.75C13.4565 8.75 13.7745 8.8817 14.0089 9.11612C14.2433 9.35054 14.375 9.66848 14.375 10C14.375 10.3315 14.2433 10.6495 14.0089 10.8839C13.7745 11.1183 13.4565 11.25 13.125 11.25ZM6.875 11.25C6.54348 11.25 6.22554 11.1183 5.99112 10.8839C5.7567 10.6495 5.625 10.3315 5.625 10C5.625 9.66848 5.7567 9.35054 5.99112 9.11612C6.22554 8.8817 6.54348 8.75 6.875 8.75C7.20652 8.75 7.52446 8.8817 7.75888 9.11612C7.9933 9.35054 8.125 9.66848 8.125 10C8.125 10.3315 7.9933 10.6495 7.75888 10.8839C7.52446 11.1183 7.20652 11.25 6.875 11.25ZM13.125 17.5C12.7935 17.5 12.4755 17.3683 12.2411 17.1339C12.0067 16.8995 11.875 16.5815 11.875 16.25C11.875 15.9185 12.0067 15.6005 12.2411 15.3661C12.4755 15.1317 12.7935 15 13.125 15C13.4565 15 13.7745 15.1317 14.0089 15.3661C14.2433 15.6005 14.375 15.9185 14.375 16.25C14.375 16.5815 14.2433 16.8995 14.0089 17.1339C13.7745 17.3683 13.4565 17.5 13.125 17.5ZM6.875 17.5C6.54348 17.5 6.22554 17.3683 5.99112 17.1339C5.7567 16.8995 5.625 16.5815 5.625 16.25C5.625 15.9185 5.7567 15.6005 5.99112 15.3661C6.22554 15.1317 6.54348 15 6.875 15C7.20652 15 7.52446 15.1317 7.75888 15.3661C7.9933 15.6005 8.125 15.9185 8.125 16.25C8.125 16.5815 7.9933 16.8995 7.75888 17.1339C7.52446 17.3683 7.20652 17.5 6.875 17.5Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%3C%2Fsvg%3E\");cursor:grab}.delete-icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22Icon%2FDelete%22%3E%3Cpath id%3D%22Remove all%22 d%3D%22M9.5835 1.96973C10.9439 1.96973 12.0528 3.09413 12.1036 4.50119L12.1054 4.60217H15.2853C15.588 4.60217 15.8335 4.85838 15.8335 5.17444C15.8335 5.47074 15.6178 5.71444 15.3413 5.74375L15.2853 5.7467H14.8067L14.0597 16.0795C13.9864 17.0944 13.176 17.8788 12.201 17.8788H6.966C5.99094 17.8788 5.18064 17.0944 5.10725 16.0795L4.35981 5.7467H3.88174C3.59788 5.7467 3.3644 5.52152 3.33633 5.23295L3.3335 5.17444C3.3335 4.87813 3.54923 4.63443 3.82569 4.60512L3.88174 4.60217H7.06157C7.06157 3.14831 8.19067 1.96973 9.5835 1.96973ZM13.7072 5.7467L5.45977 5.7467L6.20064 15.9934C6.23085 16.4113 6.56451 16.7343 6.966 16.7343H12.201C12.6025 16.7343 12.9361 16.4113 12.9664 15.9934L13.7072 5.7467ZM11.0089 8.15024C11.2928 8.15024 11.5263 8.37542 11.5543 8.66399L11.5572 8.72251V13.7585C11.5572 14.0745 11.3117 14.3307 11.0089 14.3307C10.7251 14.3307 10.4916 14.1056 10.4635 13.817L10.4607 13.7585L10.4607 8.72251C10.4607 8.40645 10.7061 8.15024 11.0089 8.15024ZM8.15806 8.15024C8.44192 8.15024 8.6754 8.37542 8.70347 8.66399L8.7063 8.72251L8.7063 13.7585C8.7063 14.0745 8.46084 14.3307 8.15806 14.3307C7.87419 14.3307 7.64072 14.1056 7.61264 13.817L7.60981 13.7585L7.60981 8.72251C7.60981 8.40645 7.85527 8.15024 8.15806 8.15024ZM9.5835 3.11427C8.82339 3.11427 8.20225 3.73527 8.16031 4.51773L8.15806 4.60217L11.0089 4.60217C11.0089 3.78042 10.3707 3.11427 9.5835 3.11427Z%22 fill%3D%22%23737480%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");cursor:pointer}.chevron-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22m22.53 15.47-12-12a.75.75 0 1 0-1.06 1.06L20.94 16 9.47 27.47a.75.75 0 1 0 1.06 1.06l12-12a.75.75 0 0 0 0-1.06%22%2F%3E%3C%2Fsvg%3E\");cursor:pointer;transition:transform .15s ease-in-out}.chevron-icon.expanded{transform:rotate(-90deg)}.disassociate-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 height%3D%2224px%22 viewBox%3D%220 0 24 24%22 width%3D%2224px%22 fill%3D%22%23000000%22%3E%3Cpath d%3D%22M0 0h24v24H0V0z%22 fill%3D%22none%22%2F%3E%3Cpath d%3D%22M17 7h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1 0 1.43-.98 2.63-2.31 2.98l1.46 1.46C20.88 15.61 22 13.95 22 12c0-2.76-2.24-5-5-5zm-1 4h-2.19l2 2H16zM2 4.27l3.11 3.11C3.29 8.12 2 9.91 2 12c0 2.76 2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1 0-1.59 1.21-2.9 2.76-3.07L8.73 11H8v2h2.73L13 15.27V17h1.73l4.01 4L20 19.74 3.27 3 2 4.27z%22%2F%3E%3Cpath d%3D%22M0 24V0%22 fill%3D%22none%22%2F%3E%3C%2Fsvg%3E\");cursor:pointer}.close-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22m17.06 16 8.47-8.47a.75.75 0 0 0-.242-1.224.75.75 0 0 0-.819.163L16 14.94 7.53 6.47A.75.75 0 1 0 6.47 7.53L14.94 16l-8.47 8.47a.75.75 0 0 0 1.06 1.06L16 17.06l8.47 8.47a.75.75 0 1 0 1.06-1.06z%22%2F%3E%3C%2Fsvg%3E\");filter:brightness(0) invert(1);cursor:pointer}.rem1{height:1rem;width:1rem;vertical-align:middle}.rem1_25{height:1.25rem;width:1.25rem;vertical-align:middle}.text-description{font-size:.875rem;font-weight:400}.associate-lines{display:flex;flex-direction:column;min-height:100%;background:#F3F6F6;font-family:Poppins,Poppins,sans-serif}.breadcrumb-bar{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.5rem;background:#ffffff}.breadcrumb-bar .breadcrumb-title{font-size:.875rem;font-weight:500;color:#0d56aa}.breadcrumb-bar .code-icon{font-family:Courier New,monospace;font-size:.875rem;font-weight:700;color:#0d56aa;cursor:pointer}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:linear-gradient(90deg,#0d56aa,#0d56ab)}.panel-header__title{font-size:1rem;font-weight:500;font-family:Poppins,Poppins,sans-serif;color:#fff}.panel-body{flex:1;padding:2rem 1.5rem}.panel-card{max-width:56rem;margin:0 auto;display:flex;flex-direction:column;gap:1rem;padding:2rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff}.step-description{font-size:.875rem;color:#333}.link{color:#0d56aa;cursor:pointer}.link:hover{text-decoration:underline}.lines-list{display:flex;flex-direction:column;border-radius:4px;overflow:hidden;gap:1rem}.line-row{display:flex;flex-direction:column;background:#ffffff;border:1px solid rgba(0,0,0,.2);border-radius:8px}.line-row.cdk-drag-preview{box-shadow:0 5px 10px #0003}.line-row.cdk-drag-placeholder{opacity:.4}.line-row__header{display:flex;align-items:center;justify-content:space-between;padding:.625rem 1rem}.line-row__header:hover{background:#fafafa;border-radius:8px}.line-row__main{display:flex;align-items:center;gap:.75rem}.line-row__order{font-size:.875rem;color:#000000f2;min-width:1rem;margin-right:100px}.line-row__divider{color:#333}.line-row__label{font-size:.875rem;color:#000000f2}.line-row__actions{display:flex;align-items:center;gap:1rem}.line-row__details{display:flex;flex-direction:column;gap:1rem;padding:0 1rem 1.5rem 3rem;border-top:1px solid #e8e8e8}.details-section{display:flex;gap:1.5rem;padding:1rem 0}.details-section__title{width:9.5rem;flex-shrink:0;font-size:.875rem;font-weight:600;color:#000000f2}.details-section__body{flex:1;min-width:0;display:flex;flex-direction:column}.details-section__body .mat-divider{border-top-color:#e8e8e8!important}.input-holder{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;min-height:2rem}.input-holder.input-holder-top{padding-top:.75rem}.input-holder.input-holder-bottom{padding-bottom:.75rem}.input-holder.input-holder-top-bottom{padding:.75rem 0}.input-holder__name{width:12rem;flex-shrink:0;font-size:.75rem;color:#333}.input-holder input{flex:1;min-width:0;height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843);border-radius:8px;font-family:inherit;font-size:.875rem;color:#000000f2}.input-holder input:focus{outline:none;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59}.input-holder__select-wrap{position:relative;display:flex;align-items:center;flex:1;min-width:0}.input-holder__select-wrap .input-holder__select{width:100%;appearance:none;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2;cursor:pointer;height:21px;padding:4px 28px 4px 12px;box-sizing:content-box}.input-holder__select-wrap .input-holder__select:hover{background-color:#0000001f!important}.input-holder__select-wrap .input-holder__select:focus{outline:none;color:#000000b3;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59}.input-holder__select-wrap .input-holder__select:disabled{background:#f5f5f5!important;color:#babcc5;cursor:not-allowed}.input-holder__select-wrap .input-holder__select-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.disassociate-row{display:flex;justify-content:flex-end;padding-top:1rem}.disassociate-link{display:inline-flex;align-items:center;gap:.375rem;font-size:.875rem;font-weight:500}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:#ffffff;border:1px solid rgba(0,0,0,.2);color:#0006}.btn-outline:hover:not(:disabled){background:#f5f5f5}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.panel-footer{position:sticky;bottom:0;background:#ffffff;border-top:1px solid rgba(0,0,0,.2);padding:1rem 1.5rem}.panel-footer__actions{display:flex;justify-content:flex-end;gap:.75rem;max-width:56rem;margin:0 auto}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-bar{position:relative!important;width:48px!important;height:25px!important;flex-shrink:0!important;border-radius:13px!important;background-color:#ccc!important}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-thumb{height:20px!important;width:20px!important;position:absolute!important;border-radius:50%!important;display:flex!important;align-items:center!important;justify-content:center!important;left:3px!important;top:5px!important;background-color:#fff!important}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px!important;color:#8e9fb7!important;line-height:1!important;display:block!important;pointer-events:none!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa!important;font-weight:700!important;font-size:10px!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i10.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i11.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i12.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i14.AppLoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i8.KeyValuePipe, name: "keyvalue" }] });
|
|
295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AssociateLinesComponent, decorators: [{
|
|
296
|
+
type: Component,
|
|
297
|
+
args: [{ selector: 'app-associate-lines', template: "<app-loader *ngIf=\"dataPending\"></app-loader>\n\n<div class=\"go-back-box\" (click)=\"onGoBack()\">\n <div class=\"go-back-box-container\">\n <span class=\"app-icon icon-webex-left-arrow\"></span>\n <span class=\"go-back-title\">Device General Info</span>\n </div>\n</div>\n\n<div class=\"associate-lines\" >\n <div class=\"panel-header\">\n <span class=\"panel-header__title\">Associate Lines</span>\n </div>\n\n <div class=\"panel-body\">\n <div class=\"panel-card\">\n\n <p class=\"step-description\">\n The users and workspaces that appear on this phone are displayed below in the order of appearance.\n Lines must be configured sequentially.\n </p>\n\n <div class=\"lines-list\" cdkDropList (cdkDropListDropped)=\"drop($event)\">\n <ng-container *ngFor=\"let row of rows\">\n\n <div class=\"line-row\" cdkDrag [class.expanded]=\"isExpanded(row)\">\n <div class=\"line-row__header\">\n <div class=\"line-row__main\">\n <i class=\"icon dragger-icon rem1\" cdkDragHandle></i>\n <span class=\"line-row__order\">{{ row.order }}</span>\n <span class=\"line-row__divider\">|</span>\n <span class=\"line-row__label\">{{ row.lineNumber ? 'Line ' + row.lineNumber : 'None' }}</span>\n </div>\n <div class=\"line-row__actions\">\n <i class=\"icon delete-icon rem1\" [class.disabled]=\"!isRowEditable(row)\" matTooltip=\"Disassociate line\" (click)=\"confirmDisassociate(row)\"></i>\n <i class=\"icon chevron-icon rem1_25\" [class.expanded]=\"isExpanded(row)\" [class.disabled]=\"!isRowEditable(row)\" (click)=\"toggleExpanded(row)\"></i>\n </div>\n </div>\n\n <div class=\"line-row__details\" *ngIf=\"isExpanded(row)\">\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Line setting on the device</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Display caller ID</div>\n <input type=\"text\" [(ngModel)]=\"row.displayCallerId\" (ngModelChange)=\"onFieldChange()\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Text label</div>\n <input type=\"text\" [(ngModel)]=\"row.textLabel\" (ngModelChange)=\"onFieldChange()\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">External phone number mask</div>\n <input type=\"text\" [(ngModel)]=\"row.e164Mask\" (ngModelChange)=\"onFieldChange()\">\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Multiple Call/Call Waiting Settings</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Max calls</div>\n <input type=\"number\" [(ngModel)]=\"row.maxNumberOfCalls\" (ngModelChange)=\"onFieldChange()\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Busy trigger</div>\n <input type=\"number\" [(ngModel)]=\"row.busyTrigger\" (ngModelChange)=\"onFieldChange()\">\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Call Recording</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Recording option</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingOption\" (ngModelChange)=\"recordingOptionChanged(row)\">\n <option *ngFor=\"let option of recordingOptions | keyvalue\" [value]=\"option.value\">{{ option.value }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Recording media source</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingMediaSource\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let source of recordingMediaSources\" [value]=\"source\">{{ source }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Recording profile</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.recordingProfile\" (ngModelChange)=\"onFieldChange()\" [disabled]=\"isRecordingProfileDisabled(row)\">\n <option *ngFor=\"let profile of recordingProfiles\" [value]=\"profile\">{{ profile }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Additional Line Settings on the Device</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Visual Message Waiting Indicator Policy</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.visualMWI\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of visualMwiOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Ring Setting (Phone Idle)</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.ringSettingIdle\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of ringSettingIdleOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Call Pickup Group Audio Alert Setting (Phone Idle)</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.pickupAASIdle\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of pickupAasIdleOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Monitoring Calling Search Space</div>\n <input type=\"text\" [(ngModel)]=\"row.monitorCSS\" (ngModelChange)=\"onFieldChange()\">\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Audible Message Waiting Indicator Policy</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.audibleMWI\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of audibleMwiOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Ring Setting (Phone Active)</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.ringSettingActive\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of ringSettingActiveOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Call Pickup Group AudioAlert Setting (Phone Active)</div>\n <div class=\"input-holder__select-wrap\">\n <select class=\"input-holder__select\" [(ngModel)]=\"row.pickupAASActive\" (ngModelChange)=\"onFieldChange()\">\n <option *ngFor=\"let option of pickupAasActiveOptions\" [value]=\"option\">{{ option }}</option>\n </select>\n <img class=\"input-holder__select-icon\" src=\"assets/icons/arrow-down-bold.svg\" alt=\"\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Log Missed Calls</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.logMissedCalls\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"details-section\">\n <div class=\"details-section__title\">Forwarded Call Information Display</div>\n <div class=\"details-section__body\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Caller name</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.callerName\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Redirected number</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.redirectedNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Caller number</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.callerNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Dialed number</div>\n <mat-slide-toggle class=\"custom-toggle\" [(ngModel)]=\"row.dialedNumber\" (ngModelChange)=\"onFieldChange()\"></mat-slide-toggle>\n </div>\n </div>\n </div>\n\n <div class=\"disassociate-row\">\n <span class=\"link disassociate-link\" (click)=\"confirmDisassociate(row)\">\n <i class=\"icon disassociate-icon rem1\"></i>\n Disassociate Line\n </span>\n </div>\n\n </div>\n </div>\n\n </ng-container>\n </div>\n\n </div>\n </div>\n\n <div class=\"panel-footer\">\n <div class=\"panel-footer__actions panel-footer__actions--right\">\n <button type=\"button\" class=\"btn-outline\" (click)=\"onCancel()\">Cancel</button>\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"!hasChanges\" (click)=\"onSave()\">Save</button>\n </div>\n </div>\n\n</div>\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";*{margin:0}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center;transition:all .15s ease-out}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22arrow-left%22%3E%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{width:95%;margin:auto;margin-left:.5rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.icon{background-repeat:no-repeat;background-position:center;display:inline-block;background-size:contain}.icon.disabled{opacity:.35;cursor:not-allowed;pointer-events:none}.dragger-icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath d%3D%22M13.125 5C12.7935 5 12.4755 4.8683 12.2411 4.63388C12.0067 4.39946 11.875 4.08152 11.875 3.75C11.875 3.41848 12.0067 3.10054 12.2411 2.86612C12.4755 2.6317 12.7935 2.5 13.125 2.5C13.4565 2.5 13.7745 2.6317 14.0089 2.86612C14.2433 3.10054 14.375 3.41848 14.375 3.75C14.375 4.08152 14.2433 4.39946 14.0089 4.63388C13.7745 4.8683 13.4565 5 13.125 5ZM6.875 5C6.54348 5 6.22554 4.8683 5.99112 4.63388C5.7567 4.39946 5.625 4.08152 5.625 3.75C5.625 3.41848 5.7567 3.10054 5.99112 2.86612C6.22554 2.6317 6.54348 2.5 6.875 2.5C7.20652 2.5 7.52446 2.6317 7.75888 2.86612C7.9933 3.10054 8.125 3.41848 8.125 3.75C8.125 4.08152 7.9933 4.39946 7.75888 4.63388C7.52446 4.8683 7.20652 5 6.875 5ZM13.125 11.25C12.7935 11.25 12.4755 11.1183 12.2411 10.8839C12.0067 10.6495 11.875 10.3315 11.875 10C11.875 9.66848 12.0067 9.35054 12.2411 9.11612C12.4755 8.8817 12.7935 8.75 13.125 8.75C13.4565 8.75 13.7745 8.8817 14.0089 9.11612C14.2433 9.35054 14.375 9.66848 14.375 10C14.375 10.3315 14.2433 10.6495 14.0089 10.8839C13.7745 11.1183 13.4565 11.25 13.125 11.25ZM6.875 11.25C6.54348 11.25 6.22554 11.1183 5.99112 10.8839C5.7567 10.6495 5.625 10.3315 5.625 10C5.625 9.66848 5.7567 9.35054 5.99112 9.11612C6.22554 8.8817 6.54348 8.75 6.875 8.75C7.20652 8.75 7.52446 8.8817 7.75888 9.11612C7.9933 9.35054 8.125 9.66848 8.125 10C8.125 10.3315 7.9933 10.6495 7.75888 10.8839C7.52446 11.1183 7.20652 11.25 6.875 11.25ZM13.125 17.5C12.7935 17.5 12.4755 17.3683 12.2411 17.1339C12.0067 16.8995 11.875 16.5815 11.875 16.25C11.875 15.9185 12.0067 15.6005 12.2411 15.3661C12.4755 15.1317 12.7935 15 13.125 15C13.4565 15 13.7745 15.1317 14.0089 15.3661C14.2433 15.6005 14.375 15.9185 14.375 16.25C14.375 16.5815 14.2433 16.8995 14.0089 17.1339C13.7745 17.3683 13.4565 17.5 13.125 17.5ZM6.875 17.5C6.54348 17.5 6.22554 17.3683 5.99112 17.1339C5.7567 16.8995 5.625 16.5815 5.625 16.25C5.625 15.9185 5.7567 15.6005 5.99112 15.3661C6.22554 15.1317 6.54348 15 6.875 15C7.20652 15 7.52446 15.1317 7.75888 15.3661C7.9933 15.6005 8.125 15.9185 8.125 16.25C8.125 16.5815 7.9933 16.8995 7.75888 17.1339C7.52446 17.3683 7.20652 17.5 6.875 17.5Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%3C%2Fsvg%3E\");cursor:grab}.delete-icon{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg id%3D%22Icon%2FDelete%22%3E%3Cpath id%3D%22Remove all%22 d%3D%22M9.5835 1.96973C10.9439 1.96973 12.0528 3.09413 12.1036 4.50119L12.1054 4.60217H15.2853C15.588 4.60217 15.8335 4.85838 15.8335 5.17444C15.8335 5.47074 15.6178 5.71444 15.3413 5.74375L15.2853 5.7467H14.8067L14.0597 16.0795C13.9864 17.0944 13.176 17.8788 12.201 17.8788H6.966C5.99094 17.8788 5.18064 17.0944 5.10725 16.0795L4.35981 5.7467H3.88174C3.59788 5.7467 3.3644 5.52152 3.33633 5.23295L3.3335 5.17444C3.3335 4.87813 3.54923 4.63443 3.82569 4.60512L3.88174 4.60217H7.06157C7.06157 3.14831 8.19067 1.96973 9.5835 1.96973ZM13.7072 5.7467L5.45977 5.7467L6.20064 15.9934C6.23085 16.4113 6.56451 16.7343 6.966 16.7343H12.201C12.6025 16.7343 12.9361 16.4113 12.9664 15.9934L13.7072 5.7467ZM11.0089 8.15024C11.2928 8.15024 11.5263 8.37542 11.5543 8.66399L11.5572 8.72251V13.7585C11.5572 14.0745 11.3117 14.3307 11.0089 14.3307C10.7251 14.3307 10.4916 14.1056 10.4635 13.817L10.4607 13.7585L10.4607 8.72251C10.4607 8.40645 10.7061 8.15024 11.0089 8.15024ZM8.15806 8.15024C8.44192 8.15024 8.6754 8.37542 8.70347 8.66399L8.7063 8.72251L8.7063 13.7585C8.7063 14.0745 8.46084 14.3307 8.15806 14.3307C7.87419 14.3307 7.64072 14.1056 7.61264 13.817L7.60981 13.7585L7.60981 8.72251C7.60981 8.40645 7.85527 8.15024 8.15806 8.15024ZM9.5835 3.11427C8.82339 3.11427 8.20225 3.73527 8.16031 4.51773L8.15806 4.60217L11.0089 4.60217C11.0089 3.78042 10.3707 3.11427 9.5835 3.11427Z%22 fill%3D%22%23737480%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");cursor:pointer}.chevron-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22m22.53 15.47-12-12a.75.75 0 1 0-1.06 1.06L20.94 16 9.47 27.47a.75.75 0 1 0 1.06 1.06l12-12a.75.75 0 0 0 0-1.06%22%2F%3E%3C%2Fsvg%3E\");cursor:pointer;transition:transform .15s ease-in-out}.chevron-icon.expanded{transform:rotate(-90deg)}.disassociate-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 height%3D%2224px%22 viewBox%3D%220 0 24 24%22 width%3D%2224px%22 fill%3D%22%23000000%22%3E%3Cpath d%3D%22M0 0h24v24H0V0z%22 fill%3D%22none%22%2F%3E%3Cpath d%3D%22M17 7h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1 0 1.43-.98 2.63-2.31 2.98l1.46 1.46C20.88 15.61 22 13.95 22 12c0-2.76-2.24-5-5-5zm-1 4h-2.19l2 2H16zM2 4.27l3.11 3.11C3.29 8.12 2 9.91 2 12c0 2.76 2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1 0-1.59 1.21-2.9 2.76-3.07L8.73 11H8v2h2.73L13 15.27V17h1.73l4.01 4L20 19.74 3.27 3 2 4.27z%22%2F%3E%3Cpath d%3D%22M0 24V0%22 fill%3D%22none%22%2F%3E%3C%2Fsvg%3E\");cursor:pointer}.close-icon{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22m17.06 16 8.47-8.47a.75.75 0 0 0-.242-1.224.75.75 0 0 0-.819.163L16 14.94 7.53 6.47A.75.75 0 1 0 6.47 7.53L14.94 16l-8.47 8.47a.75.75 0 0 0 1.06 1.06L16 17.06l8.47 8.47a.75.75 0 1 0 1.06-1.06z%22%2F%3E%3C%2Fsvg%3E\");filter:brightness(0) invert(1);cursor:pointer}.rem1{height:1rem;width:1rem;vertical-align:middle}.rem1_25{height:1.25rem;width:1.25rem;vertical-align:middle}.text-description{font-size:.875rem;font-weight:400}.associate-lines{display:flex;flex-direction:column;min-height:100%;background:#F3F6F6;font-family:Poppins,Poppins,sans-serif}.breadcrumb-bar{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.5rem;background:#ffffff}.breadcrumb-bar .breadcrumb-title{font-size:.875rem;font-weight:500;color:#0d56aa}.breadcrumb-bar .code-icon{font-family:Courier New,monospace;font-size:.875rem;font-weight:700;color:#0d56aa;cursor:pointer}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:linear-gradient(90deg,#0d56aa,#0d56ab)}.panel-header__title{font-size:1rem;font-weight:500;font-family:Poppins,Poppins,sans-serif;color:#fff}.panel-body{flex:1;padding:2rem 1.5rem}.panel-card{max-width:56rem;margin:0 auto;display:flex;flex-direction:column;gap:1rem;padding:2rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff}.step-description{font-size:.875rem;color:#333}.link{color:#0d56aa;cursor:pointer}.link:hover{text-decoration:underline}.lines-list{display:flex;flex-direction:column;border-radius:4px;overflow:hidden;gap:1rem}.line-row{display:flex;flex-direction:column;background:#ffffff;border:1px solid rgba(0,0,0,.2);border-radius:8px}.line-row.cdk-drag-preview{box-shadow:0 5px 10px #0003}.line-row.cdk-drag-placeholder{opacity:.4}.line-row__header{display:flex;align-items:center;justify-content:space-between;padding:.625rem 1rem}.line-row__header:hover{background:#fafafa;border-radius:8px}.line-row__main{display:flex;align-items:center;gap:.75rem}.line-row__order{font-size:.875rem;color:#000000f2;min-width:1rem;margin-right:100px}.line-row__divider{color:#333}.line-row__label{font-size:.875rem;color:#000000f2}.line-row__actions{display:flex;align-items:center;gap:1rem}.line-row__details{display:flex;flex-direction:column;gap:1rem;padding:0 1rem 1.5rem 3rem;border-top:1px solid #e8e8e8}.details-section{display:flex;gap:1.5rem;padding:1rem 0}.details-section__title{width:9.5rem;flex-shrink:0;font-size:.875rem;font-weight:600;color:#000000f2}.details-section__body{flex:1;min-width:0;display:flex;flex-direction:column}.details-section__body .mat-divider{border-top-color:#e8e8e8!important}.input-holder{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;min-height:2rem}.input-holder.input-holder-top{padding-top:.75rem}.input-holder.input-holder-bottom{padding-bottom:.75rem}.input-holder.input-holder-top-bottom{padding:.75rem 0}.input-holder__name{width:12rem;flex-shrink:0;font-size:.75rem;color:#333}.input-holder input{flex:1;min-width:0;height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843);border-radius:8px;font-family:inherit;font-size:.875rem;color:#000000f2}.input-holder input:focus{outline:none;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59}.input-holder__select-wrap{position:relative;display:flex;align-items:center;flex:1;min-width:0}.input-holder__select-wrap .input-holder__select{width:100%;appearance:none;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:6px;font-family:inherit;font-size:.8125rem;color:#000000f2;cursor:pointer;height:21px;padding:4px 28px 4px 12px;box-sizing:content-box}.input-holder__select-wrap .input-holder__select:hover{background-color:#0000001f!important}.input-holder__select-wrap .input-holder__select:focus{outline:none;color:#000000b3;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59}.input-holder__select-wrap .input-holder__select:disabled{background:#f5f5f5!important;color:#babcc5;cursor:not-allowed}.input-holder__select-wrap .input-holder__select-icon{position:absolute;right:.5rem;font-size:1.125rem;height:1.125rem;width:1.125rem;color:#0006;pointer-events:none}.disassociate-row{display:flex;justify-content:flex-end;padding-top:1rem}.disassociate-link{display:inline-flex;align-items:center;gap:.375rem;font-size:.875rem;font-weight:500}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:#ffffff;border:1px solid rgba(0,0,0,.2);color:#0006}.btn-outline:hover:not(:disabled){background:#f5f5f5}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.panel-footer{position:sticky;bottom:0;background:#ffffff;border-top:1px solid rgba(0,0,0,.2);padding:1rem 1.5rem}.panel-footer__actions{display:flex;justify-content:flex-end;gap:.75rem;max-width:56rem;margin:0 auto}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-bar{position:relative!important;width:48px!important;height:25px!important;flex-shrink:0!important;border-radius:13px!important;background-color:#ccc!important}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-thumb{height:20px!important;width:20px!important;position:absolute!important;border-radius:50%!important;display:flex!important;align-items:center!important;justify-content:center!important;left:3px!important;top:5px!important;background-color:#fff!important}::ng-deep .associate-lines .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px!important;color:#8e9fb7!important;line-height:1!important;display:block!important;pointer-events:none!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa!important;font-weight:700!important;font-size:10px!important}::ng-deep .associate-lines .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}\n"] }]
|
|
298
|
+
}], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.APIService }, { type: i3.SiteSettingsService }, { type: i4.DeviceService }, { type: i5.LineService }, { type: i6.MatDialog }, { type: i7.Router }]; }, propDecorators: { goBack: [{
|
|
299
|
+
type: Output
|
|
300
|
+
}], token: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], host: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], siteId: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], userId: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], deviceName: [{
|
|
309
|
+
type: Input
|
|
310
|
+
}] } });
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzb2NpYXRlLWxpbmVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL2Fzc29jaWF0ZS1saW5lcy9hc3NvY2lhdGUtbGluZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvYXNzb2NpYXRlLWxpbmVzL2Fzc29jaWF0ZS1saW5lcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRixPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1wRixPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0M5RSxNQUFNLE9BQU8sdUJBQXVCO0lBc0RsQyxZQUNTLFdBQXdCLEVBQ3ZCLFVBQXNCLEVBQ2IsbUJBQXdDLEVBQ3hDLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLE1BQWlCLEVBQ2pCLE1BQWM7UUFOeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNiLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FB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WUFBWTtJQUN4QixVQUFVLEVBQUUsWUFBWTtJQUN4QixpQkFBaUIsRUFBRSxvQkFBb0I7SUFDdkMsZUFBZSxFQUFFLGtCQUFrQjtJQUNuQyxjQUFjLEVBQUUsZUFBZTtJQUMvQixVQUFVLEVBQUUsNEJBQTRCO0lBQ3hDLGdCQUFnQixFQUFFLGtDQUFrQztJQUNwRCxZQUFZLEVBQUUsOEJBQThCO0lBQzVDLFlBQVksRUFBRSw4QkFBOEI7Q0FDN0MsQ0FBQztBQUVzQixzQ0FBYyxHQUFnQixJQUFJLEdBQUcsQ0FBQztJQUM1RCxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGNBQWM7Q0FDbkYsQ0FBQyxDQUFDO3FIQXBEUSx1QkFBdUI7eUdBQXZCLHVCQUF1QixrTUNoRHBDLCs2YkFtUEE7NEZEbk1hLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7Z1FBS3JCLE1BQU07c0JBQWYsTUFBTTtnQkFDRSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBTaXRlU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2l0ZS1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IERldmljZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kZXZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBMaW5lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBCdXR0b250ZW1wbGF0ZSwgUmVjb3JkaW5nT3B0aW9ucyB9IGZyb20gJy4uL2NsYXNzZXMvZGV2aWNlJztcbmltcG9ydCB7IFJFQ09SRElOR19NRURJQV9TT1VSQ0UsIFNUQVRJQ19PUFRJT05TIH0gZnJvbSAnLi4vYXBwLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBJbmZvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybS1kaWFsb2cvaW5mby1kaWFsb2cuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBc3NvY2lhdGVkTGluZVJvdyB7XG4gIGlkOiBudW1iZXI7XG4gIHBraWQ6IHN0cmluZztcbiAgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gIHJvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nO1xuICBvcmRlcjogbnVtYmVyO1xuICBsaW5lTnVtYmVyOiBzdHJpbmc7XG4gIGRpc3BsYXlDYWxsZXJJZDogc3RyaW5nO1xuICB0ZXh0TGFiZWw6IHN0cmluZztcbiAgZTE2NE1hc2s6IHN0cmluZztcbiAgbWF4TnVtYmVyT2ZDYWxsczogbnVtYmVyO1xuICBidXN5VHJpZ2dlcjogbnVtYmVyO1xuICByZWNvcmRpbmdPcHRpb246IFJlY29yZGluZ09wdGlvbnM7XG4gIHJlY29yZGluZ01lZGlhU291cmNlOiBzdHJpbmc7XG4gIHJlY29yZGluZ1Byb2ZpbGU6IHN0cmluZztcbiAgdmlzdWFsTVdJOiBzdHJpbmc7XG4gIHJpbmdTZXR0aW5nSWRsZTogc3RyaW5nO1xuICBwaWNrdXBBQVNJZGxlOiBzdHJpbmc7XG4gIG1vbml0b3JDU1M6IHN0cmluZztcbiAgYXVkaWJsZU1XSTogc3RyaW5nO1xuICByaW5nU2V0dGluZ0FjdGl2ZTogc3RyaW5nO1xuICBwaWNrdXBBQVNBY3RpdmU6IHN0cmluZztcbiAgbG9nTWlzc2VkQ2FsbHM6IGJvb2xlYW47XG4gIGNhbGxlck5hbWU6IGJvb2xlYW47XG4gIHJlZGlyZWN0ZWROdW1iZXI6IGJvb2xlYW47XG4gIGNhbGxlck51bWJlcjogYm9vbGVhbjtcbiAgZGlhbGVkTnVtYmVyOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYXNzb2NpYXRlLWxpbmVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc29jaWF0ZS1saW5lcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Fzc29jaWF0ZS1saW5lcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBc3NvY2lhdGVMaW5lc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQE91dHB1dCgpIGdvQmFjayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgdG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNpdGVJZCE6IHN0cmluZztcbiAgQElucHV0KCkgdXNlcklkITogc3RyaW5nO1xuICBASW5wdXQoKSBkZXZpY2VOYW1lITogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwdWJsaWMgZGF0YVBlbmRpbmcgPSBmYWxzZTtcbiAgcHVibGljIGRldmljZTogYW55ID0gbnVsbDtcbiAgcHVibGljIGhhc0NoYW5nZXMgPSBmYWxzZTtcbiAgcHVibGljIGV4cGFuZGVkT3JkZXI6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIHB1YmxpYyByZWFkb25seSByZWNvcmRpbmdPcHRpb25zID0gUmVjb3JkaW5nT3B0aW9ucztcbiAgcHVibGljIHJlYWRvbmx5IHJlY29yZGluZ01lZGlhU291cmNlczogc3RyaW5nW10gPSBSRUNPUkRJTkdfTUVESUFfU09VUkNFO1xuICBwdWJsaWMgcmVjb3JkaW5nUHJvZmlsZXM6IHN0cmluZ1tdID0gWydOb25lJ107XG4gIHB1YmxpYyByZWFkb25seSB2aXN1YWxNd2lPcHRpb25zOiBzdHJpbmdbXSA9IFNUQVRJQ19PUFRJT05TLlZJU1VBTF9NV0k7XG4gIHB1YmxpYyByZWFkb25seSBhdWRpYmxlTXdpT3B0aW9uczogc3RyaW5nW10gPSBTVEFUSUNfT1BUSU9OUy5BVURJQkxFX01XSTtcbiAgcHVibGljIHJlYWRvbmx5IHJpbmdTZXR0aW5nSWRsZU9wdGlvbnM6IHN0cmluZ1tdID0gU1RBVElDX09QVElPTlMuUklOR19TRVRUSU5HX0lETEU7XG4gIHB1YmxpYyByZWFkb25seSByaW5nU2V0dGluZ0FjdGl2ZU9wdGlvbnM6IHN0cmluZ1tdID0gU1RBVElDX09QVElPTlMuUklOR19TRVRUSU5HX0FDVElWRTtcbiAgcHVibGljIHJlYWRvbmx5IHBpY2t1cEFhc0lkbGVPcHRpb25zOiBzdHJpbmdbXSA9IFNUQVRJQ19PUFRJT05TLkNBTExfUElDS1VQX0dST1VQX0FVRElPX1NFVFRJTkdfUEhPTkVfSURMRTtcbiAgcHVibGljIHJlYWRvbmx5IHBpY2t1cEFhc0FjdGl2ZU9wdGlvbnM6IHN0cmluZ1tdID0gU1RBVElDX09QVElPTlMuQ0FMTF9QSUNLVVBfR1JPVVBfQVVESU9fU0VUVElOR19QSE9ORV9BQ1RJVkU7XG5cbiAgcHVibGljIHJvd3M6IEFzc29jaWF0ZWRMaW5lUm93W10gPSBbXTtcbiAgcHJpdmF0ZSBvcmlnaW5Sb3dzOiBBc3NvY2lhdGVkTGluZVJvd1tdID0gW107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRklFTERfTUFQOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGRpc3BsYXlDYWxsZXJJZDogJ2Rpc3BsYXlMYWJlbCcsXG4gICAgdGV4dExhYmVsOiAndGV4dExhYmVsJyxcbiAgICBlMTY0TWFzazogJ2UxNjRNYXNrJyxcbiAgICBtYXhOdW1iZXJPZkNhbGxzOiAnbWF4TnVtYmVyT2ZDYWxscycsXG4gICAgYnVzeVRyaWdnZXI6ICdidXN5VHJpZ2dlcicsXG4gICAgcmVjb3JkaW5nT3B0aW9uOiAncmVjb3JkaW5nT3B0aW9uJyxcbiAgICByZWNvcmRpbmdNZWRpYVNvdXJjZTogJ3JlY29yZGluZ01lZGlhU291cmNlJyxcbiAgICByZWNvcmRpbmdQcm9maWxlOiAncmVjb3JkaW5nUHJvZmlsZScsXG4gICAgdmlzdWFsTVdJOiAndmlzdWFsTVdJJyxcbiAgICByaW5nU2V0dGluZ0lkbGU6ICdyaW5nU2V0dGluZ19pZGxlJyxcbiAgICBwaWNrdXBBQVNJZGxlOiAncGlja3VwQUFTX2lkbGUnLFxuICAgIG1vbml0b3JDU1M6ICdtb25pdG9yQ1NTJyxcbiAgICBhdWRpYmxlTVdJOiAnYXVkaWJsZU1XSScsXG4gICAgcmluZ1NldHRpbmdBY3RpdmU6ICdyaW5nU2V0dGluZ19hY3RpdmUnLFxuICAgIHBpY2t1cEFBU0FjdGl2ZTogJ3BpY2t1cEFBU19hY3RpdmUnLFxuICAgIGxvZ01pc3NlZENhbGxzOiAnbG9nTWlzc2VkQ2FsbCcsXG4gICAgY2FsbGVyTmFtZTogJ2NhbGxJbmZvRGlzcGxheS5jYWxsZXJOYW1lJyxcbiAgICByZWRpcmVjdGVkTnVtYmVyOiAnY2FsbEluZm9EaXNwbGF5LnJlZGlyZWN0ZWROdW1iZXInLFxuICAgIGNhbGxlck51bWJlcjogJ2NhbGxJbmZvRGlzcGxheS5jYWxsZXJOdW1iZXInLFxuICAgIGRpYWxlZE51bWJlcjogJ2NhbGxJbmZvRGlzcGxheS5kaWFsZWROdW1iZXInLFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEJPT0xFQU5fRklFTERTOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdsb2dNaXNzZWRDYWxscycsICdjYWxsZXJOYW1lJywgJ3JlZGlyZWN0ZWROdW1iZXInLCAnY2FsbGVyTnVtYmVyJywgJ2RpYWxlZE51bWJlcicsXG4gIF0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2l0ZVNldHRpbmdzU2VydmljZTogU2l0ZVNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRldmljZVNlcnZpY2U6IERldmljZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5lU2VydmljZTogTGluZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBpU2VydmljZS50b2tlbiA9IHRoaXMudG9rZW47XG4gICAgdGhpcy5hcGlTZXJ2aWNlLmFwaVVybCA9IHRoaXMuaG9zdDtcbiAgICB0aGlzLmxvYWREZXZpY2UoKTtcbiAgICB0aGlzLmxvYWRSZWNvcmRpbmdQcm9maWxlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGV2aWNlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJEZXZpY2UpIHtcbiAgICAgIHRoaXMuZGV2aWNlID0gdGhpcy51c2VyU2VydmljZS51c2VyRGV2aWNlO1xuICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmZldGNoTGluZVNsb3RzKClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBmaW5hbGl6ZSgoKSA9PiB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2UpKVxuICAgICAgICAuc3Vic2NyaWJlKChsaW5lU2xvdHM6IG51bWJlcltdIHwgdW5kZWZpbmVkKSA9PiB0aGlzLmluaXRSb3dzKGxpbmVTbG90cykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGRldmljZVR5cGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGV2aWNlVHlwZScpIHx8ICcnO1xuICAgIHRoaXMudXNlclNlcnZpY2UuZmV0Y2hESVVzZXJEZXZpY2UoTnVtYmVyKHRoaXMuc2l0ZUlkKSwgdGhpcy51c2VySWQsIGRldmljZVR5cGUsIHRoaXMuZGV2aWNlTmFtZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGRldmljZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hMaW5lU2xvdHMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGxpbmVTbG90czogbnVtYmVyW10gfCB1bmRlZmluZWQpID0+IHRoaXMuaW5pdFJvd3MobGluZVNsb3RzKSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoTGluZVNsb3RzKCkge1xuICAgIGNvbnN0IGJ1dHRvblRlbXBsYXRlID0gdGhpcy5kZXZpY2U/LmJ1dHRvblRlbXBsYXRlO1xuICAgIGlmICghYnV0dG9uVGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldFNsb3RzQnlCdXR0b25UZW1wbGF0ZShOdW1iZXIodGhpcy5zaXRlSWQpLCBidXR0b25UZW1wbGF0ZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHRlbXBsYXRlOiBCdXR0b250ZW1wbGF0ZSkgPT4gdGVtcGxhdGU/LmxpbmVTbG90cyksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodW5kZWZpbmVkKSksXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUmVjb3JkaW5nUHJvZmlsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmdldFJlY29yZGluZ1Byb2ZpbGUoTnVtYmVyKHRoaXMuc2l0ZUlkKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHByb2ZpbGVzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICB0aGlzLnJlY29yZGluZ1Byb2ZpbGVzID0gWydOb25lJywgLi4uKHByb2ZpbGVzIHx8IFtdKS5maWx0ZXIocHJvZmlsZSA9PiBwcm9maWxlICE9PSAnTm9uZScpXTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Um93cyhsaW5lU2xvdHM/OiBudW1iZXJbXSk6IHZvaWQge1xuICAgIGNvbnN0IGxpbmVzID0gdGhpcy5kZXZpY2U/LmxpbmVzIHx8IFtdO1xuICAgIGlmIChsaW5lU2xvdHM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5yb3dzID0gbGluZVNsb3RzLm1hcCgocG9zaXRpb246IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBsaW5lID0gbGluZXMuZmluZCgoY3VycmVudDogYW55KSA9PiBOdW1iZXIoY3VycmVudD8ucG9zaXRpb24pID09PSBOdW1iZXIocG9zaXRpb24pKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUm93KHBvc2l0aW9uLCBsaW5lKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmYWxsYmFja0xpbmVzID0gbGluZXMubGVuZ3RoID8gbGluZXMgOiBbe30sIHt9LCB7fV07XG4gICAgICB0aGlzLnJvd3MgPSBmYWxsYmFja0xpbmVzLm1hcCgobGluZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB0aGlzLmNyZWF0ZVJvdyhpbmRleCArIDEsIGxpbmUpKTtcbiAgICB9XG4gICAgdGhpcy5vcmlnaW5Sb3dzID0gdGhpcy5yb3dzLm1hcChyb3cgPT4gKHsgLi4ucm93IH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUm93KG9yZGVyOiBudW1iZXIsIGxpbmU6IGFueSk6IEFzc29jaWF0ZWRMaW5lUm93IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG9yZGVyLFxuICAgICAgcGtpZDogbGluZT8ucGtpZCB8fCAnJyxcbiAgICAgIGV4dGVuc2lvbjogbGluZT8uZXh0ZW5zaW9uIHx8ICcnLFxuICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBsaW5lPy5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgJycsXG4gICAgICBvcmRlcixcbiAgICAgIGxpbmVOdW1iZXI6IGxpbmUgPyAobGluZT8ubnVtYmVyIHx8IGxpbmU/LmV4dGVuc2lvbiB8fCAnJykgOiAnJyxcbiAgICAgIGRpc3BsYXlDYWxsZXJJZDogbGluZT8uZGlzcGxheUxhYmVsIHx8ICcnLFxuICAgICAgdGV4dExhYmVsOiBsaW5lPy50ZXh0TGFiZWwgfHwgJycsXG4gICAgICBlMTY0TWFzazogbGluZT8uZTE2NE1hc2sgfHwgJycsXG4gICAgICBtYXhOdW1iZXJPZkNhbGxzOiA2LFxuICAgICAgYnVzeVRyaWdnZXI6IDIsXG4gICAgICByZWNvcmRpbmdPcHRpb246IFJlY29yZGluZ09wdGlvbnMuZGlzYWJsZWQsXG4gICAgICByZWNvcmRpbmdNZWRpYVNvdXJjZTogdGhpcy5yZWNvcmRpbmdNZWRpYVNvdXJjZXNbMF0sXG4gICAgICByZWNvcmRpbmdQcm9maWxlOiB0aGlzLnJlY29yZGluZ1Byb2ZpbGVzWzBdLFxuICAgICAgdmlzdWFsTVdJOiB0aGlzLnZpc3VhbE13aU9wdGlvbnNbMF0sXG4gICAgICByaW5nU2V0dGluZ0lkbGU6IHRoaXMucmluZ1NldHRpbmdJZGxlT3B0aW9uc1swXSxcbiAgICAgIHBpY2t1cEFBU0lkbGU6IHRoaXMucGlja3VwQWFzSWRsZU9wdGlvbnNbMF0sXG4gICAgICBtb25pdG9yQ1NTOiAnTm9uZScsXG4gICAgICBhdWRpYmxlTVdJOiB0aGlzLmF1ZGlibGVNd2lPcHRpb25zWzBdLFxuICAgICAgcmluZ1NldHRpbmdBY3RpdmU6IHRoaXMucmluZ1NldHRpbmdBY3RpdmVPcHRpb25zWzBdLFxuICAgICAgcGlja3VwQUFTQWN0aXZlOiB0aGlzLnBpY2t1cEFhc0FjdGl2ZU9wdGlvbnNbMF0sXG4gICAgICBsb2dNaXNzZWRDYWxsczogbGluZT8ubG9nTWlzc2VkQ2FsbCA9PT0gJ3RydWUnLFxuICAgICAgY2FsbGVyTmFtZTogbGluZT8uY2FsbEluZm9EaXNwbGF5Py5jYWxsZXJOYW1lID09PSAndHJ1ZScsXG4gICAgICByZWRpcmVjdGVkTnVtYmVyOiBsaW5lPy5jYWxsSW5mb0Rpc3BsYXk/LnJlZGlyZWN0ZWROdW1iZXIgPT09ICd0cnVlJyxcbiAgICAgIGNhbGxlck51bWJlcjogbGluZT8uY2FsbEluZm9EaXNwbGF5Py5jYWxsZXJOdW1iZXIgPT09ICd0cnVlJyxcbiAgICAgIGRpYWxlZE51bWJlcjogbGluZT8uY2FsbEluZm9EaXNwbGF5Py5kaWFsZWROdW1iZXIgPT09ICd0cnVlJyxcbiAgICB9O1xuICB9XG5cbiAgaXNSb3dFZGl0YWJsZShyb3c6IEFzc29jaWF0ZWRMaW5lUm93KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhcm93LnBraWQ7XG4gIH1cblxuICB0b2dnbGVFeHBhbmRlZChyb3c6IEFzc29jaWF0ZWRMaW5lUm93KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUm93RWRpdGFibGUocm93KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV4cGFuZGVkT3JkZXIgPSB0aGlzLmV4cGFuZGVkT3JkZXIgPT09IHJvdy5vcmRlciA/IG51bGwgOiByb3cub3JkZXI7XG4gIH1cblxuICBpc0V4cGFuZGVkKHJvdzogQXNzb2NpYXRlZExpbmVSb3cpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZE9yZGVyID09PSByb3cub3JkZXI7XG4gIH1cblxuICBvbkZpZWxkQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG4gIH1cblxuICByZWNvcmRpbmdPcHRpb25DaGFuZ2VkKHJvdzogQXNzb2NpYXRlZExpbmVSb3cpOiB2b2lkIHtcbiAgICBpZiAocm93LnJlY29yZGluZ09wdGlvbiA9PT0gUmVjb3JkaW5nT3B0aW9ucy5kaXNhYmxlZCkge1xuICAgICAgcm93LnJlY29yZGluZ1Byb2ZpbGUgPSB0aGlzLnJlY29yZGluZ1Byb2ZpbGVzWzBdO1xuICAgIH1cbiAgICB0aGlzLm9uRmllbGRDaGFuZ2UoKTtcbiAgfVxuXG4gIGlzUmVjb3JkaW5nUHJvZmlsZURpc2FibGVkKHJvdzogQXNzb2NpYXRlZExpbmVSb3cpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93LnJlY29yZGluZ09wdGlvbiA9PT0gUmVjb3JkaW5nT3B0aW9ucy5kaXNhYmxlZDtcbiAgfVxuXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPEFzc29jaWF0ZWRMaW5lUm93W10+KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzSW5kZXggPT09IGV2ZW50LmN1cnJlbnRJbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcmRlcnMgPSB0aGlzLnJvd3MubWFwKHJvdyA9PiByb3cub3JkZXIpO1xuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLnJvd3MsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgdGhpcy5yb3dzLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHJvdy5vcmRlciA9IG9yZGVyc1tpbmRleF0pO1xuICAgIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XG4gIH1cblxuICBjb25maXJtRGlzYXNzb2NpYXRlKHJvdzogQXNzb2NpYXRlZExpbmVSb3cpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSb3dFZGl0YWJsZShyb3cpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oSW5mb0RpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ0Rpc2Fzc29jaWF0ZSBMaW5lJyxcbiAgICAgICAgbWVzc2FnZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgbGluZSAke3Jvdy5saW5lTnVtYmVyIHx8ICd0aGlzIGxpbmUnfSBmcm9tIGRldmljZSAke3RoaXMuZGV2aWNlTmFtZSB8fCB0aGlzLmRldmljZT8ubmFtZSB8fCAnJ30/IFRoZSBsaW5lIHdpbGwgYWxzbyBiZSByZW1vdmVkIGZyb20gaXQncyBSZW1vdGUgZGVzdGluYXRpb24gcHJvZmlsZS5gLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ0Rpc2Fzc29jaWF0ZScsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpXG4gICAgICAuc3Vic2NyaWJlKChjb25maXJtZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKGNvbmZpcm1lZCkge1xuICAgICAgICAgIHRoaXMuZGlzYXNzb2NpYXRlTGluZShyb3cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGlzYXNzb2NpYXRlTGluZShyb3c6IEFzc29jaWF0ZWRMaW5lUm93KTogdm9pZCB7XG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XG4gICAgY29uc3QgbGluZTogYW55ID0ge1xuICAgICAgZGlyZWN0b3J5TnVtYmVyOiB7XG4gICAgICAgIGRpcmVjdG9yeU51bWJlcjogcm93LmV4dGVuc2lvbixcbiAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiByb3cucm91dGVQYXJ0aXRpb25OYW1lLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMubGluZVNlcnZpY2UuY2hlY2tMaW5lRGVsZXRpb24obGluZSwgTnVtYmVyKHRoaXMuc2l0ZUlkKSlcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy51c2VyU2VydmljZS5wZXJzaXN0VXNlckNhY2hlKCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWRPcmRlciA9PT0gcm93Lm9yZGVyKSB7XG4gICAgICAgICAgdGhpcy5leHBhbmRlZE9yZGVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvd3MgPSB0aGlzLnJvd3MuZmlsdGVyKGN1cnJlbnQgPT4gY3VycmVudC5vcmRlciAhPT0gcm93Lm9yZGVyKTtcbiAgICAgICAgdGhpcy5yb3dzLmZvckVhY2goKGN1cnJlbnQsIGluZGV4KSA9PiBjdXJyZW50Lm9yZGVyID0gaW5kZXggKyAxKTtcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb25Hb0JhY2soKTogdm9pZCB7XG4gICAgY29uc3QgW3BhdGhdID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/Jyk7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAyXSA9PT0gJ2Fzc29jaWF0ZS1saW5lcycpIHtcbiAgICAgIHNlZ21lbnRzLnNwbGljZShzZWdtZW50cy5sZW5ndGggLSAyLCAyKTtcbiAgICB9IGVsc2UgaWYgKHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdID09PSAnYXNzb2NpYXRlLWxpbmVzJykge1xuICAgICAgc2VnbWVudHMucG9wKCk7XG4gICAgfVxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nICsgc2VnbWVudHMuam9pbignLycpKTtcbiAgICB0aGlzLmdvQmFjay5lbWl0KCk7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uR29CYWNrKCk7XG4gIH1cblxuICBvblNhdmUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0NoYW5nZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gdGhpcy5idWlsZFVwZGF0ZUJvZHkoKTtcbiAgICBpZiAoIWJvZHkubGVuZ3RoKSB7XG4gICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcbiAgICAgIHRoaXMub25Hb0JhY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBkZXZpY2VOYW1lID0gdGhpcy5kZXZpY2VOYW1lIHx8IHRoaXMuZGV2aWNlPy5uYW1lIHx8ICcnO1xuICAgIHRoaXMuZGV2aWNlU2VydmljZS5wdXREZXZpY2VGaWVsZHMoTnVtYmVyKHRoaXMuc2l0ZUlkKSwgZGV2aWNlTmFtZSwgdGhpcy51c2VyU2VydmljZS51c2VyVG9rZW4sIGJvZHkpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudXNlclNlcnZpY2UucGVyc2lzdFVzZXJDYWNoZSgpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2UpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMub3JpZ2luUm93cyA9IHRoaXMucm93cy5tYXAocm93ID0+ICh7IC4uLnJvdyB9KSk7XG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uR29CYWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRVcGRhdGVCb2R5KCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBib2R5OiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMucm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBpZiAoIXJvdy5wa2lkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9yaWdpblJvdyA9IHRoaXMub3JpZ2luUm93cy5maW5kKG9yaWcgPT4gb3JpZy5pZCA9PT0gcm93LmlkKTtcbiAgICAgIGlmICghb3JpZ2luUm93KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyb3cub3JkZXIgIT09IG9yaWdpblJvdy5vcmRlcikge1xuICAgICAgICBib2R5LnB1c2goYGRldmljZS5saW5lQXNzb2NpYXRpb25zLiR7cm93LnBraWR9LnBvc2l0aW9uPSR7cm93Lm9yZGVyfWApO1xuICAgICAgfVxuICAgICAgT2JqZWN0LmtleXMoQXNzb2NpYXRlTGluZXNDb21wb25lbnQuRklFTERfTUFQKS5mb3JFYWNoKHJvd0ZpZWxkID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gKHJvdyBhcyBhbnkpW3Jvd0ZpZWxkXTtcbiAgICAgICAgY29uc3Qgb3JpZ2luVmFsdWUgPSAob3JpZ2luUm93IGFzIGFueSlbcm93RmllbGRdO1xuICAgICAgICBpZiAoY3VycmVudFZhbHVlID09PSBvcmlnaW5WYWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdWNtRmllbGQgPSBBc3NvY2lhdGVMaW5lc0NvbXBvbmVudC5GSUVMRF9NQVBbcm93RmllbGRdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IEFzc29jaWF0ZUxpbmVzQ29tcG9uZW50LkJPT0xFQU5fRklFTERTLmhhcyhyb3dGaWVsZCkgPyBTdHJpbmcoISFjdXJyZW50VmFsdWUpIDogY3VycmVudFZhbHVlO1xuICAgICAgICBib2R5LnB1c2goYGRldmljZS5saW5lQXNzb2NpYXRpb25zLiR7cm93LnBraWR9LiR7Y3VjbUZpZWxkfT0ke3ZhbHVlfWApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxhcHAtbG9hZGVyICpuZ0lmPVwiZGF0YVBlbmRpbmdcIj48L2FwcC1sb2FkZXI+XG5cbjxkaXYgY2xhc3M9XCJnby1iYWNrLWJveFwiIChjbGljayk9XCJvbkdvQmFjaygpXCI+XG4gIDxkaXYgY2xhc3M9XCJnby1iYWNrLWJveC1jb250YWluZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImFwcC1pY29uIGljb24td2ViZXgtbGVmdC1hcnJvd1wiPjwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImdvLWJhY2stdGl0bGVcIj5EZXZpY2UgR2VuZXJhbCBJbmZvPC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYXNzb2NpYXRlLWxpbmVzXCIgPlxuICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwYW5lbC1oZWFkZXJfX3RpdGxlXCI+QXNzb2NpYXRlIExpbmVzPC9zcGFuPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1jYXJkXCI+XG5cbiAgICAgIDxwIGNsYXNzPVwic3RlcC1kZXNjcmlwdGlvblwiPlxuICAgICAgICBUaGUgdXNlcnMgYW5kIHdvcmtzcGFjZXMgdGhhdCBhcHBlYXIgb24gdGhpcyBwaG9uZSBhcmUgZGlzcGxheWVkIGJlbG93IGluIHRoZSBvcmRlciBvZiBhcHBlYXJhbmNlLlxuICAgICAgICBMaW5lcyBtdXN0IGJlIGNvbmZpZ3VyZWQgc2VxdWVudGlhbGx5LlxuICAgICAgPC9wPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibGluZXMtbGlzdFwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZS1yb3dcIiBjZGtEcmFnIFtjbGFzcy5leHBhbmRlZF09XCJpc0V4cGFuZGVkKHJvdylcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lLXJvd19faGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5lLXJvd19fbWFpblwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBkcmFnZ2VyLWljb24gcmVtMVwiIGNka0RyYWdIYW5kbGU+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGluZS1yb3dfX29yZGVyXCI+e3sgcm93Lm9yZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGluZS1yb3dfX2RpdmlkZXJcIj58PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGluZS1yb3dfX2xhYmVsXCI+e3sgcm93LmxpbmVOdW1iZXIgPyAnTGluZSAnICsgcm93LmxpbmVOdW1iZXIgOiAnTm9uZScgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGluZS1yb3dfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24gZGVsZXRlLWljb24gcmVtMVwiIFtjbGFzcy5kaXNhYmxlZF09XCIhaXNSb3dFZGl0YWJsZShyb3cpXCIgbWF0VG9vbHRpcD1cIkRpc2Fzc29jaWF0ZSBsaW5lXCIgKGNsaWNrKT1cImNvbmZpcm1EaXNhc3NvY2lhdGUocm93KVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24gY2hldnJvbi1pY29uIHJlbTFfMjVcIiBbY2xhc3MuZXhwYW5kZWRdPVwiaXNFeHBhbmRlZChyb3cpXCIgW2NsYXNzLmRpc2FibGVkXT1cIiFpc1Jvd0VkaXRhYmxlKHJvdylcIiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQocm93KVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmUtcm93X19kZXRhaWxzXCIgKm5nSWY9XCJpc0V4cGFuZGVkKHJvdylcIj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc2VjdGlvbl9fdGl0bGVcIj5MaW5lIHNldHRpbmcgb24gdGhlIGRldmljZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25fX2JvZHlcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlzcGxheSBjYWxsZXIgSUQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJyb3cuZGlzcGxheUNhbGxlcklkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VGV4dCBsYWJlbDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInJvdy50ZXh0TGFiZWxcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkV4dGVybmFsIHBob25lIG51bWJlciBtYXNrPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93LmUxNjRNYXNrXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25fX3RpdGxlXCI+TXVsdGlwbGUgQ2FsbC9DYWxsIFdhaXRpbmcgU2V0dGluZ3M8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uX19ib2R5XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1heCBjYWxsczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwicm93Lm1heE51bWJlck9mQ2FsbHNcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkJ1c3kgdHJpZ2dlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwicm93LmJ1c3lUcmlnZ2VyXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc2VjdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25fX3RpdGxlXCI+Q2FsbCBSZWNvcmRpbmc8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uX19ib2R5XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlJlY29yZGluZyBvcHRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy5yZWNvcmRpbmdPcHRpb25cIiAobmdNb2RlbENoYW5nZSk9XCJyZWNvcmRpbmdPcHRpb25DaGFuZ2VkKHJvdylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiByZWNvcmRpbmdPcHRpb25zIHwga2V5dmFsdWVcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+e3sgb3B0aW9uLnZhbHVlIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvYXJyb3ctZG93bi1ib2xkLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5SZWNvcmRpbmcgbWVkaWEgc291cmNlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJyb3cucmVjb3JkaW5nTWVkaWFTb3VyY2VcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNvdXJjZSBvZiByZWNvcmRpbmdNZWRpYVNvdXJjZXNcIiBbdmFsdWVdPVwic291cmNlXCI+e3sgc291cmNlIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvYXJyb3ctZG93bi1ib2xkLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlJlY29yZGluZyBwcm9maWxlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJyb3cucmVjb3JkaW5nUHJvZmlsZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiIFtkaXNhYmxlZF09XCJpc1JlY29yZGluZ1Byb2ZpbGVEaXNhYmxlZChyb3cpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBwcm9maWxlIG9mIHJlY29yZGluZ1Byb2ZpbGVzXCIgW3ZhbHVlXT1cInByb2ZpbGVcIj57eyBwcm9maWxlIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvYXJyb3ctZG93bi1ib2xkLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtc2VjdGlvbl9fdGl0bGVcIj5BZGRpdGlvbmFsIExpbmUgU2V0dGluZ3Mgb24gdGhlIERldmljZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25fX2JvZHlcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VmlzdWFsIE1lc3NhZ2UgV2FpdGluZyBJbmRpY2F0b3IgUG9saWN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJyb3cudmlzdWFsTVdJXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgdmlzdWFsTXdpT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj57eyBvcHRpb24gfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3QtaWNvblwiIHNyYz1cImFzc2V0cy9pY29ucy9hcnJvdy1kb3duLWJvbGQuc3ZnXCIgYWx0PVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlJpbmcgU2V0dGluZyAoUGhvbmUgSWRsZSk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy5yaW5nU2V0dGluZ0lkbGVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiByaW5nU2V0dGluZ0lkbGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+Q2FsbCBQaWNrdXAgR3JvdXAgQXVkaW8gQWxlcnQgU2V0dGluZyAoUGhvbmUgSWRsZSk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy5waWNrdXBBQVNJZGxlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcGlja3VwQWFzSWRsZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvYXJyb3ctZG93bi1ib2xkLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Nb25pdG9yaW5nIENhbGxpbmcgU2VhcmNoIFNwYWNlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93Lm1vbml0b3JDU1NcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5BdWRpYmxlIE1lc3NhZ2UgV2FpdGluZyBJbmRpY2F0b3IgUG9saWN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJyb3cuYXVkaWJsZU1XSVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGF1ZGlibGVNd2lPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UmluZyBTZXR0aW5nIChQaG9uZSBBY3RpdmUpPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0XCIgWyhuZ01vZGVsKV09XCJyb3cucmluZ1NldHRpbmdBY3RpdmVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiByaW5nU2V0dGluZ0FjdGl2ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LWljb25cIiBzcmM9XCJhc3NldHMvaWNvbnMvYXJyb3ctZG93bi1ib2xkLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5DYWxsIFBpY2t1cCBHcm91cCBBdWRpb0FsZXJ0IFNldHRpbmcgKFBob25lIEFjdGl2ZSk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fc2VsZWN0LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19zZWxlY3RcIiBbKG5nTW9kZWwpXT1cInJvdy5waWNrdXBBQVNBY3RpdmVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwaWNrdXBBYXNBY3RpdmVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX3NlbGVjdC1pY29uXCIgc3JjPVwiYXNzZXRzL2ljb25zL2Fycm93LWRvd24tYm9sZC5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Mb2cgTWlzc2VkIENhbGxzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFsobmdNb2RlbCldPVwicm93LmxvZ01pc3NlZENhbGxzXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXNlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uX190aXRsZVwiPkZvcndhcmRlZCBDYWxsIEluZm9ybWF0aW9uIERpc3BsYXk8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlscy1zZWN0aW9uX19ib2R5XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkNhbGxlciBuYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFsobmdNb2RlbCldPVwicm93LmNhbGxlck5hbWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkZpZWxkQ2hhbmdlKClcIj48L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UmVkaXJlY3RlZCBudW1iZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCIgWyhuZ01vZGVsKV09XCJyb3cucmVkaXJlY3RlZE51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5DYWxsZXIgbnVtYmVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiIFsobmdNb2RlbCldPVwicm93LmNhbGxlck51bWJlclwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRmllbGRDaGFuZ2UoKVwiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRpYWxlZCBudW1iZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCIgWyhuZ01vZGVsKV09XCJyb3cuZGlhbGVkTnVtYmVyXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25GaWVsZENoYW5nZSgpXCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXNhc3NvY2lhdGUtcm93XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaW5rIGRpc2Fzc29jaWF0ZS1saW5rXCIgKGNsaWNrKT1cImNvbmZpcm1EaXNhc3NvY2lhdGUocm93KVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIGRpc2Fzc29jaWF0ZS1pY29uIHJlbTFcIj48L2k+XG4gICAgICAgICAgICAgICAgICBEaXNhc3NvY2lhdGUgTGluZVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInBhbmVsLWZvb3RlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1mb290ZXJfX2FjdGlvbnMgcGFuZWwtZm9vdGVyX19hY3Rpb25zLS1yaWdodFwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tb3V0bGluZVwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1maWxsZWRcIiBbZGlzYWJsZWRdPVwiIWhhc0NoYW5nZXNcIiAoY2xpY2spPVwib25TYXZlKClcIj5TYXZlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L2Rpdj5cbiJdfQ==
|