@resolveio/client-lib-core 15.1.19 → 15.2.1

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.
Files changed (216) hide show
  1. package/index.d.ts +0 -3
  2. package/package.json +1 -1
  3. package/esm2020/lib/account-manager.service.mjs +0 -222
  4. package/esm2020/lib/auth/auth-guard.service.mjs +0 -165
  5. package/esm2020/lib/auth/auth-permissions.service.mjs +0 -24
  6. package/esm2020/lib/auth/auth.service.mjs +0 -244
  7. package/esm2020/lib/auth/auth365.component.mjs +0 -44
  8. package/esm2020/lib/auth/can-deactivate-guard.service.mjs +0 -13
  9. package/esm2020/lib/auth/enroll.component.mjs +0 -81
  10. package/esm2020/lib/auth/forgot-password.component.mjs +0 -82
  11. package/esm2020/lib/core.component.mjs +0 -400
  12. package/esm2020/lib/core.module.mjs +0 -184
  13. package/esm2020/lib/core.service.mjs +0 -89
  14. package/esm2020/lib/directive/focus.mjs +0 -22
  15. package/esm2020/lib/directive/scroll.mjs +0 -55
  16. package/esm2020/lib/home/home.component.mjs +0 -77
  17. package/esm2020/lib/logger/logger.component.mjs +0 -220
  18. package/esm2020/lib/models/app-status.model.mjs +0 -2
  19. package/esm2020/lib/models/collection-document.model.mjs +0 -2
  20. package/esm2020/lib/models/cron-job.model.mjs +0 -2
  21. package/esm2020/lib/models/dialog.model.mjs +0 -2
  22. package/esm2020/lib/models/file.model.mjs +0 -2
  23. package/esm2020/lib/models/log-method-latency.model.mjs +0 -2
  24. package/esm2020/lib/models/navbar-main-tab.model.mjs +0 -2
  25. package/esm2020/lib/models/pagination.model.mjs +0 -2
  26. package/esm2020/lib/models/permission.model.mjs +0 -2
  27. package/esm2020/lib/models/select-data-label.model.mjs +0 -2
  28. package/esm2020/lib/models/subscription.model.mjs +0 -2
  29. package/esm2020/lib/models/support-ticket.model.mjs +0 -2
  30. package/esm2020/lib/models/user-group.model.mjs +0 -2
  31. package/esm2020/lib/models/user.model.mjs +0 -2
  32. package/esm2020/lib/offline-db.mjs +0 -519
  33. package/esm2020/lib/offline-manager.service.mjs +0 -107
  34. package/esm2020/lib/pipes/domsanitizor.pipe.mjs +0 -28
  35. package/esm2020/lib/pipes/filter.pipe.mjs +0 -36
  36. package/esm2020/lib/pipes/json-parse.pipe.mjs +0 -29
  37. package/esm2020/lib/pipes/minus-currency.pipe.mjs +0 -16
  38. package/esm2020/lib/pipes/phone.pipe.mjs +0 -47
  39. package/esm2020/lib/pipes/pipe.module.mjs +0 -54
  40. package/esm2020/lib/pipes/reverse-list.pipe.mjs +0 -17
  41. package/esm2020/lib/pipes/titlecase.pipe.mjs +0 -22
  42. package/esm2020/lib/report-builder.permission.mjs +0 -13
  43. package/esm2020/lib/resolveio-class.mjs +0 -41
  44. package/esm2020/lib/shared/shared.module.mjs +0 -96
  45. package/esm2020/lib/socket-manager.service.mjs +0 -339
  46. package/esm2020/lib/socket.service.mjs +0 -215
  47. package/esm2020/lib/super-admin.permission.mjs +0 -9
  48. package/esm2020/lib/support-ticket/detail/support-ticket-detail.component.mjs +0 -204
  49. package/esm2020/lib/support-ticket/edit/support-ticket-edit.component.mjs +0 -122
  50. package/esm2020/lib/support-ticket/list/support-ticket-list.component.mjs +0 -137
  51. package/esm2020/lib/support-ticket/new/support-ticket-new.component.mjs +0 -115
  52. package/esm2020/lib/support-ticket/support-ticket.component.mjs +0 -63
  53. package/esm2020/lib/support-ticket/support-ticket.module.mjs +0 -50
  54. package/esm2020/lib/support-ticket/support-ticket.routing.mjs +0 -20
  55. package/esm2020/lib/support-ticket/support-ticket.service.mjs +0 -17
  56. package/esm2020/lib/token-manager.service.mjs +0 -26
  57. package/esm2020/lib/user-settings/settings/users-settings.component.mjs +0 -296
  58. package/esm2020/lib/user-settings/user-settings.component.mjs +0 -57
  59. package/esm2020/lib/user-settings/user-settings.module.mjs +0 -41
  60. package/esm2020/lib/user-settings/user-settings.permission.mjs +0 -10
  61. package/esm2020/lib/user-settings/user-settings.routing.mjs +0 -14
  62. package/esm2020/lib/user-settings/user-settings.service.mjs +0 -17
  63. package/esm2020/lib/util/action-name.helper.mjs +0 -9
  64. package/esm2020/lib/util/aws.service.mjs +0 -79
  65. package/esm2020/lib/util/common.helper.mjs +0 -161
  66. package/esm2020/lib/util/validation.service.mjs +0 -185
  67. package/esm2020/lib/util/window-resize.service.mjs +0 -24
  68. package/esm2020/lib/util/window.service.mjs +0 -16
  69. package/esm2020/lib/widgets/alert/alert.model.mjs +0 -2
  70. package/esm2020/lib/widgets/alert/alert.service.mjs +0 -78
  71. package/esm2020/lib/widgets/collapse-table/collapse-table.component.mjs +0 -79
  72. package/esm2020/lib/widgets/collapse-table/collapse-table.module.mjs +0 -34
  73. package/esm2020/lib/widgets/data-table/data-table.component.mjs +0 -77
  74. package/esm2020/lib/widgets/data-table/data-table.model.mjs +0 -2
  75. package/esm2020/lib/widgets/data-table/data-table.module.mjs +0 -41
  76. package/esm2020/lib/widgets/date-shortcut/date-shortcut.component.mjs +0 -295
  77. package/esm2020/lib/widgets/date-shortcut/date-shortcut.module.mjs +0 -32
  78. package/esm2020/lib/widgets/dialog/dialog.confirm.content.mjs +0 -63
  79. package/esm2020/lib/widgets/dialog/dialog.error.content.mjs +0 -57
  80. package/esm2020/lib/widgets/dialog/dialog.input.content.mjs +0 -271
  81. package/esm2020/lib/widgets/dialog/dialog.login.content.mjs +0 -517
  82. package/esm2020/lib/widgets/dialog/dialog.notify.content.mjs +0 -57
  83. package/esm2020/lib/widgets/dialog/dialog.register.content.mjs +0 -328
  84. package/esm2020/lib/widgets/dialog/dialog.select-array-objs.content.mjs +0 -200
  85. package/esm2020/lib/widgets/dialog/dialog.select-array.content.mjs +0 -305
  86. package/esm2020/lib/widgets/dialog/dialog.select-data-labels.content.mjs +0 -191
  87. package/esm2020/lib/widgets/dialog/dialog.select-datetime.content.mjs +0 -185
  88. package/esm2020/lib/widgets/dialog/dialog.select-with-buttons-url.content.mjs +0 -162
  89. package/esm2020/lib/widgets/dialog/dialog.service.mjs +0 -97
  90. package/esm2020/lib/widgets/file/file-upload.component.mjs +0 -426
  91. package/esm2020/lib/widgets/file/file-upload.module.mjs +0 -48
  92. package/esm2020/lib/widgets/form-button/form-button.component.mjs +0 -94
  93. package/esm2020/lib/widgets/form-button/form-button.module.mjs +0 -28
  94. package/esm2020/lib/widgets/navbar-main/navbar-main.component.mjs +0 -220
  95. package/esm2020/lib/widgets/navbar-module/navbar-module.component.mjs +0 -104
  96. package/esm2020/lib/widgets/navbar-module/navbar-module.model.mjs +0 -2
  97. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.component.mjs +0 -38
  98. package/esm2020/lib/widgets/responsive-button-group/responsive-button-group.module.mjs +0 -24
  99. package/esm2020/lib/widgets/scheduler/scheduler.component.mjs +0 -184
  100. package/esm2020/lib/widgets/scheduler/scheduler.module.mjs +0 -37
  101. package/esm2020/lib/widgets/sort-table/sort-table-header.component.mjs +0 -67
  102. package/esm2020/lib/widgets/sort-table/sort-table-ngfor.component.mjs +0 -48
  103. package/esm2020/lib/widgets/sort-table/sort-table.directive.mjs +0 -174
  104. package/esm2020/lib/widgets/sort-table/sort-table.module.mjs +0 -38
  105. package/esm2020/lib/widgets/user-role/user-role.component.mjs +0 -27
  106. package/esm2020/lib/widgets/user-role/user-role.module.mjs +0 -24
  107. package/esm2020/public_api.mjs +0 -91
  108. package/esm2020/resolveio-client-lib-core.mjs +0 -5
  109. package/fesm2015/resolveio-client-lib-core.mjs +0 -9191
  110. package/fesm2015/resolveio-client-lib-core.mjs.map +0 -1
  111. package/fesm2020/resolveio-client-lib-core.mjs +0 -9184
  112. package/fesm2020/resolveio-client-lib-core.mjs.map +0 -1
  113. package/lib/account-manager.service.d.ts +0 -41
  114. package/lib/auth/auth-guard.service.d.ts +0 -26
  115. package/lib/auth/auth-permissions.service.d.ts +0 -10
  116. package/lib/auth/auth.service.d.ts +0 -30
  117. package/lib/auth/auth365.component.d.ts +0 -20
  118. package/lib/auth/can-deactivate-guard.service.d.ts +0 -11
  119. package/lib/auth/enroll.component.d.ts +0 -28
  120. package/lib/auth/forgot-password.component.d.ts +0 -28
  121. package/lib/core.component.d.ts +0 -64
  122. package/lib/core.module.d.ts +0 -35
  123. package/lib/core.service.d.ts +0 -49
  124. package/lib/directive/focus.d.ts +0 -10
  125. package/lib/directive/scroll.d.ts +0 -20
  126. package/lib/home/home.component.d.ts +0 -28
  127. package/lib/logger/logger.component.d.ts +0 -37
  128. package/lib/models/app-status.model.d.ts +0 -4
  129. package/lib/models/collection-document.model.d.ts +0 -6
  130. package/lib/models/cron-job.model.d.ts +0 -13
  131. package/lib/models/dialog.model.d.ts +0 -23
  132. package/lib/models/file.model.d.ts +0 -9
  133. package/lib/models/log-method-latency.model.d.ts +0 -7
  134. package/lib/models/navbar-main-tab.model.d.ts +0 -14
  135. package/lib/models/pagination.model.d.ts +0 -17
  136. package/lib/models/permission.model.d.ts +0 -14
  137. package/lib/models/select-data-label.model.d.ts +0 -9
  138. package/lib/models/subscription.model.d.ts +0 -19
  139. package/lib/models/support-ticket.model.d.ts +0 -71
  140. package/lib/models/user-group.model.d.ts +0 -20
  141. package/lib/models/user.model.d.ts +0 -70
  142. package/lib/offline-db.d.ts +0 -28
  143. package/lib/offline-manager.service.d.ts +0 -23
  144. package/lib/pipes/domsanitizor.pipe.d.ts +0 -10
  145. package/lib/pipes/filter.pipe.d.ts +0 -12
  146. package/lib/pipes/json-parse.pipe.d.ts +0 -7
  147. package/lib/pipes/minus-currency.pipe.d.ts +0 -7
  148. package/lib/pipes/phone.pipe.d.ts +0 -7
  149. package/lib/pipes/pipe.module.d.ts +0 -13
  150. package/lib/pipes/reverse-list.pipe.d.ts +0 -6
  151. package/lib/pipes/titlecase.pipe.d.ts +0 -7
  152. package/lib/report-builder.permission.d.ts +0 -2
  153. package/lib/resolveio-class.d.ts +0 -26
  154. package/lib/shared/shared.module.d.ts +0 -17
  155. package/lib/socket-manager.service.d.ts +0 -38
  156. package/lib/socket.service.d.ts +0 -44
  157. package/lib/super-admin.permission.d.ts +0 -2
  158. package/lib/support-ticket/detail/support-ticket-detail.component.d.ts +0 -32
  159. package/lib/support-ticket/edit/support-ticket-edit.component.d.ts +0 -30
  160. package/lib/support-ticket/list/support-ticket-list.component.d.ts +0 -26
  161. package/lib/support-ticket/new/support-ticket-new.component.d.ts +0 -26
  162. package/lib/support-ticket/support-ticket.component.d.ts +0 -20
  163. package/lib/support-ticket/support-ticket.module.d.ts +0 -15
  164. package/lib/support-ticket/support-ticket.routing.d.ts +0 -3
  165. package/lib/support-ticket/support-ticket.service.d.ts +0 -9
  166. package/lib/token-manager.service.d.ts +0 -11
  167. package/lib/user-settings/settings/users-settings.component.d.ts +0 -54
  168. package/lib/user-settings/user-settings.component.d.ts +0 -20
  169. package/lib/user-settings/user-settings.module.d.ts +0 -12
  170. package/lib/user-settings/user-settings.permission.d.ts +0 -2
  171. package/lib/user-settings/user-settings.routing.d.ts +0 -3
  172. package/lib/user-settings/user-settings.service.d.ts +0 -9
  173. package/lib/util/action-name.helper.d.ts +0 -1
  174. package/lib/util/aws.service.d.ts +0 -17
  175. package/lib/util/common.helper.d.ts +0 -12
  176. package/lib/util/validation.service.d.ts +0 -88
  177. package/lib/util/window-resize.service.d.ts +0 -12
  178. package/lib/util/window.service.d.ts +0 -6
  179. package/lib/widgets/alert/alert.model.d.ts +0 -1
  180. package/lib/widgets/alert/alert.service.d.ts +0 -11
  181. package/lib/widgets/collapse-table/collapse-table.component.d.ts +0 -23
  182. package/lib/widgets/collapse-table/collapse-table.module.d.ts +0 -9
  183. package/lib/widgets/data-table/data-table.component.d.ts +0 -23
  184. package/lib/widgets/data-table/data-table.model.d.ts +0 -13
  185. package/lib/widgets/data-table/data-table.module.d.ts +0 -12
  186. package/lib/widgets/date-shortcut/date-shortcut.component.d.ts +0 -24
  187. package/lib/widgets/date-shortcut/date-shortcut.module.d.ts +0 -10
  188. package/lib/widgets/dialog/dialog.confirm.content.d.ts +0 -12
  189. package/lib/widgets/dialog/dialog.error.content.d.ts +0 -11
  190. package/lib/widgets/dialog/dialog.input.content.d.ts +0 -18
  191. package/lib/widgets/dialog/dialog.login.content.d.ts +0 -17
  192. package/lib/widgets/dialog/dialog.notify.content.d.ts +0 -11
  193. package/lib/widgets/dialog/dialog.register.content.d.ts +0 -13
  194. package/lib/widgets/dialog/dialog.select-array-objs.content.d.ts +0 -23
  195. package/lib/widgets/dialog/dialog.select-array.content.d.ts +0 -31
  196. package/lib/widgets/dialog/dialog.select-data-labels.content.d.ts +0 -22
  197. package/lib/widgets/dialog/dialog.select-datetime.content.d.ts +0 -21
  198. package/lib/widgets/dialog/dialog.select-with-buttons-url.content.d.ts +0 -25
  199. package/lib/widgets/dialog/dialog.service.d.ts +0 -21
  200. package/lib/widgets/file/file-upload.component.d.ts +0 -49
  201. package/lib/widgets/file/file-upload.module.d.ts +0 -14
  202. package/lib/widgets/form-button/form-button.component.d.ts +0 -15
  203. package/lib/widgets/form-button/form-button.module.d.ts +0 -9
  204. package/lib/widgets/navbar-main/navbar-main.component.d.ts +0 -53
  205. package/lib/widgets/navbar-module/navbar-module.component.d.ts +0 -24
  206. package/lib/widgets/navbar-module/navbar-module.model.d.ts +0 -13
  207. package/lib/widgets/responsive-button-group/responsive-button-group.component.d.ts +0 -17
  208. package/lib/widgets/responsive-button-group/responsive-button-group.module.d.ts +0 -8
  209. package/lib/widgets/scheduler/scheduler.component.d.ts +0 -50
  210. package/lib/widgets/scheduler/scheduler.module.d.ts +0 -11
  211. package/lib/widgets/sort-table/sort-table-header.component.d.ts +0 -23
  212. package/lib/widgets/sort-table/sort-table-ngfor.component.d.ts +0 -17
  213. package/lib/widgets/sort-table/sort-table.directive.d.ts +0 -48
  214. package/lib/widgets/sort-table/sort-table.module.d.ts +0 -11
  215. package/lib/widgets/user-role/user-role.component.d.ts +0 -10
  216. package/lib/widgets/user-role/user-role.module.d.ts +0 -8
@@ -1,296 +0,0 @@
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
- constructor(_aps, _us, _services, _ds) {
22
- super(_services);
23
- this._aps = _aps;
24
- this._us = _us;
25
- this._services = _services;
26
- this._ds = _ds;
27
- this.subscription$ = [];
28
- this.disableFormButton = false;
29
- this.client = '';
30
- this.views = [];
31
- this.hasSubmit = false;
32
- }
33
- ngOnInit() {
34
- this._us.setSelectedUser('0');
35
- this.client = this._services._app.client.getValue();
36
- this.form = this._services._fb.group({
37
- table_color: ['#3b3ee3', [Validators.required]],
38
- table_font_color: ['#ffffff', [Validators.required]],
39
- font_size: [12, [Validators.required, this._services._vs.wholeNumbersGreaterThanZero, this._services._vs.maxValue(18), this._services._vs.minValue(8)]],
40
- secondary_table_color: ['#87ceeb', [Validators.required]],
41
- secondary_table_font_color: ['#000000', [Validators.required]],
42
- tertiary_table_color: ['#ff4500', [Validators.required]],
43
- tertiary_table_font_color: ['#000000', [Validators.required]],
44
- collapsable_menu: [true],
45
- entries_per_page: ['25', [Validators.required]],
46
- warning_color: ['#ffc107', [Validators.required]],
47
- warning_font_color: ['#000000', [Validators.required]],
48
- warning_hover_color: ['#e0a800', [Validators.required]],
49
- success_color: ['#28a745', [Validators.required]],
50
- success_font_color: ['#ffffff', [Validators.required]],
51
- success_hover_color: ['#218838', [Validators.required]],
52
- danger_color: ['#dc3545', [Validators.required]],
53
- danger_font_color: ['#ffffff', [Validators.required]],
54
- danger_hover_color: ['#c82333', [Validators.required]],
55
- info_color: ['#17a2b8', [Validators.required]],
56
- info_font_color: ['#ffffff', [Validators.required]],
57
- info_hover_color: ['#138496', [Validators.required]],
58
- primary_color: ['#007bff', [Validators.required]],
59
- primary_font_color: ['#ffffff', [Validators.required]],
60
- primary_hover_color: ['#0069d9', [Validators.required]],
61
- secondary_color: ['#868e96', [Validators.required]],
62
- secondary_font_color: ['#ffffff', [Validators.required]],
63
- secondary_hover_color: ['#5a6268', [Validators.required]],
64
- routing_preference: ['alwaysAsk'],
65
- opening_route: ['/home']
66
- });
67
- if (this._services._account.getUser() && this._services._account.getUser().settings) {
68
- this.form.patchValue(this._services._account.getUser().settings);
69
- this._services._account.getUser().roles.groups.forEach(group => {
70
- group.views.forEach(view => {
71
- if (!this.views.some(a => a.value === view)) {
72
- this.views.push({
73
- value: view,
74
- display: toTitleCase(view.replace('/', '').replace(new RegExp('/', 'g'), ' - '))
75
- });
76
- }
77
- });
78
- });
79
- }
80
- document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
81
- document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
82
- document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
83
- document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
84
- document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
85
- document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
86
- document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
87
- document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
88
- document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
89
- document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
90
- document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
91
- document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
92
- document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
93
- document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
94
- document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
95
- document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
96
- document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
97
- document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
98
- document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
99
- document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
100
- document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
101
- document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
102
- document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
103
- document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
104
- document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
105
- document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
106
- document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
107
- document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
108
- document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
109
- document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
110
- document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
111
- this.subscription$.push(this._services._account.user.subscribe(user => {
112
- this.user = user;
113
- }));
114
- }
115
- ngOnDestroy() {
116
- this.subscription$.forEach(sub => {
117
- sub.unsubscribe();
118
- });
119
- if (!this.hasSubmit) {
120
- this.submitForm(this.form);
121
- }
122
- }
123
- changePrimaryColor() {
124
- document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
125
- }
126
- changePrimaryFontColor() {
127
- document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
128
- }
129
- changePrimaryFontSize() {
130
- document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
131
- }
132
- changeSecondaryColor() {
133
- document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
134
- }
135
- changeSecondaryFontColor() {
136
- document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
137
- }
138
- changeTertiaryColor() {
139
- document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
140
- }
141
- changeTertiaryFontColor() {
142
- document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
143
- }
144
- changeWarningColor() {
145
- document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
146
- document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
147
- }
148
- changeWarningHoverColor() {
149
- document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
150
- }
151
- changeWarningFontColor() {
152
- document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
153
- }
154
- changeSuccessColor() {
155
- document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
156
- document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
157
- }
158
- changeSuccessHoverColor() {
159
- document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
160
- }
161
- changeSuccessFontColor() {
162
- document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
163
- }
164
- changeDangerColor() {
165
- document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
166
- document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
167
- }
168
- changeDangerHoverColor() {
169
- document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
170
- }
171
- changeDangerFontColor() {
172
- document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
173
- }
174
- changeInfoColor() {
175
- document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
176
- document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
177
- }
178
- changeInfoHoverColor() {
179
- document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
180
- }
181
- changeInfoFontColor() {
182
- document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
183
- }
184
- changePrimaryButtonColor() {
185
- document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
186
- document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
187
- }
188
- changePrimaryHoverColor() {
189
- document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
190
- }
191
- changePrimaryButtonFontColor() {
192
- document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
193
- }
194
- changeSecondaryButtonColor() {
195
- document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
196
- document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
197
- }
198
- changeSecondaryHoverColor() {
199
- document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
200
- }
201
- changeSecondaryButtonFontColor() {
202
- document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
203
- }
204
- reset() {
205
- this.form.controls.table_color.setValue('#3b3ee3');
206
- this.form.controls.table_font_color.setValue('#ffffff');
207
- this.form.controls.font_size.setValue(12);
208
- this.form.controls.secondary_table_color.setValue('#87ceeb');
209
- this.form.controls.secondary_table_font_color.setValue('#000000');
210
- this.form.controls.tertiary_table_color.setValue('#ff4500');
211
- this.form.controls.tertiary_table_font_color.setValue('#000000');
212
- this.form.controls.collapsable_menu.setValue(true);
213
- this.form.controls.entries_per_page.setValue('25');
214
- this.form.controls.warning_color.setValue('#ffc107');
215
- this.form.controls.warning_font_color.setValue('#000000');
216
- this.form.controls.warning_hover_color.setValue('#e0a800');
217
- this.form.controls.success_color.setValue('#28a745');
218
- this.form.controls.success_font_color.setValue('#ffffff');
219
- this.form.controls.success_hover_color.setValue('#218838');
220
- this.form.controls.danger_color.setValue('#dc3545');
221
- this.form.controls.danger_font_color.setValue('#ffffff');
222
- this.form.controls.danger_hover_color.setValue('#c82333');
223
- this.form.controls.info_color.setValue('#17a2b8');
224
- this.form.controls.info_font_color.setValue('#ffffff');
225
- this.form.controls.info_hover_color.setValue('#138496');
226
- this.form.controls.primary_color.setValue('#007bff');
227
- this.form.controls.primary_font_color.setValue('#ffffff');
228
- this.form.controls.primary_hover_color.setValue('#0069d9');
229
- this.form.controls.secondary_color.setValue('#868e96');
230
- this.form.controls.secondary_font_color.setValue('#ffffff');
231
- this.form.controls.secondary_hover_color.setValue('#5a6268');
232
- document.documentElement.style.setProperty('--primary-table-color', this.form.controls.table_color.value);
233
- document.documentElement.style.setProperty('--primary-table-font-color', this.form.controls.table_font_color.value);
234
- document.documentElement.style.setProperty('--font-size', this.form.controls.font_size.value + 'px');
235
- document.documentElement.style.setProperty('--secondary-table-color', this.form.controls.secondary_table_color.value);
236
- document.documentElement.style.setProperty('--secondary-table-font-color', this.form.controls.secondary_table_font_color.value);
237
- document.documentElement.style.setProperty('--tertiary-table-color', this.form.controls.tertiary_table_color.value);
238
- document.documentElement.style.setProperty('--tertiary-table-font-color', this.form.controls.tertiary_table_font_color.value);
239
- document.documentElement.style.setProperty('--warning-color', this.form.controls.warning_color.value);
240
- document.documentElement.style.setProperty('--warning-font-color', this.form.controls.warning_font_color.value);
241
- document.documentElement.style.setProperty('--warning-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.warning_color.value, .5));
242
- document.documentElement.style.setProperty('--warning-hover-color', this.form.controls.warning_hover_color.value);
243
- document.documentElement.style.setProperty('--success-color', this.form.controls.success_color.value);
244
- document.documentElement.style.setProperty('--success-font-color', this.form.controls.success_font_color.value);
245
- document.documentElement.style.setProperty('--success-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.success_color.value, .5));
246
- document.documentElement.style.setProperty('--success-hover-color', this.form.controls.success_hover_color.value);
247
- document.documentElement.style.setProperty('--danger-color', this.form.controls.danger_color.value);
248
- document.documentElement.style.setProperty('--danger-font-color', this.form.controls.danger_font_color.value);
249
- document.documentElement.style.setProperty('--danger-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.danger_color.value, .5));
250
- document.documentElement.style.setProperty('--danger-hover-color', this.form.controls.danger_hover_color.value);
251
- document.documentElement.style.setProperty('--info-color', this.form.controls.info_color.value);
252
- document.documentElement.style.setProperty('--info-font-color', this.form.controls.info_font_color.value);
253
- document.documentElement.style.setProperty('--info-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.info_color.value, .5));
254
- document.documentElement.style.setProperty('--info-hover-color', this.form.controls.info_hover_color.value);
255
- document.documentElement.style.setProperty('--primary-color', this.form.controls.primary_color.value);
256
- document.documentElement.style.setProperty('--primary-font-color', this.form.controls.primary_font_color.value);
257
- document.documentElement.style.setProperty('--primary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.primary_color.value, .5));
258
- document.documentElement.style.setProperty('--primary-hover-color', this.form.controls.primary_hover_color.value);
259
- document.documentElement.style.setProperty('--secondary-color', this.form.controls.secondary_color.value);
260
- document.documentElement.style.setProperty('--secondary-font-color', this.form.controls.secondary_font_color.value);
261
- document.documentElement.style.setProperty('--secondary-shadow-color', '0 0 0 0.2rem ' + hexToRGB(this.form.controls.secondary_color.value, .5));
262
- document.documentElement.style.setProperty('--secondary-hover-color', this.form.controls.secondary_hover_color.value);
263
- }
264
- submitForm(form) {
265
- this.hasSubmit = true;
266
- this._services._socket.call('updateDocumentProps', 'users', this._services._account.getUser()._id, [
267
- { prop: 'settings', data: this.form.value }
268
- ], this._services._account.getUser().__v, (err, res) => {
269
- if (res) {
270
- this._services._alert.setAlert('success', 'Settings have been updated');
271
- }
272
- else {
273
- this._ds.error('Could not update settings');
274
- this._services._socket.call('insertErrorLog', 'user settings - update user', [
275
- this._services._account.getUser(), err
276
- ]);
277
- }
278
- });
279
- }
280
- }
281
- UsersSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UsersSettingsComponent, deps: [{ token: i1.AuthPermissionService }, { token: i2.UserSettingsService }, { token: i3.ProviderService }, { token: i4.DialogService }], target: i0.ɵɵFactoryTarget.Component });
282
- UsersSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", 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" }] });
283
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UsersSettingsComponent, decorators: [{
284
- type: Component,
285
- 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>" }]
286
- }], ctorParameters: function () { return [{ type: i1.AuthPermissionService }, { type: i2.UserSettingsService }, { type: i3.ProviderService }, { type: i4.DialogService }]; } });
287
- function hexToRGB(hex, alpha) {
288
- let r = parseInt(hex.slice(1, 3), 16), g = parseInt(hex.slice(3, 5), 16), b = parseInt(hex.slice(5, 7), 16);
289
- if (alpha) {
290
- return "rgba(" + r + ", " + g + ", " + b + ", " + alpha + ")";
291
- }
292
- else {
293
- return "rgb(" + r + ", " + g + ", " + b + ")";
294
- }
295
- }
296
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtc2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3VzZXItc2V0dGluZ3Mvc2V0dGluZ3MvdXNlcnMtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvbGliL3VzZXItc2V0dGluZ3Mvc2V0dGluZ3MvdXNlcnMtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEUsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU12RCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsYUFBYTtJQWF4RCxZQUFvQixJQUEyQixFQUFVLEdBQXdCLEVBQVUsU0FBMEIsRUFBVSxHQUFrQjtRQUNoSixLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFERSxTQUFJLEdBQUosSUFBSSxDQUF1QjtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQXFCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUFlO1FBWGpKLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUluQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFMUIsV0FBTSxH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Q0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFDakMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV0QyxJQUFJLEtBQUssRUFBRTtRQUNQLE9BQU8sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7S0FDakU7U0FBTTtRQUNILE9BQU8sTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pEO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVzZXJTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi91c2VyLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcm92aWRlclNlcnZpY2UsIEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9yZXNvbHZlaW8tY2xhc3MnO1xuaW1wb3J0IHsgQXV0aFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXV0aC9hdXRoLXBlcm1pc3Npb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3dpZGdldHMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFVzZXJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLm1vZGVsJztcbmltcG9ydCB7IHRvVGl0bGVDYXNlIH0gZnJvbSAnLi4vLi4vdXRpbC9jb21tb24uaGVscGVyJztcblxuQENvbXBvbmVudCh7XG5cdHByb3ZpZGVyczogW1Byb3ZpZGVyU2VydmljZV0sXG5cdHRlbXBsYXRlVXJsOiAnLi91c2Vycy1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXNlcnNTZXR0aW5nc0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7IFxuXG5cdHN1YnNjcmlwdGlvbiQ6IFN1YnNjcmlwdGlvbltdID0gW107XG5cblx0Zm9ybTogRm9ybUdyb3VwO1xuXG5cdGRpc2FibGVGb3JtQnV0dG9uID0gZmFsc2U7XG5cdHVzZXI6IFVzZXJNb2RlbDtcblx0Y2xpZW50ID0gJyc7XG5cdHZpZXdzID0gW107XG5cblx0aGFzU3VibWl0ID0gZmFsc2U7XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfYXBzOiBBdXRoUGVybWlzc2lvblNlcnZpY2UsIHByaXZhdGUgX3VzOiBVc2VyU2V0dGluZ3NTZXJ2aWNlLCBwcml2YXRlIF9zZXJ2aWNlczogUHJvdmlkZXJTZXJ2aWNlLCBwcml2YXRlIF9kczogRGlhbG9nU2VydmljZSkge1xuXHRcdHN1cGVyKF9zZXJ2aWNlcyk7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLl91cy5zZXRTZWxlY3RlZFVzZXIoJzAnKTtcblxuXHRcdHRoaXMuY2xpZW50ID0gdGhpcy5fc2VydmljZXMuX2FwcC5jbGllbnQuZ2V0VmFsdWUoKTtcblxuXHRcdHRoaXMuZm9ybSA9IHRoaXMuX3NlcnZpY2VzLl9mYi5ncm91cCh7XG5cdFx0XHR0YWJsZV9jb2xvcjogWycjM2IzZWUzJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHRhYmxlX2ZvbnRfY29sb3I6IFsnI2ZmZmZmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRmb250X3NpemU6IFsxMiwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHRoaXMuX3NlcnZpY2VzLl92cy53aG9sZU51bWJlcnNHcmVhdGVyVGhhblplcm8sIHRoaXMuX3NlcnZpY2VzLl92cy5tYXhWYWx1ZSgxOCksIHRoaXMuX3NlcnZpY2VzLl92cy5taW5WYWx1ZSg4KV1dLFxuXHRcdFx0c2Vjb25kYXJ5X3RhYmxlX2NvbG9yOiBbJyM4N2NlZWInLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0c2Vjb25kYXJ5X3RhYmxlX2ZvbnRfY29sb3I6IFsnIzAwMDAwMCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR0ZXJ0aWFyeV90YWJsZV9jb2xvcjogWycjZmY0NTAwJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3I6IFsnIzAwMDAwMCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRjb2xsYXBzYWJsZV9tZW51OiBbdHJ1ZV0sXG5cdFx0XHRlbnRyaWVzX3Blcl9wYWdlOiBbJzI1JywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHdhcm5pbmdfY29sb3I6IFsnI2ZmYzEwNycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR3YXJuaW5nX2ZvbnRfY29sb3I6IFsnIzAwMDAwMCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHR3YXJuaW5nX2hvdmVyX2NvbG9yOiBbJyNlMGE4MDAnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0c3VjY2Vzc19jb2xvcjogWycjMjhhNzQ1JywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHN1Y2Nlc3NfZm9udF9jb2xvcjogWycjZmZmZmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHN1Y2Nlc3NfaG92ZXJfY29sb3I6IFsnIzIxODgzOCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRkYW5nZXJfY29sb3I6IFsnI2RjMzU0NScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRkYW5nZXJfZm9udF9jb2xvcjogWycjZmZmZmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdGRhbmdlcl9ob3Zlcl9jb2xvcjogWycjYzgyMzMzJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdGluZm9fY29sb3I6IFsnIzE3YTJiOCcsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRpbmZvX2ZvbnRfY29sb3I6IFsnI2ZmZmZmZicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRpbmZvX2hvdmVyX2NvbG9yOiBbJyMxMzg0OTYnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuXHRcdFx0cHJpbWFyeV9jb2xvcjogWycjMDA3YmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHByaW1hcnlfZm9udF9jb2xvcjogWycjZmZmZmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHByaW1hcnlfaG92ZXJfY29sb3I6IFsnIzAwNjlkOScsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRzZWNvbmRhcnlfY29sb3I6IFsnIzg2OGU5NicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG5cdFx0XHRzZWNvbmRhcnlfZm9udF9jb2xvcjogWycjZmZmZmZmJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHNlY29uZGFyeV9ob3Zlcl9jb2xvcjogWycjNWE2MjY4JywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcblx0XHRcdHJvdXRpbmdfcHJlZmVyZW5jZTogWydhbHdheXNBc2snXSxcblx0XHRcdG9wZW5pbmdfcm91dGU6IFsnL2hvbWUnXVxuXHRcdH0pO1xuXG5cdFx0aWYgKHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKSAmJiB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuc2V0dGluZ3MpIHtcblx0XHRcdHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKS5zZXR0aW5ncyk7XG5cblx0XHRcdHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKS5yb2xlcy5ncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG5cdFx0XHRcdGdyb3VwLnZpZXdzLmZvckVhY2godmlldyA9PiB7XG5cdFx0XHRcdFx0aWYgKCF0aGlzLnZpZXdzLnNvbWUoYSA9PiBhLnZhbHVlID09PSB2aWV3KSkge1xuXHRcdFx0XHRcdFx0dGhpcy52aWV3cy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHZpZXcsXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXk6IHRvVGl0bGVDYXNlKHZpZXcucmVwbGFjZSgnLycsICcnKS5yZXBsYWNlKG5ldyBSZWdFeHAoJy8nLCAnZycpLCAnIC0gJykpXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50YWJsZV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktdGFibGUtZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZm9udC1zaXplJywgdGhpcy5mb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS52YWx1ZSArICdweCcpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktdGFibGUtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXRhYmxlLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10ZXJ0aWFyeS10YWJsZS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRlcnRpYXJ5LXRhYmxlLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGVydGlhcnlfdGFibGVfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfaG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfaG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuaW5mb19mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2hvdmVyX2NvbG9yLnZhbHVlKTtcblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9uJC5wdXNoKHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LnVzZXIuc3Vic2NyaWJlKHVzZXIgPT4ge1xuXHRcdFx0dGhpcy51c2VyID0gdXNlcjtcblx0XHR9KSk7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbiQuZm9yRWFjaChzdWIgPT4ge1xuXHRcdFx0c3ViLnVuc3Vic2NyaWJlKCk7XG5cdFx0fSk7XG5cblx0XHRpZiAoIXRoaXMuaGFzU3VibWl0KSB7XG5cdFx0XHR0aGlzLnN1Ym1pdEZvcm0odGhpcy5mb3JtKTtcblx0XHR9XG5cdH1cblxuXHRjaGFuZ2VQcmltYXJ5Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktdGFibGUtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGFibGVfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlUHJpbWFyeUZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRhYmxlX2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlUHJpbWFyeUZvbnRTaXplKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1mb250LXNpemUnLCB0aGlzLmZvcm0uY29udHJvbHMuZm9udF9zaXplLnZhbHVlICsgJ3B4Jyk7XG5cdH1cblxuXHRjaGFuZ2VTZWNvbmRhcnlDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VTZWNvbmRhcnlGb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVRlcnRpYXJ5Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRlcnRpYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVRlcnRpYXJ5Rm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10ZXJ0aWFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlV2FybmluZ0NvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHR9XG5cblx0Y2hhbmdlV2FybmluZ0hvdmVyQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXdhcm5pbmctaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VXYXJuaW5nRm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVN1Y2Nlc3NDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19jb2xvci52YWx1ZSwgLjUpKTtcblx0fVxuXG5cdGNoYW5nZVN1Y2Nlc3NIb3ZlckNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zdWNjZXNzLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfaG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlU3VjY2Vzc0ZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VEYW5nZXJDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHR9XG5cblx0Y2hhbmdlRGFuZ2VySG92ZXJDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZGFuZ2VyLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VEYW5nZXJGb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9mb250X2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZUluZm9Db2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuaW5mb19jb2xvci52YWx1ZSwgLjUpKTtcblx0fVxuXG5cdGNoYW5nZUluZm9Ib3ZlckNvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1pbmZvLWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmluZm9faG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlSW5mb0ZvbnRDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRjaGFuZ2VQcmltYXJ5QnV0dG9uQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3IudmFsdWUsIC41KSk7XG5cdH1cblxuXHRjaGFuZ2VQcmltYXJ5SG92ZXJDb2xvcigpIHtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcHJpbWFyeS1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0fVxuXG5cdGNoYW5nZVByaW1hcnlCdXR0b25Gb250Q29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2ZvbnRfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlU2Vjb25kYXJ5QnV0dG9uQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci52YWx1ZSwgLjUpKTtcblx0fVxuXG5cdGNoYW5nZVNlY29uZGFyeUhvdmVyQ29sb3IoKSB7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfaG92ZXJfY29sb3IudmFsdWUpO1xuXHR9XG5cblx0Y2hhbmdlU2Vjb25kYXJ5QnV0dG9uRm9udENvbG9yKCkge1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfZm9udF9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRyZXNldCgpIHtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMudGFibGVfY29sb3Iuc2V0VmFsdWUoJyMzYjNlZTMnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMudGFibGVfZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5mb250X3NpemUuc2V0VmFsdWUoMTIpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5zZWNvbmRhcnlfdGFibGVfY29sb3Iuc2V0VmFsdWUoJyM4N2NlZWInKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2ZvbnRfY29sb3Iuc2V0VmFsdWUoJyMwMDAwMDAnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMudGVydGlhcnlfdGFibGVfY29sb3Iuc2V0VmFsdWUoJyNmZjQ1MDAnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMudGVydGlhcnlfdGFibGVfZm9udF9jb2xvci5zZXRWYWx1ZSgnIzAwMDAwMCcpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5jb2xsYXBzYWJsZV9tZW51LnNldFZhbHVlKHRydWUpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5lbnRyaWVzX3Blcl9wYWdlLnNldFZhbHVlKCcyNScpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2NvbG9yLnNldFZhbHVlKCcjZmZjMTA3Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfZm9udF9jb2xvci5zZXRWYWx1ZSgnIzAwMDAwMCcpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2hvdmVyX2NvbG9yLnNldFZhbHVlKCcjZTBhODAwJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfY29sb3Iuc2V0VmFsdWUoJyMyOGE3NDUnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19mb250X2NvbG9yLnNldFZhbHVlKCcjZmZmZmZmJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfaG92ZXJfY29sb3Iuc2V0VmFsdWUoJyMyMTg4MzgnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2NvbG9yLnNldFZhbHVlKCcjZGMzNTQ1Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9mb250X2NvbG9yLnNldFZhbHVlKCcjZmZmZmZmJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLmRhbmdlcl9ob3Zlcl9jb2xvci5zZXRWYWx1ZSgnI2M4MjMzMycpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2NvbG9yLnNldFZhbHVlKCcjMTdhMmI4Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fZm9udF9jb2xvci5zZXRWYWx1ZSgnI2ZmZmZmZicpO1xuXHRcdHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2hvdmVyX2NvbG9yLnNldFZhbHVlKCcjMTM4NDk2Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3Iuc2V0VmFsdWUoJyMwMDdiZmYnKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9mb250X2NvbG9yLnNldFZhbHVlKCcjZmZmZmZmJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfaG92ZXJfY29sb3Iuc2V0VmFsdWUoJyMwMDY5ZDknKTtcblx0XHR0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2NvbG9yLnNldFZhbHVlKCcjODY4ZTk2Jyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9mb250X2NvbG9yLnNldFZhbHVlKCcjZmZmZmZmJyk7XG5cdFx0dGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9ob3Zlcl9jb2xvci5zZXRWYWx1ZSgnIzVhNjI2OCcpO1xuXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktdGFibGUtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGFibGVfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXRhYmxlLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGFibGVfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWZvbnQtc2l6ZScsIHRoaXMuZm9ybS5jb250cm9scy5mb250X3NpemUudmFsdWUgKyAncHgnKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LXRhYmxlLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXNlY29uZGFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tdGVydGlhcnktdGFibGUtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMudGVydGlhcnlfdGFibGVfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10ZXJ0aWFyeS10YWJsZS1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLndhcm5pbmdfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS13YXJuaW5nLWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19mb250X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0td2FybmluZy1ob3Zlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy53YXJuaW5nX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5zdWNjZXNzX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3VjY2Vzcy1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3Mtc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXN1Y2Nlc3MtaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc3VjY2Vzc19ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5kYW5nZXJfZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWRhbmdlci1zaGFkb3ctY29sb3InLCAnMCAwIDAgMC4ycmVtICcgKyBoZXhUb1JHQih0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kYW5nZXItaG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuZGFuZ2VyX2hvdmVyX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5pbmZvX2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taW5mby1mb250LWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fZm9udF9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8tc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLmluZm9fY29sb3IudmFsdWUsIC41KSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWluZm8taG92ZXItY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuaW5mb19ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMucHJpbWFyeV9jb2xvci52YWx1ZSk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXByaW1hcnktZm9udC1jb2xvcicsIHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LXNoYWRvdy1jb2xvcicsICcwIDAgMCAwLjJyZW0gJyArIGhleFRvUkdCKHRoaXMuZm9ybS5jb250cm9scy5wcmltYXJ5X2NvbG9yLnZhbHVlLCAuNSkpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wcmltYXJ5LWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnByaW1hcnlfaG92ZXJfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2NvbG9yLnZhbHVlKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LWZvbnQtY29sb3InLCB0aGlzLmZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2ZvbnRfY29sb3IudmFsdWUpO1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zZWNvbmRhcnktc2hhZG93LWNvbG9yJywgJzAgMCAwIDAuMnJlbSAnICsgaGV4VG9SR0IodGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9jb2xvci52YWx1ZSwgLjUpKTtcblx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc2Vjb25kYXJ5LWhvdmVyLWNvbG9yJywgdGhpcy5mb3JtLmNvbnRyb2xzLnNlY29uZGFyeV9ob3Zlcl9jb2xvci52YWx1ZSk7XG5cdH1cblxuXHRzdWJtaXRGb3JtKGZvcm0pIHtcblx0XHR0aGlzLmhhc1N1Ym1pdCA9IHRydWU7XG5cblx0XHR0aGlzLl9zZXJ2aWNlcy5fc29ja2V0LmNhbGwoJ3VwZGF0ZURvY3VtZW50UHJvcHMnLCAndXNlcnMnLCB0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCkuX2lkLCBbXG5cdFx0XHR7cHJvcDogJ3NldHRpbmdzJywgZGF0YTogdGhpcy5mb3JtLnZhbHVlfVxuXHRcdF0sIHRoaXMuX3NlcnZpY2VzLl9hY2NvdW50LmdldFVzZXIoKS5fX3YsIChlcnIsIHJlcykgPT4ge1xuXHRcdFx0aWYgKHJlcykge1xuXHRcdFx0XHR0aGlzLl9zZXJ2aWNlcy5fYWxlcnQuc2V0QWxlcnQoJ3N1Y2Nlc3MnLCAnU2V0dGluZ3MgaGF2ZSBiZWVuIHVwZGF0ZWQnKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9kcy5lcnJvcignQ291bGQgbm90IHVwZGF0ZSBzZXR0aW5ncycpO1xuXHRcdFx0XHR0aGlzLl9zZXJ2aWNlcy5fc29ja2V0LmNhbGwoJ2luc2VydEVycm9yTG9nJywgJ3VzZXIgc2V0dGluZ3MgLSB1cGRhdGUgdXNlcicsIFtcblx0XHRcdFx0XHR0aGlzLl9zZXJ2aWNlcy5fYWNjb3VudC5nZXRVc2VyKCksIGVyclxuXHRcdFx0XHRdKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBoZXhUb1JHQihoZXgsIGFscGhhKSB7XG4gICAgbGV0IHIgPSBwYXJzZUludChoZXguc2xpY2UoMSwgMyksIDE2KSxcbiAgICAgICAgZyA9IHBhcnNlSW50KGhleC5zbGljZSgzLCA1KSwgMTYpLFxuICAgICAgICBiID0gcGFyc2VJbnQoaGV4LnNsaWNlKDUsIDcpLCAxNik7XG5cbiAgICBpZiAoYWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIFwicmdiYShcIiArIHIgKyBcIiwgXCIgKyBnICsgXCIsIFwiICsgYiArIFwiLCBcIiArIGFscGhhICsgXCIpXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwicmdiKFwiICsgciArIFwiLCBcIiArIGcgKyBcIiwgXCIgKyBiICsgXCIpXCI7XG4gICAgfVxufSIsIjxzdHlsZT5cbiAgICA6Om5nLWRlZXAgOnJvb3Qge1xuICAgICAgICAtLXByaW1hcnktdGFibGUtY29sb3I6ICMzYjNlZTM7XG4gICAgICAgIC0tcHJpbWFyeS10YWJsZS1mb250LWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAtLWZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgLS1zZWNvbmRhcnktdGFibGUtY29sb3I6ICM4N2NlZWI7XG4gICAgICAgIC0tc2Vjb25kYXJ5LXRhYmxlLWZvbnQtY29sb3I6ICMwMDAwMDA7XG4gICAgICAgIC0tdGVydGlhcnktdGFibGUtY29sb3I6ICNmZjQ1MDA7XG4gICAgICAgIC0tdGVydGlhcnktdGFibGUtZm9udC1jb2xvcjogIzAwMDAwMDtcbiAgICAgICAgLS13YXJuaW5nLWNvbG9yOiAjZmZjMTA3O1xuICAgICAgICAtLXdhcm5pbmctZm9udC1jb2xvcjogIzAwMDAwMDtcbiAgICAgICAgLS13YXJuaW5nLWhvdmVyLWNvbG9yOiAjZTBhODAwO1xuICAgICAgICAtLXdhcm5pbmctc2hhZG93LWNvbG9yOiAwIDAgMCAwLjJyZW0gcmdiYSgyMjIsIDE3MCwgMTIsIDAuNSk7XG4gICAgICAgIC0tc3VjY2Vzcy1jb2xvcjogIzI4YTc0NTtcbiAgICAgICAgLS1zdWNjZXNzLWZvbnQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIC0tc3VjY2Vzcy1ob3Zlci1jb2xvcjogIzIxODgzODtcbiAgICAgICAgLS1zdWNjZXNzLXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoNzIsIDE4MCwgOTcsIDAuNSk7XG4gICAgICAgIC0tZGFuZ2VyLWNvbG9yOiAjZGMzNTQ1O1xuICAgICAgICAtLWRhbmdlci1mb250LWNvbG9yOiAjZmZmZmZmO1xuICAgICAgICAtLWRhbmdlci1ob3Zlci1jb2xvcjogI2M4MjMzMztcbiAgICAgICAgLS1kYW5nZXItc2hhZG93LWNvbG9yOiAwIDAgMCAwLjJyZW0gcmdiYSgyMjUsIDgzLCA5NywgMC41KTtcbiAgICAgICAgLS1pbmZvLWNvbG9yOiAjMTdhMmI4O1xuICAgICAgICAtLWluZm8tZm9udC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgLS1pbmZvLWhvdmVyLWNvbG9yOiAjMTM4NDk2O1xuICAgICAgICAtLWluZm8tc2hhZG93LWNvbG9yOiAwIDAgMCAwLjJyZW0gcmdiYSg1OCwgMTc2LCAxOTUsIDAuNSk7XG4gICAgICAgIC0tcHJpbWFyeS1jb2xvcjogIzAwN2JmZjtcbiAgICAgICAgLS1wcmltYXJ5LWZvbnQtY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIC0tcHJpbWFyeS1ob3Zlci1jb2xvcjogIzAwNjlkOTtcbiAgICAgICAgLS1wcmltYXJ5LXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoMzgsIDE0MywgMjU1LCAwLjUpO1xuICAgICAgICAtLXNlY29uZGFyeS1jb2xvcjogIzg2OGU5NjtcbiAgICAgICAgLS1zZWNvbmRhcnktZm9udC1jb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgLS1zZWNvbmRhcnktaG92ZXItY29sb3I6ICM1YTYyNjg7XG4gICAgICAgIC0tc2Vjb25kYXJ5LXNoYWRvdy1jb2xvcjogMCAwIDAgMC4ycmVtIHJnYmEoMTMwLCAxMzgsIDE0NSwgMC41KTtcbiAgICB9XG5cbiAgICAubGFiZWwtYWNjb3JkaW9uIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMHB4O1xuICAgIH1cblxuICAgIC5mYS1wbHVzIHtcbiAgICAgICAgY29sb3I6IGJsYWNrO1xuICAgIH1cblxuICAgIC5mYS1taW51cyB7XG4gICAgICAgIGNvbG9yOiBibGFjaztcbiAgICB9IFxuXG4gICAgLmJ0bi13YXJuaW5nIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXdhcm5pbmctZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdhcm5pbmctY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXdhcm5pbmctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXdhcm5pbmc6Zm9jdXMsIC5idG4td2FybmluZy5mb2N1cyB7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXdhcm5pbmctc2hhZG93LWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi13YXJuaW5nOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLXdhcm5pbmctZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdhcm5pbmctaG92ZXItY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXdhcm5pbmctaG92ZXItY29sb3IpO1xuICAgIH1cblxuICAgIC5idG4tc3VjY2VzcyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1zdWNjZXNzLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdWNjZXNzLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zdWNjZXNzLWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi1zdWNjZXNzOmZvY3VzLCAuYnRuLXN1Y2Nlc3MuZm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1zdWNjZXNzLXNoYWRvdy1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tc3VjY2Vzczpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1zdWNjZXNzLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zdWNjZXNzLWhvdmVyLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zdWNjZXNzLWhvdmVyLWNvbG9yKTtcbiAgICB9XG5cbiAgICAuYnRuLWRhbmdlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1kYW5nZXItZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRhbmdlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tZGFuZ2VyLWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi1kYW5nZXI6Zm9jdXMsIC5idG4tZGFuZ2VyLmZvY3VzIHtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tZGFuZ2VyLXNoYWRvdy1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tZGFuZ2VyOmhvdmVyIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWRhbmdlci1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGFuZ2VyLWhvdmVyLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1kYW5nZXItaG92ZXItY29sb3IpO1xuICAgIH1cblxuICAgIC5idG4taW5mbyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pbmZvLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pbmZvLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvLWNvbG9yKTtcbiAgICB9XG4gICAgLmJ0bi1pbmZvOmZvY3VzLCAuYnRuLWluZm8uZm9jdXMge1xuICAgICAgICBib3gtc2hhZG93OiB2YXIoLS1pbmZvLXNoYWRvdy1jb2xvcik7XG4gICAgfVxuICAgIC5idG4taW5mbzpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pbmZvLWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1pbmZvLWhvdmVyLWNvbG9yKTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmZvLWhvdmVyLWNvbG9yKTtcbiAgICB9XG5cbiAgICAuYnRuLXByaW1hcnkge1xuICAgICAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeS1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tcHJpbWFyeTpmb2N1cywgLmJ0bi1wcmltYXJ5LmZvY3VzIHtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tcHJpbWFyeS1zaGFkb3ctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXByaW1hcnk6aG92ZXIge1xuICAgICAgICBjb2xvcjogdmFyKC0tcHJpbWFyeS1mb250LWNvbG9yKTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1ob3Zlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcHJpbWFyeS1ob3Zlci1jb2xvcik7XG4gICAgfVxuXG4gICAgLmJ0bi1zZWNvbmRhcnkge1xuICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWZvbnQtY29sb3IpO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktY29sb3IpO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXNlY29uZGFyeS1jb2xvcik7XG4gICAgfVxuICAgIC5idG4tc2Vjb25kYXJ5OmZvY3VzLCAuYnRuLXNlY29uZGFyeS5mb2N1cyB7XG4gICAgICAgIGJveC1zaGFkb3c6IHZhcigtLXNlY29uZGFyeS1zaGFkb3ctY29sb3IpO1xuICAgIH1cbiAgICAuYnRuLXNlY29uZGFyeTpob3ZlciB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktZm9udC1jb2xvcik7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNlY29uZGFyeS1ob3Zlci1jb2xvcik7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LWhvdmVyLWNvbG9yKTtcbiAgICB9XG5cbiAgICAuZmEtbWludXMge1xuICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgfSBcblxuICAgIDpob3N0IC9kZWVwLyAuY2FyZCAuY2FyZC1ib2R5IC5jb2xsYXBzZVRhYmxlIHRoIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS10YWJsZS1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXRhYmxlLWZvbnQtY29sb3IpO1xuICAgICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSk7XG4gICAgfVxuXG4gICAgOmhvc3QgL2RlZXAvIC5jYXJkIC5jYXJkLWJvZHkgLmNvbGxhcHNlVGFibGUtc2VjIHRoIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRhYmxlLWNvbG9yKTtcbiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10YWJsZS1mb250LWNvbG9yKTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIH1cblxuICAgIDpob3N0IC9kZWVwLyAuY2FyZCAuY2FyZC1ib2R5IC5jb2xsYXBzZVRhYmxlLXRlcnQgdGgge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10ZXJ0aWFyeS10YWJsZS1jb2xvcik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS10ZXJ0aWFyeS10YWJsZS1mb250LWNvbG9yKTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIH1cbjwvc3R5bGU+XG5cbjxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBub3ZhbGlkYXRlIChuZ1N1Ym1pdCk9XCJzdWJtaXRGb3JtKGZvcm0pXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxuZ2ItYWNjb3JkaW9uICNhY2M9XCJuZ2JBY2NvcmRpb25cIiBhY3RpdmVJZHM9XCJtaXNjT3B0aW9ucywgdGFibGVPcHRpb25zLCBidXR0b25PcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgPG5nYi1wYW5lbCBpZD1cIm1pc2NPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbFRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtYWNjb3JkaW9uXCI+TWlzYy4gT3B0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhYWNjLmFjdGl2ZUlkcy5pbmNsdWRlcygnbWlzY09wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtcGx1cyBmbG9hdC1lbmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY2MuYWN0aXZlSWRzLmluY2x1ZGVzKCdtaXNjT3B0aW9ucycpXCIgY2xhc3M9XCJmYSBmYS1taW51cyBmbG9hdC1lbmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXNwb25zaXZlLWJ1dHRvbi1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cInJlc2V0KClcIj5SZXNldCBEZWZhdWx0IFNldHRpbmdzPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzcG9uc2l2ZS1idXR0b24tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8Yj5Db2xsYXBzYWJsZSBNZW51PC9iPjxicj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgaGlkZGVuIGZvcm1Db250cm9sTmFtZT1cImNvbGxhcHNhYmxlX21lbnVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmNvbGxhcHNhYmxlX21lbnUudmFsdWVcIiBjbGFzcz1cImZhIGZhLWNoZWNrXCIgc3R5bGU9XCJjb2xvcjogZ3JlZW47IGZvbnQtc2l6ZTogMjRweDtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpICpuZ0lmPVwiIWZvcm0uY29udHJvbHMuY29sbGFwc2FibGVfbWVudS52YWx1ZVwiIGNsYXNzPVwiZmEgZmEtdGltZXNcIiBzdHlsZT1cImNvbG9yOiByZWQ7IGZvbnQtc2l6ZTogMjRweDtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+RGVmYXVsdCBFbnRyaWVzIFBlciBQYWdlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSAqbmdJZj1cIiFmb3JtLmNvbnRyb2xzLmVudHJpZXNfcGVyX3BhZ2UudmFsaWRcIj4tIFJlcXVpcmVkPC9lbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5lbnRyaWVzX3Blcl9wYWdlLnZhbGlkID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJlbnRyaWVzX3Blcl9wYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI1MFwiPjUwPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxMDBcIj4xMDA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjI1MFwiPjI1MDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cIiFmb3JtLmNvbnRyb2xzLmVudHJpZXNfcGVyX3BhZ2UudmFsaWRcIj5FbnRyaWVzIHBlciBwYWdlIGlzIHJlcXVpcmVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+Rm9udCBTaXplIChSZWNvbW1lbmRlZCAxMS0xNCk8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtICpuZ0lmPVwiZm9ybS5jb250cm9scy5mb250X3NpemUuaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj4tIFJlcXVpcmVkPC9lbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbSAqbmdJZj1cImZvcm0uY29udHJvbHMuZm9udF9zaXplLmhhc0Vycm9yKCd3aG9sZU51bWJlcnNHcmVhdGVyVGhhblplcm8nKVwiPi0gSW52YWxpZDwvZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcignbWF4VmFsdWUnKVwiPi0gSW52YWxpZDwvZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZW0gKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcignbWluVmFsdWUnKVwiPi0gSW52YWxpZDwvZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS52YWxpZCA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgdHlwZT1cIm51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cImZvbnRfc2l6ZVwiIChrZXl1cCk9XCJjaGFuZ2VQcmltYXJ5Rm9udFNpemUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImZvcm0uY29udHJvbHMuZm9udF9zaXplLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+Rm9udCBzaXplIGlzIHJlcXVpcmVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZm9ybS5jb250cm9scy5mb250X3NpemUuaGFzRXJyb3IoJ3dob2xlTnVtYmVyc0dyZWF0ZXJUaGFuWmVybycpXCI+Rm9udCBzaXplIGlzIGludmFsaWQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJmb3JtLmNvbnRyb2xzLmZvbnRfc2l6ZS5oYXNFcnJvcignbWF4VmFsdWUnKVwiPkZvbnQgc2l6ZSBjYW4gbm90IGV4Y2VlZCAxODwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImZvcm0uY29udHJvbHMuZm9udF9zaXplLmhhc0Vycm9yKCdtaW5WYWx1ZScpXCI+Rm9udCBzaXplIGNhbiBub3QgYmUgbGVzcyB0aGFuIDg8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlN0YXJ0aW5nIFBhZ2U8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMub3BlbmluZ19yb3V0ZS52YWxpZCA/ICdpcy12YWxpZCcgOiAnJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJvcGVuaW5nX3JvdXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi9ob21lXCI+SG9tZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHZpZXcgb2Ygdmlld3NcIiBbdmFsdWVdPVwidmlldy52YWx1ZVwiPnt7dmlldy5kaXNwbGF5IHwgdGl0bGVDYXNlfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIiAqbmdJZj1cImNsaWVudCA9PT0gJ0FjZSBDb21wbGV0aW9ucydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlJvdXRpbmcgUHJlZmVyZW5jZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5yb3V0aW5nX3ByZWZlcmVuY2UudmFsaWQgPyAnaXMtdmFsaWQnIDogJyddXCIgZm9ybUNvbnRyb2xOYW1lPVwicm91dGluZ19wcmVmZXJlbmNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImFsd2F5c0Fza1wiPkFsd2F5cyBBc2s8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2FtZVRhYlwiPlNhbWUgVGFiPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5ld1RhYlwiPk5ldyBUYWI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibmV3V2luZG93XCI+TmV3IFdpbmRvdzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZ2ItcGFuZWw+XG4gICAgICAgICAgICAgICAgPG5nYi1wYW5lbCBpZD1cInRhYmxlT3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWFjY29yZGlvblwiPlRhYmxlIE9wdGlvbnM8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ3RhYmxlT3B0aW9ucycpXCIgY2xhc3M9XCJmYSBmYS1wbHVzIGZsb2F0LWVuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ3RhYmxlT3B0aW9ucycpXCIgY2xhc3M9XCJmYSBmYS1taW51cyBmbG9hdC1lbmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xsYXBzZS10YWJsZT4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeSBUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbGxhcHNlLXRhYmxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD5QcmltYXJ5IFRhYmxlIEJhY2tncm91bmQ6PC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMudGFibGVfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInRhYmxlX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlUHJpbWFyeUNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD5QcmltYXJ5IFRhYmxlIEZvbnQ6PC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMudGFibGVfZm9udF9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwidGFibGVfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVByaW1hcnlGb250Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbGxhcHNlLXRhYmxlIHNlY29uZGFyeUNvbG9yPVwidHJ1ZVwiPiAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNvbmRhcnkgVGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2xsYXBzZS10YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+U2Vjb25kYXJ5IFRhYmxlIEJhY2tncm91bmQ6PC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X3RhYmxlX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzZWNvbmRhcnlfdGFibGVfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZWNvbmRhcnlDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0PlNlY29uZGFyeSBUYWJsZSBGb250OjwvZHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnNlY29uZGFyeV90YWJsZV9mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzZWNvbmRhcnlfdGFibGVfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVNlY29uZGFyeUZvbnRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sbGFwc2UtdGFibGUgdGVydGlhcnlDb2xvcj1cInRydWVcIj4gICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVydGlhcnkgVGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2xsYXBzZS10YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHQ+VGVydGlhcnkgVGFibGUgQmFja2dyb3VuZDo8L2R0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy50ZXJ0aWFyeV90YWJsZV9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwidGVydGlhcnlfdGFibGVfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUZXJ0aWFyeUNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkdD5UZXJ0aWFyeSBUYWJsZSBGb250OjwvZHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInRlcnRpYXJ5X3RhYmxlX2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VUZXJ0aWFyeUZvbnRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZ2ItcGFuZWw+XG4gICAgICAgICAgICAgICAgPG5nYi1wYW5lbCBpZD1cImJ1dHRvbk9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsVGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1hY2NvcmRpb25cIj5CdXR0b24gT3B0aW9uczwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhYWNjLmFjdGl2ZUlkcy5pbmNsdWRlcygnYnV0dG9uT3B0aW9ucycpXCIgY2xhc3M9XCJmYSBmYS1wbHVzIGZsb2F0LWVuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImFjYy5hY3RpdmVJZHMuaW5jbHVkZXMoJ2J1dHRvbk9wdGlvbnMnKVwiIGNsYXNzPVwiZmEgZmEtbWludXMgZmxvYXQtZW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPlN1Y2Nlc3M8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+U3VjY2VzcyBCdXR0b24gQmFja2dyb3VuZDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnN1Y2Nlc3NfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInN1Y2Nlc3NfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTdWNjZXNzQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlN1Y2Nlc3MgQnV0dG9uIEZvbnQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5zdWNjZXNzX2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInN1Y2Nlc3NfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVN1Y2Nlc3NGb250Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlN1Y2Nlc3MgQnV0dG9uIEhvdmVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuc3VjY2Vzc19ob3Zlcl9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwic3VjY2Vzc19ob3Zlcl9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVN1Y2Nlc3NIb3ZlckNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCI+V2FybmluZzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5XYXJuaW5nIEJ1dHRvbiBCYWNrZ3JvdW5kOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMud2FybmluZ19jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwid2FybmluZ19jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVdhcm5pbmdDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+V2FybmluZyBCdXR0b24gRm9udDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLndhcm5pbmdfZm9udF9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwid2FybmluZ19mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlV2FybmluZ0ZvbnRDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+V2FybmluZyBCdXR0b24gSG92ZXI6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy53YXJuaW5nX2hvdmVyX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJ3YXJuaW5nX2hvdmVyX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlV2FybmluZ0hvdmVyQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiPkRhbmdlcjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5EYW5nZXIgQnV0dG9uIEJhY2tncm91bmQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5kYW5nZXJfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cImRhbmdlcl9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZURhbmdlckNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5EYW5nZXIgQnV0dG9uIEZvbnQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5kYW5nZXJfZm9udF9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGFuZ2VyX2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VEYW5nZXJGb250Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPkRhbmdlciBCdXR0b24gSG92ZXI6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5kYW5nZXJfaG92ZXJfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cImRhbmdlcl9ob3Zlcl9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZURhbmdlckhvdmVyQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWluZm9cIj5JbmZvPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPkluZm8gQnV0dG9uIEJhY2tncm91bmQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5pbmZvX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJpbmZvX2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlSW5mb0NvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5JbmZvIEJ1dHRvbiBGb250OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuaW5mb19mb250X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJpbmZvX2ZvbnRfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbmZvRm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5JbmZvIEJ1dHRvbiBIb3Zlcjo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLmluZm9faG92ZXJfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cImluZm9faG92ZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbmZvSG92ZXJDb2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPlByaW1hcnk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+UHJpbWFyeSBCdXR0b24gQmFja2dyb3VuZDo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwiaGVpZ2h0OiA0MHB4XCIgW25nQ2xhc3NdPVwiWydmb3JtLWNvbnRyb2wnLCBmb3JtLmNvbnRyb2xzLnByaW1hcnlfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInByaW1hcnlfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VQcmltYXJ5QnV0dG9uQ29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlByaW1hcnkgQnV0dG9uIEZvbnQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cImhlaWdodDogNDBweFwiIFtuZ0NsYXNzXT1cIlsnZm9ybS1jb250cm9sJywgZm9ybS5jb250cm9scy5wcmltYXJ5X2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInByaW1hcnlfZm9udF9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVByaW1hcnlCdXR0b25Gb250Q29sb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPlByaW1hcnkgQnV0dG9uIEhvdmVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMucHJpbWFyeV9ob3Zlcl9jb2xvci52YWx1ZSA/ICdpcy12YWxpZCcgOiAnaXMtaW52YWxpZCddXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJpbWFyeV9ob3Zlcl9jb2xvclwiIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVByaW1hcnlIb3ZlckNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIj5TZWNvbmRhcnk8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+U2Vjb25kYXJ5IEJ1dHRvbiBCYWNrZ3JvdW5kOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzZWNvbmRhcnlfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZWNvbmRhcnlCdXR0b25Db2xvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+U2Vjb25kYXJ5IEJ1dHRvbiBGb250OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2ZvbnRfY29sb3IudmFsdWUgPyAnaXMtdmFsaWQnIDogJ2lzLWludmFsaWQnXVwiIGZvcm1Db250cm9sTmFtZT1cInNlY29uZGFyeV9mb250X2NvbG9yXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2Vjb25kYXJ5QnV0dG9uRm9udENvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNvbnRyb2wtbGFiZWxcIj5TZWNvbmRhcnkgQnV0dG9uIEhvdmVyOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIiBbbmdDbGFzc109XCJbJ2Zvcm0tY29udHJvbCcsIGZvcm0uY29udHJvbHMuc2Vjb25kYXJ5X2hvdmVyX2NvbG9yLnZhbHVlID8gJ2lzLXZhbGlkJyA6ICdpcy1pbnZhbGlkJ11cIiBmb3JtQ29udHJvbE5hbWU9XCJzZWNvbmRhcnlfaG92ZXJfY29sb3JcIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VTZWNvbmRhcnlIb3ZlckNvbG9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nYi1wYW5lbD5cbiAgICAgICAgICAgIDwvbmdiLWFjY29yZGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cInBhZGRpbmctdG9wOiAxNXB4O1wiPlxuICAgICAgICAgICAgPGZvcm0tYnV0dG9uIFtmb3JtXT1cImZvcm1cIiBbZGlzYWJsZWRdPVwiZGlzYWJsZUZvcm1CdXR0b25cIj48L2Zvcm0tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG48L2Rpdj4iXX0=