keevo-components 1.7.17 → 1.7.19

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 (194) hide show
  1. package/README.md +24 -24
  2. package/esm2022/keevo-components.mjs +4 -4
  3. package/esm2022/lib/api/base-components/base-component-button.mjs +36 -36
  4. package/esm2022/lib/api/base-components/base-component-chart.mjs +92 -92
  5. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +298 -298
  6. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +78 -78
  7. package/esm2022/lib/api/base-components/base-component-crud.mjs +65 -65
  8. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -31
  9. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +169 -169
  10. package/esm2022/lib/api/base-components/base-component-input.mjs +94 -94
  11. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +130 -130
  12. package/esm2022/lib/api/base-components/base-component.mjs +51 -51
  13. package/esm2022/lib/api/components/chart/chart.config.mjs +2 -2
  14. package/esm2022/lib/api/components/chart/chart.model.mjs +2 -2
  15. package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -2
  16. package/esm2022/lib/api/components/chart/orchart.item.mjs +2 -2
  17. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -2
  18. package/esm2022/lib/api/components/error/error.component.mjs +26 -26
  19. package/esm2022/lib/api/components/error/kverror.module.mjs +35 -35
  20. package/esm2022/lib/api/components/table/action-item.mjs +2 -2
  21. package/esm2022/lib/api/components/table/kv-menuitem.mjs +3 -3
  22. package/esm2022/lib/api/components/table/table.config.column.mjs +2 -2
  23. package/esm2022/lib/api/components/table/table.config.mjs +2 -2
  24. package/esm2022/lib/api/components/table/table.paginate.mjs +9 -9
  25. package/esm2022/lib/api/helpers/component-providers.mjs +16 -16
  26. package/esm2022/lib/api/helpers/keevo-validators.mjs +64 -64
  27. package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -23
  28. package/esm2022/lib/api/models/menu/menu.model.mjs +2 -2
  29. package/esm2022/lib/api/models/menu/menucompleto.model.mjs +2 -2
  30. package/esm2022/lib/api/models/menu/sistemamenu.model.mjs +2 -2
  31. package/esm2022/lib/api/modules/primeng.module.mjs +251 -251
  32. package/esm2022/lib/api/services/base.api.service.mjs +74 -74
  33. package/esm2022/lib/api/services/breadcrumbs.service.mjs +57 -57
  34. package/esm2022/lib/api/services/component.service.mjs +27 -27
  35. package/esm2022/lib/api/services/form.service.mjs +84 -84
  36. package/esm2022/lib/api/services/imagens.service.mjs +28 -28
  37. package/esm2022/lib/api/services/notification.service.mjs +67 -67
  38. package/esm2022/lib/api/services/object.service.mjs +39 -26
  39. package/esm2022/lib/avatar/avatar.component.mjs +64 -64
  40. package/esm2022/lib/avatar/kv-avatar.module.mjs +24 -24
  41. package/esm2022/lib/buttons/button-personalize/button-personalize.component.mjs +17 -17
  42. package/esm2022/lib/buttons/button-popup/button-popup.component.mjs +31 -31
  43. package/esm2022/lib/buttons/button-secondary/button-secondary.component.mjs +17 -17
  44. package/esm2022/lib/buttons/button-success/button-success.component.mjs +17 -17
  45. package/esm2022/lib/buttons/kvbutton.module.mjs +39 -39
  46. package/esm2022/lib/carousel/carousel.component.mjs +92 -92
  47. package/esm2022/lib/carousel/kv-carousel.module.mjs +28 -28
  48. package/esm2022/lib/chart/chart.component.mjs +145 -145
  49. package/esm2022/lib/chart/kvchart.module.mjs +32 -32
  50. package/esm2022/lib/directives/{template.directive.mjs → template/template.directive.mjs} +24 -24
  51. package/esm2022/lib/inputs/check/check.component.mjs +26 -26
  52. package/esm2022/lib/inputs/dropdown/dropdown.component.mjs +37 -37
  53. package/esm2022/lib/inputs/editor/editor.component.mjs +88 -88
  54. package/esm2022/lib/inputs/input-calendar/input-calendar.component.mjs +89 -89
  55. package/esm2022/lib/inputs/input-mask/input-mask.component.mjs +29 -29
  56. package/esm2022/lib/inputs/input-number/input-number.component.mjs +59 -59
  57. package/esm2022/lib/inputs/input-password/input-password.component.mjs +33 -33
  58. package/esm2022/lib/inputs/input-text/input-text.component.mjs +21 -21
  59. package/esm2022/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +41 -41
  60. package/esm2022/lib/inputs/input-textarea/input-textarea.component.mjs +43 -43
  61. package/esm2022/lib/inputs/input-time/input-time.component.mjs +24 -24
  62. package/esm2022/lib/inputs/kvinputs.module.mjs +108 -108
  63. package/esm2022/lib/inputs/multi-select/multi-select.component.mjs +44 -44
  64. package/esm2022/lib/inputs/radio-group/radio-group.component.mjs +53 -53
  65. package/esm2022/lib/inputs/switch/switch.component.mjs +34 -34
  66. package/esm2022/lib/keevo-components.module.mjs +126 -119
  67. package/esm2022/lib/label/label.component.mjs +14 -14
  68. package/esm2022/lib/label/label.module.mjs +23 -23
  69. package/esm2022/lib/loader/kvloader.module.mjs +28 -28
  70. package/esm2022/lib/loader/loader.component.mjs +17 -17
  71. package/esm2022/lib/loader/loader.service.mjs +29 -29
  72. package/esm2022/lib/login/kvlogin.module.mjs +47 -47
  73. package/esm2022/lib/login/login.component.mjs +52 -52
  74. package/esm2022/lib/menu/kvmenu.module.mjs +43 -43
  75. package/esm2022/lib/menu/menu.component.mjs +215 -215
  76. package/esm2022/lib/orgchart/orgchart.component.mjs +100 -100
  77. package/esm2022/lib/orgchart/orgchart.module.mjs +24 -24
  78. package/esm2022/lib/page-form/kv-page-form.module.mjs +38 -38
  79. package/esm2022/lib/page-form/page-form.component.mjs +147 -147
  80. package/esm2022/lib/picklist/kvpicklist.module.mjs +32 -32
  81. package/esm2022/lib/picklist/picklist.component.mjs +48 -48
  82. package/esm2022/lib/pipes/codigofile.pipe.mjs +19 -19
  83. package/esm2022/lib/pipes/cpfcnpj.pipe.mjs +25 -25
  84. package/esm2022/lib/pipes/pipes.module.mjs +34 -34
  85. package/esm2022/lib/pipes/telefone.pipe.mjs +45 -45
  86. package/esm2022/lib/table/kvtable.module.mjs +36 -36
  87. package/esm2022/lib/table/table.component.mjs +554 -554
  88. package/esm2022/lib/tree-table/kv-treetable.component.mjs +371 -371
  89. package/esm2022/lib/tree-table/kv-treetable.module.mjs +32 -32
  90. package/esm2022/lib/tree-view/kvtree-view.module.mjs +28 -28
  91. package/esm2022/lib/tree-view/tree-view.component.mjs +30 -30
  92. package/esm2022/lib/treetable/treetable.component.mjs +195 -0
  93. package/esm2022/lib/treetable/treetable.module.mjs +28 -0
  94. package/esm2022/lib/workspace/kvworkspace.module.mjs +51 -51
  95. package/esm2022/lib/workspace/workspace.component.mjs +178 -183
  96. package/esm2022/public-api.mjs +151 -149
  97. package/fesm2022/keevo-components.mjs +4987 -4766
  98. package/fesm2022/keevo-components.mjs.map +1 -1
  99. package/index.d.ts +5 -5
  100. package/lib/api/base-components/base-component-button.d.ts +14 -14
  101. package/lib/api/base-components/base-component-chart.d.ts +40 -40
  102. package/lib/api/base-components/base-component-crud-form.d.ts +145 -145
  103. package/lib/api/base-components/base-component-crud-list.d.ts +63 -63
  104. package/lib/api/base-components/base-component-crud.d.ts +36 -36
  105. package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -15
  106. package/lib/api/base-components/base-component-dropdown.d.ts +44 -44
  107. package/lib/api/base-components/base-component-input.d.ts +31 -31
  108. package/lib/api/base-components/base-component-multi-select.d.ts +35 -35
  109. package/lib/api/base-components/base-component.d.ts +22 -22
  110. package/lib/api/components/chart/chart.config.d.ts +11 -11
  111. package/lib/api/components/chart/chart.model.d.ts +9 -9
  112. package/lib/api/components/chart/orchart.config.d.ts +35 -35
  113. package/lib/api/components/chart/orchart.item.d.ts +26 -26
  114. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -4
  115. package/lib/api/components/error/error.component.d.ts +12 -12
  116. package/lib/api/components/error/kverror.module.d.ts +10 -10
  117. package/lib/api/components/table/action-item.d.ts +5 -5
  118. package/lib/api/components/table/kv-menuitem.d.ts +10 -9
  119. package/lib/api/components/table/table.config.column.d.ts +24 -22
  120. package/lib/api/components/table/table.config.d.ts +18 -17
  121. package/lib/api/components/table/table.paginate.d.ts +6 -6
  122. package/lib/api/helpers/component-providers.d.ts +2 -2
  123. package/lib/api/helpers/keevo-validators.d.ts +10 -10
  124. package/lib/api/helpers/translate-primeng.d.ts +4 -4
  125. package/lib/api/models/menu/menu.model.d.ts +10 -10
  126. package/lib/api/models/menu/menucompleto.model.d.ts +6 -6
  127. package/lib/api/models/menu/sistemamenu.model.d.ts +8 -8
  128. package/lib/api/modules/primeng.module.d.ts +61 -61
  129. package/lib/api/services/base.api.service.d.ts +25 -25
  130. package/lib/api/services/breadcrumbs.service.d.ts +16 -16
  131. package/lib/api/services/component.service.d.ts +11 -11
  132. package/lib/api/services/form.service.d.ts +27 -27
  133. package/lib/api/services/imagens.service.d.ts +10 -10
  134. package/lib/api/services/notification.service.d.ts +25 -25
  135. package/lib/api/services/object.service.d.ts +9 -8
  136. package/lib/avatar/avatar.component.d.ts +19 -19
  137. package/lib/avatar/kv-avatar.module.d.ts +8 -8
  138. package/lib/buttons/button-personalize/button-personalize.component.d.ts +7 -7
  139. package/lib/buttons/button-popup/button-popup.component.d.ts +13 -13
  140. package/lib/buttons/button-secondary/button-secondary.component.d.ts +7 -7
  141. package/lib/buttons/button-success/button-success.component.d.ts +7 -7
  142. package/lib/buttons/kvbutton.module.d.ts +11 -11
  143. package/lib/carousel/carousel.component.d.ts +16 -16
  144. package/lib/carousel/kv-carousel.module.d.ts +9 -9
  145. package/lib/chart/chart.component.d.ts +56 -56
  146. package/lib/chart/kvchart.module.d.ts +10 -10
  147. package/lib/directives/{template.directive.d.ts → template/template.directive.d.ts} +11 -11
  148. package/lib/inputs/check/check.component.d.ts +11 -11
  149. package/lib/inputs/dropdown/dropdown.component.d.ts +14 -14
  150. package/lib/inputs/editor/editor.component.d.ts +36 -36
  151. package/lib/inputs/input-calendar/input-calendar.component.d.ts +27 -27
  152. package/lib/inputs/input-mask/input-mask.component.d.ts +12 -12
  153. package/lib/inputs/input-number/input-number.component.d.ts +19 -19
  154. package/lib/inputs/input-password/input-password.component.d.ts +13 -13
  155. package/lib/inputs/input-text/input-text.component.d.ts +9 -9
  156. package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +16 -16
  157. package/lib/inputs/input-textarea/input-textarea.component.d.ts +16 -16
  158. package/lib/inputs/input-time/input-time.component.d.ts +10 -10
  159. package/lib/inputs/kvinputs.module.d.ts +25 -25
  160. package/lib/inputs/multi-select/multi-select.component.d.ts +15 -15
  161. package/lib/inputs/radio-group/radio-group.component.d.ts +18 -18
  162. package/lib/inputs/switch/switch.component.d.ts +14 -14
  163. package/lib/keevo-components.module.d.ts +22 -21
  164. package/lib/label/label.component.d.ts +7 -7
  165. package/lib/label/label.module.d.ts +8 -8
  166. package/lib/loader/kvloader.module.d.ts +9 -9
  167. package/lib/loader/loader.component.d.ts +8 -8
  168. package/lib/loader/loader.service.d.ts +10 -10
  169. package/lib/login/kvlogin.module.d.ts +13 -13
  170. package/lib/login/login.component.d.ts +30 -30
  171. package/lib/menu/kvmenu.module.d.ts +12 -12
  172. package/lib/menu/menu.component.d.ts +73 -73
  173. package/lib/orgchart/orgchart.component.d.ts +27 -27
  174. package/lib/orgchart/orgchart.module.d.ts +9 -9
  175. package/lib/page-form/kv-page-form.module.d.ts +11 -11
  176. package/lib/page-form/page-form.component.d.ts +70 -70
  177. package/lib/picklist/kvpicklist.module.d.ts +10 -10
  178. package/lib/picklist/picklist.component.d.ts +20 -20
  179. package/lib/pipes/codigofile.pipe.d.ts +7 -7
  180. package/lib/pipes/cpfcnpj.pipe.d.ts +7 -7
  181. package/lib/pipes/pipes.module.d.ts +10 -10
  182. package/lib/pipes/telefone.pipe.d.ts +7 -7
  183. package/lib/table/kvtable.module.d.ts +11 -11
  184. package/lib/table/table.component.d.ts +113 -113
  185. package/lib/tree-table/kv-treetable.component.d.ts +85 -85
  186. package/lib/tree-table/kv-treetable.module.d.ts +11 -11
  187. package/lib/tree-view/kvtree-view.module.d.ts +9 -9
  188. package/lib/tree-view/tree-view.component.d.ts +14 -14
  189. package/lib/treetable/treetable.component.d.ts +38 -0
  190. package/lib/treetable/treetable.module.d.ts +9 -0
  191. package/lib/workspace/kvworkspace.module.d.ts +14 -14
  192. package/lib/workspace/workspace.component.d.ts +46 -46
  193. package/package.json +1 -1
  194. package/public-api.d.ts +147 -145
@@ -1,298 +1,298 @@
1
- import { Component } from "@angular/core";
2
- import { FormGroup } from "@angular/forms";
3
- import { combineLatest, filter, finalize } from "rxjs";
4
- import { BaseComponentCrud } from "./base-component-crud";
5
- import { FormService } from "../services/form.service";
6
- import { loading } from "../../loader/loader.service";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "primeng/dynamicdialog";
9
- import * as i2 from "../services/notification.service";
10
- import * as i3 from "@angular/router";
11
- export class BaseComponentCrudForm extends BaseComponentCrud {
12
- constructor(dialogService, notificationService, activatedRoute, dynamicDialogRef, dynamicDialogConfig, router) {
13
- super(dialogService, notificationService);
14
- this.activatedRoute = activatedRoute;
15
- this.dynamicDialogRef = dynamicDialogRef;
16
- this.dynamicDialogConfig = dynamicDialogConfig;
17
- this.router = router;
18
- this.isAccordionExpanded = false;
19
- this.isNewRegistry = false;
20
- this.isSaveLoading = false;
21
- this.isView = false;
22
- this.formGroup = new FormGroup({});
23
- this.actions = [];
24
- this.popup = false;
25
- this.registry = null;
26
- this.onSetFormValues = false;
27
- }
28
- /**
29
- * Método disparado para tratamento das notificações do backend
30
- * @param err - Notificação
31
- */
32
- backendError(err) {
33
- if (err) {
34
- if (err.status == 404) {
35
- this.notificationService.toastError(err.error.item2[0].message);
36
- return;
37
- }
38
- else if (err.status == 400) {
39
- // Erros de validação de domínio do backend
40
- if (Array.isArray(err.error)) {
41
- if (err.error?.length) {
42
- if (err.error.length == 1 && err.error[0].key == '') {
43
- this.notificationService.toastError(err.error[0].message);
44
- return;
45
- }
46
- this.invalidForm(err.error);
47
- return;
48
- }
49
- }
50
- else if (Array.isArray(err.error.item2)) {
51
- if (err.error.item2?.length) {
52
- if (err.error.item2.length == 1) {
53
- this.notificationService.toastError(err.error.item2[0].message);
54
- return;
55
- }
56
- this.invalidForm(err.error.item2);
57
- return;
58
- }
59
- }
60
- else if (err.error?.title) {
61
- // Erro de json no backend
62
- this.notificationService.toastError(err.error.title);
63
- return;
64
- }
65
- }
66
- else if (err.status == 415) {
67
- if (err.error?.title) {
68
- // Erro de json no backend
69
- this.notificationService.toastError(err.error.title);
70
- return;
71
- }
72
- }
73
- // Qualquer outro tipo de erro que tenha mensagem
74
- if (err.message) {
75
- this.notificationService.toastError(err.message);
76
- }
77
- }
78
- }
79
- /**
80
- * Método disparado ao clicar no botão de cancelamento
81
- */
82
- cancel() {
83
- this.notificationService.question({
84
- type: 'question',
85
- message: 'Deseja cancelar a operação?',
86
- accept: () => {
87
- this.navigateList();
88
- },
89
- });
90
- }
91
- /**
92
- * Verifica se houveram alterações nos componentes do formControl
93
- * @param controls - Nomes do controles no formGroup
94
- * @returns Observable
95
- */
96
- detectFormControlChanges(controls) {
97
- const controlList = [];
98
- controls.forEach(controlName => controlList.push(this.formGroup.controls[controlName].valueChanges));
99
- return combineLatest(controlList).pipe(filter(() => !this.onSetFormValues));
100
- }
101
- /**
102
- * Método responsável por desabilitar um componente
103
- * @param controlName - Nome do controle no formGroup
104
- */
105
- disableComponent(controlName) {
106
- FormService.disableControl(this.formGroup, controlName);
107
- }
108
- /**
109
- * Método responsável por limpar e desabilitar um componente
110
- * @param controlName - Nome do controle no formGroup
111
- * @param value - Valor default
112
- */
113
- disableAndClearComponent(controlName, value) {
114
- FormService.disableAndClearControl(this.formGroup, controlName, value);
115
- }
116
- /**
117
- * Método responsável por habilitar um componente
118
- * @param controlName - Nome do controle no formGroup
119
- */
120
- enableComponent(controName) {
121
- FormService.enableControl(this.formGroup, controName);
122
- }
123
- /**
124
- * Método que retorna o valor de um componente
125
- * @param controlName - Nome do controle no formGroup
126
- * @returns - Valor
127
- */
128
- getFormValue(controlName) {
129
- return FormService.getFormValue(this.formGroup, controlName);
130
- }
131
- /**
132
- * Verifica se o componente possui erro
133
- * @param controlName - Nome do controle no formGroup
134
- */
135
- hasControlError(controlName, errorCode) {
136
- return FormService.hasControlError(this.formGroup, controlName, errorCode);
137
- }
138
- /**
139
- * Seta inconsistências para o fomulário
140
- * @param notification - Lista de notificações
141
- */
142
- invalidForm(notification) {
143
- FormService.invalidForm(this.formGroup, notification);
144
- }
145
- /**
146
- * Tratamento de inconsistências do formulário
147
- */
148
- invalidateForm() {
149
- this.isAccordionExpanded = true;
150
- this.invalidForm();
151
- if (this.dadosTela?.mensagemValidacao) {
152
- this.notificationService.dialog({
153
- type: 'alert',
154
- message: 'Verifique os campos obrigatórios.',
155
- });
156
- }
157
- }
158
- /**
159
- * Método responsável pelo carregamento da tela
160
- * @param obs - Observable responsável pelo salvamento dos dados
161
- */
162
- loadData(obs) {
163
- obs
164
- .pipe(loading())
165
- .subscribe((data) => {
166
- this.isNewRegistry = false;
167
- this.registry = data;
168
- this.setFormValues(this.registry);
169
- this.loadGrids();
170
- this.setTitlePopup();
171
- });
172
- }
173
- async loadDataAsync(obs) {
174
- await obs.pipe(loading()).toPromise();
175
- const data = await obs.toPromise();
176
- this.isNewRegistry = false;
177
- this.registry = data;
178
- this.setFormValues(this.registry);
179
- this.loadGrids();
180
- this.setTitlePopup();
181
- }
182
- /**
183
- * Método disparado para carregamento de grids (Disparado após o loadData)
184
- */
185
- loadGrids() { }
186
- /**
187
- * Método disparado para retornar a lista
188
- */
189
- navigateList(id = null) {
190
- if (this.popup) {
191
- this.dynamicDialogRef.close(id);
192
- }
193
- else if (this.dadosTela?.rotaListar) {
194
- this.router.navigate([this.dadosTela.rotaListar]);
195
- }
196
- }
197
- ngOnDestroy() {
198
- if (this.dynamicDialogRef) {
199
- this.dynamicDialogRef.close();
200
- }
201
- }
202
- ngOnInit() {
203
- this.configureForm();
204
- this.popup = this.dynamicDialogConfig?.data?.popup || false;
205
- this.activatedRoute.params.subscribe((params) => {
206
- if (params['id']) {
207
- this.loadForm(params['id']);
208
- }
209
- else if (this.dynamicDialogConfig?.data?.id) {
210
- this.loadForm(this.dynamicDialogConfig.data.id);
211
- }
212
- else {
213
- this.isNewRegistry = true;
214
- this.loadGrids();
215
- this.setTitlePopup();
216
- }
217
- });
218
- }
219
- /**
220
- * Método disparado para salvar dados
221
- * @param obs - Observable responsável pelo salvamento dos dados
222
- */
223
- saveData(obs) {
224
- obs
225
- .pipe((src) => {
226
- this.isSaveLoading = true;
227
- return src.pipe(finalize(() => {
228
- this.isSaveLoading = false;
229
- }));
230
- })
231
- .subscribe({
232
- next: (res) => {
233
- this.notificationService.toastSuccess(res.item2[0].message);
234
- this.navigateList(res.item1);
235
- },
236
- error: (e) => {
237
- this.backendError(e);
238
- },
239
- });
240
- }
241
- /**
242
- * Método se atualiza o valor de um componente do formGroup
243
- * @param controName - Nome do controle
244
- * @param value - Valor para atualização
245
- */
246
- setControlValue(controName, value) {
247
- FormService.setControlValue(this.formGroup, controName, value);
248
- }
249
- /**
250
- * Atualiza valores dos componentes do formGroup
251
- * @param values - Valores para atualização
252
- */
253
- setFormValues(values) {
254
- this.onSetFormValues = true;
255
- this.formGroup.patchValue(values, { emitEvent: false });
256
- this.onSetFormValues = false;
257
- }
258
- /**
259
- * Seta o título do popup
260
- */
261
- setTitlePopup() {
262
- if (this.popup) {
263
- if (this.dynamicDialogConfig)
264
- this.dynamicDialogConfig.header = this.dadosTela?.tituloForm;
265
- }
266
- }
267
- /**
268
- * Atualiza o validador de um componente do formGroup
269
- * @param controName - Nome do controle
270
- * @param validators - Regra de validação
271
- */
272
- setValidators(controName, validators) {
273
- FormService.setValidators(this.formGroup, controName, validators);
274
- }
275
- /**
276
- * Dispara os métodos de validações do formulário
277
- * @returns - True/False
278
- */
279
- validateForm() {
280
- let valid = false;
281
- if (this.formGroup && this.formGroup.valid) {
282
- valid = true;
283
- }
284
- else {
285
- this.invalidateForm();
286
- }
287
- return valid;
288
- }
289
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseComponentCrudForm, deps: [{ token: i1.DialogService }, { token: i2.NotificationService }, { token: i3.ActivatedRoute }, { token: i1.DynamicDialogRef }, { token: i1.DynamicDialogConfig }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
290
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BaseComponentCrudForm, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
291
- }
292
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseComponentCrudForm, decorators: [{
293
- type: Component,
294
- args: [{
295
- template: ''
296
- }]
297
- }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.NotificationService }, { type: i3.ActivatedRoute }, { type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }, { type: i3.Router }]; } });
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7QUFZdEQsTUFBTSxPQUFnQixxQkFBc0IsU0FBUSxpQkFBaUI7SUFnQm5FLFlBQ0UsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQzlCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxtQkFBd0MsRUFDeEMsTUFBYztRQUN4QixLQUFLLENBRUQsYUFBYSxFQUNiLG1CQUFtQixDQUNwQixDQUFDO1FBUk0sbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBcEJoQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVmLGNBQVMsR0FBYyxJQUFJLFNBQVMsQ0FBQyxF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O09BR0c7SUFDTyxhQUFhLENBQUMsTUFBVztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLG1CQUFtQjtnQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ08sYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBOEM7UUFDeEYsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sWUFBWTtRQUNwQixJQUFJLEtBQUssR0FBWSxLQUFLLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQzFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDZDthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQWpWbUIscUJBQXFCO21HQUFyQixxQkFBcUIsMkVBRi9CLEVBQUU7OzRGQUVRLHFCQUFxQjtrQkFIMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tIFwicHJpbWVuZy9keW5hbWljZGlhbG9nXCI7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjb21iaW5lTGF0ZXN0LCBmaWx0ZXIsIGZpbmFsaXplIH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gXCIuLi9jb21wb25lbnRzL3RhYmxlL2FjdGlvbi1pdGVtXCI7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50Q3J1ZCB9IGZyb20gXCIuL2Jhc2UtY29tcG9uZW50LWNydWRcIjtcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2Zvcm0uc2VydmljZVwiO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHsgbG9hZGluZyB9IGZyb20gXCIuLi8uLi9sb2FkZXIvbG9hZGVyLnNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBEYWRvc1RlbGEge1xuICBzdWJUaXR1bG9Gb3JtOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRpdHVsb0Zvcm06IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcm90YUxpc3Rhcjogc3RyaW5nO1xuICBtZW5zYWdlbVZhbGlkYWNhbzogYm9vbGVhblxufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb21wb25lbnRDcnVkRm9ybSBleHRlbmRzIEJhc2VDb21wb25lbnRDcnVkIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByb3RlY3RlZCBpc0FjY29yZGlvbkV4cGFuZGVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc05ld1JlZ2lzdHJ5ID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc1NhdmVMb2FkaW5nID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc1ZpZXcgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgcHJvdGVjdGVkIGFjdGlvbnM6IEFjdGlvbkl0ZW1bXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBkYWRvc1RlbGE6IERhZG9zVGVsYSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHBvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCByZWdpc3RyeTogYW55ID0gbnVsbDtcblxuICBwcml2YXRlIG9uU2V0Rm9ybVZhbHVlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByb3RlY3RlZCBkeW5hbWljRGlhbG9nUmVmOiBEeW5hbWljRGlhbG9nUmVmLFxuICAgIHByb3RlY3RlZCBkeW5hbWljRGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcikge1xuICAgIHN1cGVyXG4gICAgICAoXG4gICAgICAgIGRpYWxvZ1NlcnZpY2UsXG4gICAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2VcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBjb25maWd1cmHDp8OjbyBkbyBmb3JtXG4gICAqL1xuICBhYnN0cmFjdCBjb25maWd1cmVGb3JtKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgbyBjYXJyZWdhbWVudG8gZG8gZm9ybVxuICAgKiBAcGFyYW0gaWRcbiAgICovXG4gIGFic3RyYWN0IGxvYWRGb3JtKGlkOiBhbnkpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIHNhbHZhbWVudG8gZG9zIGRhZG9zXG4gICAqL1xuICBhYnN0cmFjdCBzYXZlKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgdHJhdGFtZW50byBkYXMgbm90aWZpY2HDp8O1ZXMgZG8gYmFja2VuZFxuICAgKiBAcGFyYW0gZXJyIC0gTm90aWZpY2HDp8Ojb1xuICAgKi9cbiAgcHJvdGVjdGVkIGJhY2tlbmRFcnJvcihlcnI6IGFueSk6IHZvaWQge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGlmIChlcnIuc3RhdHVzID09IDQwNCkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3IuaXRlbTJbMF0ubWVzc2FnZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT0gNDAwKSB7XG4gICAgICAgIC8vIEVycm9zIGRlIHZhbGlkYcOnw6NvIGRlIGRvbcOtbmlvIGRvIGJhY2tlbmRcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyLmVycm9yKSkge1xuICAgICAgICAgIGlmIChlcnIuZXJyb3I/Lmxlbmd0aCkge1xuXG4gICAgICAgICAgICBpZiAoZXJyLmVycm9yLmxlbmd0aCA9PSAxICYmIGVyci5lcnJvclswXS5rZXkgPT0gJycpIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLmVycm9yWzBdLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW52YWxpZEZvcm0oZXJyLmVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlcnIuZXJyb3IuaXRlbTIpKSB7XG4gICAgICAgICAgaWYgKGVyci5lcnJvci5pdGVtMj8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIGlmIChlcnIuZXJyb3IuaXRlbTIubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLmVycm9yLml0ZW0yWzBdLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW52YWxpZEZvcm0oZXJyLmVycm9yLml0ZW0yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXJyLmVycm9yPy50aXRsZSkge1xuICAgICAgICAgIC8vIEVycm8gZGUganNvbiBubyBiYWNrZW5kXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLmVycm9yLnRpdGxlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT0gNDE1KSB7XG4gICAgICAgIGlmIChlcnIuZXJyb3I/LnRpdGxlKSB7XG4gICAgICAgICAgLy8gRXJybyBkZSBqc29uIG5vIGJhY2tlbmRcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3IudGl0bGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBRdWFscXVlciBvdXRybyB0aXBvIGRlIGVycm8gcXVlIHRlbmhhIG1lbnNhZ2VtXG4gICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBhbyBjbGljYXIgbm8gYm90w6NvIGRlIGNhbmNlbGFtZW50b1xuICAgKi9cbiAgcHJvdGVjdGVkIGNhbmNlbCgpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UucXVlc3Rpb24oe1xuICAgICAgdHlwZTogJ3F1ZXN0aW9uJyxcbiAgICAgIG1lc3NhZ2U6ICdEZXNlamEgY2FuY2VsYXIgYSBvcGVyYcOnw6NvPycsXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUxpc3QoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2UgaG91dmVyYW0gYWx0ZXJhw6fDtWVzIG5vcyBjb21wb25lbnRlcyBkbyBmb3JtQ29udHJvbFxuICAgKiBAcGFyYW0gY29udHJvbHMgLSBOb21lcyBkbyBjb250cm9sZXMgbm8gZm9ybUdyb3VwXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGVcbiAgICovXG4gIHByb3RlY3RlZCBkZXRlY3RGb3JtQ29udHJvbENoYW5nZXMoY29udHJvbHM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGNvbnRyb2xMaXN0OiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xuICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbE5hbWUgPT4gY29udHJvbExpc3QucHVzaCh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWVDaGFuZ2VzKSk7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoY29udHJvbExpc3QpLnBpcGUoZmlsdGVyKCgpID0+ICF0aGlzLm9uU2V0Rm9ybVZhbHVlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcmVzcG9uc8OhdmVsIHBvciBkZXNhYmlsaXRhciB1bSBjb21wb25lbnRlXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSAtIE5vbWUgZG8gY29udHJvbGUgbm8gZm9ybUdyb3VwXG4gICAqL1xuICBwcm90ZWN0ZWQgZGlzYWJsZUNvbXBvbmVudChjb250cm9sTmFtZTogc3RyaW5nKSB7XG4gICAgRm9ybVNlcnZpY2UuZGlzYWJsZUNvbnRyb2wodGhpcy5mb3JtR3JvdXAsIGNvbnRyb2xOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgbGltcGFyIGUgZGVzYWJpbGl0YXIgdW0gY29tcG9uZW50ZVxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWxvciBkZWZhdWx0XG4gICAqL1xuICBwcm90ZWN0ZWQgZGlzYWJsZUFuZENsZWFyQ29tcG9uZW50KGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlPzogYW55KSB7XG4gICAgRm9ybVNlcnZpY2UuZGlzYWJsZUFuZENsZWFyQ29udHJvbCh0aGlzLmZvcm1Hcm91cCwgY29udHJvbE5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwb3IgaGFiaWxpdGFyIHVtIGNvbXBvbmVudGVcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIC0gTm9tZSBkbyBjb250cm9sZSBubyBmb3JtR3JvdXBcbiAgICovXG4gIHByb3RlY3RlZCBlbmFibGVDb21wb25lbnQoY29udHJvTmFtZTogc3RyaW5nKSB7XG4gICAgRm9ybVNlcnZpY2UuZW5hYmxlQ29udHJvbCh0aGlzLmZvcm1Hcm91cCwgY29udHJvTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTcOpdG9kbyBxdWUgcmV0b3JuYSBvIHZhbG9yIGRlIHVtIGNvbXBvbmVudGVcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIC0gTm9tZSBkbyBjb250cm9sZSBubyBmb3JtR3JvdXBcbiAgICogQHJldHVybnMgLSBWYWxvclxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEZvcm1WYWx1ZTxUPihjb250cm9sTmFtZTogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIEZvcm1TZXJ2aWNlLmdldEZvcm1WYWx1ZTxUPih0aGlzLmZvcm1Hcm91cCwgY29udHJvbE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNlIG8gY29tcG9uZW50ZSBwb3NzdWkgZXJyb1xuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxuICAgKi9cbiAgcHJvdGVjdGVkIGhhc0NvbnRyb2xFcnJvcihjb250cm9sTmFtZTogc3RyaW5nLCBlcnJvckNvZGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRm9ybVNlcnZpY2UuaGFzQ29udHJvbEVycm9yKHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSwgZXJyb3JDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRhIGluY29uc2lzdMOqbmNpYXMgcGFyYSBvIGZvbXVsw6FyaW9cbiAgICogQHBhcmFtIG5vdGlmaWNhdGlvbiAtIExpc3RhIGRlIG5vdGlmaWNhw6fDtWVzXG4gICAqL1xuICBwcm90ZWN0ZWQgaW52YWxpZEZvcm0obm90aWZpY2F0aW9uPzogYW55KSB7XG4gICAgRm9ybVNlcnZpY2UuaW52YWxpZEZvcm0odGhpcy5mb3JtR3JvdXAsIG5vdGlmaWNhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogVHJhdGFtZW50byBkZSBpbmNvbnNpc3TDqm5jaWFzIGRvIGZvcm11bMOhcmlvXG4gICAqL1xuICBwcm90ZWN0ZWQgaW52YWxpZGF0ZUZvcm0oKSB7XG4gICAgdGhpcy5pc0FjY29yZGlvbkV4cGFuZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmludmFsaWRGb3JtKCk7XG5cbiAgICBpZiAodGhpcy5kYWRvc1RlbGE/Lm1lbnNhZ2VtVmFsaWRhY2FvKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZGlhbG9nKHtcbiAgICAgICAgdHlwZTogJ2FsZXJ0JyxcbiAgICAgICAgbWVzc2FnZTogJ1ZlcmlmaXF1ZSBvcyBjYW1wb3Mgb2JyaWdhdMOzcmlvcy4nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gcmVzcG9uc8OhdmVsIHBlbG8gY2FycmVnYW1lbnRvIGRhIHRlbGFcbiAgICogQHBhcmFtIG9icyAtIE9ic2VydmFibGUgcmVzcG9uc8OhdmVsIHBlbG8gc2FsdmFtZW50byBkb3MgZGFkb3NcbiAgICovXG4gIHB1YmxpYyBsb2FkRGF0YTxUPihvYnM6IE9ic2VydmFibGU8YW55Pikge1xuICAgIG9ic1xuICAgICAgLnBpcGUobG9hZGluZygpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNOZXdSZWdpc3RyeSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gZGF0YSBhcyBUO1xuICAgICAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5yZWdpc3RyeSk7XG4gICAgICAgIHRoaXMubG9hZEdyaWRzKCk7XG4gICAgICAgIHRoaXMuc2V0VGl0bGVQb3B1cCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBsb2FkRGF0YUFzeW5jPFQ+KG9iczogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgYXdhaXQgb2JzLnBpcGUobG9hZGluZygpKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBhd2FpdCBvYnMudG9Qcm9taXNlKCk7XG5cbiAgICB0aGlzLmlzTmV3UmVnaXN0cnkgPSBmYWxzZTtcbiAgICB0aGlzLnJlZ2lzdHJ5ID0gZGF0YSBhcyBUO1xuICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLnJlZ2lzdHJ5KTtcbiAgICB0aGlzLmxvYWRHcmlkcygpO1xuICAgIHRoaXMuc2V0VGl0bGVQb3B1cCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgY2FycmVnYW1lbnRvIGRlIGdyaWRzIChEaXNwYXJhZG8gYXDDs3MgbyBsb2FkRGF0YSlcbiAgICovXG4gIHB1YmxpYyBsb2FkR3JpZHMoKSB7IH1cblxuICAvKipcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSByZXRvcm5hciBhIGxpc3RhXG4gICAqL1xuICBwcm90ZWN0ZWQgbmF2aWdhdGVMaXN0KGlkOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMucG9wdXApIHtcbiAgICAgIHRoaXMuZHluYW1pY0RpYWxvZ1JlZi5jbG9zZShpZCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuZGFkb3NUZWxhPy5yb3RhTGlzdGFyKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5kYWRvc1RlbGEucm90YUxpc3Rhcl0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5keW5hbWljRGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLmR5bmFtaWNEaWFsb2dSZWYuY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb25maWd1cmVGb3JtKCk7XG5cbiAgICB0aGlzLnBvcHVwID0gdGhpcy5keW5hbWljRGlhbG9nQ29uZmlnPy5kYXRhPy5wb3B1cCB8fCBmYWxzZTtcblxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBhbnkpID0+IHtcbiAgICAgIGlmIChwYXJhbXNbJ2lkJ10pIHtcbiAgICAgICAgdGhpcy5sb2FkRm9ybShwYXJhbXNbJ2lkJ10pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5keW5hbWljRGlhbG9nQ29uZmlnPy5kYXRhPy5pZCkge1xuICAgICAgICB0aGlzLmxvYWRGb3JtKHRoaXMuZHluYW1pY0RpYWxvZ0NvbmZpZy5kYXRhLmlkKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmlzTmV3UmVnaXN0cnkgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRHcmlkcygpO1xuICAgICAgICB0aGlzLnNldFRpdGxlUG9wdXAoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIHNhbHZhciBkYWRvc1xuICAgKiBAcGFyYW0gb2JzIC0gT2JzZXJ2YWJsZSByZXNwb25zw6F2ZWwgcGVsbyBzYWx2YW1lbnRvIGRvcyBkYWRvc1xuICAgKi9cbiAgcHJvdGVjdGVkIHNhdmVEYXRhKG9iczogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgb2JzXG4gICAgICAucGlwZSgoc3JjOiBPYnNlcnZhYmxlPGFueT4pID0+IHtcbiAgICAgICAgdGhpcy5pc1NhdmVMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHNyYy5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzU2F2ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSkpO1xuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RTdWNjZXNzKHJlcy5pdGVtMlswXS5tZXNzYWdlKTtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlTGlzdChyZXMuaXRlbTEpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICB0aGlzLmJhY2tlbmRFcnJvcihlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE3DqXRvZG8gc2UgYXR1YWxpemEgbyB2YWxvciBkZSB1bSBjb21wb25lbnRlIGRvIGZvcm1Hcm91cFxuICAgKiBAcGFyYW0gY29udHJvTmFtZSAtIE5vbWUgZG8gY29udHJvbGVcbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsb3IgcGFyYSBhdHVhbGl6YcOnw6NvXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0Q29udHJvbFZhbHVlKGNvbnRyb05hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIEZvcm1TZXJ2aWNlLnNldENvbnRyb2xWYWx1ZSh0aGlzLmZvcm1Hcm91cCwgY29udHJvTmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dWFsaXphIHZhbG9yZXMgZG9zIGNvbXBvbmVudGVzIGRvIGZvcm1Hcm91cFxuICAgKiBAcGFyYW0gdmFsdWVzIC0gVmFsb3JlcyBwYXJhIGF0dWFsaXphw6fDo29cbiAgICovXG4gIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKHZhbHVlczogYW55KSB7XG4gICAgdGhpcy5vblNldEZvcm1WYWx1ZXMgPSB0cnVlO1xuICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodmFsdWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5vblNldEZvcm1WYWx1ZXMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRhIG8gdMOtdHVsbyBkbyBwb3B1cFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRUaXRsZVBvcHVwKCkge1xuICAgIGlmICh0aGlzLnBvcHVwKSB7XG4gICAgICBpZiAodGhpcy5keW5hbWljRGlhbG9nQ29uZmlnKVxuICAgICAgICB0aGlzLmR5bmFtaWNEaWFsb2dDb25maWcuaGVhZGVyID0gdGhpcy5kYWRvc1RlbGE/LnRpdHVsb0Zvcm07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dWFsaXphIG8gdmFsaWRhZG9yIGRlIHVtIGNvbXBvbmVudGUgZG8gZm9ybUdyb3VwXG4gICAqIEBwYXJhbSBjb250cm9OYW1lIC0gTm9tZSBkbyBjb250cm9sZVxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyAtIFJlZ3JhIGRlIHZhbGlkYcOnw6NvXG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0VmFsaWRhdG9ycyhjb250cm9OYW1lOiBzdHJpbmcsIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuIHwgVmFsaWRhdG9yRm5bXSB8IG51bGwpIHtcbiAgICBGb3JtU2VydmljZS5zZXRWYWxpZGF0b3JzKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lLCB2YWxpZGF0b3JzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXJhIG9zIG3DqXRvZG9zIGRlIHZhbGlkYcOnw7VlcyBkbyBmb3JtdWzDoXJpb1xuICAgKiBAcmV0dXJucyAtIFRydWUvRmFsc2VcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUZvcm0oKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAgJiYgdGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnZhbGlkYXRlRm9ybSgpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxufVxuIl19
1
+ import { Component } from "@angular/core";
2
+ import { FormGroup } from "@angular/forms";
3
+ import { combineLatest, filter, finalize } from "rxjs";
4
+ import { BaseComponentCrud } from "./base-component-crud";
5
+ import { FormService } from "../services/form.service";
6
+ import { loading } from "../../loader/loader.service";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "primeng/dynamicdialog";
9
+ import * as i2 from "../services/notification.service";
10
+ import * as i3 from "@angular/router";
11
+ export class BaseComponentCrudForm extends BaseComponentCrud {
12
+ constructor(dialogService, notificationService, activatedRoute, dynamicDialogRef, dynamicDialogConfig, router) {
13
+ super(dialogService, notificationService);
14
+ this.activatedRoute = activatedRoute;
15
+ this.dynamicDialogRef = dynamicDialogRef;
16
+ this.dynamicDialogConfig = dynamicDialogConfig;
17
+ this.router = router;
18
+ this.isAccordionExpanded = false;
19
+ this.isNewRegistry = false;
20
+ this.isSaveLoading = false;
21
+ this.isView = false;
22
+ this.formGroup = new FormGroup({});
23
+ this.actions = [];
24
+ this.popup = false;
25
+ this.registry = null;
26
+ this.onSetFormValues = false;
27
+ }
28
+ /**
29
+ * Método disparado para tratamento das notificações do backend
30
+ * @param err - Notificação
31
+ */
32
+ backendError(err) {
33
+ if (err) {
34
+ if (err.status == 404) {
35
+ this.notificationService.toastError(err.error.item2[0].message);
36
+ return;
37
+ }
38
+ else if (err.status == 400) {
39
+ // Erros de validação de domínio do backend
40
+ if (Array.isArray(err.error)) {
41
+ if (err.error?.length) {
42
+ if (err.error.length == 1 && err.error[0].key == '') {
43
+ this.notificationService.toastError(err.error[0].message);
44
+ return;
45
+ }
46
+ this.invalidForm(err.error);
47
+ return;
48
+ }
49
+ }
50
+ else if (Array.isArray(err.error.item2)) {
51
+ if (err.error.item2?.length) {
52
+ if (err.error.item2.length == 1) {
53
+ this.notificationService.toastError(err.error.item2[0].message);
54
+ return;
55
+ }
56
+ this.invalidForm(err.error.item2);
57
+ return;
58
+ }
59
+ }
60
+ else if (err.error?.title) {
61
+ // Erro de json no backend
62
+ this.notificationService.toastError(err.error.title);
63
+ return;
64
+ }
65
+ }
66
+ else if (err.status == 415) {
67
+ if (err.error?.title) {
68
+ // Erro de json no backend
69
+ this.notificationService.toastError(err.error.title);
70
+ return;
71
+ }
72
+ }
73
+ // Qualquer outro tipo de erro que tenha mensagem
74
+ if (err.message) {
75
+ this.notificationService.toastError(err.message);
76
+ }
77
+ }
78
+ }
79
+ /**
80
+ * Método disparado ao clicar no botão de cancelamento
81
+ */
82
+ cancel() {
83
+ this.notificationService.question({
84
+ type: 'question',
85
+ message: 'Deseja cancelar a operação?',
86
+ accept: () => {
87
+ this.navigateList();
88
+ },
89
+ });
90
+ }
91
+ /**
92
+ * Verifica se houveram alterações nos componentes do formControl
93
+ * @param controls - Nomes do controles no formGroup
94
+ * @returns Observable
95
+ */
96
+ detectFormControlChanges(controls) {
97
+ const controlList = [];
98
+ controls.forEach(controlName => controlList.push(this.formGroup.controls[controlName].valueChanges));
99
+ return combineLatest(controlList).pipe(filter(() => !this.onSetFormValues));
100
+ }
101
+ /**
102
+ * Método responsável por desabilitar um componente
103
+ * @param controlName - Nome do controle no formGroup
104
+ */
105
+ disableComponent(controlName) {
106
+ FormService.disableControl(this.formGroup, controlName);
107
+ }
108
+ /**
109
+ * Método responsável por limpar e desabilitar um componente
110
+ * @param controlName - Nome do controle no formGroup
111
+ * @param value - Valor default
112
+ */
113
+ disableAndClearComponent(controlName, value) {
114
+ FormService.disableAndClearControl(this.formGroup, controlName, value);
115
+ }
116
+ /**
117
+ * Método responsável por habilitar um componente
118
+ * @param controlName - Nome do controle no formGroup
119
+ */
120
+ enableComponent(controName) {
121
+ FormService.enableControl(this.formGroup, controName);
122
+ }
123
+ /**
124
+ * Método que retorna o valor de um componente
125
+ * @param controlName - Nome do controle no formGroup
126
+ * @returns - Valor
127
+ */
128
+ getFormValue(controlName) {
129
+ return FormService.getFormValue(this.formGroup, controlName);
130
+ }
131
+ /**
132
+ * Verifica se o componente possui erro
133
+ * @param controlName - Nome do controle no formGroup
134
+ */
135
+ hasControlError(controlName, errorCode) {
136
+ return FormService.hasControlError(this.formGroup, controlName, errorCode);
137
+ }
138
+ /**
139
+ * Seta inconsistências para o fomulário
140
+ * @param notification - Lista de notificações
141
+ */
142
+ invalidForm(notification) {
143
+ FormService.invalidForm(this.formGroup, notification);
144
+ }
145
+ /**
146
+ * Tratamento de inconsistências do formulário
147
+ */
148
+ invalidateForm() {
149
+ this.isAccordionExpanded = true;
150
+ this.invalidForm();
151
+ if (this.dadosTela?.mensagemValidacao) {
152
+ this.notificationService.dialog({
153
+ type: 'alert',
154
+ message: 'Verifique os campos obrigatórios.',
155
+ });
156
+ }
157
+ }
158
+ /**
159
+ * Método responsável pelo carregamento da tela
160
+ * @param obs - Observable responsável pelo salvamento dos dados
161
+ */
162
+ loadData(obs) {
163
+ obs
164
+ .pipe(loading())
165
+ .subscribe((data) => {
166
+ this.isNewRegistry = false;
167
+ this.registry = data;
168
+ this.setFormValues(this.registry);
169
+ this.loadGrids();
170
+ this.setTitlePopup();
171
+ });
172
+ }
173
+ async loadDataAsync(obs) {
174
+ await obs.pipe(loading()).toPromise();
175
+ const data = await obs.toPromise();
176
+ this.isNewRegistry = false;
177
+ this.registry = data;
178
+ this.setFormValues(this.registry);
179
+ this.loadGrids();
180
+ this.setTitlePopup();
181
+ }
182
+ /**
183
+ * Método disparado para carregamento de grids (Disparado após o loadData)
184
+ */
185
+ loadGrids() { }
186
+ /**
187
+ * Método disparado para retornar a lista
188
+ */
189
+ navigateList(id = null) {
190
+ if (this.popup) {
191
+ this.dynamicDialogRef.close(id);
192
+ }
193
+ else if (this.dadosTela?.rotaListar) {
194
+ this.router.navigate([this.dadosTela.rotaListar]);
195
+ }
196
+ }
197
+ ngOnDestroy() {
198
+ if (this.dynamicDialogRef) {
199
+ this.dynamicDialogRef.close();
200
+ }
201
+ }
202
+ ngOnInit() {
203
+ this.configureForm();
204
+ this.popup = this.dynamicDialogConfig?.data?.popup || false;
205
+ this.activatedRoute.params.subscribe((params) => {
206
+ if (params['id']) {
207
+ this.loadForm(params['id']);
208
+ }
209
+ else if (this.dynamicDialogConfig?.data?.id) {
210
+ this.loadForm(this.dynamicDialogConfig.data.id);
211
+ }
212
+ else {
213
+ this.isNewRegistry = true;
214
+ this.loadGrids();
215
+ this.setTitlePopup();
216
+ }
217
+ });
218
+ }
219
+ /**
220
+ * Método disparado para salvar dados
221
+ * @param obs - Observable responsável pelo salvamento dos dados
222
+ */
223
+ saveData(obs) {
224
+ obs
225
+ .pipe((src) => {
226
+ this.isSaveLoading = true;
227
+ return src.pipe(finalize(() => {
228
+ this.isSaveLoading = false;
229
+ }));
230
+ })
231
+ .subscribe({
232
+ next: (res) => {
233
+ this.notificationService.toastSuccess(res.item2[0].message);
234
+ this.navigateList(res.item1);
235
+ },
236
+ error: (e) => {
237
+ this.backendError(e);
238
+ },
239
+ });
240
+ }
241
+ /**
242
+ * Método se atualiza o valor de um componente do formGroup
243
+ * @param controName - Nome do controle
244
+ * @param value - Valor para atualização
245
+ */
246
+ setControlValue(controName, value) {
247
+ FormService.setControlValue(this.formGroup, controName, value);
248
+ }
249
+ /**
250
+ * Atualiza valores dos componentes do formGroup
251
+ * @param values - Valores para atualização
252
+ */
253
+ setFormValues(values) {
254
+ this.onSetFormValues = true;
255
+ this.formGroup.patchValue(values, { emitEvent: false });
256
+ this.onSetFormValues = false;
257
+ }
258
+ /**
259
+ * Seta o título do popup
260
+ */
261
+ setTitlePopup() {
262
+ if (this.popup) {
263
+ if (this.dynamicDialogConfig)
264
+ this.dynamicDialogConfig.header = this.dadosTela?.tituloForm;
265
+ }
266
+ }
267
+ /**
268
+ * Atualiza o validador de um componente do formGroup
269
+ * @param controName - Nome do controle
270
+ * @param validators - Regra de validação
271
+ */
272
+ setValidators(controName, validators) {
273
+ FormService.setValidators(this.formGroup, controName, validators);
274
+ }
275
+ /**
276
+ * Dispara os métodos de validações do formulário
277
+ * @returns - True/False
278
+ */
279
+ validateForm() {
280
+ let valid = false;
281
+ if (this.formGroup && this.formGroup.valid) {
282
+ valid = true;
283
+ }
284
+ else {
285
+ this.invalidateForm();
286
+ }
287
+ return valid;
288
+ }
289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseComponentCrudForm, deps: [{ token: i1.DialogService }, { token: i2.NotificationService }, { token: i3.ActivatedRoute }, { token: i1.DynamicDialogRef }, { token: i1.DynamicDialogConfig }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
290
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BaseComponentCrudForm, selector: "ng-component", usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
291
+ }
292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseComponentCrudForm, decorators: [{
293
+ type: Component,
294
+ args: [{
295
+ template: ''
296
+ }]
297
+ }], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.NotificationService }, { type: i3.ActivatedRoute }, { type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }, { type: i3.Router }]; } });
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQWMsYUFBYSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7QUFZdEQsTUFBTSxPQUFnQixxQkFBc0IsU0FBUSxpQkFBaUI7SUFnQm5FLFlBQ0UsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQzlCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxtQkFBd0MsRUFDeEMsTUFBYztRQUN4QixLQUFLLENBRUQsYUFBYSxFQUNiLG1CQUFtQixDQUNwQixDQUFDO1FBUk0sbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBcEJoQix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVmLGNBQVMsR0FBYyxJQUFJLFNBQVMsQ0FBQyxF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O09BR0c7SUFDTyxhQUFhLENBQUMsTUFBVztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLG1CQUFtQjtnQkFDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ08sYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBOEM7UUFDeEYsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sWUFBWTtRQUNwQixJQUFJLEtBQUssR0FBWSxLQUFLLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQzFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDZDthQUFNO1lBQ0wsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOytHQWpWbUIscUJBQXFCO21HQUFyQixxQkFBcUIsMkVBRi9CLEVBQUU7OzRGQUVRLHFCQUFxQjtrQkFIMUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsRUFBRTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSBcInByaW1lbmcvZHluYW1pY2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGNvbWJpbmVMYXRlc3QsIGZpbHRlciwgZmluYWxpemUgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gXCIuLi9jb21wb25lbnRzL3RhYmxlL2FjdGlvbi1pdGVtXCI7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnRDcnVkIH0gZnJvbSBcIi4vYmFzZS1jb21wb25lbnQtY3J1ZFwiO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBsb2FkaW5nIH0gZnJvbSBcIi4uLy4uL2xvYWRlci9sb2FkZXIuc2VydmljZVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEYWRvc1RlbGEge1xyXG4gIHN1YlRpdHVsb0Zvcm06IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICB0aXR1bG9Gb3JtOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcm90YUxpc3Rhcjogc3RyaW5nO1xyXG4gIG1lbnNhZ2VtVmFsaWRhY2FvOiBib29sZWFuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlOiAnJ1xyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbXBvbmVudENydWRGb3JtIGV4dGVuZHMgQmFzZUNvbXBvbmVudENydWQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIHByb3RlY3RlZCBpc0FjY29yZGlvbkV4cGFuZGVkID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIGlzTmV3UmVnaXN0cnkgPSBmYWxzZTtcclxuICBwcm90ZWN0ZWQgaXNTYXZlTG9hZGluZyA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBpc1ZpZXcgPSBmYWxzZTtcclxuXHJcbiAgcHJvdGVjdGVkIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgcHJvdGVjdGVkIGFjdGlvbnM6IEFjdGlvbkl0ZW1bXSA9IFtdO1xyXG5cclxuICBwcm90ZWN0ZWQgZGFkb3NUZWxhOiBEYWRvc1RlbGEgfCB1bmRlZmluZWQ7XHJcbiAgcHJvdGVjdGVkIHBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIHJlZ2lzdHJ5OiBhbnkgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIG9uU2V0Rm9ybVZhbHVlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByb3RlY3RlZCBkeW5hbWljRGlhbG9nUmVmOiBEeW5hbWljRGlhbG9nUmVmLFxyXG4gICAgcHJvdGVjdGVkIGR5bmFtaWNEaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcsXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIpIHtcclxuICAgIHN1cGVyXHJcbiAgICAgIChcclxuICAgICAgICBkaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2VcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgY29uZmlndXJhw6fDo28gZG8gZm9ybVxyXG4gICAqL1xyXG4gIGFic3RyYWN0IGNvbmZpZ3VyZUZvcm0oKTogdm9pZDtcclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyBkaXNwYXJhZG8gcGFyYSBvIGNhcnJlZ2FtZW50byBkbyBmb3JtXHJcbiAgICogQHBhcmFtIGlkXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgbG9hZEZvcm0oaWQ6IGFueSk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgc2FsdmFtZW50byBkb3MgZGFkb3NcclxuICAgKi9cclxuICBhYnN0cmFjdCBzYXZlKCk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gZGlzcGFyYWRvIHBhcmEgdHJhdGFtZW50byBkYXMgbm90aWZpY2HDp8O1ZXMgZG8gYmFja2VuZFxyXG4gICAqIEBwYXJhbSBlcnIgLSBOb3RpZmljYcOnw6NvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGJhY2tlbmRFcnJvcihlcnI6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGVycikge1xyXG4gICAgICBpZiAoZXJyLnN0YXR1cyA9PSA0MDQpIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3IuaXRlbTJbMF0ubWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGVyci5zdGF0dXMgPT0gNDAwKSB7XHJcbiAgICAgICAgLy8gRXJyb3MgZGUgdmFsaWRhw6fDo28gZGUgZG9tw61uaW8gZG8gYmFja2VuZFxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVyci5lcnJvcikpIHtcclxuICAgICAgICAgIGlmIChlcnIuZXJyb3I/Lmxlbmd0aCkge1xyXG5cclxuICAgICAgICAgICAgaWYgKGVyci5lcnJvci5sZW5ndGggPT0gMSAmJiBlcnIuZXJyb3JbMF0ua2V5ID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLmVycm9yWzBdLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRm9ybShlcnIuZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZXJyLmVycm9yLml0ZW0yKSkge1xyXG4gICAgICAgICAgaWYgKGVyci5lcnJvci5pdGVtMj8ubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyLmVycm9yLml0ZW0yLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLmVycm9yLml0ZW0yWzBdLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRm9ybShlcnIuZXJyb3IuaXRlbTIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVyci5lcnJvcj8udGl0bGUpIHtcclxuICAgICAgICAgIC8vIEVycm8gZGUganNvbiBubyBiYWNrZW5kXHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RFcnJvcihlcnIuZXJyb3IudGl0bGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChlcnIuc3RhdHVzID09IDQxNSkge1xyXG4gICAgICAgIGlmIChlcnIuZXJyb3I/LnRpdGxlKSB7XHJcbiAgICAgICAgICAvLyBFcnJvIGRlIGpzb24gbm8gYmFja2VuZFxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLmVycm9yLnRpdGxlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFF1YWxxdWVyIG91dHJvIHRpcG8gZGUgZXJybyBxdWUgdGVuaGEgbWVuc2FnZW1cclxuICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0RXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBhbyBjbGljYXIgbm8gYm90w6NvIGRlIGNhbmNlbGFtZW50b1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UucXVlc3Rpb24oe1xyXG4gICAgICB0eXBlOiAncXVlc3Rpb24nLFxyXG4gICAgICBtZXNzYWdlOiAnRGVzZWphIGNhbmNlbGFyIGEgb3BlcmHDp8Ojbz8nLFxyXG4gICAgICBhY2NlcHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlTGlzdCgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZmljYSBzZSBob3V2ZXJhbSBhbHRlcmHDp8O1ZXMgbm9zIGNvbXBvbmVudGVzIGRvIGZvcm1Db250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xzIC0gTm9tZXMgZG8gY29udHJvbGVzIG5vIGZvcm1Hcm91cFxyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZGV0ZWN0Rm9ybUNvbnRyb2xDaGFuZ2VzKGNvbnRyb2xzOiBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGNvbnRyb2xMaXN0OiBPYnNlcnZhYmxlPGFueT5bXSA9IFtdO1xyXG4gICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sTmFtZSA9PiBjb250cm9sTGlzdC5wdXNoKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZUNoYW5nZXMpKTtcclxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGNvbnRyb2xMaXN0KS5waXBlKGZpbHRlcigoKSA9PiAhdGhpcy5vblNldEZvcm1WYWx1ZXMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE3DqXRvZG8gcmVzcG9uc8OhdmVsIHBvciBkZXNhYmlsaXRhciB1bSBjb21wb25lbnRlXHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIC0gTm9tZSBkbyBjb250cm9sZSBubyBmb3JtR3JvdXBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZGlzYWJsZUNvbXBvbmVudChjb250cm9sTmFtZTogc3RyaW5nKSB7XHJcbiAgICBGb3JtU2VydmljZS5kaXNhYmxlQ29udHJvbCh0aGlzLmZvcm1Hcm91cCwgY29udHJvbE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIGxpbXBhciBlIGRlc2FiaWxpdGFyIHVtIGNvbXBvbmVudGVcclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgLSBOb21lIGRvIGNvbnRyb2xlIG5vIGZvcm1Hcm91cFxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbG9yIGRlZmF1bHRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZGlzYWJsZUFuZENsZWFyQ29tcG9uZW50KGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlPzogYW55KSB7XHJcbiAgICBGb3JtU2VydmljZS5kaXNhYmxlQW5kQ2xlYXJDb250cm9sKHRoaXMuZm9ybUdyb3VwLCBjb250cm9sTmFtZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTcOpdG9kbyByZXNwb25zw6F2ZWwgcG9yIGhhYmlsaXRhciB1bSBjb21wb25lbnRlXHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIC0gTm9tZSBkbyBjb250cm9sZSBubyBmb3JtR3JvdXBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZW5hYmxlQ29tcG9uZW50KGNvbnRyb05hbWU6IHN0cmluZykge1xyXG4gICAgRm9ybVNlcnZpY2UuZW5hYmxlQ29udHJvbCh0aGlzLmZvcm1Hcm91cCwgY29udHJvTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHF1ZSByZXRvcm5hIG8gdmFsb3IgZGUgdW0gY29tcG9uZW50ZVxyXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSAtIE5vbWUgZG8gY29udHJvbGUgbm8gZm9ybUdyb3VwXHJcbiAgICogQHJldHVybnMgLSBWYWxvclxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRGb3JtVmFsdWU8VD4oY29udHJvbE5hbWU6IHN0cmluZyk6IFQge1xyXG4gICAgcmV0dXJuIEZvcm1TZXJ2aWNlLmdldEZvcm1WYWx1ZTxUPih0aGlzLmZvcm1Hcm91cCwgY29udHJvbE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmVyaWZpY2Egc2UgbyBjb21wb25lbnRlIHBvc3N1aSBlcnJvXHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIC0gTm9tZSBkbyBjb250cm9sZSBubyBmb3JtR3JvdXBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaGFzQ29udHJvbEVycm9yKGNvbnRyb2xOYW1lOiBzdHJpbmcsIGVycm9yQ29kZT86IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEZvcm1TZXJ2aWNlLmhhc0NvbnRyb2xFcnJvcih0aGlzLmZvcm1Hcm91cCwgY29udHJvbE5hbWUsIGVycm9yQ29kZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRhIGluY29uc2lzdMOqbmNpYXMgcGFyYSBvIGZvbXVsw6FyaW9cclxuICAgKiBAcGFyYW0gbm90aWZpY2F0aW9uIC0gTGlzdGEgZGUgbm90aWZpY2HDp8O1ZXNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaW52YWxpZEZvcm0obm90aWZpY2F0aW9uPzogYW55KSB7XHJcbiAgICBGb3JtU2VydmljZS5pbnZhbGlkRm9ybSh0aGlzLmZvcm1Hcm91cCwgbm90aWZpY2F0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYXRhbWVudG8gZGUgaW5jb25zaXN0w6puY2lhcyBkbyBmb3JtdWzDoXJpb1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpbnZhbGlkYXRlRm9ybSgpIHtcclxuICAgIHRoaXMuaXNBY2NvcmRpb25FeHBhbmRlZCA9IHRydWU7XHJcbiAgICB0aGlzLmludmFsaWRGb3JtKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGFkb3NUZWxhPy5tZW5zYWdlbVZhbGlkYWNhbykge1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZGlhbG9nKHtcclxuICAgICAgICB0eXBlOiAnYWxlcnQnLFxyXG4gICAgICAgIG1lc3NhZ2U6ICdWZXJpZmlxdWUgb3MgY2FtcG9zIG9icmlnYXTDs3Jpb3MuJyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHJlc3BvbnPDoXZlbCBwZWxvIGNhcnJlZ2FtZW50byBkYSB0ZWxhXHJcbiAgICogQHBhcmFtIG9icyAtIE9ic2VydmFibGUgcmVzcG9uc8OhdmVsIHBlbG8gc2FsdmFtZW50byBkb3MgZGFkb3NcclxuICAgKi9cclxuICBwdWJsaWMgbG9hZERhdGE8VD4ob2JzOiBPYnNlcnZhYmxlPGFueT4pIHtcclxuICAgIG9ic1xyXG4gICAgICAucGlwZShsb2FkaW5nKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNOZXdSZWdpc3RyeSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVnaXN0cnkgPSBkYXRhIGFzIFQ7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMucmVnaXN0cnkpO1xyXG4gICAgICAgIHRoaXMubG9hZEdyaWRzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRUaXRsZVBvcHVwKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZERhdGFBc3luYzxUPihvYnM6IE9ic2VydmFibGU8YW55Pikge1xyXG4gICAgYXdhaXQgb2JzLnBpcGUobG9hZGluZygpKS50b1Byb21pc2UoKTtcclxuICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IG9icy50b1Byb21pc2UoKTtcclxuXHJcbiAgICB0aGlzLmlzTmV3UmVnaXN0cnkgPSBmYWxzZTtcclxuICAgIHRoaXMucmVnaXN0cnkgPSBkYXRhIGFzIFQ7XHJcbiAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5yZWdpc3RyeSk7XHJcbiAgICB0aGlzLmxvYWRHcmlkcygpO1xyXG4gICAgdGhpcy5zZXRUaXRsZVBvcHVwKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIGNhcnJlZ2FtZW50byBkZSBncmlkcyAoRGlzcGFyYWRvIGFww7NzIG8gbG9hZERhdGEpXHJcbiAgICovXHJcbiAgcHVibGljIGxvYWRHcmlkcygpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIHJldG9ybmFyIGEgbGlzdGFcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbmF2aWdhdGVMaXN0KGlkOiBhbnkgPSBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5wb3B1cCkge1xyXG4gICAgICB0aGlzLmR5bmFtaWNEaWFsb2dSZWYuY2xvc2UoaWQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5kYWRvc1RlbGE/LnJvdGFMaXN0YXIpIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGFkb3NUZWxhLnJvdGFMaXN0YXJdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmR5bmFtaWNEaWFsb2dSZWYpIHtcclxuICAgICAgdGhpcy5keW5hbWljRGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUZvcm0oKTtcclxuXHJcbiAgICB0aGlzLnBvcHVwID0gdGhpcy5keW5hbWljRGlhbG9nQ29uZmlnPy5kYXRhPy5wb3B1cCB8fCBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChwYXJhbXNbJ2lkJ10pIHtcclxuICAgICAgICB0aGlzLmxvYWRGb3JtKHBhcmFtc1snaWQnXSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5keW5hbWljRGlhbG9nQ29uZmlnPy5kYXRhPy5pZCkge1xyXG4gICAgICAgIHRoaXMubG9hZEZvcm0odGhpcy5keW5hbWljRGlhbG9nQ29uZmlnLmRhdGEuaWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNOZXdSZWdpc3RyeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkR3JpZHMoKTtcclxuICAgICAgICB0aGlzLnNldFRpdGxlUG9wdXAoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIGRpc3BhcmFkbyBwYXJhIHNhbHZhciBkYWRvc1xyXG4gICAqIEBwYXJhbSBvYnMgLSBPYnNlcnZhYmxlIHJlc3BvbnPDoXZlbCBwZWxvIHNhbHZhbWVudG8gZG9zIGRhZG9zXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNhdmVEYXRhKG9iczogT2JzZXJ2YWJsZTxhbnk+KSB7XHJcbiAgICBvYnNcclxuICAgICAgLnBpcGUoKHNyYzogT2JzZXJ2YWJsZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmVMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gc3JjLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1NhdmVMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFN1Y2Nlc3MocmVzLml0ZW0yWzBdLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUxpc3QocmVzLml0ZW0xKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5iYWNrZW5kRXJyb3IoZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNw6l0b2RvIHNlIGF0dWFsaXphIG8gdmFsb3IgZGUgdW0gY29tcG9uZW50ZSBkbyBmb3JtR3JvdXBcclxuICAgKiBAcGFyYW0gY29udHJvTmFtZSAtIE5vbWUgZG8gY29udHJvbGVcclxuICAgKiBAcGFyYW0gdmFsdWUgLSBWYWxvciBwYXJhIGF0dWFsaXphw6fDo29cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0Q29udHJvbFZhbHVlKGNvbnRyb05hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgRm9ybVNlcnZpY2Uuc2V0Q29udHJvbFZhbHVlKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBdHVhbGl6YSB2YWxvcmVzIGRvcyBjb21wb25lbnRlcyBkbyBmb3JtR3JvdXBcclxuICAgKiBAcGFyYW0gdmFsdWVzIC0gVmFsb3JlcyBwYXJhIGF0dWFsaXphw6fDo29cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyh2YWx1ZXM6IGFueSkge1xyXG4gICAgdGhpcy5vblNldEZvcm1WYWx1ZXMgPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZXMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMub25TZXRGb3JtVmFsdWVzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRhIG8gdMOtdHVsbyBkbyBwb3B1cFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VGl0bGVQb3B1cCgpIHtcclxuICAgIGlmICh0aGlzLnBvcHVwKSB7XHJcbiAgICAgIGlmICh0aGlzLmR5bmFtaWNEaWFsb2dDb25maWcpXHJcbiAgICAgICAgdGhpcy5keW5hbWljRGlhbG9nQ29uZmlnLmhlYWRlciA9IHRoaXMuZGFkb3NUZWxhPy50aXR1bG9Gb3JtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXR1YWxpemEgbyB2YWxpZGFkb3IgZGUgdW0gY29tcG9uZW50ZSBkbyBmb3JtR3JvdXBcclxuICAgKiBAcGFyYW0gY29udHJvTmFtZSAtIE5vbWUgZG8gY29udHJvbGVcclxuICAgKiBAcGFyYW0gdmFsaWRhdG9ycyAtIFJlZ3JhIGRlIHZhbGlkYcOnw6NvXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNldFZhbGlkYXRvcnMoY29udHJvTmFtZTogc3RyaW5nLCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10gfCBudWxsKSB7XHJcbiAgICBGb3JtU2VydmljZS5zZXRWYWxpZGF0b3JzKHRoaXMuZm9ybUdyb3VwLCBjb250cm9OYW1lLCB2YWxpZGF0b3JzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BhcmEgb3MgbcOpdG9kb3MgZGUgdmFsaWRhw6fDtWVzIGRvIGZvcm11bMOhcmlvXHJcbiAgICogQHJldHVybnMgLSBUcnVlL0ZhbHNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRlRm9ybSgpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCAmJiB0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludmFsaWRhdGVGb3JtKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gIH1cclxufVxyXG4iXX0=