@huntsman-cancer-institute/dialog 12.11.9-SNAPSHOT
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/CHANGELOG.md +4 -0
- package/README.md +24 -0
- package/alert/alert-dialog.component.d.ts +31 -0
- package/bundles/huntsman-cancer-institute-dialog.umd.js +1049 -0
- package/bundles/huntsman-cancer-institute-dialog.umd.js.map +1 -0
- package/bundles/huntsman-cancer-institute-dialog.umd.min.js +2 -0
- package/bundles/huntsman-cancer-institute-dialog.umd.min.js.map +1 -0
- package/confirm/confirm-dialog.component.d.ts +18 -0
- package/custom/custom-dialog.component.d.ts +35 -0
- package/dialog.module.d.ts +27 -0
- package/esm2015/alert/alert-dialog.component.js +243 -0
- package/esm2015/confirm/confirm-dialog.component.js +130 -0
- package/esm2015/custom/custom-dialog.component.js +231 -0
- package/esm2015/dialog.module.js +157 -0
- package/esm2015/generic/generic-container-dialog.component.js +158 -0
- package/esm2015/huntsman-cancer-institute-dialog.js +5 -0
- package/esm2015/index.js +13 -0
- package/esm2015/model/base-generic-container-dialog.js +26 -0
- package/esm2015/model/confirm-type.model.js +12 -0
- package/esm2015/model/dialog-type.model.js +12 -0
- package/esm2015/model/generic-dialog-action.model.js +6 -0
- package/esm2015/save-footer/save-footer.component.js +135 -0
- package/esm2015/service/dialog.service.js +272 -0
- package/esm2015/spinner/spinner-dialog.component.js +69 -0
- package/esm5/alert/alert-dialog.component.js +105 -0
- package/esm5/confirm/confirm-dialog.component.js +101 -0
- package/esm5/custom/custom-dialog.component.js +118 -0
- package/esm5/dialog.module.js +161 -0
- package/esm5/generic/generic-container-dialog.component.js +128 -0
- package/esm5/huntsman-cancer-institute-dialog.js +5 -0
- package/esm5/index.js +13 -0
- package/esm5/model/base-generic-container-dialog.js +28 -0
- package/esm5/model/confirm-type.model.js +12 -0
- package/esm5/model/dialog-type.model.js +12 -0
- package/esm5/model/generic-dialog-action.model.js +6 -0
- package/esm5/save-footer/save-footer.component.js +86 -0
- package/esm5/service/dialog.service.js +307 -0
- package/esm5/spinner/spinner-dialog.component.js +47 -0
- package/fesm2015/huntsman-cancer-institute-dialog.js +1396 -0
- package/fesm2015/huntsman-cancer-institute-dialog.js.map +1 -0
- package/fesm5/huntsman-cancer-institute-dialog.js +1047 -0
- package/fesm5/huntsman-cancer-institute-dialog.js.map +1 -0
- package/generic/generic-container-dialog.component.d.ts +38 -0
- package/huntsman-cancer-institute-dialog.d.ts +5 -0
- package/index.d.ts +14 -0
- package/model/base-generic-container-dialog.d.ts +13 -0
- package/model/confirm-type.model.d.ts +10 -0
- package/model/dialog-type.model.d.ts +10 -0
- package/model/generic-dialog-action.model.d.ts +18 -0
- package/package.json +34 -0
- package/save-footer/save-footer.component.d.ts +24 -0
- package/service/dialog.service.d.ts +45 -0
- package/spinner/spinner-dialog.component.d.ts +12 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
var __values = (this && this.__values) || function(o) {
|
|
2
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
3
|
+
if (m) return m.call(o);
|
|
4
|
+
if (o && typeof o.length === "number") return {
|
|
5
|
+
next: function () {
|
|
6
|
+
if (o && i >= o.length) o = void 0;
|
|
7
|
+
return { value: o && o[i++], done: !o };
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
11
|
+
};
|
|
12
|
+
import { Injectable } from '@angular/core';
|
|
13
|
+
import { MatDialog, MatDialogConfig } from '@angular/material/dialog';
|
|
14
|
+
import { AlertDialogComponent } from '../alert/alert-dialog.component';
|
|
15
|
+
import { SpinnerDialogComponent } from '../spinner/spinner-dialog.component';
|
|
16
|
+
import { CustomDialogComponent } from '../custom/custom-dialog.component';
|
|
17
|
+
import { GenericContainerDialogComponent } from '../generic/generic-container-dialog.component';
|
|
18
|
+
import { ActionType } from '../model/generic-dialog-action.model';
|
|
19
|
+
import { DialogType } from '../model/dialog-type.model';
|
|
20
|
+
import { ConfirmType } from '../model/confirm-type.model';
|
|
21
|
+
import { ConfirmDialogComponent } from '../confirm/confirm-dialog.component';
|
|
22
|
+
import * as i0 from "@angular/core";
|
|
23
|
+
import * as i1 from "@angular/material/dialog";
|
|
24
|
+
var DialogService = /** @class */ (function () {
|
|
25
|
+
function DialogService(dialog) {
|
|
26
|
+
this.dialog = dialog;
|
|
27
|
+
this._spinnerDialogIsOpen = false;
|
|
28
|
+
this.spinnerWorkItemCount = 0;
|
|
29
|
+
this.checkingSpinnerWorkItems = false;
|
|
30
|
+
this.spinnerDialogRefs = [];
|
|
31
|
+
}
|
|
32
|
+
Object.defineProperty(DialogService.prototype, "spinnerDialogIsOpen", {
|
|
33
|
+
get: function () {
|
|
34
|
+
return this._spinnerDialogIsOpen;
|
|
35
|
+
},
|
|
36
|
+
enumerable: false,
|
|
37
|
+
configurable: true
|
|
38
|
+
});
|
|
39
|
+
DialogService.prototype.alert = function (message, title, dialogType, icon, config) {
|
|
40
|
+
return this.openDialog(message, title, dialogType ? dialogType : DialogType.ALERT, icon, config);
|
|
41
|
+
};
|
|
42
|
+
DialogService.prototype.confirm = function (message, title, icon, config) {
|
|
43
|
+
return this.openDialog(message, title, DialogType.CONFIRM, icon, config);
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Creates a ConfirmDialogComponent with different display depending on
|
|
47
|
+
* the ConfirmType.
|
|
48
|
+
* @param title defaults to 'Confirm'
|
|
49
|
+
* @param icon defaults to 'fa fa-info-circle'
|
|
50
|
+
* @param config config.data can contain a prompt, message1 and/or
|
|
51
|
+
* message2 according to the ConfirmType chosen
|
|
52
|
+
* @param actionConfig sets up the dialog buttons and actions if you want
|
|
53
|
+
* to override the defaults
|
|
54
|
+
*/
|
|
55
|
+
DialogService.prototype.confirmByType = function (confirmType, title, icon, config, actionConfig) {
|
|
56
|
+
if (!title) {
|
|
57
|
+
title = 'Confirm';
|
|
58
|
+
}
|
|
59
|
+
if (!icon) {
|
|
60
|
+
icon = 'fa fa-info-circle';
|
|
61
|
+
}
|
|
62
|
+
// set up a default if needed
|
|
63
|
+
if (!config) {
|
|
64
|
+
config = new MatDialogConfig();
|
|
65
|
+
config.width = '33vw';
|
|
66
|
+
config.minWidth = '300px';
|
|
67
|
+
config.disableClose = true;
|
|
68
|
+
}
|
|
69
|
+
if (config.data) {
|
|
70
|
+
config.data.confirmType = confirmType;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
config.data = {
|
|
74
|
+
confirmType: confirmType
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// if no actions passed in, set up the defaults
|
|
78
|
+
if (!actionConfig) {
|
|
79
|
+
// default actions
|
|
80
|
+
var primary = { type: ActionType.PRIMARY, name: 'YES',
|
|
81
|
+
internalAction: 'onConfirmClick', internalActionReturnValue: true };
|
|
82
|
+
var secondary = { type: ActionType.SECONDARY, name: 'GO BACK',
|
|
83
|
+
internalAction: 'onClose' };
|
|
84
|
+
// by enum type, setup the messages/prompt
|
|
85
|
+
// only two need different defaults than generic defaults
|
|
86
|
+
switch (confirmType) {
|
|
87
|
+
case ConfirmType.CONFIRM_AND_CLOSE:
|
|
88
|
+
primary = { type: ActionType.PRIMARY, name: 'CONFIRM AND CLOSE',
|
|
89
|
+
internalAction: 'onConfirmClick', internalActionReturnValue: true };
|
|
90
|
+
break;
|
|
91
|
+
case ConfirmType.ALERT:
|
|
92
|
+
primary = undefined;
|
|
93
|
+
secondary = { type: ActionType.SECONDARY, name: 'CLOSE',
|
|
94
|
+
internalAction: 'onClose' };
|
|
95
|
+
break;
|
|
96
|
+
// case ConfirmType.DELETE:
|
|
97
|
+
// case ConfirmType.DELETE_W_MESSAGE:
|
|
98
|
+
// case ConfirmType.DELETE_W_PROMPT:
|
|
99
|
+
// case ConfirmType.DISCARD:
|
|
100
|
+
// case ConfirmType.ADD:
|
|
101
|
+
// case ConfirmType.GENERIC:
|
|
102
|
+
default:
|
|
103
|
+
throw new Error('Confirm type doesn\'t exist');
|
|
104
|
+
}
|
|
105
|
+
var actions = [];
|
|
106
|
+
if (primary) {
|
|
107
|
+
actions.push(primary);
|
|
108
|
+
}
|
|
109
|
+
if (secondary) {
|
|
110
|
+
actions.push(secondary);
|
|
111
|
+
}
|
|
112
|
+
actionConfig = {
|
|
113
|
+
actions: actions
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return this.genericDialogContainer(ConfirmDialogComponent, title, icon, config, actionConfig);
|
|
117
|
+
};
|
|
118
|
+
DialogService.prototype.error = function (message, title, icon, config) {
|
|
119
|
+
return this.openDialog(message, title, DialogType.ERROR, icon, config);
|
|
120
|
+
};
|
|
121
|
+
DialogService.prototype.info = function (message, title, icon, config) {
|
|
122
|
+
return this.openDialog(message, title, DialogType.INFO, icon, config);
|
|
123
|
+
};
|
|
124
|
+
DialogService.prototype.createCustomDialog = function (tempRef, context, title, icon, config, actionConfig) {
|
|
125
|
+
var configuration = null;
|
|
126
|
+
if (!config) {
|
|
127
|
+
configuration = new MatDialogConfig();
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
configuration = config;
|
|
131
|
+
}
|
|
132
|
+
configuration.data = configuration.data ? configuration.data : {};
|
|
133
|
+
configuration.data.templateRef = tempRef;
|
|
134
|
+
configuration.data.title = title ? title : '';
|
|
135
|
+
configuration.data.icon = icon ? icon : '';
|
|
136
|
+
configuration.data.context = context;
|
|
137
|
+
if (actionConfig) {
|
|
138
|
+
configuration.data.actionConfig = actionConfig;
|
|
139
|
+
}
|
|
140
|
+
configuration.minWidth = configuration.minWidth ? configuration.minWidth : '10em';
|
|
141
|
+
configuration.width = configuration.width ? configuration.width : '30em';
|
|
142
|
+
configuration.panelClass = ['mx-sized-dialog', 'no-padding'];
|
|
143
|
+
configuration.disableClose = true;
|
|
144
|
+
configuration.hasBackdrop = true;
|
|
145
|
+
var dialogRef = this.dialog.open(CustomDialogComponent, configuration);
|
|
146
|
+
return dialogRef;
|
|
147
|
+
};
|
|
148
|
+
DialogService.prototype.startDefaultSpinnerDialog = function () {
|
|
149
|
+
return this.startSpinnerDialog('Please wait...', 3, 30);
|
|
150
|
+
};
|
|
151
|
+
DialogService.prototype.startSpinnerDialog = function (message, strokeWidth, diameter) {
|
|
152
|
+
var _this = this;
|
|
153
|
+
if (this._spinnerDialogIsOpen) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
this._spinnerDialogIsOpen = true;
|
|
157
|
+
var configuration = new MatDialogConfig();
|
|
158
|
+
configuration.data = {
|
|
159
|
+
message: message,
|
|
160
|
+
strokeWidth: strokeWidth,
|
|
161
|
+
diameter: diameter
|
|
162
|
+
};
|
|
163
|
+
configuration.width = '13em';
|
|
164
|
+
configuration.disableClose = true;
|
|
165
|
+
var dialogRef = this.dialog.open(SpinnerDialogComponent, configuration);
|
|
166
|
+
dialogRef.afterClosed().subscribe(function () {
|
|
167
|
+
_this._spinnerDialogIsOpen = false;
|
|
168
|
+
});
|
|
169
|
+
this.spinnerDialogRefs.push(dialogRef);
|
|
170
|
+
return dialogRef;
|
|
171
|
+
};
|
|
172
|
+
DialogService.prototype.startNonModalSpinnerDialog = function (message, strokeWidth, diameter) {
|
|
173
|
+
var _this = this;
|
|
174
|
+
if (this._spinnerDialogIsOpen) {
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
this._spinnerDialogIsOpen = true;
|
|
178
|
+
var configuration = new MatDialogConfig();
|
|
179
|
+
configuration.data = {
|
|
180
|
+
message: message,
|
|
181
|
+
strokeWidth: strokeWidth,
|
|
182
|
+
diameter: diameter
|
|
183
|
+
};
|
|
184
|
+
configuration.width = '13em';
|
|
185
|
+
configuration.disableClose = true;
|
|
186
|
+
configuration.hasBackdrop = false;
|
|
187
|
+
var dialogRef = this.dialog.open(SpinnerDialogComponent, configuration);
|
|
188
|
+
dialogRef.afterClosed().subscribe(function () {
|
|
189
|
+
_this._spinnerDialogIsOpen = false;
|
|
190
|
+
});
|
|
191
|
+
this.spinnerDialogRefs.push(dialogRef);
|
|
192
|
+
return dialogRef;
|
|
193
|
+
};
|
|
194
|
+
// Let there be an alternative, global way to stop all active spinner dialogs.
|
|
195
|
+
DialogService.prototype.stopAllSpinnerDialogs = function () {
|
|
196
|
+
var e_1, _a;
|
|
197
|
+
this.spinnerWorkItemCount = 0;
|
|
198
|
+
var _loop_1 = function (dialogRef) {
|
|
199
|
+
setTimeout(function () {
|
|
200
|
+
dialogRef.close();
|
|
201
|
+
});
|
|
202
|
+
};
|
|
203
|
+
try {
|
|
204
|
+
for (var _b = __values(this.spinnerDialogRefs), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
205
|
+
var dialogRef = _c.value;
|
|
206
|
+
_loop_1(dialogRef);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
210
|
+
finally {
|
|
211
|
+
try {
|
|
212
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
213
|
+
}
|
|
214
|
+
finally { if (e_1) throw e_1.error; }
|
|
215
|
+
}
|
|
216
|
+
this.spinnerDialogRefs = [];
|
|
217
|
+
};
|
|
218
|
+
DialogService.prototype.addSpinnerWorkItem = function () {
|
|
219
|
+
var _this = this;
|
|
220
|
+
this.spinnerWorkItemCount++;
|
|
221
|
+
if (!this.checkingSpinnerWorkItems) {
|
|
222
|
+
this.checkingSpinnerWorkItems = true;
|
|
223
|
+
setTimeout(function () {
|
|
224
|
+
_this.checkSpinnerWorkItems();
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
DialogService.prototype.removeSpinnerWorkItem = function () {
|
|
229
|
+
var _this = this;
|
|
230
|
+
this.spinnerWorkItemCount--;
|
|
231
|
+
if (this.spinnerWorkItemCount < 0) {
|
|
232
|
+
this.spinnerWorkItemCount = 0;
|
|
233
|
+
}
|
|
234
|
+
if (!this.checkingSpinnerWorkItems) {
|
|
235
|
+
this.checkingSpinnerWorkItems = true;
|
|
236
|
+
setTimeout(function () {
|
|
237
|
+
_this.checkSpinnerWorkItems();
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
DialogService.prototype.checkSpinnerWorkItems = function () {
|
|
242
|
+
this.checkingSpinnerWorkItems = false;
|
|
243
|
+
if (this.spinnerWorkItemCount) {
|
|
244
|
+
if (!this._spinnerDialogIsOpen) {
|
|
245
|
+
this.startDefaultSpinnerDialog();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else if (this._spinnerDialogIsOpen) {
|
|
249
|
+
this.stopAllSpinnerDialogs();
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
DialogService.prototype.genericDialogContainer = function (dialogContent, title, icon, config, actionConfig) {
|
|
253
|
+
var configuration = null;
|
|
254
|
+
if (!config) {
|
|
255
|
+
configuration = new MatDialogConfig();
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
configuration = config;
|
|
259
|
+
}
|
|
260
|
+
configuration.data = configuration.data ? configuration.data : {};
|
|
261
|
+
configuration.data.dialogContent = dialogContent;
|
|
262
|
+
configuration.data.title = title;
|
|
263
|
+
if (icon) {
|
|
264
|
+
configuration.data.icon = icon;
|
|
265
|
+
}
|
|
266
|
+
if (actionConfig) {
|
|
267
|
+
configuration.data.actionConfig = actionConfig;
|
|
268
|
+
}
|
|
269
|
+
configuration.panelClass = ['mx-sized-dialog', 'no-padding'];
|
|
270
|
+
configuration.disableClose = true;
|
|
271
|
+
configuration.hasBackdrop = true;
|
|
272
|
+
var dialogRef = this.dialog.open(GenericContainerDialogComponent, configuration);
|
|
273
|
+
return dialogRef.afterClosed();
|
|
274
|
+
};
|
|
275
|
+
DialogService.prototype.openDialog = function (message, title, type, icon, config) {
|
|
276
|
+
var configuration = null;
|
|
277
|
+
if (!config) {
|
|
278
|
+
configuration = new MatDialogConfig();
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
configuration = config;
|
|
282
|
+
}
|
|
283
|
+
configuration.data = configuration.data ? configuration.data : {};
|
|
284
|
+
configuration.data.message = message;
|
|
285
|
+
configuration.data.title = title ? title : '';
|
|
286
|
+
configuration.data.icon = icon ? icon : '';
|
|
287
|
+
configuration.data.dialogType = type ? type : '';
|
|
288
|
+
configuration.maxWidth = configuration.maxWidth ? configuration.maxWidth : '80vw';
|
|
289
|
+
configuration.maxHeight = configuration.maxHeight ? configuration.maxHeight : '80vh';
|
|
290
|
+
configuration.minWidth = configuration.minWidth ? configuration.minWidth : '30em';
|
|
291
|
+
configuration.panelClass = 'no-padding';
|
|
292
|
+
configuration.disableClose = true;
|
|
293
|
+
configuration.autoFocus = false;
|
|
294
|
+
configuration.hasBackdrop = false;
|
|
295
|
+
var dialogRef;
|
|
296
|
+
dialogRef = this.dialog.open(AlertDialogComponent, configuration);
|
|
297
|
+
return dialogRef.afterClosed();
|
|
298
|
+
};
|
|
299
|
+
DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DialogService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
300
|
+
DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DialogService });
|
|
301
|
+
return DialogService;
|
|
302
|
+
}());
|
|
303
|
+
export { DialogService };
|
|
304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DialogService, decorators: [{
|
|
305
|
+
type: Injectable
|
|
306
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialog }]; } });
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9kaWFsb2cvIiwic291cmNlcyI6WyJzZXJ2aWNlL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQWdCLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUlwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUM5RixPQUFPLEVBQUMsVUFBVSxFQUFpQixNQUFNLHNDQUFzQyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0scUNBQXFDLENBQUM7OztBQUkzRTtJQWFJLHVCQUFvQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBVjdCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3Qix5QkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDekIsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBRWxDLHNCQUFpQixHQUEyQyxFQUFFLENBQUM7SUFPdEUsQ0FBQztJQUxELHNCQUFXLDhDQUFtQjthQUE5QjtZQUNJLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBQ3JDLENBQUM7OztPQUFBO0lBS00sNkJBQUssR0FBWixVQUFhLE9BQTBCLEVBQUUs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VUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFakQsYUFBYSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbEYsYUFBYSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckYsYUFBYSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFbEYsYUFBYSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7UUFDeEMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDbEMsYUFBYSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDaEMsYUFBYSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFbEMsSUFBSSxTQUE2QyxDQUFDO1FBRWxELFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVsRSxPQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDOytHQTFUUSxhQUFhO21IQUFiLGFBQWE7d0JBakIxQjtDQThVQyxBQTlURCxJQThUQztTQTdUWSxhQUFhOzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIFRlbXBsYXRlUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBBbGVydERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTcGlubmVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vc3Bpbm5lci9zcGlubmVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0N1c3RvbURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vY3VzdG9tL2N1c3RvbS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtHZW5lcmljQ29udGFpbmVyRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuLi9nZW5lcmljL2dlbmVyaWMtY29udGFpbmVyLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0FjdGlvblR5cGUsIEdEQWN0aW9uQ29uZmlnfSBmcm9tICcuLi9tb2RlbC9nZW5lcmljLWRpYWxvZy1hY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQge0RpYWxvZ1R5cGV9IGZyb20gJy4uL21vZGVsL2RpYWxvZy10eXBlLm1vZGVsJztcclxuaW1wb3J0IHtDb25maXJtVHlwZX0gZnJvbSAnLi4vbW9kZWwvY29uZmlybS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHtDb25maXJtRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuLi9jb25maXJtL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgX3NwaW5uZXJEaWFsb2dJc09wZW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc3Bpbm5lcldvcmtJdGVtQ291bnQgPSAwO1xyXG4gICAgcHJpdmF0ZSBjaGVja2luZ1NwaW5uZXJXb3JrSXRlbXMgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc3Bpbm5lckRpYWxvZ1JlZnM6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PltdID0gW107XHJcblxyXG4gICAgcHVibGljIGdldCBzcGlubmVyRGlhbG9nSXNPcGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWxlcnQobWVzc2FnZTogc3RyaW5nIHwgc3RyaW5nW10sIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgIGRpYWxvZ1R5cGU/OiBEaWFsb2dUeXBlLCBpY29uPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgIGNvbmZpZz86IE1hdERpYWxvZ0NvbmZpZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5EaWFsb2cobWVzc2FnZSwgdGl0bGUsIGRpYWxvZ1R5cGUgPyBkaWFsb2dUeXBlIDogRGlhbG9nVHlwZS5BTEVSVCwgaWNvbiwgY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uZmlybShtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICBpY29uPzogc3RyaW5nLCBjb25maWc/OiBNYXREaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuRGlhbG9nKG1lc3NhZ2UsIHRpdGxlLCBEaWFsb2dUeXBlLkNPTkZJUk0sIGljb24sIGNvbmZpZyk7XHJcblxyXG4gICAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB3aXRoIGRpZmZlcmVudCBkaXNwbGF5IGRlcGVuZGluZyBvblxyXG4gICAqIHRoZSBDb25maXJtVHlwZS5cclxuICAgKiBAcGFyYW0gdGl0bGUgZGVmYXVsdHMgdG8gJ0NvbmZpcm0nXHJcbiAgICogQHBhcmFtIGljb24gZGVmYXVsdHMgdG8gJ2ZhIGZhLWluZm8tY2lyY2xlJ1xyXG4gICAqIEBwYXJhbSBjb25maWcgY29uZmlnLmRhdGEgY2FuIGNvbnRhaW4gYSBwcm9tcHQsIG1lc3NhZ2UxIGFuZC9vclxyXG4gICAqIG1lc3NhZ2UyIGFjY29yZGluZyB0byB0aGUgQ29uZmlybVR5cGUgY2hvc2VuXHJcbiAgICogQHBhcmFtIGFjdGlvbkNvbmZpZyBzZXRzIHVwIHRoZSBkaWFsb2cgYnV0dG9ucyBhbmQgYWN0aW9ucyBpZiB5b3Ugd2FudFxyXG4gICAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0c1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjb25maXJtQnlUeXBlKGNvbmZpcm1UeXBlOiBDb25maXJtVHlwZSwgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWNvbj86IHN0cmluZywgY29uZmlnPzogTWF0RGlhbG9nQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvbmZpZz86IEdEQWN0aW9uQ29uZmlnKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRpdGxlKXtcclxuICAgICAgdGl0bGUgPSAnQ29uZmlybSc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpY29uKXtcclxuICAgICAgaWNvbiA9ICdmYSBmYS1pbmZvLWNpcmNsZSc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHVwIGEgZGVmYXVsdCBpZiBuZWVkZWRcclxuICAgIGlmICghY29uZmlnKXtcclxuICAgICAgY29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZzxhbnk+KCk7XHJcbiAgICAgIGNvbmZpZy53aWR0aCA9ICczM3Z3JztcclxuICAgICAgY29uZmlnLm1pbldpZHRoID0gJzMwMHB4JztcclxuICAgICAgY29uZmlnLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5kYXRhKXtcclxuICAgICAgY29uZmlnLmRhdGEuY29uZmlybVR5cGUgPSBjb25maXJtVHlwZTtcclxuICAgIH1lbHNlIHtcclxuICAgICAgY29uZmlnLmRhdGEgPSB7XHJcbiAgICAgICAgY29uZmlybVR5cGVcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBubyBhY3Rpb25zIHBhc3NlZCBpbiwgc2V0IHVwIHRoZSBkZWZhdWx0c1xyXG4gICAgaWYgKCFhY3Rpb25Db25maWcpe1xyXG5cclxuICAgICAgLy8gZGVmYXVsdCBhY3Rpb25zXHJcbiAgICAgIGxldCBwcmltYXJ5ID0ge3R5cGU6IEFjdGlvblR5cGUuUFJJTUFSWSwgbmFtZTogJ1lFUycsXHJcbiAgICAgICAgaW50ZXJuYWxBY3Rpb246ICdvbkNvbmZpcm1DbGljaycsIGludGVybmFsQWN0aW9uUmV0dXJuVmFsdWU6IHRydWV9O1xyXG4gICAgICBsZXQgc2Vjb25kYXJ5ID0ge3R5cGU6IEFjdGlvblR5cGUuU0VDT05EQVJZLCBuYW1lOiAnR08gQkFDSycsXHJcbiAgICAgICAgaW50ZXJuYWxBY3Rpb246ICdvbkNsb3NlJ307XHJcblxyXG4gICAgICAvLyBieSBlbnVtIHR5cGUsIHNldHVwIHRoZSBtZXNzYWdlcy9wcm9tcHRcclxuICAgICAgLy8gb25seSB0d28gbmVlZCBkaWZmZXJlbnQgZGVmYXVsdHMgdGhhbiBnZW5lcmljIGRlZmF1bHRzXHJcbiAgICAgIHN3aXRjaCAoY29uZmlybVR5cGUpIHtcclxuICAgICAgICBjYXNlIENvbmZpcm1UeXBlLkNPTkZJUk1fQU5EX0NMT1NFOlxyXG4gICAgICAgICAgcHJpbWFyeSA9IHt0eXBlOiBBY3Rpb25UeXBlLlBSSU1BUlksIG5hbWU6ICdDT05GSVJNIEFORCBDTE9TRScsXHJcbiAgICAgICAgICAgIGludGVybmFsQWN0aW9uOiAnb25Db25maXJtQ2xpY2snLCBpbnRlcm5hbEFjdGlvblJldHVyblZhbHVlOiB0cnVlfTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ29uZmlybVR5cGUuQUxFUlQ6XHJcbiAgICAgICAgICBwcmltYXJ5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgc2Vjb25kYXJ5ID0ge3R5cGU6IEFjdGlvblR5cGUuU0VDT05EQVJZLCBuYW1lOiAnQ0xPU0UnLFxyXG4gICAgICAgICAgICBpbnRlcm5hbEFjdGlvbjogJ29uQ2xvc2UnfTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIC8vIGNhc2UgQ29uZmlybVR5cGUuREVMRVRFOlxyXG4gICAgICAgIC8vIGNhc2UgQ29uZmlybVR5cGUuREVMRVRFX1dfTUVTU0FHRTpcclxuICAgICAgICAvLyBjYXNlIENvbmZpcm1UeXBlLkRFTEVURV9XX1BST01QVDpcclxuICAgICAgICAvLyBjYXNlIENvbmZpcm1UeXBlLkRJU0NBUkQ6XHJcbiAgICAgICAgLy8gY2FzZSBDb25maXJtVHlwZS5BREQ6XHJcbiAgICAgICAgLy8gY2FzZSBDb25maXJtVHlwZS5HRU5FUklDOlxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZpcm0gdHlwZSBkb2VzblxcJ3QgZXhpc3QnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYWN0aW9ucyA9IFtdO1xyXG4gICAgICBpZiAocHJpbWFyeSl7XHJcbiAgICAgICAgYWN0aW9ucy5wdXNoKHByaW1hcnkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZWNvbmRhcnkpe1xyXG4gICAgICAgIGFjdGlvbnMucHVzaChzZWNvbmRhcnkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBhY3Rpb25Db25maWcgPSB7XHJcbiAgICAgICAgYWN0aW9uc1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmdlbmVyaWNEaWFsb2dDb250YWluZXIoQ29uZmlybURpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgdGl0bGUsIGljb24sIGNvbmZpZywgYWN0aW9uQ29uZmlnKTtcclxuICB9XHJcblxyXG4gICAgcHVibGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdLCB0aXRsZT86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICBpY29uPzogc3RyaW5nLCBjb25maWc/OiBNYXREaWFsb2dDb25maWcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5vcGVuRGlhbG9nKG1lc3NhZ2UsIHRpdGxlLCBEaWFsb2dUeXBlLkVSUk9SLCBpY29uLCBjb25maWcpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdLCB0aXRsZT86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgIGljb24/OiBzdHJpbmcsIGNvbmZpZz86IE1hdERpYWxvZ0NvbmZpZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5EaWFsb2cobWVzc2FnZSwgdGl0bGUsIERpYWxvZ1R5cGUuSU5GTywgaWNvbiwgY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY3JlYXRlQ3VzdG9tRGlhbG9nKHRlbXBSZWY6IFRlbXBsYXRlUmVmPGFueT4sIGNvbnRleHQ/OiBhbnksIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPzogc3RyaW5nLCBjb25maWc/OiBNYXREaWFsb2dDb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvbmZpZz86IEdEQWN0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgbGV0IGNvbmZpZ3VyYXRpb246IE1hdERpYWxvZ0NvbmZpZyA9IG51bGw7XHJcbiAgICAgICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhID0gY29uZmlndXJhdGlvbi5kYXRhID8gY29uZmlndXJhdGlvbi5kYXRhIDoge307XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLnRlbXBsYXRlUmVmID0gdGVtcFJlZjtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEudGl0bGUgPSB0aXRsZSA/IHRpdGxlIDogJyc7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLmljb24gPSBpY29uID8gaWNvbiA6ICcnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5jb250ZXh0ID0gY29udGV4dDtcclxuICAgICAgICBpZiAoYWN0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5hY3Rpb25Db25maWcgPSBhY3Rpb25Db25maWc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25maWd1cmF0aW9uLm1pbldpZHRoID0gY29uZmlndXJhdGlvbi5taW5XaWR0aCA/IGNvbmZpZ3VyYXRpb24ubWluV2lkdGggOiAnMTBlbSc7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi53aWR0aCA9IGNvbmZpZ3VyYXRpb24ud2lkdGggPyBjb25maWd1cmF0aW9uLndpZHRoIDogJzMwZW0nO1xyXG5cclxuICAgICAgICBjb25maWd1cmF0aW9uLnBhbmVsQ2xhc3MgPSBbJ214LXNpemVkLWRpYWxvZycsICduby1wYWRkaW5nJ107XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uaGFzQmFja2Ryb3AgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEN1c3RvbURpYWxvZ0NvbXBvbmVudCwgY29uZmlndXJhdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0RGVmYXVsdFNwaW5uZXJEaWFsb2coKTogTWF0RGlhbG9nUmVmPFNwaW5uZXJEaWFsb2dDb21wb25lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFNwaW5uZXJEaWFsb2coJ1BsZWFzZSB3YWl0Li4uJywgMywgMzApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydFNwaW5uZXJEaWFsb2cobWVzc2FnZTogc3RyaW5nLCBzdHJva2VXaWR0aDogbnVtYmVyLCBkaWFtZXRlcjogbnVtYmVyKTogTWF0RGlhbG9nUmVmPFNwaW5uZXJEaWFsb2dDb21wb25lbnQ+IHtcclxuICAgICAgICBpZiAodGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4gPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uOiBNYXREaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKCk7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhID0ge1xyXG4gICAgICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aCxcclxuICAgICAgICAgICAgZGlhbWV0ZXJcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ud2lkdGggPSAnMTNlbSc7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kaXNhYmxlQ2xvc2UgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiA9IHRoaXMuZGlhbG9nLm9wZW4oU3Bpbm5lckRpYWxvZ0NvbXBvbmVudCwgY29uZmlndXJhdGlvbik7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4gPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zcGlubmVyRGlhbG9nUmVmcy5wdXNoKGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWY7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXJ0Tm9uTW9kYWxTcGlubmVyRGlhbG9nKG1lc3NhZ2U6IHN0cmluZywgc3Ryb2tlV2lkdGg6IG51bWJlciwgZGlhbWV0ZXI6IG51bWJlcik6IE1hdERpYWxvZ1JlZjxTcGlubmVyRGlhbG9nQ29tcG9uZW50PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zcGlubmVyRGlhbG9nSXNPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbjogTWF0RGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YSA9IHtcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGgsXHJcbiAgICAgICAgICAgIGRpYW1ldGVyXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLndpZHRoID0gJzEzZW0nO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmhhc0JhY2tkcm9wID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNwaW5uZXJEaWFsb2dDb21wb25lbnQ+ID0gdGhpcy5kaWFsb2cub3BlbihTcGlubmVyRGlhbG9nQ29tcG9uZW50LCBjb25maWd1cmF0aW9uKTtcclxuXHJcbiAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNwaW5uZXJEaWFsb2dSZWZzLnB1c2goZGlhbG9nUmVmKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMZXQgdGhlcmUgYmUgYW4gYWx0ZXJuYXRpdmUsIGdsb2JhbCB3YXkgdG8gc3RvcCBhbGwgYWN0aXZlIHNwaW5uZXIgZGlhbG9ncy5cclxuICAgIHB1YmxpYyBzdG9wQWxsU3Bpbm5lckRpYWxvZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyV29ya0l0ZW1Db3VudCA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBkaWFsb2dSZWYgb2YgdGhpcy5zcGlubmVyRGlhbG9nUmVmcykge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zcGlubmVyRGlhbG9nUmVmcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRTcGlubmVyV29ya0l0ZW0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyV29ya0l0ZW1Db3VudCsrO1xyXG4gICAgICAgIGlmICghdGhpcy5jaGVja2luZ1NwaW5uZXJXb3JrSXRlbXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2luZ1NwaW5uZXJXb3JrSXRlbXMgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTcGlubmVyV29ya0l0ZW1zKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlU3Bpbm5lcldvcmtJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lcldvcmtJdGVtQ291bnQtLTtcclxuICAgICAgICBpZiAodGhpcy5zcGlubmVyV29ya0l0ZW1Db3VudCA8IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zcGlubmVyV29ya0l0ZW1Db3VudCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja2luZ1NwaW5uZXJXb3JrSXRlbXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2luZ1NwaW5uZXJXb3JrSXRlbXMgPSB0cnVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tTcGlubmVyV29ya0l0ZW1zKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrU3Bpbm5lcldvcmtJdGVtcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNoZWNraW5nU3Bpbm5lcldvcmtJdGVtcyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnNwaW5uZXJXb3JrSXRlbUNvdW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fc3Bpbm5lckRpYWxvZ0lzT3Blbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERlZmF1bHRTcGlubmVyRGlhbG9nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3NwaW5uZXJEaWFsb2dJc09wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9wQWxsU3Bpbm5lckRpYWxvZ3MoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdlbmVyaWNEaWFsb2dDb250YWluZXIoZGlhbG9nQ29udGVudDogYW55LCB0aXRsZTogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj86IHN0cmluZywgY29uZmlnPzogTWF0RGlhbG9nQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQ29uZmlnPzogR0RBY3Rpb25Db25maWcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGxldCBjb25maWd1cmF0aW9uOiBNYXREaWFsb2dDb25maWcgPSBudWxsO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEgPSBjb25maWd1cmF0aW9uLmRhdGEgPyBjb25maWd1cmF0aW9uLmRhdGEgOiB7fTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEuZGlhbG9nQ29udGVudCA9IGRpYWxvZ0NvbnRlbnQ7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgaWYgKGljb24pIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLmljb24gPSBpY29uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWN0aW9uQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS5hY3Rpb25Db25maWcgPSBhY3Rpb25Db25maWc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ucGFuZWxDbGFzcyA9IFsnbXgtc2l6ZWQtZGlhbG9nJywgJ25vLXBhZGRpbmcnXTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRpc2FibGVDbG9zZSA9IHRydWU7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5oYXNCYWNrZHJvcCA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihHZW5lcmljQ29udGFpbmVyRGlhbG9nQ29tcG9uZW50LCBjb25maWd1cmF0aW9uKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb3BlbkRpYWxvZyhtZXNzYWdlOiBzdHJpbmcgfCBzdHJpbmdbXSwgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgdHlwZT86IERpYWxvZ1R5cGUsIGljb24/OiBzdHJpbmcsIGNvbmZpZz86IE1hdERpYWxvZ0NvbmZpZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgbGV0IGNvbmZpZ3VyYXRpb246IE1hdERpYWxvZ0NvbmZpZyA9IG51bGw7XHJcbiAgICAgICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbiA9IG5ldyBNYXREaWFsb2dDb25maWcoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhID0gY29uZmlndXJhdGlvbi5kYXRhID8gY29uZmlndXJhdGlvbi5kYXRhIDoge307XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGF0YS50aXRsZSA9IHRpdGxlID8gdGl0bGUgOiAnJztcclxuICAgICAgICBjb25maWd1cmF0aW9uLmRhdGEuaWNvbiA9IGljb24gPyBpY29uIDogJyc7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5kYXRhLmRpYWxvZ1R5cGUgPSB0eXBlID8gdHlwZSA6ICcnO1xyXG5cclxuICAgICAgICBjb25maWd1cmF0aW9uLm1heFdpZHRoID0gY29uZmlndXJhdGlvbi5tYXhXaWR0aCA/IGNvbmZpZ3VyYXRpb24ubWF4V2lkdGggOiAnODB2dyc7XHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5tYXhIZWlnaHQgPSBjb25maWd1cmF0aW9uLm1heEhlaWdodCA/IGNvbmZpZ3VyYXRpb24ubWF4SGVpZ2h0IDogJzgwdmgnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24ubWluV2lkdGggPSBjb25maWd1cmF0aW9uLm1pbldpZHRoID8gY29uZmlndXJhdGlvbi5taW5XaWR0aCA6ICczMGVtJztcclxuXHJcbiAgICAgICAgY29uZmlndXJhdGlvbi5wYW5lbENsYXNzID0gJ25vLXBhZGRpbmcnO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICBjb25maWd1cmF0aW9uLmF1dG9Gb2N1cyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbmZpZ3VyYXRpb24uaGFzQmFja2Ryb3AgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEFsZXJ0RGlhbG9nQ29tcG9uZW50PjtcclxuXHJcbiAgICAgICAgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBbGVydERpYWxvZ0NvbXBvbmVudCwgY29uZmlndXJhdGlvbik7XHJcblxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKTtcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Component, Inject, Input } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/material/dialog";
|
|
5
|
+
import * as i2 from "@angular/material/progress-spinner";
|
|
6
|
+
var SpinnerDialogComponent = /** @class */ (function () {
|
|
7
|
+
function SpinnerDialogComponent(dialogRef, data) {
|
|
8
|
+
this.dialogRef = dialogRef;
|
|
9
|
+
this.data = data;
|
|
10
|
+
this.strokeWidth = 3;
|
|
11
|
+
this.diameter = 30;
|
|
12
|
+
this.message = 'Loading...';
|
|
13
|
+
if (this.data) {
|
|
14
|
+
if (!!this.data.message) {
|
|
15
|
+
this.message = this.data.message;
|
|
16
|
+
}
|
|
17
|
+
if (!!this.data.diameter) {
|
|
18
|
+
this.diameter = this.data.diameter;
|
|
19
|
+
}
|
|
20
|
+
if (!!this.data.strokeWidth) {
|
|
21
|
+
this.strokeWidth = this.data.strokeWidth;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
SpinnerDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SpinnerDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
26
|
+
SpinnerDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SpinnerDialogComponent, selector: "hci-spinner-dialog", inputs: { strokeWidth: "strokeWidth", diameter: "diameter", message: "message" }, ngImport: i0, template: "<div mat-dialog-title class=\"not-rendered\">\r\n<!--<div mat-dialog-title>-->\r\n</div>\r\n<div mat-dialog-content class=\"full-height padded\">\r\n <div class=\"full-width full-height t\">\r\n <div class=\"tr\">\r\n <div class=\"td vertical-center\" [style.height.px]=\"diameter + 5\">\r\n <mat-spinner [hidden]=\"false\" strokeWidth=\"{{strokeWidth}}\" [diameter]=\"diameter\"></mat-spinner>\r\n </div>\r\n <div class=\"td vertical-center\">\r\n {{message}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div mat-dialog-actions class=\"not-rendered\">\r\n<!--<div mat-dialog-actions>-->\r\n</div>\r\n", styles: ["\n .t { display: table; }\n .tr { display: table-row; }\n .td { display: table-cell; }\n\n .full-height { height: 100%; }\n .full-width { width: 100%; }\n\n .vertical-center { vertical-align: middle; }\n\n .padded {\n padding-top: 0.4em;\n padding-bottom: 0.4em;\n }\n\n .not-rendered {\n padding: 0;\n margin: 0;\n\n min-height: 0;\n max-height: 0;\n height: 0;\n }\n\n "], components: [{ type: i2.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
|
|
27
|
+
return SpinnerDialogComponent;
|
|
28
|
+
}());
|
|
29
|
+
export { SpinnerDialogComponent };
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SpinnerDialogComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{
|
|
33
|
+
selector: 'hci-spinner-dialog',
|
|
34
|
+
templateUrl: 'spinner-dialog.component.html',
|
|
35
|
+
styles: ["\n .t { display: table; }\n .tr { display: table-row; }\n .td { display: table-cell; }\n\n .full-height { height: 100%; }\n .full-width { width: 100%; }\n\n .vertical-center { vertical-align: middle; }\n\n .padded {\n padding-top: 0.4em;\n padding-bottom: 0.4em;\n }\n\n .not-rendered {\n padding: 0;\n margin: 0;\n\n min-height: 0;\n max-height: 0;\n height: 0;\n }\n\n "]
|
|
36
|
+
}]
|
|
37
|
+
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
38
|
+
type: Inject,
|
|
39
|
+
args: [MAT_DIALOG_DATA]
|
|
40
|
+
}] }]; }, propDecorators: { strokeWidth: [{
|
|
41
|
+
type: Input
|
|
42
|
+
}], diameter: [{
|
|
43
|
+
type: Input
|
|
44
|
+
}], message: [{
|
|
45
|
+
type: Input
|
|
46
|
+
}] } });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvZGlhbG9nLyIsInNvdXJjZXMiOlsic3Bpbm5lci9zcGlubmVyLWRpYWxvZy5jb21wb25lbnQudHMiLCJzcGlubmVyL3NwaW5uZXItZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7O0FBRXZFO0lBbUNJLGdDQUFvQixTQUErQyxFQUN0QixJQUFJO1FBRDdCLGNBQVMsR0FBVCxTQUFTLENBQXNDO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQUE7UUFOeEMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLFlBQU8sR0FBRyxZQUFZLENBQUM7UUFJNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1gsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDcEM7WUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUN0QztZQUNELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQzVDO1NBQ0o7SUFDTCxDQUFDO3dIQW5CUSxzQkFBc0IsOENBT1gsZUFBZTs0R0FQMUIsc0JBQXNCLDRJQ2hDbkMsMnJCQWtCQTtpQ0RsQkE7Q0FzREMsQUFuREQsSUFtREM7U0F0Qlksc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBN0JsQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFdBQVcsRUFBRSwrQkFBK0I7b0JBQzVDLE1BQU0sRUFBRSxDQUFDLG1oQkF3QlIsQ0FBQztpQkFDTDs7MEJBUWdCLE1BQU07MkJBQUMsZUFBZTs0Q0FOMUIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdoY2ktc3Bpbm5lci1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdzcGlubmVyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZXM6IFtgXHJcbiAgICAgICAgLnQgIHsgZGlzcGxheTogdGFibGU7IH1cclxuICAgICAgICAudHIgeyBkaXNwbGF5OiB0YWJsZS1yb3c7IH1cclxuICAgICAgICAudGQgeyBkaXNwbGF5OiB0YWJsZS1jZWxsOyB9XHJcblxyXG4gICAgICAgIC5mdWxsLWhlaWdodCB7IGhlaWdodDogMTAwJTsgfVxyXG4gICAgICAgIC5mdWxsLXdpZHRoICB7IHdpZHRoOiAgMTAwJTsgfVxyXG5cclxuICAgICAgICAudmVydGljYWwtY2VudGVyIHsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfVxyXG5cclxuICAgICAgICAucGFkZGVkIHtcclxuICAgICAgICAgICAgcGFkZGluZy10b3A6IDAuNGVtO1xyXG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC40ZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubm90LXJlbmRlcmVkIHtcclxuICAgICAgICAgICAgcGFkZGluZzogMDtcclxuICAgICAgICAgICAgbWFyZ2luOiAgMDtcclxuXHJcbiAgICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XHJcbiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDA7XHJcbiAgICAgICAgICAgIGhlaWdodDogICAgIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTcGlubmVyRGlhbG9nQ29tcG9uZW50IHtcclxuICAgIEBJbnB1dCgpIHN0cm9rZVdpZHRoID0gMztcclxuICAgIEBJbnB1dCgpIGRpYW1ldGVyID0gMzA7XHJcblxyXG4gICAgQElucHV0KCkgbWVzc2FnZSA9ICdMb2FkaW5nLi4uJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNwaW5uZXJEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgZGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMuZGF0YS5tZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YS5kaWFtZXRlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFtZXRlciA9IHRoaXMuZGF0YS5kaWFtZXRlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEuc3Ryb2tlV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3Ryb2tlV2lkdGggPSB0aGlzLmRhdGEuc3Ryb2tlV2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxufVxyXG4iLCI8ZGl2IG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJub3QtcmVuZGVyZWRcIj5cclxuPCEtLTxkaXYgbWF0LWRpYWxvZy10aXRsZT4tLT5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGNsYXNzPVwiZnVsbC1oZWlnaHQgcGFkZGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZnVsbC13aWR0aCBmdWxsLWhlaWdodCB0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZCB2ZXJ0aWNhbC1jZW50ZXJcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImRpYW1ldGVyICsgNVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtoaWRkZW5dPVwiZmFsc2VcIiBzdHJva2VXaWR0aD1cInt7c3Ryb2tlV2lkdGh9fVwiIFtkaWFtZXRlcl09XCJkaWFtZXRlclwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGQgdmVydGljYWwtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICB7e21lc3NhZ2V9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgY2xhc3M9XCJub3QtcmVuZGVyZWRcIj5cclxuPCEtLTxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPi0tPlxyXG48L2Rpdj5cclxuIl19
|