tin-spa 14.0.1 → 14.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/classes/Classes.mjs +32 -57
  3. package/esm2020/lib/classes/LibClasses.mjs +1 -2
  4. package/esm2020/lib/classes/TinCore.mjs +48 -206
  5. package/esm2020/lib/components/alert/alert.component.mjs +7 -21
  6. package/esm2020/lib/components/attach/attach.component.mjs +33 -49
  7. package/esm2020/lib/components/date/date.component.mjs +6 -8
  8. package/esm2020/lib/components/email/email.component.mjs +17 -19
  9. package/esm2020/lib/components/form/form.component.mjs +56 -144
  10. package/esm2020/lib/components/label/label.component.mjs +3 -9
  11. package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +3 -3
  12. package/esm2020/lib/components/money/money.component.mjs +9 -26
  13. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +27 -31
  14. package/esm2020/lib/components/number/number.component.mjs +8 -23
  15. package/esm2020/lib/components/option/option.component.mjs +14 -36
  16. package/esm2020/lib/components/search/search.component.mjs +5 -10
  17. package/esm2020/lib/components/select/select.component.mjs +129 -56
  18. package/esm2020/lib/components/steps/steps.component.mjs +61 -83
  19. package/esm2020/lib/components/table/detailsDialog.component.mjs +41 -205
  20. package/esm2020/lib/components/table/table.component.mjs +111 -136
  21. package/esm2020/lib/components/table-action/table-action.component.mjs +8 -42
  22. package/esm2020/lib/components/table-header/table-header.component.mjs +10 -14
  23. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +39 -205
  24. package/esm2020/lib/components/table-internal/table-internal.component.mjs +112 -138
  25. package/esm2020/lib/components/table-row/table-row.component.mjs +4 -23
  26. package/esm2020/lib/components/text/text.component.mjs +46 -110
  27. package/esm2020/lib/components/tiles/tiles.component.mjs +20 -32
  28. package/esm2020/lib/components/viewer/viewer.component.mjs +3 -7
  29. package/esm2020/lib/components/viewer/viewerDialog.component.mjs +13 -20
  30. package/esm2020/lib/modules/admin/admin-routing.module.mjs +1 -11
  31. package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
  32. package/esm2020/lib/pages/bug/bug.component.mjs +3 -3
  33. package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
  34. package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
  35. package/esm2020/lib/pages/customers/customers.component.mjs +48 -9
  36. package/esm2020/lib/pages/departments/departments.component.mjs +4 -2
  37. package/esm2020/lib/pages/employees/employees.component.mjs +4 -3
  38. package/esm2020/lib/pages/grades/grades.component.mjs +3 -3
  39. package/esm2020/lib/pages/inventory/inventory.component.mjs +3 -3
  40. package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
  41. package/esm2020/lib/pages/invitations/invitations.component.mjs +14 -0
  42. package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +10 -11
  43. package/esm2020/lib/pages/login/login.component.mjs +14 -52
  44. package/esm2020/lib/pages/logs/logs.component.mjs +22 -27
  45. package/esm2020/lib/pages/membership/membership.component.mjs +19 -15
  46. package/esm2020/lib/pages/notifications/notifications.component.mjs +6 -82
  47. package/esm2020/lib/pages/plans/plans.component.mjs +19 -16
  48. package/esm2020/lib/pages/positions/positions.component.mjs +4 -4
  49. package/esm2020/lib/pages/profile/profile.component.mjs +3 -4
  50. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
  51. package/esm2020/lib/pages/roles/addRoleDialog.component.mjs +2 -2
  52. package/esm2020/lib/pages/roles/roles.component.mjs +17 -77
  53. package/esm2020/lib/pages/settings/settings.component.mjs +13 -5
  54. package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
  55. package/esm2020/lib/pages/suppliers/suppliers.component.mjs +31 -3
  56. package/esm2020/lib/pages/tasks/tasks.component.mjs +9 -9
  57. package/esm2020/lib/pages/tenant-settings/inviteDialog.component.mjs +60 -0
  58. package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +72 -145
  59. package/esm2020/lib/pages/tenants/tenants.component.mjs +10 -10
  60. package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
  61. package/esm2020/lib/pages/transactions/transactions.component.mjs +3 -3
  62. package/esm2020/lib/pages/users/users.component.mjs +92 -141
  63. package/esm2020/lib/pages/welcome/welcome.component.mjs +9 -9
  64. package/esm2020/lib/services/button.service.mjs +32 -92
  65. package/esm2020/lib/services/csv.service.mjs +1 -1
  66. package/esm2020/lib/services/datalib.service.mjs +78 -551
  67. package/esm2020/lib/services/dialog.service.mjs +7 -51
  68. package/esm2020/lib/services/table-config.service.mjs +7 -55
  69. package/esm2020/lib/tin-spa.module.mjs +11 -48
  70. package/esm2020/public-api.mjs +1 -10
  71. package/fesm2015/tin-spa.mjs +2605 -6538
  72. package/fesm2015/tin-spa.mjs.map +1 -1
  73. package/fesm2020/tin-spa.mjs +2501 -6482
  74. package/fesm2020/tin-spa.mjs.map +1 -1
  75. package/lib/classes/Classes.d.ts +129 -267
  76. package/lib/classes/LibClasses.d.ts +0 -1
  77. package/lib/classes/TinCore.d.ts +4 -13
  78. package/lib/components/alert/alert.component.d.ts +3 -4
  79. package/lib/components/attach/attach.component.d.ts +6 -13
  80. package/lib/components/date/date.component.d.ts +1 -1
  81. package/lib/components/email/email.component.d.ts +3 -4
  82. package/lib/components/form/form.component.d.ts +11 -20
  83. package/lib/components/label/label.component.d.ts +1 -3
  84. package/lib/components/money/money.component.d.ts +1 -8
  85. package/lib/components/nav-menu/nav-menu.component.d.ts +2 -6
  86. package/lib/components/number/number.component.d.ts +1 -7
  87. package/lib/components/option/option.component.d.ts +2 -10
  88. package/lib/components/search/search.component.d.ts +1 -3
  89. package/lib/components/select/select.component.d.ts +37 -16
  90. package/lib/components/steps/steps.component.d.ts +9 -18
  91. package/lib/components/table/detailsDialog.component.d.ts +7 -29
  92. package/lib/components/table/table.component.d.ts +9 -15
  93. package/lib/components/table-action/table-action.component.d.ts +1 -4
  94. package/lib/components/table-header/table-header.component.d.ts +1 -3
  95. package/lib/components/table-internal/detailsDialog-internal.component.d.ts +7 -29
  96. package/lib/components/table-internal/table-internal.component.d.ts +9 -15
  97. package/lib/components/table-row/table-row.component.d.ts +1 -4
  98. package/lib/components/text/text.component.d.ts +8 -21
  99. package/lib/components/tiles/tiles.component.d.ts +3 -4
  100. package/lib/components/viewer/viewerDialog.component.d.ts +1 -3
  101. package/lib/pages/customers/customers.component.d.ts +8 -2
  102. package/lib/pages/invitations/invitations.component.d.ts +8 -0
  103. package/lib/pages/invitations-table/invitations-table.component.d.ts +1 -1
  104. package/lib/pages/login/login.component.d.ts +1 -7
  105. package/lib/pages/logs/logs.component.d.ts +6 -2
  106. package/lib/pages/membership/membership.component.d.ts +6 -2
  107. package/lib/pages/notifications/notifications.component.d.ts +1 -9
  108. package/lib/pages/plans/plans.component.d.ts +6 -2
  109. package/lib/pages/roles/roles.component.d.ts +2 -14
  110. package/lib/pages/suppliers/suppliers.component.d.ts +4 -1
  111. package/lib/pages/tasks/tasks.component.d.ts +1 -1
  112. package/lib/pages/tenant-settings/inviteDialog.component.d.ts +28 -0
  113. package/lib/pages/tenant-settings/tenant-settings.component.d.ts +7 -12
  114. package/lib/pages/tenants/tenants.component.d.ts +2 -2
  115. package/lib/pages/users/users.component.d.ts +16 -8
  116. package/lib/services/button.service.d.ts +8 -11
  117. package/lib/services/datalib.service.d.ts +10 -57
  118. package/lib/services/dialog.service.d.ts +2 -3
  119. package/lib/services/table-config.service.d.ts +1 -9
  120. package/lib/tin-spa.module.d.ts +33 -52
  121. package/package.json +1 -1
  122. package/public-api.d.ts +0 -9
  123. package/esm2020/lib/components/capsules/capsules.component.mjs +0 -63
  124. package/esm2020/lib/components/cards/cards.component.mjs +0 -103
  125. package/esm2020/lib/components/html/html.component.mjs +0 -34
  126. package/esm2020/lib/components/multi-select/multi-select.component.mjs +0 -165
  127. package/esm2020/lib/components/multi-text/multi-text.component.mjs +0 -208
  128. package/esm2020/lib/components/notes/notes.component.mjs +0 -62
  129. package/esm2020/lib/components/page/page.component.mjs +0 -101
  130. package/esm2020/lib/components/select-bitwise/select-bitwise.component.mjs +0 -87
  131. package/esm2020/lib/components/select-common/select-common.component.mjs +0 -206
  132. package/esm2020/lib/components/select-internal/select-internal.component.mjs +0 -75
  133. package/esm2020/lib/components/select-lite/select-lite.component.mjs +0 -18
  134. package/esm2020/lib/components/statuses/statuses.component.mjs +0 -44
  135. package/esm2020/lib/components/suffix/suffix.component.mjs +0 -70
  136. package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +0 -404
  137. package/esm2020/lib/components/table-lite/table-lite.component.mjs +0 -441
  138. package/esm2020/lib/components/tabs/tabs.component.mjs +0 -74
  139. package/esm2020/lib/pages/app-models/app-models.component.mjs +0 -56
  140. package/esm2020/lib/pages/approvals/approvals.component.mjs +0 -19
  141. package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +0 -165
  142. package/esm2020/lib/pages/notifications-config/notifications-config.component.mjs +0 -113
  143. package/esm2020/lib/select-context.directive.mjs +0 -23
  144. package/esm2020/lib/services/notifications.service.mjs +0 -33
  145. package/lib/components/capsules/capsules.component.d.ts +0 -26
  146. package/lib/components/cards/cards.component.d.ts +0 -39
  147. package/lib/components/html/html.component.d.ts +0 -16
  148. package/lib/components/multi-select/multi-select.component.d.ts +0 -47
  149. package/lib/components/multi-text/multi-text.component.d.ts +0 -56
  150. package/lib/components/notes/notes.component.d.ts +0 -19
  151. package/lib/components/page/page.component.d.ts +0 -38
  152. package/lib/components/select-bitwise/select-bitwise.component.d.ts +0 -31
  153. package/lib/components/select-common/select-common.component.d.ts +0 -53
  154. package/lib/components/select-internal/select-internal.component.d.ts +0 -23
  155. package/lib/components/select-lite/select-lite.component.d.ts +0 -8
  156. package/lib/components/statuses/statuses.component.d.ts +0 -12
  157. package/lib/components/suffix/suffix.component.d.ts +0 -23
  158. package/lib/components/table-lite/detailsDialog-lite.component.d.ts +0 -86
  159. package/lib/components/table-lite/table-lite.component.d.ts +0 -91
  160. package/lib/components/tabs/tabs.component.d.ts +0 -32
  161. package/lib/pages/app-models/app-models.component.d.ts +0 -15
  162. package/lib/pages/approvals/approvals.component.d.ts +0 -10
  163. package/lib/pages/approvals-config/approvals-config.component.d.ts +0 -24
  164. package/lib/pages/notifications-config/notifications-config.component.d.ts +0 -17
  165. package/lib/select-context.directive.d.ts +0 -10
  166. package/lib/services/notifications.service.d.ts +0 -12
@@ -1,16 +1,14 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { AppConfig, CapItem } from '../classes/Classes';
3
- import { BehaviorSubject, finalize, of, share, tap, timeout } from 'rxjs';
3
+ import { BehaviorSubject } from 'rxjs';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "./http.service";
6
6
  import * as i2 from "@angular/router";
7
- import * as i3 from "./auth.service";
8
7
  export class DataServiceLib {
9
- constructor(httpService, router, route, authService) {
8
+ constructor(httpService, router, route) {
10
9
  this.httpService = httpService;
11
10
  this.router = router;
12
11
  this.route = route;
13
- this.authService = authService;
14
12
  this.appConfig = new AppConfig();
15
13
  this.appConfigSource = new BehaviorSubject(this.appConfig);
16
14
  this.appConfigObserv = this.appConfigSource.asObservable();
@@ -35,57 +33,13 @@ export class DataServiceLib {
35
33
  this.capDepartments = new CapItem;
36
34
  this.capPositions = new CapItem;
37
35
  this.capGrades = new CapItem;
38
- this.capApprovals = new CapItem;
39
- this.capApprovalsConfig = new CapItem;
40
- this.capNotifications = new CapItem;
41
- this.capSelfApproval = new CapItem;
42
- this.capAppModels = new CapItem;
43
- this.capNotificationsConfig = new CapItem;
44
36
  this.tmpProfileuserName = "";
45
37
  this.isProcessing = false;
46
- //--------------------------Departmemts Form-------------------------
47
- this.departmentFormConfig = {
48
- security: { allow: [this.capDepartments] },
49
- title: 'Department',
50
- fields: [
51
- { name: 'name', type: 'text', required: true },
52
- ],
53
- loadAction: { url: 'departments/id' },
54
- heroField: 'departmentID',
55
- includeAudit: true,
56
- };
57
- this.editDepartmentButton = { name: 'edit', dialog: true, action: { url: 'departments?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
58
- this.departmentDetailsConfig = {
59
- formConfig: this.departmentFormConfig,
60
- heroField: 'departmentID',
61
- buttons: [this.editDepartmentButton],
62
- };
63
- //--------------------------Positions Form-------------------------
64
- this.positionFormConfig = {
65
- security: { allow: [this.capPositions] },
66
- title: 'Position',
67
- fields: [
68
- { name: 'name', type: 'text', required: true },
69
- { name: 'description', type: 'text', },
70
- { name: 'departmentID', alias: 'Department', type: 'select', loadAction: { url: 'departments/list/x' }, detailsConfig: this.departmentDetailsConfig },
71
- ],
72
- loadAction: { url: 'positions/id' },
73
- heroField: 'positionID',
74
- includeAudit: true,
75
- };
76
- this.editPositionButton = { name: 'edit', dialog: true, action: { url: 'positions?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
77
- this.positionDetailsConfig = {
78
- formConfig: this.positionFormConfig,
79
- heroField: 'positionID',
80
- buttons: [this.editPositionButton],
81
- };
82
- //--------------------------Employees-------------------------
83
38
  this.genders = [
84
39
  { name: 'Male', value: 1 },
85
40
  { name: 'Female', value: 2 }
86
41
  ];
87
42
  this.employeeFormConfig = {
88
- security: { allow: [this.capEmployees] },
89
43
  fields: [
90
44
  { name: 'nationalID', type: 'text', alias: 'National ID', required: true },
91
45
  { name: 'gender', alias: 'Gender', type: 'select', options: this.genders, required: true },
@@ -93,26 +47,20 @@ export class DataServiceLib {
93
47
  { name: 'lastName', type: 'text', required: true },
94
48
  { name: 'dateOfBirth', type: 'date', alias: 'Date of Birth', required: true },
95
49
  { name: 'employmentDate', type: 'date', alias: 'Employment Date', required: true },
96
- { name: 'departmentID', alias: 'Department', type: 'select', loadAction: { url: 'departments/list/x' }, detailsConfig: this.departmentDetailsConfig },
97
- { name: 'positionID', alias: 'Position', type: 'select', loadAction: { url: 'positions/list/x' }, masterField: 'departmentID', detailsConfig: this.positionDetailsConfig },
98
- { name: 'employmentStatus', alias: 'Employment Status', type: 'select', loadAction: { url: 'employees/list/employment-status' } },
99
- { name: 'activeStatus', alias: 'Active Status', type: 'select', loadAction: { url: 'employees/list/active-status' } },
100
- { name: 'passportNumber', type: 'text', alias: 'Passport Number' },
101
- { name: 'userName', type: 'select', alias: 'User', loadAction: { url: 'user/list/x' }, optionDisplay: 'name', optionValue: 'value', nullable: true, infoMessage: 'Related user account' },
50
+ { name: 'departmentID', alias: 'Department', type: 'select', options: [], optionDisplay: 'name', optionValue: 'departmentID' },
51
+ { name: 'positionID', alias: 'Position', type: 'select', options: [], optionDisplay: 'name', optionValue: 'positionID', masterField: 'departmentID', },
52
+ { name: 'employmentStatus', alias: 'Employment Status', type: 'select', options: [], optionDisplay: 'name', optionValue: 'value' },
53
+ { name: 'activeStatus', alias: 'Active Status', type: 'select', options: [], optionDisplay: 'name', optionValue: 'value' },
102
54
  { name: 'address', type: 'text', rows: 2, span: true },
103
55
  { name: 'phone', type: 'text' },
104
56
  { name: 'email', type: 'text' },
105
57
  { name: 'note', type: 'text', rows: 2, span: true },
106
58
  ],
107
- loadAction: { url: 'employees/id' },
108
- heroField: 'employeeID',
109
- includeAudit: true,
110
59
  };
111
- this.employeesTableConfig = {
60
+ this.employeeTableConfig = {
112
61
  showFilter: true,
113
62
  minColumns: ['name', 'departmentName', 'positionName'],
114
63
  flatButtons: true,
115
- logResponse: true,
116
64
  columns: [
117
65
  { name: 'name', type: 'text' },
118
66
  { name: 'genderName', type: 'text', alias: 'Gender' },
@@ -120,25 +68,33 @@ export class DataServiceLib {
120
68
  { name: 'positionName', type: 'text', alias: 'Position' },
121
69
  { name: 'employmentStatusName', type: 'text', alias: 'Employment Status' },
122
70
  { name: 'activeStatusName', type: 'text', alias: 'Active Status' },
123
- { name: 'isLinked', type: 'checkbox', alias: 'Linked' },
124
71
  ],
125
72
  buttons: [
126
- { name: 'create', display: 'Create', dialog: true, action: { url: 'employees?action=create', method: 'post' } },
73
+ { name: 'create', display: 'Create', dialog: true, action: { url: 'general/employees?action=create', method: 'post' } },
127
74
  { name: 'view', dialog: true },
128
- { name: 'edit', dialog: true, action: { url: 'employees?action=edit', method: 'post' } },
129
- { name: 'delete', dialog: true, action: { url: 'employees?action=delete', method: 'post' } },
75
+ { name: 'edit', dialog: true, action: { url: 'general/employees?action=edit', method: 'post' } },
76
+ { name: 'delete', dialog: true, action: { url: 'general/employees?action=delete', method: 'post' } },
130
77
  ],
131
- loadAction: { url: 'employees/all/x' },
78
+ loadAction: { url: 'general/employees/x' },
132
79
  formConfig: this.employeeFormConfig
133
80
  };
134
- //--------------------------Positions-------------------------
135
- this.positionsTableConfig = {
81
+ this.positionFormConfig = {
82
+ fields: [
83
+ { name: 'name', type: 'text', required: true },
84
+ // { name: 'departmentID', alias: 'Department', type: 'select', options: [], optionDisplay: 'name', optionValue: 'departmentID' },
85
+ { name: 'description', type: 'text', span: true },
86
+ ],
87
+ loadAction: { url: 'positions/id' },
88
+ };
89
+ this.editPositionButton = { name: 'edit', dialog: true, action: { url: 'positions?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
90
+ this.positionTableConfig = {
136
91
  showFilter: true,
92
+ minColumns: ['name', 'departmentName', 'salary'],
137
93
  flatButtons: true,
138
94
  columns: [
95
+ { name: 'positionID', type: 'number', alias: 'ID' },
139
96
  { name: 'name', type: 'text' },
140
- { name: 'description', type: 'text' },
141
- { name: 'departmentName', type: 'chip', detailsConfig: this.departmentDetailsConfig, alias: 'Department' },
97
+ // { name: 'departmentName', type: 'text', alias: 'Department' },
142
98
  ],
143
99
  buttons: [
144
100
  { name: 'create', display: 'Create', dialog: true, action: { url: 'positions?action=create', method: 'post' } },
@@ -146,15 +102,16 @@ export class DataServiceLib {
146
102
  name: 'view',
147
103
  dialog: true,
148
104
  detailsConfig: {
149
- formConfig: this.positionFormConfig,
105
+ formConfig: { ...this.positionFormConfig, fields: this.positionFormConfig.fields.filter(x => x.name != 'departmentID') },
150
106
  heroField: 'positionID',
151
107
  buttons: [this.editPositionButton],
152
108
  tableConfigs: [
153
109
  {
154
- ...this.employeesTableConfig,
155
- loadAction: { url: 'employees/x/x' }, loadCriteria: 'position', loadIDField: 'positionID',
156
- columns: this.employeesTableConfig.columns.filter(x => ['departmentName', 'positionName'].includes(x.name) == false),
157
- tabTitle: 'Employees',
110
+ ...this.employeeTableConfig,
111
+ loadAction: { url: 'positions/employees/x' },
112
+ loadCriteria: 'employees',
113
+ loadIDField: 'positionID',
114
+ title: 'Employees',
158
115
  elevation: 'none',
159
116
  }
160
117
  ],
@@ -167,12 +124,19 @@ export class DataServiceLib {
167
124
  formConfig: this.positionFormConfig
168
125
  };
169
126
  //--------------------------Departments-------------------------
127
+ this.departmentFormConfig = {
128
+ fields: [
129
+ { name: 'name', type: 'text', required: true },
130
+ ],
131
+ loadAction: { url: 'departments/id' },
132
+ };
133
+ this.editDepartmentButton = { name: 'edit', dialog: true, action: { url: 'departments?action=edit', method: 'post', successMessage: 'Edited Successfully' } };
170
134
  this.departmentTableConfig = {
171
135
  showFilter: true,
172
136
  minColumns: ['name'],
173
137
  flatButtons: true,
174
138
  columns: [
175
- // { name: 'departmentID', type: 'number', alias: 'ID' },
139
+ { name: 'departmentID', type: 'number', alias: 'ID' },
176
140
  { name: 'name', type: 'text' },
177
141
  ],
178
142
  buttons: [
@@ -186,16 +150,19 @@ export class DataServiceLib {
186
150
  buttons: [this.editDepartmentButton],
187
151
  tableConfigs: [
188
152
  {
189
- ...this.employeesTableConfig,
190
- loadAction: { url: 'employees/x/x' }, loadCriteria: 'department', loadIDField: 'departmentID',
191
- columns: this.employeesTableConfig.columns.filter(x => ['departmentName', 'positionName'].includes(x.name) == false),
192
- tabTitle: 'Employees',
153
+ ...this.employeeTableConfig,
154
+ loadAction: { url: 'departments/employees/x' },
155
+ loadCriteria: 'employees',
156
+ loadIDField: 'departmentID',
157
+ title: 'Employees',
193
158
  elevation: 'none',
194
159
  },
195
160
  {
196
- ...this.positionsTableConfig,
197
- loadAction: { url: 'positions/x/x' }, loadCriteria: 'department', loadIDField: 'departmentID',
198
- tabTitle: 'Positions',
161
+ ...this.positionTableConfig,
162
+ loadAction: { url: 'departments/positions/x' },
163
+ loadCriteria: 'positions',
164
+ loadIDField: 'departmentID',
165
+ title: 'Positions',
199
166
  elevation: 'none',
200
167
  }
201
168
  ],
@@ -207,352 +174,6 @@ export class DataServiceLib {
207
174
  loadAction: { url: 'departments/all/x' },
208
175
  formConfig: this.departmentFormConfig
209
176
  };
210
- //--------------------------Contact Persons-------------------------
211
- this.contactPersonFormConfig = {
212
- title: 'Contact Person',
213
- includeAudit: true,
214
- fields: [
215
- { name: 'name', type: 'text', span: true },
216
- { name: 'mobile', type: 'text' },
217
- { name: 'email', type: 'text' },
218
- { name: 'contactMethods', type: 'composite', span: true, subfields: [
219
- { name: 'canCall', type: 'checkbox', alias: 'Call' },
220
- { name: 'canSMS', type: 'checkbox', alias: 'SMS' },
221
- { name: 'canWhatsApp', type: 'checkbox', alias: 'WhatsApp' }
222
- ] },
223
- ],
224
- reset: true
225
- };
226
- this.contactPersonTableConfig = {
227
- tabTitle: 'Contacts',
228
- showFilter: true,
229
- minColumns: ['name', 'contactMethods'],
230
- elevation: 'none',
231
- flatButtons: true,
232
- columns: [
233
- { name: 'name', type: 'text', },
234
- { name: 'mobile', type: 'text' },
235
- { name: 'email', type: 'text' },
236
- {
237
- name: 'contactMethods',
238
- type: 'icon',
239
- icons: [
240
- { name: 'call', color: 'green', condition: x => x.canCall, tip: 'Available for Calls' },
241
- { name: 'sms', color: 'green', condition: x => x.canSMS, tip: 'Available for SMS' },
242
- { name: 'forum', color: 'green', condition: x => x.canWhatsApp, tip: 'Available on WhatsApp' }
243
- ]
244
- }
245
- ],
246
- buttons: [
247
- { name: 'create', display: 'Add', dialog: true, action: { url: 'contactpersons?action=create', method: 'post' }, confirm: { message: 'Add contact person?' } },
248
- { name: 'edit', dialog: true, action: { url: 'contactpersons?action=edit', method: 'post' } },
249
- { name: 'delete', dialog: true, action: { url: 'contactpersons?action=delete', method: 'post' } }
250
- ],
251
- formConfig: this.contactPersonFormConfig
252
- };
253
- //--------------------------Customers-------------------------
254
- this.customerFormConfig = {
255
- security: { allow: [this.capCustomers] },
256
- includeAudit: true,
257
- title: 'Customer',
258
- fields: [
259
- { name: 'name', type: 'text', required: true },
260
- { name: 'phone', type: 'text' },
261
- { name: 'contactPerson', type: 'text' },
262
- { name: 'email', type: 'text' },
263
- { name: 'address', type: 'text', rows: 2, span: true },
264
- { name: 'customerTenantID', alias: 'Customer Tenant', type: 'text', loadAction: { url: 'tenants/list/x' }, nullable: true },
265
- ],
266
- loadAction: { url: 'customers/id' },
267
- heroField: 'customerID',
268
- reset: true,
269
- };
270
- this.customerCreateButton = { name: 'create', display: 'Create', dialog: true, action: { url: 'customers?action=create', method: 'post' } };
271
- this.customerEditButton = { name: 'edit', dialog: true, action: { url: 'customers?action=edit', method: 'post' } };
272
- this.customerDetailsConfig = {
273
- formConfig: this.customerFormConfig,
274
- heroField: 'customerID',
275
- tableConfigs: [
276
- {
277
- ...this.contactPersonTableConfig,
278
- loadAction: { url: 'contactpersons/customer/x' },
279
- loadCriteria: 'customer',
280
- loadIDField: 'customerID'
281
- }
282
- ],
283
- buttons: [
284
- this.customerCreateButton,
285
- this.customerEditButton
286
- ]
287
- };
288
- this.customersTableConfig = {
289
- showFilter: true,
290
- minColumns: ['name'],
291
- flatButtons: true,
292
- logResponse: true,
293
- maxButtonsCount: 3,
294
- collapseButtons: true,
295
- columns: [
296
- { name: 'name', type: 'text' },
297
- { name: 'phone', type: 'text' },
298
- { name: 'contactPerson', type: 'text' },
299
- { name: 'isLinked', type: 'checkbox', alias: 'Linked' },
300
- ],
301
- buttons: [
302
- this.customerCreateButton,
303
- { name: 'view', dialog: true, detailsConfig: this.customerDetailsConfig },
304
- { name: 'edit', dialog: true, detailsConfig: this.customerDetailsConfig },
305
- { name: 'delete', dialog: true, action: { url: 'customers?action=delete', method: 'post' } },
306
- ],
307
- loadAction: { url: 'customers/all/x' },
308
- formConfig: this.customerFormConfig
309
- };
310
- //--------------------------Suppliers-------------------------
311
- this.supplierFormConfig = {
312
- security: { allow: [this.capSuppliers] },
313
- includeAudit: true,
314
- title: 'Supplier',
315
- fields: [
316
- { name: 'name', type: 'text', required: true },
317
- { name: 'phone', type: 'text' },
318
- { name: 'contactPerson', type: 'text' },
319
- { name: 'email', type: 'text' },
320
- { name: 'address', type: 'text', rows: 2, span: true },
321
- ],
322
- loadAction: { url: 'suppliers/id' },
323
- heroField: 'supplierID',
324
- };
325
- this.supplierCreateButton = { name: 'create', display: 'Create', dialog: true, action: { url: 'suppliers?action=create', method: 'post' } };
326
- this.supplierEditButton = { name: 'edit', dialog: true, action: { url: 'suppliers?action=edit', method: 'post' } };
327
- this.supplierDetailsConfig = {
328
- formConfig: this.supplierFormConfig,
329
- heroField: 'supplierID',
330
- tableConfigs: [
331
- {
332
- ...this.contactPersonTableConfig,
333
- loadAction: { url: 'contactpersons/supplier/x' },
334
- loadCriteria: 'supplier',
335
- loadIDField: 'supplierID'
336
- }
337
- ],
338
- buttons: [
339
- this.supplierCreateButton,
340
- this.supplierEditButton,
341
- ]
342
- };
343
- this.suppliersTableConfig = {
344
- showFilter: true,
345
- minColumns: ['name'],
346
- flatButtons: true,
347
- columns: [
348
- { name: 'name', type: 'text' },
349
- { name: 'phone', type: 'text' },
350
- { name: 'contactPerson', type: 'text' },
351
- ],
352
- buttons: [
353
- this.supplierCreateButton,
354
- { name: 'view', dialog: true, detailsConfig: this.supplierDetailsConfig },
355
- { name: 'edit', dialog: true, detailsConfig: this.supplierDetailsConfig },
356
- { name: 'delete', dialog: true, action: { url: 'suppliers?action=delete', method: 'post' } },
357
- ],
358
- loadAction: { url: 'suppliers/all/x' },
359
- formConfig: this.supplierFormConfig
360
- };
361
- //--------------------------Notifications-------------------------
362
- this.notificationOptions = [
363
- { name: 'UI Only', value: 1 },
364
- { name: 'UI + Email', value: 3 },
365
- // { name: 'UI + Email + SMS', value: 7 },
366
- { name: 'UI + WhatsApp', value: 9 },
367
- { name: 'UI + Telegram', value: 17 },
368
- { name: 'UI + Telegram + WhatsApp', value: 25 },
369
- { name: 'All Channels', value: 31 }
370
- ];
371
- //--------------------------Approvals-------------------------
372
- this.approvalHistoryFormConfig = {
373
- title: 'Approval History',
374
- fields: [
375
- { name: 'levelName', type: 'text', readonly: true, alias: 'Level' },
376
- { name: 'statusName', type: 'text', readonly: true, alias: 'Status' },
377
- { name: 'comments', type: 'text', readonly: true, span: true, rows: 3, copyContent: true },
378
- ],
379
- includeAudit: true
380
- };
381
- //Approval History
382
- this.approvalHistoryTableConfig = {
383
- tabTitle: 'Trail',
384
- elevation: 'none',
385
- minColumns: ['createdDate', 'levelName', 'statusName'],
386
- flatButtons: true,
387
- showFilter: true,
388
- columns: [
389
- { name: 'createdDate', type: 'datetime', alias: 'Date' },
390
- { name: 'levelName', type: 'text', alias: 'Level' },
391
- {
392
- name: 'statusName', type: 'text', alias: 'Status',
393
- colors: [
394
- { name: '#90A4AE', condition: x => x.status === 0 },
395
- { name: '#66BB6A', condition: x => x.status === 1 },
396
- { name: '#F44336', condition: x => x.status === 2 }
397
- ]
398
- },
399
- { name: 'comments', type: 'text', },
400
- { name: 'createdByName', type: 'text', alias: 'By' },
401
- ],
402
- buttons: [
403
- { name: 'view', dialog: true }
404
- ],
405
- formConfig: this.approvalHistoryFormConfig,
406
- loadAction: { url: 'approvalhistory/approval/x' },
407
- loadCriteria: 'approval',
408
- loadIDField: 'approvalID'
409
- };
410
- //approvals form
411
- this.approvalFormConfig = {
412
- title: 'Approval',
413
- fields: [
414
- { name: 'blank', type: 'blank', span: true },
415
- { name: 'statusName', type: 'label', alias: 'Status', span: true },
416
- { name: 'message', type: 'text', required: true, span: true, rows: 3 },
417
- ],
418
- loadAction: { url: 'approvals/id' },
419
- heroField: 'approvalID'
420
- };
421
- // approval action dialog
422
- this.approvalActionFormConfig = {
423
- title: 'Approval Action',
424
- fixedTitle: true,
425
- fields: [
426
- {
427
- name: 'comments', type: 'text', required: false, span: true, rows: 3,
428
- infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.'
429
- }
430
- ]
431
- };
432
- this.approveActionDetailsConfig = {
433
- formConfig: {
434
- ...this.approvalActionFormConfig,
435
- fields: [
436
- {
437
- name: 'comments', type: 'text', required: false, span: true, rows: 3,
438
- infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.'
439
- }
440
- ],
441
- },
442
- mode: 'edit',
443
- buttons: [
444
- { name: 'edit', display: 'Approve', color: 'green', action: { url: 'approve', method: 'post' } } //url preconfigured to be dynamic
445
- ]
446
- };
447
- this.declineActionDetailsConfig = {
448
- formConfig: { ...this.approvalActionFormConfig,
449
- fields: [
450
- {
451
- name: 'comments', type: 'text', required: true, span: true, rows: 3,
452
- infoMessage: 'Enter your comments about this approval action. This will be visible in the approval history.',
453
- hint: 'Decline comment is required !'
454
- }
455
- ],
456
- },
457
- mode: 'edit',
458
- buttons: [
459
- { name: 'edit', display: 'Decline', color: 'red', action: { url: 'decline', method: 'post' } } //url preconfigured to be dynamic
460
- ]
461
- };
462
- this.approveButton = {
463
- name: 'approve', tip: 'Approve Request', dialog: true, inDialog: true, icon: { name: 'done' }, color: 'green', detailsConfig: this.approveActionDetailsConfig, ignorePendingApproval: true,
464
- visible: x => x && x.canAction && (!x.isMyApprovalRequest || this.myRole[this.capSelfApproval.name]),
465
- };
466
- this.declineButton = {
467
- name: 'decline', tip: 'Decline Request', dialog: true, inDialog: true, icon: { name: 'close' }, color: 'red', detailsConfig: this.declineActionDetailsConfig, ignorePendingApproval: true,
468
- visible: x => x && x.canAction && (!x.isMyApprovalRequest || this.myRole[this.capSelfApproval.name]),
469
- };
470
- this.cancelButton = {
471
- name: 'cancel', tip: 'Cancel Approval', inDialog: true, icon: { name: 'cancel' }, color: 'red', action: { url: 'cancel', method: 'post', }, ignorePendingApproval: true,
472
- confirm: { message: 'Cancel approval request? This will revert changes and stop the approval process.' },
473
- visible: x => x && x.canCancel
474
- };
475
- this.approvalDetailsConfig = {
476
- formConfig: this.approvalFormConfig,
477
- heroField: 'approvalID',
478
- tableConfigs: [this.approvalHistoryTableConfig],
479
- stepConfig: {
480
- steps: [],
481
- loadAction: { url: `approvals/steps/{id}` },
482
- loadIDField: 'approvalID',
483
- valueField: 'currentLevel'
484
- },
485
- buttons: [
486
- this.approveButton,
487
- this.declineButton,
488
- this.cancelButton
489
- ]
490
- };
491
- this.viewApprovalButton = {
492
- name: 'info', tip: 'Approval Information', dialog: true, icon: { name: 'info', }, detailsConfig: this.approvalDetailsConfig, ignorePendingApproval: true,
493
- visible: x => x.canAction || x.canCancel
494
- };
495
- //received approvals
496
- this.receivedApprovalsTableConfig = {
497
- showFilter: true,
498
- minColumns: ['message', 'statusName'],
499
- minButtons: ['view', 'approve', 'decline'],
500
- flatButtons: true,
501
- greyOut: (x) => x.isGreyedOut,
502
- // logResponse: true,
503
- collapseButtons: true,
504
- columns: [
505
- { name: 'createdDate', type: 'datetime', alias: 'Date' },
506
- { name: 'createdByName', alias: 'Request By', type: 'text' },
507
- { name: 'message', type: 'text' },
508
- {
509
- name: 'typeName', alias: 'Type', type: 'chip',
510
- colors: [
511
- { name: '#66BB6A', condition: x => x.type === 0 },
512
- { name: 'orange', condition: x => x.type === 1 },
513
- { name: '#F44336', condition: x => x.type === 2 }
514
- ]
515
- },
516
- {
517
- name: 'statusName', alias: 'Status', type: 'chip', detailsConfig: this.approvalDetailsConfig,
518
- colors: [
519
- { name: '#90A4AE', condition: x => x.status === 0 },
520
- { name: '#66BB6A', condition: x => x.status === 1 },
521
- { name: '#F44336', condition: x => x.status === 2 }
522
- ]
523
- },
524
- {
525
- name: 'currentLevelName', type: 'text', alias: 'Current Level',
526
- icons: [
527
- { name: 'done', color: '#66BB6A', condition: x => x.status === 'Approved', tip: 'Approved' },
528
- { name: 'close', color: '#F44336', condition: x => x.status === 'Declined', tip: 'Declined' },
529
- { name: 'schedule', color: '#FFC107', condition: x => x.status === 'Pending', tip: 'Pending' }
530
- ]
531
- },
532
- { name: 'updatedByName', alias: 'Actioned By', type: 'text' },
533
- { name: 'updatedDateDisplay', type: 'datetime', alias: 'Actioned Date' },
534
- ],
535
- buttons: [
536
- this.viewApprovalButton,
537
- this.approveButton,
538
- this.declineButton,
539
- this.cancelButton,
540
- ],
541
- loadAction: { url: 'approvals/all/x' }
542
- };
543
- //send approvals
544
- this.sentApprovalsTableConfig = {
545
- ...this.receivedApprovalsTableConfig,
546
- buttons: [
547
- this.viewApprovalButton,
548
- this.cancelButton,
549
- ],
550
- loadAction: { url: 'approvals/sent/x' }
551
- };
552
- //---------------------------Other code
553
- this.listCache = {};
554
- this.cacheTimestamps = {};
555
- this.ongoingRequests = {};
556
177
  this.appConfig.appName = "App-Name";
557
178
  this.appConfig.logo = "./assets/logo.png";
558
179
  this.appConfig.ADAuth = true;
@@ -596,7 +217,7 @@ export class DataServiceLib {
596
217
  this.capPlans.link = "home/admin/plans";
597
218
  this.capGeneral.name = "cap11";
598
219
  this.capGeneral.display = "General";
599
- this.capGeneral.capSubItems = [this.capNotifications, this.capApprovals, this.capCustomers, this.capInventory, this.capAccounts, this.capSuppliers, this.capTasks];
220
+ this.capGeneral.capSubItems = [this.capCustomers, this.capInventory, this.capAccounts, this.capSuppliers, this.capTasks];
600
221
  this.capCustomers.name = "cap12";
601
222
  this.capCustomers.display = "Customers";
602
223
  this.capCustomers.link = "home/admin/customers";
@@ -616,71 +237,56 @@ export class DataServiceLib {
616
237
  this.capTasks.name = "cap16";
617
238
  this.capTasks.display = "Tasks";
618
239
  this.capTasks.link = "home/admin/tasks";
619
- this.capTasks.icon = "check_box";
240
+ this.capTasks.icon = "task_alt";
620
241
  this.capHR.name = "cap17";
621
242
  this.capHR.display = "HR";
622
243
  this.capHR.link = "home/admin/hr";
623
244
  this.capHR.icon = "diversity_3";
624
- this.capHR.capSubItems = [this.capDepartments, this.capPositions, this.capEmployees,];
625
- this.capEmployees.name = "cap18";
245
+ this.capHR.capSubItems = [this.capEmployees, this.capDepartments, this.capPositions];
246
+ this.capEmployees.name = "cap17";
626
247
  this.capEmployees.display = "Employees";
627
248
  this.capEmployees.link = "home/admin/employees";
628
249
  this.capEmployees.icon = "group";
629
- this.capDepartments.name = "cap19";
250
+ this.capDepartments.name = "cap17";
630
251
  this.capDepartments.display = "Departments";
631
252
  this.capDepartments.link = "home/admin/departments";
632
253
  this.capDepartments.icon = "business_center";
633
- this.capPositions.name = "cap20";
254
+ this.capPositions.name = "cap17";
634
255
  this.capPositions.display = "Positions";
635
256
  this.capPositions.link = "home/admin/positions";
636
257
  this.capPositions.icon = "picture_in_picture_medium";
637
- this.capApprovals.name = "cap21";
638
- this.capApprovals.display = "Approvals";
639
- this.capApprovals.link = "home/admin/approvals";
640
- this.capApprovals.icon = "rule";
641
- this.capApprovalsConfig.name = "cap22";
642
- this.capApprovalsConfig.display = "Approvals Config";
643
- this.capApprovalsConfig.link = "home/admin/approvals-config";
644
- this.capApprovalsConfig.icon = "published_with_changes";
645
- this.capApprovalsConfig.capSubItems = [this.capSelfApproval];
646
- this.capSelfApproval.name = "cap23";
647
- this.capSelfApproval.display = "Self Approvals";
648
- this.capSelfApproval.isBool = true;
649
- this.capNotifications.name = "cap24";
650
- this.capNotifications.display = "Notifications";
651
- this.capNotifications.link = "home/admin/notifications";
652
- this.capNotifications.icon = "notifications";
653
- this.capAppModels.name = "cap25";
654
- this.capAppModels.display = "App Models";
655
- this.capAppModels.link = "home/admin/appmodels";
656
- // this.capAppModels.icon = "notifications"
657
- this.capNotificationsConfig.name = "cap26";
658
- this.capNotificationsConfig.display = "Notif Config";
659
- this.capNotificationsConfig.link = "home/admin/notifications-config";
660
- this.authService.myRoleObserv.subscribe((role) => {
661
- this.myRole = role;
662
- });
663
258
  }
664
259
  UpdateAppConfig(config) {
665
260
  this.appConfigSource.next(config);
666
261
  this.appConfig = config;
667
262
  }
263
+ //--------------------------Employees-------------------------
264
+ loadEmployeesMeta() {
265
+ this.CallApi({ url: 'general/employeesmeta/x' }, "").subscribe((apiResponse) => {
266
+ this.employeeFormConfig.fields.find(x => x.name == 'departmentID').options = apiResponse.data.departments;
267
+ this.employeeFormConfig.fields.find(x => x.name == 'positionID').masterOptions = apiResponse.data.positions;
268
+ this.employeeFormConfig.fields.find(x => x.name == 'employmentStatus').options = apiResponse.data.employmentStatuses;
269
+ this.employeeFormConfig.fields.find(x => x.name == 'activeStatus').options = apiResponse.data.activeStatuses;
270
+ });
271
+ }
272
+ //--------------------------Positions-------------------------
273
+ loadPositionMeta() {
274
+ // this.CallApi({ url: 'positions/meta/x' }, "").subscribe((apiResponse: ApiResponse) => {
275
+ // this.positionFormConfig.fields.find(x => x.name == 'departmentID').options = apiResponse.data.departments;
276
+ // });
277
+ }
278
+ //---------------------------Other code
668
279
  CallApi(action, data = '') {
669
- if (!action?.url) {
670
- console.warn('Invalid action or missing URL');
671
- return of({ success: false, message: 'Invalid action configuration' });
280
+ if (!action.method) {
281
+ return this.httpService.Get(action.url);
672
282
  }
673
- console.log("calling", action);
674
- if (!action.method || action.method === 'get') {
675
- return this.handleCachedCall(action);
283
+ if (action.method == 'get') {
284
+ return this.httpService.Get(action.url);
676
285
  }
677
- else if (action.method === 'post') {
286
+ else if (action.method == 'post') {
678
287
  if (action.isFormData) {
679
288
  return this.httpService.Post_FormData(action.url, data);
680
289
  }
681
- else if (action.url === 'approve' || action.url === 'decline' || action.url === 'cancel') {
682
- return this.httpService.Post(`${data.endpoint}/approve?action=${action.url}`, data);
683
- }
684
290
  else {
685
291
  return this.httpService.Post(action.url, data);
686
292
  }
@@ -689,85 +295,6 @@ export class DataServiceLib {
689
295
  return this.httpService.Post(action.url, data);
690
296
  }
691
297
  }
692
- handleCachedCall(action) {
693
- const cacheKey = this.generateCacheKey(action.url);
694
- const currentTime = Date.now();
695
- // Check if we should use cache
696
- if (!action.skipCache && this.isCacheValid(cacheKey, action)) {
697
- console.log('Using cache:', cacheKey);
698
- return of({
699
- success: true,
700
- message: 'success',
701
- data: this.listCache[cacheKey]
702
- });
703
- }
704
- // Check if there's an ongoing request for the same URL
705
- if (this.ongoingRequests[cacheKey]) {
706
- console.log('Using ongoing request for:', cacheKey);
707
- return this.ongoingRequests[cacheKey];
708
- }
709
- // Determine cache duration
710
- const cacheDuration = this.getCacheDuration(action);
711
- // Only cache if duration is specified or it's a list endpoint
712
- if (cacheDuration > 0) {
713
- // Create and store the ongoing request
714
- this.ongoingRequests[cacheKey] = this.httpService.Get(action.url).pipe(timeout(60000), // 1 minute timeout for waiting requests
715
- tap((response) => {
716
- if (response.success && response?.data) {
717
- this.listCache[cacheKey] = response.data;
718
- this.cacheTimestamps[cacheKey] = currentTime;
719
- }
720
- }), finalize(() => {
721
- delete this.ongoingRequests[cacheKey];
722
- }), share());
723
- return this.ongoingRequests[cacheKey];
724
- }
725
- else {
726
- // No caching, just make the request
727
- console.log('No caching for:', cacheKey);
728
- return this.httpService.Get(action.url);
729
- }
730
- }
731
- generateCacheKey(url) {
732
- return url; // URL already includes query params
733
- }
734
- isCacheValid(cacheKey, action) {
735
- if (!this.listCache[cacheKey] || !this.cacheTimestamps[cacheKey]) {
736
- return false;
737
- }
738
- const cacheDuration = this.getCacheDuration(action);
739
- const currentTime = Date.now();
740
- const cacheAge = currentTime - this.cacheTimestamps[cacheKey];
741
- return cacheAge < (cacheDuration * 60 * 1000);
742
- }
743
- getCacheDuration(action) {
744
- // If explicitly specified in action, use that
745
- if (action.cacheDurationMinutes !== undefined) {
746
- return action.cacheDurationMinutes;
747
- }
748
- // Default to 1 minute for list endpoints
749
- if (action.url.includes('/list/')) {
750
- return 1;
751
- }
752
- // No caching by default
753
- return 0;
754
- }
755
- ClearCache() {
756
- this.listCache = {};
757
- this.cacheTimestamps = {};
758
- Object.keys(this.ongoingRequests).forEach(key => {
759
- delete this.ongoingRequests[key];
760
- });
761
- }
762
- invalidateListCache(entityUrl) {
763
- Object.keys(this.listCache).forEach(key => {
764
- if (key.includes(entityUrl)) {
765
- delete this.listCache[key];
766
- delete this.cacheTimestamps[key];
767
- delete this.ongoingRequests[key];
768
- }
769
- });
770
- }
771
298
  CheckWelcomed(path = 'home/admin/welcome') {
772
299
  this.CallApi({ url: 'tenant/welcome/x' }).subscribe((x) => {
773
300
  if (!x.data) {
@@ -849,12 +376,12 @@ export class DataServiceLib {
849
376
  return this.httpService.Post(`Setting?action=${action}`, setting);
850
377
  }
851
378
  }
852
- DataServiceLib.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, deps: [{ token: i1.HttpService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.AuthService }], target: i0.ɵɵFactoryTarget.Injectable });
379
+ DataServiceLib.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, deps: [{ token: i1.HttpService }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
853
380
  DataServiceLib.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, providedIn: 'root' });
854
381
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DataServiceLib, decorators: [{
855
382
  type: Injectable,
856
383
  args: [{
857
384
  providedIn: 'root'
858
385
  }]
859
- }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.AuthService }]; } });
860
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWxpYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBdUIsU0FBUyxFQUFVLE9BQU8sRUFBZ0QsTUFBTSxvQkFBb0IsQ0FBQztBQUNuSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7O0FBU3RGLE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLFdBQXdCLEVBQVMsTUFBYyxFQUFVLEtBQXFCLEVBQVUsV0FBd0I7UUFBaEgsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQW9KcEksY0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFDcEIsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBUTdELFlBQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN2QixZQUFPLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUUxQixtQkFBYyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzdCLGVB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IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEFwaVJlc3BvbnNlLCBBcHBDb25maWcsIEJ1dHRvbiwgQ2FwSXRlbSwgRGV0YWlsc0RpYWxvZ0NvbmZpZywgRm9ybUNvbmZpZywgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZpbmFsaXplLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmUsIHRhcCwgdGltZW91dCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4vaHR0cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi9jbGFzc2VzL0xpYkNsYXNzZXMnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlTGliIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlKSB7XHJcblxyXG4gICAgdGhpcy5hcHBDb25maWcuYXBwTmFtZSA9IFwiQXBwLU5hbWVcIjtcclxuICAgIHRoaXMuYXBwQ29uZmlnLmxvZ28gPSBcIi4vYXNzZXRzL2xvZ28ucG5nXCJcclxuICAgIHRoaXMuYXBwQ29uZmlnLkFEQXV0aCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5hcHBDb25maWcuY2FwSXRlbXMgPSBbdGhpcy5jYXBNdWx0aXRlbmFudCwgdGhpcy5jYXBBZG1pbiwgdGhpcy5jYXBIb21lXTtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBIb21lLm5hbWUgPSBcImNhcDFcIjtcclxuICAgIHRoaXMuY2FwSG9tZS5kaXNwbGF5ID0gXCJIb21lXCI7XHJcbiAgICB0aGlzLmNhcEhvbWUubGluayA9IFwiaG9tZVwiO1xyXG4gICAgdGhpcy5jYXBIb21lLmljb24gPVwiaG9tZVwiO1xyXG5cclxuXHJcbiAgICB0aGlzLmNhcEFkbWluLm5hbWUgPSBcImNhcDJcIjtcclxuICAgIHRoaXMuY2FwQWRtaW4uZGlzcGxheSA9IFwiQWRtaW5cIjtcclxuICAgIHRoaXMuY2FwQWRtaW4uaWNvbiA9IFwic2VjdXJpdHlcIlxyXG4gICAgdGhpcy5jYXBBZG1pbi5jYXBTdWJJdGVtcyA9IFt0aGlzLmNhcFVzZXJzLCB0aGlzLmNhcFJvbGVzLCB0aGlzLmNhcExvZ3MsIHRoaXMuY2FwU2V0dGluZ3NdO1xyXG5cclxuICAgIHRoaXMuY2FwVXNlcnMubmFtZSA9IFwiY2FwM1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5kaXNwbGF5ID0gXCJVc2Vyc1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5saW5rID0gXCJob21lL2FkbWluL3VzZXJzXCI7XHJcbiAgICB0aGlzLmNhcFVzZXJzLmljb24gPSBcImdyb3VwXCI7XHJcblxyXG4gICAgdGhpcy5jYXBSb2xlcy5uYW1lID0gXCJjYXA0XCJcclxuICAgIHRoaXMuY2FwUm9sZXMuZGlzcGxheSA9IFwiUm9sZXNcIjtcclxuICAgIHRoaXMuY2FwUm9sZXMubGluayA9IFwiaG9tZS9hZG1pbi9yb2xlc1wiO1xyXG4gICAgdGhpcy5jYXBSb2xlcy5pY29uID0gXCJ3b3JrXCI7XHJcblxyXG4gICAgdGhpcy5jYXBMb2dzLm5hbWUgPSBcImNhcDVcIlxyXG4gICAgdGhpcy5jYXBMb2dzLmRpc3BsYXkgPSBcIkxvZ3NcIjtcclxuICAgIHRoaXMuY2FwTG9ncy5saW5rID0gXCJob21lL2FkbWluL2xvZ3NcIjtcclxuICAgIHRoaXMuY2FwTG9ncy5pY29uID0gXCJ0ZXh0X3NuaXBwZXRcIjtcclxuXHJcbiAgICB0aGlzLmNhcFNldHRpbmdzLm5hbWUgPSBcImNhcDZcIlxyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5kaXNwbGF5ID0gXCJTZXR0aW5nc1wiO1xyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5saW5rID0gXCJob21lL2FkbWluL3NldHRpbmdzXCI7XHJcbiAgICB0aGlzLmNhcFNldHRpbmdzLmljb24gPVwic2V0dGluZ3NcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBNdWx0aXRlbmFudC5uYW1lID0gXCJjYXA3XCJcclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQuZGlzcGxheSA9IFwiTXVsdGl0ZW5hbnRcIjtcclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQuaWNvbiA9IFwiYXBhcnRtZW50XCJcclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQuY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBUZW5hbnRzLCB0aGlzLmNhcE1lbWJlcnNoaXAsIHRoaXMuY2FwUGxhbnMgXTtcclxuXHJcbiAgICB0aGlzLmNhcFRlbmFudHMubmFtZSA9IFwiY2FwOFwiXHJcbiAgICB0aGlzLmNhcFRlbmFudHMuZGlzcGxheSA9IFwiVGVuYW50c1wiO1xyXG4gICAgdGhpcy5jYXBUZW5hbnRzLmxpbmsgPSBcImhvbWUvYWRtaW4vdGVuYW50c1wiO1xyXG5cclxuICAgIHRoaXMuY2FwTWVtYmVyc2hpcC5uYW1lID0gXCJjYXA5XCJcclxuICAgIHRoaXMuY2FwTWVtYmVyc2hpcC5kaXNwbGF5ID0gXCJNZW1iZXJzaGlwXCI7XHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAubGluayA9IFwiaG9tZS9hZG1pbi9tZW1iZXJzaGlwXCI7XHJcblxyXG4gICAgdGhpcy5jYXBQbGFucy5uYW1lID0gXCJjYXAxMFwiXHJcbiAgICB0aGlzLmNhcFBsYW5zLmRpc3BsYXkgPSBcIlBsYW5zXCI7XHJcbiAgICB0aGlzLmNhcFBsYW5zLmxpbmsgPSBcImhvbWUvYWRtaW4vcGxhbnNcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBHZW5lcmFsLm5hbWUgPSBcImNhcDExXCJcclxuICAgIHRoaXMuY2FwR2VuZXJhbC5kaXNwbGF5ID0gXCJHZW5lcmFsXCI7XHJcbiAgICB0aGlzLmNhcEdlbmVyYWwuY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBOb3RpZmljYXRpb25zLHRoaXMuY2FwQXBwcm92YWxzLHRoaXMuY2FwQ3VzdG9tZXJzLCB0aGlzLmNhcEludmVudG9yeSwgdGhpcy5jYXBBY2NvdW50cywgdGhpcy5jYXBTdXBwbGllcnMsIHRoaXMuY2FwVGFza3NdO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMubmFtZSA9IFwiY2FwMTJcIlxyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMuZGlzcGxheSA9IFwiQ3VzdG9tZXJzXCI7XHJcbiAgICB0aGlzLmNhcEN1c3RvbWVycy5saW5rID0gXCJob21lL2FkbWluL2N1c3RvbWVyc1wiO1xyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMuaWNvbiA9IFwiZ3JvdXBcIlxyXG5cclxuICAgIHRoaXMuY2FwSW52ZW50b3J5Lm5hbWUgPSBcImNhcDEzXCJcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5LmRpc3BsYXkgPSBcIkludmVudG9yeVwiO1xyXG4gICAgdGhpcy5jYXBJbnZlbnRvcnkubGluayA9IFwiaG9tZS9hZG1pbi9pbnZlbnRvcnlcIjtcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5Lmljb24gPSBcInN0b3JlZnJvbnRcIlxyXG5cclxuICAgIHRoaXMuY2FwQWNjb3VudHMubmFtZSA9IFwiY2FwMTRcIlxyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5kaXNwbGF5ID0gXCJBY2NvdW50c1wiO1xyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5saW5rID0gXCJob21lL2FkbWluL2FjY291bnRzXCI7XHJcbiAgICB0aGlzLmNhcEFjY291bnRzLmljb24gPSBcImFjY291bnRfYmFsYW5jZV93YWxsZXRcIlxyXG5cclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLm5hbWUgPSBcImNhcDE1XCJcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmRpc3BsYXkgPSBcIlN1cHBsaWVyc1wiO1xyXG4gICAgdGhpcy5jYXBTdXBwbGllcnMubGluayA9IFwiaG9tZS9hZG1pbi9zdXBwbGllcnNcIjtcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmljb24gPSBcImdyb3Vwc1wiXHJcblxyXG4gICAgdGhpcy5jYXBUYXNrcy5uYW1lID0gXCJjYXAxNlwiXHJcbiAgICB0aGlzLmNhcFRhc2tzLmRpc3BsYXkgPSBcIlRhc2tzXCI7XHJcbiAgICB0aGlzLmNhcFRhc2tzLmxpbmsgPSBcImhvbWUvYWRtaW4vdGFza3NcIjtcclxuICAgIHRoaXMuY2FwVGFza3MuaWNvbiA9IFwiY2hlY2tfYm94XCJcclxuXHJcblxyXG4gICAgdGhpcy5jYXBIUi5uYW1lID0gXCJjYXAxN1wiXHJcbiAgICB0aGlzLmNhcEhSLmRpc3BsYXkgPSBcIkhSXCI7XHJcbiAgICB0aGlzLmNhcEhSLmxpbmsgPSBcImhvbWUvYWRtaW4vaHJcIjtcclxuICAgIHRoaXMuY2FwSFIuaWNvbiA9IFwiZGl2ZXJzaXR5XzNcIlxyXG4gICAgdGhpcy5jYXBIUi5jYXBTdWJJdGVtcyA9IFt0aGlzLmNhcERlcGFydG1lbnRzLCB0aGlzLmNhcFBvc2l0aW9ucywgdGhpcy5jYXBFbXBsb3llZXMsXVxyXG5cclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLm5hbWUgPSBcImNhcDE4XCJcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmRpc3BsYXkgPSBcIkVtcGxveWVlc1wiO1xyXG4gICAgdGhpcy5jYXBFbXBsb3llZXMubGluayA9IFwiaG9tZS9hZG1pbi9lbXBsb3llZXNcIjtcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcERlcGFydG1lbnRzLm5hbWUgPSBcImNhcDE5XCJcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMuZGlzcGxheSA9IFwiRGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMubGluayA9IFwiaG9tZS9hZG1pbi9kZXBhcnRtZW50c1wiO1xyXG4gICAgdGhpcy5jYXBEZXBhcnRtZW50cy5pY29uID0gXCJidXNpbmVzc19jZW50ZXJcIlxyXG5cclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLm5hbWUgPSBcImNhcDIwXCJcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmRpc3BsYXkgPSBcIlBvc2l0aW9uc1wiO1xyXG4gICAgdGhpcy5jYXBQb3NpdGlvbnMubGluayA9IFwiaG9tZS9hZG1pbi9wb3NpdGlvbnNcIjtcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmljb24gPSBcInBpY3R1cmVfaW5fcGljdHVyZV9tZWRpdW1cIlxyXG5cclxuICAgIHRoaXMuY2FwQXBwcm92YWxzLm5hbWUgPSBcImNhcDIxXCJcclxuICAgIHRoaXMuY2FwQXBwcm92YWxzLmRpc3BsYXkgPSBcIkFwcHJvdmFsc1wiO1xyXG4gICAgdGhpcy5jYXBBcHByb3ZhbHMubGluayA9IFwiaG9tZS9hZG1pbi9hcHByb3ZhbHNcIjtcclxuICAgIHRoaXMuY2FwQXBwcm92YWxzLmljb24gPSBcInJ1bGVcIlxyXG5cclxuICAgIHRoaXMuY2FwQXBwcm92YWxzQ29uZmlnLm5hbWUgPSBcImNhcDIyXCJcclxuICAgIHRoaXMuY2FwQXBwcm92YWxzQ29uZmlnLmRpc3BsYXkgPSBcIkFwcHJvdmFscyBDb25maWdcIjtcclxuICAgIHRoaXMuY2FwQXBwcm92YWxzQ29uZmlnLmxpbmsgPSBcImhvbWUvYWRtaW4vYXBwcm92YWxzLWNvbmZpZ1wiO1xyXG4gICAgdGhpcy5jYXBBcHByb3ZhbHNDb25maWcuaWNvbiA9IFwicHVibGlzaGVkX3dpdGhfY2hhbmdlc1wiXHJcbiAgICB0aGlzLmNhcEFwcHJvdmFsc0NvbmZpZy5jYXBTdWJJdGVtcyA9IFt0aGlzLmNhcFNlbGZBcHByb3ZhbF1cclxuXHJcbiAgICB0aGlzLmNhcFNlbGZBcHByb3ZhbC5uYW1lID0gXCJjYXAyM1wiXHJcbiAgICB0aGlzLmNhcFNlbGZBcHByb3ZhbC5kaXNwbGF5ID0gXCJTZWxmIEFwcHJvdmFsc1wiO1xyXG4gICAgdGhpcy5jYXBTZWxmQXBwcm92YWwuaXNCb29sID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhcE5vdGlmaWNhdGlvbnMubmFtZSA9IFwiY2FwMjRcIlxyXG4gICAgdGhpcy5jYXBOb3RpZmljYXRpb25zLmRpc3BsYXkgPSBcIk5vdGlmaWNhdGlvbnNcIjtcclxuICAgIHRoaXMuY2FwTm90aWZpY2F0aW9ucy5saW5rID0gXCJob21lL2FkbWluL25vdGlmaWNhdGlvbnNcIjtcclxuICAgIHRoaXMuY2FwTm90aWZpY2F0aW9ucy5pY29uID0gXCJub3RpZmljYXRpb25zXCJcclxuXHJcbiAgICB0aGlzLmNhcEFwcE1vZGVscy5uYW1lID0gXCJjYXAyNVwiXHJcbiAgICB0aGlzLmNhcEFwcE1vZGVscy5kaXNwbGF5ID0gXCJBcHAgTW9kZWxzXCI7XHJcbiAgICB0aGlzLmNhcEFwcE1vZGVscy5saW5rID0gXCJob21lL2FkbWluL2FwcG1vZGVsc1wiO1xyXG4gICAgLy8gdGhpcy5jYXBBcHBNb2RlbHMuaWNvbiA9IFwibm90aWZpY2F0aW9uc1wiXHJcblxyXG4gICAgdGhpcy5jYXBOb3RpZmljYXRpb25zQ29uZmlnLm5hbWUgPSBcImNhcDI2XCJcclxuICAgIHRoaXMuY2FwTm90aWZpY2F0aW9uc0NvbmZpZy5kaXNwbGF5ID0gXCJOb3RpZiBDb25maWdcIjtcclxuICAgIHRoaXMuY2FwTm90aWZpY2F0aW9uc0NvbmZpZy5saW5rID0gXCJob21lL2FkbWluL25vdGlmaWNhdGlvbnMtY29uZmlnXCI7XHJcblxyXG5cclxuICAgIHRoaXMuYXV0aFNlcnZpY2UubXlSb2xlT2JzZXJ2LnN1YnNjcmliZSgocm9sZTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubXlSb2xlID0gcm9sZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGFwcENvbmZpZyA9IG5ldyBBcHBDb25maWcoKTtcclxuICBwcml2YXRlIGFwcENvbmZpZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5hcHBDb25maWcpO1xyXG4gIHB1YmxpYyBhcHBDb25maWdPYnNlcnYgPSB0aGlzLmFwcENvbmZpZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICBVcGRhdGVBcHBDb25maWcoY29uZmlnOiBBcHBDb25maWcpIHtcclxuICAgIHRoaXMuYXBwQ29uZmlnU291cmNlLm5leHQoY29uZmlnKTtcclxuICAgIHRoaXMuYXBwQ29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgbXlSb2xlO1xyXG5cclxuICBjYXBIb21lID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwQWRtaW4gPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBVc2VycyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFJvbGVzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwTG9ncyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFNldHRpbmdzID0gbmV3IENhcEl0ZW07XHJcblxyXG4gIGNhcE11bHRpdGVuYW50ID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVGVuYW50cyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcE1lbWJlcnNoaXAgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBQbGFucyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBHZW5lcmFsID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwQ3VzdG9tZXJzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwSW52ZW50b3J5ID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwQWNjb3VudHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBTdXBwbGllcnMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBUYXNrcyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBIUiA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEVtcGxveWVlcyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcERlcGFydG1lbnRzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwUG9zaXRpb25zID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwR3JhZGVzID0gbmV3IENhcEl0ZW07XHJcblxyXG4gIGNhcEFwcHJvdmFscyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFwcHJvdmFsc0NvbmZpZyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcE5vdGlmaWNhdGlvbnMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBTZWxmQXBwcm92YWwgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBBcHBNb2RlbHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBOb3RpZmljYXRpb25zQ29uZmlnID0gbmV3IENhcEl0ZW07XHJcblxyXG4gIHB1YmxpYyB0bXBQcm9maWxldXNlck5hbWUgPSBcIlwiO1xyXG5cclxuXHJcbiAgaXNQcm9jZXNzaW5nID0gZmFsc2U7XHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVwYXJ0bWVtdHMgRm9ybS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBkZXBhcnRtZW50Rm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIHNlY3VyaXR5OiB7IGFsbG93OiBbdGhpcy5jYXBEZXBhcnRtZW50c10gfSxcclxuICAgIHRpdGxlIDogJ0RlcGFydG1lbnQnLFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cy9pZCcgfSxcclxuICAgIGhlcm9GaWVsZDogJ2RlcGFydG1lbnRJRCcsXHJcbiAgICBpbmNsdWRlQXVkaXQ6IHRydWUsXHJcbiAgfVxyXG5cclxuICBlZGl0RGVwYXJ0bWVudEJ1dHRvbjogQnV0dG9uID0geyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzP2FjdGlvbj1lZGl0JywgbWV0aG9kOiAncG9zdCcsIHN1Y2Nlc3NNZXNzYWdlOiAnRWRpdGVkIFN1Y2Nlc3NmdWxseScgfSB9XHJcblxyXG4gIGRlcGFydG1lbnREZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5kZXBhcnRtZW50Rm9ybUNvbmZpZyxcclxuICAgIGhlcm9GaWVsZDogJ2RlcGFydG1lbnRJRCcsXHJcbiAgICBidXR0b25zOiBbdGhpcy5lZGl0RGVwYXJ0bWVudEJ1dHRvbl0sXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVBvc2l0aW9ucyBGb3JtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIHBvc2l0aW9uRm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIHNlY3VyaXR5OiB7IGFsbG93OiBbdGhpcy5jYXBQb3NpdGlvbnNdIH0sXHJcbiAgICB0aXRsZTogJ1Bvc2l0aW9uJyxcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXNjcmlwdGlvbicsIHR5cGU6ICd0ZXh0JywgfSxcclxuICAgICAgeyBuYW1lOiAnZGVwYXJ0bWVudElEJywgYWxpYXM6ICdEZXBhcnRtZW50JywgdHlwZTogJ3NlbGVjdCcsIGxvYWRBY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHMvbGlzdC94JyB9LCBkZXRhaWxzQ29uZmlnOiB0aGlzLmRlcGFydG1lbnREZXRhaWxzQ29uZmlnIH0sXHJcblxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAncG9zaXRpb25zL2lkJyB9LFxyXG4gICAgaGVyb0ZpZWxkOiAncG9zaXRpb25JRCcsXHJcbiAgICBpbmNsdWRlQXVkaXQ6IHRydWUsXHJcbiAgfVxyXG5cclxuICBlZGl0UG9zaXRpb25CdXR0b246IEJ1dHRvbiA9IHsgbmFtZTogJ2VkaXQnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdwb3NpdGlvbnM/YWN0aW9uPWVkaXQnLCBtZXRob2Q6ICdwb3N0Jywgc3VjY2Vzc01lc3NhZ2U6ICdFZGl0ZWQgU3VjY2Vzc2Z1bGx5JyB9IH1cclxuXHJcbiAgcG9zaXRpb25EZXRhaWxzQ29uZmlnIDogRGV0YWlsc0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgIGZvcm1Db25maWcgOiB0aGlzLnBvc2l0aW9uRm9ybUNvbmZpZyxcclxuICAgIGhlcm9GaWVsZCA6ICdwb3NpdGlvbklEJyxcclxuICAgIGJ1dHRvbnM6IFt0aGlzLmVkaXRQb3NpdGlvbkJ1dHRvbl0sXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FbXBsb3llZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdlbmRlcnMgPSBbXHJcbiAgICB7IG5hbWU6ICdNYWxlJywgdmFsdWU6IDEgfSxcclxuICAgIHsgbmFtZTogJ0ZlbWFsZScsIHZhbHVlOiAyIH1cclxuICBdXHJcblxyXG4gIGVtcGxveWVlRm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIHNlY3VyaXR5IDoge2FsbG93IDogW3RoaXMuY2FwRW1wbG95ZWVzXX0sXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnbmF0aW9uYWxJRCcsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdOYXRpb25hbCBJRCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2dlbmRlcicsIGFsaWFzOiAnR2VuZGVyJywgdHlwZTogJ3NlbGVjdCcsIG9wdGlvbnM6IHRoaXMuZ2VuZGVycywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnZmlyc3ROYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdsYXN0TmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnZGF0ZU9mQmlydGgnLCB0eXBlOiAnZGF0ZScsIGFsaWFzOiAnRGF0ZSBvZiBCaXJ0aCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtcGxveW1lbnREYXRlJywgdHlwZTogJ2RhdGUnLCBhbGlhczogJ0VtcGxveW1lbnQgRGF0ZScsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlcGFydG1lbnRJRCcsIGFsaWFzOiAnRGVwYXJ0bWVudCcsIHR5cGU6ICdzZWxlY3QnLCBsb2FkQWN0aW9uIDogeyB1cmwgOiAnZGVwYXJ0bWVudHMvbGlzdC94J30sIGRldGFpbHNDb25maWc6IHRoaXMuZGVwYXJ0bWVudERldGFpbHNDb25maWcgfSxcclxuICAgICAgeyBuYW1lOiAncG9zaXRpb25JRCcsIGFsaWFzOiAnUG9zaXRpb24nLCB0eXBlOiAnc2VsZWN0JywgbG9hZEFjdGlvbjogeyB1cmw6ICdwb3NpdGlvbnMvbGlzdC94JyB9LCBtYXN0ZXJGaWVsZDogJ2RlcGFydG1lbnRJRCcsIGRldGFpbHNDb25maWc6IHRoaXMucG9zaXRpb25EZXRhaWxzQ29uZmlnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtcGxveW1lbnRTdGF0dXMnLCBhbGlhczogJ0VtcGxveW1lbnQgU3RhdHVzJywgdHlwZTogJ3NlbGVjdCcsIGxvYWRBY3Rpb246IHsgdXJsOiAnZW1wbG95ZWVzL2xpc3QvZW1wbG95bWVudC1zdGF0dXMnIH0gfSxcclxuICAgICAgeyBuYW1lOiAnYWN0aXZlU3RhdHVzJywgYWxpYXM6ICdBY3RpdmUgU3RhdHVzJywgdHlwZTogJ3NlbGVjdCcsIGxvYWRBY3Rpb246IHsgdXJsOiAnZW1wbG95ZWVzL2xpc3QvYWN0aXZlLXN0YXR1cycgfSB9LFxyXG4gICAgICB7IG5hbWU6ICdwYXNzcG9ydE51bWJlcicsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdQYXNzcG9ydCBOdW1iZXInIH0sXHJcbiAgICAgIHsgbmFtZTogJ3VzZXJOYW1lJywgdHlwZTogJ3NlbGVjdCcsIGFsaWFzOiAnVXNlcicsIGxvYWRBY3Rpb246IHsgdXJsOiAndXNlci9saXN0L3gnIH0sIG9wdGlvbkRpc3BsYXk6ICduYW1lJywgb3B0aW9uVmFsdWU6ICd2YWx1ZScsIG51bGxhYmxlIDogdHJ1ZSwgaW5mb01lc3NhZ2UgOiAnUmVsYXRlZCB1c2VyIGFjY291bnQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2FkZHJlc3MnLCB0eXBlOiAndGV4dCcsIHJvd3M6IDIsIHNwYW46IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAncGhvbmUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnbm90ZScsIHR5cGU6ICd0ZXh0Jywgcm93czogMiwgc3BhbjogdHJ1ZSB9LFxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZW1wbG95ZWVzL2lkJyB9LFxyXG4gICAgaGVyb0ZpZWxkOiAnZW1wbG95ZWVJRCcsXHJcbiAgICBpbmNsdWRlQXVkaXQgOiB0cnVlLFxyXG4gIH1cclxuXHJcbiAgZW1wbG95ZWVzVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgc2hvd0ZpbHRlcjogdHJ1ZSxcclxuICAgIG1pbkNvbHVtbnM6IFsnbmFtZScsICdkZXBhcnRtZW50TmFtZScsICdwb3NpdGlvbk5hbWUnXSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgbG9nUmVzcG9uc2UgOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2dlbmRlck5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnR2VuZGVyJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXBhcnRtZW50TmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdEZXBhcnRtZW50JyB9LFxyXG4gICAgICB7IG5hbWU6ICdwb3NpdGlvbk5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnUG9zaXRpb24nIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtcGxveW1lbnRTdGF0dXNOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0VtcGxveW1lbnQgU3RhdHVzJyB9LFxyXG4gICAgICB7IG5hbWU6ICdhY3RpdmVTdGF0dXNOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0FjdGl2ZSBTdGF0dXMnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2lzTGlua2VkJywgdHlwZTogJ2NoZWNrYm94JywgYWxpYXM6ICdMaW5rZWQnIH0sXHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICdjcmVhdGUnLCBkaXNwbGF5OiAnQ3JlYXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZW1wbG95ZWVzP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHsgbmFtZTogJ3ZpZXcnLCBkaWFsb2c6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2VtcGxveWVlcz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZW1wbG95ZWVzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdlbXBsb3llZXMvYWxsL3gnIH0sXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLmVtcGxveWVlRm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Qb3NpdGlvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcG9zaXRpb25zVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgc2hvd0ZpbHRlcjogdHJ1ZSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2Rlc2NyaXB0aW9uJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlcGFydG1lbnROYW1lJywgdHlwZTogJ2NoaXAnLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmRlcGFydG1lbnREZXRhaWxzQ29uZmlnLCBhbGlhczogJ0RlcGFydG1lbnQnIH0sXHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICdjcmVhdGUnLCBkaXNwbGF5OiAnQ3JlYXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAncG9zaXRpb25zP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAndmlldycsXHJcbiAgICAgICAgZGlhbG9nOiB0cnVlLFxyXG4gICAgICAgIGRldGFpbHNDb25maWc6IHtcclxuICAgICAgICAgIGZvcm1Db25maWc6IHRoaXMucG9zaXRpb25Gb3JtQ29uZmlnICxcclxuICAgICAgICAgIGhlcm9GaWVsZDogJ3Bvc2l0aW9uSUQnLFxyXG4gICAgICAgICAgYnV0dG9uczogW3RoaXMuZWRpdFBvc2l0aW9uQnV0dG9uXSxcclxuICAgICAgICAgIHRhYmxlQ29uZmlnczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5lbXBsb3llZXNUYWJsZUNvbmZpZyxcclxuICAgICAgICAgICAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2VtcGxveWVlcy94L3gnIH0sIGxvYWRDcml0ZXJpYTogJ3Bvc2l0aW9uJywgbG9hZElERmllbGQ6ICdwb3NpdGlvbklEJyxcclxuICAgICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmVtcGxveWVlc1RhYmxlQ29uZmlnLmNvbHVtbnMuZmlsdGVyKHggPT4gWydkZXBhcnRtZW50TmFtZScsICdwb3NpdGlvbk5hbWUnXS5pbmNsdWRlcyh4Lm5hbWUpID09IGZhbHNlKSxcclxuICAgICAgICAgICAgICB0YWJUaXRsZTogJ0VtcGxveWVlcycsXHJcbiAgICAgICAgICAgICAgZWxldmF0aW9uOiAnbm9uZScsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLmVkaXRQb3NpdGlvbkJ1dHRvbixcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAncG9zaXRpb25zP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdwb3NpdGlvbnMvYWxsL3gnIH0sXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLnBvc2l0aW9uRm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZXBhcnRtZW50cy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgZGVwYXJ0bWVudFRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnXSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICAvLyB7IG5hbWU6ICdkZXBhcnRtZW50SUQnLCB0eXBlOiAnbnVtYmVyJywgYWxpYXM6ICdJRCcgfSxcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0NyZWF0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAndmlldycsXHJcbiAgICAgICAgZGlhbG9nOiB0cnVlLFxyXG4gICAgICAgIGRldGFpbHNDb25maWc6IHtcclxuICAgICAgICAgIGZvcm1Db25maWc6IHRoaXMuZGVwYXJ0bWVudEZvcm1Db25maWcsXHJcbiAgICAgICAgICBoZXJvRmllbGQ6ICdkZXBhcnRtZW50SUQnLFxyXG4gICAgICAgICAgYnV0dG9uczogW3RoaXMuZWRpdERlcGFydG1lbnRCdXR0b25dLFxyXG4gICAgICAgICAgdGFibGVDb25maWdzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAuLi50aGlzLmVtcGxveWVlc1RhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZW1wbG95ZWVzL3gveCcgfSwgbG9hZENyaXRlcmlhOiAnZGVwYXJ0bWVudCcsIGxvYWRJREZpZWxkOiAnZGVwYXJ0bWVudElEJyxcclxuICAgICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmVtcGxveWVlc1RhYmxlQ29uZmlnLmNvbHVtbnMuZmlsdGVyKHggPT4gWydkZXBhcnRtZW50TmFtZScsICdwb3NpdGlvbk5hbWUnXS5pbmNsdWRlcyh4Lm5hbWUpID09IGZhbHNlKSxcclxuICAgICAgICAgICAgICB0YWJUaXRsZTogJ0VtcGxveWVlcycsXHJcbiAgICAgICAgICAgICAgZWxldmF0aW9uOiAnbm9uZScsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBvc2l0aW9uc1RhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAncG9zaXRpb25zL3gveCcgfSwgbG9hZENyaXRlcmlhOiAnZGVwYXJ0bWVudCcsIGxvYWRJREZpZWxkOiAnZGVwYXJ0bWVudElEJyxcclxuICAgICAgICAgICAgICB0YWJUaXRsZTogJ1Bvc2l0aW9ucycsXHJcbiAgICAgICAgICAgICAgZWxldmF0aW9uOiAnbm9uZScsXHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdGhpcy5lZGl0RGVwYXJ0bWVudEJ1dHRvbixcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHM/YWN0aW9uPWRlbGV0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzL2FsbC94JyB9LFxyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5kZXBhcnRtZW50Rm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Db250YWN0IFBlcnNvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgY29udGFjdFBlcnNvbkZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICB0aXRsZTogJ0NvbnRhY3QgUGVyc29uJyxcclxuICAgIGluY2x1ZGVBdWRpdDogdHJ1ZSxcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCBzcGFuIDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdtb2JpbGUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnY29udGFjdE1ldGhvZHMnLCB0eXBlOiAnY29tcG9zaXRlJywgc3BhbjogdHJ1ZSwgc3ViZmllbGRzIDpbXHJcbiAgICAgICAgeyBuYW1lOiAnY2FuQ2FsbCcsIHR5cGU6ICdjaGVja2JveCcsIGFsaWFzOiAnQ2FsbCcgfSxcclxuICAgICAgICB7IG5hbWU6ICdjYW5TTVMnLCB0eXBlOiAnY2hlY2tib3gnLCBhbGlhczogJ1NNUycgfSxcclxuICAgICAgICB7IG5hbWU6ICdjYW5XaGF0c0FwcCcsIHR5cGU6ICdjaGVja2JveCcsIGFsaWFzOiAnV2hhdHNBcHAnIH1cclxuICAgICAgXSB9LFxyXG5cclxuICAgIF0sXHJcbiAgICByZXNldDogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGNvbnRhY3RQZXJzb25UYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICB0YWJUaXRsZTogJ0NvbnRhY3RzJyxcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnLCAnY29udGFjdE1ldGhvZHMnXSxcclxuICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG4gICAgZmxhdEJ1dHRvbnM6IHRydWUsXHJcbiAgICBjb2x1bW5zOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcsIH0sXHJcbiAgICAgIHsgbmFtZTogJ21vYmlsZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdlbWFpbCcsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ2NvbnRhY3RNZXRob2RzJyxcclxuICAgICAgICB0eXBlOiAnaWNvbicsXHJcbiAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgIHsgbmFtZTogJ2NhbGwnLCBjb2xvcjogJ2dyZWVuJywgY29uZGl0aW9uOiB4ID0+IHguY2FuQ2FsbCwgdGlwOiAnQXZhaWxhYmxlIGZvciBDYWxscycgfSxcclxuICAgICAgICAgIHsgbmFtZTogJ3NtcycsIGNvbG9yOiAnZ3JlZW4nLCBjb25kaXRpb246IHggPT4geC5jYW5TTVMsIHRpcDogJ0F2YWlsYWJsZSBmb3IgU01TJyB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnZm9ydW0nLCBjb2xvcjogJ2dyZWVuJywgY29uZGl0aW9uOiB4ID0+IHguY2FuV2hhdHNBcHAsIHRpcDogJ0F2YWlsYWJsZSBvbiBXaGF0c0FwcCcgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXSxcclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlJywgZGlzcGxheTogJ0FkZCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2NvbnRhY3RwZXJzb25zP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9LCBjb25maXJtOiB7IG1lc3NhZ2U6ICdBZGQgY29udGFjdCBwZXJzb24/JyB9IH0sXHJcbiAgICAgIHsgbmFtZTogJ2VkaXQnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdjb250YWN0cGVyc29ucz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnY29udGFjdHBlcnNvbnM/YWN0aW9uPWRlbGV0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfVxyXG4gICAgXSxcclxuICAgIGZvcm1Db25maWc6IHRoaXMuY29udGFjdFBlcnNvbkZvcm1Db25maWdcclxuICB9O1xyXG5cclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUN1c3RvbWVycy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBjdXN0b21lckZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICBzZWN1cml0eTogeyBhbGxvdzogW3RoaXMuY2FwQ3VzdG9tZXJzXSB9LFxyXG4gICAgaW5jbHVkZUF1ZGl0OiB0cnVlLFxyXG4gICAgdGl0bGUgOiAnQ3VzdG9tZXInLFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ3Bob25lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2NvbnRhY3RQZXJzb24nLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnYWRkcmVzcycsIHR5cGU6ICd0ZXh0Jywgcm93czogMiwgc3BhbjogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdjdXN0b21lclRlbmFudElEJywgYWxpYXM6ICdDdXN0b21lciBUZW5hbnQnLCB0eXBlOiAndGV4dCcsIGxvYWRBY3Rpb246IHsgdXJsOiAndGVuYW50cy9saXN0L3gnIH0gLCBudWxsYWJsZTogdHJ1ZSB9LFxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnY3VzdG9tZXJzL2lkJyB9LFxyXG4gICAgaGVyb0ZpZWxkOiAnY3VzdG9tZXJJRCcsXHJcblxyXG4gICAgcmVzZXQ6IHRydWUsXHJcbiAgfVxyXG5cclxuICBjdXN0b21lckNyZWF0ZUJ1dHRvbiA6IEJ1dHRvbiA9IHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdDcmVhdGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdjdXN0b21lcnM/YWN0aW9uPWNyZWF0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfVxyXG4gIGN1c3RvbWVyRWRpdEJ1dHRvbjogQnV0dG9uID0geyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2N1c3RvbWVycz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnIH0gfVxyXG5cclxuICBjdXN0b21lckRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcgPSB7XHJcbiAgICBmb3JtQ29uZmlnIDogdGhpcy5jdXN0b21lckZvcm1Db25maWcsXHJcbiAgICBoZXJvRmllbGQgOiAnY3VzdG9tZXJJRCcsXHJcbiAgICB0YWJsZUNvbmZpZ3M6IFtcclxuICAgICAge1xyXG4gICAgICAgIC4uLnRoaXMuY29udGFjdFBlcnNvblRhYmxlQ29uZmlnLFxyXG4gICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnY29udGFjdHBlcnNvbnMvY3VzdG9tZXIveCcgfSxcclxuICAgICAgICBsb2FkQ3JpdGVyaWE6ICdjdXN0b21lcicsXHJcbiAgICAgICAgbG9hZElERmllbGQ6ICdjdXN0b21lcklEJ1xyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB0aGlzLmN1c3RvbWVyQ3JlYXRlQnV0dG9uLFxyXG4gICAgICB0aGlzLmN1c3RvbWVyRWRpdEJ1dHRvblxyXG4gICAgXVxyXG4gIH07XHJcblxyXG4gIGN1c3RvbWVyc1RhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnXSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgbG9nUmVzcG9uc2U6IHRydWUsXHJcbiAgICBtYXhCdXR0b25zQ291bnQ6IDMsXHJcbiAgICBjb2xsYXBzZUJ1dHRvbnMgOiB0cnVlLFxyXG5cclxuICAgIGNvbHVtbnM6IFtcclxuXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAncGhvbmUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnY29udGFjdFBlcnNvbicsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdpc0xpbmtlZCcsIHR5cGU6ICdjaGVja2JveCcsIGFsaWFzOiAnTGlua2VkJyB9LFxyXG5cclxuICAgIF0sXHJcblxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB0aGlzLmN1c3RvbWVyQ3JlYXRlQnV0dG9uLFxyXG4gICAgICB7IG5hbWU6ICd2aWV3JywgZGlhbG9nOiB0cnVlLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmN1c3RvbWVyRGV0YWlsc0NvbmZpZyB9LFxyXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBkZXRhaWxzQ29uZmlnOiB0aGlzLmN1c3RvbWVyRGV0YWlsc0NvbmZpZyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZWxldGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdjdXN0b21lcnM/YWN0aW9uPWRlbGV0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgIF0sXHJcblxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdjdXN0b21lcnMvYWxsL3gnIH0sXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLmN1c3RvbWVyRm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1TdXBwbGllcnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgc3VwcGxpZXJGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgc2VjdXJpdHk6IHsgYWxsb3c6IFt0aGlzLmNhcFN1cHBsaWVyc10gfSxcclxuICAgIGluY2x1ZGVBdWRpdDogdHJ1ZSxcclxuICAgIHRpdGxlOiAnU3VwcGxpZXInLFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ3Bob25lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2NvbnRhY3RQZXJzb24nLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnYWRkcmVzcycsIHR5cGU6ICd0ZXh0Jywgcm93czogMiwgc3BhbjogdHJ1ZSB9LFxyXG4gICAgXSxcclxuXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3N1cHBsaWVycy9pZCcgfSxcclxuICAgIGhlcm9GaWVsZDogJ3N1cHBsaWVySUQnLFxyXG4gIH1cclxuXHJcbiAgc3VwcGxpZXJDcmVhdGVCdXR0b24gOiBCdXR0b24gPSB7IG5hbWU6ICdjcmVhdGUnLCBkaXNwbGF5OiAnQ3JlYXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnc3VwcGxpZXJzP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH1cclxuICBzdXBwbGllckVkaXRCdXR0b24gOiBCdXR0b24gPSB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnc3VwcGxpZXJzP2FjdGlvbj1lZGl0JywgbWV0aG9kOiAncG9zdCcgfSB9XHJcblxyXG4gIHN1cHBsaWVyRGV0YWlsc0NvbmZpZzogRGV0YWlsc0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgIGZvcm1Db25maWcgOiB0aGlzLnN1cHBsaWVyRm9ybUNvbmZpZyxcclxuICAgIGhlcm9GaWVsZCA6ICdzdXBwbGllcklEJyxcclxuICAgIHRhYmxlQ29uZmlnczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgLi4udGhpcy5jb250YWN0UGVyc29uVGFibGVDb25maWcsXHJcbiAgICAgICAgbG9hZEFjdGlvbjogeyB1cmw6ICdjb250YWN0cGVyc29ucy9zdXBwbGllci94JyB9LFxyXG4gICAgICAgIGxvYWRDcml0ZXJpYTogJ3N1cHBsaWVyJyxcclxuICAgICAgICBsb2FkSURGaWVsZDogJ3N1cHBsaWVySUQnXHJcbiAgICAgIH1cclxuICAgIF0sXHJcbiAgICBidXR0b25zIDogW1xyXG4gICAgICB0aGlzLnN1cHBsaWVyQ3JlYXRlQnV0dG9uLFxyXG4gICAgICB0aGlzLnN1cHBsaWVyRWRpdEJ1dHRvbixcclxuICAgIF1cclxuICB9O1xyXG5cclxuICBzdXBwbGllcnNUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgbWluQ29sdW1uczogWyduYW1lJ10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdwaG9uZScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdjb250YWN0UGVyc29uJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICBdLFxyXG5cclxuICAgIGJ1dHRvbnM6IFtcclxuICAgICAgdGhpcy5zdXBwbGllckNyZWF0ZUJ1dHRvbixcclxuICAgICAgeyBuYW1lOiAndmlldycsIGRpYWxvZzogdHJ1ZSwgZGV0YWlsc0NvbmZpZzogdGhpcy5zdXBwbGllckRldGFpbHNDb25maWcgfSxcclxuICAgICAgeyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgIGRldGFpbHNDb25maWc6IHRoaXMuc3VwcGxpZXJEZXRhaWxzQ29uZmlnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3N1cHBsaWVycz9hY3Rpb249ZGVsZXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgXSxcclxuXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3N1cHBsaWVycy9hbGwveCcgfSxcclxuICAgIGZvcm1Db25maWc6IHRoaXMuc3VwcGxpZXJGb3JtQ29uZmlnXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU5vdGlmaWNhdGlvbnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIG5vdGlmaWNhdGlvbk9wdGlvbnMgPSBbXHJcbiAgICB7IG5hbWU6ICdVSSBPbmx5JywgdmFsdWU6IDEgfSxcclxuICAgIHsgbmFtZTogJ1VJICsgRW1haWwnLCB2YWx1ZTogMyB9LFxyXG4gICAgLy8geyBuYW1lOiAnVUkgKyBFbWFpbCArIFNNUycsIHZhbHVlOiA3IH0sXHJcbiAgICB7IG5hbWU6ICdVSSArIFdoYXRzQXBwJywgdmFsdWU6IDkgfSxcclxuICAgIHsgbmFtZTogJ1VJICsgVGVsZWdyYW0nLCB2YWx1ZTogMTcgfSxcclxuICAgIHsgbmFtZTogJ1VJICsgVGVsZWdyYW0gKyBXaGF0c0FwcCcsIHZhbHVlOiAyNSB9LFxyXG4gICAgeyBuYW1lOiAnQWxsIENoYW5uZWxzJywgdmFsdWU6IDMxIH1cclxuICBdXHJcblxyXG5cclxuXHJcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUFwcHJvdmFscy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcblxyXG4gIGFwcHJvdmFsSGlzdG9yeUZvcm1Db25maWcgOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgdGl0bGU6ICdBcHByb3ZhbCBIaXN0b3J5JyxcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICdsZXZlbE5hbWUnLCB0eXBlOiAndGV4dCcsIHJlYWRvbmx5OiB0cnVlLCBhbGlhczogJ0xldmVsJyB9LFxyXG4gICAgICB7IG5hbWU6ICdzdGF0dXNOYW1lJywgdHlwZTogJ3RleHQnLCByZWFkb25seTogdHJ1ZSwgYWxpYXM6ICdTdGF0dXMnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2NvbW1lbnRzJywgdHlwZTogJ3RleHQnLCByZWFkb25seTogdHJ1ZSwgc3BhbjogdHJ1ZSwgcm93czogMywgY29weUNvbnRlbnQ6IHRydWUgfSxcclxuICAgIF0sXHJcbiAgICBpbmNsdWRlQXVkaXQ6IHRydWVcclxuICB9XHJcblxyXG4gIC8vQXBwcm92YWwgSGlzdG9yeVxyXG4gIGFwcHJvdmFsSGlzdG9yeVRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHRhYlRpdGxlOiAnVHJhaWwnLFxyXG4gICAgZWxldmF0aW9uOiAnbm9uZScsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ2NyZWF0ZWREYXRlJywgJ2xldmVsTmFtZScsICdzdGF0dXNOYW1lJ10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIHNob3dGaWx0ZXIgOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICdjcmVhdGVkRGF0ZScsIHR5cGU6ICdkYXRldGltZScsIGFsaWFzIDogJ0RhdGUnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2xldmVsTmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdMZXZlbCcgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdzdGF0dXNOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ1N0YXR1cycsXHJcbiAgICAgICAgY29sb3JzOiBbXHJcbiAgICAgICAgICB7IG5hbWU6ICcjOTBBNEFFJywgY29uZGl0aW9uOiB4ID0+IHguc3RhdHVzID09PSAwIH0sXHJcbiAgICAgICAgICB7IG5hbWU6ICcjNjZCQjZBJywgY29uZGl0aW9uOiB4ID0+IHguc3RhdHVzID09PSAxIH0sXHJcbiAgICAgICAgICB7IG5hbWU6ICcjRjQ0MzM2JywgY29uZGl0aW9uOiB4ID0+IHguc3RhdHVzID09PSAyIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgbmFtZTogJ2NvbW1lbnRzJywgdHlwZTogJ3RleHQnLCB9LFxyXG4gICAgICB7IG5hbWU6ICdjcmVhdGVkQnlOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0J5JyB9LFxyXG5cclxuICAgIF0sXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ3ZpZXcnLCBkaWFsb2c6IHRydWUgfVxyXG4gICAgXSxcclxuXHJcbiAgICBmb3JtQ29uZmlnIDogdGhpcy5hcHByb3ZhbEhpc3RvcnlGb3JtQ29uZmlnLFxyXG5cclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnYXBwcm92YWxoaXN0b3J5L2FwcHJvdmFsL3gnIH0sXHJcbiAgICBsb2FkQ3JpdGVyaWE6ICdhcHByb3ZhbCcsXHJcbiAgICBsb2FkSURGaWVsZDogJ2FwcHJvdmFsSUQnXHJcbiAgfTtcclxuXHJcblxyXG5cclxuICAvL2FwcHJvdmFscyBmb3JtXHJcbiAgYXBwcm92YWxGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgdGl0bGU6ICdBcHByb3ZhbCcsXHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnYmxhbmsnLCB0eXBlOiAnYmxhbmsnLCBzcGFuOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ3N0YXR1c05hbWUnLCB0eXBlOiAnbGFiZWwnLCBhbGlhczogJ1N0YXR1cycsIHNwYW46IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnbWVzc2FnZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUsIHNwYW46IHRydWUsIHJvd3M6IDMgfSxcclxuXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdhcHByb3ZhbHMvaWQnIH0sXHJcbiAgICBoZXJvRmllbGQ6ICdhcHByb3ZhbElEJ1xyXG4gIH07XHJcblxyXG5cclxuXHJcblxyXG4gIC8vIGFwcHJvdmFsIGFjdGlvbiBkaWFsb2dcclxuICBhcHByb3ZhbEFjdGlvbkZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICB0aXRsZTogJ0FwcHJvdmFsIEFjdGlvbicsXHJcbiAgICBmaXhlZFRpdGxlOiB0cnVlLFxyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAnY29tbWVudHMnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiBmYWxzZSwgc3BhbjogdHJ1ZSwgcm93czogMyxcclxuICAgICAgICBpbmZvTWVzc2FnZTogJ0VudGVyIHlvdXIgY29tbWVudHMgYWJvdXQgdGhpcyBhcHByb3ZhbCBhY3Rpb24uIFRoaXMgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBhcHByb3ZhbCBoaXN0b3J5LidcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH07XHJcblxyXG4gIGFwcHJvdmVBY3Rpb25EZXRhaWxzQ29uZmlnOiBEZXRhaWxzRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgZm9ybUNvbmZpZzoge1xyXG4gICAgICAuLi50aGlzLmFwcHJvdmFsQWN0aW9uRm9ybUNvbmZpZyxcclxuICAgICAgZmllbGRzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogJ2NvbW1lbnRzJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogZmFsc2UsIHNwYW46IHRydWUsIHJvd3M6IDMsXHJcbiAgICAgICAgICBpbmZvTWVzc2FnZTogJ0VudGVyIHlvdXIgY29tbWVudHMgYWJvdXQgdGhpcyBhcHByb3ZhbCBhY3Rpb24uIFRoaXMgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBhcHByb3ZhbCBoaXN0b3J5LidcclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAgbW9kZTogJ2VkaXQnLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlzcGxheTogJ0FwcHJvdmUnLCBjb2xvcjogJ2dyZWVuJywgYWN0aW9uOiB7IHVybDogJ2FwcHJvdmUnLCBtZXRob2Q6ICdwb3N0JyB9IH0gLy91cmwgcHJlY29uZmlndXJlZCB0byBiZSBkeW5hbWljXHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbiAgZGVjbGluZUFjdGlvbkRldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcgPSB7XHJcbiAgICBmb3JtQ29uZmlnOiB7Li4udGhpcy5hcHByb3ZhbEFjdGlvbkZvcm1Db25maWcsXHJcbiAgICAgIGZpZWxkczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6ICdjb21tZW50cycsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUsIHNwYW46IHRydWUsIHJvd3M6IDMsXHJcbiAgICAgICAgICBpbmZvTWVzc2FnZTogJ0VudGVyIHlvdXIgY29tbWVudHMgYWJvdXQgdGhpcyBhcHByb3ZhbCBhY3Rpb24uIFRoaXMgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBhcHByb3ZhbCBoaXN0b3J5LicsXHJcbiAgICAgICAgICBoaW50IDogJ0RlY2xpbmUgY29tbWVudCBpcyByZXF1aXJlZCAhJ1xyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICBtb2RlOiAnZWRpdCcsXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ2VkaXQnLCBkaXNwbGF5OiAnRGVjbGluZScsIGNvbG9yOiAncmVkJywgYWN0aW9uOiB7IHVybDogJ2RlY2xpbmUnLCBtZXRob2Q6ICdwb3N0JyB9IH0gLy91cmwgcHJlY29uZmlndXJlZCB0byBiZSBkeW5hbWljXHJcbiAgICBdXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGFwcHJvdmVCdXR0b246IEJ1dHRvbiA9IHtcclxuICAgIG5hbWU6ICdhcHByb3ZlJywgdGlwOiAnQXBwcm92ZSBSZXF1ZXN0JywgZGlhbG9nOiB0cnVlLCBpbkRpYWxvZzogdHJ1ZSwgaWNvbjogeyBuYW1lOiAnZG9uZScgfSwgY29sb3I6ICdncmVlbicsIGRldGFpbHNDb25maWc6IHRoaXMuYXBwcm92ZUFjdGlvbkRldGFpbHNDb25maWcsIGlnbm9yZVBlbmRpbmdBcHByb3ZhbDogdHJ1ZSxcclxuICAgIHZpc2libGU6IHggPT4geCAmJiB4LmNhbkFjdGlvbiAmJiAoIXguaXNNeUFwcHJvdmFsUmVxdWVzdCB8fCB0aGlzLm15Um9sZVt0aGlzLmNhcFNlbGZBcHByb3ZhbC5uYW1lXSksXHJcbiAgfVxyXG5cclxuICBkZWNsaW5lQnV0dG9uOiBCdXR0b24gPSB7XHJcbiAgICBuYW1lOiAnZGVjbGluZScsIHRpcDogJ0RlY2xpbmUgUmVxdWVzdCcsIGRpYWxvZzogdHJ1ZSwgaW5EaWFsb2c6IHRydWUsIGljb246IHsgbmFtZTogJ2Nsb3NlJyB9LCBjb2xvcjogJ3JlZCcsIGRldGFpbHNDb25maWc6IHRoaXMuZGVjbGluZUFjdGlvbkRldGFpbHNDb25maWcsIGlnbm9yZVBlbmRpbmdBcHByb3ZhbDogdHJ1ZSxcclxuICAgIHZpc2libGU6IHggPT4geCAmJiB4LmNhbkFjdGlvbiAmJiAoIXguaXNNeUFwcHJvdmFsUmVxdWVzdCB8fCB0aGlzLm15Um9sZVt0aGlzLmNhcFNlbGZBcHByb3ZhbC5uYW1lXSksXHJcbiAgfVxyXG5cclxuICBjYW5jZWxCdXR0b246IEJ1dHRvbiA9IHtcclxuICAgIG5hbWU6ICdjYW5jZWwnLCB0aXA6ICdDYW5jZWwgQXBwcm92YWwnLCBpbkRpYWxvZzogdHJ1ZSwgaWNvbjogeyBuYW1lOiAnY2FuY2VsJyB9LCBjb2xvcjogJ3JlZCcsIGFjdGlvbjogeyB1cmw6ICdjYW5jZWwnLCBtZXRob2Q6ICdwb3N0JywgfSwgaWdub3JlUGVuZGluZ0FwcHJvdmFsOiB0cnVlLCAvL3VybCBwcmVjb25maWd1cmVkIHRvIGJlIGR5bmFtaWNcclxuICAgIGNvbmZpcm06IHsgbWVzc2FnZTogJ0NhbmNlbCBhcHByb3ZhbCByZXF1ZXN0PyBUaGlzIHdpbGwgcmV2ZXJ0IGNoYW5nZXMgYW5kIHN0b3AgdGhlIGFwcHJvdmFsIHByb2Nlc3MuJyB9LFxyXG4gICAgdmlzaWJsZTogeCA9PiB4ICYmIHguY2FuQ2FuY2VsXHJcbiAgfVxyXG5cclxuICBhcHByb3ZhbERldGFpbHNDb25maWc6IERldGFpbHNEaWFsb2dDb25maWcgPSB7XHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLmFwcHJvdmFsRm9ybUNvbmZpZyxcclxuICAgIGhlcm9GaWVsZDogJ2FwcHJvdmFsSUQnLFxyXG4gICAgdGFibGVDb25maWdzOiBbdGhpcy5hcHByb3ZhbEhpc3RvcnlUYWJsZUNvbmZpZ10sXHJcblxyXG4gICAgc3RlcENvbmZpZzoge1xyXG4gICAgICBzdGVwczogW10sXHJcbiAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiBgYXBwcm92YWxzL3N0ZXBzL3tpZH1gIH0sXHJcbiAgICAgIGxvYWRJREZpZWxkOiAnYXBwcm92YWxJRCcsXHJcbiAgICAgIHZhbHVlRmllbGQ6ICdjdXJyZW50TGV2ZWwnXHJcbiAgICB9LFxyXG5cclxuICAgIGJ1dHRvbnMgOiBbXHJcbiAgICAgIHRoaXMuYXBwcm92ZUJ1dHRvbixcclxuICAgICAgdGhpcy5kZWNsaW5lQnV0dG9uLFxyXG4gICAgICB0aGlzLmNhbmNlbEJ1dHRvblxyXG4gICAgXVxyXG5cclxuICB9O1xyXG5cclxuXHJcbiAgdmlld0FwcHJvdmFsQnV0dG9uOiBCdXR0b24gPSB7XHJcbiAgICBuYW1lOiAnaW5mbycsIHRpcDogJ0FwcHJvdmFsIEluZm9ybWF0aW9uJywgZGlhbG9nOiB0cnVlLCBpY29uOiB7IG5hbWU6ICdpbmZvJywgIH0sIGRldGFpbHNDb25maWc6IHRoaXMuYXBwcm92YWxEZXRhaWxzQ29uZmlnLCBpZ25vcmVQZW5kaW5nQXBwcm92YWw6IHRydWUsXHJcbiAgICB2aXNpYmxlOiB4ID0+IHguY2FuQWN0aW9uIHx8IHguY2FuQ2FuY2VsXHJcbiAgfVxyXG5cclxuXHJcbiAgLy9yZWNlaXZlZCBhcHByb3ZhbHNcclxuICByZWNlaXZlZEFwcHJvdmFsc1RhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ21lc3NhZ2UnLCAnc3RhdHVzTmFtZSddLFxyXG4gICAgbWluQnV0dG9uczogWyd2aWV3JywgJ2FwcHJvdmUnLCAnZGVjbGluZSddLFxyXG4gICAgZmxhdEJ1dHRvbnM6IHRydWUsXHJcbiAgICBncmV5T3V0OiAoeCkgPT4geC5pc0dyZXllZE91dCxcclxuICAgIC8vIGxvZ1Jlc3BvbnNlOiB0cnVlLFxyXG4gICAgY29sbGFwc2VCdXR0b25zOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICdjcmVhdGVkRGF0ZScsIHR5cGU6ICdkYXRldGltZScsIGFsaWFzOiAnRGF0ZScgfSxcclxuICAgICAgeyBuYW1lOiAnY3JlYXRlZEJ5TmFtZScsIGFsaWFzOiAnUmVxdWVzdCBCeScsIHR5cGU6ICd0ZXh0JyB9LFxyXG4gICAgICB7IG5hbWU6ICdtZXNzYWdlJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAndHlwZU5hbWUnLCBhbGlhczogJ1R5cGUnLCB0eXBlOiAnY2hpcCcsXHJcbiAgICAgICAgY29sb3JzOiBbXHJcbiAgICAgICAgICB7IG5hbWU6ICcjNjZCQjZBJywgY29uZGl0aW9uOiB4ID0+IHgudHlwZSA9PT0gMCB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnb3JhbmdlJywgY29uZGl0aW9uOiB4ID0+IHgudHlwZSA9PT0gMSB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnI0Y0NDMzNicsIGNvbmRpdGlvbjogeCA9PiB4LnR5cGUgPT09IDIgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdzdGF0dXNOYW1lJywgYWxpYXM6ICdTdGF0dXMnLCB0eXBlOiAnY2hpcCcsIGRldGFpbHNDb25maWc6IHRoaXMuYXBwcm92YWxEZXRhaWxzQ29uZmlnLFxyXG4gICAgICAgIGNvbG9yczogW1xyXG4gICAgICAgICAgeyBuYW1lOiAnIzkwQTRBRScsIGNvbmRpdGlvbjogeCA9PiB4LnN0YXR1cyA9PT0gMCB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnIzY2QkI2QScsIGNvbmRpdGlvbjogeCA9PiB4LnN0YXR1cyA9PT0gMSB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnI0Y0NDMzNicsIGNvbmRpdGlvbjogeCA9PiB4LnN0YXR1cyA9PT0gMiB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ2N1cnJlbnRMZXZlbE5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnQ3VycmVudCBMZXZlbCcsXHJcbiAgICAgICAgaWNvbnM6IFtcclxuICAgICAgICAgIHsgbmFtZTogJ2RvbmUnLCBjb2xvcjogJyM2NkJCNkEnLCBjb25kaXRpb246IHggPT4geC5zdGF0dXMgPT09ICdBcHByb3ZlZCcsIHRpcDogJ0FwcHJvdmVkJyB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnY2xvc2UnLCBjb2xvcjogJyNGNDQzMzYnLCBjb25kaXRpb246IHggPT4geC5zdGF0dXMgPT09ICdEZWNsaW5lZCcsIHRpcDogJ0RlY2xpbmVkJyB9LFxyXG4gICAgICAgICAgeyBuYW1lOiAnc2NoZWR1bGUnLCBjb2xvcjogJyNGRkMxMDcnLCBjb25kaXRpb246IHggPT4geC5zdGF0dXMgPT09ICdQZW5kaW5nJywgdGlwOiAnUGVuZGluZycgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgeyBuYW1lOiAndXBkYXRlZEJ5TmFtZScsIGFsaWFzOiAnQWN0aW9uZWQgQnknLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAndXBkYXRlZERhdGVEaXNwbGF5JywgdHlwZTogJ2RhdGV0aW1lJywgYWxpYXM6ICdBY3Rpb25lZCBEYXRlJyB9LFxyXG4gICAgXSxcclxuXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHRoaXMudmlld0FwcHJvdmFsQnV0dG9uLFxyXG4gICAgICB0aGlzLmFwcHJvdmVCdXR0b24sXHJcbiAgICAgIHRoaXMuZGVjbGluZUJ1dHRvbixcclxuICAgICAgdGhpcy5jYW5jZWxCdXR0b24sXHJcbiAgICBdLFxyXG5cclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnYXBwcm92YWxzL2FsbC94JyB9XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vc2VuZCBhcHByb3ZhbHNcclxuICBzZW50QXBwcm92YWxzVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgLi4udGhpcy5yZWNlaXZlZEFwcHJvdmFsc1RhYmxlQ29uZmlnLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB0aGlzLnZpZXdBcHByb3ZhbEJ1dHRvbixcclxuICAgICAgdGhpcy5jYW5jZWxCdXR0b24sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdhcHByb3ZhbHMvc2VudC94JyB9XHJcbiAgfTtcclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tT3RoZXIgY29kZVxyXG5cclxuICBwcml2YXRlIGxpc3RDYWNoZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gIHByaXZhdGUgY2FjaGVUaW1lc3RhbXBzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbiAgcHJpdmF0ZSBvbmdvaW5nUmVxdWVzdHM6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxBcGlSZXNwb25zZT4gfSA9IHt9O1xyXG5cclxuICBwdWJsaWMgQ2FsbEFwaShhY3Rpb246IEFjdGlvbiwgZGF0YTogYW55ID0gJycgKSB7XHJcblxyXG5cclxuICAgIGlmICghYWN0aW9uPy51cmwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGFjdGlvbiBvciBtaXNzaW5nIFVSTCcpO1xyXG4gICAgICByZXR1cm4gb2YoeyBzdWNjZXNzOiBmYWxzZSwgbWVzc2FnZTogJ0ludmFsaWQgYWN0aW9uIGNvbmZpZ3VyYXRpb24nIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwiY2FsbGluZ1wiLCBhY3Rpb24pO1xyXG5cclxuXHJcbiAgICBpZiAoIWFjdGlvbi5tZXRob2QgfHwgYWN0aW9uLm1ldGhvZCA9PT0gJ2dldCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ2FjaGVkQ2FsbChhY3Rpb24pO1xyXG4gICAgfSBlbHNlIGlmIChhY3Rpb24ubWV0aG9kID09PSAncG9zdCcpIHtcclxuICAgICAgaWYgKGFjdGlvbi5pc0Zvcm1EYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdF9Gb3JtRGF0YShhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udXJsID09PSAnYXBwcm92ZScgfHwgYWN0aW9uLnVybCA9PT0gJ2RlY2xpbmUnIHx8IGFjdGlvbi51cmwgPT09ICdjYW5jZWwnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgJHtkYXRhLmVuZHBvaW50fS9hcHByb3ZlP2FjdGlvbj0ke2FjdGlvbi51cmx9YCwgZGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNhY2hlZENhbGwoYWN0aW9uOiBBY3Rpb24pOiBPYnNlcnZhYmxlPEFwaVJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShhY3Rpb24udXJsKTtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHVzZSBjYWNoZVxyXG4gICAgaWYgKCFhY3Rpb24uc2tpcENhY2hlICYmIHRoaXMuaXNDYWNoZVZhbGlkKGNhY2hlS2V5LCBhY3Rpb24pKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdVc2luZyBjYWNoZTonLCBjYWNoZUtleSk7XHJcbiAgICAgIHJldHVybiBvZih7XHJcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICBtZXNzYWdlOiAnc3VjY2VzcycsXHJcbiAgICAgICAgZGF0YTogdGhpcy5saXN0Q2FjaGVbY2FjaGVLZXldXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHRoZXJlJ3MgYW4gb25nb2luZyByZXF1ZXN0IGZvciB0aGUgc2FtZSBVUkxcclxuICAgIGlmICh0aGlzLm9uZ29pbmdSZXF1ZXN0c1tjYWNoZUtleV0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ1VzaW5nIG9uZ29pbmcgcmVxdWVzdCBmb3I6JywgY2FjaGVLZXkpO1xyXG4gICAgICByZXR1cm4gdGhpcy5vbmdvaW5nUmVxdWVzdHNbY2FjaGVLZXldO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERldGVybWluZSBjYWNoZSBkdXJhdGlvblxyXG4gICAgY29uc3QgY2FjaGVEdXJhdGlvbiA9IHRoaXMuZ2V0Q2FjaGVEdXJhdGlvbihhY3Rpb24pO1xyXG4gICAgXHJcbiAgICAvLyBPbmx5IGNhY2hlIGlmIGR1cmF0aW9uIGlzIHNwZWNpZmllZCBvciBpdCdzIGEgbGlzdCBlbmRwb2ludFxyXG4gICAgaWYgKGNhY2hlRHVyYXRpb24gPiAwKSB7XHJcbiAgICAgIC8vIENyZWF0ZSBhbmQgc3RvcmUgdGhlIG9uZ29pbmcgcmVxdWVzdFxyXG4gICAgICB0aGlzLm9uZ29pbmdSZXF1ZXN0c1tjYWNoZUtleV0gPSB0aGlzLmh0dHBTZXJ2aWNlLkdldChhY3Rpb24udXJsKS5waXBlKFxyXG4gICAgICAgIHRpbWVvdXQoNjAwMDApLCAvLyAxIG1pbnV0ZSB0aW1lb3V0IGZvciB3YWl0aW5nIHJlcXVlc3RzXHJcbiAgICAgICAgdGFwKChyZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlPy5kYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdENhY2hlW2NhY2hlS2V5XSA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVUaW1lc3RhbXBzW2NhY2hlS2V5XSA9IGN1cnJlbnRUaW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLm9uZ29pbmdSZXF1ZXN0c1tjYWNoZUtleV07XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc2hhcmUoKSBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLm9uZ29pbmdSZXF1ZXN0c1tjYWNoZUtleV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBObyBjYWNoaW5nLCBqdXN0IG1ha2UgdGhlIHJlcXVlc3RcclxuICAgICAgY29uc29sZS5sb2coJ05vIGNhY2hpbmcgZm9yOicsIGNhY2hlS2V5KTtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuR2V0KGFjdGlvbi51cmwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KHVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB1cmw7IC8vIFVSTCBhbHJlYWR5IGluY2x1ZGVzIHF1ZXJ5IHBhcmFtc1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0NhY2hlVmFsaWQoY2FjaGVLZXk6IHN0cmluZywgYWN0aW9uOiBBY3Rpb24pOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5saXN0Q2FjaGVbY2FjaGVLZXldIHx8ICF0aGlzLmNhY2hlVGltZXN0YW1wc1tjYWNoZUtleV0pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNhY2hlRHVyYXRpb24gPSB0aGlzLmdldENhY2hlRHVyYXRpb24oYWN0aW9uKTtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgIGNvbnN0IGNhY2hlQWdlID0gY3VycmVudFRpbWUgLSB0aGlzLmNhY2hlVGltZXN0YW1wc1tjYWNoZUtleV07XHJcbiAgICBcclxuICAgIHJldHVybiBjYWNoZUFnZSA8IChjYWNoZUR1cmF0aW9uICogNjAgKiAxMDAwKTsgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENhY2hlRHVyYXRpb24oYWN0aW9uOiBBY3Rpb24pOiBudW1iZXIge1xyXG4gICAgLy8gSWYgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gYWN0aW9uLCB1c2UgdGhhdFxyXG4gICAgaWYgKGFjdGlvbi5jYWNoZUR1cmF0aW9uTWludXRlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBhY3Rpb24uY2FjaGVEdXJhdGlvbk1pbnV0ZXM7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIERlZmF1bHQgdG8gMSBtaW51dGUgZm9yIGxpc3QgZW5kcG9pbnRzXHJcbiAgICBpZiAoYWN0aW9uLnVybC5pbmNsdWRlcygnL2xpc3QvJykpIHtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIE5vIGNhY2hpbmcgYnkgZGVmYXVsdFxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ2xlYXJDYWNoZSgpOiB2b2lkIHtcclxuICAgIHRoaXMubGlzdENhY2hlID0ge307XHJcbiAgICB0aGlzLmNhY2hlVGltZXN0YW1wcyA9IHt9O1xyXG5cclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLm9uZ29pbmdSZXF1ZXN0cykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBkZWxldGUgdGhpcy5vbmdvaW5nUmVxdWVzdHNba2V5XTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGludmFsaWRhdGVMaXN0Q2FjaGUoZW50aXR5VXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMubGlzdENhY2hlKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoZW50aXR5VXJsKSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RDYWNoZVtrZXldO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlVGltZXN0YW1wc1trZXldO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLm9uZ29pbmdSZXF1ZXN0c1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgQ2hlY2tXZWxjb21lZChwYXRoOiBzdHJpbmcgPSAnaG9tZS9hZG1pbi93ZWxjb21lJykge1xyXG4gICAgdGhpcy5DYWxsQXBpKHsgdXJsOiAndGVuYW50L3dlbGNvbWUveCcgfSkuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgIGlmICgheC5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5OYXZpZ2F0ZShwYXRoKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBwdWJsaWMgTmF2aWdhdGUocGF0aDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIE5hdmlnYXRlV2l0aFZhbHVlKHBhdGg6IHN0cmluZywgdmFsdWUgOiBzdHJpbmcpe1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHY6IHZhbHVlIH0sXHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldE5hdmlnYXRpb25WYWx1ZSgpe1xyXG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJ2XCJdICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1tcInZcIl1cclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0bXBBY2NvdW50SUQ7XHJcblxyXG5cclxuXHJcbiAgLy9Vc2Vyc1xyXG4gIHB1YmxpYyBHZXRVc2VyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuR2V0KFwiVXNlci9hbGwveFwiKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBSZWdpc3RlckFjY291bnQodSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvcmVnaXN0ZXJcIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgR2V0VXNlckJ5SUQodmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChgVXNlci9pZC8ke3ZhbH1gKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBVcGRhdGVVc2VyKHByb2ZpbGUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2VkaXRcIiwgcHJvZmlsZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVW5sb2NrVXNlcih1c2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci91bmxvY2tcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9ja1VzZXIodXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvbG9ja1wiLCB1c2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBEZWxldGVVc2VyKHVzZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2RlbGV0ZVwiLCB1c2VyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2dpbih1OiBVc2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9sb2dpblwiLCB1KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDaGFuZ2VQYXNzd29yZCh1KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9jaGFuZ2VwYXNzd29yZC1zZWxmXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIENoYW5nZVBhc3N3b3JkQWRtaW4odSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvY2hhbmdlcGFzc3dvcmQtYWRtaW5cIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgU2VsZlJlc2V0KHU6IFVzZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIkJhc2ljL1NlbGZSZXNldFwiLCB1KTtcclxuICB9XHJcblxyXG5cclxuICAvL1JvbGVzXHJcblxyXG4gIHB1YmxpYyBQb3N0Um9sZShyb2xlLCBhY3Rpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgUm9sZT9hY3Rpb249JHthY3Rpb259YCwgcm9sZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUHV0Um9sZShyb2xlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5QdXQoXCJSb2xlXCIsIHJvbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFJvbGUoYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlJvbGUvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vTG9nc1xyXG4gIHB1YmxpYyBHZXRMb2coYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIkxvZy9hbGwveFwiKTtcclxuICB9XHJcblxyXG5cclxuICAvL1NldHRpbmdzXHJcbiAgcHVibGljIEdldFNldHRpbmcoYnk6IHN0cmluZywgdmFsOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlNldHRpbmcvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVXBkYXRlU2V0dGluZyhzZXR0aW5nLCBhY3Rpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChgU2V0dGluZz9hY3Rpb249JHthY3Rpb259YCwgc2V0dGluZyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
386
+ }], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
387
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWxpYi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL3NlcnZpY2VzL2RhdGFsaWIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBdUIsU0FBUyxFQUFVLE9BQU8sRUFBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7O0FBUW5ELE1BQU0sT0FBTyxjQUFjO0lBRXpCLFlBQW9CLFdBQXdCLEVBQVMsTUFBYyxFQUFVLEtBQXFCO1FBQTlFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBa0hsRyxjQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNwQixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxvQkFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFNN0QsWUFBTyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3RCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN2QixhQUFRLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDdkIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3ZCLFlBQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN0QixnQkFBVyxHQUFHLElBQUksT0FBTyxDQUFDO1FBRTFCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDN0IsZUFBVSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDNUIsYUFBUSxHQUFHLElBQUksT0FBTyxDQUFDO1FBRXZCLGVBQVUsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUN6QixpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDM0IsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUMxQixpQkFBWSxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzNCLGFBQVEsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUV2QixVQUFLLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDcEIsaUJBQVksR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUMzQixtQkFBYyxHQUFHLElBQUksT0FBTyxDQUFDO1FBQzdCLGlCQUFZLEdBQUcsSUFBSSxPQUFPLENBQUM7UUFDM0IsY0FBUyxHQUFHLElBQUksT0FBTyxDQUFDO1FBRWpCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUcvQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQWNyQixZQUFPLEdBQUc7WUFDUixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMxQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUM3QixDQUFBO1FBRUQsdUJBQWtCLEdBQWU7WUFDL0IsTUFBTSxFQUFFO2dCQUNOLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDMUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUMxRixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNuRCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNsRCxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQzdFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2xGLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUU7Z0JBQzlILEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsR0FBRztnQkFDdEosRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUU7Z0JBQ2xJLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUU7Z0JBQzFILEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTtnQkFDdEQsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQy9CLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUMvQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDcEQ7U0FDRixDQUFBO1FBRUQsd0JBQW1CLEdBQWdCO1lBQ2pDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUM7WUFDdEQsV0FBVyxFQUFFLElBQUk7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUM5QixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUNyRCxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBQzdELEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ3pELEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO2dCQUMxRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7YUFDbkU7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUN2SCxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDOUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLCtCQUErQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDaEcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTthQUNyRztZQUNELFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxxQkFBcUIsRUFBRTtZQUMxQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUNwQyxDQUFBO1FBV0QsdUJBQWtCLEdBQWU7WUFDL0IsTUFBTSxFQUFFO2dCQUNOLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQzlDLGtJQUFrSTtnQkFDbEksRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTthQUVsRDtZQUNELFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUU7U0FDcEMsQ0FBQTtRQUVELHVCQUFrQixHQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxxQkFBcUIsRUFBRSxFQUFFLENBQUE7UUFFNUosd0JBQW1CLEdBQWdCO1lBQ2pDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUM7WUFDaEQsV0FBVyxFQUFFLElBQUk7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQ25ELEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUM5QixpRUFBaUU7YUFDbEU7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMvRztvQkFDRSxJQUFJLEVBQUUsTUFBTTtvQkFDWixNQUFNLEVBQUUsSUFBSTtvQkFDWixhQUFhLEVBQUU7d0JBQ2IsVUFBVSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsRUFBRTt3QkFDeEgsU0FBUyxFQUFFLFlBQVk7d0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDbEMsWUFBWSxFQUFFOzRCQUNaO2dDQUNFLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtnQ0FDM0IsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLHVCQUF1QixFQUFFO2dDQUM1QyxZQUFZLEVBQUUsV0FBVztnQ0FDekIsV0FBVyxFQUFFLFlBQVk7Z0NBQ3pCLEtBQUssRUFBRSxXQUFXO2dDQUNsQixTQUFTLEVBQUUsTUFBTTs2QkFDbEI7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLGtCQUFrQjtnQkFDdkIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTthQUM3RjtZQUNELFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRTtZQUN0QyxVQUFVLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUNwQyxDQUFBO1FBR0QsZ0VBQWdFO1FBQ2hFLHlCQUFvQixHQUFlO1lBQ2pDLE1BQU0sRUFBRTtnQkFDTixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2FBQy9DO1lBQ0QsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO1NBQ3RDLENBQUE7UUFFRCx5QkFBb0IsR0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxDQUFBO1FBRWhLLDBCQUFxQixHQUFnQjtZQUNuQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDcEIsV0FBVyxFQUFFLElBQUk7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7Z0JBQ3JELEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2FBQy9CO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDakg7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osTUFBTSxFQUFFLElBQUk7b0JBQ1osYUFBYSxFQUFFO3dCQUNiLFVBQVUsRUFBRSxJQUFJLENBQUMsb0JBQW9CO3dCQUNyQyxTQUFTLEVBQUUsY0FBYzt3QkFDekIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO3dCQUNwQyxZQUFZLEVBQUU7NEJBQ1o7Z0NBQ0UsR0FBRyxJQUFJLENBQUMsbUJBQW1CO2dDQUMzQixVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUseUJBQXlCLEVBQUU7Z0NBQzlDLFlBQVksRUFBRSxXQUFXO2dDQUN6QixXQUFXLEVBQUUsY0FBYztnQ0FDM0IsS0FBSyxFQUFFLFdBQVc7Z0NBQ2xCLFNBQVMsRUFBRSxNQUFNOzZCQUNsQjs0QkFDRDtnQ0FDRSxHQUFHLElBQUksQ0FBQyxtQkFBbUI7Z0NBQzNCLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRTtnQ0FDOUMsWUFBWSxFQUFFLFdBQVc7Z0NBQ3pCLFdBQVcsRUFBRSxjQUFjO2dDQUMzQixLQUFLLEVBQUUsV0FBVztnQ0FDbEIsU0FBUyxFQUFFLE1BQU07NkJBRWxCO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3pCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUU7YUFDL0Y7WUFDRCxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsbUJBQW1CLEVBQUU7WUFDeEMsVUFBVSxFQUFFLElBQUksQ0FBQyxvQkFBb0I7U0FDdEMsQ0FBQTtRQWhVQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUE7UUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUc3RSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRSxNQUFNLENBQUM7UUFHMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUE7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFFN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFFNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7UUFFbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRSxVQUFVLENBQUM7UUFHbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUE7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBRSxDQUFDO1FBRXhGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtRQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7UUFFNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQztRQUVsRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUE7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBR3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6SCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUE7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUVoQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUE7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQTtRQUVyQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUE7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFBO1FBRWhELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsc0JBQXNCLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFBO1FBRWpDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFBO1FBRy9CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQTtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQTtRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLGNBQWMsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7UUFFbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQztRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxzQkFBc0IsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUE7UUFFaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFBO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyx3QkFBd0IsQ0FBQztRQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQTtRQUU1QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUE7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLDJCQUEyQixDQUFBO0lBSXRELENBQUM7SUFNRCxlQUFlLENBQUMsTUFBaUI7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQWtDRCw4REFBOEQ7SUFDOUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtZQUMxRixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxZQUFZLENBQUMsQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDNUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDckgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMvRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFpREQsOERBQThEO0lBRTlELGdCQUFnQjtRQUNkLDBGQUEwRjtRQUMxRiwrR0FBK0c7UUFDL0csTUFBTTtJQUNSLENBQUM7SUErR0QsdUNBQXVDO0lBRWhDLE9BQU8sQ0FBQyxNQUFjLEVBQUUsT0FBWSxFQUFFO1FBRTNDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsSUFBRyxNQUFNLENBQUMsTUFBTSxJQUFHLEtBQUssRUFBQztZQUN2QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QzthQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUM7WUFFakMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDekQ7aUJBQUk7Z0JBQ0gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2hEO1NBRUY7YUFDRztZQUNGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNoRDtJQUVILENBQUM7SUFFTSxhQUFhLENBQUMsT0FBZSxvQkFBb0I7UUFDdEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUNwQjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUlNLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0saUJBQWlCLENBQUMsSUFBWSxFQUFFLEtBQWM7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO1lBQ3pCLG1CQUFtQixFQUFFLE9BQU87WUFDNUIsa0JBQWtCLEVBQUUsS0FBSztTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsRUFBRTtZQUNyRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUM1QzthQUFJO1lBQ0gsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFNRCxPQUFPO0lBQ0EsT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLGVBQWUsQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxXQUFXLENBQUMsR0FBVztRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQU87UUFDdkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFJO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxRQUFRLENBQUMsSUFBSTtRQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sVUFBVSxDQUFDLElBQUk7UUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxDQUFPO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxjQUFjLENBQUMsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVNLFNBQVMsQ0FBQyxDQUFPO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUdELE9BQU87SUFFQSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQWM7UUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxPQUFPLENBQUMsSUFBSTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sT0FBTyxDQUFDLEVBQVUsRUFBRSxHQUFXO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUlELE1BQU07SUFDQyxNQUFNLENBQUMsRUFBVSxFQUFFLEdBQVc7UUFDbkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsVUFBVTtJQUNILFVBQVUsQ0FBQyxFQUFVLEVBQUUsR0FBVztRQUN2QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQWM7UUFDMUMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsTUFBTSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7MkdBaGRVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3Rpb24sIEFwaVJlc3BvbnNlLCBBcHBDb25maWcsIEJ1dHRvbiwgQ2FwSXRlbSwgRm9ybUNvbmZpZywgVGFibGVDb25maWcgfSBmcm9tICcuLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vY2xhc3Nlcy9MaWJDbGFzc2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlTGliIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwU2VydmljZTogSHR0cFNlcnZpY2UsIHB1YmxpYyByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcclxuXHJcbiAgICB0aGlzLmFwcENvbmZpZy5hcHBOYW1lID0gXCJBcHAtTmFtZVwiO1xyXG4gICAgdGhpcy5hcHBDb25maWcubG9nbyA9IFwiLi9hc3NldHMvbG9nby5wbmdcIlxyXG4gICAgdGhpcy5hcHBDb25maWcuQURBdXRoID0gdHJ1ZTtcclxuICAgIHRoaXMuYXBwQ29uZmlnLmNhcEl0ZW1zID0gW3RoaXMuY2FwTXVsdGl0ZW5hbnQsIHRoaXMuY2FwQWRtaW4sIHRoaXMuY2FwSG9tZV07XHJcblxyXG5cclxuICAgIHRoaXMuY2FwSG9tZS5uYW1lID0gXCJjYXAxXCI7XHJcbiAgICB0aGlzLmNhcEhvbWUuZGlzcGxheSA9IFwiSG9tZVwiO1xyXG4gICAgdGhpcy5jYXBIb21lLmxpbmsgPSBcImhvbWVcIjtcclxuICAgIHRoaXMuY2FwSG9tZS5pY29uID1cImhvbWVcIjtcclxuXHJcblxyXG4gICAgdGhpcy5jYXBBZG1pbi5uYW1lID0gXCJjYXAyXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmRpc3BsYXkgPSBcIkFkbWluXCI7XHJcbiAgICB0aGlzLmNhcEFkbWluLmljb24gPSBcInNlY3VyaXR5XCJcclxuICAgIHRoaXMuY2FwQWRtaW4uY2FwU3ViSXRlbXMgPSBbdGhpcy5jYXBVc2VycywgdGhpcy5jYXBSb2xlcywgdGhpcy5jYXBMb2dzLCB0aGlzLmNhcFNldHRpbmdzXTtcclxuXHJcbiAgICB0aGlzLmNhcFVzZXJzLm5hbWUgPSBcImNhcDNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMuZGlzcGxheSA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMuY2FwVXNlcnMubGluayA9IFwiaG9tZS9hZG1pbi91c2Vyc1wiO1xyXG4gICAgdGhpcy5jYXBVc2Vycy5pY29uID0gXCJncm91cFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUm9sZXMubmFtZSA9IFwiY2FwNFwiXHJcbiAgICB0aGlzLmNhcFJvbGVzLmRpc3BsYXkgPSBcIlJvbGVzXCI7XHJcbiAgICB0aGlzLmNhcFJvbGVzLmxpbmsgPSBcImhvbWUvYWRtaW4vcm9sZXNcIjtcclxuICAgIHRoaXMuY2FwUm9sZXMuaWNvbiA9IFwid29ya1wiO1xyXG5cclxuICAgIHRoaXMuY2FwTG9ncy5uYW1lID0gXCJjYXA1XCJcclxuICAgIHRoaXMuY2FwTG9ncy5kaXNwbGF5ID0gXCJMb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MubGluayA9IFwiaG9tZS9hZG1pbi9sb2dzXCI7XHJcbiAgICB0aGlzLmNhcExvZ3MuaWNvbiA9IFwidGV4dF9zbmlwcGV0XCI7XHJcblxyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5uYW1lID0gXCJjYXA2XCJcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MuZGlzcGxheSA9IFwiU2V0dGluZ3NcIjtcclxuICAgIHRoaXMuY2FwU2V0dGluZ3MubGluayA9IFwiaG9tZS9hZG1pbi9zZXR0aW5nc1wiO1xyXG4gICAgdGhpcy5jYXBTZXR0aW5ncy5pY29uID1cInNldHRpbmdzXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwTXVsdGl0ZW5hbnQubmFtZSA9IFwiY2FwN1wiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmRpc3BsYXkgPSBcIk11bHRpdGVuYW50XCI7XHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50Lmljb24gPSBcImFwYXJ0bWVudFwiXHJcbiAgICB0aGlzLmNhcE11bHRpdGVuYW50LmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwVGVuYW50cywgdGhpcy5jYXBNZW1iZXJzaGlwLCB0aGlzLmNhcFBsYW5zIF07XHJcblxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLm5hbWUgPSBcImNhcDhcIlxyXG4gICAgdGhpcy5jYXBUZW5hbnRzLmRpc3BsYXkgPSBcIlRlbmFudHNcIjtcclxuICAgIHRoaXMuY2FwVGVuYW50cy5saW5rID0gXCJob21lL2FkbWluL3RlbmFudHNcIjtcclxuXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAubmFtZSA9IFwiY2FwOVwiXHJcbiAgICB0aGlzLmNhcE1lbWJlcnNoaXAuZGlzcGxheSA9IFwiTWVtYmVyc2hpcFwiO1xyXG4gICAgdGhpcy5jYXBNZW1iZXJzaGlwLmxpbmsgPSBcImhvbWUvYWRtaW4vbWVtYmVyc2hpcFwiO1xyXG5cclxuICAgIHRoaXMuY2FwUGxhbnMubmFtZSA9IFwiY2FwMTBcIlxyXG4gICAgdGhpcy5jYXBQbGFucy5kaXNwbGF5ID0gXCJQbGFuc1wiO1xyXG4gICAgdGhpcy5jYXBQbGFucy5saW5rID0gXCJob21lL2FkbWluL3BsYW5zXCI7XHJcblxyXG5cclxuICAgIHRoaXMuY2FwR2VuZXJhbC5uYW1lID0gXCJjYXAxMVwiXHJcbiAgICB0aGlzLmNhcEdlbmVyYWwuZGlzcGxheSA9IFwiR2VuZXJhbFwiO1xyXG4gICAgdGhpcy5jYXBHZW5lcmFsLmNhcFN1Ykl0ZW1zID0gW3RoaXMuY2FwQ3VzdG9tZXJzLCB0aGlzLmNhcEludmVudG9yeSwgdGhpcy5jYXBBY2NvdW50cywgdGhpcy5jYXBTdXBwbGllcnMsIHRoaXMuY2FwVGFza3NdO1xyXG5cclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLm5hbWUgPSBcImNhcDEyXCJcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmRpc3BsYXkgPSBcIkN1c3RvbWVyc1wiO1xyXG4gICAgdGhpcy5jYXBDdXN0b21lcnMubGluayA9IFwiaG9tZS9hZG1pbi9jdXN0b21lcnNcIjtcclxuICAgIHRoaXMuY2FwQ3VzdG9tZXJzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5uYW1lID0gXCJjYXAxM1wiXHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5kaXNwbGF5ID0gXCJJbnZlbnRvcnlcIjtcclxuICAgIHRoaXMuY2FwSW52ZW50b3J5LmxpbmsgPSBcImhvbWUvYWRtaW4vaW52ZW50b3J5XCI7XHJcbiAgICB0aGlzLmNhcEludmVudG9yeS5pY29uID0gXCJzdG9yZWZyb250XCJcclxuXHJcbiAgICB0aGlzLmNhcEFjY291bnRzLm5hbWUgPSBcImNhcDE0XCJcclxuICAgIHRoaXMuY2FwQWNjb3VudHMuZGlzcGxheSA9IFwiQWNjb3VudHNcIjtcclxuICAgIHRoaXMuY2FwQWNjb3VudHMubGluayA9IFwiaG9tZS9hZG1pbi9hY2NvdW50c1wiO1xyXG4gICAgdGhpcy5jYXBBY2NvdW50cy5pY29uID0gXCJhY2NvdW50X2JhbGFuY2Vfd2FsbGV0XCJcclxuXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5uYW1lID0gXCJjYXAxNVwiXHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5kaXNwbGF5ID0gXCJTdXBwbGllcnNcIjtcclxuICAgIHRoaXMuY2FwU3VwcGxpZXJzLmxpbmsgPSBcImhvbWUvYWRtaW4vc3VwcGxpZXJzXCI7XHJcbiAgICB0aGlzLmNhcFN1cHBsaWVycy5pY29uID0gXCJncm91cHNcIlxyXG5cclxuICAgIHRoaXMuY2FwVGFza3MubmFtZSA9IFwiY2FwMTZcIlxyXG4gICAgdGhpcy5jYXBUYXNrcy5kaXNwbGF5ID0gXCJUYXNrc1wiO1xyXG4gICAgdGhpcy5jYXBUYXNrcy5saW5rID0gXCJob21lL2FkbWluL3Rhc2tzXCI7XHJcbiAgICB0aGlzLmNhcFRhc2tzLmljb24gPSBcInRhc2tfYWx0XCJcclxuXHJcblxyXG4gICAgdGhpcy5jYXBIUi5uYW1lID0gXCJjYXAxN1wiXHJcbiAgICB0aGlzLmNhcEhSLmRpc3BsYXkgPSBcIkhSXCI7XHJcbiAgICB0aGlzLmNhcEhSLmxpbmsgPSBcImhvbWUvYWRtaW4vaHJcIjtcclxuICAgIHRoaXMuY2FwSFIuaWNvbiA9IFwiZGl2ZXJzaXR5XzNcIlxyXG4gICAgdGhpcy5jYXBIUi5jYXBTdWJJdGVtcyA9IFt0aGlzLmNhcEVtcGxveWVlcyx0aGlzLmNhcERlcGFydG1lbnRzLHRoaXMuY2FwUG9zaXRpb25zXVxyXG5cclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmRpc3BsYXkgPSBcIkVtcGxveWVlc1wiO1xyXG4gICAgdGhpcy5jYXBFbXBsb3llZXMubGluayA9IFwiaG9tZS9hZG1pbi9lbXBsb3llZXNcIjtcclxuICAgIHRoaXMuY2FwRW1wbG95ZWVzLmljb24gPSBcImdyb3VwXCJcclxuXHJcbiAgICB0aGlzLmNhcERlcGFydG1lbnRzLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMuZGlzcGxheSA9IFwiRGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuY2FwRGVwYXJ0bWVudHMubGluayA9IFwiaG9tZS9hZG1pbi9kZXBhcnRtZW50c1wiO1xyXG4gICAgdGhpcy5jYXBEZXBhcnRtZW50cy5pY29uID0gXCJidXNpbmVzc19jZW50ZXJcIlxyXG5cclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLm5hbWUgPSBcImNhcDE3XCJcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmRpc3BsYXkgPSBcIlBvc2l0aW9uc1wiO1xyXG4gICAgdGhpcy5jYXBQb3NpdGlvbnMubGluayA9IFwiaG9tZS9hZG1pbi9wb3NpdGlvbnNcIjtcclxuICAgIHRoaXMuY2FwUG9zaXRpb25zLmljb24gPSBcInBpY3R1cmVfaW5fcGljdHVyZV9tZWRpdW1cIlxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGFwcENvbmZpZyA9IG5ldyBBcHBDb25maWcoKTtcclxuICBwcml2YXRlIGFwcENvbmZpZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5hcHBDb25maWcpO1xyXG4gIHB1YmxpYyBhcHBDb25maWdPYnNlcnYgPSB0aGlzLmFwcENvbmZpZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICBVcGRhdGVBcHBDb25maWcoY29uZmlnOiBBcHBDb25maWcpIHtcclxuICAgIHRoaXMuYXBwQ29uZmlnU291cmNlLm5leHQoY29uZmlnKTtcclxuICAgIHRoaXMuYXBwQ29uZmlnID0gY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgY2FwSG9tZSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFkbWluID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVXNlcnMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBSb2xlcyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcExvZ3MgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBTZXR0aW5ncyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBjYXBNdWx0aXRlbmFudCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFRlbmFudHMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBNZW1iZXJzaGlwID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwUGxhbnMgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwR2VuZXJhbCA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEN1c3RvbWVycyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEludmVudG9yeSA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEFjY291bnRzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwU3VwcGxpZXJzID0gbmV3IENhcEl0ZW07XHJcbiAgY2FwVGFza3MgPSBuZXcgQ2FwSXRlbTtcclxuXHJcbiAgY2FwSFIgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBFbXBsb3llZXMgPSBuZXcgQ2FwSXRlbTtcclxuICBjYXBEZXBhcnRtZW50cyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcFBvc2l0aW9ucyA9IG5ldyBDYXBJdGVtO1xyXG4gIGNhcEdyYWRlcyA9IG5ldyBDYXBJdGVtO1xyXG5cclxuICBwdWJsaWMgdG1wUHJvZmlsZXVzZXJOYW1lID0gXCJcIjtcclxuXHJcblxyXG4gIGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG5cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1FbXBsb3llZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgbG9hZEVtcGxveWVlc01ldGEoKSB7XHJcbiAgICB0aGlzLkNhbGxBcGkoeyB1cmw6ICdnZW5lcmFsL2VtcGxveWVlc21ldGEveCcgfSwgXCJcIikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5lbXBsb3llZUZvcm1Db25maWcuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2RlcGFydG1lbnRJRCcpLm9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmVtcGxveWVlRm9ybUNvbmZpZy5maWVsZHMuZmluZCh4ID0+IHgubmFtZSA9PSAncG9zaXRpb25JRCcpLm1hc3Rlck9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhLnBvc2l0aW9ucztcclxuICAgICAgdGhpcy5lbXBsb3llZUZvcm1Db25maWcuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2VtcGxveW1lbnRTdGF0dXMnKS5vcHRpb25zID0gYXBpUmVzcG9uc2UuZGF0YS5lbXBsb3ltZW50U3RhdHVzZXM7XHJcbiAgICAgIHRoaXMuZW1wbG95ZWVGb3JtQ29uZmlnLmZpZWxkcy5maW5kKHggPT4geC5uYW1lID09ICdhY3RpdmVTdGF0dXMnKS5vcHRpb25zID0gYXBpUmVzcG9uc2UuZGF0YS5hY3RpdmVTdGF0dXNlcztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2VuZGVycyA9IFtcclxuICAgIHsgbmFtZTogJ01hbGUnLCB2YWx1ZTogMSB9LFxyXG4gICAgeyBuYW1lOiAnRmVtYWxlJywgdmFsdWU6IDIgfVxyXG4gIF1cclxuXHJcbiAgZW1wbG95ZWVGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xyXG4gICAgZmllbGRzOiBbXHJcbiAgICAgIHsgbmFtZTogJ25hdGlvbmFsSUQnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnTmF0aW9uYWwgSUQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdnZW5kZXInLCBhbGlhczogJ0dlbmRlcicsIHR5cGU6ICdzZWxlY3QnLCBvcHRpb25zOiB0aGlzLmdlbmRlcnMsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2ZpcnN0TmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAnbGFzdE5hbWUnLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlIH0sXHJcbiAgICAgIHsgbmFtZTogJ2RhdGVPZkJpcnRoJywgdHlwZTogJ2RhdGUnLCBhbGlhczogJ0RhdGUgb2YgQmlydGgnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdlbXBsb3ltZW50RGF0ZScsIHR5cGU6ICdkYXRlJywgYWxpYXM6ICdFbXBsb3ltZW50IERhdGUnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXBhcnRtZW50SUQnLCBhbGlhczogJ0RlcGFydG1lbnQnLCB0eXBlOiAnc2VsZWN0Jywgb3B0aW9uczogW10sIG9wdGlvbkRpc3BsYXk6ICduYW1lJywgb3B0aW9uVmFsdWU6ICdkZXBhcnRtZW50SUQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ3Bvc2l0aW9uSUQnLCBhbGlhczogJ1Bvc2l0aW9uJywgdHlwZTogJ3NlbGVjdCcsIG9wdGlvbnM6IFtdLCBvcHRpb25EaXNwbGF5OiAnbmFtZScsIG9wdGlvblZhbHVlOiAncG9zaXRpb25JRCcsIG1hc3RlckZpZWxkOiAnZGVwYXJ0bWVudElEJywgfSxcclxuICAgICAgeyBuYW1lOiAnZW1wbG95bWVudFN0YXR1cycsIGFsaWFzOiAnRW1wbG95bWVudCBTdGF0dXMnLCB0eXBlOiAnc2VsZWN0Jywgb3B0aW9uczogW10sIG9wdGlvbkRpc3BsYXk6ICduYW1lJywgb3B0aW9uVmFsdWU6ICd2YWx1ZScgfSxcclxuICAgICAgeyBuYW1lOiAnYWN0aXZlU3RhdHVzJywgYWxpYXM6ICdBY3RpdmUgU3RhdHVzJywgdHlwZTogJ3NlbGVjdCcsIG9wdGlvbnM6IFtdLCBvcHRpb25EaXNwbGF5OiAnbmFtZScsIG9wdGlvblZhbHVlOiAndmFsdWUnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2FkZHJlc3MnLCB0eXBlOiAndGV4dCcsIHJvd3M6IDIsIHNwYW46IHRydWUgfSxcclxuICAgICAgeyBuYW1lOiAncGhvbmUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgICAgeyBuYW1lOiAnbm90ZScsIHR5cGU6ICd0ZXh0Jywgcm93czogMiwgc3BhbjogdHJ1ZSB9LFxyXG4gICAgXSxcclxuICB9XHJcblxyXG4gIGVtcGxveWVlVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xyXG4gICAgc2hvd0ZpbHRlcjogdHJ1ZSxcclxuICAgIG1pbkNvbHVtbnM6IFsnbmFtZScsICdkZXBhcnRtZW50TmFtZScsICdwb3NpdGlvbk5hbWUnXSxcclxuICAgIGZsYXRCdXR0b25zOiB0cnVlLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ2dlbmRlck5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnR2VuZGVyJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXBhcnRtZW50TmFtZScsIHR5cGU6ICd0ZXh0JywgYWxpYXM6ICdEZXBhcnRtZW50JyB9LFxyXG4gICAgICB7IG5hbWU6ICdwb3NpdGlvbk5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnUG9zaXRpb24nIH0sXHJcbiAgICAgIHsgbmFtZTogJ2VtcGxveW1lbnRTdGF0dXNOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0VtcGxveW1lbnQgU3RhdHVzJyB9LFxyXG4gICAgICB7IG5hbWU6ICdhY3RpdmVTdGF0dXNOYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0FjdGl2ZSBTdGF0dXMnIH0sXHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICdjcmVhdGUnLCBkaXNwbGF5OiAnQ3JlYXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZ2VuZXJhbC9lbXBsb3llZXM/YWN0aW9uPWNyZWF0ZScsIG1ldGhvZDogJ3Bvc3QnIH0gfSxcclxuICAgICAgeyBuYW1lOiAndmlldycsIGRpYWxvZzogdHJ1ZSB9LFxyXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAnZ2VuZXJhbC9lbXBsb3llZXM/YWN0aW9uPWVkaXQnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2dlbmVyYWwvZW1wbG95ZWVzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdnZW5lcmFsL2VtcGxveWVlcy94JyB9LFxyXG4gICAgZm9ybUNvbmZpZzogdGhpcy5lbXBsb3llZUZvcm1Db25maWdcclxuICB9XHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUG9zaXRpb25zLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBsb2FkUG9zaXRpb25NZXRhKCkge1xyXG4gICAgLy8gdGhpcy5DYWxsQXBpKHsgdXJsOiAncG9zaXRpb25zL21ldGEveCcgfSwgXCJcIikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcclxuICAgIC8vICAgdGhpcy5wb3NpdGlvbkZvcm1Db25maWcuZmllbGRzLmZpbmQoeCA9PiB4Lm5hbWUgPT0gJ2RlcGFydG1lbnRJRCcpLm9wdGlvbnMgPSBhcGlSZXNwb25zZS5kYXRhLmRlcGFydG1lbnRzO1xyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBwb3NpdGlvbkZvcm1Db25maWc6IEZvcm1Db25maWcgPSB7XHJcbiAgICBmaWVsZHM6IFtcclxuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSxcclxuICAgICAgLy8geyBuYW1lOiAnZGVwYXJ0bWVudElEJywgYWxpYXM6ICdEZXBhcnRtZW50JywgdHlwZTogJ3NlbGVjdCcsIG9wdGlvbnM6IFtdLCBvcHRpb25EaXNwbGF5OiAnbmFtZScsIG9wdGlvblZhbHVlOiAnZGVwYXJ0bWVudElEJyB9LFxyXG4gICAgICB7IG5hbWU6ICdkZXNjcmlwdGlvbicsIHR5cGU6ICd0ZXh0Jywgc3BhbjogdHJ1ZSB9LFxyXG5cclxuICAgIF0sXHJcbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucy9pZCcgfSxcclxuICB9XHJcblxyXG4gIGVkaXRQb3NpdGlvbkJ1dHRvbjogQnV0dG9uID0geyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3Bvc2l0aW9ucz9hY3Rpb249ZWRpdCcsIG1ldGhvZDogJ3Bvc3QnLCBzdWNjZXNzTWVzc2FnZTogJ0VkaXRlZCBTdWNjZXNzZnVsbHknIH0gfVxyXG5cclxuICBwb3NpdGlvblRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcclxuICAgIHNob3dGaWx0ZXI6IHRydWUsXHJcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnLCAnZGVwYXJ0bWVudE5hbWUnLCAnc2FsYXJ5J10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAncG9zaXRpb25JRCcsIHR5cGU6ICdudW1iZXInLCBhbGlhczogJ0lEJyB9LFxyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnIH0sXHJcbiAgICAgIC8vIHsgbmFtZTogJ2RlcGFydG1lbnROYW1lJywgdHlwZTogJ3RleHQnLCBhbGlhczogJ0RlcGFydG1lbnQnIH0sXHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczogW1xyXG4gICAgICB7IG5hbWU6ICdjcmVhdGUnLCBkaXNwbGF5OiAnQ3JlYXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAncG9zaXRpb25zP2FjdGlvbj1jcmVhdGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAndmlldycsXHJcbiAgICAgICAgZGlhbG9nOiB0cnVlLFxyXG4gICAgICAgIGRldGFpbHNDb25maWc6IHtcclxuICAgICAgICAgIGZvcm1Db25maWc6IHsgLi4udGhpcy5wb3NpdGlvbkZvcm1Db25maWcsIGZpZWxkczogdGhpcy5wb3NpdGlvbkZvcm1Db25maWcuZmllbGRzLmZpbHRlcih4ID0+IHgubmFtZSAhPSAnZGVwYXJ0bWVudElEJykgfSxcclxuICAgICAgICAgIGhlcm9GaWVsZDogJ3Bvc2l0aW9uSUQnLFxyXG4gICAgICAgICAgYnV0dG9uczogW3RoaXMuZWRpdFBvc2l0aW9uQnV0dG9uXSxcclxuICAgICAgICAgIHRhYmxlQ29uZmlnczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5lbXBsb3llZVRhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAncG9zaXRpb25zL2VtcGxveWVlcy94JyB9LFxyXG4gICAgICAgICAgICAgIGxvYWRDcml0ZXJpYTogJ2VtcGxveWVlcycsXHJcbiAgICAgICAgICAgICAgbG9hZElERmllbGQ6ICdwb3NpdGlvbklEJyxcclxuICAgICAgICAgICAgICB0aXRsZTogJ0VtcGxveWVlcycsXHJcbiAgICAgICAgICAgICAgZWxldmF0aW9uOiAnbm9uZScsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0aGlzLmVkaXRQb3NpdGlvbkJ1dHRvbixcclxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgZGlhbG9nOiB0cnVlLCBhY3Rpb246IHsgdXJsOiAncG9zaXRpb25zP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdwb3NpdGlvbnMvYWxsL3gnIH0sXHJcbiAgICBmb3JtQ29uZmlnOiB0aGlzLnBvc2l0aW9uRm9ybUNvbmZpZ1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZXBhcnRtZW50cy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBkZXBhcnRtZW50Rm9ybUNvbmZpZzogRm9ybUNvbmZpZyA9IHtcclxuICAgIGZpZWxkczogW1xyXG4gICAgICB7IG5hbWU6ICduYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9LFxyXG4gICAgXSxcclxuICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHMvaWQnIH0sXHJcbiAgfVxyXG5cclxuICBlZGl0RGVwYXJ0bWVudEJ1dHRvbjogQnV0dG9uID0geyBuYW1lOiAnZWRpdCcsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzP2FjdGlvbj1lZGl0JywgbWV0aG9kOiAncG9zdCcsIHN1Y2Nlc3NNZXNzYWdlOiAnRWRpdGVkIFN1Y2Nlc3NmdWxseScgfSB9XHJcblxyXG4gIGRlcGFydG1lbnRUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XHJcbiAgICBzaG93RmlsdGVyOiB0cnVlLFxyXG4gICAgbWluQ29sdW1uczogWyduYW1lJ10sXHJcbiAgICBmbGF0QnV0dG9uczogdHJ1ZSxcclxuICAgIGNvbHVtbnM6IFtcclxuICAgICAgeyBuYW1lOiAnZGVwYXJ0bWVudElEJywgdHlwZTogJ251bWJlcicsIGFsaWFzOiAnSUQnIH0sXHJcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcclxuICAgIF0sXHJcbiAgICBidXR0b25zOiBbXHJcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdDcmVhdGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cz9hY3Rpb249Y3JlYXRlJywgbWV0aG9kOiAncG9zdCcgfSB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ3ZpZXcnLFxyXG4gICAgICAgIGRpYWxvZzogdHJ1ZSxcclxuICAgICAgICBkZXRhaWxzQ29uZmlnOiB7XHJcbiAgICAgICAgICBmb3JtQ29uZmlnOiB0aGlzLmRlcGFydG1lbnRGb3JtQ29uZmlnLFxyXG4gICAgICAgICAgaGVyb0ZpZWxkOiAnZGVwYXJ0bWVudElEJyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFt0aGlzLmVkaXREZXBhcnRtZW50QnV0dG9uXSxcclxuICAgICAgICAgIHRhYmxlQ29uZmlnczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5lbXBsb3llZVRhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHMvZW1wbG95ZWVzL3gnIH0sXHJcbiAgICAgICAgICAgICAgbG9hZENyaXRlcmlhOiAnZW1wbG95ZWVzJyxcclxuICAgICAgICAgICAgICBsb2FkSURGaWVsZDogJ2RlcGFydG1lbnRJRCcsXHJcbiAgICAgICAgICAgICAgdGl0bGU6ICdFbXBsb3llZXMnLFxyXG4gICAgICAgICAgICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5wb3NpdGlvblRhYmxlQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGxvYWRBY3Rpb246IHsgdXJsOiAnZGVwYXJ0bWVudHMvcG9zaXRpb25zL3gnIH0sXHJcbiAgICAgICAgICAgICAgbG9hZENyaXRlcmlhOiAncG9zaXRpb25zJyxcclxuICAgICAgICAgICAgICBsb2FkSURGaWVsZDogJ2RlcGFydG1lbnRJRCcsXHJcbiAgICAgICAgICAgICAgdGl0bGU6ICdQb3NpdGlvbnMnLFxyXG4gICAgICAgICAgICAgIGVsZXZhdGlvbjogJ25vbmUnLFxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRoaXMuZWRpdERlcGFydG1lbnRCdXR0b24sXHJcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGRpYWxvZzogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ2RlcGFydG1lbnRzP2FjdGlvbj1kZWxldGUnLCBtZXRob2Q6ICdwb3N0JyB9IH0sXHJcbiAgICBdLFxyXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICdkZXBhcnRtZW50cy9hbGwveCcgfSxcclxuICAgIGZvcm1Db25maWc6IHRoaXMuZGVwYXJ0bWVudEZvcm1Db25maWdcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLU90aGVyIGNvZGVcclxuXHJcbiAgcHVibGljIENhbGxBcGkoYWN0aW9uOiBBY3Rpb24sIGRhdGE6IGFueSA9ICcnICkge1xyXG5cclxuICAgIGlmICghYWN0aW9uLm1ldGhvZCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChhY3Rpb24udXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihhY3Rpb24ubWV0aG9kID09J2dldCcpe1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoYWN0aW9uLnVybCk7XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbi5tZXRob2QgPT0gJ3Bvc3QnKXtcclxuXHJcbiAgICAgIGlmIChhY3Rpb24uaXNGb3JtRGF0YSl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdF9Gb3JtRGF0YShhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChhY3Rpb24udXJsLCBkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYWN0aW9uLnVybCwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIENoZWNrV2VsY29tZWQocGF0aDogc3RyaW5nID0gJ2hvbWUvYWRtaW4vd2VsY29tZScpIHtcclxuICAgIHRoaXMuQ2FsbEFwaSh7IHVybDogJ3RlbmFudC93ZWxjb21lL3gnIH0pLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICBpZiAoIXguZGF0YSkge1xyXG4gICAgICAgIHRoaXMuTmF2aWdhdGUocGF0aClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHVibGljIE5hdmlnYXRlKHBhdGg6IHN0cmluZykge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhdGhdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBOYXZpZ2F0ZVdpdGhWYWx1ZShwYXRoOiBzdHJpbmcsIHZhbHVlIDogc3RyaW5nKXtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogeyB2OiB2YWx1ZSB9LFxyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICBza2lwTG9jYXRpb25DaGFuZ2U6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXROYXZpZ2F0aW9uVmFsdWUoKXtcclxuICAgIGlmICh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zW1widlwiXSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbXCJ2XCJdXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG1wQWNjb3VudElEO1xyXG5cclxuXHJcblxyXG4gIC8vVXNlcnNcclxuICBwdWJsaWMgR2V0VXNlcigpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLkdldChcIlVzZXIvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgUmVnaXN0ZXJBY2NvdW50KHUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL3JlZ2lzdGVyXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIEdldFVzZXJCeUlEKHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoYFVzZXIvaWQvJHt2YWx9YCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgVXBkYXRlVXNlcihwcm9maWxlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9lZGl0XCIsIHByb2ZpbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFVubG9ja1VzZXIodXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvdW5sb2NrXCIsIHVzZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIExvY2tVc2VyKHVzZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2xvY2tcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgRGVsZXRlVXNlcih1c2VyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5Qb3N0KFwiVXNlci9kZWxldGVcIiwgdXNlcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgTG9naW4odTogVXNlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvbG9naW5cIiwgdSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgQ2hhbmdlUGFzc3dvcmQodSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUG9zdChcIlVzZXIvY2hhbmdlcGFzc3dvcmQtc2VsZlwiLCB1KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBDaGFuZ2VQYXNzd29yZEFkbWluKHUpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJVc2VyL2NoYW5nZXBhc3N3b3JkLWFkbWluXCIsIHUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFNlbGZSZXNldCh1OiBVc2VyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoXCJCYXNpYy9TZWxmUmVzZXRcIiwgdSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9Sb2xlc1xyXG5cclxuICBwdWJsaWMgUG9zdFJvbGUocm9sZSwgYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYFJvbGU/YWN0aW9uPSR7YWN0aW9ufWAsIHJvbGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFB1dFJvbGUocm9sZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuUHV0KFwiUm9sZVwiLCByb2xlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBHZXRSb2xlKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJSb2xlL2FsbC94XCIpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvL0xvZ3NcclxuICBwdWJsaWMgR2V0TG9nKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJMb2cvYWxsL3hcIik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9TZXR0aW5nc1xyXG4gIHB1YmxpYyBHZXRTZXR0aW5nKGJ5OiBzdHJpbmcsIHZhbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5HZXQoXCJTZXR0aW5nL2FsbC94XCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIFVwZGF0ZVNldHRpbmcoc2V0dGluZywgYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLlBvc3QoYFNldHRpbmc/YWN0aW9uPSR7YWN0aW9ufWAsIHNldHRpbmcpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19