@resolveio/client-lib-core 15.5.3 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/account-manager.service.mjs +229 -0
- package/esm2022/lib/auth/auth-guard.service.mjs +174 -0
- package/esm2022/lib/auth/auth-permissions.service.mjs +23 -0
- package/esm2022/lib/auth/auth.service.mjs +251 -0
- package/esm2022/lib/auth/auth365.component.mjs +51 -0
- package/esm2022/lib/auth/can-deactivate-guard.service.mjs +13 -0
- package/esm2022/lib/auth/enroll.component.mjs +88 -0
- package/esm2022/lib/auth/forgot-password.component.mjs +89 -0
- package/esm2022/lib/core.component.mjs +404 -0
- package/esm2022/lib/core.module.mjs +176 -0
- package/esm2022/lib/core.service.mjs +88 -0
- package/esm2022/lib/directive/focus.mjs +24 -0
- package/esm2022/lib/directive/scroll.mjs +54 -0
- package/esm2022/lib/home/home.component.mjs +84 -0
- package/esm2022/lib/logger/logger.component.mjs +229 -0
- package/esm2022/lib/models/app-status.model.mjs +2 -0
- package/esm2022/lib/models/collection-document.model.mjs +2 -0
- package/esm2022/lib/models/cron-job.model.mjs +2 -0
- package/esm2022/lib/models/dialog.model.mjs +2 -0
- package/esm2022/lib/models/file.model.mjs +2 -0
- package/esm2022/lib/models/log-method-latency.model.mjs +2 -0
- package/esm2022/lib/models/navbar-main-tab.model.mjs +2 -0
- package/esm2022/lib/models/pagination.model.mjs +2 -0
- package/esm2022/lib/models/permission.model.mjs +2 -0
- package/esm2022/lib/models/select-data-label.model.mjs +2 -0
- package/esm2022/lib/models/subscription.model.mjs +2 -0
- package/esm2022/lib/models/support-ticket.model.mjs +2 -0
- package/esm2022/lib/models/user-group.model.mjs +2 -0
- package/esm2022/lib/models/user.model.mjs +2 -0
- package/esm2022/lib/offline-db.mjs +519 -0
- package/esm2022/lib/offline-manager.service.mjs +109 -0
- package/esm2022/lib/pipes/domsanitizor.pipe.mjs +29 -0
- package/esm2022/lib/pipes/filter.pipe.mjs +36 -0
- package/esm2022/lib/pipes/json-parse.pipe.mjs +29 -0
- package/esm2022/lib/pipes/minus-currency.pipe.mjs +16 -0
- package/esm2022/lib/pipes/phone.pipe.mjs +47 -0
- package/esm2022/lib/pipes/pipe.module.mjs +54 -0
- package/esm2022/lib/pipes/reverse-list.pipe.mjs +17 -0
- package/esm2022/lib/pipes/titlecase.pipe.mjs +22 -0
- package/esm2022/lib/report-builder.permission.mjs +13 -0
- package/esm2022/lib/resolveio-class.mjs +50 -0
- package/esm2022/lib/shared/shared.module.mjs +96 -0
- package/esm2022/lib/socket-manager.service.mjs +340 -0
- package/esm2022/lib/socket.service.mjs +200 -0
- package/esm2022/lib/super-admin.permission.mjs +9 -0
- package/esm2022/lib/support-ticket/detail/support-ticket-detail.component.mjs +211 -0
- package/esm2022/lib/support-ticket/edit/support-ticket-edit.component.mjs +131 -0
- package/esm2022/lib/support-ticket/list/support-ticket-list.component.mjs +142 -0
- package/esm2022/lib/support-ticket/new/support-ticket-new.component.mjs +121 -0
- package/esm2022/lib/support-ticket/support-ticket.component.mjs +67 -0
- package/esm2022/lib/support-ticket/support-ticket.module.mjs +50 -0
- package/esm2022/lib/support-ticket/support-ticket.routing.mjs +20 -0
- package/esm2022/lib/support-ticket/support-ticket.service.mjs +16 -0
- package/esm2022/lib/token-manager.service.mjs +25 -0
- package/esm2022/lib/user-settings/settings/users-settings.component.mjs +302 -0
- package/esm2022/lib/user-settings/user-settings.component.mjs +61 -0
- package/esm2022/lib/user-settings/user-settings.module.mjs +41 -0
- package/esm2022/lib/user-settings/user-settings.permission.mjs +10 -0
- package/esm2022/lib/user-settings/user-settings.routing.mjs +14 -0
- package/esm2022/lib/user-settings/user-settings.service.mjs +16 -0
- package/esm2022/lib/util/action-name.helper.mjs +9 -0
- package/esm2022/lib/util/aws.service.mjs +80 -0
- package/esm2022/lib/util/common.helper.mjs +133 -0
- package/esm2022/lib/util/validation.service.mjs +185 -0
- package/esm2022/lib/util/window-resize.service.mjs +38 -0
- package/esm2022/lib/util/window.service.mjs +16 -0
- package/esm2022/lib/widgets/alert/alert.model.mjs +2 -0
- package/esm2022/lib/widgets/alert/alert.service.mjs +79 -0
- package/esm2022/lib/widgets/collapse-table/collapse-table.component.mjs +83 -0
- package/esm2022/lib/widgets/collapse-table/collapse-table.module.mjs +34 -0
- package/esm2022/lib/widgets/data-table/data-table.component.mjs +84 -0
- package/esm2022/lib/widgets/data-table/data-table.model.mjs +2 -0
- package/esm2022/lib/widgets/data-table/data-table.module.mjs +41 -0
- package/esm2022/lib/widgets/date-shortcut/date-shortcut.component.mjs +198 -0
- package/esm2022/lib/widgets/date-shortcut/date-shortcut.module.mjs +32 -0
- package/esm2022/lib/widgets/dialog/dialog.confirm.content.mjs +67 -0
- package/esm2022/lib/widgets/dialog/dialog.error.content.mjs +60 -0
- package/esm2022/lib/widgets/dialog/dialog.input.content.mjs +200 -0
- package/esm2022/lib/widgets/dialog/dialog.login.content.mjs +354 -0
- package/esm2022/lib/widgets/dialog/dialog.notify.content.mjs +60 -0
- package/esm2022/lib/widgets/dialog/dialog.register.content.mjs +333 -0
- package/esm2022/lib/widgets/dialog/dialog.select-array-objs.content.mjs +203 -0
- package/esm2022/lib/widgets/dialog/dialog.select-array.content.mjs +310 -0
- package/esm2022/lib/widgets/dialog/dialog.select-data-labels.content.mjs +196 -0
- package/esm2022/lib/widgets/dialog/dialog.select-datetime.content.mjs +191 -0
- package/esm2022/lib/widgets/dialog/dialog.select-with-buttons-url.content.mjs +166 -0
- package/esm2022/lib/widgets/dialog/dialog.service.mjs +98 -0
- package/esm2022/lib/widgets/file/file-upload.component.mjs +433 -0
- package/esm2022/lib/widgets/file/file-upload.module.mjs +48 -0
- package/esm2022/lib/widgets/form-button/form-button.component.mjs +97 -0
- package/esm2022/lib/widgets/form-button/form-button.module.mjs +28 -0
- package/esm2022/lib/widgets/navbar-main/navbar-main.component.mjs +222 -0
- package/esm2022/lib/widgets/navbar-module/navbar-module.component.mjs +108 -0
- package/esm2022/lib/widgets/navbar-module/navbar-module.model.mjs +2 -0
- package/esm2022/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +41 -0
- package/esm2022/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +24 -0
- package/esm2022/lib/widgets/scheduler/scheduler.component.mjs +186 -0
- package/esm2022/lib/widgets/scheduler/scheduler.module.mjs +37 -0
- package/esm2022/lib/widgets/sort-table/sort-table-header.component.mjs +72 -0
- package/esm2022/lib/widgets/sort-table/sort-table-ngfor.component.mjs +49 -0
- package/esm2022/lib/widgets/sort-table/sort-table.directive.mjs +177 -0
- package/esm2022/lib/widgets/sort-table/sort-table.module.mjs +38 -0
- package/esm2022/lib/widgets/user-role/user-role.component.mjs +29 -0
- package/esm2022/lib/widgets/user-role/user-role.module.mjs +24 -0
- package/esm2022/public_api.mjs +91 -0
- package/esm2022/resolveio-client-lib-core.mjs +5 -0
- package/fesm2022/resolveio-client-lib-core.mjs +9019 -0
- package/fesm2022/resolveio-client-lib-core.mjs.map +1 -0
- package/index.d.ts +3 -0
- package/lib/auth/auth-guard.service.d.ts +2 -2
- package/lib/auth/can-deactivate-guard.service.d.ts +1 -2
- package/lib/core.component.d.ts +1 -2
- package/lib/core.module.d.ts +26 -29
- package/lib/directive/focus.d.ts +1 -1
- package/lib/directive/scroll.d.ts +1 -1
- package/lib/logger/logger.component.d.ts +0 -2
- package/lib/models/dialog.model.d.ts +1 -1
- package/lib/models/pagination.model.d.ts +1 -0
- package/lib/models/user-group.model.d.ts +0 -1
- package/lib/offline-db.d.ts +1 -5
- package/lib/offline-manager.service.d.ts +1 -4
- package/lib/socket-manager.service.d.ts +5 -34
- package/lib/socket.service.d.ts +3 -20
- package/lib/token-manager.service.d.ts +2 -4
- package/lib/util/aws.service.d.ts +1 -2
- package/lib/util/common.helper.d.ts +1 -3
- package/lib/util/window-resize.service.d.ts +6 -5
- package/lib/widgets/collapse-table/collapse-table.component.d.ts +1 -1
- package/lib/widgets/data-table/data-table.component.d.ts +1 -1
- package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +1 -5
- package/lib/widgets/dialog/dialog.confirm.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.error.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.input.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.login.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.notify.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-array-objs.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-array.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +1 -1
- package/lib/widgets/dialog/dialog.select-with-buttons-url.content.d.ts +1 -1
- package/lib/widgets/file/file-upload.component.d.ts +1 -1
- package/lib/widgets/file/file-upload.module.d.ts +2 -2
- package/lib/widgets/form-button/form-button.component.d.ts +1 -1
- package/lib/widgets/navbar-main/navbar-main.component.d.ts +1 -2
- package/lib/widgets/navbar-module/navbar-module.component.d.ts +1 -1
- package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +1 -1
- package/lib/widgets/sort-table/sort-table-header.component.d.ts +1 -1
- package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +1 -1
- package/lib/widgets/sort-table/sort-table.directive.d.ts +8 -1
- package/lib/widgets/user-role/user-role.component.d.ts +1 -1
- package/package.json +5 -6
- package/fesm2020/resolveio-client-lib-core.min.mjs +0 -1
- package/lib/logger/diff-viewer.component.d.ts +0 -35
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { UserSettingsService } from '../user-settings.service';
|
|
3
|
+
import { ProviderService, BaseComponent } from '../../resolveio-class';
|
|
4
|
+
import { AuthPermissionService } from '../../auth/auth-permissions.service';
|
|
5
|
+
import { DialogService } from '../../widgets/dialog/dialog.service';
|
|
6
|
+
import { Validators } from '@angular/forms';
|
|
7
|
+
import { toTitleCase } from '../../util/common.helper';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "../../auth/auth-permissions.service";
|
|
10
|
+
import * as i2 from "../user-settings.service";
|
|
11
|
+
import * as i3 from "../../resolveio-class";
|
|
12
|
+
import * as i4 from "../../widgets/dialog/dialog.service";
|
|
13
|
+
import * as i5 from "@angular/forms";
|
|
14
|
+
import * as i6 from "../../widgets/collapse-table/collapse-table.component";
|
|
15
|
+
import * as i7 from "@ng-bootstrap/ng-bootstrap";
|
|
16
|
+
import * as i8 from "../../widgets/form-button/form-button.component";
|
|
17
|
+
import * as i9 from "../../widgets/responsive-button-group/responsive-button-group.component";
|
|
18
|
+
import * as i10 from "@angular/common";
|
|
19
|
+
import * as i11 from "../../pipes/titlecase.pipe";
|
|
20
|
+
export class UsersSettingsComponent extends BaseComponent {
|
|
21
|
+
_aps;
|
|
22
|
+
_us;
|
|
23
|
+
_services;
|
|
24
|
+
_ds;
|
|
25
|
+
subscription$ = [];
|
|
26
|
+
form;
|
|
27
|
+
disableFormButton = false;
|
|
28
|
+
user;
|
|
29
|
+
client = '';
|
|
30
|
+
views = [];
|
|
31
|
+
hasSubmit = false;
|
|
32
|
+
constructor(_aps, _us, _services, _ds) {
|
|
33
|
+
super(_services);
|
|
34
|
+
this._aps = _aps;
|
|
35
|
+
this._us = _us;
|
|
36
|
+
this._services = _services;
|
|
37
|
+
this._ds = _ds;
|
|
38
|
+
}
|
|
39
|
+
ngOnInit() {
|
|
40
|
+
this._us.setSelectedUser('0');
|
|
41
|
+
this.client = this._services._app.client.getValue();
|
|
42
|
+
this.form = this._services._fb.group({
|
|
43
|
+
table_color: ['#3b3ee3', [Validators.required]],
|
|
44
|
+
table_font_color: ['#ffffff', [Validators.required]],
|
|
45
|
+
font_size: [12, [Validators.required, this._services._vs.wholeNumbersGreaterThanZero, this._services._vs.maxValue(18), this._services._vs.minValue(8)]],
|
|
46
|
+
secondary_table_color: ['#87ceeb', [Validators.required]],
|
|
47
|
+
secondary_table_font_color: ['#000000', [Validators.required]],
|
|
48
|
+
tertiary_table_color: ['#ff4500', [Validators.required]],
|
|
49
|
+
tertiary_table_font_color: ['#000000', [Validators.required]],
|
|
50
|
+
collapsable_menu: [true],
|
|
51
|
+
entries_per_page: ['25', [Validators.required]],
|
|
52
|
+
warning_color: ['#ffc107', [Validators.required]],
|
|
53
|
+
warning_font_color: ['#000000', [Validators.required]],
|
|
54
|
+
warning_hover_color: ['#e0a800', [Validators.required]],
|
|
55
|
+
success_color: ['#28a745', [Validators.required]],
|
|
56
|
+
success_font_color: ['#ffffff', [Validators.required]],
|
|
57
|
+
success_hover_color: ['#218838', [Validators.required]],
|
|
58
|
+
danger_color: ['#dc3545', [Validators.required]],
|
|
59
|
+
danger_font_color: ['#ffffff', [Validators.required]],
|
|
60
|
+
danger_hover_color: ['#c82333', [Validators.required]],
|
|
61
|
+
info_color: ['#17a2b8', [Validators.required]],
|
|
62
|
+
info_font_color: ['#ffffff', [Validators.required]],
|
|
63
|
+
info_hover_color: ['#138496', [Validators.required]],
|
|
64
|
+
primary_color: ['#007bff', [Validators.required]],
|
|
65
|
+
primary_font_color: ['#ffffff', [Validators.required]],
|
|
66
|
+
primary_hover_color: ['#0069d9', [Validators.required]],
|
|
67
|
+
secondary_color: ['#868e96', [Validators.required]],
|
|
68
|
+
secondary_font_color: ['#ffffff', [Validators.required]],
|
|
69
|
+
secondary_hover_color: ['#5a6268', [Validators.required]],
|
|
70
|
+
routing_preference: ['alwaysAsk'],
|
|
71
|
+
opening_route: ['/home']
|
|
72
|
+
});
|
|
73
|
+
if (this._services._account.getUser() && this._services._account.getUser().settings) {
|
|
74
|
+
this.form.patchValue(this._services._account.getUser().settings);
|
|
75
|
+
this._services._account.getUser().roles.groups.forEach(group => {
|
|
76
|
+
group.views.forEach(view => {
|
|
77
|
+
if (!this.views.some(a => a.value === view)) {
|
|
78
|
+
this.views.push({
|
|
79
|
+
value: view,
|
|
80
|
+
display: toTitleCase(view.replace('/', '').replace(new RegExp('/', 'g'), ' - '))
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
|
|
87
|
+
document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
|
|
88
|
+
document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
|
|
89
|
+
document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
|
|
90
|
+
document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
|
|
91
|
+
document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
|
|
92
|
+
document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
|
|
93
|
+
document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
|
|
94
|
+
document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
|
|
95
|
+
document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
|
|
96
|
+
document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
|
|
97
|
+
document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
|
|
98
|
+
document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
|
|
99
|
+
document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
|
|
100
|
+
document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
|
|
101
|
+
document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
|
|
102
|
+
document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
|
|
103
|
+
document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
|
|
104
|
+
document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
|
|
105
|
+
document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
|
|
106
|
+
document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
|
|
107
|
+
document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
|
|
108
|
+
document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
|
|
109
|
+
document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
|
|
110
|
+
document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
|
|
111
|
+
document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
|
|
112
|
+
document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
|
|
113
|
+
document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
|
|
114
|
+
document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
|
|
115
|
+
document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
|
|
116
|
+
document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
|
|
117
|
+
this.subscription$.push(this._services._account.user.subscribe(user => {
|
|
118
|
+
this.user = user;
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
ngOnDestroy() {
|
|
122
|
+
this.subscription$.forEach(sub => {
|
|
123
|
+
sub.unsubscribe();
|
|
124
|
+
});
|
|
125
|
+
if (!this.hasSubmit) {
|
|
126
|
+
this.submitForm(this.form);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
changePrimaryColor() {
|
|
130
|
+
document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
|
|
131
|
+
}
|
|
132
|
+
changePrimaryFontColor() {
|
|
133
|
+
document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
|
|
134
|
+
}
|
|
135
|
+
changePrimaryFontSize() {
|
|
136
|
+
document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
|
|
137
|
+
}
|
|
138
|
+
changeSecondaryColor() {
|
|
139
|
+
document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
|
|
140
|
+
}
|
|
141
|
+
changeSecondaryFontColor() {
|
|
142
|
+
document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
|
|
143
|
+
}
|
|
144
|
+
changeTertiaryColor() {
|
|
145
|
+
document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
|
|
146
|
+
}
|
|
147
|
+
changeTertiaryFontColor() {
|
|
148
|
+
document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
|
|
149
|
+
}
|
|
150
|
+
changeWarningColor() {
|
|
151
|
+
document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
|
|
152
|
+
document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
|
|
153
|
+
}
|
|
154
|
+
changeWarningHoverColor() {
|
|
155
|
+
document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
|
|
156
|
+
}
|
|
157
|
+
changeWarningFontColor() {
|
|
158
|
+
document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
|
|
159
|
+
}
|
|
160
|
+
changeSuccessColor() {
|
|
161
|
+
document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
|
|
162
|
+
document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
|
|
163
|
+
}
|
|
164
|
+
changeSuccessHoverColor() {
|
|
165
|
+
document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
|
|
166
|
+
}
|
|
167
|
+
changeSuccessFontColor() {
|
|
168
|
+
document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
|
|
169
|
+
}
|
|
170
|
+
changeDangerColor() {
|
|
171
|
+
document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
|
|
172
|
+
document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
|
|
173
|
+
}
|
|
174
|
+
changeDangerHoverColor() {
|
|
175
|
+
document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
|
|
176
|
+
}
|
|
177
|
+
changeDangerFontColor() {
|
|
178
|
+
document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
|
|
179
|
+
}
|
|
180
|
+
changeInfoColor() {
|
|
181
|
+
document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
|
|
182
|
+
document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
|
|
183
|
+
}
|
|
184
|
+
changeInfoHoverColor() {
|
|
185
|
+
document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
|
|
186
|
+
}
|
|
187
|
+
changeInfoFontColor() {
|
|
188
|
+
document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
|
|
189
|
+
}
|
|
190
|
+
changePrimaryButtonColor() {
|
|
191
|
+
document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
|
|
192
|
+
document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
|
|
193
|
+
}
|
|
194
|
+
changePrimaryHoverColor() {
|
|
195
|
+
document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
|
|
196
|
+
}
|
|
197
|
+
changePrimaryButtonFontColor() {
|
|
198
|
+
document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
|
|
199
|
+
}
|
|
200
|
+
changeSecondaryButtonColor() {
|
|
201
|
+
document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
|
|
202
|
+
document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
|
|
203
|
+
}
|
|
204
|
+
changeSecondaryHoverColor() {
|
|
205
|
+
document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
|
|
206
|
+
}
|
|
207
|
+
changeSecondaryButtonFontColor() {
|
|
208
|
+
document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
|
|
209
|
+
}
|
|
210
|
+
reset() {
|
|
211
|
+
this.form.controls.table_color.setValue('#3b3ee3');
|
|
212
|
+
this.form.controls.table_font_color.setValue('#ffffff');
|
|
213
|
+
this.form.controls.font_size.setValue(12);
|
|
214
|
+
this.form.controls.secondary_table_color.setValue('#87ceeb');
|
|
215
|
+
this.form.controls.secondary_table_font_color.setValue('#000000');
|
|
216
|
+
this.form.controls.tertiary_table_color.setValue('#ff4500');
|
|
217
|
+
this.form.controls.tertiary_table_font_color.setValue('#000000');
|
|
218
|
+
this.form.controls.collapsable_menu.setValue(true);
|
|
219
|
+
this.form.controls.entries_per_page.setValue('25');
|
|
220
|
+
this.form.controls.warning_color.setValue('#ffc107');
|
|
221
|
+
this.form.controls.warning_font_color.setValue('#000000');
|
|
222
|
+
this.form.controls.warning_hover_color.setValue('#e0a800');
|
|
223
|
+
this.form.controls.success_color.setValue('#28a745');
|
|
224
|
+
this.form.controls.success_font_color.setValue('#ffffff');
|
|
225
|
+
this.form.controls.success_hover_color.setValue('#218838');
|
|
226
|
+
this.form.controls.danger_color.setValue('#dc3545');
|
|
227
|
+
this.form.controls.danger_font_color.setValue('#ffffff');
|
|
228
|
+
this.form.controls.danger_hover_color.setValue('#c82333');
|
|
229
|
+
this.form.controls.info_color.setValue('#17a2b8');
|
|
230
|
+
this.form.controls.info_font_color.setValue('#ffffff');
|
|
231
|
+
this.form.controls.info_hover_color.setValue('#138496');
|
|
232
|
+
this.form.controls.primary_color.setValue('#007bff');
|
|
233
|
+
this.form.controls.primary_font_color.setValue('#ffffff');
|
|
234
|
+
this.form.controls.primary_hover_color.setValue('#0069d9');
|
|
235
|
+
this.form.controls.secondary_color.setValue('#868e96');
|
|
236
|
+
this.form.controls.secondary_font_color.setValue('#ffffff');
|
|
237
|
+
this.form.controls.secondary_hover_color.setValue('#5a6268');
|
|
238
|
+
document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
|
|
239
|
+
document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
|
|
240
|
+
document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
|
|
241
|
+
document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
|
|
242
|
+
document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
|
|
243
|
+
document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
|
|
244
|
+
document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
|
|
245
|
+
document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
|
|
246
|
+
document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
|
|
247
|
+
document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
|
|
248
|
+
document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
|
|
249
|
+
document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
|
|
250
|
+
document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
|
|
251
|
+
document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
|
|
252
|
+
document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
|
|
253
|
+
document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
|
|
254
|
+
document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
|
|
255
|
+
document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
|
|
256
|
+
document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
|
|
257
|
+
document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
|
|
258
|
+
document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
|
|
259
|
+
document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
|
|
260
|
+
document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
|
|
261
|
+
document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
|
|
262
|
+
document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
|
|
263
|
+
document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
|
|
264
|
+
document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
|
|
265
|
+
document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
|
|
266
|
+
document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
|
|
267
|
+
document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
|
|
268
|
+
document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
|
|
269
|
+
}
|
|
270
|
+
submitForm(form) {
|
|
271
|
+
this.hasSubmit = true;
|
|
272
|
+
this._services._socket.call('updateDocumentProps', 'users', this._services._account.getUser()._id, [
|
|
273
|
+
{ prop: 'settings', data: this.form.value }
|
|
274
|
+
], this._services._account.getUser().__v, (err, res) => {
|
|
275
|
+
if (res) {
|
|
276
|
+
this._services._alert.setAlert('success', 'Settings have been updated');
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
this._ds.error('Could not update settings');
|
|
280
|
+
this._services._socket.call('insertErrorLog', 'user settings - update user', [
|
|
281
|
+
this._services._account.getUser(), err
|
|
282
|
+
]);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UsersSettingsComponent, deps: [{ token: i1.AuthPermissionService }, { token: i2.UserSettingsService }, { token: i3.ProviderService }, { token: i4.DialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
287
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UsersSettingsComponent, selector: "ng-component", providers: [ProviderService], usesInheritance: true, ngImport: i0, template: "<style>\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n</style>\n\n<div class=\"col-lg-12\">\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"submitForm(form)\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"miscOptions, tableOptions, buttonOptions\">\n <ngb-panel id=\"miscOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Misc. Options</label>\n <i *ngIf=\"!acc.activeIds.includes('miscOptions')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('miscOptions')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <responsive-button-group>\n <button type=\"button\" class=\"btn btn-success\" (click)=\"reset()\">Reset Default Settings</button>\n </responsive-button-group>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n\t\t\t\t\t\t\t\t<b>Collapsable Menu</b><br>\n\t\t\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" hidden formControlName=\"collapsable_menu\">\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"form.controls.collapsable_menu.value\" class=\"fa fa-check\" style=\"color: green; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"!form.controls.collapsable_menu.value\" class=\"fa fa-times\" style=\"color: red; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Default Entries Per Page</label>\n <em *ngIf=\"!form.controls.entries_per_page.valid\">- Required</em>\n <select [ngClass]=\"['form-control', form.controls.entries_per_page.valid ? 'is-valid' : 'is-invalid']\" formControlName=\"entries_per_page\">\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n <option value=\"250\">250</option>\n </select>\n <div class=\"invalid-feedback\" *ngIf=\"!form.controls.entries_per_page.valid\">Entries per page is required</div>\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Font Size (Recommended 11-14)</label>\n <em *ngIf=\"form.controls.font_size.hasError('required')\">- Required</em>\n <em *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('maxValue')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('minValue')\">- Invalid</em>\n <input [ngClass]=\"['form-control', form.controls.font_size.valid ? 'is-valid' : 'is-invalid']\" type=\"number\" formControlName=\"font_size\" (keyup)=\"changePrimaryFontSize()\">\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('required')\">Font size is required</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">Font size is invalid</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('maxValue')\">Font size can not exceed 18</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('minValue')\">Font size can not be less than 8</div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Starting Page</label>\n <select [ngClass]=\"['form-control', form.controls.opening_route.valid ? 'is-valid' : '']\" formControlName=\"opening_route\">\n <option value=\"/home\">Home</option>\n <option *ngFor=\"let view of views\" [value]=\"view.value\">{{view.display | titleCase}}</option>\n </select>\n </div>\n </div>\n <div class=\"col-lg-6\" *ngIf=\"client === 'Ace Completions'\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Routing Preference</label>\n <select [ngClass]=\"['form-control', form.controls.routing_preference.valid ? 'is-valid' : '']\" formControlName=\"routing_preference\">\n <option value=\"alwaysAsk\">Always Ask</option>\n <option value=\"sameTab\">Same Tab</option>\n <option value=\"newTab\">New Tab</option>\n <option value=\"newWindow\">New Window</option>\n </select>\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"tableOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Table Options</label>\n <i *ngIf=\"!acc.activeIds.includes('tableOptions')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('tableOptions')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table> \n <thead>\n <tr>\n <th>\n Primary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_color\" (ngModelChange)=\"changePrimaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_font_color\" (ngModelChange)=\"changePrimaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table secondaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Secondary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_color\" (ngModelChange)=\"changeSecondaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <br>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_font_color\" (ngModelChange)=\"changeSecondaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table tertiaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Tertiary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_color\" (ngModelChange)=\"changeTertiaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_font_color\" (ngModelChange)=\"changeTertiaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"buttonOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Button Options</label>\n <i *ngIf=\"!acc.activeIds.includes('buttonOptions')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('buttonOptions')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\">Success</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_color\" (ngModelChange)=\"changeSuccessColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_font_color\" (ngModelChange)=\"changeSuccessFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_hover_color\" (ngModelChange)=\"changeSuccessHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_color\" (ngModelChange)=\"changeWarningColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_font_color\" (ngModelChange)=\"changeWarningFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_hover_color\" (ngModelChange)=\"changeWarningHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_color\" (ngModelChange)=\"changeDangerColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_font_color\" (ngModelChange)=\"changeDangerFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_hover_color\" (ngModelChange)=\"changeDangerHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-info\">Info</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_color\" (ngModelChange)=\"changeInfoColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_font_color\" (ngModelChange)=\"changeInfoFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_hover_color\" (ngModelChange)=\"changeInfoHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_color\" (ngModelChange)=\"changePrimaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_font_color\" (ngModelChange)=\"changePrimaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_hover_color\" (ngModelChange)=\"changePrimaryHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-secondary\">Secondary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_color\" (ngModelChange)=\"changeSecondaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_font_color\" (ngModelChange)=\"changeSecondaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_hover_color\" (ngModelChange)=\"changeSecondaryHoverColor()\">\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <form-button [form]=\"form\" [disabled]=\"disableFormButton\"></form-button>\n </div>\n </form>\n</div>", styles: ["\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n"], dependencies: [{ kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.CollapseTableComponent, selector: "collapse-table", inputs: ["collapseSize", "tableFixed", "headerFixed", "secondaryColor", "tertiaryColor"] }, { kind: "component", type: i7.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i7.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i7.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i8.FormButtonComponent, selector: "form-button", inputs: ["form", "disabled", "type"] }, { kind: "component", type: i9.ResponsiveButtonGroupComponent, selector: "responsive-button-group", inputs: ["collapseSize"] }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i11.TitleCaseAndUnderscorePipe, name: "titleCase" }] });
|
|
288
|
+
}
|
|
289
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UsersSettingsComponent, decorators: [{
|
|
290
|
+
type: Component,
|
|
291
|
+
args: [{ providers: [ProviderService], template: "<style>\n ::ng-deep :root {\n --primary-table-color: #3b3ee3;\n --primary-table-font-color: #ffffff;\n --font-size: 12px;\n --secondary-table-color: #87ceeb;\n --secondary-table-font-color: #000000;\n --tertiary-table-color: #ff4500;\n --tertiary-table-font-color: #000000;\n --warning-color: #ffc107;\n --warning-font-color: #000000;\n --warning-hover-color: #e0a800;\n --warning-shadow-color: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n --success-color: #28a745;\n --success-font-color: #ffffff;\n --success-hover-color: #218838;\n --success-shadow-color: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n --danger-color: #dc3545;\n --danger-font-color: #ffffff;\n --danger-hover-color: #c82333;\n --danger-shadow-color: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n --info-color: #17a2b8;\n --info-font-color: #ffffff;\n --info-hover-color: #138496;\n --info-shadow-color: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n --primary-color: #007bff;\n --primary-font-color: #ffffff;\n --primary-hover-color: #0069d9;\n --primary-shadow-color: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n --secondary-color: #868e96;\n --secondary-font-color: #ffffff;\n --secondary-hover-color: #5a6268;\n --secondary-shadow-color: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n }\n\n .label-accordion {\n font-weight: bold;\n color: black;\n margin-bottom: 0px;\n }\n\n .fa-plus {\n color: black;\n }\n\n .fa-minus {\n color: black;\n } \n\n .btn-warning {\n color: var(--warning-font-color);\n background-color: var(--warning-color);\n border-color: var(--warning-color);\n }\n .btn-warning:focus, .btn-warning.focus {\n box-shadow: var(--warning-shadow-color);\n }\n .btn-warning:hover {\n color: var(--warning-font-color);\n background-color: var(--warning-hover-color);\n border-color: var(--warning-hover-color);\n }\n\n .btn-success {\n color: var(--success-font-color);\n background-color: var(--success-color);\n border-color: var(--success-color);\n }\n .btn-success:focus, .btn-success.focus {\n box-shadow: var(--success-shadow-color);\n }\n .btn-success:hover {\n color: var(--success-font-color);\n background-color: var(--success-hover-color);\n border-color: var(--success-hover-color);\n }\n\n .btn-danger {\n color: var(--danger-font-color);\n background-color: var(--danger-color);\n border-color: var(--danger-color);\n }\n .btn-danger:focus, .btn-danger.focus {\n box-shadow: var(--danger-shadow-color);\n }\n .btn-danger:hover {\n color: var(--danger-font-color);\n background-color: var(--danger-hover-color);\n border-color: var(--danger-hover-color);\n }\n\n .btn-info {\n color: var(--info-font-color);\n background-color: var(--info-color);\n border-color: var(--info-color);\n }\n .btn-info:focus, .btn-info.focus {\n box-shadow: var(--info-shadow-color);\n }\n .btn-info:hover {\n color: var(--info-font-color);\n background-color: var(--info-hover-color);\n border-color: var(--info-hover-color);\n }\n\n .btn-primary {\n color: var(--primary-font-color);\n background-color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .btn-primary:focus, .btn-primary.focus {\n box-shadow: var(--primary-shadow-color);\n }\n .btn-primary:hover {\n color: var(--primary-font-color);\n background-color: var(--primary-hover-color);\n border-color: var(--primary-hover-color);\n }\n\n .btn-secondary {\n color: var(--secondary-font-color);\n background-color: var(--secondary-color);\n border-color: var(--secondary-color);\n }\n .btn-secondary:focus, .btn-secondary.focus {\n box-shadow: var(--secondary-shadow-color);\n }\n .btn-secondary:hover {\n color: var(--secondary-font-color);\n background-color: var(--secondary-hover-color);\n border-color: var(--secondary-hover-color);\n }\n\n .fa-minus {\n color: black;\n } \n\n :host /deep/ .card .card-body .collapseTable th {\n background-color: var(--primary-table-color);\n color: var(--primary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-sec th {\n background-color: var(--secondary-table-color);\n color: var(--secondary-table-font-color);\n font-size: var(--font-size);\n }\n\n :host /deep/ .card .card-body .collapseTable-tert th {\n background-color: var(--tertiary-table-color);\n color: var(--tertiary-table-font-color);\n font-size: var(--font-size);\n }\n</style>\n\n<div class=\"col-lg-12\">\n <form [formGroup]=\"form\" novalidate (ngSubmit)=\"submitForm(form)\">\n <div class=\"row\">\n <ngb-accordion #acc=\"ngbAccordion\" activeIds=\"miscOptions, tableOptions, buttonOptions\">\n <ngb-panel id=\"miscOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Misc. Options</label>\n <i *ngIf=\"!acc.activeIds.includes('miscOptions')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('miscOptions')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <responsive-button-group>\n <button type=\"button\" class=\"btn btn-success\" (click)=\"reset()\">Reset Default Settings</button>\n </responsive-button-group>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n\t\t\t\t\t\t\t\t<b>Collapsable Menu</b><br>\n\t\t\t\t\t\t\t\t<div class=\"form-check\">\n\t\t\t\t\t\t\t\t\t<label class=\"form-check-label\">\n\t\t\t\t\t\t\t\t\t\t<input class=\"form-check-input\" type=\"checkbox\" hidden formControlName=\"collapsable_menu\">\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"form.controls.collapsable_menu.value\" class=\"fa fa-check\" style=\"color: green; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t\t<i *ngIf=\"!form.controls.collapsable_menu.value\" class=\"fa fa-times\" style=\"color: red; font-size: 24px;\" aria-hidden=\"true\"></i>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Default Entries Per Page</label>\n <em *ngIf=\"!form.controls.entries_per_page.valid\">- Required</em>\n <select [ngClass]=\"['form-control', form.controls.entries_per_page.valid ? 'is-valid' : 'is-invalid']\" formControlName=\"entries_per_page\">\n <option value=\"25\">25</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n <option value=\"250\">250</option>\n </select>\n <div class=\"invalid-feedback\" *ngIf=\"!form.controls.entries_per_page.valid\">Entries per page is required</div>\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Font Size (Recommended 11-14)</label>\n <em *ngIf=\"form.controls.font_size.hasError('required')\">- Required</em>\n <em *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('maxValue')\">- Invalid</em>\n <em *ngIf=\"form.controls.font_size.hasError('minValue')\">- Invalid</em>\n <input [ngClass]=\"['form-control', form.controls.font_size.valid ? 'is-valid' : 'is-invalid']\" type=\"number\" formControlName=\"font_size\" (keyup)=\"changePrimaryFontSize()\">\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('required')\">Font size is required</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('wholeNumbersGreaterThanZero')\">Font size is invalid</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('maxValue')\">Font size can not exceed 18</div>\n <div class=\"invalid-feedback\" *ngIf=\"form.controls.font_size.hasError('minValue')\">Font size can not be less than 8</div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Starting Page</label>\n <select [ngClass]=\"['form-control', form.controls.opening_route.valid ? 'is-valid' : '']\" formControlName=\"opening_route\">\n <option value=\"/home\">Home</option>\n <option *ngFor=\"let view of views\" [value]=\"view.value\">{{view.display | titleCase}}</option>\n </select>\n </div>\n </div>\n <div class=\"col-lg-6\" *ngIf=\"client === 'Ace Completions'\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Routing Preference</label>\n <select [ngClass]=\"['form-control', form.controls.routing_preference.valid ? 'is-valid' : '']\" formControlName=\"routing_preference\">\n <option value=\"alwaysAsk\">Always Ask</option>\n <option value=\"sameTab\">Same Tab</option>\n <option value=\"newTab\">New Tab</option>\n <option value=\"newWindow\">New Window</option>\n </select>\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"tableOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Table Options</label>\n <i *ngIf=\"!acc.activeIds.includes('tableOptions')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('tableOptions')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table> \n <thead>\n <tr>\n <th>\n Primary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_color\" (ngModelChange)=\"changePrimaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Primary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"table_font_color\" (ngModelChange)=\"changePrimaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table secondaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Secondary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_color\" (ngModelChange)=\"changeSecondaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <br>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Secondary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_table_font_color\" (ngModelChange)=\"changeSecondaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <collapse-table tertiaryColor=\"true\"> \n <thead>\n <tr>\n <th>\n Tertiary Table\n </th>\n </tr>\n </thead>\n </collapse-table>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Background:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_color\" (ngModelChange)=\"changeTertiaryColor()\">\n </div>\n </dd>\n </dl>\n </div>\n <div class=\"col-lg-6\">\n <dl>\n <dt>Tertiary Table Font:</dt>\n <dd>\n <div class=\"form-group\">\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.tertiary_table_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"tertiary_table_font_color\" (ngModelChange)=\"changeTertiaryFontColor()\">\n </div>\n </dd>\n </dl>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n <ngb-panel id=\"buttonOptions\">\n <ng-template ngbPanelTitle>\n <div> \n <label class=\"label-accordion\">Button Options</label>\n <i *ngIf=\"!acc.activeIds.includes('buttonOptions')\" class=\"fa fa-plus float-end\" aria-hidden=\"true\"></i>\n <i *ngIf=\"acc.activeIds.includes('buttonOptions')\" class=\"fa fa-minus float-end\" aria-hidden=\"true\"></i>\n </div>\n </ng-template>\n <ng-template ngbPanelContent>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-success\">Success</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_color\" (ngModelChange)=\"changeSuccessColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_font_color\" (ngModelChange)=\"changeSuccessFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Success Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.success_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"success_hover_color\" (ngModelChange)=\"changeSuccessHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-warning\">Warning</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_color\" (ngModelChange)=\"changeWarningColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_font_color\" (ngModelChange)=\"changeWarningFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Warning Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.warning_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"warning_hover_color\" (ngModelChange)=\"changeWarningHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_color\" (ngModelChange)=\"changeDangerColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_font_color\" (ngModelChange)=\"changeDangerFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Danger Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.danger_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"danger_hover_color\" (ngModelChange)=\"changeDangerHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-info\">Info</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_color\" (ngModelChange)=\"changeInfoColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_font_color\" (ngModelChange)=\"changeInfoFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Info Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.info_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"info_hover_color\" (ngModelChange)=\"changeInfoHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-primary\">Primary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_color\" (ngModelChange)=\"changePrimaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_font_color\" (ngModelChange)=\"changePrimaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Primary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.primary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"primary_hover_color\" (ngModelChange)=\"changePrimaryHoverColor()\">\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-lg-12\">\n <button type=\"button\" class=\"btn btn-secondary\">Secondary</button>\n </div>\n </div>\n <br>\n <div class=\"row\">\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Background:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_color\" (ngModelChange)=\"changeSecondaryButtonColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Font:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_font_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_font_color\" (ngModelChange)=\"changeSecondaryButtonFontColor()\">\n </div>\n </div>\n <div class=\"col-lg-4\">\n <div class=\"form-group\">\n <label class=\"form-control-label\">Secondary Button Hover:</label>\n <input type=\"color\" style=\"height: 40px\" [ngClass]=\"['form-control', form.controls.secondary_hover_color.value ? 'is-valid' : 'is-invalid']\" formControlName=\"secondary_hover_color\" (ngModelChange)=\"changeSecondaryHoverColor()\">\n </div>\n </div>\n </div>\n </ng-template>\n </ngb-panel>\n </ngb-accordion>\n </div>\n <div class=\"row\" style=\"padding-top: 15px;\">\n <form-button [form]=\"form\" [disabled]=\"disableFormButton\"></form-button>\n </div>\n </form>\n</div>" }]
|
|
292
|
+
}], ctorParameters: function () { return [{ type: i1.AuthPermissionService }, { type: i2.UserSettingsService }, { type: i3.ProviderService }, { type: i4.DialogService }]; } });
|
|
293
|
+
function hexToRGB(hex, alpha) {
|
|
294
|
+
let r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
|
|
295
|
+
if (alpha) {
|
|
296
|
+
return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")";
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
return "rgb(" + r + ", " + g + ", " + b + ")";
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtc2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3VzZXItc2V0dGluZ3Mvc2V0dGluZ3MvdXNlcnMtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3VzZXItc2V0dGluZ3Mvc2V0dGluZ3MvdXNlcnMtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU12RCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsYUFBYTtJQWFwQztJQUFxQztJQUFrQztJQUFvQztJQVgvSCxhQUFhLEdBQW1CLEVBQUUsQ0FBQztJQUVuQyxJQUFJLENBQVk7SUFFaEIsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLElBQUksQ0FBWTtJQUNoQixNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ1osS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVYLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFFbEIsWUFBb0IsSUFBMkIsRUFBVSxHQUF3QixFQUFVLFNBQTBCLEVBQVUsR0FBa0I7UUFDaEosS0FBSyxDQUFD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QUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQ2pDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQ2pDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFdEMsSUFBSSxLQUFLLEVBQUU7UUFDUCxPQUFPLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0tBQ2pFO1NBQU07UUFDSCxPQUFPLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNqRDtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVc2VyU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUHJvdmlkZXJTZXJ2aWNlLCBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcmVzb2x2ZWlvLWNsYXNzJztcbmltcG9ydCB7IEF1dGhQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2F1dGgvYXV0aC1wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi93aWRnZXRzL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVc2VyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci5tb2RlbCc7XG5pbXBvcnQgeyB0b1RpdGxlQ2FzZSB9IGZyb20gJy4uLy4uL3V0aWwvY29tbW9uLmhlbHBlcic7XG5cbkBDb21wb25lbnQoe1xuXHRwcm92aWRlcnM6IFtQcm92aWRlclNlcnZpY2VdLFxuXHR0ZW1wbGF0ZVVybDogJy4vdXNlcnMtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJzU2V0dGluZ3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kgeyBcblxuXHRzdWJzY3JpcHRpb24kOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG5cdGZvcm06IEZvcm1Hcm91cDtcblxuXHRkaXNhYmxlRm9ybUJ1dHRvbiA9IGZhbHNlO1xuXHR1c2VyOiBVc2VyTW9kZWw7XG5cdGNsaWVudCA9ICcnO1xuXHR2aWV3cyA9IFtdO1xuXG5cdGhhc1N1Ym1pdCA9IGZhbHNlO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX2FwczogQXV0aFBlcm1pc3Npb25TZXJ2aWNlLCBwcml2YXRlIF91czogVXNlclNldHRpbmdzU2VydmljZSwgcHJpdmF0ZSBfc2VydmljZXM6IFByb3ZpZGVyU2VydmljZSwgcHJpdmF0ZSBfZHM6IERpYWxvZ1NlcnZpY2UpIHtcblx0XHRzdXBlcihfc2VydmljZXMpO1xuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5fdXMuc2V0U2VsZWN0ZWRVc2VyKCcwJyk7XG5cblx0XHR0aGlzLmNsaWVudCA9IHRoaXMuX3NlcnZpY2VzLl9hcHAuY2xpZW50LmdldFZhbHVlKCk7XG5cblx0XHR0aGlzLmZvcm0gPSB0aGlzLl9zZXJ2aWNlcy5fZmIuZ3JvdXAoe1xuXHRcdFx0dGFibGVfY29sb3I6IFsnIzNiM2VlMycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR0YWJsZV9mb250X2NvbG9yOiBbJyNmZmZmZmYnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0Zm9udF9zaXplOiBbMTIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCB0aGlzLl9zZXJ2aWNlcy5fdnMud2hvbGVOdW1iZXJzR3JlYXRlclRoYW5aZXJvLCB0aGlzLl9zZXJ2aWNlcy5fdnMubWF4VmFsdWUoMTgpLCB0aGlzLl9zZXJ2aWNlcy5fdnMubWluVmFsdWUoOCldXSxcblx0XHRcdHNlY29uZGFyeV90YWJsZV9jb2xvcjogWycjODdjZWViJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHNlY29uZGFyeV90YWJsZV9mb250X2NvbG9yOiBbJyMwMDAwMDAnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0dGVydGlhcnlfdGFibGVfY29sb3I6IFsnI2ZmNDUwMCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR0ZXJ0aWFyeV90YWJsZV9mb250X2NvbG9yOiBbJyMwMDAwMDAnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0Y29sbGFwc2FibGVfbWVudTogW3RydWVdLFxuXHRcdFx0ZW50cmllc19wZXJfcGFnZTogWycyNScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR3YXJuaW5nX2NvbG9yOiBbJyNmZmMxMDcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0d2FybmluZ19mb250X2NvbG9yOiBbJyMwMDAwMDAnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0d2FybmluZ19ob3Zlcl9jb2xvcjogWycjZTBhODAwJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHN1Y2Nlc3NfY29sb3I6IFsnIzI4YTc0NScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRzdWNjZXNzX2ZvbnRfY29sb3I6IFsnI2ZmZmZmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRzdWNjZXNzX2hvdmVyX2NvbG9yOiBbJyMyMTg4MzgnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0ZGFuZ2VyX2NvbG9yOiBbJyNkYzM1NDUnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0ZGFuZ2VyX2ZvbnRfY29sb3I6IFsnI2ZmZmZmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRkYW5nZXJfaG92ZXJfY29sb3I6IFsnI2M4MjMzMycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRpbmZvX2NvbG9yOiBbJyMxN2EyYjgnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0aW5mb19mb250X2NvbG9yOiBbJyNmZmZmZmYnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0aW5mb19ob3Zlcl9jb2xvcjogWycjMTM4NDk2JywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHByaW1hcnlfY29sb3I6IFsnIzAwN2JmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRwcmltYXJ5X2ZvbnRfY29sb3I6IFsnI2ZmZmZmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRwcmltYXJ5X2hvdmVyX2NvbG9yOiBbJyMwMDY5ZDknLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0c2Vjb25kYXJ5X2NvbG9yOiBbJyM4NjhlOTYnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0c2Vjb25kYXJ5X2ZvbnRfY29sb3I6IFsnI2ZmZmZmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRzZWNvbmRhcnlfaG92ZXJfY29sb3I6IFsnIzVhNjI2OCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRyb3V0aW5nX3ByZWZlcmVuY2U6IFsnYWx3YXlzQXNrJ10sXG5cdFx0XHRvcGVuaW5nX3JvdXRlOiBbJy9ob21lJ11cblx0XHR9KTtcblxuXHRcdGlmICh0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkgJiYgdGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpLnNldHRpbmdzKSB7XG5cdFx0XHR0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuc2V0dGluZ3MpO1xuXG5cdFx0XHR0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkucm9sZXMuZ3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuXHRcdFx0XHRncm91cC52aWV3cy5mb3JFYWNoKHZpZXcgPT4ge1xuXHRcdFx0XHRcdGlmICghdGhpcy52aWV3cy5zb21lKGEgPT4gYS52YWx1ZSA9PT0gdmlldykpIHtcblx0XHRcdFx0XHRcdHRoaXMudmlld3MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHZhbHVlOiB2aWV3LFxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5OiB0b1RpdGxlQ2FzZSh2aWV3LnJlcGxhY2UoJy8nLCAnJykucmVwbGFjZShuZXcgUmVnRXhwKCcvJywgJ2cnKSwgJyAtICcpKVxuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktdGFibGUtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGFibGVfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXRhYmxlLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGFibGVfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWZvbnQtc2l6ZScsIHRoaXMuZm9ybS5jb250cm9scy5mb250X3NpemUudmFsdWUgKyAncHgnKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGVydGlhcnktdGFibGUtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGVydGlhcnlfdGFibGVfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10ZXJ0aWFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3Mtc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8taG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuaW5mb19ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfaG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cblx0XHR0aGlzLnN1YnNjcmlwdGlvbiQucHVzaCh0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC51c2VyLnN1YnNjcmliZSh1c2VyID0+IHtcblx0XHRcdHRoaXMudXNlciA9IHVzZXI7XG5cdFx0fSkpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb24kLmZvckVhY2goc3ViID0+IHtcblx0XHRcdHN1Yi51bnN1YnNjcmliZSgpO1xuXHRcdH0pO1xuXG5cdFx0aWYgKCF0aGlzLmhhc1N1Ym1pdCkge1xuXHRcdFx0dGhpcy5zdWJtaXRGb3JtKHRoaXMuZm9ybSk7XG5cdFx0fVxuXHR9XG5cblx0Y2hhbmdlUHJpbWFyeUNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVByaW1hcnlGb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVByaW1hcnlGb250U2l6ZSgpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZm9udC1zaXplJywgdGhpcy5mb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS52YWx1ZSArICdweCcpO1xuXHR9XG5cblx0Y2hhbmdlU2Vjb25kYXJ5Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlU2Vjb25kYXJ5Rm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VUZXJ0aWFyeUNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10ZXJ0aWFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VUZXJ0aWFyeUZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGVydGlhcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVdhcm5pbmdDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci52YWx1ZSwgLjUpKTtcblx0fVxuXG5cdGNoYW5nZVdhcm5pbmdIb3ZlckNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfaG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlV2FybmluZ0ZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VTdWNjZXNzQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3Mtc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfY29sb3IudmFsdWUsIC41KSk7XG5cdH1cblxuXHRjaGFuZ2VTdWNjZXNzSG92ZXJDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVN1Y2Nlc3NGb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlRGFuZ2VyQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci52YWx1ZSwgLjUpKTtcblx0fVxuXG5cdGNoYW5nZURhbmdlckhvdmVyQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfaG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlRGFuZ2VyRm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VJbmZvQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fY29sb3IudmFsdWUsIC41KSk7XG5cdH1cblxuXHRjaGFuZ2VJbmZvSG92ZXJDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZUluZm9Gb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlUHJpbWFyeUJ1dHRvbkNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnZhbHVlLCAuNSkpO1xuXHR9XG5cblx0Y2hhbmdlUHJpbWFyeUhvdmVyQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VQcmltYXJ5QnV0dG9uRm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVNlY29uZGFyeUJ1dHRvbkNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfY29sb3IudmFsdWUsIC41KSk7XG5cdH1cblxuXHRjaGFuZ2VTZWNvbmRhcnlIb3ZlckNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVNlY29uZGFyeUJ1dHRvbkZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0cmVzZXQoKSB7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2NvbG9yLnNldFZhbHVlKCcjM2IzZWUzJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyNmZmZmZmYnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuZm9udF9zaXplLnNldFZhbHVlKDEyKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2NvbG9yLnNldFZhbHVlKCcjODdjZWViJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9mb250X2NvbG9yLnNldFZhbHVlKCcjMDAwMDAwJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2NvbG9yLnNldFZhbHVlKCcjZmY0NTAwJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyMwMDAwMDAnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuY29sbGFwc2FibGVfbWVudS5zZXRWYWx1ZSh0cnVlKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuZW50cmllc19wZXJfcGFnZS5zZXRWYWx1ZSgnMjUnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci5zZXRWYWx1ZSgnI2ZmYzEwNycpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyMwMDAwMDAnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19ob3Zlcl9jb2xvci5zZXRWYWx1ZSgnI2UwYTgwMCcpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnNldFZhbHVlKCcjMjhhNzQ1Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2hvdmVyX2NvbG9yLnNldFZhbHVlKCcjMjE4ODM4Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci5zZXRWYWx1ZSgnI2RjMzU0NScpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfaG92ZXJfY29sb3Iuc2V0VmFsdWUoJyNjODIzMzMnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci5zZXRWYWx1ZSgnIzE3YTJiOCcpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyNmZmZmZmYnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuaW5mb19ob3Zlcl9jb2xvci5zZXRWYWx1ZSgnIzEzODQ5NicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnNldFZhbHVlKCcjMDA3YmZmJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2hvdmVyX2NvbG9yLnNldFZhbHVlKCcjMDA2OWQ5Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci5zZXRWYWx1ZSgnIzg2OGU5NicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfaG92ZXJfY29sb3Iuc2V0VmFsdWUoJyM1YTYyNjgnKTtcblxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1mb250LXNpemUnLCB0aGlzLmZvcm0uY29udHJvbHMuZm9udF9zaXplLnZhbHVlICsgJ3B4Jyk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRlcnRpYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGVydGlhcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfaG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmluZm9faG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfaG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0c3VibWl0Rm9ybShmb3JtKSB7XG5cdFx0dGhpcy5oYXNTdWJtaXQgPSB0cnVlO1xuXG5cdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCd1cGRhdGVEb2N1bWVudFByb3BzJywgJ3VzZXJzJywgdGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpLl9pZCwgW1xuXHRcdFx0e3Byb3A6ICdzZXR0aW5ncycsIGRhdGE6IHRoaXMuZm9ybS52YWx1ZX1cblx0XHRdLCB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuX192LCAoZXJyLCByZXMpID0+IHtcblx0XHRcdGlmIChyZXMpIHtcblx0XHRcdFx0dGhpcy5fc2VydmljZXMuX2FsZXJ0LnNldEFsZXJ0KCdzdWNjZXNzJywgJ1NldHRpbmdzIGhhdmUgYmVlbiB1cGRhdGVkJyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dGhpcy5fZHMuZXJyb3IoJ0NvdWxkIG5vdCB1cGRhdGUgc2V0dGluZ3MnKTtcblx0XHRcdFx0dGhpcy5fc2VydmljZXMuX3NvY2tldC5jYWxsKCdpbnNlcnRFcnJvckxvZycsICd1c2VyIHNldHRpbmdzIC0gdXBkYXRlIHVzZXInLCBbXG5cdFx0XHRcdFx0dGhpcy5fc2VydmljZXMuX2FjY291bnQuZ2V0VXNlcigpLCBlcnJcblx0XHRcdFx0XSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGV4VG9SR0IoaGV4LCBhbHBoYSkge1xuICAgIGxldCByID0gcGFyc2VJbnQoaGV4LnNsaWNlKDEsIDMpLCAxNiksXG4gICAgICAgIGcgPSBwYXJzZUludChoZXguc2xpY2UoMywgNSksIDE2KSxcbiAgICAgICAgYiA9IHBhcnNlSW50KGhleC5zbGljZSg1LCA3KSwgMTYpO1xuXG4gICAgaWYgKGFscGhhKSB7XG4gICAgICAgIHJldHVybiBcInJnYmEoXCIgKyByICsgXCIsIFwiICsgZyArIFwiLCBcIiArIGIgKyBcIiwgXCIgKyBhbHBoYSArIFwiKVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcInJnYihcIiArIHIgKyBcIiwgXCIgKyBnICsgXCIsIFwiICsgYiArIFwiKVwiO1xuICAgIH1cbn0iLCI8c3R5bGU+XG4gICAgOjpuZy1kZWVwIDpyb290IHtcbiAgICAgICAgLS1wcmltYXJ5LXRhYmxlLWNvbG9yOiAjM2IzZWUzO1xuICAgICAgICAtLXByaW1hcnktdGFibGUtZm9udC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgLS1mb250LXNpemU6IDEycHg7XG4gICAgICAgIC0tc2Vjb25kYXJ5LXRhYmxlLWNvbG9yOiAjODdjZWViO1xuICAgICAgICAtLXNlY29uZGFyeS10YWJsZS1mb250LWNvbG9yOiAjMDAwMDAwO1xuICAgICAgICAtLXRlcnRpYXJ5LXRhYmxlLWNvbG9yOiAjZmY0NTAwO1xuICAgICAgICAtLXRlcnRpYXJ5LXRhYmxlLWZvbnQtY29sb3I6ICMwMDAwMDA7XG4gICAgICAgIC0td2FybmluZy1jb2xvcjogI2ZmYzEwNztcbiAgICAgICAgLS13YXJuaW5nLWZvbnQtY29sb3I6ICMwMDAwMDA7XG4gICAgICAgIC0td2FybmluZy1ob3Zlci1jb2xvcjogI2UwYTgwMDtcbiAgICAgICAgLS13YXJuaW5nLXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoMjIyLCAxNzAsIDEyLCAwLjUpO1xuICAgICAgICAtLXN1Y2Nlc3MtY29sb3I6ICMyOGE3NDU7XG4gICAgICAgIC0tc3VjY2Vzcy1mb250LWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAtLXN1Y2Nlc3MtaG92ZXItY29sb3I6ICMyMTg4Mzg7XG4gICAgICAgIC0tc3VjY2Vzcy1zaGFkb3ctY29sb3I6IDAgMCAwIDAuMnJlbSByZ2JhKDcyLCAxODAsIDk3LCAwLjUpO1xuICAgICAgICAtLWRhbmdlci1jb2xvcjogI2RjMzU0NTtcbiAgICAgICAgLS1kYW5nZXItZm9udC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgLS1kYW5nZXItaG92ZXItY29sb3I6ICNjODIzMzM7XG4gICAgICAgIC0tZGFuZ2VyLXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoMjI1LCA4MywgOTcsIDAuNSk7XG4gICAgICAgIC0taW5mby1jb2xvcjogIzE3YTJiODtcbiAgICAgICAgLS1pbmZvLWZvbnQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIC0taW5mby1ob3Zlci1jb2xvcjogIzEzODQ5NjtcbiAgICAgICAgLS1pbmZvLXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoNTgsIDE3NiwgMTk1LCAwLjUpO1xuICAgICAgICAtLXByaW1hcnktY29sb3I6ICMwMDdiZmY7XG4gICAgICAgIC0tcHJpbWFyeS1mb250LWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAtLXByaW1hcnktaG92ZXItY29sb3I6ICMwMDY5ZDk7XG4gICAgICAgIC0tcHJpbWFyeS1zaGFkb3ctY29sb3I6IDAgMCAwIDAuMnJlbSByZ2JhKDM4LCAxNDMsIDI1NSwgMC41KTtcbiAgICAgICAgLS1zZWNvbmRhcnktY29sb3I6ICM4NjhlOTY7XG4gICAgICAgIC0tc2Vjb25kYXJ5LWZvbnQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIC0tc2Vjb25kYXJ5LWhvdmVyLWNvbG9yOiAjNWE2MjY4O1xuICAgICAgICAtLXNlY29uZGFyeS1zaGFkb3ctY29sb3I6IDAgMCAwIDAuMnJlbSByZ2JhKDEzMCwgMTM4LCAxNDUsIDAuNSk7XG4gICAgfVxuXG4gICAgLmxhYmVsLWFjY29yZGlvbiB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICB9XG5cbiAgICAuZmEtcGx1cyB7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICB9XG5cbiAgICAuZmEtbWludXMge1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgfSBcblxuICAgIC5idG4td2FybmluZyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS13YXJuaW5nLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13YXJuaW5nLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS13YXJuaW5nLWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi13YXJuaW5nOmZvY3VzLCAuYnRuLXdhcm5pbmcuZm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS13YXJuaW5nLXNoYWRvdy1jb2xvcik7XG4gICAgfVxuICAgIC5idG4td2FybmluZzpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS13YXJuaW5nLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13YXJuaW5nLWhvdmVyLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS13YXJuaW5nLWhvdmVyLWNvbG9yKTtcbiAgICB9XG5cbiAgICAuYnRuLXN1Y2Nlc3Mge1xuICAgICAgICBjb2xvcjogdmFyKC0tc3VjY2Vzcy1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3VjY2Vzcy1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc3VjY2Vzcy1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tc3VjY2Vzczpmb2N1cywgLmJ0bi1zdWNjZXNzLmZvY3VzIHtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tc3VjY2Vzcy1zaGFkb3ctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXN1Y2Nlc3M6aG92ZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tc3VjY2Vzcy1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc3VjY2Vzcy1ob3Zlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc3VjY2Vzcy1ob3Zlci1jb2xvcik7XG4gICAgfVxuXG4gICAgLmJ0bi1kYW5nZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tZGFuZ2VyLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kYW5nZXItY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWRhbmdlci1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tZGFuZ2VyOmZvY3VzLCAuYnRuLWRhbmdlci5mb2N1cyB7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLWRhbmdlci1zaGFkb3ctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLWRhbmdlcjpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1kYW5nZXItZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRhbmdlci1ob3Zlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZGFuZ2VyLWhvdmVyLWNvbG9yKTtcbiAgICB9XG5cbiAgICAuYnRuLWluZm8ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW5mby1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5mby1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW5mby1jb2xvcik7XG4gICAgfVxuICAgIC5idG4taW5mbzpmb2N1cywgLmJ0bi1pbmZvLmZvY3VzIHtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0taW5mby1zaGFkb3ctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLWluZm86aG92ZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0taW5mby1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5mby1ob3Zlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW5mby1ob3Zlci1jb2xvcik7XG4gICAgfVxuXG4gICAgLmJ0bi1wcmltYXJ5IHtcbiAgICAgICAgY29sb3I6IHZhcigtLXByaW1hcnktZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXByaW1hcnktY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXByaW1hcnk6Zm9jdXMsIC5idG4tcHJpbWFyeS5mb2N1cyB7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXByaW1hcnktc2hhZG93LWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi1wcmltYXJ5OmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXByaW1hcnktZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktaG92ZXItY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXByaW1hcnktaG92ZXItY29sb3IpO1xuICAgIH1cblxuICAgIC5idG4tc2Vjb25kYXJ5IHtcbiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXNlY29uZGFyeTpmb2N1cywgLmJ0bi1zZWNvbmRhcnkuZm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zZWNvbmRhcnktc2hhZG93LWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi1zZWNvbmRhcnk6aG92ZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktaG92ZXItY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXNlY29uZGFyeS1ob3Zlci1jb2xvcik7XG4gICAgfVxuXG4gICAgLmZhLW1pbnVzIHtcbiAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgIH0gXG5cbiAgICA6aG9zdCAvZGVlcC8gLmNhcmQgLmNhcmQtYm9keSAuY29sbGFwc2VUYWJsZSB0aCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXByaW1hcnktdGFibGUtY29sb3IpO1xuICAgICAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS10YWJsZS1mb250LWNvbG9yKTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIH1cblxuICAgIDpob3N0IC9kZWVwLyAuY2FyZCAuY2FyZC1ib2R5IC5jb2xsYXBzZVRhYmxlLXNlYyB0aCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlY29uZGFyeS10YWJsZS1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGFibGUtZm9udC1jb2xvcik7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcbiAgICB9XG5cbiAgICA6aG9zdCAvZGVlcC8gLmNhcmQgLmNhcmQtYm9keSAuY29sbGFwc2VUYWJsZS10ZXJ0IHRoIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGVydGlhcnktdGFibGUtY29sb3IpO1xuICAgICAgICBjb2xvcjogdmFyKC0tdGVydGlhcnktdGFibGUtZm9udC1jb2xvcik7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcbiAgICB9XG48L3N0eWxlPlxuXG48ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgbm92YWxpZGF0ZSAobmdTdWJtaXQpPVwic3VibWl0Rm9ybShmb3JtKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8bmdiLWFjY29yZGlvbiAjYWNjPVwibmdiQWNjb3JkaW9uXCIgYWN0aXZlSWRzPVwibWlzY09wdGlvbnMsIHRhYmxlT3B0aW9ucywgYnV0dG9uT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxuZ2ItcGFuZWwgaWQ9XCJtaXNjT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWFjY29yZGlvblwiPk1pc2MuIE9wdGlvbnM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ21pc2NPcHRpb25zJylcIiBjbGFzcz1cImZhIGZhLXBsdXMgZmxvYXQtZW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiYWNjLmFjdGl2ZUlkcy5pbmNsdWRlcygnbWlzY09wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtbWludXMgZmxvYXQtZW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVzcG9uc2l2ZS1idXR0b24tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJyZXNldCgpXCI+UmVzZXQgRGVmYXVsdCBTZXR0aW5nczwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jlc3BvbnNpdmUtYnV0dG9uLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGI+Q29sbGFwc2FibGUgTWVudTwvYj48YnI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGhpZGRlbiBmb3JtQ29udHJvbE5hbWU9XCJjb2xsYXBzYWJsZV9tZW51XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpICpuZ0lmPVwiZm9ybS5jb250cm9scy5jb2xsYXBzYWJsZV9tZW51LnZhbHVlXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiIHN0eWxlPVwiY29sb3I6IGdyZWVuOyBmb250LXNpemU6IDI0cHg7XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aSAqbmdJZj1cIiFmb3JtLmNvbnRyb2xzLmNvbGxhcHNhYmxlX21lbnUudmFsdWVcIiBjbGFzcz1cImZhIGZhLXRpbWVzXCIgc3R5bGU9XCJjb2xvcjogcmVkOyBmb250LXNpemU6IDI0cHg7XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9sYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPkRlZmF1bHQgRW50cmllcyBQZXIgUGFnZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gKm5nSWY9XCIhZm9ybS5jb250cm9scy5lbnRyaWVzX3Blcl9wYWdlLnZhbGlkXCI+LSBSZXF1aXJlZDwvZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuZW50cmllc19wZXJfcGFnZS52YWxpZCA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW50cmllc19wZXJfcGFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMjVcIj4yNTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBcIj41MDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNTBcIj4yNTA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCIhZm9ybS5jb250cm9scy5lbnRyaWVzX3Blcl9wYWdlLnZhbGlkXCI+RW50cmllcyBwZXIgcGFnZSBpcyByZXF1aXJlZDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPkZvbnQgU2l6ZSAoUmVjb21tZW5kZWQgMTEtMTQpPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSAqbmdJZj1cImZvcm0uY29udHJvbHMuZm9udF9zaXplLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+LSBSZXF1aXJlZDwvZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcignd2hvbGVOdW1iZXJzR3JlYXRlclRoYW5aZXJvJylcIj4tIEludmFsaWQ8L2VtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtICpuZ0lmPVwiZm9ybS5jb250cm9scy5mb250X3NpemUuaGFzRXJyb3IoJ21heFZhbHVlJylcIj4tIEludmFsaWQ8L2VtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtICpuZ0lmPVwiZm9ybS5jb250cm9scy5mb250X3NpemUuaGFzRXJyb3IoJ21pblZhbHVlJylcIj4tIEludmFsaWQ8L2VtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5mb250X3NpemUudmFsaWQgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJmb250X3NpemVcIiAoa2V5dXApPVwiY2hhbmdlUHJpbWFyeUZvbnRTaXplKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcigncmVxdWlyZWQnKVwiPkZvbnQgc2l6ZSBpcyByZXF1aXJlZDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImZvcm0uY29udHJvbHMuZm9udF9zaXplLmhhc0Vycm9yKCd3aG9sZU51bWJlcnNHcmVhdGVyVGhhblplcm8nKVwiPkZvbnQgc2l6ZSBpcyBpbnZhbGlkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZm9ybS5jb250cm9scy5mb250X3NpemUuaGFzRXJyb3IoJ21heFZhbHVlJylcIj5Gb250IHNpemUgY2FuIG5vdCBleGNlZWQgMTg8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcignbWluVmFsdWUnKVwiPkZvbnQgc2l6ZSBjYW4gbm90IGJlIGxlc3MgdGhhbiA4PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5TdGFydGluZyBQYWdlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLm9wZW5pbmdfcm91dGUudmFsaWQgPyAnaXMtdmFsaWQnIDogJyddXCIgZm9ybUNvbnRyb2xOYW1lPVwib3BlbmluZ19yb3V0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIvaG9tZVwiPkhvbWU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2aWV3IG9mIHZpZXdzXCIgW3ZhbHVlXT1cInZpZXcudmFsdWVcIj57e3ZpZXcuZGlzcGxheSB8IHRpdGxlQ2FzZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCIgKm5nSWY9XCJjbGllbnQgPT09ICdBY2UgQ29tcGxldGlvbnMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5Sb3V0aW5nIFByZWZlcmVuY2U8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMucm91dGluZ19wcmVmZXJlbmNlLnZhbGlkID8gJ2lzLXZhbGlkJyA6ICcnXVwiIGZvcm1Db250cm9sTmFtZT1cInJvdXRpbmdfcHJlZmVyZW5jZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJhbHdheXNBc2tcIj5BbHdheXMgQXNrPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNhbWVUYWJcIj5TYW1lIFRhYjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJuZXdUYWJcIj5OZXcgVGFiPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5ld1dpbmRvd1wiPk5ldyBXaW5kb3c8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmdiLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxuZ2ItcGFuZWwgaWQ9XCJ0YWJsZU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1hY2NvcmRpb25cIj5UYWJsZSBPcHRpb25zPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFhY2MuYWN0aXZlSWRzLmluY2x1ZGVzKCd0YWJsZU9wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtcGx1cyBmbG9hdC1lbmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY2MuYWN0aXZlSWRzLmluY2x1ZGVzKCd0YWJsZU9wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtbWludXMgZmxvYXQtZW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sbGFwc2UtdGFibGU+ICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW1hcnkgVGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2xsYXBzZS10YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+UHJpbWFyeSBUYWJsZSBCYWNrZ3JvdW5kOjwvZHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnRhYmxlX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJ0YWJsZV9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVByaW1hcnlDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+UHJpbWFyeSBUYWJsZSBGb250OjwvZHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnRhYmxlX2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInRhYmxlX2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcmltYXJ5Rm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xsYXBzZS10YWJsZSBzZWNvbmRhcnlDb2xvcj1cInRydWVcIj4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Vjb25kYXJ5IFRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29sbGFwc2UtdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PlNlY29uZGFyeSBUYWJsZSBCYWNrZ3JvdW5kOjwvZHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kYXJ5X3RhYmxlX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2Vjb25kYXJ5Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD5TZWNvbmRhcnkgVGFibGUgRm9udDo8L2R0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfZm9udF9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kYXJ5X3RhYmxlX2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZWNvbmRhcnlGb250Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbGxhcHNlLXRhYmxlIHRlcnRpYXJ5Q29sb3I9XCJ0cnVlXCI+ICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcnRpYXJ5IFRhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29sbGFwc2UtdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PlRlcnRpYXJ5IFRhYmxlIEJhY2tncm91bmQ6PC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMudGVydGlhcnlfdGFibGVfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInRlcnRpYXJ5X3RhYmxlX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVGVydGlhcnlDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+VGVydGlhcnkgVGFibGUgRm9udDo8L2R0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXJ0aWFyeV90YWJsZV9mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlVGVydGlhcnlGb250Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmdiLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxuZ2ItcGFuZWwgaWQ9XCJidXR0b25PcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbFRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtYWNjb3JkaW9uXCI+QnV0dG9uIE9wdGlvbnM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ2J1dHRvbk9wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtcGx1cyBmbG9hdC1lbmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY2MuYWN0aXZlSWRzLmluY2x1ZGVzKCdidXR0b25PcHRpb25zJylcIiBjbGFzcz1cImZhIGZhLW1pbnVzIGZsb2F0LWVuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj5TdWNjZXNzPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlN1Y2Nlc3MgQnV0dG9uIEJhY2tncm91bmQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzdWNjZXNzX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU3VjY2Vzc0NvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5TdWNjZXNzIEJ1dHRvbiBGb250OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuc3VjY2Vzc19mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzdWNjZXNzX2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTdWNjZXNzRm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5TdWNjZXNzIEJ1dHRvbiBIb3Zlcjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfaG92ZXJfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInN1Y2Nlc3NfaG92ZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTdWNjZXNzSG92ZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4td2FybmluZ1wiPldhcm5pbmc8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+V2FybmluZyBCdXR0b24gQmFja2dyb3VuZDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLndhcm5pbmdfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cIndhcm5pbmdfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VXYXJuaW5nQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPldhcm5pbmcgQnV0dG9uIEZvbnQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy53YXJuaW5nX2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cIndhcm5pbmdfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVdhcm5pbmdGb250Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPldhcm5pbmcgQnV0dG9uIEhvdmVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMud2FybmluZ19ob3Zlcl9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwid2FybmluZ19ob3Zlcl9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVdhcm5pbmdIb3ZlckNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXJcIj5EYW5nZXI8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+RGFuZ2VyIEJ1dHRvbiBCYWNrZ3JvdW5kOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuZGFuZ2VyX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJkYW5nZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VEYW5nZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+RGFuZ2VyIEJ1dHRvbiBGb250OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuZGFuZ2VyX2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cImRhbmdlcl9mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRGFuZ2VyRm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5EYW5nZXIgQnV0dG9uIEhvdmVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuZGFuZ2VyX2hvdmVyX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJkYW5nZXJfaG92ZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VEYW5nZXJIb3ZlckNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvXCI+SW5mbzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5JbmZvIEJ1dHRvbiBCYWNrZ3JvdW5kOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5mb19jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUluZm9Db2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+SW5mbyBCdXR0b24gRm9udDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLmluZm9fZm9udF9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwiaW5mb19mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5mb0ZvbnRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+SW5mbyBCdXR0b24gSG92ZXI6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5pbmZvX2hvdmVyX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJpbmZvX2hvdmVyX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5mb0hvdmVyQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5QcmltYXJ5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlByaW1hcnkgQnV0dG9uIEJhY2tncm91bmQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJwcmltYXJ5X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUHJpbWFyeUJ1dHRvbkNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5QcmltYXJ5IEJ1dHRvbiBGb250OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMucHJpbWFyeV9mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJwcmltYXJ5X2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcmltYXJ5QnV0dG9uRm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5QcmltYXJ5IEJ1dHRvbiBIb3Zlcjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnByaW1hcnlfaG92ZXJfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInByaW1hcnlfaG92ZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcmltYXJ5SG92ZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCI+U2Vjb25kYXJ5PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlNlY29uZGFyeSBCdXR0b24gQmFja2dyb3VuZDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kYXJ5X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2Vjb25kYXJ5QnV0dG9uQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlNlY29uZGFyeSBCdXR0b24gRm9udDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzZWNvbmRhcnlfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNlY29uZGFyeUJ1dHRvbkZvbnRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+U2Vjb25kYXJ5IEJ1dHRvbiBIb3Zlcjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9ob3Zlcl9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kYXJ5X2hvdmVyX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2Vjb25kYXJ5SG92ZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZ2ItcGFuZWw+XG4gICAgICAgICAgICA8L25nYi1hY2NvcmRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTVweDtcIj5cbiAgICAgICAgICAgIDxmb3JtLWJ1dHRvbiBbZm9ybV09XCJmb3JtXCIgW2Rpc2FibGVkXT1cImRpc2FibGVGb3JtQnV0dG9uXCI+PC9mb3JtLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuPC9kaXY+Il19
|