ngx-sp-auth 0.0.0-watch

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 (108) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/auth.module.mjs +87 -0
  3. package/esm2022/lib/auth.service.mjs +306 -0
  4. package/esm2022/lib/components/login/login.component.mjs +326 -0
  5. package/esm2022/lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component.mjs +68 -0
  6. package/esm2022/lib/components/menu-lateral/dropdown/secondary-dropdown/secondary-dropdown.component.mjs +32 -0
  7. package/esm2022/lib/components/menu-lateral/menu/list-estab.service.mjs +55 -0
  8. package/esm2022/lib/components/menu-lateral/menu/menu-lateral.component.mjs +235 -0
  9. package/esm2022/lib/components/menu-lateral/menu/selecao-estabelecimentos-modal/selecao-estabelecimentos-modal.component.mjs +200 -0
  10. package/esm2022/lib/components/menu-lateral/menu-services.service.mjs +151 -0
  11. package/esm2022/lib/components/menu-lateral/model/iestabelecimento.model.mjs +2 -0
  12. package/esm2022/lib/components/menu-lateral/model/imenu-item-structure.model.mjs +2 -0
  13. package/esm2022/lib/components/menu-lateral/model/imenu.model.mjs +12 -0
  14. package/esm2022/lib/components/menu-lateral/model/infrausuarioimg.mjs +12 -0
  15. package/esm2022/lib/components/menu-lateral/model/isubmenu-item-structure.model.mjs +2 -0
  16. package/esm2022/lib/components/menu-lateral/model/ret-estabelecimento-session.mjs +10 -0
  17. package/esm2022/lib/components/menu-lateral/model/ret-infrausuarioemail.mjs +8 -0
  18. package/esm2022/lib/components/menu-lateral/model/ret-infrausuarioimg.mjs +11 -0
  19. package/esm2022/lib/components/menu-lateral/model/usuario-img.mjs +8 -0
  20. package/esm2022/lib/components/menu-lateral/submenus/dynamic-menu/dynamic-menu.component.mjs +54 -0
  21. package/esm2022/lib/components/menu-lateral/submenus/notif-submenu/notif-submenu.component.mjs +14 -0
  22. package/esm2022/lib/components/nova-senha/nova-senhacomponent.mjs +191 -0
  23. package/esm2022/lib/custom/custom-login.service.mjs +52 -0
  24. package/esm2022/lib/custom/custom-menu.service.mjs +88 -0
  25. package/esm2022/lib/custom/menu-config.service.mjs +70 -0
  26. package/esm2022/lib/custom/models/icustom-login-service.mjs +2 -0
  27. package/esm2022/lib/custom/models/icustom-menu-service.mjs +2 -0
  28. package/esm2022/lib/custom/models/imenu-config.mjs +2 -0
  29. package/esm2022/lib/environments/environments.service.mjs +21 -0
  30. package/esm2022/lib/environments/models/ienvironments.mjs +2 -0
  31. package/esm2022/lib/guards/auth-guard.mjs +34 -0
  32. package/esm2022/lib/guards/external-login-guard.mjs +88 -0
  33. package/esm2022/lib/guards/login-guard.mjs +35 -0
  34. package/esm2022/lib/interceptors/auth-aplic.interceptor.mjs +41 -0
  35. package/esm2022/lib/interceptors/auth-infra.interceptor.mjs +30 -0
  36. package/esm2022/lib/models/code-2fa.mjs +2 -0
  37. package/esm2022/lib/models/custom-propriedades-login.mjs +3 -0
  38. package/esm2022/lib/models/forgotten-password-form.mjs +2 -0
  39. package/esm2022/lib/models/login-form.mjs +2 -0
  40. package/esm2022/lib/models/login.mjs +2 -0
  41. package/esm2022/lib/models/nova-senha-form.mjs +2 -0
  42. package/esm2022/lib/models/password-recup.mjs +2 -0
  43. package/esm2022/lib/models/payload.mjs +2 -0
  44. package/esm2022/lib/models/ret-login.mjs +21 -0
  45. package/esm2022/lib/models/ret-token.mjs +8 -0
  46. package/esm2022/lib/models/token.mjs +2 -0
  47. package/esm2022/lib/server/ret-server-config.mjs +9 -0
  48. package/esm2022/lib/server/server.service.mjs +38 -0
  49. package/esm2022/lib/storage/auth-storage.service.mjs +409 -0
  50. package/esm2022/ngx-sp-auth.mjs +5 -0
  51. package/esm2022/public-api.mjs +37 -0
  52. package/fesm2022/ngx-sp-auth.mjs +2520 -0
  53. package/fesm2022/ngx-sp-auth.mjs.map +1 -0
  54. package/index.d.ts +5 -0
  55. package/lib/auth.module.d.ts +21 -0
  56. package/lib/auth.service.d.ts +42 -0
  57. package/lib/components/login/login.component.d.ts +67 -0
  58. package/lib/components/menu-lateral/dropdown/primary-dropdown/primary-dropdown.component.d.ts +20 -0
  59. package/lib/components/menu-lateral/dropdown/secondary-dropdown/secondary-dropdown.component.d.ts +12 -0
  60. package/lib/components/menu-lateral/menu/list-estab.service.d.ts +19 -0
  61. package/lib/components/menu-lateral/menu/menu-lateral.component.d.ts +74 -0
  62. package/lib/components/menu-lateral/menu/selecao-estabelecimentos-modal/selecao-estabelecimentos-modal.component.d.ts +71 -0
  63. package/lib/components/menu-lateral/menu-services.service.d.ts +31 -0
  64. package/lib/components/menu-lateral/model/iestabelecimento.model.d.ts +4 -0
  65. package/lib/components/menu-lateral/model/imenu-item-structure.model.d.ts +12 -0
  66. package/lib/components/menu-lateral/model/imenu.model.d.ts +40 -0
  67. package/lib/components/menu-lateral/model/infrausuarioimg.d.ts +9 -0
  68. package/lib/components/menu-lateral/model/isubmenu-item-structure.model.d.ts +9 -0
  69. package/lib/components/menu-lateral/model/ret-estabelecimento-session.d.ts +8 -0
  70. package/lib/components/menu-lateral/model/ret-infrausuarioemail.d.ts +6 -0
  71. package/lib/components/menu-lateral/model/ret-infrausuarioimg.d.ts +9 -0
  72. package/lib/components/menu-lateral/model/usuario-img.d.ts +5 -0
  73. package/lib/components/menu-lateral/submenus/dynamic-menu/dynamic-menu.component.d.ts +25 -0
  74. package/lib/components/menu-lateral/submenus/notif-submenu/notif-submenu.component.d.ts +8 -0
  75. package/lib/components/nova-senha/nova-senhacomponent.d.ts +48 -0
  76. package/lib/custom/custom-login.service.d.ts +38 -0
  77. package/lib/custom/custom-menu.service.d.ts +48 -0
  78. package/lib/custom/menu-config.service.d.ts +32 -0
  79. package/lib/custom/models/icustom-login-service.d.ts +13 -0
  80. package/lib/custom/models/icustom-menu-service.d.ts +10 -0
  81. package/lib/custom/models/imenu-config.d.ts +7 -0
  82. package/lib/environments/environments.service.d.ts +11 -0
  83. package/lib/environments/models/ienvironments.d.ts +4 -0
  84. package/lib/guards/auth-guard.d.ts +14 -0
  85. package/lib/guards/external-login-guard.d.ts +21 -0
  86. package/lib/guards/login-guard.d.ts +24 -0
  87. package/lib/interceptors/auth-aplic.interceptor.d.ts +22 -0
  88. package/lib/interceptors/auth-infra.interceptor.d.ts +16 -0
  89. package/lib/models/code-2fa.d.ts +4 -0
  90. package/lib/models/custom-propriedades-login.d.ts +11 -0
  91. package/lib/models/forgotten-password-form.d.ts +5 -0
  92. package/lib/models/login-form.d.ts +5 -0
  93. package/lib/models/login.d.ts +4 -0
  94. package/lib/models/nova-senha-form.d.ts +5 -0
  95. package/lib/models/password-recup.d.ts +5 -0
  96. package/lib/models/payload.d.ts +9 -0
  97. package/lib/models/ret-login.d.ts +20 -0
  98. package/lib/models/ret-token.d.ts +6 -0
  99. package/lib/models/token.d.ts +8 -0
  100. package/lib/server/ret-server-config.d.ts +7 -0
  101. package/lib/server/server.service.d.ts +14 -0
  102. package/lib/storage/auth-storage.service.d.ts +90 -0
  103. package/package.json +25 -0
  104. package/public-api.d.ts +36 -0
  105. package/src/assets/imgs/Property1-cadeado.png +0 -0
  106. package/src/assets/imgs/Property1-calendariofino.png +0 -0
  107. package/src/assets/imgs/Property1-mao.png +0 -0
  108. package/src/assets/styles/styles.novo.scss +0 -0
@@ -0,0 +1,326 @@
1
+ import { Component } from '@angular/core';
2
+ import { FormGroup, Validators } from '@angular/forms';
3
+ import { map, Subscription, take, timer } from 'rxjs';
4
+ //import { CustomLoginService } from 'src/app/project/custom/login/custom-login.service';
5
+ import { FormUtils } from 'ngx-sp-infra';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "ngx-bootstrap/modal";
8
+ import * as i2 from "ngx-sp-infra";
9
+ import * as i3 from "@angular/forms";
10
+ import * as i4 from "../../auth.service";
11
+ import * as i5 from "../../server/server.service";
12
+ import * as i6 from "../../environments/environments.service";
13
+ import * as i7 from "../../storage/auth-storage.service";
14
+ import * as i8 from "../../custom/custom-login.service";
15
+ import * as i9 from "@angular/platform-browser";
16
+ import * as i10 from "@angular/router";
17
+ import * as i11 from "ngx-toastr";
18
+ import * as i12 from "@angular/common";
19
+ export class LoginComponent {
20
+ constructor(
21
+ //public _customLoginService: CustomLoginService,
22
+ _bsModalService, _messageService, _formBuilder, _authService, _serverService, _environmentService, _authStorageService, _customLoginService, _title, _router, _toastrService) {
23
+ this._bsModalService = _bsModalService;
24
+ this._messageService = _messageService;
25
+ this._formBuilder = _formBuilder;
26
+ this._authService = _authService;
27
+ this._serverService = _serverService;
28
+ this._environmentService = _environmentService;
29
+ this._authStorageService = _authStorageService;
30
+ this._customLoginService = _customLoginService;
31
+ this._title = _title;
32
+ this._router = _router;
33
+ this._toastrService = _toastrService;
34
+ // #region ==========> PROPERTIES <==========
35
+ // #region PRIVATE
36
+ this.idFgtPsw = 1;
37
+ // Variáveis específicas para funcionalidades padrões dos formulários
38
+ this.currentTime = new Date();
39
+ this.year = this.currentTime.getFullYear();
40
+ this.isLoading = false;
41
+ this.isLoadingSendAuthentication2Fa = false;
42
+ this.showParmsAuthentication2Fa = false;
43
+ this.isLoadingGetNewCode = false;
44
+ //propriedades que vão receber os valores do customLoginService ####VERIFICAR DEPOIS####
45
+ // @Input() customPropriedadesLogin?: CustomPropriedadesLogin;
46
+ // #endregion PUBLIC
47
+ // #region Timer
48
+ this._subscription = new Subscription();
49
+ this.timerDuration = 90;
50
+ this.secondsLeft = this.timerDuration;
51
+ this.countdown$ = timer(0, 1000).pipe(take(this.timerDuration + 1), map(secondsElapsed => this.timerDuration - secondsElapsed));
52
+ // #endregion Timer
53
+ // #region ==========> FORM BUILDER <==========
54
+ this.form = new FormGroup({});
55
+ this.formFgtPsw = new FormGroup({});
56
+ this.formAuthentication2Fa = new FormGroup({});
57
+ }
58
+ ;
59
+ ;
60
+ // Propriedade necessário para que a classe static FormUtils possa ser utilizada no Html
61
+ get FormUtils() {
62
+ return FormUtils;
63
+ }
64
+ // #region FORM DATA
65
+ // Variáveis específicas para funcionalidades padrões dos formulários (Login)
66
+ get dominio() {
67
+ return this.form.get('dominio')?.value;
68
+ }
69
+ get usuario() {
70
+ return this.form.get('usuario')?.value;
71
+ }
72
+ get senha() {
73
+ return this.form.get('senha')?.value;
74
+ }
75
+ // Variáveis específicas para funcionalidades padrões dos formulários (RequestRecoverPassword)
76
+ get dominioFgtPsw() {
77
+ return this.formFgtPsw.get('dominioFgtPsw')?.value;
78
+ }
79
+ get usuarioFgtPsw() {
80
+ return this.formFgtPsw.get('usuarioFgtPsw')?.value;
81
+ }
82
+ // Variáveis específicas para funcionalidades padrões dos formulários (Autenticação 2 Fatores)
83
+ get code() {
84
+ return this.formAuthentication2Fa.get('code')?.value;
85
+ }
86
+ // #endregion FORM DATA
87
+ // #endregion ==========> PROPERTIES <==========
88
+ ngOnInit() {
89
+ this._title.setTitle(this._customLoginService.loginPageTitle);
90
+ if (this._customLoginService.loginTitle != "") {
91
+ document.getElementById("title").innerHTML = this._customLoginService.loginTitle;
92
+ }
93
+ if (this._customLoginService.loginSubtitle != "") {
94
+ document.getElementById("subtitle").innerHTML = this._customLoginService.loginSubtitle;
95
+ }
96
+ this.createForm();
97
+ }
98
+ // #region FORM VALIDATORS
99
+ // Método para configuração dos campos de edição do formulário (Login)
100
+ createForm() {
101
+ // Dados originais de Login
102
+ if (this._environmentService.production) {
103
+ this.form = this._formBuilder.group({
104
+ dominio: ['', [Validators.required, Validators.maxLength(50)]],
105
+ usuario: ['', [Validators.required, Validators.maxLength(100)]],
106
+ senha: ['', [Validators.required, Validators.maxLength(100)]]
107
+ });
108
+ }
109
+ else {
110
+ this.form = this._formBuilder.group({
111
+ dominio: [this._customLoginService.loginDesenvDomain, [Validators.required, Validators.maxLength(50)]],
112
+ usuario: [this._customLoginService.loginDesenvUser, [Validators.required, Validators.maxLength(100)]],
113
+ senha: [this._customLoginService.loginDesenvPassword, [Validators.required, Validators.maxLength(100)]]
114
+ });
115
+ }
116
+ }
117
+ // Método para configuração dos campos de edição do formulário (RequestRecoverPassword)
118
+ createFormForgottenPassword() {
119
+ this.formFgtPsw = this._formBuilder.group({
120
+ dominioFgtPsw: ['', [Validators.required, Validators.maxLength(50)]],
121
+ usuarioFgtPsw: ['', [Validators.required, Validators.maxLength(100)]],
122
+ });
123
+ this.formFgtPsw.get('recoverCdominioFgtPswodeRecPsw')?.setValue('');
124
+ this.formFgtPsw.get('usuarioFgtPsw')?.setValue('');
125
+ }
126
+ // Método para configuração dos campos de edição do formulário (Autenticação 2 Fatores)
127
+ createFormAuthentication2Fa() {
128
+ this.formAuthentication2Fa = this._formBuilder.group({
129
+ code: ['', [Validators.required, Validators.maxLength(6)]],
130
+ });
131
+ this.form.get('code')?.setValue('');
132
+ }
133
+ // #endregion FORM VALIDATORS
134
+ // #endregion ==========> FORM BUILDER <==========
135
+ // #region ==========> SERVICE METHODS <==========
136
+ // #region GET
137
+ // Obtém a Url do Config Erp
138
+ geturlErpConfig() {
139
+ // verificar depois
140
+ return `${this._environmentService.hostName}/SisproErpCloud/ConfigErp`;
141
+ }
142
+ /*
143
+ * Obtém os parâmetros de configuração do servidor para Autenticação Básica de segurança
144
+ */
145
+ getServer() {
146
+ if (this.form.valid) {
147
+ this.isLoading = true;
148
+ this._serverService.getServer().subscribe({
149
+ next: response => {
150
+ this.logOn();
151
+ },
152
+ error: (error) => {
153
+ this.isLoading = false;
154
+ //this._projectUtilservice.showHttpError(error);
155
+ this._messageService.showAlertDanger(error);
156
+ //pode ser substituido por console.error
157
+ throw new Error(error);
158
+ },
159
+ });
160
+ }
161
+ else {
162
+ FormUtils.validateFields(this.form);
163
+ }
164
+ }
165
+ // #endregion GET
166
+ // #region POST
167
+ // Executa o Login
168
+ logOn() {
169
+ this._authService.login(this.form.value).subscribe({
170
+ next: (response) => {
171
+ this.isLoading = false;
172
+ if (response.FeedbackMessage != "") {
173
+ this._toastrService.warning(response.FeedbackMessage, '', {
174
+ timeOut: 3000,
175
+ extendedTimeOut: 2000
176
+ });
177
+ return;
178
+ }
179
+ //Incialização de Senha
180
+ if (response.InitializePassword) {
181
+ let param = btoa(`true$${this.dominio}$${this.usuario}`);
182
+ this._router.navigate([`auth/login/novaSenha/${param}`]);
183
+ this._toastrService.success("Verifique no seu e-mail o código de validação.");
184
+ }
185
+ if (response.InfraInAuthTypeId == 1 && response.InfraIn2FaTypeId != null && response.InfraIn2FaTypeId == 1 && response.Is2FaEnabled) {
186
+ this.createFormAuthentication2Fa();
187
+ this._subscription = this.countdown$.subscribe(secondsLeft => {
188
+ this.secondsLeft = secondsLeft;
189
+ });
190
+ this.showParmsAuthentication2Fa = true;
191
+ this._toastrService.success("Verifique no seu e-mail o código de validação.");
192
+ }
193
+ },
194
+ error: (error) => {
195
+ this.isLoading = false;
196
+ //this._projectUtilservice.showHttpError(error);
197
+ this._messageService.showAlertDanger(error);
198
+ throw new Error(error);
199
+ },
200
+ });
201
+ }
202
+ // Envia requisição para esquecer senha
203
+ sendForgottenPassword() {
204
+ if (this.formFgtPsw.valid) {
205
+ this._serverService.getServer().subscribe({
206
+ next: response => {
207
+ this.forgottenPassword();
208
+ },
209
+ error: (error) => {
210
+ //this._projectUtilservice.showHttpError(error);
211
+ this._messageService.showAlertDanger(error);
212
+ throw new Error(error);
213
+ },
214
+ });
215
+ }
216
+ else {
217
+ FormUtils.validateFields(this.formFgtPsw);
218
+ }
219
+ }
220
+ // Requisição para esquecer senha
221
+ forgottenPassword() {
222
+ this._authService.forgottenPassword(this.formFgtPsw.value).subscribe({
223
+ next: (response) => {
224
+ this.closeForgottenPasswordModal();
225
+ let param = btoa(`false$${this.dominio}$${this.usuario}$${3}`);
226
+ this._router.navigate([`auth/login/novaSenha/${param}`]);
227
+ this._toastrService.success("Verifique no seu e-mail o código de validação.");
228
+ },
229
+ error: (error) => {
230
+ //this._projectUtilservice.showHttpError(error);
231
+ this._messageService.showAlertDanger(error);
232
+ throw new Error(error);
233
+ },
234
+ });
235
+ }
236
+ // Envia requisição para validar código 2 fatores
237
+ sendCode() {
238
+ if (this.formAuthentication2Fa.valid) {
239
+ this.isLoadingSendAuthentication2Fa = true;
240
+ this.validateCode();
241
+ }
242
+ else {
243
+ FormUtils.validateFields(this.formAuthentication2Fa);
244
+ }
245
+ }
246
+ // Validação do código 2 fatores
247
+ validateCode() {
248
+ this._authService.validateAuthentication2Fa(this.code).subscribe({
249
+ next: (response) => {
250
+ this._subscription.unsubscribe();
251
+ this.isLoadingSendAuthentication2Fa = false;
252
+ },
253
+ error: (error) => {
254
+ this.isLoadingSendAuthentication2Fa = false;
255
+ //this._projectUtilservice.showHttpError(error);
256
+ this._messageService.showAlertDanger(error);
257
+ throw new Error(error);
258
+ },
259
+ });
260
+ }
261
+ // Envia requisição para validar código 2 fatores
262
+ getNewCode() {
263
+ this.isLoadingGetNewCode = true;
264
+ this._serverService.getServer().subscribe({
265
+ next: response => {
266
+ this._subscription = this.countdown$.subscribe(secondsLeft => {
267
+ this.secondsLeft = secondsLeft;
268
+ });
269
+ this.GetNewCode2Fa();
270
+ },
271
+ error: (error) => {
272
+ //this._projectUtilservice.showHttpError(error);
273
+ this._messageService.showAlertDanger(error);
274
+ throw new Error(error);
275
+ },
276
+ });
277
+ }
278
+ // Validação do código 2 fatores
279
+ GetNewCode2Fa() {
280
+ this._authService.GetNewCode2Fa().subscribe({
281
+ next: (response) => {
282
+ this.isLoadingGetNewCode = false;
283
+ this._toastrService.success("Enviamos um novo código para o endereço de e-mail vinculado ao seu usuário. Verifique o lixo eletrônico (SPAM) da sua caixa de entrada, caso não tenha encontrado nossa mensagem.");
284
+ },
285
+ error: (error) => {
286
+ this.isLoadingGetNewCode = false;
287
+ //this._projectUtilservice.showHttpError(error);
288
+ this._messageService.showAlertDanger(error);
289
+ throw new Error(error);
290
+ },
291
+ });
292
+ }
293
+ // #endregion POST
294
+ // #region UTILIDADES
295
+ // Retorno para a tela de login
296
+ voltar() {
297
+ this._subscription.unsubscribe();
298
+ this.showParmsAuthentication2Fa = false;
299
+ this._authStorageService.logout();
300
+ this._router.navigate(["/auth/login"]);
301
+ }
302
+ // #endregion UTILIDADES
303
+ // #endregion ==========> SERVICE METHODS <==========
304
+ // #region ==========> MODALS <==========
305
+ // Executa esquecer senha
306
+ openForgottenPasswordModal(template) {
307
+ this.createFormForgottenPassword();
308
+ this.modalRef = this._bsModalService.show(template, {
309
+ class: 'modal-dialog-centered',
310
+ ignoreBackdropClick: false,
311
+ keyboard: false,
312
+ id: this.idFgtPsw
313
+ });
314
+ }
315
+ // Encerra esquecer senha
316
+ closeForgottenPasswordModal() {
317
+ this._bsModalService.hide(this.idFgtPsw);
318
+ }
319
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoginComponent, deps: [{ token: i1.BsModalService }, { token: i2.MessageService }, { token: i3.FormBuilder }, { token: i4.AuthService }, { token: i5.ServerService }, { token: i6.EnvironmentService }, { token: i7.AuthStorageService }, { token: i8.LibCustomLoginService }, { token: i9.Title }, { token: i10.Router }, { token: i11.ToastrService }], target: i0.ɵɵFactoryTarget.Component }); }
320
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoginComponent, selector: "lib-login", ngImport: i0, template: "<div class=\"container-fluid\">\r\n\t<div class=\"row\">\r\n\t\t<!-- Conte\u00FAdo da DIV do background -->\r\n\t\t<div class=\"col-md-7\">\r\n\t\t\t<div class=\"background\" style=\"background-image: linear-gradient(to bottom, rgba(10, 44, 81, 0.9), rgba(10, 44, 81, 0.9)), url({{_customLoginService.loginBackground}})\">\r\n\t\t\t\t<div class=\"text-position texto-apresentacao ps-5\">\r\n\t\t\t\t\t<h1 class=\"title\" id=\"title\"></h1>\r\n\t\t\t\t\t<p class=\"subtitle\" id=\"subtitle\"></p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<!-- Conte\u00FAdo da DIV de Login -->\r\n\t\t<div class=\"col-md-5\">\r\n\r\n\t\t\t<div class=\"div-size\">\r\n\t\t\t\t<div class=\"logotipo\">\r\n\t\t\t\t\t<img style=\"height: 95px;\" src=\"{{ this._customLoginService.loginLogotipo }}\" alt=\"{{ this._customLoginService.loginAltLogotipo }}\" />\r\n\t\t\t\t</div>\r\n\t\t\t\t<form *ngIf=\"!showParmsAuthentication2Fa; else Authentication2Fa\" [formGroup]=\"form\" class=\"form-position\">\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"basic-addon1\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/cloud.svg\" alt=\"cloud icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"dominio\" id=\"dominio\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Dom\u00EDnio\" aria-label=\"Dom\u00EDnio\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('dominio'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('dominio')\" label=\"Dom\u00EDnio\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/at-sign.svg\" alt=\"at-sign icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"usuario\" id=\"usuario\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Usu\u00E1rio\" aria-label=\"Usu\u00E1rio\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('usuario'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('usuario')\" label=\"Usu\u00E1rio\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\" style=\"margin-bottom: 8px;\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px;\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/lock.svg\" alt=\"lock-icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"password\" class=\"form-control\" formControlName=\"senha\" id=\"senha\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Senha\" aria-label=\"senha\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('senha'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('senha')\" label=\"Senha\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"remember-password\">\r\n\t\t\t\t\t<!-- Lembrar Senha\r\n\t\t\t\t\t\t<input id=\"checkboxLembrarSenha\" type=\"checkbox\" />\r\n\t\t\t\t\t\t<label for=\"checkboxLembrarSenha\"> Lembrar minha senha </label>\r\n \t\t\t\t\t-->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<button [disabled]=\"isLoading\" (click)=\"getServer()\" type=\"submit\"\r\n\t\t\t\t\t\tclass=\"btn btn-primary btn-acessar btn-lg\">\r\n\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoading\"></app-loading-button>\r\n\t\t\t\t\t\t<span> Acessar </span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button type=\"button\" (click)=\"openForgottenPasswordModal(forgottenPasswordModal)\" class=\"forgotten-password\">\r\n\t\t\t\t\t\t<span> Esqueceu sua senha? </span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</form>\r\n\r\n\t\t\t\t<ng-template #Authentication2Fa>\r\n\t\t\t\t\t<form [formGroup]=\"formAuthentication2Fa\" class=\"form-position\">\r\n\t\t\t\t\t\t<div class=\"input-group input-group-lg form-item mb-3\">\r\n\t\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px;\">\r\n\t\t\t\t\t\t\t\t<img src=\"assets/icons/lock.svg\" alt=\"lock-icon\" />\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"code\" id=\"code\"\r\n\t\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"C\u00F3digo de 2 fatores\" aria-label=\"C\u00F3digo de 2 fatores\"\r\n\t\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formAuthentication2Fa.get('code'))\">\r\n\t\t\t\t\t\t\t<app-field-error-message [control]=\"formAuthentication2Fa.get('code')\" label=\"C\u00F3digo de 2 fatores\"></app-field-error-message>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"row mb-3\">\r\n\t\t\t\t\t\t\t<button (click)=\"voltar()\" type=\"button\" class=\"btn btn-acessar glb-btn-outline-dark-disabled col me-1\">\r\n\t\t\t\t\t\t\t\tVoltar\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button [disabled]=\"isLoadingSendAuthentication2Fa\" (click)=\"sendCode()\" type=\"button\" class=\"btn btn-acessar btn-primary col ms-1\">\r\n\t\t\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoadingSendAuthentication2Fa\"></app-loading-button>\r\n\t\t\t\t\t\t\t\tAcessar\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t<button *ngIf=\"secondsLeft == 0; else newCode\" \r\n\t\t\t\t\t\t\t\t[disabled]=\"isLoading\" (click)=\"getNewCode()\" type=\"button\" class=\"btn btn-acessar btn-outline-primary col\">\r\n\t\t\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoading\"></app-loading-button>\r\n\t\t\t\t\t\t\t\tEnviar novo c\u00F3digo\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<ng-template #newCode>\r\n\t\t\t\t\t\t\t\t<p class=\"text-center\">{{ secondsLeft}} {{ secondsLeft == 1 ? 'segundo' : 'segundos' }} para obter novo c\u00F3digo</p>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</form>\t\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t\r\n\t\t\t\t<div class=\"footer-position\">\r\n\t\t\t\t\t<footer>\r\n\t\t\t\t\t\t<span class=\"footer\"> \r\n\t\t\t\t\t\t\t<a href=\"https://dpo.privacytools.com.br/policy-view/JmGeNlJdw/1/poli%CC%81tica-de-privacidade/pt_BR?s=1685731510066\" target=\"_blank\" class=\"sispro text-primary\"> Pol\u00EDtica de Privacidade </a>\r\n\t\t\t\t\t\t\t<p class=\"separator\"> | </p>\r\n\t\t\t\t\t\t\t<a href=\"https://dpo.privacytools.com.br/policy-view/Rork35NN2/2/poli%CC%81tica-de-cookies/pt_BR?s=1685731551976\" target=\"_blank\" class=\"sispro text-primary\"> Pol\u00EDtica de Cookies </a>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"footer\"> Desenvolvido por \r\n\t\t\t\t\t\t\t<a href=\"https://www.sispro.com.br/\" target=\"_blank\" class=\"sispro text-primary\"> sispro s/a </a>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"footer\"> Servi\u00E7os e Tecnologia da informa\u00E7\u00E3o \u00A9 {{ year }} Todos os direitos reservados </span>\r\n\t\t\t\t\t\t\t<div class=\"icons\">\r\n\t\t\t\t\t\t\t\t<a href=\"https://pt-br.facebook.com/SisproERP/\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"facebook\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t<a href=\"https://www.instagram.com/accounts/login/?next=/sispro_software/\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"instagram\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t<a href=\"https://br.linkedin.com/company/sispro\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"linkedin\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<div class=\"d-flex justify-content-center\">\r\n\t\t\t\t\t\t\t\t<a [href]=\"geturlErpConfig()\" style=\"text-decoration: none; font-size: 12px;\">\r\n\t\t\t\t\t\t\t\t\tConfigurar ERP\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</footer>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n<!-- Template do modal de senha esquecida -->\r\n<ng-template #forgottenPasswordModal>\r\n\t<form [formGroup]=\"formFgtPsw\">\r\n\t\t<div class=\"modal-content\" style=\"box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.5);\">\r\n\t\t\t<div class=\"modal-header p-3\">\r\n\t\t\t\t<h4 class=\"modal-title\"> Recupera\u00E7\u00E3o de senha </h4>\r\n\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\r\n\t\t\t\t\t(click)=\"closeForgottenPasswordModal()\">\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"modal-body\">\r\n\t\t\t\t<label for=\"inputDominioFgtPsw\" class=\"input-label\"> Dom\u00EDnio <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t<input type=\"text\" id=\"inputDominioFgtPsw\" formControlName=\"dominioFgtPsw\"\r\n\t\t\t\t\tclass=\"form-control input-text\" aria-label=\"Sizing example input\" aria-label=\"Dom\u00EDnio\"\r\n\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formFgtPsw.get('dominioFgtPsw'))\">\r\n\t\t\t\t<app-field-error-message [control]=\"formFgtPsw.get('dominioFgtPsw')\" label=\"Dom\u00EDnio\"></app-field-error-message>\t\t\t\t\r\n\r\n\t\t\t\t<label for=\"inputUsuarioFgtPsw\" class=\"input-label\"> Usu\u00E1rio <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t<input type=\"text\" id=\"inputUsuarioFgtPsw\" formControlName=\"usuarioFgtPsw\"\r\n\t\t\t\t\tclass=\"form-control input-text\" aria-label=\"Sizing example input\" aria-label=\"Usu\u00E1rio\"\r\n\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formFgtPsw.get('usuarioFgtPsw'))\">\r\n\t\t\t\t<app-field-error-message [control]=\"formFgtPsw.get('usuarioFgtPsw')\" label=\"Usu\u00E1rio\"></app-field-error-message>\t\t\t\t\r\n\t\t\r\n\t\t\t</div>\r\n\t\t\t<div class=\"modal-footer\">\r\n\t\t\t\t<button type=\"button\" class=\"btn glb-btn-dark-disabled modal-button\" (click)=\"closeForgottenPasswordModal()\">\r\n\t\t\t\t\t<span> Cancelar </span>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button type=\"button\" class=\"btn btn-primary modal-button\" (click)=\"sendForgottenPassword();\">\r\n\t\t\t\t\t<span> Continuar </span>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t</div>\r\n\t</form>\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";*{padding:0;margin:0;font-family:Open Sans,sans-serif}.background{display:grid;height:100vh;align-content:center;background-size:cover;color:#f5f5f5;align-items:center;justify-content:center}.div-size{display:flex;flex-direction:column;justify-content:space-around;width:100%;height:100vh;align-items:center;background-color:#f5f5f5;box-shadow:0 0 15px #333}.title{font-size:3.5vw;text-transform:uppercase;font-weight:700}.subtitle{font-size:21px}.logotipo{display:flex;justify-content:center;margin-top:10%}.form-position{display:flex;flex-direction:column;align-content:center;width:378px}.form-item{margin-bottom:16px}.input-group-text{padding:10px 11px;border-radius:4px 0 0 4px}.remember-password{display:flex;align-items:center;margin-bottom:8px;justify-content:center}.remember-password label{margin-left:8px}.forgotten-password{background-color:#f5f5f5;border:none;text-decoration:underline;font-size:14px;box-shadow:none;margin-top:8px;cursor:pointer}.forgotten-password:focus{outline-style:none}.input-label{font-size:16px;padding:10px 0 8px 16px}.input-label:first-child{font-size:16px;padding-top:16px}.input-text{width:343px;height:38px;margin:0 0 10px 16px;padding:0 8px}.input-text:last-child{font-size:16px;margin-bottom:24px}.form-control{max-width:341px}.footer{display:flex;justify-content:center}.footer-position{font-size:14px;display:flex;justify-content:center;align-items:flex-end}.icons{display:flex;justify-content:center;align-items:center;margin-top:16px}.icons a{padding:4px}.icon-item{margin-left:24px;color:#007bff}.sispro{color:#2847a0;margin-left:5px;text-transform:uppercase;text-decoration:none;font-weight:700}.modal-footer{padding:0}.modal:before{content:\"\";display:inline-block;height:100%;vertical-align:middle}.modal-style{display:flex;align-items:center;justify-content:center}.modal-style h4{font-size:20px;font-weight:700;padding:10px}.modal-button{margin:16px 0;padding:7px 12px}.modal-button:last-child{margin-right:16px;margin-left:8px}.modal-close{display:flex;align-content:center;margin-right:10px;padding:6px}.col-md-7,.col-md-5{padding:0}.btn-acessar{height:48px;outline-style:none}.texto-apresentacao{align-items:start}.separator{margin-left:5px}\n"], dependencies: [{ kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.FieldErrorMessageComponent, selector: "app-field-error-message, lib-error-message", inputs: ["customMessage", "control", "label"] }, { kind: "component", type: i2.LoadingButtonComponent, selector: "app-loading-button, lib-loading-button", inputs: ["isLoading"] }, { kind: "component", type: i2.LibIconsComponent, selector: "lib-icon", inputs: ["iconName", "iconColor", "iconSize", "iconFill"] }], preserveWhitespaces: true }); }
321
+ }
322
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoginComponent, decorators: [{
323
+ type: Component,
324
+ args: [{ selector: 'lib-login', standalone: false, preserveWhitespaces: true, template: "<div class=\"container-fluid\">\r\n\t<div class=\"row\">\r\n\t\t<!-- Conte\u00FAdo da DIV do background -->\r\n\t\t<div class=\"col-md-7\">\r\n\t\t\t<div class=\"background\" style=\"background-image: linear-gradient(to bottom, rgba(10, 44, 81, 0.9), rgba(10, 44, 81, 0.9)), url({{_customLoginService.loginBackground}})\">\r\n\t\t\t\t<div class=\"text-position texto-apresentacao ps-5\">\r\n\t\t\t\t\t<h1 class=\"title\" id=\"title\"></h1>\r\n\t\t\t\t\t<p class=\"subtitle\" id=\"subtitle\"></p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<!-- Conte\u00FAdo da DIV de Login -->\r\n\t\t<div class=\"col-md-5\">\r\n\r\n\t\t\t<div class=\"div-size\">\r\n\t\t\t\t<div class=\"logotipo\">\r\n\t\t\t\t\t<img style=\"height: 95px;\" src=\"{{ this._customLoginService.loginLogotipo }}\" alt=\"{{ this._customLoginService.loginAltLogotipo }}\" />\r\n\t\t\t\t</div>\r\n\t\t\t\t<form *ngIf=\"!showParmsAuthentication2Fa; else Authentication2Fa\" [formGroup]=\"form\" class=\"form-position\">\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"basic-addon1\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/cloud.svg\" alt=\"cloud icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"dominio\" id=\"dominio\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Dom\u00EDnio\" aria-label=\"Dom\u00EDnio\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('dominio'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('dominio')\" label=\"Dom\u00EDnio\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/at-sign.svg\" alt=\"at-sign icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"usuario\" id=\"usuario\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Usu\u00E1rio\" aria-label=\"Usu\u00E1rio\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('usuario'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('usuario')\" label=\"Usu\u00E1rio\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"input-group input-group-lg form-item\" style=\"margin-bottom: 8px;\">\r\n\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px;\">\r\n\t\t\t\t\t\t\t<img src=\"assets/icons/lock.svg\" alt=\"lock-icon\" />\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<input type=\"password\" class=\"form-control\" formControlName=\"senha\" id=\"senha\"\r\n\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"Senha\" aria-label=\"senha\"\r\n\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(form.get('senha'))\">\r\n\t\t\t\t\t\t<app-field-error-message [control]=\"form.get('senha')\" label=\"Senha\"></app-field-error-message>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"remember-password\">\r\n\t\t\t\t\t<!-- Lembrar Senha\r\n\t\t\t\t\t\t<input id=\"checkboxLembrarSenha\" type=\"checkbox\" />\r\n\t\t\t\t\t\t<label for=\"checkboxLembrarSenha\"> Lembrar minha senha </label>\r\n \t\t\t\t\t-->\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<button [disabled]=\"isLoading\" (click)=\"getServer()\" type=\"submit\"\r\n\t\t\t\t\t\tclass=\"btn btn-primary btn-acessar btn-lg\">\r\n\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoading\"></app-loading-button>\r\n\t\t\t\t\t\t<span> Acessar </span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t\t<button type=\"button\" (click)=\"openForgottenPasswordModal(forgottenPasswordModal)\" class=\"forgotten-password\">\r\n\t\t\t\t\t\t<span> Esqueceu sua senha? </span>\r\n\t\t\t\t\t</button>\r\n\t\t\t\t</form>\r\n\r\n\t\t\t\t<ng-template #Authentication2Fa>\r\n\t\t\t\t\t<form [formGroup]=\"formAuthentication2Fa\" class=\"form-position\">\r\n\t\t\t\t\t\t<div class=\"input-group input-group-lg form-item mb-3\">\r\n\t\t\t\t\t\t\t<span class=\"input-group-text\" id=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t\tstyle=\"padding: 10px; border-radius: 4px 0px 0px 4px;\">\r\n\t\t\t\t\t\t\t\t<img src=\"assets/icons/lock.svg\" alt=\"lock-icon\" />\r\n\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t<input type=\"text\" class=\"form-control\" formControlName=\"code\" id=\"code\"\r\n\t\t\t\t\t\t\t\taria-label=\"Sizing example input\" placeholder=\"C\u00F3digo de 2 fatores\" aria-label=\"C\u00F3digo de 2 fatores\"\r\n\t\t\t\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formAuthentication2Fa.get('code'))\">\r\n\t\t\t\t\t\t\t<app-field-error-message [control]=\"formAuthentication2Fa.get('code')\" label=\"C\u00F3digo de 2 fatores\"></app-field-error-message>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"row mb-3\">\r\n\t\t\t\t\t\t\t<button (click)=\"voltar()\" type=\"button\" class=\"btn btn-acessar glb-btn-outline-dark-disabled col me-1\">\r\n\t\t\t\t\t\t\t\tVoltar\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button [disabled]=\"isLoadingSendAuthentication2Fa\" (click)=\"sendCode()\" type=\"button\" class=\"btn btn-acessar btn-primary col ms-1\">\r\n\t\t\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoadingSendAuthentication2Fa\"></app-loading-button>\r\n\t\t\t\t\t\t\t\tAcessar\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t<button *ngIf=\"secondsLeft == 0; else newCode\" \r\n\t\t\t\t\t\t\t\t[disabled]=\"isLoading\" (click)=\"getNewCode()\" type=\"button\" class=\"btn btn-acessar btn-outline-primary col\">\r\n\t\t\t\t\t\t\t\t<app-loading-button [isLoading]=\"isLoading\"></app-loading-button>\r\n\t\t\t\t\t\t\t\tEnviar novo c\u00F3digo\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<ng-template #newCode>\r\n\t\t\t\t\t\t\t\t<p class=\"text-center\">{{ secondsLeft}} {{ secondsLeft == 1 ? 'segundo' : 'segundos' }} para obter novo c\u00F3digo</p>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</form>\t\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t\r\n\t\t\t\t<div class=\"footer-position\">\r\n\t\t\t\t\t<footer>\r\n\t\t\t\t\t\t<span class=\"footer\"> \r\n\t\t\t\t\t\t\t<a href=\"https://dpo.privacytools.com.br/policy-view/JmGeNlJdw/1/poli%CC%81tica-de-privacidade/pt_BR?s=1685731510066\" target=\"_blank\" class=\"sispro text-primary\"> Pol\u00EDtica de Privacidade </a>\r\n\t\t\t\t\t\t\t<p class=\"separator\"> | </p>\r\n\t\t\t\t\t\t\t<a href=\"https://dpo.privacytools.com.br/policy-view/Rork35NN2/2/poli%CC%81tica-de-cookies/pt_BR?s=1685731551976\" target=\"_blank\" class=\"sispro text-primary\"> Pol\u00EDtica de Cookies </a>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"footer\"> Desenvolvido por \r\n\t\t\t\t\t\t\t<a href=\"https://www.sispro.com.br/\" target=\"_blank\" class=\"sispro text-primary\"> sispro s/a </a>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<span class=\"footer\"> Servi\u00E7os e Tecnologia da informa\u00E7\u00E3o \u00A9 {{ year }} Todos os direitos reservados </span>\r\n\t\t\t\t\t\t\t<div class=\"icons\">\r\n\t\t\t\t\t\t\t\t<a href=\"https://pt-br.facebook.com/SisproERP/\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"facebook\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t<a href=\"https://www.instagram.com/accounts/login/?next=/sispro_software/\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"instagram\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t<a href=\"https://br.linkedin.com/company/sispro\" target=\"_blank\">\r\n\t\t\t\t\t\t\t\t\t<lib-icon class=\"text-primary\" iconName=\"linkedin\" iconSize=\"medium-small\"/>\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<div class=\"d-flex justify-content-center\">\r\n\t\t\t\t\t\t\t\t<a [href]=\"geturlErpConfig()\" style=\"text-decoration: none; font-size: 12px;\">\r\n\t\t\t\t\t\t\t\t\tConfigurar ERP\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</footer>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n\r\n<!-- Template do modal de senha esquecida -->\r\n<ng-template #forgottenPasswordModal>\r\n\t<form [formGroup]=\"formFgtPsw\">\r\n\t\t<div class=\"modal-content\" style=\"box-shadow: 2px 2px 5px 0px rgba(0,0,0,0.5);\">\r\n\t\t\t<div class=\"modal-header p-3\">\r\n\t\t\t\t<h4 class=\"modal-title\"> Recupera\u00E7\u00E3o de senha </h4>\r\n\t\t\t\t<button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\r\n\t\t\t\t\t(click)=\"closeForgottenPasswordModal()\">\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t\t<div class=\"modal-body\">\r\n\t\t\t\t<label for=\"inputDominioFgtPsw\" class=\"input-label\"> Dom\u00EDnio <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t<input type=\"text\" id=\"inputDominioFgtPsw\" formControlName=\"dominioFgtPsw\"\r\n\t\t\t\t\tclass=\"form-control input-text\" aria-label=\"Sizing example input\" aria-label=\"Dom\u00EDnio\"\r\n\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formFgtPsw.get('dominioFgtPsw'))\">\r\n\t\t\t\t<app-field-error-message [control]=\"formFgtPsw.get('dominioFgtPsw')\" label=\"Dom\u00EDnio\"></app-field-error-message>\t\t\t\t\r\n\r\n\t\t\t\t<label for=\"inputUsuarioFgtPsw\" class=\"input-label\"> Usu\u00E1rio <span class=\"text-danger\">*</span></label>\r\n\t\t\t\t<input type=\"text\" id=\"inputUsuarioFgtPsw\" formControlName=\"usuarioFgtPsw\"\r\n\t\t\t\t\tclass=\"form-control input-text\" aria-label=\"Sizing example input\" aria-label=\"Usu\u00E1rio\"\r\n\t\t\t\t\taria-describedby=\"inputGroup-sizing-lg\"\r\n\t\t\t\t\t[class.is-invalid]=\"FormUtils.isInvalidField(formFgtPsw.get('usuarioFgtPsw'))\">\r\n\t\t\t\t<app-field-error-message [control]=\"formFgtPsw.get('usuarioFgtPsw')\" label=\"Usu\u00E1rio\"></app-field-error-message>\t\t\t\t\r\n\t\t\r\n\t\t\t</div>\r\n\t\t\t<div class=\"modal-footer\">\r\n\t\t\t\t<button type=\"button\" class=\"btn glb-btn-dark-disabled modal-button\" (click)=\"closeForgottenPasswordModal()\">\r\n\t\t\t\t\t<span> Cancelar </span>\r\n\t\t\t\t</button>\r\n\t\t\t\t<button type=\"button\" class=\"btn btn-primary modal-button\" (click)=\"sendForgottenPassword();\">\r\n\t\t\t\t\t<span> Continuar </span>\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t</div>\r\n\t</form>\r\n</ng-template>\r\n", styles: ["@charset \"UTF-8\";*{padding:0;margin:0;font-family:Open Sans,sans-serif}.background{display:grid;height:100vh;align-content:center;background-size:cover;color:#f5f5f5;align-items:center;justify-content:center}.div-size{display:flex;flex-direction:column;justify-content:space-around;width:100%;height:100vh;align-items:center;background-color:#f5f5f5;box-shadow:0 0 15px #333}.title{font-size:3.5vw;text-transform:uppercase;font-weight:700}.subtitle{font-size:21px}.logotipo{display:flex;justify-content:center;margin-top:10%}.form-position{display:flex;flex-direction:column;align-content:center;width:378px}.form-item{margin-bottom:16px}.input-group-text{padding:10px 11px;border-radius:4px 0 0 4px}.remember-password{display:flex;align-items:center;margin-bottom:8px;justify-content:center}.remember-password label{margin-left:8px}.forgotten-password{background-color:#f5f5f5;border:none;text-decoration:underline;font-size:14px;box-shadow:none;margin-top:8px;cursor:pointer}.forgotten-password:focus{outline-style:none}.input-label{font-size:16px;padding:10px 0 8px 16px}.input-label:first-child{font-size:16px;padding-top:16px}.input-text{width:343px;height:38px;margin:0 0 10px 16px;padding:0 8px}.input-text:last-child{font-size:16px;margin-bottom:24px}.form-control{max-width:341px}.footer{display:flex;justify-content:center}.footer-position{font-size:14px;display:flex;justify-content:center;align-items:flex-end}.icons{display:flex;justify-content:center;align-items:center;margin-top:16px}.icons a{padding:4px}.icon-item{margin-left:24px;color:#007bff}.sispro{color:#2847a0;margin-left:5px;text-transform:uppercase;text-decoration:none;font-weight:700}.modal-footer{padding:0}.modal:before{content:\"\";display:inline-block;height:100%;vertical-align:middle}.modal-style{display:flex;align-items:center;justify-content:center}.modal-style h4{font-size:20px;font-weight:700;padding:10px}.modal-button{margin:16px 0;padding:7px 12px}.modal-button:last-child{margin-right:16px;margin-left:8px}.modal-close{display:flex;align-content:center;margin-right:10px;padding:6px}.col-md-7,.col-md-5{padding:0}.btn-acessar{height:48px;outline-style:none}.texto-apresentacao{align-items:start}.separator{margin-left:5px}\n"] }]
325
+ }], ctorParameters: () => [{ type: i1.BsModalService }, { type: i2.MessageService }, { type: i3.FormBuilder }, { type: i4.AuthService }, { type: i5.ServerService }, { type: i6.EnvironmentService }, { type: i7.AuthStorageService }, { type: i8.LibCustomLoginService }, { type: i9.Title }, { type: i10.Router }, { type: i11.ToastrService }] });
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWF1dGgvc3JjL2xpYi9jb21wb25lbnRzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1hdXRoL3NyYy9saWIvY29tcG9uZW50cy9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQWUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLdEQseUZBQXlGO0FBQ3pGLE9BQU8sRUFBRSxTQUFTLEVBQWtCLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQWV6RCxNQUFNLE9BQU8sY0FBYztJQUUxQjtJQUNDLGlEQUFpRDtJQUN6QyxlQUErQixFQUMvQixlQUErQixFQUMvQixZQUF5QixFQUN6QixZQUF5QixFQUN6QixjQUE2QixFQUM3QixtQkFBdUMsRUFDdkMsbUJBQXVDLEVBQ3hDLG1CQUEwQyxFQUN6QyxNQUFhLEVBQ2IsT0FBZSxFQUNmLGNBQTZCO1FBVjdCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3hDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7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UzsrQkFDQyxXQUFXLGNBR1QsS0FBSyx1QkFDSSxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5cclxuaW1wb3J0IHsgbWFwLCBTdWJzY3JpcHRpb24sIHRha2UsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBCc01vZGFsUmVmLCBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcblxyXG4vL2ltcG9ydCB7IEN1c3RvbUxvZ2luU2VydmljZSB9IGZyb20gJ3NyYy9hcHAvcHJvamVjdC9jdXN0b20vbG9naW4vY3VzdG9tLWxvZ2luLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtVXRpbHMsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnbmd4LXNwLWluZnJhJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzLnNlcnZpY2UnO1xyXG4vLyBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudHMnO1xyXG5pbXBvcnQgeyBMaWJDdXN0b21Mb2dpblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jdXN0b20vY3VzdG9tLWxvZ2luLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmVyL3NlcnZlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3RvcmFnZS9hdXRoLXN0b3JhZ2Uuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2xpYi1sb2dpbicsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddLFxyXG5cdHN0YW5kYWxvbmU6IGZhbHNlLFxyXG5cdHByZXNlcnZlV2hpdGVzcGFjZXM6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0Ly9wdWJsaWMgX2N1c3RvbUxvZ2luU2VydmljZTogQ3VzdG9tTG9naW5TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBfYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBfbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG5cdFx0cHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBfc2VydmVyU2VydmljZTogU2VydmVyU2VydmljZSxcclxuXHRcdHByaXZhdGUgX2Vudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBfYXV0aFN0b3JhZ2VTZXJ2aWNlOiBBdXRoU3RvcmFnZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgX2N1c3RvbUxvZ2luU2VydmljZTogTGliQ3VzdG9tTG9naW5TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBfdGl0bGU6IFRpdGxlLFxyXG5cdFx0cHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXHJcblx0XHRwcml2YXRlIF90b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlXHJcblx0KSB7IH1cclxuXHJcblx0Ly8gI3JlZ2lvbiA9PT09PT09PT09PiBQUk9QRVJUSUVTIDw9PT09PT09PT09XHJcblxyXG5cdC8vICNyZWdpb24gUFJJVkFURVxyXG5cclxuXHRwcml2YXRlIGlkRmd0UHN3OiBudW1iZXIgPSAxO1xyXG5cclxuXHQvLyAjZW5kcmVnaW9uIFBSSVZBVEVcclxuXHJcblx0Ly8gI3JlZ2lvbiBQVUJMSUNcclxuXHJcblx0cHVibGljIG1vZGFsUmVmPzogQnNNb2RhbFJlZjtcclxuXHJcblx0Ly8gIFZhcmnDoXZlaXMgZXNwZWPDrWZpY2FzIHBhcmEgZnVuY2lvbmFsaWRhZGVzIHBhZHLDtWVzIGRvcyBmb3JtdWzDoXJpb3NcclxuXHRwdWJsaWMgY3VycmVudFRpbWU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cdHB1YmxpYyB5ZWFyOiBudW1iZXIgPSB0aGlzLmN1cnJlbnRUaW1lLmdldEZ1bGxZZWFyKCk7XHJcblxyXG5cdHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgaXNMb2FkaW5nU2VuZEF1dGhlbnRpY2F0aW9uMkZhOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIHNob3dQYXJtc0F1dGhlbnRpY2F0aW9uMkZhID0gZmFsc2U7XHJcblx0cHVibGljIGlzTG9hZGluZ0dldE5ld0NvZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0Ly9wcm9wcmllZGFkZXMgcXVlIHbDo28gcmVjZWJlciBvcyB2YWxvcmVzIGRvIGN1c3RvbUxvZ2luU2VydmljZSAjIyMjVkVSSUZJQ0FSIERFUE9JUyMjIyNcclxuXHJcblx0Ly8gQElucHV0KCkgY3VzdG9tUHJvcHJpZWRhZGVzTG9naW4/OiBDdXN0b21Qcm9wcmllZGFkZXNMb2dpbjtcclxuXHJcblx0Ly8gI2VuZHJlZ2lvbiBQVUJMSUNcclxuXHJcblx0Ly8gI3JlZ2lvbiBUaW1lclxyXG5cclxuXHRwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHRwcml2YXRlIHRpbWVyRHVyYXRpb246IG51bWJlciA9IDkwO1xyXG5cdHB1YmxpYyBzZWNvbmRzTGVmdDogbnVtYmVyID0gdGhpcy50aW1lckR1cmF0aW9uO1xyXG5cclxuXHRwcml2YXRlIGNvdW50ZG93biQgPSB0aW1lcigwLCAxMDAwKS5waXBlKFxyXG5cdFx0dGFrZSh0aGlzLnRpbWVyRHVyYXRpb24gKyAxKSxcclxuXHJcblx0XHRtYXAoc2Vjb25kc0VsYXBzZWQgPT4gdGhpcy50aW1lckR1cmF0aW9uIC0gc2Vjb25kc0VsYXBzZWQpXHJcblx0KTtcclxuXHJcblx0Ly8gI2VuZHJlZ2lvbiBUaW1lclxyXG5cclxuXHQvLyAjcmVnaW9uID09PT09PT09PT0+IEZPUk0gQlVJTERFUiA8PT09PT09PT09PVxyXG5cdHB1YmxpYyBmb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHRwdWJsaWMgZm9ybUZndFBzdzogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7O1xyXG5cdHB1YmxpYyBmb3JtQXV0aGVudGljYXRpb24yRmE6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pOztcclxuXHJcblx0Ly8gIFByb3ByaWVkYWRlIG5lY2Vzc8OhcmlvIHBhcmEgcXVlIGEgY2xhc3NlIHN0YXRpYyBGb3JtVXRpbHMgcG9zc2Egc2VyIHV0aWxpemFkYSBubyBIdG1sXHJcblx0cHVibGljIGdldCBGb3JtVXRpbHMoKTogdHlwZW9mIEZvcm1VdGlscyB7XHJcblx0XHRyZXR1cm4gRm9ybVV0aWxzO1xyXG5cdH1cclxuXHJcblx0Ly8gI3JlZ2lvbiBGT1JNIERBVEFcclxuXHJcblx0Ly8gIFZhcmnDoXZlaXMgZXNwZWPDrWZpY2FzIHBhcmEgZnVuY2lvbmFsaWRhZGVzIHBhZHLDtWVzIGRvcyBmb3JtdWzDoXJpb3MgKExvZ2luKVxyXG5cdHB1YmxpYyBnZXQgZG9taW5pbygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2RvbWluaW8nKT8udmFsdWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHVzdWFyaW8oKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmZvcm0uZ2V0KCd1c3VhcmlvJyk/LnZhbHVlO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldCBzZW5oYSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3NlbmhhJyk/LnZhbHVlO1xyXG5cdH1cclxuXHJcblx0Ly8gIFZhcmnDoXZlaXMgZXNwZWPDrWZpY2FzIHBhcmEgZnVuY2lvbmFsaWRhZGVzIHBhZHLDtWVzIGRvcyBmb3JtdWzDoXJpb3MgKFJlcXVlc3RSZWNvdmVyUGFzc3dvcmQpXHJcblx0cHVibGljIGdldCBkb21pbmlvRmd0UHN3KCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5mb3JtRmd0UHN3LmdldCgnZG9taW5pb0ZndFBzdycpPy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgdXN1YXJpb0ZndFBzdygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZm9ybUZndFBzdy5nZXQoJ3VzdWFyaW9GZ3RQc3cnKT8udmFsdWU7XHJcblx0fVxyXG5cclxuXHQvLyAgVmFyacOhdmVpcyBlc3BlY8OtZmljYXMgcGFyYSBmdW5jaW9uYWxpZGFkZXMgcGFkcsO1ZXMgZG9zIGZvcm11bMOhcmlvcyAoQXV0ZW50aWNhw6fDo28gMiBGYXRvcmVzKVxyXG5cdHB1YmxpYyBnZXQgY29kZSgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZm9ybUF1dGhlbnRpY2F0aW9uMkZhLmdldCgnY29kZScpPy52YWx1ZTtcclxuXHR9XHJcblxyXG5cdC8vICNlbmRyZWdpb24gRk9STSBEQVRBXHJcblxyXG5cdC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gUFJPUEVSVElFUyA8PT09PT09PT09PVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcblx0XHR0aGlzLl90aXRsZS5zZXRUaXRsZSh0aGlzLl9jdXN0b21Mb2dpblNlcnZpY2UubG9naW5QYWdlVGl0bGUpO1xyXG5cclxuXHRcdGlmICh0aGlzLl9jdXN0b21Mb2dpblNlcnZpY2UubG9naW5UaXRsZSAhPSBcIlwiKSB7XHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGl0bGVcIikhLmlubmVySFRNTCA9IHRoaXMuX2N1c3RvbUxvZ2luU2VydmljZS5sb2dpblRpdGxlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLl9jdXN0b21Mb2dpblNlcnZpY2UubG9naW5TdWJ0aXRsZSAhPSBcIlwiKSB7XHJcblx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3VidGl0bGVcIikhLmlubmVySFRNTCA9IHRoaXMuX2N1c3RvbUxvZ2luU2VydmljZS5sb2dpblN1YnRpdGxlO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jcmVhdGVGb3JtKCk7XHJcblx0fVxyXG5cclxuXHQvLyAjcmVnaW9uIEZPUk0gVkFMSURBVE9SU1xyXG5cclxuXHQvLyAgTcOpdG9kbyBwYXJhIGNvbmZpZ3VyYcOnw6NvIGRvcyBjYW1wb3MgZGUgZWRpw6fDo28gZG8gZm9ybXVsw6FyaW8gKExvZ2luKVxyXG5cdHByaXZhdGUgY3JlYXRlRm9ybSgpOiB2b2lkIHtcclxuXHJcblx0XHQvLyAgRGFkb3Mgb3JpZ2luYWlzIGRlIExvZ2luXHJcblx0XHRpZiAodGhpcy5fZW52aXJvbm1lbnRTZXJ2aWNlLnByb2R1Y3Rpb24pIHtcclxuXHRcdFx0dGhpcy5mb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG5cdFx0XHRcdGRvbWluaW86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxyXG5cdFx0XHRcdHVzdWFyaW86IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCldXSxcclxuXHRcdFx0XHRzZW5oYTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKV1dXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdHRoaXMuZm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcclxuXHRcdFx0XHRkb21pbmlvOiBbdGhpcy5fY3VzdG9tTG9naW5TZXJ2aWNlLmxvZ2luRGVzZW52RG9tYWluLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApXV0sXHJcblx0XHRcdFx0dXN1YXJpbzogW3RoaXMuX2N1c3RvbUxvZ2luU2VydmljZS5sb2dpbkRlc2VudlVzZXIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApXV0sXHJcblx0XHRcdFx0c2VuaGE6IFt0aGlzLl9jdXN0b21Mb2dpblNlcnZpY2UubG9naW5EZXNlbnZQYXNzd29yZCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCldXVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vICBNw6l0b2RvIHBhcmEgY29uZmlndXJhw6fDo28gZG9zIGNhbXBvcyBkZSBlZGnDp8OjbyBkbyBmb3JtdWzDoXJpbyAoUmVxdWVzdFJlY292ZXJQYXNzd29yZClcclxuXHRwcml2YXRlIGNyZWF0ZUZvcm1Gb3Jnb3R0ZW5QYXNzd29yZCgpOiB2b2lkIHtcclxuXHJcblx0XHR0aGlzLmZvcm1GZ3RQc3cgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcblx0XHRcdGRvbWluaW9GZ3RQc3c6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxyXG5cdFx0XHR1c3VhcmlvRmd0UHN3OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApXV0sXHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLmZvcm1GZ3RQc3cuZ2V0KCdyZWNvdmVyQ2RvbWluaW9GZ3RQc3dvZGVSZWNQc3cnKT8uc2V0VmFsdWUoJycpO1xyXG5cdFx0dGhpcy5mb3JtRmd0UHN3LmdldCgndXN1YXJpb0ZndFBzdycpPy5zZXRWYWx1ZSgnJyk7XHJcblx0fVxyXG5cclxuXHQvLyAgTcOpdG9kbyBwYXJhIGNvbmZpZ3VyYcOnw6NvIGRvcyBjYW1wb3MgZGUgZWRpw6fDo28gZG8gZm9ybXVsw6FyaW8gKEF1dGVudGljYcOnw6NvIDIgRmF0b3JlcylcclxuXHRwcml2YXRlIGNyZWF0ZUZvcm1BdXRoZW50aWNhdGlvbjJGYSgpOiB2b2lkIHtcclxuXHJcblx0XHR0aGlzLmZvcm1BdXRoZW50aWNhdGlvbjJGYSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcclxuXHRcdFx0Y29kZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNildXSxcclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMuZm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoJycpO1xyXG5cdH1cclxuXHJcblx0Ly8gI2VuZHJlZ2lvbiBGT1JNIFZBTElEQVRPUlNcclxuXHJcblx0Ly8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBGT1JNIEJVSUxERVIgPD09PT09PT09PT1cclxuXHJcblx0Ly8gI3JlZ2lvbiA9PT09PT09PT09PiBTRVJWSUNFIE1FVEhPRFMgPD09PT09PT09PT1cclxuXHJcblx0Ly8gI3JlZ2lvbiBHRVRcclxuXHJcblx0Ly8gT2J0w6ltIGEgVXJsIGRvIENvbmZpZyBFcnBcclxuXHRwdWJsaWMgZ2V0dXJsRXJwQ29uZmlnKCk6IHN0cmluZyB7XHJcblx0XHQvLyB2ZXJpZmljYXIgZGVwb2lzIFxyXG5cdFx0cmV0dXJuIGAke3RoaXMuX2Vudmlyb25tZW50U2VydmljZS5ob3N0TmFtZX0vU2lzcHJvRXJwQ2xvdWQvQ29uZmlnRXJwYDtcclxuXHR9XHJcblxyXG5cdC8qXHJcblx0KiBPYnTDqW0gb3MgcGFyw6JtZXRyb3MgZGUgY29uZmlndXJhw6fDo28gZG8gc2Vydmlkb3IgcGFyYSBBdXRlbnRpY2HDp8OjbyBCw6FzaWNhIGRlIHNlZ3VyYW7Dp2FcclxuXHQqL1xyXG5cdHB1YmxpYyBnZXRTZXJ2ZXIoKTogdm9pZCB7XHJcblxyXG5cdFx0aWYgKHRoaXMuZm9ybS52YWxpZCkge1xyXG5cdFx0XHR0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG5cdFx0XHR0aGlzLl9zZXJ2ZXJTZXJ2aWNlLmdldFNlcnZlcigpLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogcmVzcG9uc2UgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5sb2dPbigpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3I6IChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0XHQvL3RoaXMuX3Byb2plY3RVdGlsc2VydmljZS5zaG93SHR0cEVycm9yKGVycm9yKTtcclxuXHRcdFx0XHRcdHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnNob3dBbGVydERhbmdlcihlcnJvcik7XHJcblxyXG5cdFx0XHRcdFx0Ly9wb2RlIHNlciBzdWJzdGl0dWlkbyBwb3IgY29uc29sZS5lcnJvclxyXG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yKVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH0pXHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRGb3JtVXRpbHMudmFsaWRhdGVGaWVsZHModGhpcy5mb3JtKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vICNlbmRyZWdpb24gR0VUXHJcblxyXG5cdC8vICNyZWdpb24gUE9TVFxyXG5cclxuXHQvLyAgRXhlY3V0YSBvIExvZ2luXHJcblx0cHVibGljIGxvZ09uKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5fYXV0aFNlcnZpY2UubG9naW4odGhpcy5mb3JtLnZhbHVlKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHR0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRpZiAocmVzcG9uc2UuRmVlZGJhY2tNZXNzYWdlICE9IFwiXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMuX3RvYXN0clNlcnZpY2Uud2FybmluZyhyZXNwb25zZS5GZWVkYmFja01lc3NhZ2UsXHJcblx0XHRcdFx0XHRcdCcnLFxyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0dGltZU91dDogMzAwMCxcclxuXHRcdFx0XHRcdFx0XHRleHRlbmRlZFRpbWVPdXQ6IDIwMDBcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHQvL0luY2lhbGl6YcOnw6NvIGRlIFNlbmhhXHJcblx0XHRcdFx0aWYgKHJlc3BvbnNlLkluaXRpYWxpemVQYXNzd29yZCkge1xyXG5cdFx0XHRcdFx0bGV0IHBhcmFtOiBzdHJpbmcgPSBidG9hKGB0cnVlJCR7dGhpcy5kb21pbmlvfSQke3RoaXMudXN1YXJpb31gKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW2BhdXRoL2xvZ2luL25vdmFTZW5oYS8ke3BhcmFtfWBdKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLl90b2FzdHJTZXJ2aWNlLnN1Y2Nlc3MoXCJWZXJpZmlxdWUgbm8gc2V1IGUtbWFpbCBvIGPDs2RpZ28gZGUgdmFsaWRhw6fDo28uXCIpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHJlc3BvbnNlLkluZnJhSW5BdXRoVHlwZUlkID09IDEgJiYgcmVzcG9uc2UuSW5mcmFJbjJGYVR5cGVJZCAhPSBudWxsICYmIHJlc3BvbnNlLkluZnJhSW4yRmFUeXBlSWQgPT0gMSAmJiByZXNwb25zZS5JczJGYUVuYWJsZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuY3JlYXRlRm9ybUF1dGhlbnRpY2F0aW9uMkZhKCk7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5jb3VudGRvd24kLnN1YnNjcmliZShzZWNvbmRzTGVmdCA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2Vjb25kc0xlZnQgPSBzZWNvbmRzTGVmdDtcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuc2hvd1Bhcm1zQXV0aGVudGljYXRpb24yRmEgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMuX3RvYXN0clNlcnZpY2Uuc3VjY2VzcyhcIlZlcmlmaXF1ZSBubyBzZXUgZS1tYWlsIG8gY8OzZGlnbyBkZSB2YWxpZGHDp8Ojby5cIik7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3I6IChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG5cdFx0XHRcdC8vdGhpcy5fcHJvamVjdFV0aWxzZXJ2aWNlLnNob3dIdHRwRXJyb3IoZXJyb3IpO1xyXG5cdFx0XHRcdHRoaXMuX21lc3NhZ2VTZXJ2aWNlLnNob3dBbGVydERhbmdlcihlcnJvcik7XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yKVxyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gRW52aWEgcmVxdWlzacOnw6NvIHBhcmEgZXNxdWVjZXIgc2VuaGFcclxuXHRwdWJsaWMgc2VuZEZvcmdvdHRlblBhc3N3b3JkKCk6IHZvaWQge1xyXG5cclxuXHRcdGlmICh0aGlzLmZvcm1GZ3RQc3cudmFsaWQpIHtcclxuXHRcdFx0dGhpcy5fc2VydmVyU2VydmljZS5nZXRTZXJ2ZXIoKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IHJlc3BvbnNlID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuZm9yZ290dGVuUGFzc3dvcmQoKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdC8vdGhpcy5fcHJvamVjdFV0aWxzZXJ2aWNlLnNob3dIdHRwRXJyb3IoZXJyb3IpO1xyXG5cdFx0XHRcdFx0dGhpcy5fbWVzc2FnZVNlcnZpY2Uuc2hvd0FsZXJ0RGFuZ2VyKGVycm9yKTtcclxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvcilcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KVxyXG5cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdEZvcm1VdGlscy52YWxpZGF0ZUZpZWxkcyh0aGlzLmZvcm1GZ3RQc3cpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIFJlcXVpc2nDp8OjbyBwYXJhIGVzcXVlY2VyIHNlbmhhXHJcblx0cHVibGljIGZvcmdvdHRlblBhc3N3b3JkKCk6IHZvaWQge1xyXG5cclxuXHRcdHRoaXMuX2F1dGhTZXJ2aWNlLmZvcmdvdHRlblBhc3N3b3JkKHRoaXMuZm9ybUZndFBzdy52YWx1ZSkuc3Vic2NyaWJlKHtcclxuXHRcdFx0bmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jbG9zZUZvcmdvdHRlblBhc3N3b3JkTW9kYWwoKTtcclxuXHJcblx0XHRcdFx0bGV0IHBhcmFtOiBzdHJpbmcgPSBidG9hKGBmYWxzZSQke3RoaXMuZG9taW5pb30kJHt0aGlzLnVzdWFyaW99JCR7M31gKTtcclxuXHJcblx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlKFtgYXV0aC9sb2dpbi9ub3ZhU2VuaGEvJHtwYXJhbX1gXSk7XHJcblxyXG5cdFx0XHRcdHRoaXMuX3RvYXN0clNlcnZpY2Uuc3VjY2VzcyhcIlZlcmlmaXF1ZSBubyBzZXUgZS1tYWlsIG8gY8OzZGlnbyBkZSB2YWxpZGHDp8Ojby5cIik7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHQvL3RoaXMuX3Byb2plY3RVdGlsc2VydmljZS5zaG93SHR0cEVycm9yKGVycm9yKTtcclxuXHRcdFx0XHR0aGlzLl9tZXNzYWdlU2VydmljZS5zaG93QWxlcnREYW5nZXIoZXJyb3IpO1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvcilcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHR9XHJcblxyXG5cdC8vIEVudmlhIHJlcXVpc2nDp8OjbyBwYXJhIHZhbGlkYXIgY8OzZGlnbyAyIGZhdG9yZXNcclxuXHRwdWJsaWMgc2VuZENvZGUoKTogdm9pZCB7XHJcblxyXG5cdFx0aWYgKHRoaXMuZm9ybUF1dGhlbnRpY2F0aW9uMkZhLnZhbGlkKSB7XHJcblx0XHRcdHRoaXMuaXNMb2FkaW5nU2VuZEF1dGhlbnRpY2F0aW9uMkZhID0gdHJ1ZTtcclxuXHJcblx0XHRcdHRoaXMudmFsaWRhdGVDb2RlKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRGb3JtVXRpbHMudmFsaWRhdGVGaWVsZHModGhpcy5mb3JtQXV0aGVudGljYXRpb24yRmEpO1xyXG5cdFx0fVxyXG5cclxuXHR9XHJcblxyXG5cdC8vIFZhbGlkYcOnw6NvIGRvIGPDs2RpZ28gMiBmYXRvcmVzXHJcblx0cHVibGljIHZhbGlkYXRlQ29kZSgpOiB2b2lkIHtcclxuXHJcblx0XHR0aGlzLl9hdXRoU2VydmljZS52YWxpZGF0ZUF1dGhlbnRpY2F0aW9uMkZhKHRoaXMuY29kZSkuc3Vic2NyaWJlKHtcclxuXHRcdFx0bmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblxyXG5cdFx0XHRcdHRoaXMuaXNMb2FkaW5nU2VuZEF1dGhlbnRpY2F0aW9uMkZhID0gZmFsc2U7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHR0aGlzLmlzTG9hZGluZ1NlbmRBdXRoZW50aWNhdGlvbjJGYSA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHQvL3RoaXMuX3Byb2plY3RVdGlsc2VydmljZS5zaG93SHR0cEVycm9yKGVycm9yKTtcclxuXHRcdFx0XHR0aGlzLl9tZXNzYWdlU2VydmljZS5zaG93QWxlcnREYW5nZXIoZXJyb3IpO1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvcilcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cclxuXHR9XHJcblxyXG5cdC8vIEVudmlhIHJlcXVpc2nDp8OjbyBwYXJhIHZhbGlkYXIgY8OzZGlnbyAyIGZhdG9yZXNcclxuXHRwdWJsaWMgZ2V0TmV3Q29kZSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuaXNMb2FkaW5nR2V0TmV3Q29kZSA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5fc2VydmVyU2VydmljZS5nZXRTZXJ2ZXIoKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiByZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0dGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5jb3VudGRvd24kLnN1YnNjcmliZShzZWNvbmRzTGVmdCA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnNlY29uZHNMZWZ0ID0gc2Vjb25kc0xlZnQ7XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdHRoaXMuR2V0TmV3Q29kZTJGYSgpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvcjogKGVycm9yKSA9PiB7XHJcblx0XHRcdFx0Ly90aGlzLl9wcm9qZWN0VXRpbHNlcnZpY2Uuc2hvd0h0dHBFcnJvcihlcnJvcik7XHJcblx0XHRcdFx0dGhpcy5fbWVzc2FnZVNlcnZpY2Uuc2hvd0FsZXJ0RGFuZ2VyKGVycm9yKTtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpXHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHJcblx0fVxyXG5cclxuXHQvLyBWYWxpZGHDp8OjbyBkbyBjw7NkaWdvIDIgZmF0b3Jlc1xyXG5cdHB1YmxpYyBHZXROZXdDb2RlMkZhKCk6IHZvaWQge1xyXG5cclxuXHRcdHRoaXMuX2F1dGhTZXJ2aWNlLkdldE5ld0NvZGUyRmEoKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuXHRcdFx0XHR0aGlzLmlzTG9hZGluZ0dldE5ld0NvZGUgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0dGhpcy5fdG9hc3RyU2VydmljZS5zdWNjZXNzKFwiRW52aWFtb3MgdW0gbm92byBjw7NkaWdvIHBhcmEgbyBlbmRlcmXDp28gZGUgZS1tYWlsIHZpbmN1bGFkbyBhbyBzZXUgdXN1w6FyaW8uIFZlcmlmaXF1ZSBvIGxpeG8gZWxldHLDtG5pY28gKFNQQU0pIGRhIHN1YSBjYWl4YSBkZSBlbnRyYWRhLCBjYXNvIG7Do28gdGVuaGEgZW5jb250cmFkbyBub3NzYSBtZW5zYWdlbS5cIik7XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHR0aGlzLmlzTG9hZGluZ0dldE5ld0NvZGUgPSBmYWxzZTtcclxuXHJcblx0XHRcdFx0Ly90aGlzLl9wcm9qZWN0VXRpbHNlcnZpY2Uuc2hvd0h0dHBFcnJvcihlcnJvcik7XHJcblx0XHRcdFx0dGhpcy5fbWVzc2FnZVNlcnZpY2Uuc2hvd0FsZXJ0RGFuZ2VyKGVycm9yKTtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdFx0XHR9LFxyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gI2VuZHJlZ2lvbiBQT1NUXHJcblxyXG5cdC8vICNyZWdpb24gVVRJTElEQURFU1xyXG5cclxuXHQvLyBSZXRvcm5vIHBhcmEgYSB0ZWxhIGRlIGxvZ2luXHJcblx0cHVibGljIHZvbHRhcigpOiB2b2lkIHtcclxuXHRcdHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cdFx0dGhpcy5zaG93UGFybXNBdXRoZW50aWNhdGlvbjJGYSA9IGZhbHNlO1xyXG5cclxuXHRcdHRoaXMuX2F1dGhTdG9yYWdlU2VydmljZS5sb2dvdXQoKTtcclxuXHJcblx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW1wiL2F1dGgvbG9naW5cIl0pO1xyXG5cdH1cclxuXHJcblx0Ly8gI2VuZHJlZ2lvbiBVVElMSURBREVTXHJcblxyXG5cdC8vICNlbmRyZWdpb24gPT09PT09PT09PT4gU0VSVklDRSBNRVRIT0RTIDw9PT09PT09PT09XHJcblxyXG5cdC8vICNyZWdpb24gPT09PT09PT09PT4gTU9EQUxTIDw9PT09PT09PT09XHJcblxyXG5cdC8vIEV4ZWN1dGEgZXNxdWVjZXIgc2VuaGFcclxuXHRwdWJsaWMgb3BlbkZvcmdvdHRlblBhc3N3b3JkTW9kYWwodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pOiB2b2lkIHtcclxuXHRcdHRoaXMuY3JlYXRlRm9ybUZvcmdvdHRlblBhc3N3b3JkKCk7XHJcblxyXG5cdFx0dGhpcy5tb2RhbFJlZiA9IHRoaXMuX2JzTW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGUsIHtcclxuXHRcdFx0Y2xhc3M6ICdtb2RhbC1kaWFsb2ctY2VudGVyZWQnLFxyXG5cdFx0XHRpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSxcclxuXHRcdFx0a2V5Ym9hcmQ6IGZhbHNlLFxyXG5cdFx0XHRpZDogdGhpcy5pZEZndFBzd1xyXG5cdFx0fSk7XHJcblxyXG5cdH1cclxuXHJcblx0Ly8gRW5jZXJyYSBlc3F1ZWNlciBzZW5oYVxyXG5cdHB1YmxpYyBjbG9zZUZvcmdvdHRlblBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XHJcblx0XHR0aGlzLl9ic01vZGFsU2VydmljZS5oaWRlKHRoaXMuaWRGZ3RQc3cpO1xyXG5cdH1cclxuXHJcblx0Ly8gI2VuZHJlZ2lvbiA9PT09PT09PT09PiBNT0RBTFMgPD09PT09PT09PT1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG5cdDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHRcdDwhLS0gQ29udGXDumRvIGRhIERJViBkbyBiYWNrZ3JvdW5kIC0tPlxyXG5cdFx0PGRpdiBjbGFzcz1cImNvbC1tZC03XCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJiYWNrZ3JvdW5kXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDEwLCA0NCwgODEsIDAuOSksIHJnYmEoMTAsIDQ0LCA4MSwgMC45KSksIHVybCh7e19jdXN0b21Mb2dpblNlcnZpY2UubG9naW5CYWNrZ3JvdW5kfX0pXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtcG9zaXRpb24gdGV4dG8tYXByZXNlbnRhY2FvIHBzLTVcIj5cclxuXHRcdFx0XHRcdDxoMSBjbGFzcz1cInRpdGxlXCIgaWQ9XCJ0aXRsZVwiPjwvaDE+XHJcblx0XHRcdFx0XHQ8cCBjbGFzcz1cInN1YnRpdGxlXCIgaWQ9XCJzdWJ0aXRsZVwiPjwvcD5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHRcdDwhLS0gQ29udGXDumRvIGRhIERJViBkZSBMb2dpbiAtLT5cclxuXHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxyXG5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImRpdi1zaXplXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImxvZ290aXBvXCI+XHJcblx0XHRcdFx0XHQ8aW1nIHN0eWxlPVwiaGVpZ2h0OiA5NXB4O1wiIHNyYz1cInt7IHRoaXMuX2N1c3RvbUxvZ2luU2VydmljZS5sb2dpbkxvZ290aXBvIH19XCIgYWx0PVwie3sgdGhpcy5fY3VzdG9tTG9naW5TZXJ2aWNlLmxvZ2luQWx0TG9nb3RpcG8gfX1cIiAvPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDxmb3JtICAqbmdJZj1cIiFzaG93UGFybXNBdXRoZW50aWNhdGlvbjJGYTsgZWxzZSBBdXRoZW50aWNhdGlvbjJGYVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1wb3NpdGlvblwiPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLWxnIGZvcm0taXRlbVwiPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cImJhc2ljLWFkZG9uMVwiXHJcblx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nOiAxMHB4OyBib3JkZXItcmFkaXVzOiA0cHggMHB4IDBweCA0cHhcIj5cclxuXHRcdFx0XHRcdFx0XHQ8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9jbG91ZC5zdmdcIiBhbHQ9XCJjbG91ZCBpY29uXCIgLz5cclxuXHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImRvbWluaW9cIiBpZD1cImRvbWluaW9cIlxyXG5cdFx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9XCJTaXppbmcgZXhhbXBsZSBpbnB1dFwiIHBsYWNlaG9sZGVyPVwiRG9tw61uaW9cIiBhcmlhLWxhYmVsPVwiRG9tw61uaW9cIlxyXG5cdFx0XHRcdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9XCJpbnB1dEdyb3VwLXNpemluZy1sZ1wiXHJcblx0XHRcdFx0XHRcdFx0W2NsYXNzLmlzLWludmFsaWRdPVwiRm9ybVV0aWxzLmlzSW52YWxpZEZpZWxkKGZvcm0uZ2V0KCdkb21pbmlvJykpXCI+XHJcblx0XHRcdFx0XHRcdDxhcHAtZmllbGQtZXJyb3ItbWVzc2FnZSBbY29udHJvbF09XCJmb3JtLmdldCgnZG9taW5pbycpXCIgbGFiZWw9XCJEb23DrW5pb1wiPjwvYXBwLWZpZWxkLWVycm9yLW1lc3NhZ2U+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1sZyBmb3JtLWl0ZW1cIj5cclxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCIgaWQ9XCJpbnB1dEdyb3VwLXNpemluZy1sZ1wiXHJcblx0XHRcdFx0XHRcdFx0c3R5bGU9XCJwYWRkaW5nOiAxMHB4OyBib3JkZXItcmFkaXVzOiA0cHggMHB4IDBweCA0cHhcIj5cclxuXHRcdFx0XHRcdFx0XHQ8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9hdC1zaWduLnN2Z1wiIGFsdD1cImF0LXNpZ24gaWNvblwiIC8+XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c3VhcmlvXCIgaWQ9XCJ1c3VhcmlvXCJcclxuXHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPVwiU2l6aW5nIGV4YW1wbGUgaW5wdXRcIiBwbGFjZWhvbGRlcj1cIlVzdcOhcmlvXCIgYXJpYS1sYWJlbD1cIlVzdcOhcmlvXCJcclxuXHRcdFx0XHRcdFx0XHRhcmlhLWRlc2NyaWJlZGJ5PVwiaW5wdXRHcm91cC1zaXppbmctbGdcIlxyXG5cdFx0XHRcdFx0XHRcdFtjbGFzcy5pcy1pbnZhbGlkXT1cIkZvcm1VdGlscy5pc0ludmFsaWRGaWVsZChmb3JtLmdldCgndXN1YXJpbycpKVwiPlxyXG5cdFx0XHRcdFx0XHQ8YXBwLWZpZWxkLWVycm9yLW1lc3NhZ2UgW2NvbnRyb2xdPVwiZm9ybS5nZXQoJ3VzdWFyaW8nKVwiIGxhYmVsPVwiVXN1w6FyaW9cIj48L2FwcC1maWVsZC1lcnJvci1tZXNzYWdlPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtbGcgZm9ybS1pdGVtXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiA4cHg7XCI+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiIGlkPVwiaW5wdXRHcm91cC1zaXppbmctbGdcIlxyXG5cdFx0XHRcdFx0XHRcdHN0eWxlPVwicGFkZGluZzogMTBweDsgYm9yZGVyLXJhZGl1czogNHB4IDBweCAwcHggNHB4O1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2xvY2suc3ZnXCIgYWx0PVwibG9jay1pY29uXCIgLz5cclxuXHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInBhc3N3b3JkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzZW5oYVwiIGlkPVwic2VuaGFcIlxyXG5cdFx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9XCJTaXppbmcgZXhhbXBsZSBpbnB1dFwiIHBsYWNlaG9sZGVyPVwiU2VuaGFcIiBhcmlhLWxhYmVsPVwic2VuaGFcIlxyXG5cdFx0XHRcdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9XCJpbnB1dEdyb3VwLXNpemluZy1sZ1wiXHJcblx0XHRcdFx0XHRcdFx0W2NsYXNzLmlzLWludmFsaWRdPVwiRm9ybVV0aWxzLmlzSW52YWxpZEZpZWxkKGZvcm0uZ2V0KCdzZW5oYScpKVwiPlxyXG5cdFx0XHRcdFx0XHQ8YXBwLWZpZWxkLWVycm9yLW1lc3NhZ2UgW2NvbnRyb2xdPVwiZm9ybS5nZXQoJ3NlbmhhJylcIiBsYWJlbD1cIlNlbmhhXCI+PC9hcHAtZmllbGQtZXJyb3ItbWVzc2FnZT5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInJlbWVtYmVyLXBhc3N3b3JkXCI+XHJcblx0XHRcdFx0XHQ8IS0tIExlbWJyYXIgU2VuaGFcclxuXHRcdFx0XHRcdFx0PGlucHV0IGlkPVwiY2hlY2tib3hMZW1icmFyU2VuaGFcIiB0eXBlPVwiY2hlY2tib3hcIiAvPlxyXG5cdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiY2hlY2tib3hMZW1icmFyU2VuaGFcIj4gTGVtYnJhciBtaW5oYSBzZW5oYSA8L2xhYmVsPlxyXG4gXHRcdFx0XHRcdC0tPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAoY2xpY2spPVwiZ2V0U2VydmVyKClcIiB0eXBlPVwic3VibWl0XCJcclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWFjZXNzYXIgYnRuLWxnXCI+XHJcblx0XHRcdFx0XHRcdDxhcHAtbG9hZGluZy1idXR0b24gW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj48L2FwcC1sb2FkaW5nLWJ1dHRvbj5cclxuXHRcdFx0XHRcdFx0PHNwYW4+IEFjZXNzYXIgPC9zcGFuPlxyXG5cdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbkZvcmdvdHRlblBhc3N3b3JkTW9kYWwoZm9yZ290dGVuUGFzc3dvcmRNb2RhbClcIiBjbGFzcz1cImZvcmdvdHRlbi1wYXNzd29yZFwiPlxyXG5cdFx0XHRcdFx0XHQ8c3Bhbj4gRXNxdWVjZXUgc3VhIHNlbmhhPyA8L3NwYW4+XHJcblx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHQ8L2Zvcm0+XHJcblxyXG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAjQXV0aGVudGljYXRpb24yRmE+XHJcblx0XHRcdFx0XHQ8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1BdXRoZW50aWNhdGlvbjJGYVwiIGNsYXNzPVwiZm9ybS1wb3NpdGlvblwiPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtbGcgZm9ybS1pdGVtIG1iLTNcIj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cImlucHV0R3JvdXAtc2l6aW5nLWxnXCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwicGFkZGluZzogMTBweDsgYm9yZGVyLXJhZGl1czogNHB4IDBweCAwcHggNHB4O1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvbG9jay5zdmdcIiBhbHQ9XCJsb2NrLWljb25cIiAvPlxyXG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIiBpZD1cImNvZGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0YXJpYS1sYWJlbD1cIlNpemluZyBleGFtcGxlIGlucHV0XCIgcGxhY2Vob2xkZXI9XCJDw7NkaWdvIGRlIDIgZmF0b3Jlc1wiIGFyaWEtbGFiZWw9XCJDw7NkaWdvIGRlIDIgZmF0b3Jlc1wiXHJcblx0XHRcdFx0XHRcdFx0XHRhcmlhLWRlc2NyaWJlZGJ5PVwiaW5wdXRHcm91cC1zaXppbmctbGdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0W2NsYXNzLmlzLWludmFsaWRdPVwiRm9ybVV0aWxzLmlzSW52YWxpZEZpZWxkKGZvcm1BdXRoZW50aWNhdGlvbjJGYS5nZXQoJ2NvZGUnKSlcIj5cclxuXHRcdFx0XHRcdFx0XHQ8YXBwLWZpZWxkLWVycm9yLW1lc3NhZ2UgW2NvbnRyb2xdPVwiZm9ybUF1dGhlbnRpY2F0aW9uMkZhLmdldCgnY29kZScpXCIgbGFiZWw9XCJDw7NkaWdvIGRlIDIgZmF0b3Jlc1wiPjwvYXBwLWZpZWxkLWVycm9yLW1lc3NhZ2U+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uIChjbGljayk9XCJ2b2x0YXIoKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tYWNlc3NhciBnbGItYnRuLW91dGxpbmUtZGFyay1kaXNhYmxlZCBjb2wgbWUtMVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0Vm9sdGFyXHJcblx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nU2VuZEF1dGhlbnRpY2F0aW9uMkZhXCIgKGNsaWNrKT1cInNlbmRDb2RlKClcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWFjZXNzYXIgYnRuLXByaW1hcnkgY29sIG1zLTFcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhcHAtbG9hZGluZy1idXR0b24gW2lzTG9hZGluZ109XCJpc0xvYWRpbmdTZW5kQXV0aGVudGljYXRpb24yRmFcIj48L2FwcC1sb2FkaW5nLWJ1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdEFjZXNzYXJcclxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHRcdFx0XHRcdFx0XHQ8YnV0dG9uICpuZ0lmPVwic2Vjb25kc0xlZnQgPT0gMDsgZWxzZSBuZXdDb2RlXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCIgKGNsaWNrKT1cImdldE5ld0NvZGUoKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tYWNlc3NhciBidG4tb3V0bGluZS1wcmltYXJ5IGNvbFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGFwcC1sb2FkaW5nLWJ1dHRvbiBbaXNMb2FkaW5nXT1cImlzTG9hZGluZ1wiPjwvYXBwLWxvYWRpbmctYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0RW52aWFyIG5vdm8gY8OzZGlnb1xyXG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSAjbmV3Q29kZT5cclxuXHRcdFx0XHRcdFx0XHRcdDxwIGNsYXNzPVwidGV4dC1jZW50ZXJcIj57eyBzZWNvbmRzTGVmdH19IHt7IHNlY29uZHNMZWZ0ID09IDEgPyAnc2VndW5kbycgOiAnc2VndW5kb3MnIH19IHBhcmEgb2J0ZXIgbm92byBjw7NkaWdvPC9wPlxyXG5cdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9mb3JtPlx0XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9vdGVyLXBvc2l0aW9uXCI+XHJcblx0XHRcdFx0XHQ8Zm9vdGVyPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZvb3RlclwiPiBcclxuXHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiaHR0cHM6Ly9kcG8ucHJpdmFjeXRvb2xzLmNvbS5ici9wb2xpY3ktdmlldy9KbUdlTmxKZHcvMS9wb2xpJUNDJTgxdGljYS1kZS1wcml2YWNpZGFkZS9wdF9CUj9zPTE2ODU3MzE1MTAwNjZcIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cInNpc3BybyB0ZXh0LXByaW1hcnlcIj4gUG9sw610aWNhIGRlIFByaXZhY2lkYWRlIDwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8cCBjbGFzcz1cInNlcGFyYXRvclwiPiB8IDwvcD5cclxuXHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiaHR0cHM6Ly9kcG8ucHJpdmFjeXRvb2xzLmNvbS5ici9wb2xpY3ktdmlldy9Sb3JrMzVOTjIvMi9wb2xpJUNDJTgxdGljYS1kZS1jb29raWVzL3B0X0JSP3M9MTY4NTczMTU1MTk3NlwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwic2lzcHJvIHRleHQtcHJpbWFyeVwiPiBQb2zDrXRpY2EgZGUgQ29va2llcyA8L2E+XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb290ZXJcIj4gRGVzZW52b2x2aWRvIHBvciBcclxuXHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiaHR0cHM6Ly93d3cuc2lzcHJvLmNvbS5ici9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cInNpc3BybyB0ZXh0LXByaW1hcnlcIj4gc2lzcHJvIHMvYSA8L2E+XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmb290ZXJcIj4gU2VydmnDp29zIGUgVGVjbm9sb2dpYSBkYSBpbmZvcm1hw6fDo28gwqkge3sgeWVhciB9fSBUb2RvcyBvcyBkaXJlaXRvcyByZXNlcnZhZG9zIDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaWNvbnNcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJodHRwczovL3B0LWJyLmZhY2Vib29rLmNvbS9TaXNwcm9FUlAvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsaWItaWNvbiBjbGFzcz1cInRleHQtcHJpbWFyeVwiIGljb25OYW1lPVwiZmFjZWJvb2tcIiBpY29uU2l6ZT1cIm1lZGl1bS1zbWFsbFwiLz5cclxuXHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIGhyZWY9XCJodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL2FjY291bnRzL2xvZ2luLz9uZXh0PS9zaXNwcm9fc29mdHdhcmUvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsaWItaWNvbiBjbGFzcz1cInRleHQtcHJpbWFyeVwiIGljb25OYW1lPVwiaW5zdGFncmFtXCIgaWNvblNpemU9XCJtZWRpdW0tc21hbGxcIi8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YSBocmVmPVwiaHR0cHM6Ly9ici5saW5rZWRpbi5jb20vY29tcGFueS9zaXNwcm9cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGxpYi1pY29uIGNsYXNzPVwidGV4dC1wcmltYXJ5XCIgaWNvbk5hbWU9XCJsaW5rZWRpblwiIGljb25TaXplPVwibWVkaXVtLXNtYWxsXCIvPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxhIFtocmVmXT1cImdldHVybEVycENvbmZpZygpXCIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweDtcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0Q29uZmlndXJhciBFUlBcclxuXHRcdFx0XHRcdFx0XHRcdDwvYT5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvZm9vdGVyPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gVGVtcGxhdGUgZG8gbW9kYWwgZGUgc2VuaGEgZXNxdWVjaWRhIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZvcmdvdHRlblBhc3N3b3JkTW9kYWw+XHJcblx0PGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtRmd0UHN3XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIHN0eWxlPVwiYm94LXNoYWRvdzogMnB4IDJweCA1cHggMHB4IHJnYmEoMCwwLDAsMC41KTtcIj5cclxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwLTNcIj5cclxuXHRcdFx0XHQ8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPiBSZWN1cGVyYcOnw6NvIGRlIHNlbmhhIDwvaDQ+XHJcblx0XHRcdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcblx0XHRcdFx0XHQoY2xpY2spPVwiY2xvc2VGb3Jnb3R0ZW5QYXNzd29yZE1vZGFsKClcIj5cclxuXHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcblx0XHRcdFx0PGxhYmVsIGZvcj1cImlucHV0RG9taW5pb0ZndFBzd1wiIGNsYXNzPVwiaW5wdXQtbGFiZWxcIj4gRG9tw61uaW8gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuXHRcdFx0XHQ8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlucHV0RG9taW5pb0ZndFBzd1wiIGZvcm1Db250cm9sTmFtZT1cImRvbWluaW9GZ3RQc3dcIlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtdGV4dFwiIGFyaWEtbGFiZWw9XCJTaXppbmcgZXhhbXBsZSBpbnB1dFwiIGFyaWEtbGFiZWw9XCJEb23DrW5pb1wiXHJcblx0XHRcdFx0XHRhcmlhLWRlc2NyaWJlZGJ5PVwiaW5wdXRHcm91cC1zaXppbmctbGdcIlxyXG5cdFx0XHRcdFx0W2NsYXNzLmlzLWludmFsaWRdPVwiRm9ybVV0aWxzLmlzSW52YWxpZEZpZWxkKGZvcm1GZ3RQc3cuZ2V0KCdkb21pbmlvRmd0UHN3JykpXCI+XHJcblx0XHRcdFx0PGFwcC1maWVsZC1lcnJvci1tZXNzYWdlIFtjb250cm9sXT1cImZvcm1GZ3RQc3cuZ2V0KCdkb21pbmlvRmd0UHN3JylcIiBsYWJlbD1cIkRvbcOtbmlvXCI+PC9hcHAtZmllbGQtZXJyb3ItbWVzc2FnZT5cdFx0XHRcdFxyXG5cclxuXHRcdFx0XHQ8bGFiZWwgZm9yPVwiaW5wdXRVc3VhcmlvRmd0UHN3XCIgY2xhc3M9XCJpbnB1dC1sYWJlbFwiPiBVc3XDoXJpbyA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG5cdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiaW5wdXRVc3VhcmlvRmd0UHN3XCIgZm9ybUNvbnRyb2xOYW1lPVwidXN1YXJpb0ZndFBzd1wiXHJcblx0XHRcdFx0XHRjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC10ZXh0XCIgYXJpYS1sYWJlbD1cIlNpemluZyBleGFtcGxlIGlucHV0XCIgYXJpYS1sYWJlbD1cIlVzdcOhcmlvXCJcclxuXHRcdFx0XHRcdGFyaWEtZGVzY3JpYmVkYnk9XCJpbnB1dEdyb3VwLXNpemluZy1sZ1wiXHJcblx0XHRcdFx0XHRbY2xhc3MuaXMtaW52YWxpZF09XCJGb3JtVXRpbHMuaXNJbnZhbGlkRmllbGQoZm9ybUZndFBzdy5nZXQoJ3VzdWFyaW9GZ3RQc3cnKSlcIj5cclxuXHRcdFx0XHQ8YXBwLWZpZWxkLWVycm9yLW1lc3NhZ2UgW2NvbnRyb2xdPVwiZm9ybUZndFBzdy5nZXQoJ3VzdWFyaW9GZ3RQc3cnKVwiIGxhYmVsPVwiVXN1w6FyaW9cIj48L2FwcC1maWVsZC1lcnJvci1tZXNzYWdlPlx0XHRcdFx0XHJcblx0XHRcclxuXHRcdFx0PC9kaXY+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuXHRcdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBnbGItYnRuLWRhcmstZGlzYWJsZWQgbW9kYWwtYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlRm9yZ290dGVuUGFzc3dvcmRNb2RhbCgpXCI+XHJcblx0XHRcdFx0XHQ8c3Bhbj4gQ2FuY2VsYXIgPC9zcGFuPlxyXG5cdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1vZGFsLWJ1dHRvblwiIChjbGljayk9XCJzZW5kRm9yZ290dGVuUGFzc3dvcmQoKTtcIj5cclxuXHRcdFx0XHRcdDxzcGFuPiBDb250aW51YXIgPC9zcGFuPlxyXG5cdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -0,0 +1,68 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../../custom/custom-menu.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "ngx-sp-infra";
7
+ import * as i4 from "../secondary-dropdown/secondary-dropdown.component";
8
+ //import { ProjectUtilservice } from 'src/app/project/utils/project-utils.service';
9
+ //import { environment } from '../../../../environments/environments';
10
+ export class PrimaryDropdownComponent {
11
+ constructor(_customMenuService) {
12
+ this._customMenuService = _customMenuService;
13
+ this.buttonWasClicked = new Observable;
14
+ this.primaryDropdown = [];
15
+ }
16
+ ngOnInit() {
17
+ console.log('ngOnInit');
18
+ this.buttonWasClicked.subscribe(() => { this.selectDataState = true; });
19
+ // Resolver colisão de eventos
20
+ if (this._customMenuService.menuDynamic) {
21
+ if (!this._customMenuService.menuConfig) {
22
+ setTimeout(() => {
23
+ this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);
24
+ }, 2000);
25
+ }
26
+ else {
27
+ this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);
28
+ }
29
+ }
30
+ else {
31
+ this.primaryDropdown = this._customMenuService.menuConfig.initializeMenuDropdown(this.primaryDropdown);
32
+ }
33
+ }
34
+ openDropdown(modulo, desiredDropdown) {
35
+ this.modulo = modulo;
36
+ if (desiredDropdown == null) {
37
+ this.selectDataState = true;
38
+ }
39
+ else {
40
+ this.selectDataState = false;
41
+ }
42
+ }
43
+ onClickedOutside(e, ref) {
44
+ if (this.selectDataState = false) {
45
+ this.selectDataState = true;
46
+ }
47
+ }
48
+ backToPrimary(data) {
49
+ this.selectDataState = true;
50
+ }
51
+ redirectToPrePortal() {
52
+ const url = `https://siscandesv6.sispro.com.br/SisproErpCloud/PrePortal`;
53
+ window.open(url, '_blank');
54
+ }
55
+ redirectToModulo(modulo) {
56
+ const url = `https://siscandesv6.sispro.com.br/SisproErpCloud/${modulo}`;
57
+ window.open(url, '_blank');
58
+ }
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PrimaryDropdownComponent, deps: [{ token: i1.LibCustomMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PrimaryDropdownComponent, selector: "app-primary-dropdown", inputs: { buttonWasClicked: "buttonWasClicked" }, ngImport: i0, template: "<div class=\"p-2\">\r\n <div *ngIf=\"selectDataState; else secondary_dropdown\" class=\"mb-2 w-100\">\r\n <li *ngFor=\"let modulo of primaryDropdown\" (click)=\"(modulo.secondary_level != null ? openDropdown(modulo, secondary_dropdown) : redirectToModulo(modulo.URL))\">\r\n <a class=\"dropdown-item mb-2\">\r\n <img src=\"{{ modulo.icon }}\" alt=\"{{ modulo.label }}\">\r\n {{ modulo.label }}\r\n </a>\r\n </li>\r\n <hr class=\"dropdown-divider\">\r\n <li>\r\n <a class=\"dropdown-item link-portal mt-2\" (click)=\"redirectToPrePortal()\" target=\"_blank\">Portal Sispro</a>\r\n </li>\r\n </div>\r\n\r\n <ng-template #secondary_dropdown>\r\n <div #secondary_ref (clickOutside)=\"onClickedOutside($event, secondary_ref)\">\r\n <app-secondary-dropdown [modulo]=\"this.modulo\" (backPrimaryDropdown)=\"backToPrimary($event)\"></app-secondary-dropdown>\r\n </div>\r\n </ng-template>\r\n</div>", styles: ["*{padding:0;margin:0}li a{font-size:14px}li a img{margin-right:4px}li a:hover{font-weight:700;background-color:transparent}.dropdown-divider{height:0}.link-portal{color:#2847a0;text-decoration:underline;text-align:center;font-weight:700;font-size:14px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { kind: "component", type: i4.SecondaryDropdownComponent, selector: "app-secondary-dropdown", inputs: ["modulo"], outputs: ["backPrimaryDropdown"] }] }); }
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PrimaryDropdownComponent, decorators: [{
63
+ type: Component,
64
+ args: [{ selector: 'app-primary-dropdown', template: "<div class=\"p-2\">\r\n <div *ngIf=\"selectDataState; else secondary_dropdown\" class=\"mb-2 w-100\">\r\n <li *ngFor=\"let modulo of primaryDropdown\" (click)=\"(modulo.secondary_level != null ? openDropdown(modulo, secondary_dropdown) : redirectToModulo(modulo.URL))\">\r\n <a class=\"dropdown-item mb-2\">\r\n <img src=\"{{ modulo.icon }}\" alt=\"{{ modulo.label }}\">\r\n {{ modulo.label }}\r\n </a>\r\n </li>\r\n <hr class=\"dropdown-divider\">\r\n <li>\r\n <a class=\"dropdown-item link-portal mt-2\" (click)=\"redirectToPrePortal()\" target=\"_blank\">Portal Sispro</a>\r\n </li>\r\n </div>\r\n\r\n <ng-template #secondary_dropdown>\r\n <div #secondary_ref (clickOutside)=\"onClickedOutside($event, secondary_ref)\">\r\n <app-secondary-dropdown [modulo]=\"this.modulo\" (backPrimaryDropdown)=\"backToPrimary($event)\"></app-secondary-dropdown>\r\n </div>\r\n </ng-template>\r\n</div>", styles: ["*{padding:0;margin:0}li a{font-size:14px}li a img{margin-right:4px}li a:hover{font-weight:700;background-color:transparent}.dropdown-divider{height:0}.link-portal{color:#2847a0;text-decoration:underline;text-align:center;font-weight:700;font-size:14px}\n"] }]
65
+ }], ctorParameters: () => [{ type: i1.LibCustomMenuService }], propDecorators: { buttonWasClicked: [{
66
+ type: Input
67
+ }] } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWFyeS1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvbWVudS1sYXRlcmFsL2Ryb3Bkb3duL3ByaW1hcnktZHJvcGRvd24vcHJpbWFyeS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtYXV0aC9zcmMvbGliL2NvbXBvbmVudHMvbWVudS1sYXRlcmFsL2Ryb3Bkb3duL3ByaW1hcnktZHJvcGRvd24vcHJpbWFyeS1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBR2xDLG1GQUFtRjtBQUNuRixzRUFBc0U7QUFPdEUsTUFBTSxPQUFPLHdCQUF3QjtJQVUvQixZQUNjLGtCQUF3QztRQUF4Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXNCO1FBTjdDLHFCQUFnQixHQUF3QixJQUFJLFVBQVUsQ0FBQztRQUV6RCxvQkFBZSxHQUFlLEVBQ3BDLENBQUE7SUFLRyxDQUFDO0lBRUwsUUFBUTtRQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZFLDhCQUE4QjtRQUM5QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzdHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNmLENBQUM7aUJBQU0sQ0FBQztnQkFDRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdHLENBQUM7UUFFUCxDQUFDO2FBQU0sQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0csQ0FBQztJQUVQLENBQUM7SUFFTSxZQUFZLENBQUMsTUFBVyxFQUFFLGVBQWlDO1FBQzVELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLElBQUksZUFBZSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7YUFBTSxDQUFDO1lBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDbkMsQ0FBQztJQUNQLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxDQUFRLEVBQUUsR0FBbUI7UUFDL0MsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7SUFDUCxDQUFDO0lBRU0sYUFBYSxDQUFDLElBQWE7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUVNLG1CQUFtQjtRQUNwQixNQUFNLEdBQUcsR0FBVyw0REFBNEQsQ0FBQztRQUVqRixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsTUFBYztRQUNoQyxNQUFNLEdBQUcsR0FBVyxvREFBb0QsTUFBTSxFQUFFLENBQUM7UUFFakYsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0FsRU0sd0JBQXdCO21HQUF4Qix3QkFBd0IsOEdDWnJDLDBpQ0FtQk07OzRGRFBPLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDTSxzQkFBc0I7eUZBU3ZCLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTGliQ3VzdG9tTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jdXN0b20vY3VzdG9tLW1lbnUuc2VydmljZSc7XHJcbi8vaW1wb3J0IHsgUHJvamVjdFV0aWxzZXJ2aWNlIH0gZnJvbSAnc3JjL2FwcC9wcm9qZWN0L3V0aWxzL3Byb2plY3QtdXRpbHMuc2VydmljZSc7XHJcbi8vaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgICBzZWxlY3RvcjogJ2FwcC1wcmltYXJ5LWRyb3Bkb3duJyxcclxuICAgICAgdGVtcGxhdGVVcmw6ICcuL3ByaW1hcnktZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgICBzdHlsZVVybHM6IFsnLi9wcmltYXJ5LWRyb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcmltYXJ5RHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgICAgcHVibGljIHNlbGVjdERhdGFTdGF0ZSE6IGJvb2xlYW47XHJcbiAgICAgIHB1YmxpYyBtb2R1bG86IGFueTtcclxuXHJcbiAgICAgIEBJbnB1dCgpIGJ1dHRvbldhc0NsaWNrZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBuZXcgT2JzZXJ2YWJsZTtcclxuXHJcbiAgICAgIHB1YmxpYyBwcmltYXJ5RHJvcGRvd246IEFycmF5PGFueT4gPSBbXHJcbiAgICAgIF1cclxuXHJcbiAgICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgICAgICBwcml2YXRlIF9jdXN0b21NZW51U2VydmljZTogTGliQ3VzdG9tTWVudVNlcnZpY2UsXHJcbiAgICAgICAgICAgIC8vcHJpdmF0ZSBfcHJvamVjdFV0aWxzZXJ2aWNlOiBQcm9qZWN0VXRpbHNlcnZpY2VcclxuICAgICAgKSB7IH1cclxuXHJcbiAgICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbmdPbkluaXQnKTtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25XYXNDbGlja2VkLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMuc2VsZWN0RGF0YVN0YXRlID0gdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlc29sdmVyIGNvbGlzw6NvIGRlIGV2ZW50b3NcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1c3RvbU1lbnVTZXJ2aWNlLm1lbnVEeW5hbWljKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2N1c3RvbU1lbnVTZXJ2aWNlLm1lbnVDb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJpbWFyeURyb3Bkb3duID0gdGhpcy5fY3VzdG9tTWVudVNlcnZpY2UubWVudUNvbmZpZy5pbml0aWFsaXplTWVudURyb3Bkb3duKHRoaXMucHJpbWFyeURyb3Bkb3duKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJpbWFyeURyb3Bkb3duID0gdGhpcy5fY3VzdG9tTWVudVNlcnZpY2UubWVudUNvbmZpZy5pbml0aWFsaXplTWVudURyb3Bkb3duKHRoaXMucHJpbWFyeURyb3Bkb3duKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmltYXJ5RHJvcGRvd24gPSB0aGlzLl9jdXN0b21NZW51U2VydmljZS5tZW51Q29uZmlnLmluaXRpYWxpemVNZW51RHJvcGRvd24odGhpcy5wcmltYXJ5RHJvcGRvd24pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcblxyXG4gICAgICBwdWJsaWMgb3BlbkRyb3Bkb3duKG1vZHVsbzogYW55LCBkZXNpcmVkRHJvcGRvd246IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgICAgICAgICAgdGhpcy5tb2R1bG8gPSBtb2R1bG87XHJcblxyXG4gICAgICAgICAgICBpZiAoZGVzaXJlZERyb3Bkb3duID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRhU3RhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdERhdGFTdGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHB1YmxpYyBvbkNsaWNrZWRPdXRzaWRlKGU6IEV2ZW50LCByZWY6IEhUTUxEaXZFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdERhdGFTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVN0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBwdWJsaWMgYmFja1RvUHJpbWFyeShkYXRhOiBib29sZWFuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0YVN0YXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcHVibGljIHJlZGlyZWN0VG9QcmVQb3J0YWwoKTogdm9pZCB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybDogc3RyaW5nID0gYGh0dHBzOi8vc2lzY2FuZGVzdjYuc2lzcHJvLmNvbS5ici9TaXNwcm9FcnBDbG91ZC9QcmVQb3J0YWxgO1xyXG5cclxuICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHB1YmxpYyByZWRpcmVjdFRvTW9kdWxvKG1vZHVsbzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybDogc3RyaW5nID0gYGh0dHBzOi8vc2lzY2FuZGVzdjYuc2lzcHJvLmNvbS5ici9TaXNwcm9FcnBDbG91ZC8ke21vZHVsb31gO1xyXG5cclxuICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgICAgIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInAtMlwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNlbGVjdERhdGFTdGF0ZTsgZWxzZSBzZWNvbmRhcnlfZHJvcGRvd25cIiBjbGFzcz1cIm1iLTIgdy0xMDBcIj5cclxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBtb2R1bG8gb2YgcHJpbWFyeURyb3Bkb3duXCIgKGNsaWNrKT1cIihtb2R1bG8uc2Vjb25kYXJ5X2xldmVsICE9IG51bGwgPyBvcGVuRHJvcGRvd24obW9kdWxvLCBzZWNvbmRhcnlfZHJvcGRvd24pIDogcmVkaXJlY3RUb01vZHVsbyhtb2R1bG8uVVJMKSlcIj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBtb2R1bG8uaWNvbiB9fVwiIGFsdD1cInt7IG1vZHVsby5sYWJlbCB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG1vZHVsby5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+XHJcbiAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBsaW5rLXBvcnRhbCBtdC0yXCIgKGNsaWNrKT1cInJlZGlyZWN0VG9QcmVQb3J0YWwoKVwiIHRhcmdldD1cIl9ibGFua1wiPlBvcnRhbCBTaXNwcm88L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI3NlY29uZGFyeV9kcm9wZG93bj5cclxuICAgICAgICA8ZGl2ICNzZWNvbmRhcnlfcmVmIChjbGlja091dHNpZGUpPVwib25DbGlja2VkT3V0c2lkZSgkZXZlbnQsIHNlY29uZGFyeV9yZWYpXCI+XHJcbiAgICAgICAgICAgIDxhcHAtc2Vjb25kYXJ5LWRyb3Bkb3duIFttb2R1bG9dPVwidGhpcy5tb2R1bG9cIiAoYmFja1ByaW1hcnlEcm9wZG93bik9XCJiYWNrVG9QcmltYXJ5KCRldmVudClcIj48L2FwcC1zZWNvbmRhcnktZHJvcGRvd24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj4iXX0=