@careonbrasil/dashboard 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,522 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
+ import { DashboardPeriod, PerformanceLevel, DutySalaryStatus } from './models/dashboard.models';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@careonbrasil/ng-charts";
6
+ import * as i3 from "./components/performance-wave/performance-wave.component";
7
+ import * as i4 from "./components/dashboard-icon/dashboard-icon.component";
8
+ import * as i5 from "./components/dashboard-skeleton/dashboard-skeleton.component";
9
+ export function formatKpiBadge(diff, polarity, isDecimal = false) {
10
+ const isZero = diff === 0;
11
+ const isPositive = diff > 0;
12
+ const isNegative = diff < 0;
13
+ const changeText = isZero
14
+ ? (isDecimal ? '0,0' : '0')
15
+ : (isDecimal ? Math.abs(diff).toFixed(1).replace('.', ',') : `${Math.abs(diff)}`);
16
+ let badgeClass = 'kpi-badge--gray';
17
+ if (!isZero) {
18
+ if (polarity === 'neutral') {
19
+ badgeClass = 'kpi-badge--blue';
20
+ }
21
+ else if (polarity === 'higherIsBetter') {
22
+ badgeClass = isPositive ? 'kpi-badge--green' : 'kpi-badge--coral';
23
+ }
24
+ else if (polarity === 'lowerIsBetter') {
25
+ badgeClass = isPositive ? 'kpi-badge--coral' : 'kpi-badge--green';
26
+ }
27
+ }
28
+ return { changeText, badgeClass, isPositive, isNegative, isZero };
29
+ }
30
+ export const DEFAULT_PERFORMANCE_TEXTS = {
31
+ [PerformanceLevel.Blue]: {
32
+ title: 'Ainda tem espaço para se destacar.',
33
+ description: 'Sua instituição já desperta bom interesse entre os candidatos. Fale com um consultor da CareOn para ir ainda mais longe.'
34
+ },
35
+ [PerformanceLevel.Orange]: {
36
+ title: 'Suas vagas estão sendo vistas, mas pouca gente se candidata.',
37
+ description: 'Isso pode indicar que os valores oferecidos estão abaixo da média da região, que faltam informações mais atrativas ou que suas informações estão incompletas. Fale com um consultor da CareOn.'
38
+ },
39
+ [PerformanceLevel.Red]: {
40
+ title: 'Sua instituição não está sendo muito procurada pelos candidatos.',
41
+ description: 'Faz tempo que você não publica uma vaga, por isso sua análise de desempenho vem caindo. Fale com um consultor da CareOn para ter um apoio personalizado.'
42
+ }
43
+ };
44
+ /**
45
+ * Componente principal de Dashboard de Recrutamento Institucional da CareOn.
46
+ *
47
+ * Centraliza e orquestra a exibicao de:
48
+ * - Cabecalho com filtros temporais reativos (Hoje, Semana, Mes)
49
+ * - Cards superiores de Indicadores-Chave de Performance (KPIs)
50
+ * - Secao acionavel "Precisa da sua atencao" (alertas de vagas criticas)
51
+ * - Secao "Analise de Desempenho" (curva de ondas vetorial e orientacao consultiva)
52
+ * - Secao "Analise por Vaga" (dropdown de vagas, timeline, donut de conversao, funil e analise salarial)
53
+ * - Secao "Candidaturas por Vaga" (grafico comparativo de barras entre vagas)
54
+ */
55
+ export class DashboardComponent {
56
+ constructor(cdr) {
57
+ this.cdr = cdr;
58
+ /**
59
+ * Whether the dashboard is currently fetching data from the backend API.
60
+ * @default false
61
+ */
62
+ this.loading = false;
63
+ /**
64
+ * Active time period filter.
65
+ * @default 'Week'
66
+ */
67
+ this.currentPeriod = DashboardPeriod.Week;
68
+ this.DutySalaryStatus = DutySalaryStatus;
69
+ this.PerformanceLevel = PerformanceLevel;
70
+ this.DashboardPeriod = DashboardPeriod;
71
+ /**
72
+ * Main dashboard title.
73
+ * @default 'Dashboard'
74
+ */
75
+ this.title = 'Dashboard';
76
+ /**
77
+ * Optional subtitle or institution name displayed in the header.
78
+ * @default 'Visão geral de recrutamento'
79
+ */
80
+ this.subtitle = 'Visão geral de recrutamento';
81
+ /**
82
+ * Empty state message when no data is returned.
83
+ */
84
+ this.emptyMessage = 'Nenhum dado registrado para o período selecionado.';
85
+ /**
86
+ * Consultant phone number for WhatsApp redirect.
87
+ * @default '5547996569707'
88
+ */
89
+ this.consultantPhone = '5547996569707';
90
+ /**
91
+ * Initial message for WhatsApp consultant chat.
92
+ * @default 'empty string'
93
+ */
94
+ this.consultantMessage = '';
95
+ /**
96
+ * Controls whether zeroed states display the actionable 'Publicar Vaga' CTA banner or a basic informational zero state.
97
+ * - 'publish': displays the special business zero state with the 'Publicar Vaga' action button.
98
+ * - 'basic': displays the simple/basic zero state without the 'Publicar Vaga' action button.
99
+ * @default 'publish'
100
+ */
101
+ this.zeroStateMode = 'publish';
102
+ // #endregion
103
+ // #region Outputs
104
+ /**
105
+ * Emitted whenever the user selects a different period filter (Today, Week, Month).
106
+ */
107
+ this.periodChange = new EventEmitter();
108
+ /**
109
+ * Emitted whenever an interactive element in any chart is clicked (reserved for upcoming chart sections).
110
+ */
111
+ this.itemSelected = new EventEmitter();
112
+ /**
113
+ * Emitted whenever the user clicks on 'Publicar Vaga' across any of the zero-state banners.
114
+ */
115
+ this.publishDuty = new EventEmitter();
116
+ /**
117
+ * Emitted whenever the user selects a duty in the vacancy analysis dropdown.
118
+ */
119
+ this.dutySelected = new EventEmitter();
120
+ /**
121
+ * Emitted whenever the user clicks on 'Fale com um consultor' across any section.
122
+ */
123
+ this.consultantClick = new EventEmitter();
124
+ /**
125
+ * Emitted whenever a vacancy in the attention list is clicked.
126
+ */
127
+ this.attentionItemSelected = new EventEmitter();
128
+ // #endregion
129
+ // #region PerformanceAnalysisSection
130
+ this.showInfoTooltip = false;
131
+ // #endregion
132
+ // #region VacancyAnalysisSection
133
+ this.selectedDutyId = null;
134
+ this.isDutyDropdownOpen = false;
135
+ }
136
+ get isPublishZeroState() {
137
+ return this.zeroStateMode === 'publish';
138
+ }
139
+ // #endregion
140
+ onPublishDuty(section = 'Zero State') {
141
+ this.publishDuty.emit(section);
142
+ }
143
+ ngOnChanges(changes) {
144
+ if (changes['data']) {
145
+ this.syncSelectedDuty();
146
+ this.cdr.markForCheck();
147
+ }
148
+ if (changes['loading'] || changes['currentPeriod']) {
149
+ this.cdr.markForCheck();
150
+ }
151
+ }
152
+ syncSelectedDuty() {
153
+ if (!this.vacanciesAnalysis || this.vacanciesAnalysis.length === 0) {
154
+ this.selectedDutyId = null;
155
+ return;
156
+ }
157
+ const exists = this.vacanciesAnalysis.some(d => d.dutyId === this.selectedDutyId);
158
+ if (!exists) {
159
+ this.selectedDutyId = this.vacanciesAnalysis[0].dutyId;
160
+ }
161
+ }
162
+ // #region AttentionSection
163
+ get attentionItems() {
164
+ return this.data?.attentionItems ?? [];
165
+ }
166
+ onAttentionItemClick(item) {
167
+ this.attentionItemSelected.emit(item);
168
+ }
169
+ openConsultantWhatsApp(section = 'Consultor') {
170
+ this.consultantClick.emit(section);
171
+ if (typeof window !== 'undefined') {
172
+ const cleanPhone = (this.consultantPhone || '5547996569707').replace(/\D/g, '');
173
+ const textParam = this.consultantMessage
174
+ ? `&text=${encodeURIComponent(this.consultantMessage)}`
175
+ : '';
176
+ const whatsappUrl = `https://api.whatsapp.com/send?phone=${cleanPhone}${textParam}`;
177
+ window.open(whatsappUrl, '_blank', 'noopener,noreferrer');
178
+ }
179
+ }
180
+ toggleInfoTooltip() {
181
+ this.showInfoTooltip = !this.showInfoTooltip;
182
+ this.cdr.markForCheck();
183
+ }
184
+ onInfoMouseEnter() {
185
+ this.showInfoTooltip = true;
186
+ this.cdr.markForCheck();
187
+ }
188
+ onInfoMouseLeave() {
189
+ this.showInfoTooltip = false;
190
+ this.cdr.markForCheck();
191
+ }
192
+ get performanceAnalysis() {
193
+ return this.data?.performanceAnalysis;
194
+ }
195
+ get performanceLevel() {
196
+ const level = this.performanceAnalysis?.level;
197
+ if (level === PerformanceLevel.Blue || level === 0)
198
+ return PerformanceLevel.Blue;
199
+ if (level === PerformanceLevel.Orange || level === 1)
200
+ return PerformanceLevel.Orange;
201
+ if (level === PerformanceLevel.Red || level === 2)
202
+ return PerformanceLevel.Red;
203
+ return PerformanceLevel.Red;
204
+ }
205
+ get performanceTitle() {
206
+ return this.performanceAnalysis?.highlightTitle
207
+ || DEFAULT_PERFORMANCE_TEXTS[this.performanceLevel]?.title
208
+ || DEFAULT_PERFORMANCE_TEXTS[PerformanceLevel.Red].title;
209
+ }
210
+ get performanceDescription() {
211
+ return this.performanceAnalysis?.description
212
+ || DEFAULT_PERFORMANCE_TEXTS[this.performanceLevel]?.description
213
+ || DEFAULT_PERFORMANCE_TEXTS[PerformanceLevel.Red].description;
214
+ }
215
+ get vacanciesAnalysis() {
216
+ return this.data?.vacanciesAnalysis ?? [];
217
+ }
218
+ get selectedDuty() {
219
+ if (this.vacanciesAnalysis.length === 0)
220
+ return null;
221
+ if (this.selectedDutyId) {
222
+ const found = this.vacanciesAnalysis.find(d => d.dutyId === this.selectedDutyId);
223
+ if (found)
224
+ return found;
225
+ }
226
+ return this.vacanciesAnalysis[0];
227
+ }
228
+ toggleDutyDropdown() {
229
+ this.isDutyDropdownOpen = !this.isDutyDropdownOpen;
230
+ }
231
+ closeDutyDropdown() {
232
+ this.isDutyDropdownOpen = false;
233
+ }
234
+ selectDuty(duty) {
235
+ this.selectedDutyId = duty.dutyId;
236
+ this.isDutyDropdownOpen = false;
237
+ this.dutySelected.emit(duty);
238
+ }
239
+ get vacancySectionSubtitle() {
240
+ const candidates = this.selectedDuty?.candidatesCount ?? 0;
241
+ const candText = candidates === 1 ? 'candidatura' : 'candidaturas';
242
+ switch (this.currentPeriod) {
243
+ case DashboardPeriod.Week:
244
+ return `${candidates} ${candText} nos últimos 7 dias`;
245
+ case DashboardPeriod.Month:
246
+ return `${candidates} ${candText} neste mês`;
247
+ case DashboardPeriod.Today:
248
+ default:
249
+ return `${candidates} ${candText} hoje`;
250
+ }
251
+ }
252
+ get selectedDutyTimelinePoints() {
253
+ return this.selectedDuty?.timelinePoints ?? [];
254
+ }
255
+ get selectedDutyDonutItems() {
256
+ if (this.selectedDuty?.conversionDonut && this.selectedDuty.conversionDonut.length > 0) {
257
+ return this.selectedDuty.conversionDonut;
258
+ }
259
+ const views = this.selectedDuty?.viewsCount ?? 0;
260
+ const candidates = this.selectedDuty?.candidatesCount ?? 0;
261
+ return [
262
+ { label: 'Visualizações', value: views, color: '#1E1B4B' },
263
+ { label: 'Candidaturas', value: candidates, color: '#3B82F6' }
264
+ ];
265
+ }
266
+ get selectedDutyConversionRateText() {
267
+ const rate = this.selectedDuty?.conversionRate ?? 0;
268
+ return `${rate}%`;
269
+ }
270
+ get selectedDutyFunnelItems() {
271
+ if (this.selectedDuty?.funnelItems && this.selectedDuty.funnelItems.length > 0) {
272
+ return this.selectedDuty.funnelItems;
273
+ }
274
+ const views = this.selectedDuty?.viewsCount ?? 0;
275
+ const candidates = this.selectedDuty?.candidatesCount ?? 0;
276
+ return [
277
+ { label: 'Visualizações', count: views, barColor: '#1E1B4B' },
278
+ { label: 'Candidaturas', count: candidates, barColor: '#3B82F6' }
279
+ ];
280
+ }
281
+ onTimelinePointSelected(point) {
282
+ this.itemSelected.emit({
283
+ chart: 'Linha Temporal por Vaga',
284
+ item: point
285
+ });
286
+ }
287
+ // #endregion
288
+ // #region VacancySalaryComparisonSection
289
+ get selectedDutySalaryComparison() {
290
+ return this.selectedDuty?.salaryComparison;
291
+ }
292
+ get salaryStatus() {
293
+ const s = this.selectedDutySalaryComparison?.status;
294
+ if (s === DutySalaryStatus.BelowMarket || s === 0)
295
+ return DutySalaryStatus.BelowMarket;
296
+ if (s === DutySalaryStatus.AtMarket || s === 1)
297
+ return DutySalaryStatus.AtMarket;
298
+ if (s === DutySalaryStatus.AboveMarket || s === 2)
299
+ return DutySalaryStatus.AboveMarket;
300
+ if (s === DutySalaryStatus.NotInformed || s === 3)
301
+ return DutySalaryStatus.NotInformed;
302
+ if (s === DutySalaryStatus.InsufficientData || s === 4)
303
+ return DutySalaryStatus.InsufficientData;
304
+ return null;
305
+ }
306
+ formatCurrency(value) {
307
+ if (value === null || value === undefined) {
308
+ return '';
309
+ }
310
+ return new Intl.NumberFormat('pt-BR', {
311
+ style: 'currency',
312
+ currency: 'BRL',
313
+ maximumFractionDigits: 0
314
+ }).format(value).replace(/\u00A0/g, ' ');
315
+ }
316
+ get formattedYourSalary() {
317
+ const comparison = this.selectedDutySalaryComparison;
318
+ if (!comparison || this.salaryStatus === DutySalaryStatus.NotInformed || comparison.yourSalary === null || comparison.yourSalary === undefined) {
319
+ return 'Não informado';
320
+ }
321
+ return this.formatCurrency(comparison.yourSalary);
322
+ }
323
+ get formattedRegionalAverage() {
324
+ const comparison = this.selectedDutySalaryComparison;
325
+ if (!comparison || this.salaryStatus === DutySalaryStatus.InsufficientData || comparison.regionalAverageSalary === null || comparison.regionalAverageSalary === undefined) {
326
+ return 'Dados insuficientes';
327
+ }
328
+ return this.formatCurrency(comparison.regionalAverageSalary);
329
+ }
330
+ get salaryBadgeClass() {
331
+ switch (this.salaryStatus) {
332
+ case DutySalaryStatus.BelowMarket:
333
+ return 'salary-badge--orange';
334
+ case DutySalaryStatus.AtMarket:
335
+ return 'salary-badge--blue';
336
+ case DutySalaryStatus.AboveMarket:
337
+ return 'salary-badge--purple';
338
+ default:
339
+ return '';
340
+ }
341
+ }
342
+ get salaryTitleColorClass() {
343
+ switch (this.salaryStatus) {
344
+ case DutySalaryStatus.BelowMarket:
345
+ return 'salary-title--orange';
346
+ case DutySalaryStatus.AtMarket:
347
+ return 'salary-title--blue';
348
+ case DutySalaryStatus.AboveMarket:
349
+ return 'salary-title--purple';
350
+ case DutySalaryStatus.NotInformed:
351
+ return 'salary-title--red';
352
+ case DutySalaryStatus.InsufficientData:
353
+ default:
354
+ return 'salary-title--default';
355
+ }
356
+ }
357
+ // #endregion
358
+ // #region KpiGetters
359
+ // 1. Vagas Publicadas
360
+ get registeredVacancies() {
361
+ return this.data?.kpis?.registeredVacancies ?? 0;
362
+ }
363
+ get registeredVacanciesDiff() {
364
+ return this.data?.kpis?.registeredVacanciesDifference ?? 0;
365
+ }
366
+ get registeredVacanciesBadge() {
367
+ return formatKpiBadge(this.registeredVacanciesDiff, 'neutral');
368
+ }
369
+ get registeredVacanciesChange() {
370
+ return this.registeredVacanciesBadge.changeText;
371
+ }
372
+ get registeredVacanciesBadgeClass() {
373
+ return this.registeredVacanciesBadge.badgeClass;
374
+ }
375
+ // 2. Candidatos Inscritos
376
+ get candidateApplications() {
377
+ return this.data?.kpis?.candidateApplications ?? 0;
378
+ }
379
+ get candidateApplicationsDiff() {
380
+ return this.data?.kpis?.candidateApplicationsDifference ?? 0;
381
+ }
382
+ get candidateApplicationsBadge() {
383
+ return formatKpiBadge(this.candidateApplicationsDiff, 'higherIsBetter');
384
+ }
385
+ get candidateApplicationsChange() {
386
+ return this.candidateApplicationsBadge.changeText;
387
+ }
388
+ get candidateApplicationsBadgeClass() {
389
+ return this.candidateApplicationsBadge.badgeClass;
390
+ }
391
+ // 3. Currículos para Avaliar
392
+ get pendingReviews() {
393
+ return this.data?.kpis?.pendingReviews ?? 0;
394
+ }
395
+ get pendingReviewsDiff() {
396
+ return this.data?.kpis?.pendingReviewsDifference ?? 0;
397
+ }
398
+ get pendingReviewsBadge() {
399
+ return formatKpiBadge(this.pendingReviewsDiff, 'lowerIsBetter');
400
+ }
401
+ get pendingReviewsChange() {
402
+ return this.pendingReviewsBadge.changeText;
403
+ }
404
+ get pendingReviewsBadgeClass() {
405
+ return this.pendingReviewsBadge.badgeClass;
406
+ }
407
+ // 4. Média de Candidatos
408
+ get averageCandidatesPerVacancy() {
409
+ const avg = this.data?.kpis?.averageCandidatesPerVacancy;
410
+ if (avg === undefined || avg === null)
411
+ return '0,0';
412
+ return avg.toFixed(1).replace('.', ',');
413
+ }
414
+ get averageCandidatesDiff() {
415
+ return this.data?.kpis?.averageCandidatesDifference ?? 0;
416
+ }
417
+ get averageCandidatesBadge() {
418
+ return formatKpiBadge(this.averageCandidatesDiff, 'higherIsBetter', true);
419
+ }
420
+ get averageCandidatesChange() {
421
+ return this.averageCandidatesBadge.changeText;
422
+ }
423
+ get averageCandidatesBadgeClass() {
424
+ return this.averageCandidatesBadge.badgeClass;
425
+ }
426
+ // 5. Status das Vagas
427
+ get openVacancies() {
428
+ return this.data?.kpis?.openVacancies ?? 0;
429
+ }
430
+ get closedVacancies() {
431
+ return this.data?.kpis?.closedVacancies ?? 0;
432
+ }
433
+ get totalDutiesCount() {
434
+ return this.data?.kpis?.totalVacancies ?? (this.openVacancies + this.closedVacancies);
435
+ }
436
+ get dutiesStatusItems() {
437
+ if (this.data?.dutiesStatus && this.data.dutiesStatus.length > 0) {
438
+ return this.data.dutiesStatus;
439
+ }
440
+ return [
441
+ { label: 'Abertas', value: this.openVacancies, color: '#3B82F6' },
442
+ { label: 'Encerradas', value: this.closedVacancies, color: '#1E1B4B' }
443
+ ];
444
+ }
445
+ // #endregion
446
+ // #region ComparisonSection
447
+ get comparisonItems() {
448
+ return this.data?.comparison ?? [];
449
+ }
450
+ get hasComparisonDuties() {
451
+ return this.comparisonItems.length > 0;
452
+ }
453
+ get totalComparisonCandidates() {
454
+ return this.comparisonItems.reduce((acc, curr) => acc + (curr.value || 0), 0);
455
+ }
456
+ get totalComparisonVacancies() {
457
+ return this.comparisonItems.length;
458
+ }
459
+ get comparisonSubtitle() {
460
+ const candCount = this.totalComparisonCandidates;
461
+ const dutyCount = this.totalComparisonVacancies;
462
+ const candText = candCount === 1 ? '1 candidatura no total' : `${candCount} candidaturas no total`;
463
+ const dutyText = dutyCount === 1 ? '1 vaga ativa' : `${dutyCount} vagas ativas`;
464
+ return `${candText}, em ${dutyText}`;
465
+ }
466
+ // #endregion
467
+ // #region StateHelpers
468
+ get hasData() {
469
+ return !!this.data && !!this.data.kpis;
470
+ }
471
+ // #endregion
472
+ // #region UserActions
473
+ setPeriod(period) {
474
+ if (this.currentPeriod === period)
475
+ return;
476
+ this.currentPeriod = period;
477
+ this.periodChange.emit(period);
478
+ }
479
+ onChartItemSelected(item, chartName) {
480
+ this.itemSelected.emit({
481
+ chart: chartName,
482
+ item
483
+ });
484
+ }
485
+ }
486
+ DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DashboardComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
487
+ DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DashboardComponent, selector: "careon-dashboard", inputs: { data: "data", loading: "loading", currentPeriod: "currentPeriod", title: "title", subtitle: "subtitle", emptyMessage: "emptyMessage", consultantPhone: "consultantPhone", consultantMessage: "consultantMessage", zeroStateMode: "zeroStateMode" }, outputs: { periodChange: "periodChange", itemSelected: "itemSelected", publishDuty: "publishDuty", dutySelected: "dutySelected", consultantClick: "consultantClick", attentionItemSelected: "attentionItemSelected" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"careon-dashboard-container\">\r\n <!-- #region DashboardHeader -->\r\n <header class=\"dashboard-header\">\r\n <div class=\"header-titles\">\r\n <h1 class=\"main-title\">{{ title }}</h1>\r\n <p *ngIf=\"subtitle\" class=\"subtitle\">\r\n {{ subtitle }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"period-filter-group\">\r\n <button\r\n type=\"button\"\r\n class=\"period-pill\"\r\n [class.active]=\"currentPeriod === DashboardPeriod.Today\"\r\n (click)=\"setPeriod(DashboardPeriod.Today)\"\r\n >\r\n Hoje\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"period-pill\"\r\n [class.active]=\"currentPeriod === DashboardPeriod.Week\"\r\n (click)=\"setPeriod(DashboardPeriod.Week)\"\r\n >\r\n Semana\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"period-pill\"\r\n [class.active]=\"currentPeriod === DashboardPeriod.Month\"\r\n (click)=\"setPeriod(DashboardPeriod.Month)\"\r\n >\r\n M\u00EAs\r\n </button>\r\n </div>\r\n </header>\r\n <!-- #endregion -->\r\n\r\n <!-- #region LoadingSkeletonState -->\r\n <careon-dashboard-skeleton *ngIf=\"loading\"></careon-dashboard-skeleton>\r\n <!-- #endregion -->\r\n\r\n <!-- #region EmptyState -->\r\n <div *ngIf=\"!loading && !hasData\" class=\"dashboard-empty-state\">\r\n <p class=\"empty-title\">Sem registros</p>\r\n <p class=\"empty-description\">{{ emptyMessage }}</p>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region DashboardContent -->\r\n <main *ngIf=\"!loading && hasData\" class=\"dashboard-content\">\r\n <!-- #region KpiCardsRow -->\r\n <section class=\"kpi-cards-grid\">\r\n <!-- KPI 1: Vagas Publicadas -->\r\n <article class=\"kpi-card\">\r\n <div class=\"kpi-card-header\">\r\n <span class=\"kpi-label\">Vagas Publicadas</span>\r\n </div>\r\n <div class=\"kpi-card-body\">\r\n <span class=\"kpi-value\">{{ registeredVacancies }}</span>\r\n <span class=\"kpi-badge\" [ngClass]=\"registeredVacanciesBadge.badgeClass\">\r\n <careon-dashboard-icon *ngIf=\"registeredVacanciesBadge.isPositive\" name=\"arrow-up\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <careon-dashboard-icon *ngIf=\"registeredVacanciesBadge.isNegative\" name=\"arrow-down\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <span>{{ registeredVacanciesBadge.changeText }}</span>\r\n </span>\r\n </div>\r\n <span class=\"kpi-footer\">\r\n no total\r\n </span>\r\n </article>\r\n\r\n <!-- KPI 2: Candidatos Inscritos -->\r\n <article class=\"kpi-card\">\r\n <div class=\"kpi-card-header\">\r\n <span class=\"kpi-label\">Candidatos Inscritos</span>\r\n </div>\r\n <div class=\"kpi-card-body\">\r\n <span class=\"kpi-value\">{{ candidateApplications }}</span>\r\n <span class=\"kpi-badge\" [ngClass]=\"candidateApplicationsBadge.badgeClass\">\r\n <careon-dashboard-icon *ngIf=\"candidateApplicationsBadge.isPositive\" name=\"arrow-up\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <careon-dashboard-icon *ngIf=\"candidateApplicationsBadge.isNegative\" name=\"arrow-down\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <span>{{ candidateApplicationsBadge.changeText }}</span>\r\n </span>\r\n </div>\r\n <span class=\"kpi-footer\">\r\n {{ currentPeriod === 'Today' ? 'hoje' : currentPeriod === 'Week' ? 'essa semana' : 'esse m\u00EAs' }}\r\n </span>\r\n </article>\r\n\r\n <!-- KPI 3: Curr\u00EDculos para Avaliar -->\r\n <article class=\"kpi-card\">\r\n <div class=\"kpi-card-header\">\r\n <span class=\"kpi-label\">Curr\u00EDculos para Avaliar</span>\r\n </div>\r\n <div class=\"kpi-card-body\">\r\n <span class=\"kpi-value\">{{ pendingReviews }}</span>\r\n <span class=\"kpi-badge\" [ngClass]=\"pendingReviewsBadge.badgeClass\">\r\n <careon-dashboard-icon *ngIf=\"pendingReviewsBadge.isPositive\" name=\"arrow-up\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <careon-dashboard-icon *ngIf=\"pendingReviewsBadge.isNegative\" name=\"arrow-down\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <span>{{ pendingReviewsBadge.changeText }}</span>\r\n </span>\r\n </div>\r\n <span class=\"kpi-footer\">aguardando agora</span>\r\n </article>\r\n\r\n <!-- KPI 4: M\u00E9dia de Candidatos -->\r\n <article class=\"kpi-card\">\r\n <div class=\"kpi-card-header\">\r\n <span class=\"kpi-label\">M\u00E9dia de Candidatos</span>\r\n </div>\r\n <div class=\"kpi-card-body\">\r\n <span class=\"kpi-value\">{{ averageCandidatesPerVacancy }}</span>\r\n <span class=\"kpi-badge\" [ngClass]=\"averageCandidatesBadge.badgeClass\">\r\n <careon-dashboard-icon *ngIf=\"averageCandidatesBadge.isPositive\" name=\"arrow-up\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <careon-dashboard-icon *ngIf=\"averageCandidatesBadge.isNegative\" name=\"arrow-down\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <span>{{ averageCandidatesBadge.changeText }}</span>\r\n </span>\r\n </div>\r\n <span class=\"kpi-footer\">por vaga</span>\r\n </article>\r\n\r\n <!-- KPI 5: Status das Vagas -->\r\n <article class=\"kpi-card kpi-card--status\">\r\n <careon-stacked-horizontal-bar\r\n [title]=\"'Status das Vagas'\"\r\n [totalLabel]=\"'vagas'\"\r\n [showHeader]=\"true\"\r\n [showLegend]=\"true\"\r\n [data]=\"dutiesStatusItems\"\r\n [emptyText]=\"'Sem vagas registradas'\"\r\n (itemSelected)=\"onChartItemSelected($event, 'Status das Vagas')\"\r\n ></careon-stacked-horizontal-bar>\r\n </article>\r\n </section>\r\n <!-- #endregion -->\r\n\r\n <!-- #region AttentionSection -->\r\n <section class=\"attention-section\">\r\n <!-- #region AttentionCard -->\r\n <article class=\"attention-card\">\r\n <h2 class=\"attention-card-title\">Precisa da sua aten\u00E7\u00E3o</h2>\r\n\r\n <ng-container *ngIf=\"attentionItems.length > 0; else noAttention\">\r\n <div class=\"attention-items-list\">\r\n <div *ngFor=\"let item of attentionItems; let last = last\" class=\"attention-item-wrapper\">\r\n <div class=\"attention-item\" (click)=\"onAttentionItemClick(item)\">\r\n <span class=\"attention-item-title\">{{ item.title }}</span>\r\n <span class=\"attention-item-subtitle\">{{ item.subtitle }}</span>\r\n </div>\r\n <div *ngIf=\"!last\" class=\"attention-divider\"></div>\r\n </div>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"btn-consultant\"\r\n (click)=\"openConsultantWhatsApp('Precisa da sua aten\u00E7\u00E3o')\"\r\n >\r\n Fale com um consultor\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #noAttention>\r\n <ng-container *ngIf=\"isPublishZeroState; else basicAttentionZero\">\r\n <div class=\"attention-zero-box\">\r\n <div class=\"attention-zero-header\">\r\n <careon-dashboard-icon name=\"info\" class=\"zero-info-icon\"></careon-dashboard-icon>\r\n <div class=\"attention-zero-texts\">\r\n <h3 class=\"attention-zero-title\">Nenhuma vaga precisa de aten\u00E7\u00E3o</h3>\r\n <p class=\"attention-zero-subtitle\">Voc\u00EA n\u00E3o tem vagas em aberto para revisar.</p>\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"btn-zero-publish btn-zero-publish--full\"\r\n (click)=\"onPublishDuty('Precisa da sua aten\u00E7\u00E3o')\"\r\n >\r\n Publicar Vaga\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #basicAttentionZero>\r\n <div class=\"basic-empty-state basic-empty-state--attention\">\r\n <div class=\"basic-empty-icon-wrap\">\r\n <careon-dashboard-icon name=\"info\" class=\"basic-empty-icon\"></careon-dashboard-icon>\r\n </div>\r\n <h3 class=\"basic-empty-title\">Tudo em dia!</h3>\r\n <p class=\"basic-empty-text\">Nenhuma vaga precisa da sua aten\u00E7\u00E3o no momento.</p>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"btn-consultant\"\r\n (click)=\"openConsultantWhatsApp('Precisa da sua aten\u00E7\u00E3o - Sem vagas')\"\r\n >\r\n Fale com um consultor\r\n </button>\r\n </ng-template>\r\n </ng-template>\r\n </article>\r\n <!-- #endregion -->\r\n\r\n <!-- #region PerformanceCard -->\r\n <article class=\"performance-card\">\r\n <div class=\"performance-card-header\">\r\n <h2 class=\"performance-card-title\">An\u00E1lise de Desempenho</h2>\r\n\r\n <div\r\n class=\"performance-info-wrapper\"\r\n (mouseenter)=\"onInfoMouseEnter()\"\r\n (mouseleave)=\"onInfoMouseLeave()\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn-info\"\r\n aria-label=\"Informa\u00E7\u00F5es sobre a An\u00E1lise de Desempenho\"\r\n (click)=\"toggleInfoTooltip()\"\r\n >\r\n <careon-dashboard-icon name=\"info\" class=\"info-icon\"></careon-dashboard-icon>\r\n </button>\r\n\r\n <!-- Tooltip -->\r\n <div *ngIf=\"showInfoTooltip\" class=\"info-tooltip\" role=\"tooltip\">\r\n <div class=\"tooltip-arrow\"></div>\r\n <p class=\"tooltip-text\">\r\n Esta an\u00E1lise mede o interesse dos candidatos pela sua empresa e \u00E9 atualizada continuamente \u00E0 medida que mais profissionais demonstram desejo de fazer parte do seu time.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Gr\u00E1fico de Ondas -->\r\n <careon-performance-wave [level]=\"performanceLevel\"></careon-performance-wave>\r\n\r\n <!-- Conte\u00FAdo Textual -->\r\n <div class=\"performance-body\">\r\n <h3 class=\"performance-highlight-title\">{{ performanceTitle }}</h3>\r\n <p class=\"performance-description\">{{ performanceDescription }}</p>\r\n </div>\r\n\r\n <!-- Bot\u00E3o WhatsApp -->\r\n <button\r\n type=\"button\"\r\n class=\"btn-consultant\"\r\n (click)=\"openConsultantWhatsApp('An\u00E1lise de Desempenho')\"\r\n >\r\n Fale com um consultor\r\n </button>\r\n </article>\r\n <!-- #endregion -->\r\n </section>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VacancyAnalysisSection -->\r\n <section class=\"vacancy-analysis-section vacancy-analysis-card\">\r\n <!-- #region SectionHeader -->\r\n <header class=\"vacancy-section-header\">\r\n <div class=\"vacancy-section-title-group\">\r\n <h2 class=\"vacancy-section-title\">An\u00E1lise por Vaga</h2>\r\n <span class=\"vacancy-section-subtitle\" *ngIf=\"selectedDuty\">{{ vacancySectionSubtitle }}</span>\r\n <span class=\"vacancy-section-subtitle\" *ngIf=\"!selectedDuty\">\r\n {{ isPublishZeroState ? 'Nenhuma candidatura registrada' : 'Nenhuma vaga ativa no momento' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"vacancy-dropdown-wrapper\" *ngIf=\"vacanciesAnalysis.length > 0\">\r\n <span class=\"vacancy-dropdown-label\">Escolha a vaga:</span>\r\n\r\n <div class=\"vacancy-dropdown-container\">\r\n <button\r\n type=\"button\"\r\n class=\"vacancy-dropdown-btn\"\r\n [class.vacancy-dropdown-btn--open]=\"isDutyDropdownOpen\"\r\n (click)=\"toggleDutyDropdown()\"\r\n [attr.aria-expanded]=\"isDutyDropdownOpen\"\r\n >\r\n <span class=\"vacancy-dropdown-btn-text\">{{ selectedDuty?.title || 'Selecione uma vaga' }}</span>\r\n <careon-dashboard-icon name=\"chevron-down\" [rotated]=\"isDutyDropdownOpen\" class=\"vacancy-dropdown-btn-icon\"></careon-dashboard-icon>\r\n </button>\r\n\r\n <!-- Backdrop para fechar dropdown ao clicar fora -->\r\n <div *ngIf=\"isDutyDropdownOpen\" class=\"vacancy-dropdown-backdrop\" (click)=\"closeDutyDropdown()\"></div>\r\n\r\n <!-- Menu flutuante do dropdown -->\r\n <div *ngIf=\"isDutyDropdownOpen\" class=\"vacancy-dropdown-menu\" role=\"menu\">\r\n <div\r\n *ngFor=\"let duty of vacanciesAnalysis\"\r\n class=\"vacancy-dropdown-item\"\r\n [class.vacancy-dropdown-item--selected]=\"duty.dutyId === selectedDuty?.dutyId\"\r\n (click)=\"selectDuty(duty)\"\r\n role=\"menuitem\"\r\n >\r\n <div class=\"duty-radio-outer\" [class.duty-radio-outer--checked]=\"duty.dutyId === selectedDuty?.dutyId\">\r\n <div class=\"duty-radio-inner\" *ngIf=\"duty.dutyId === selectedDuty?.dutyId\"></div>\r\n </div>\r\n\r\n <div class=\"duty-item-content\">\r\n <span class=\"duty-item-title\">{{ duty.title }}</span>\r\n <span class=\"duty-item-subtitle\">{{ duty.subtitle }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </header>\r\n <!-- #endregion -->\r\n\r\n <ng-container *ngIf=\"selectedDuty; else noActiveDuties\">\r\n <!-- #region TimelineChart -->\r\n <div class=\"vacancy-timeline-wrapper\">\r\n <careon-timeline-bar-chart\r\n [data]=\"selectedDutyTimelinePoints\"\r\n [autoBarWidth]=\"false\"\r\n [barWidth]=\"68\"\r\n (itemSelected)=\"onTimelinePointSelected($event)\"\r\n ></careon-timeline-bar-chart>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region BottomMetricsRow -->\r\n <div class=\"vacancy-bottom-grid\">\r\n <!-- Card Taxa de Convers\u00E3o -->\r\n <article class=\"vacancy-metric-card vacancy-metric-card--donut\">\r\n <careon-donut-chart\r\n [title]=\"'Taxa de convers\u00E3o'\"\r\n [titleBold]=\"true\"\r\n [titleSize]=\"14\"\r\n [titlePadding]=\"6\"\r\n [data]=\"selectedDutyDonutItems\"\r\n [centerText]=\"selectedDutyConversionRateText\"\r\n [size]=\"96\"\r\n [strokeWidth]=\"18\"\r\n ></careon-donut-chart>\r\n </article>\r\n\r\n <!-- Card Visualiza\u00E7\u00F5es \u2192 Candidaturas -->\r\n <article class=\"vacancy-metric-card vacancy-metric-card--funnel\">\r\n <careon-funnel-bar\r\n [title]=\"'Visualiza\u00E7\u00F5es \u2192 Candidaturas'\"\r\n [titleBold]=\"true\"\r\n [titleSize]=\"14\"\r\n [titlePadding]=\"6\"\r\n [data]=\"selectedDutyFunnelItems\"\r\n [minBarWidth]=\"260\"\r\n ></careon-funnel-bar>\r\n </article>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region SalaryAndSupportRow -->\r\n <div class=\"vacancy-salary-support-grid\" *ngIf=\"selectedDutySalaryComparison\">\r\n <!-- Card M\u00E9dia Salarial -->\r\n <article class=\"vacancy-salary-card\">\r\n <header class=\"salary-card-header\">\r\n <!-- Coluna 1: Seu valor -->\r\n <div class=\"salary-metric-col\">\r\n <span class=\"salary-metric-label\">Seu valor</span>\r\n <span\r\n class=\"salary-metric-value\"\r\n [class.salary-metric-value--not-informed]=\"salaryStatus === DutySalaryStatus.NotInformed\"\r\n [class.salary-metric-value--insufficient]=\"salaryStatus === DutySalaryStatus.InsufficientData\"\r\n >\r\n {{ formattedYourSalary }}\r\n </span>\r\n </div>\r\n\r\n <!-- Divisor vertical -->\r\n <div class=\"salary-metric-divider\"></div>\r\n\r\n <!-- Coluna 2: M\u00E9dia da regi\u00E3o -->\r\n <div class=\"salary-metric-col\">\r\n <span class=\"salary-metric-label\">M\u00E9dia da regi\u00E3o</span>\r\n <span\r\n class=\"salary-metric-value\"\r\n [class.salary-metric-value--orange]=\"salaryStatus === DutySalaryStatus.BelowMarket\"\r\n [class.salary-metric-value--blue]=\"salaryStatus === DutySalaryStatus.AtMarket\"\r\n [class.salary-metric-value--navy]=\"salaryStatus === DutySalaryStatus.AboveMarket\"\r\n [class.salary-metric-value--insufficient]=\"salaryStatus === DutySalaryStatus.InsufficientData\"\r\n [class.salary-metric-value--muted]=\"salaryStatus === DutySalaryStatus.NotInformed\"\r\n >\r\n {{ formattedRegionalAverage }}\r\n </span>\r\n </div>\r\n\r\n <!-- Badge Din\u00E2mico -->\r\n <div\r\n class=\"salary-badge\"\r\n [ngClass]=\"salaryBadgeClass\"\r\n *ngIf=\"selectedDutySalaryComparison.badgeText\"\r\n >\r\n {{ selectedDutySalaryComparison.badgeText }}\r\n </div>\r\n </header>\r\n\r\n <!-- Linha/Corpo textual com Destaque e Explica\u00E7\u00E3o -->\r\n <div class=\"salary-card-body\">\r\n <h4 class=\"salary-highlight-title\" [ngClass]=\"salaryTitleColorClass\">\r\n {{ selectedDutySalaryComparison.highlightTitle }}\r\n </h4>\r\n <p class=\"salary-description\">\r\n {{ selectedDutySalaryComparison.description }}\r\n </p>\r\n </div>\r\n </article>\r\n\r\n <!-- Card de Suporte: D\u00FAvidas sobre esses dados? -->\r\n <article class=\"vacancy-support-card\">\r\n <h4 class=\"support-card-title\">Ainda com d\u00FAvidas sobre esses dados?</h4>\r\n <p class=\"support-card-subtitle\">\r\n Se depois de ver os gr\u00E1ficos voc\u00EA ficou com perguntas sem resposta, fale com a nossa equipe.\r\n </p>\r\n <button\r\n type=\"button\"\r\n class=\"btn-support-consultant\"\r\n (click)=\"openConsultantWhatsApp('D\u00FAvidas sobre esses dados')\"\r\n >\r\n Fale com um consultor\r\n </button>\r\n </article>\r\n </div>\r\n <!-- #endregion -->\r\n </ng-container>\r\n\r\n <ng-template #noActiveDuties>\r\n <div class=\"zero-state-banner\" *ngIf=\"isPublishZeroState; else basicVacancyZero\">\r\n <div class=\"zero-state-banner-left\">\r\n <careon-dashboard-icon name=\"info\" class=\"zero-info-icon\"></careon-dashboard-icon>\r\n <div class=\"zero-state-banner-texts\">\r\n <h3 class=\"zero-state-banner-title\">Nenhuma vaga para analisar</h3>\r\n <p class=\"zero-state-banner-subtitle\">Cadastre uma vaga para come\u00E7ar a acompanhar o desempenho dela aqui.</p>\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"btn-zero-publish\"\r\n (click)=\"onPublishDuty('An\u00E1lise por Vaga')\"\r\n >\r\n Publicar Vaga\r\n </button>\r\n </div>\r\n\r\n <ng-template #basicVacancyZero>\r\n <div class=\"basic-empty-state basic-empty-state--vacancy\">\r\n <div class=\"basic-empty-icon-wrap\">\r\n <careon-dashboard-icon name=\"info\" class=\"basic-empty-icon\"></careon-dashboard-icon>\r\n </div>\r\n <h3 class=\"basic-empty-title\">Nenhuma vaga para analisar</h3>\r\n <p class=\"basic-empty-text\">Nenhuma vaga ativa no momento para an\u00E1lise.</p>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n </section>\r\n <!-- #endregion -->\r\n\r\n <!-- #region ApplicationsPerVacancySection -->\r\n <section class=\"applications-per-vacancy-section\">\r\n <header class=\"applications-section-header\">\r\n <h2 class=\"applications-section-title\">Candidaturas por Vaga</h2>\r\n <span class=\"applications-section-subtitle\" *ngIf=\"hasComparisonDuties\">\r\n {{ comparisonSubtitle }}\r\n </span>\r\n <span class=\"applications-section-subtitle\" *ngIf=\"!hasComparisonDuties\">\r\n {{ isPublishZeroState ? '0 candidaturas no total, nenhuma vaga ativa' : 'Nenhuma vaga ativa no momento' }}\r\n </span>\r\n </header>\r\n\r\n <div class=\"applications-chart-wrapper\" *ngIf=\"hasComparisonDuties; else noComparisonDuties\">\r\n <careon-comparison-bar-chart\r\n [data]=\"comparisonItems\"\r\n [autoBarWidth]=\"false\"\r\n [barWidth]=\"75\"\r\n [itemSlotWidth]=\"100\"\r\n [barColor]=\"'#3B82F6'\"\r\n [zeroColor]=\"'#EF4444'\"\r\n [trendLineColor]=\"'#1E293B'\"\r\n [dotColor]=\"'#1E293B'\"\r\n [textColor]=\"'#64748B'\"\r\n (itemSelected)=\"onChartItemSelected($event, 'Candidaturas por Vaga')\"\r\n ></careon-comparison-bar-chart>\r\n </div>\r\n\r\n <ng-template #noComparisonDuties>\r\n <div class=\"zero-state-banner\" *ngIf=\"isPublishZeroState; else basicComparisonZero\">\r\n <div class=\"zero-state-banner-left\">\r\n <careon-dashboard-icon name=\"info\" class=\"zero-info-icon\"></careon-dashboard-icon>\r\n <div class=\"zero-state-banner-texts\">\r\n <h3 class=\"zero-state-banner-title\">Nenhuma candidatura registrada</h3>\r\n <p class=\"zero-state-banner-subtitle\">Sem vagas em aberto, ainda n\u00E3o h\u00E1 candidaturas para mostrar.</p>\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"btn-zero-publish\"\r\n (click)=\"onPublishDuty('Candidaturas por Vaga')\"\r\n >\r\n Publicar Vaga\r\n </button>\r\n </div>\r\n\r\n <ng-template #basicComparisonZero>\r\n <div class=\"basic-empty-state basic-empty-state--comparison\">\r\n <div class=\"basic-empty-icon-wrap\">\r\n <careon-dashboard-icon name=\"info\" class=\"basic-empty-icon\"></careon-dashboard-icon>\r\n </div>\r\n <h3 class=\"basic-empty-title\">Nenhuma candidatura registrada</h3>\r\n <p class=\"basic-empty-text\">Nenhuma vaga ativa no momento para an\u00E1lise.</p>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n </section>\r\n <!-- #endregion -->\r\n </main>\r\n <!-- #endregion -->\r\n</div>\r\n", styles: [":host{display:block;width:100%}.careon-dashboard-container{display:flex;flex-direction:column;gap:24px;width:100%;max-width:1400px;margin:0 auto;padding:16px 24px;box-sizing:border-box;font-family:Montserrat,sans-serif;color:#1b2559}.careon-dashboard-container .dashboard-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px;padding-bottom:8px}.careon-dashboard-container .dashboard-header .header-titles .main-title{font-size:26px;font-weight:700;color:#1b2559;margin:0;letter-spacing:-.3px}.careon-dashboard-container .dashboard-header .header-titles .subtitle{font-size:13px;color:#a3aed0;margin:4px 0 0;font-weight:500}.careon-dashboard-container .dashboard-header .period-filter-group{display:inline-flex;align-items:center;background:#ffffff;padding:4px;border-radius:9999px;gap:2px;border:1px solid #eef0f4;box-shadow:0 2px 8px #0000000a}.careon-dashboard-container .dashboard-header .period-filter-group .period-pill{padding:14px 25px;font-family:Montserrat,sans-serif;font-size:13px;font-weight:500;color:#8e9091;background:transparent;border:none;border-radius:9999px;cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);outline:none}.careon-dashboard-container .dashboard-header .period-filter-group .period-pill:hover{color:#292857}.careon-dashboard-container .dashboard-header .period-filter-group .period-pill.active{background:#292857;color:#fff;font-weight:600;box-shadow:0 2px 8px #29285740}.careon-dashboard-container .dashboard-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 24px;gap:16px}.careon-dashboard-container .dashboard-loading-state .loading-spinner{width:40px;height:40px;border:3px solid #e2e8f0;border-top-color:#3b82f6;border-radius:50%;animation:spin .8s linear infinite}.careon-dashboard-container .dashboard-loading-state .loading-text{font-size:14px;font-weight:500;color:#64748b;margin:0}.careon-dashboard-container .dashboard-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 24px;background:#ffffff;border:1px dashed #cbd5e1;border-radius:12px;text-align:center}.careon-dashboard-container .dashboard-empty-state .empty-title{font-size:16px;font-weight:700;color:#334155;margin:0 0 6px}.careon-dashboard-container .dashboard-empty-state .empty-description{font-size:14px;color:#64748b;margin:0}.careon-dashboard-container .dashboard-content{display:flex;flex-direction:column}.careon-dashboard-container .dashboard-content .zero-state-banner{background-color:#dee9fb;border-radius:12px;padding:20px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;box-sizing:border-box}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left{display:flex;align-items:center;gap:14px}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left .zero-info-icon{color:#5c8bef;width:24px;height:24px;flex-shrink:0}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left .zero-state-banner-texts{display:flex;flex-direction:column;gap:4px}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left .zero-state-banner-texts .zero-state-banner-title{font-size:15px;font-weight:700;color:#1e2445;margin:0;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left .zero-state-banner-texts .zero-state-banner-subtitle{font-size:13px;font-weight:400;color:#718096;margin:0;font-family:Montserrat,sans-serif;line-height:1.4}@media (max-width: 768px){.careon-dashboard-container .dashboard-content .zero-state-banner{flex-direction:column;align-items:stretch}.careon-dashboard-container .dashboard-content .zero-state-banner .btn-zero-publish{width:100%;margin-top:8px}}.careon-dashboard-container .dashboard-content .btn-zero-publish{background-color:#5c8bef;color:#fff;border:none;border-radius:10px;padding:12px 28px;font-size:14px;font-weight:600;font-family:Montserrat,sans-serif;cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;transition:background-color .2s ease,transform .1s ease;outline:none}.careon-dashboard-container .dashboard-content .btn-zero-publish:hover{background-color:#4a7de6}.careon-dashboard-container .dashboard-content .btn-zero-publish:active{transform:scale(.98)}.careon-dashboard-container .dashboard-content .btn-zero-publish--full{width:100%;margin-top:auto}.careon-dashboard-container .dashboard-content .kpi-cards-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) minmax(0,1.75fr);gap:16px;align-items:stretch;width:100%;max-width:100%;box-sizing:border-box}@media (max-width: 1200px){.careon-dashboard-container .dashboard-content .kpi-cards-grid{grid-template-columns:repeat(2,1fr)}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card--status{grid-column:span 2}}@media (max-width: 600px){.careon-dashboard-container .dashboard-content .kpi-cards-grid{grid-template-columns:1fr}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card--status{grid-column:span 1}}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card{background:#ffffff;border-radius:24px;padding:14px 18px;border:none;box-shadow:0 4px 20px #0000000a;display:flex;flex-direction:column;justify-content:space-between;min-height:104px;box-sizing:border-box}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-header{display:flex;justify-content:space-between;align-items:center}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-header .kpi-label{font-size:12px;font-weight:600;color:#a3aed0}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-header .kpi-total-badge{font-size:11px;font-weight:700;color:#1b2559}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body{display:flex;align-items:center;gap:8px;margin-top:4px}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-value{font-size:24px;font-weight:700;color:#1b2559;line-height:1}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:3px 8px;border-radius:12px;white-space:nowrap}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge .kpi-badge-icon{width:10px;height:10px;display:inline-block;flex-shrink:0}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge--blue{background:#e0f2fe;color:#0284c7}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge--green{background:#dcfce7;color:#16a34a}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge--coral{background:#fee2e2;color:#dc2626}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge--gray{background:#f1f5f9;color:#64748b}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-footer{font-size:11px;color:#a3aed0;font-weight:500;margin-top:6px}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card--status{padding:14px 18px;justify-content:center}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card--status careon-stacked-horizontal-bar{display:block;width:100%}.careon-dashboard-container .dashboard-content .attention-section{margin-top:32px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;width:100%;box-sizing:border-box}.careon-dashboard-container .dashboard-content .attention-section .attention-card{background:#ffffff;border-radius:24px;padding:24px 28px;border:none;box-shadow:0 4px 20px #0000000a;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-card-title{font-size:19px;font-weight:700;color:#1b2559;margin:0 0 16px;letter-spacing:-.3px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper{display:flex;flex-direction:column}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-item{display:flex;flex-direction:column;gap:4px;padding:14px 0;cursor:pointer;transition:opacity .15s ease}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-item:hover{opacity:.82}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-item .attention-item-title{font-size:15px;font-weight:600;color:#2b3674;line-height:1.3}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-item .attention-item-subtitle{font-size:13px;font-weight:400;color:#8e9091;line-height:1.4}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-divider{height:1px;background-color:#f1f5f9;width:100%;margin:0}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box{background-color:#dee9fb;border-radius:12px;padding:20px;display:flex;flex-direction:column;box-sizing:border-box}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header{display:flex;align-items:flex-start;gap:12px;margin-bottom:16px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header .zero-info-icon{color:#5c8bef;width:22px;height:22px;flex-shrink:0;margin-top:1px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header .attention-zero-texts{display:flex;flex-direction:column;gap:4px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header .attention-zero-texts .attention-zero-title{font-size:14.5px;font-weight:700;color:#1e2445;margin:0;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header .attention-zero-texts .attention-zero-subtitle{font-size:13px;font-weight:400;color:#718096;margin:0;font-family:Montserrat,sans-serif;line-height:1.4}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background-color:#f8fafc;border:1px dashed #cbd5e1;border-radius:16px;box-sizing:border-box;padding:28px 20px;flex:1;margin-bottom:20px;min-height:180px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state .basic-empty-icon-wrap,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state .basic-empty-icon-wrap{width:44px;height:44px;border-radius:50%;background-color:#eff6ff;color:#3b82f6;display:flex;align-items:center;justify-content:center;margin-bottom:12px;flex-shrink:0}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state .basic-empty-icon-wrap .basic-empty-icon,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state .basic-empty-icon-wrap .basic-empty-icon{width:22px;height:22px;display:flex;align-items:center;justify-content:center}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state .basic-empty-title,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state .basic-empty-title{font-size:15px;font-weight:700;color:#1e293b;margin:0 0 6px;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state .basic-empty-text,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state .basic-empty-text{font-size:13.5px;font-weight:400;color:#64748b;margin:0;font-family:Montserrat,sans-serif;line-height:1.45;max-width:460px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .btn-consultant{width:100%;display:flex;align-items:center;justify-content:center;background-color:#3b82f6;color:#fff;font-family:Montserrat,sans-serif;font-size:14px;font-weight:600;border:none;border-radius:9999px;padding:13px 24px;margin-top:auto;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 14px #3b82f64d;outline:none}.careon-dashboard-container .dashboard-content .attention-section .attention-card .btn-consultant:hover{background-color:#2563eb;box-shadow:0 6px 18px #2563eb66;transform:translateY(-1px)}.careon-dashboard-container .dashboard-content .attention-section .attention-card .btn-consultant:active{transform:translateY(0);box-shadow:0 2px 6px #2563eb40}.careon-dashboard-container .dashboard-content .attention-section .performance-card{background:#ffffff;border-radius:24px;padding:24px 28px;border:none;box-shadow:0 4px 20px #0000000a;display:flex;flex-direction:column;width:100%;box-sizing:border-box;position:relative}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-card-title{font-size:19px;font-weight:700;color:#1b2559;margin:0;letter-spacing:-.3px}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper{position:relative;display:inline-flex;align-items:center}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .btn-info{background:transparent;border:none;padding:4px;cursor:pointer;color:#a3aed0;transition:color .2s ease;display:flex;align-items:center;justify-content:center;outline:none;border-radius:50%}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .btn-info:hover{color:#3b82f6}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .btn-info .info-icon{width:18px;height:18px}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .info-tooltip{position:absolute;top:calc(100% + 8px);right:0;width:290px;background:#f0f7ff;border:1px solid #93c5fd;border-radius:10px;padding:12px 14px;box-shadow:0 6px 20px #3b82f626;z-index:20;box-sizing:border-box;animation:fadeInTooltip .2s ease-out}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .info-tooltip .tooltip-arrow{position:absolute;top:-6px;right:8px;width:10px;height:10px;background:#f0f7ff;border-top:1px solid #93c5fd;border-left:1px solid #93c5fd;transform:rotate(45deg)}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .info-tooltip .tooltip-text{font-size:12px;line-height:1.45;color:#334155;margin:0;font-weight:500;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .attention-section .performance-card careon-performance-wave{display:block;width:100%}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-body{display:flex;flex-direction:column;margin-bottom:16px}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-body .performance-highlight-title{font-size:13.5px;font-weight:700;color:#3b82f6;margin:0 0 6px;line-height:1.35}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-body .performance-description{font-size:12.5px;font-weight:400;color:#8e9091;margin:0;line-height:1.45}.careon-dashboard-container .dashboard-content .attention-section .performance-card .btn-consultant{width:100%;display:flex;align-items:center;justify-content:center;background-color:#3b82f6;color:#fff;font-family:Montserrat,sans-serif;font-size:14px;font-weight:600;border:none;border-radius:9999px;padding:13px 24px;margin-top:auto;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 14px #3b82f64d;outline:none}.careon-dashboard-container .dashboard-content .attention-section .performance-card .btn-consultant:hover{background-color:#2563eb;box-shadow:0 6px 18px #2563eb66;transform:translateY(-1px)}.careon-dashboard-container .dashboard-content .attention-section .performance-card .btn-consultant:active{transform:translateY(0);box-shadow:0 2px 6px #2563eb40}.careon-dashboard-container .dashboard-content .vacancy-analysis-section{margin-top:32px;display:flex;flex-direction:column;background-color:#fff;border:none;border-radius:24px;padding:28px 32px;box-shadow:0 4px 20px #0000000a;box-sizing:border-box}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:24px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-section-title-group{display:flex;flex-direction:column;gap:4px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-section-title-group .vacancy-section-title{font-size:20px;font-weight:700;color:#1e1b4b;margin:0;letter-spacing:-.02em}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-section-title-group .vacancy-section-subtitle{font-size:13px;font-weight:400;color:#94a3b8}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper{display:flex;align-items:center;gap:12px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-label{font-size:13px;font-weight:500;color:#64748b}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container{position:relative}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn{display:inline-flex;align-items:center;justify-content:space-between;gap:10px;min-width:180px;padding:9px 18px;background-color:#fff;border:1px solid #e2e8f0;border-radius:9999px;font-family:Montserrat,sans-serif;font-size:13.5px;font-weight:600;color:#1e1b4b;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 1px 3px #0000000a;outline:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn:hover{border-color:#cbd5e1;background-color:#f8fafc}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn--open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f626}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn .vacancy-dropdown-btn-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn .vacancy-dropdown-btn-icon{width:18px;height:18px;color:#64748b;flex-shrink:0;transition:transform .2s ease}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn .vacancy-dropdown-btn-icon.rotated{transform:rotate(180deg)}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-backdrop{position:fixed;inset:0;z-index:99;background:transparent}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:100;min-width:320px;max-width:440px;max-height:360px;overflow-y:auto;background:#ffffff;border:1px solid #e2e8f0;border-radius:16px;padding:8px;box-shadow:0 10px 25px -5px #0000001a,0 8px 10px -6px #0000000d}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:10px;cursor:pointer;transition:background-color .15s ease}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item:hover{background-color:#f1f5f9}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item--selected{background-color:#eff6ff}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item--selected .duty-item-title{color:#3b82f6}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-radio-outer{width:18px;height:18px;border-radius:50%;border:2px solid #3b82f6;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .2s ease}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-radio-outer:not(.duty-radio-outer--checked){border-color:#93c5fd}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-radio-outer--checked{border-color:#3b82f6}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-radio-outer .duty-radio-inner{width:8px;height:8px;border-radius:50%;background-color:#3b82f6}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-item-content{display:flex;flex-direction:column;gap:2px;overflow:hidden}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-item-content .duty-item-title{font-size:13.5px;font-weight:600;color:#1e1b4b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-item-content .duty-item-subtitle{font-size:11.5px;font-weight:400;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-timeline-wrapper{width:100%;margin-bottom:24px;overflow:hidden}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-timeline-wrapper ::ng-deep .timeline-baseline{background-color:#f1f5f9}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid{display:grid;grid-template-columns:minmax(230px,26%) 1fr;gap:20px}@media (max-width: 900px){.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid{grid-template-columns:1fr}}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid .vacancy-metric-card{background-color:#f7f7f7;border:none;border-radius:24px;padding:20px 24px;box-shadow:none;display:flex;flex-direction:column;overflow:visible;min-height:164px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid .vacancy-metric-card--donut{min-height:164px;overflow:visible}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid .vacancy-metric-card--funnel{min-height:164px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid{display:grid;grid-template-columns:1fr 450px;gap:20px;margin-top:20px}@media (max-width: 992px){.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid{grid-template-columns:1fr}}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card{background-color:#f7f7f7;border:none;border-radius:24px;padding:24px 28px;display:flex;flex-direction:column;justify-content:center;box-shadow:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header{display:flex;align-items:center;gap:24px;margin-bottom:16px;flex-wrap:wrap}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col{display:flex;flex-direction:column;gap:4px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-label{font-size:13px;font-weight:500;color:#71717a;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value{font-size:26px;font-weight:700;color:#374151;font-family:Montserrat,sans-serif;line-height:1.2}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--orange{color:#d97706}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--blue{color:#2563eb}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--navy{color:#1e1b4b}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--not-informed{color:#b91c1c;font-weight:700}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--insufficient{color:#444;font-weight:700}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--muted{color:#4b5563}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-divider{width:1px;height:38px;background-color:#e5e7eb}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-badge{margin-left:auto;padding:6px 14px;border-radius:9999px;font-size:13px;font-weight:600;font-family:Montserrat,sans-serif;display:inline-flex;align-items:center;white-space:nowrap}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-badge--orange{background-color:#ffedd5;color:#c2410c;border:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-badge--blue{background-color:#dbeafd;color:#1d4ed8;border:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-badge--purple{background-color:#ede9fe;color:#1e1b4b;border:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body{display:flex;flex-direction:column;gap:6px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title{font-size:14.5px;font-weight:700;margin:0;font-family:Montserrat,sans-serif;line-height:1.4}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--orange{color:#d97706}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--blue{color:#2563eb}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--purple{color:#1e1b4b}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--red{color:#b91c1c}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--default{color:#111827}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-description{font-size:13px;font-weight:400;color:#4b5563;margin:0;line-height:1.55;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card{background-color:#f7f7f7;border:none;border-radius:24px;padding:24px 28px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .support-card-title{font-size:17px;font-weight:700;color:#3b82f6;margin:0 0 10px;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .support-card-subtitle{font-size:13.5px;font-weight:400;color:#64748b;margin:0 0 20px;line-height:1.5;font-family:Montserrat,sans-serif;flex-grow:1}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .btn-support-consultant{background-color:#3b82f6;color:#fff;border:none;border-radius:9999px;padding:13px 24px;font-size:14px;font-weight:700;font-family:Montserrat,sans-serif;cursor:pointer;transition:background-color .15s ease,transform .1s ease;width:100%;text-align:center;box-shadow:none;outline:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .btn-support-consultant:hover{background-color:#2563eb}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .btn-support-consultant:active{transform:scale(.98)}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background-color:#f8fafc;border:1px dashed #cbd5e1;border-radius:16px;box-sizing:border-box;padding:44px 24px;width:100%;min-height:180px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state .basic-empty-icon-wrap,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state .basic-empty-icon-wrap{width:44px;height:44px;border-radius:50%;background-color:#eff6ff;color:#3b82f6;display:flex;align-items:center;justify-content:center;margin-bottom:12px;flex-shrink:0}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state .basic-empty-icon-wrap .basic-empty-icon,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state .basic-empty-icon-wrap .basic-empty-icon{width:22px;height:22px;display:flex;align-items:center;justify-content:center}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state .basic-empty-title,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state .basic-empty-title{font-size:15px;font-weight:700;color:#1e293b;margin:0 0 6px;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state .basic-empty-text,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state .basic-empty-text{font-size:13.5px;font-weight:400;color:#64748b;margin:0;font-family:Montserrat,sans-serif;line-height:1.45;max-width:460px}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section{margin-top:32px;display:flex;flex-direction:column;background-color:#fff;border:none;border-radius:24px;padding:28px 32px;box-shadow:0 4px 20px #0000000a;box-sizing:border-box}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-section-header{display:flex;flex-direction:column;gap:4px;margin-bottom:24px}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-section-header .applications-section-title{font-size:20px;font-weight:700;color:#1e1b4b;margin:0;letter-spacing:-.02em;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-section-header .applications-section-subtitle{font-size:13px;font-weight:400;color:#94a3b8;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-chart-wrapper{width:100%;overflow:hidden}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background-color:#f8fafc;border:1px dashed #cbd5e1;border-radius:16px;box-sizing:border-box;padding:44px 24px;width:100%;min-height:180px}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state .basic-empty-icon-wrap,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state .basic-empty-icon-wrap{width:44px;height:44px;border-radius:50%;background-color:#eff6ff;color:#3b82f6;display:flex;align-items:center;justify-content:center;margin-bottom:12px;flex-shrink:0}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state .basic-empty-icon-wrap .basic-empty-icon,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state .basic-empty-icon-wrap .basic-empty-icon{width:22px;height:22px;display:flex;align-items:center;justify-content:center}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state .basic-empty-title,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state .basic-empty-title{font-size:15px;font-weight:700;color:#1e293b;margin:0 0 6px;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state .basic-empty-text,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state .basic-empty-text{font-size:13.5px;font-weight:400;color:#64748b;margin:0;font-family:Montserrat,sans-serif;line-height:1.45;max-width:460px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeInTooltip{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TimelineBarChartComponent, selector: "careon-timeline-bar-chart", inputs: ["data", "barColor", "currentBarColor", "pastHatchColor", "zeroColor", "trendLineColor", "dotColor", "tooltipBgColor", "tooltipTextColor", "textColor", "activeTextColor", "autoBarWidth", "barWidth", "itemSlotWidth"], outputs: ["itemSelected"] }, { kind: "component", type: i2.ComparisonBarChartComponent, selector: "careon-comparison-bar-chart", inputs: ["data", "limitTop10", "barColor", "zeroColor", "trendLineColor", "dotColor", "textColor", "autoBarWidth", "barWidth", "itemSlotWidth"], outputs: ["itemSelected"] }, { kind: "component", type: i2.DonutChartComponent, selector: "careon-donut-chart", inputs: ["title", "titleBold", "titleSize", "titlePadding", "data", "maxItems", "centerText", "emptyTrackColor", "size", "strokeWidth", "showLegend", "showLegendPercentage", "showTooltip", "tooltipBgColor", "tooltipTextColor"], outputs: ["itemSelected"] }, { kind: "component", type: i2.StackedHorizontalBarComponent, selector: "careon-stacked-horizontal-bar", inputs: ["title", "totalLabel", "showHeader", "showLegend", "emptyText", "emptyTrackColor", "maxSegments", "data"], outputs: ["itemSelected"] }, { kind: "component", type: i2.FunnelBarComponent, selector: "careon-funnel-bar", inputs: ["title", "titleBold", "titleSize", "titlePadding", "data", "fontColor", "minBarWidth"], outputs: ["itemSelected"] }, { kind: "component", type: i3.PerformanceWaveComponent, selector: "careon-performance-wave", inputs: ["level"] }, { kind: "component", type: i4.DashboardIconComponent, selector: "careon-dashboard-icon", inputs: ["name", "rotated", "customClass"] }, { kind: "component", type: i5.DashboardSkeletonComponent, selector: "careon-dashboard-skeleton" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
488
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DashboardComponent, decorators: [{
489
+ type: Component,
490
+ args: [{ selector: 'careon-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"careon-dashboard-container\">\r\n <!-- #region DashboardHeader -->\r\n <header class=\"dashboard-header\">\r\n <div class=\"header-titles\">\r\n <h1 class=\"main-title\">{{ title }}</h1>\r\n <p *ngIf=\"subtitle\" class=\"subtitle\">\r\n {{ subtitle }}\r\n </p>\r\n </div>\r\n\r\n <div class=\"period-filter-group\">\r\n <button\r\n type=\"button\"\r\n class=\"period-pill\"\r\n [class.active]=\"currentPeriod === DashboardPeriod.Today\"\r\n (click)=\"setPeriod(DashboardPeriod.Today)\"\r\n >\r\n Hoje\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"period-pill\"\r\n [class.active]=\"currentPeriod === DashboardPeriod.Week\"\r\n (click)=\"setPeriod(DashboardPeriod.Week)\"\r\n >\r\n Semana\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"period-pill\"\r\n [class.active]=\"currentPeriod === DashboardPeriod.Month\"\r\n (click)=\"setPeriod(DashboardPeriod.Month)\"\r\n >\r\n M\u00EAs\r\n </button>\r\n </div>\r\n </header>\r\n <!-- #endregion -->\r\n\r\n <!-- #region LoadingSkeletonState -->\r\n <careon-dashboard-skeleton *ngIf=\"loading\"></careon-dashboard-skeleton>\r\n <!-- #endregion -->\r\n\r\n <!-- #region EmptyState -->\r\n <div *ngIf=\"!loading && !hasData\" class=\"dashboard-empty-state\">\r\n <p class=\"empty-title\">Sem registros</p>\r\n <p class=\"empty-description\">{{ emptyMessage }}</p>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region DashboardContent -->\r\n <main *ngIf=\"!loading && hasData\" class=\"dashboard-content\">\r\n <!-- #region KpiCardsRow -->\r\n <section class=\"kpi-cards-grid\">\r\n <!-- KPI 1: Vagas Publicadas -->\r\n <article class=\"kpi-card\">\r\n <div class=\"kpi-card-header\">\r\n <span class=\"kpi-label\">Vagas Publicadas</span>\r\n </div>\r\n <div class=\"kpi-card-body\">\r\n <span class=\"kpi-value\">{{ registeredVacancies }}</span>\r\n <span class=\"kpi-badge\" [ngClass]=\"registeredVacanciesBadge.badgeClass\">\r\n <careon-dashboard-icon *ngIf=\"registeredVacanciesBadge.isPositive\" name=\"arrow-up\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <careon-dashboard-icon *ngIf=\"registeredVacanciesBadge.isNegative\" name=\"arrow-down\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <span>{{ registeredVacanciesBadge.changeText }}</span>\r\n </span>\r\n </div>\r\n <span class=\"kpi-footer\">\r\n no total\r\n </span>\r\n </article>\r\n\r\n <!-- KPI 2: Candidatos Inscritos -->\r\n <article class=\"kpi-card\">\r\n <div class=\"kpi-card-header\">\r\n <span class=\"kpi-label\">Candidatos Inscritos</span>\r\n </div>\r\n <div class=\"kpi-card-body\">\r\n <span class=\"kpi-value\">{{ candidateApplications }}</span>\r\n <span class=\"kpi-badge\" [ngClass]=\"candidateApplicationsBadge.badgeClass\">\r\n <careon-dashboard-icon *ngIf=\"candidateApplicationsBadge.isPositive\" name=\"arrow-up\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <careon-dashboard-icon *ngIf=\"candidateApplicationsBadge.isNegative\" name=\"arrow-down\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <span>{{ candidateApplicationsBadge.changeText }}</span>\r\n </span>\r\n </div>\r\n <span class=\"kpi-footer\">\r\n {{ currentPeriod === 'Today' ? 'hoje' : currentPeriod === 'Week' ? 'essa semana' : 'esse m\u00EAs' }}\r\n </span>\r\n </article>\r\n\r\n <!-- KPI 3: Curr\u00EDculos para Avaliar -->\r\n <article class=\"kpi-card\">\r\n <div class=\"kpi-card-header\">\r\n <span class=\"kpi-label\">Curr\u00EDculos para Avaliar</span>\r\n </div>\r\n <div class=\"kpi-card-body\">\r\n <span class=\"kpi-value\">{{ pendingReviews }}</span>\r\n <span class=\"kpi-badge\" [ngClass]=\"pendingReviewsBadge.badgeClass\">\r\n <careon-dashboard-icon *ngIf=\"pendingReviewsBadge.isPositive\" name=\"arrow-up\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <careon-dashboard-icon *ngIf=\"pendingReviewsBadge.isNegative\" name=\"arrow-down\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <span>{{ pendingReviewsBadge.changeText }}</span>\r\n </span>\r\n </div>\r\n <span class=\"kpi-footer\">aguardando agora</span>\r\n </article>\r\n\r\n <!-- KPI 4: M\u00E9dia de Candidatos -->\r\n <article class=\"kpi-card\">\r\n <div class=\"kpi-card-header\">\r\n <span class=\"kpi-label\">M\u00E9dia de Candidatos</span>\r\n </div>\r\n <div class=\"kpi-card-body\">\r\n <span class=\"kpi-value\">{{ averageCandidatesPerVacancy }}</span>\r\n <span class=\"kpi-badge\" [ngClass]=\"averageCandidatesBadge.badgeClass\">\r\n <careon-dashboard-icon *ngIf=\"averageCandidatesBadge.isPositive\" name=\"arrow-up\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <careon-dashboard-icon *ngIf=\"averageCandidatesBadge.isNegative\" name=\"arrow-down\" class=\"kpi-badge-icon\"></careon-dashboard-icon>\r\n <span>{{ averageCandidatesBadge.changeText }}</span>\r\n </span>\r\n </div>\r\n <span class=\"kpi-footer\">por vaga</span>\r\n </article>\r\n\r\n <!-- KPI 5: Status das Vagas -->\r\n <article class=\"kpi-card kpi-card--status\">\r\n <careon-stacked-horizontal-bar\r\n [title]=\"'Status das Vagas'\"\r\n [totalLabel]=\"'vagas'\"\r\n [showHeader]=\"true\"\r\n [showLegend]=\"true\"\r\n [data]=\"dutiesStatusItems\"\r\n [emptyText]=\"'Sem vagas registradas'\"\r\n (itemSelected)=\"onChartItemSelected($event, 'Status das Vagas')\"\r\n ></careon-stacked-horizontal-bar>\r\n </article>\r\n </section>\r\n <!-- #endregion -->\r\n\r\n <!-- #region AttentionSection -->\r\n <section class=\"attention-section\">\r\n <!-- #region AttentionCard -->\r\n <article class=\"attention-card\">\r\n <h2 class=\"attention-card-title\">Precisa da sua aten\u00E7\u00E3o</h2>\r\n\r\n <ng-container *ngIf=\"attentionItems.length > 0; else noAttention\">\r\n <div class=\"attention-items-list\">\r\n <div *ngFor=\"let item of attentionItems; let last = last\" class=\"attention-item-wrapper\">\r\n <div class=\"attention-item\" (click)=\"onAttentionItemClick(item)\">\r\n <span class=\"attention-item-title\">{{ item.title }}</span>\r\n <span class=\"attention-item-subtitle\">{{ item.subtitle }}</span>\r\n </div>\r\n <div *ngIf=\"!last\" class=\"attention-divider\"></div>\r\n </div>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"btn-consultant\"\r\n (click)=\"openConsultantWhatsApp('Precisa da sua aten\u00E7\u00E3o')\"\r\n >\r\n Fale com um consultor\r\n </button>\r\n </ng-container>\r\n\r\n <ng-template #noAttention>\r\n <ng-container *ngIf=\"isPublishZeroState; else basicAttentionZero\">\r\n <div class=\"attention-zero-box\">\r\n <div class=\"attention-zero-header\">\r\n <careon-dashboard-icon name=\"info\" class=\"zero-info-icon\"></careon-dashboard-icon>\r\n <div class=\"attention-zero-texts\">\r\n <h3 class=\"attention-zero-title\">Nenhuma vaga precisa de aten\u00E7\u00E3o</h3>\r\n <p class=\"attention-zero-subtitle\">Voc\u00EA n\u00E3o tem vagas em aberto para revisar.</p>\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"btn-zero-publish btn-zero-publish--full\"\r\n (click)=\"onPublishDuty('Precisa da sua aten\u00E7\u00E3o')\"\r\n >\r\n Publicar Vaga\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #basicAttentionZero>\r\n <div class=\"basic-empty-state basic-empty-state--attention\">\r\n <div class=\"basic-empty-icon-wrap\">\r\n <careon-dashboard-icon name=\"info\" class=\"basic-empty-icon\"></careon-dashboard-icon>\r\n </div>\r\n <h3 class=\"basic-empty-title\">Tudo em dia!</h3>\r\n <p class=\"basic-empty-text\">Nenhuma vaga precisa da sua aten\u00E7\u00E3o no momento.</p>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"btn-consultant\"\r\n (click)=\"openConsultantWhatsApp('Precisa da sua aten\u00E7\u00E3o - Sem vagas')\"\r\n >\r\n Fale com um consultor\r\n </button>\r\n </ng-template>\r\n </ng-template>\r\n </article>\r\n <!-- #endregion -->\r\n\r\n <!-- #region PerformanceCard -->\r\n <article class=\"performance-card\">\r\n <div class=\"performance-card-header\">\r\n <h2 class=\"performance-card-title\">An\u00E1lise de Desempenho</h2>\r\n\r\n <div\r\n class=\"performance-info-wrapper\"\r\n (mouseenter)=\"onInfoMouseEnter()\"\r\n (mouseleave)=\"onInfoMouseLeave()\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn-info\"\r\n aria-label=\"Informa\u00E7\u00F5es sobre a An\u00E1lise de Desempenho\"\r\n (click)=\"toggleInfoTooltip()\"\r\n >\r\n <careon-dashboard-icon name=\"info\" class=\"info-icon\"></careon-dashboard-icon>\r\n </button>\r\n\r\n <!-- Tooltip -->\r\n <div *ngIf=\"showInfoTooltip\" class=\"info-tooltip\" role=\"tooltip\">\r\n <div class=\"tooltip-arrow\"></div>\r\n <p class=\"tooltip-text\">\r\n Esta an\u00E1lise mede o interesse dos candidatos pela sua empresa e \u00E9 atualizada continuamente \u00E0 medida que mais profissionais demonstram desejo de fazer parte do seu time.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Gr\u00E1fico de Ondas -->\r\n <careon-performance-wave [level]=\"performanceLevel\"></careon-performance-wave>\r\n\r\n <!-- Conte\u00FAdo Textual -->\r\n <div class=\"performance-body\">\r\n <h3 class=\"performance-highlight-title\">{{ performanceTitle }}</h3>\r\n <p class=\"performance-description\">{{ performanceDescription }}</p>\r\n </div>\r\n\r\n <!-- Bot\u00E3o WhatsApp -->\r\n <button\r\n type=\"button\"\r\n class=\"btn-consultant\"\r\n (click)=\"openConsultantWhatsApp('An\u00E1lise de Desempenho')\"\r\n >\r\n Fale com um consultor\r\n </button>\r\n </article>\r\n <!-- #endregion -->\r\n </section>\r\n <!-- #endregion -->\r\n\r\n <!-- #region VacancyAnalysisSection -->\r\n <section class=\"vacancy-analysis-section vacancy-analysis-card\">\r\n <!-- #region SectionHeader -->\r\n <header class=\"vacancy-section-header\">\r\n <div class=\"vacancy-section-title-group\">\r\n <h2 class=\"vacancy-section-title\">An\u00E1lise por Vaga</h2>\r\n <span class=\"vacancy-section-subtitle\" *ngIf=\"selectedDuty\">{{ vacancySectionSubtitle }}</span>\r\n <span class=\"vacancy-section-subtitle\" *ngIf=\"!selectedDuty\">\r\n {{ isPublishZeroState ? 'Nenhuma candidatura registrada' : 'Nenhuma vaga ativa no momento' }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"vacancy-dropdown-wrapper\" *ngIf=\"vacanciesAnalysis.length > 0\">\r\n <span class=\"vacancy-dropdown-label\">Escolha a vaga:</span>\r\n\r\n <div class=\"vacancy-dropdown-container\">\r\n <button\r\n type=\"button\"\r\n class=\"vacancy-dropdown-btn\"\r\n [class.vacancy-dropdown-btn--open]=\"isDutyDropdownOpen\"\r\n (click)=\"toggleDutyDropdown()\"\r\n [attr.aria-expanded]=\"isDutyDropdownOpen\"\r\n >\r\n <span class=\"vacancy-dropdown-btn-text\">{{ selectedDuty?.title || 'Selecione uma vaga' }}</span>\r\n <careon-dashboard-icon name=\"chevron-down\" [rotated]=\"isDutyDropdownOpen\" class=\"vacancy-dropdown-btn-icon\"></careon-dashboard-icon>\r\n </button>\r\n\r\n <!-- Backdrop para fechar dropdown ao clicar fora -->\r\n <div *ngIf=\"isDutyDropdownOpen\" class=\"vacancy-dropdown-backdrop\" (click)=\"closeDutyDropdown()\"></div>\r\n\r\n <!-- Menu flutuante do dropdown -->\r\n <div *ngIf=\"isDutyDropdownOpen\" class=\"vacancy-dropdown-menu\" role=\"menu\">\r\n <div\r\n *ngFor=\"let duty of vacanciesAnalysis\"\r\n class=\"vacancy-dropdown-item\"\r\n [class.vacancy-dropdown-item--selected]=\"duty.dutyId === selectedDuty?.dutyId\"\r\n (click)=\"selectDuty(duty)\"\r\n role=\"menuitem\"\r\n >\r\n <div class=\"duty-radio-outer\" [class.duty-radio-outer--checked]=\"duty.dutyId === selectedDuty?.dutyId\">\r\n <div class=\"duty-radio-inner\" *ngIf=\"duty.dutyId === selectedDuty?.dutyId\"></div>\r\n </div>\r\n\r\n <div class=\"duty-item-content\">\r\n <span class=\"duty-item-title\">{{ duty.title }}</span>\r\n <span class=\"duty-item-subtitle\">{{ duty.subtitle }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </header>\r\n <!-- #endregion -->\r\n\r\n <ng-container *ngIf=\"selectedDuty; else noActiveDuties\">\r\n <!-- #region TimelineChart -->\r\n <div class=\"vacancy-timeline-wrapper\">\r\n <careon-timeline-bar-chart\r\n [data]=\"selectedDutyTimelinePoints\"\r\n [autoBarWidth]=\"false\"\r\n [barWidth]=\"68\"\r\n (itemSelected)=\"onTimelinePointSelected($event)\"\r\n ></careon-timeline-bar-chart>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region BottomMetricsRow -->\r\n <div class=\"vacancy-bottom-grid\">\r\n <!-- Card Taxa de Convers\u00E3o -->\r\n <article class=\"vacancy-metric-card vacancy-metric-card--donut\">\r\n <careon-donut-chart\r\n [title]=\"'Taxa de convers\u00E3o'\"\r\n [titleBold]=\"true\"\r\n [titleSize]=\"14\"\r\n [titlePadding]=\"6\"\r\n [data]=\"selectedDutyDonutItems\"\r\n [centerText]=\"selectedDutyConversionRateText\"\r\n [size]=\"96\"\r\n [strokeWidth]=\"18\"\r\n ></careon-donut-chart>\r\n </article>\r\n\r\n <!-- Card Visualiza\u00E7\u00F5es \u2192 Candidaturas -->\r\n <article class=\"vacancy-metric-card vacancy-metric-card--funnel\">\r\n <careon-funnel-bar\r\n [title]=\"'Visualiza\u00E7\u00F5es \u2192 Candidaturas'\"\r\n [titleBold]=\"true\"\r\n [titleSize]=\"14\"\r\n [titlePadding]=\"6\"\r\n [data]=\"selectedDutyFunnelItems\"\r\n [minBarWidth]=\"260\"\r\n ></careon-funnel-bar>\r\n </article>\r\n </div>\r\n <!-- #endregion -->\r\n\r\n <!-- #region SalaryAndSupportRow -->\r\n <div class=\"vacancy-salary-support-grid\" *ngIf=\"selectedDutySalaryComparison\">\r\n <!-- Card M\u00E9dia Salarial -->\r\n <article class=\"vacancy-salary-card\">\r\n <header class=\"salary-card-header\">\r\n <!-- Coluna 1: Seu valor -->\r\n <div class=\"salary-metric-col\">\r\n <span class=\"salary-metric-label\">Seu valor</span>\r\n <span\r\n class=\"salary-metric-value\"\r\n [class.salary-metric-value--not-informed]=\"salaryStatus === DutySalaryStatus.NotInformed\"\r\n [class.salary-metric-value--insufficient]=\"salaryStatus === DutySalaryStatus.InsufficientData\"\r\n >\r\n {{ formattedYourSalary }}\r\n </span>\r\n </div>\r\n\r\n <!-- Divisor vertical -->\r\n <div class=\"salary-metric-divider\"></div>\r\n\r\n <!-- Coluna 2: M\u00E9dia da regi\u00E3o -->\r\n <div class=\"salary-metric-col\">\r\n <span class=\"salary-metric-label\">M\u00E9dia da regi\u00E3o</span>\r\n <span\r\n class=\"salary-metric-value\"\r\n [class.salary-metric-value--orange]=\"salaryStatus === DutySalaryStatus.BelowMarket\"\r\n [class.salary-metric-value--blue]=\"salaryStatus === DutySalaryStatus.AtMarket\"\r\n [class.salary-metric-value--navy]=\"salaryStatus === DutySalaryStatus.AboveMarket\"\r\n [class.salary-metric-value--insufficient]=\"salaryStatus === DutySalaryStatus.InsufficientData\"\r\n [class.salary-metric-value--muted]=\"salaryStatus === DutySalaryStatus.NotInformed\"\r\n >\r\n {{ formattedRegionalAverage }}\r\n </span>\r\n </div>\r\n\r\n <!-- Badge Din\u00E2mico -->\r\n <div\r\n class=\"salary-badge\"\r\n [ngClass]=\"salaryBadgeClass\"\r\n *ngIf=\"selectedDutySalaryComparison.badgeText\"\r\n >\r\n {{ selectedDutySalaryComparison.badgeText }}\r\n </div>\r\n </header>\r\n\r\n <!-- Linha/Corpo textual com Destaque e Explica\u00E7\u00E3o -->\r\n <div class=\"salary-card-body\">\r\n <h4 class=\"salary-highlight-title\" [ngClass]=\"salaryTitleColorClass\">\r\n {{ selectedDutySalaryComparison.highlightTitle }}\r\n </h4>\r\n <p class=\"salary-description\">\r\n {{ selectedDutySalaryComparison.description }}\r\n </p>\r\n </div>\r\n </article>\r\n\r\n <!-- Card de Suporte: D\u00FAvidas sobre esses dados? -->\r\n <article class=\"vacancy-support-card\">\r\n <h4 class=\"support-card-title\">Ainda com d\u00FAvidas sobre esses dados?</h4>\r\n <p class=\"support-card-subtitle\">\r\n Se depois de ver os gr\u00E1ficos voc\u00EA ficou com perguntas sem resposta, fale com a nossa equipe.\r\n </p>\r\n <button\r\n type=\"button\"\r\n class=\"btn-support-consultant\"\r\n (click)=\"openConsultantWhatsApp('D\u00FAvidas sobre esses dados')\"\r\n >\r\n Fale com um consultor\r\n </button>\r\n </article>\r\n </div>\r\n <!-- #endregion -->\r\n </ng-container>\r\n\r\n <ng-template #noActiveDuties>\r\n <div class=\"zero-state-banner\" *ngIf=\"isPublishZeroState; else basicVacancyZero\">\r\n <div class=\"zero-state-banner-left\">\r\n <careon-dashboard-icon name=\"info\" class=\"zero-info-icon\"></careon-dashboard-icon>\r\n <div class=\"zero-state-banner-texts\">\r\n <h3 class=\"zero-state-banner-title\">Nenhuma vaga para analisar</h3>\r\n <p class=\"zero-state-banner-subtitle\">Cadastre uma vaga para come\u00E7ar a acompanhar o desempenho dela aqui.</p>\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"btn-zero-publish\"\r\n (click)=\"onPublishDuty('An\u00E1lise por Vaga')\"\r\n >\r\n Publicar Vaga\r\n </button>\r\n </div>\r\n\r\n <ng-template #basicVacancyZero>\r\n <div class=\"basic-empty-state basic-empty-state--vacancy\">\r\n <div class=\"basic-empty-icon-wrap\">\r\n <careon-dashboard-icon name=\"info\" class=\"basic-empty-icon\"></careon-dashboard-icon>\r\n </div>\r\n <h3 class=\"basic-empty-title\">Nenhuma vaga para analisar</h3>\r\n <p class=\"basic-empty-text\">Nenhuma vaga ativa no momento para an\u00E1lise.</p>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n </section>\r\n <!-- #endregion -->\r\n\r\n <!-- #region ApplicationsPerVacancySection -->\r\n <section class=\"applications-per-vacancy-section\">\r\n <header class=\"applications-section-header\">\r\n <h2 class=\"applications-section-title\">Candidaturas por Vaga</h2>\r\n <span class=\"applications-section-subtitle\" *ngIf=\"hasComparisonDuties\">\r\n {{ comparisonSubtitle }}\r\n </span>\r\n <span class=\"applications-section-subtitle\" *ngIf=\"!hasComparisonDuties\">\r\n {{ isPublishZeroState ? '0 candidaturas no total, nenhuma vaga ativa' : 'Nenhuma vaga ativa no momento' }}\r\n </span>\r\n </header>\r\n\r\n <div class=\"applications-chart-wrapper\" *ngIf=\"hasComparisonDuties; else noComparisonDuties\">\r\n <careon-comparison-bar-chart\r\n [data]=\"comparisonItems\"\r\n [autoBarWidth]=\"false\"\r\n [barWidth]=\"75\"\r\n [itemSlotWidth]=\"100\"\r\n [barColor]=\"'#3B82F6'\"\r\n [zeroColor]=\"'#EF4444'\"\r\n [trendLineColor]=\"'#1E293B'\"\r\n [dotColor]=\"'#1E293B'\"\r\n [textColor]=\"'#64748B'\"\r\n (itemSelected)=\"onChartItemSelected($event, 'Candidaturas por Vaga')\"\r\n ></careon-comparison-bar-chart>\r\n </div>\r\n\r\n <ng-template #noComparisonDuties>\r\n <div class=\"zero-state-banner\" *ngIf=\"isPublishZeroState; else basicComparisonZero\">\r\n <div class=\"zero-state-banner-left\">\r\n <careon-dashboard-icon name=\"info\" class=\"zero-info-icon\"></careon-dashboard-icon>\r\n <div class=\"zero-state-banner-texts\">\r\n <h3 class=\"zero-state-banner-title\">Nenhuma candidatura registrada</h3>\r\n <p class=\"zero-state-banner-subtitle\">Sem vagas em aberto, ainda n\u00E3o h\u00E1 candidaturas para mostrar.</p>\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"btn-zero-publish\"\r\n (click)=\"onPublishDuty('Candidaturas por Vaga')\"\r\n >\r\n Publicar Vaga\r\n </button>\r\n </div>\r\n\r\n <ng-template #basicComparisonZero>\r\n <div class=\"basic-empty-state basic-empty-state--comparison\">\r\n <div class=\"basic-empty-icon-wrap\">\r\n <careon-dashboard-icon name=\"info\" class=\"basic-empty-icon\"></careon-dashboard-icon>\r\n </div>\r\n <h3 class=\"basic-empty-title\">Nenhuma candidatura registrada</h3>\r\n <p class=\"basic-empty-text\">Nenhuma vaga ativa no momento para an\u00E1lise.</p>\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n </section>\r\n <!-- #endregion -->\r\n </main>\r\n <!-- #endregion -->\r\n</div>\r\n", styles: [":host{display:block;width:100%}.careon-dashboard-container{display:flex;flex-direction:column;gap:24px;width:100%;max-width:1400px;margin:0 auto;padding:16px 24px;box-sizing:border-box;font-family:Montserrat,sans-serif;color:#1b2559}.careon-dashboard-container .dashboard-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:16px;padding-bottom:8px}.careon-dashboard-container .dashboard-header .header-titles .main-title{font-size:26px;font-weight:700;color:#1b2559;margin:0;letter-spacing:-.3px}.careon-dashboard-container .dashboard-header .header-titles .subtitle{font-size:13px;color:#a3aed0;margin:4px 0 0;font-weight:500}.careon-dashboard-container .dashboard-header .period-filter-group{display:inline-flex;align-items:center;background:#ffffff;padding:4px;border-radius:9999px;gap:2px;border:1px solid #eef0f4;box-shadow:0 2px 8px #0000000a}.careon-dashboard-container .dashboard-header .period-filter-group .period-pill{padding:14px 25px;font-family:Montserrat,sans-serif;font-size:13px;font-weight:500;color:#8e9091;background:transparent;border:none;border-radius:9999px;cursor:pointer;transition:all .25s cubic-bezier(.4,0,.2,1);outline:none}.careon-dashboard-container .dashboard-header .period-filter-group .period-pill:hover{color:#292857}.careon-dashboard-container .dashboard-header .period-filter-group .period-pill.active{background:#292857;color:#fff;font-weight:600;box-shadow:0 2px 8px #29285740}.careon-dashboard-container .dashboard-loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 24px;gap:16px}.careon-dashboard-container .dashboard-loading-state .loading-spinner{width:40px;height:40px;border:3px solid #e2e8f0;border-top-color:#3b82f6;border-radius:50%;animation:spin .8s linear infinite}.careon-dashboard-container .dashboard-loading-state .loading-text{font-size:14px;font-weight:500;color:#64748b;margin:0}.careon-dashboard-container .dashboard-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 24px;background:#ffffff;border:1px dashed #cbd5e1;border-radius:12px;text-align:center}.careon-dashboard-container .dashboard-empty-state .empty-title{font-size:16px;font-weight:700;color:#334155;margin:0 0 6px}.careon-dashboard-container .dashboard-empty-state .empty-description{font-size:14px;color:#64748b;margin:0}.careon-dashboard-container .dashboard-content{display:flex;flex-direction:column}.careon-dashboard-container .dashboard-content .zero-state-banner{background-color:#dee9fb;border-radius:12px;padding:20px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;box-sizing:border-box}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left{display:flex;align-items:center;gap:14px}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left .zero-info-icon{color:#5c8bef;width:24px;height:24px;flex-shrink:0}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left .zero-state-banner-texts{display:flex;flex-direction:column;gap:4px}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left .zero-state-banner-texts .zero-state-banner-title{font-size:15px;font-weight:700;color:#1e2445;margin:0;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .zero-state-banner .zero-state-banner-left .zero-state-banner-texts .zero-state-banner-subtitle{font-size:13px;font-weight:400;color:#718096;margin:0;font-family:Montserrat,sans-serif;line-height:1.4}@media (max-width: 768px){.careon-dashboard-container .dashboard-content .zero-state-banner{flex-direction:column;align-items:stretch}.careon-dashboard-container .dashboard-content .zero-state-banner .btn-zero-publish{width:100%;margin-top:8px}}.careon-dashboard-container .dashboard-content .btn-zero-publish{background-color:#5c8bef;color:#fff;border:none;border-radius:10px;padding:12px 28px;font-size:14px;font-weight:600;font-family:Montserrat,sans-serif;cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;transition:background-color .2s ease,transform .1s ease;outline:none}.careon-dashboard-container .dashboard-content .btn-zero-publish:hover{background-color:#4a7de6}.careon-dashboard-container .dashboard-content .btn-zero-publish:active{transform:scale(.98)}.careon-dashboard-container .dashboard-content .btn-zero-publish--full{width:100%;margin-top:auto}.careon-dashboard-container .dashboard-content .kpi-cards-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) minmax(0,1.75fr);gap:16px;align-items:stretch;width:100%;max-width:100%;box-sizing:border-box}@media (max-width: 1200px){.careon-dashboard-container .dashboard-content .kpi-cards-grid{grid-template-columns:repeat(2,1fr)}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card--status{grid-column:span 2}}@media (max-width: 600px){.careon-dashboard-container .dashboard-content .kpi-cards-grid{grid-template-columns:1fr}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card--status{grid-column:span 1}}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card{background:#ffffff;border-radius:24px;padding:14px 18px;border:none;box-shadow:0 4px 20px #0000000a;display:flex;flex-direction:column;justify-content:space-between;min-height:104px;box-sizing:border-box}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-header{display:flex;justify-content:space-between;align-items:center}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-header .kpi-label{font-size:12px;font-weight:600;color:#a3aed0}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-header .kpi-total-badge{font-size:11px;font-weight:700;color:#1b2559}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body{display:flex;align-items:center;gap:8px;margin-top:4px}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-value{font-size:24px;font-weight:700;color:#1b2559;line-height:1}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:3px 8px;border-radius:12px;white-space:nowrap}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge .kpi-badge-icon{width:10px;height:10px;display:inline-block;flex-shrink:0}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge--blue{background:#e0f2fe;color:#0284c7}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge--green{background:#dcfce7;color:#16a34a}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge--coral{background:#fee2e2;color:#dc2626}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-card-body .kpi-badge--gray{background:#f1f5f9;color:#64748b}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card .kpi-footer{font-size:11px;color:#a3aed0;font-weight:500;margin-top:6px}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card--status{padding:14px 18px;justify-content:center}.careon-dashboard-container .dashboard-content .kpi-cards-grid .kpi-card--status careon-stacked-horizontal-bar{display:block;width:100%}.careon-dashboard-container .dashboard-content .attention-section{margin-top:32px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;width:100%;box-sizing:border-box}.careon-dashboard-container .dashboard-content .attention-section .attention-card{background:#ffffff;border-radius:24px;padding:24px 28px;border:none;box-shadow:0 4px 20px #0000000a;display:flex;flex-direction:column;width:100%;box-sizing:border-box}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-card-title{font-size:19px;font-weight:700;color:#1b2559;margin:0 0 16px;letter-spacing:-.3px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper{display:flex;flex-direction:column}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-item{display:flex;flex-direction:column;gap:4px;padding:14px 0;cursor:pointer;transition:opacity .15s ease}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-item:hover{opacity:.82}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-item .attention-item-title{font-size:15px;font-weight:600;color:#2b3674;line-height:1.3}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-item .attention-item-subtitle{font-size:13px;font-weight:400;color:#8e9091;line-height:1.4}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-items-list .attention-item-wrapper .attention-divider{height:1px;background-color:#f1f5f9;width:100%;margin:0}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box{background-color:#dee9fb;border-radius:12px;padding:20px;display:flex;flex-direction:column;box-sizing:border-box}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header{display:flex;align-items:flex-start;gap:12px;margin-bottom:16px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header .zero-info-icon{color:#5c8bef;width:22px;height:22px;flex-shrink:0;margin-top:1px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header .attention-zero-texts{display:flex;flex-direction:column;gap:4px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header .attention-zero-texts .attention-zero-title{font-size:14.5px;font-weight:700;color:#1e2445;margin:0;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-zero-box .attention-zero-header .attention-zero-texts .attention-zero-subtitle{font-size:13px;font-weight:400;color:#718096;margin:0;font-family:Montserrat,sans-serif;line-height:1.4}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background-color:#f8fafc;border:1px dashed #cbd5e1;border-radius:16px;box-sizing:border-box;padding:28px 20px;flex:1;margin-bottom:20px;min-height:180px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state .basic-empty-icon-wrap,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state .basic-empty-icon-wrap{width:44px;height:44px;border-radius:50%;background-color:#eff6ff;color:#3b82f6;display:flex;align-items:center;justify-content:center;margin-bottom:12px;flex-shrink:0}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state .basic-empty-icon-wrap .basic-empty-icon,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state .basic-empty-icon-wrap .basic-empty-icon{width:22px;height:22px;display:flex;align-items:center;justify-content:center}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state .basic-empty-title,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state .basic-empty-title{font-size:15px;font-weight:700;color:#1e293b;margin:0 0 6px;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .attention-section .attention-card .basic-empty-state .basic-empty-text,.careon-dashboard-container .dashboard-content .attention-section .attention-card .attention-empty-state .basic-empty-text{font-size:13.5px;font-weight:400;color:#64748b;margin:0;font-family:Montserrat,sans-serif;line-height:1.45;max-width:460px}.careon-dashboard-container .dashboard-content .attention-section .attention-card .btn-consultant{width:100%;display:flex;align-items:center;justify-content:center;background-color:#3b82f6;color:#fff;font-family:Montserrat,sans-serif;font-size:14px;font-weight:600;border:none;border-radius:9999px;padding:13px 24px;margin-top:auto;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 14px #3b82f64d;outline:none}.careon-dashboard-container .dashboard-content .attention-section .attention-card .btn-consultant:hover{background-color:#2563eb;box-shadow:0 6px 18px #2563eb66;transform:translateY(-1px)}.careon-dashboard-container .dashboard-content .attention-section .attention-card .btn-consultant:active{transform:translateY(0);box-shadow:0 2px 6px #2563eb40}.careon-dashboard-container .dashboard-content .attention-section .performance-card{background:#ffffff;border-radius:24px;padding:24px 28px;border:none;box-shadow:0 4px 20px #0000000a;display:flex;flex-direction:column;width:100%;box-sizing:border-box;position:relative}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-card-title{font-size:19px;font-weight:700;color:#1b2559;margin:0;letter-spacing:-.3px}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper{position:relative;display:inline-flex;align-items:center}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .btn-info{background:transparent;border:none;padding:4px;cursor:pointer;color:#a3aed0;transition:color .2s ease;display:flex;align-items:center;justify-content:center;outline:none;border-radius:50%}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .btn-info:hover{color:#3b82f6}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .btn-info .info-icon{width:18px;height:18px}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .info-tooltip{position:absolute;top:calc(100% + 8px);right:0;width:290px;background:#f0f7ff;border:1px solid #93c5fd;border-radius:10px;padding:12px 14px;box-shadow:0 6px 20px #3b82f626;z-index:20;box-sizing:border-box;animation:fadeInTooltip .2s ease-out}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .info-tooltip .tooltip-arrow{position:absolute;top:-6px;right:8px;width:10px;height:10px;background:#f0f7ff;border-top:1px solid #93c5fd;border-left:1px solid #93c5fd;transform:rotate(45deg)}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-card-header .performance-info-wrapper .info-tooltip .tooltip-text{font-size:12px;line-height:1.45;color:#334155;margin:0;font-weight:500;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .attention-section .performance-card careon-performance-wave{display:block;width:100%}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-body{display:flex;flex-direction:column;margin-bottom:16px}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-body .performance-highlight-title{font-size:13.5px;font-weight:700;color:#3b82f6;margin:0 0 6px;line-height:1.35}.careon-dashboard-container .dashboard-content .attention-section .performance-card .performance-body .performance-description{font-size:12.5px;font-weight:400;color:#8e9091;margin:0;line-height:1.45}.careon-dashboard-container .dashboard-content .attention-section .performance-card .btn-consultant{width:100%;display:flex;align-items:center;justify-content:center;background-color:#3b82f6;color:#fff;font-family:Montserrat,sans-serif;font-size:14px;font-weight:600;border:none;border-radius:9999px;padding:13px 24px;margin-top:auto;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 4px 14px #3b82f64d;outline:none}.careon-dashboard-container .dashboard-content .attention-section .performance-card .btn-consultant:hover{background-color:#2563eb;box-shadow:0 6px 18px #2563eb66;transform:translateY(-1px)}.careon-dashboard-container .dashboard-content .attention-section .performance-card .btn-consultant:active{transform:translateY(0);box-shadow:0 2px 6px #2563eb40}.careon-dashboard-container .dashboard-content .vacancy-analysis-section{margin-top:32px;display:flex;flex-direction:column;background-color:#fff;border:none;border-radius:24px;padding:28px 32px;box-shadow:0 4px 20px #0000000a;box-sizing:border-box}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:16px;margin-bottom:24px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-section-title-group{display:flex;flex-direction:column;gap:4px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-section-title-group .vacancy-section-title{font-size:20px;font-weight:700;color:#1e1b4b;margin:0;letter-spacing:-.02em}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-section-title-group .vacancy-section-subtitle{font-size:13px;font-weight:400;color:#94a3b8}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper{display:flex;align-items:center;gap:12px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-label{font-size:13px;font-weight:500;color:#64748b}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container{position:relative}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn{display:inline-flex;align-items:center;justify-content:space-between;gap:10px;min-width:180px;padding:9px 18px;background-color:#fff;border:1px solid #e2e8f0;border-radius:9999px;font-family:Montserrat,sans-serif;font-size:13.5px;font-weight:600;color:#1e1b4b;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);box-shadow:0 1px 3px #0000000a;outline:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn:hover{border-color:#cbd5e1;background-color:#f8fafc}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn--open{border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f626}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn .vacancy-dropdown-btn-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:220px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn .vacancy-dropdown-btn-icon{width:18px;height:18px;color:#64748b;flex-shrink:0;transition:transform .2s ease}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-btn .vacancy-dropdown-btn-icon.rotated{transform:rotate(180deg)}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-backdrop{position:fixed;inset:0;z-index:99;background:transparent}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu{position:absolute;top:calc(100% + 8px);right:0;z-index:100;min-width:320px;max-width:440px;max-height:360px;overflow-y:auto;background:#ffffff;border:1px solid #e2e8f0;border-radius:16px;padding:8px;box-shadow:0 10px 25px -5px #0000001a,0 8px 10px -6px #0000000d}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:10px;cursor:pointer;transition:background-color .15s ease}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item:hover{background-color:#f1f5f9}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item--selected{background-color:#eff6ff}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item--selected .duty-item-title{color:#3b82f6}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-radio-outer{width:18px;height:18px;border-radius:50%;border:2px solid #3b82f6;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .2s ease}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-radio-outer:not(.duty-radio-outer--checked){border-color:#93c5fd}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-radio-outer--checked{border-color:#3b82f6}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-radio-outer .duty-radio-inner{width:8px;height:8px;border-radius:50%;background-color:#3b82f6}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-item-content{display:flex;flex-direction:column;gap:2px;overflow:hidden}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-item-content .duty-item-title{font-size:13.5px;font-weight:600;color:#1e1b4b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-section-header .vacancy-dropdown-wrapper .vacancy-dropdown-container .vacancy-dropdown-menu .vacancy-dropdown-item .duty-item-content .duty-item-subtitle{font-size:11.5px;font-weight:400;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-timeline-wrapper{width:100%;margin-bottom:24px;overflow:hidden}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-timeline-wrapper ::ng-deep .timeline-baseline{background-color:#f1f5f9}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid{display:grid;grid-template-columns:minmax(230px,26%) 1fr;gap:20px}@media (max-width: 900px){.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid{grid-template-columns:1fr}}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid .vacancy-metric-card{background-color:#f7f7f7;border:none;border-radius:24px;padding:20px 24px;box-shadow:none;display:flex;flex-direction:column;overflow:visible;min-height:164px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid .vacancy-metric-card--donut{min-height:164px;overflow:visible}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-bottom-grid .vacancy-metric-card--funnel{min-height:164px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid{display:grid;grid-template-columns:1fr 450px;gap:20px;margin-top:20px}@media (max-width: 992px){.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid{grid-template-columns:1fr}}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card{background-color:#f7f7f7;border:none;border-radius:24px;padding:24px 28px;display:flex;flex-direction:column;justify-content:center;box-shadow:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header{display:flex;align-items:center;gap:24px;margin-bottom:16px;flex-wrap:wrap}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col{display:flex;flex-direction:column;gap:4px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-label{font-size:13px;font-weight:500;color:#71717a;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value{font-size:26px;font-weight:700;color:#374151;font-family:Montserrat,sans-serif;line-height:1.2}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--orange{color:#d97706}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--blue{color:#2563eb}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--navy{color:#1e1b4b}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--not-informed{color:#b91c1c;font-weight:700}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--insufficient{color:#444;font-weight:700}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-col .salary-metric-value--muted{color:#4b5563}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-metric-divider{width:1px;height:38px;background-color:#e5e7eb}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-badge{margin-left:auto;padding:6px 14px;border-radius:9999px;font-size:13px;font-weight:600;font-family:Montserrat,sans-serif;display:inline-flex;align-items:center;white-space:nowrap}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-badge--orange{background-color:#ffedd5;color:#c2410c;border:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-badge--blue{background-color:#dbeafd;color:#1d4ed8;border:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-header .salary-badge--purple{background-color:#ede9fe;color:#1e1b4b;border:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body{display:flex;flex-direction:column;gap:6px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title{font-size:14.5px;font-weight:700;margin:0;font-family:Montserrat,sans-serif;line-height:1.4}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--orange{color:#d97706}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--blue{color:#2563eb}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--purple{color:#1e1b4b}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--red{color:#b91c1c}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-highlight-title.salary-title--default{color:#111827}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-salary-card .salary-card-body .salary-description{font-size:13px;font-weight:400;color:#4b5563;margin:0;line-height:1.55;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card{background-color:#f7f7f7;border:none;border-radius:24px;padding:24px 28px;display:flex;flex-direction:column;justify-content:space-between;box-shadow:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .support-card-title{font-size:17px;font-weight:700;color:#3b82f6;margin:0 0 10px;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .support-card-subtitle{font-size:13.5px;font-weight:400;color:#64748b;margin:0 0 20px;line-height:1.5;font-family:Montserrat,sans-serif;flex-grow:1}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .btn-support-consultant{background-color:#3b82f6;color:#fff;border:none;border-radius:9999px;padding:13px 24px;font-size:14px;font-weight:700;font-family:Montserrat,sans-serif;cursor:pointer;transition:background-color .15s ease,transform .1s ease;width:100%;text-align:center;box-shadow:none;outline:none}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .btn-support-consultant:hover{background-color:#2563eb}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-salary-support-grid .vacancy-support-card .btn-support-consultant:active{transform:scale(.98)}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background-color:#f8fafc;border:1px dashed #cbd5e1;border-radius:16px;box-sizing:border-box;padding:44px 24px;width:100%;min-height:180px}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state .basic-empty-icon-wrap,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state .basic-empty-icon-wrap{width:44px;height:44px;border-radius:50%;background-color:#eff6ff;color:#3b82f6;display:flex;align-items:center;justify-content:center;margin-bottom:12px;flex-shrink:0}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state .basic-empty-icon-wrap .basic-empty-icon,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state .basic-empty-icon-wrap .basic-empty-icon{width:22px;height:22px;display:flex;align-items:center;justify-content:center}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state .basic-empty-title,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state .basic-empty-title{font-size:15px;font-weight:700;color:#1e293b;margin:0 0 6px;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .vacancy-analysis-section .basic-empty-state .basic-empty-text,.careon-dashboard-container .dashboard-content .vacancy-analysis-section .vacancy-empty-state .basic-empty-text{font-size:13.5px;font-weight:400;color:#64748b;margin:0;font-family:Montserrat,sans-serif;line-height:1.45;max-width:460px}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section{margin-top:32px;display:flex;flex-direction:column;background-color:#fff;border:none;border-radius:24px;padding:28px 32px;box-shadow:0 4px 20px #0000000a;box-sizing:border-box}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-section-header{display:flex;flex-direction:column;gap:4px;margin-bottom:24px}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-section-header .applications-section-title{font-size:20px;font-weight:700;color:#1e1b4b;margin:0;letter-spacing:-.02em;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-section-header .applications-section-subtitle{font-size:13px;font-weight:400;color:#94a3b8;font-family:Montserrat,sans-serif}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-chart-wrapper{width:100%;overflow:hidden}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background-color:#f8fafc;border:1px dashed #cbd5e1;border-radius:16px;box-sizing:border-box;padding:44px 24px;width:100%;min-height:180px}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state .basic-empty-icon-wrap,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state .basic-empty-icon-wrap{width:44px;height:44px;border-radius:50%;background-color:#eff6ff;color:#3b82f6;display:flex;align-items:center;justify-content:center;margin-bottom:12px;flex-shrink:0}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state .basic-empty-icon-wrap .basic-empty-icon,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state .basic-empty-icon-wrap .basic-empty-icon{width:22px;height:22px;display:flex;align-items:center;justify-content:center}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state .basic-empty-title,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state .basic-empty-title{font-size:15px;font-weight:700;color:#1e293b;margin:0 0 6px;font-family:Montserrat,sans-serif;line-height:1.35}.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .basic-empty-state .basic-empty-text,.careon-dashboard-container .dashboard-content .applications-per-vacancy-section .applications-empty-state .basic-empty-text{font-size:13.5px;font-weight:400;color:#64748b;margin:0;font-family:Montserrat,sans-serif;line-height:1.45;max-width:460px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes fadeInTooltip{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
491
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { data: [{
492
+ type: Input
493
+ }], loading: [{
494
+ type: Input
495
+ }], currentPeriod: [{
496
+ type: Input
497
+ }], title: [{
498
+ type: Input
499
+ }], subtitle: [{
500
+ type: Input
501
+ }], emptyMessage: [{
502
+ type: Input
503
+ }], consultantPhone: [{
504
+ type: Input
505
+ }], consultantMessage: [{
506
+ type: Input
507
+ }], zeroStateMode: [{
508
+ type: Input
509
+ }], periodChange: [{
510
+ type: Output
511
+ }], itemSelected: [{
512
+ type: Output
513
+ }], publishDuty: [{
514
+ type: Output
515
+ }], dutySelected: [{
516
+ type: Output
517
+ }], consultantClick: [{
518
+ type: Output
519
+ }], attentionItemSelected: [{
520
+ type: Output
521
+ }] } });
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Rhc2hib2FyZC9zcmMvbGliL2Rhc2hib2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXNoYm9hcmQvc3JjL2xpYi9kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWix1QkFBdUIsRUFJeEIsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUVMLGVBQWUsRUFJZixnQkFBZ0IsRUFHaEIsZ0JBQWdCLEVBQ2pCLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFZbkMsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFZLEVBQUUsUUFBcUIsRUFBRSxTQUFTLEdBQUcsS0FBSztJQUNuRixNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDO0lBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7SUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUU1QixNQUFNLFVBQVUsR0FBRyxNQUFNO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRXBGLElBQUksVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ25D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SztzQkFBYixLQUFLO2dCQU1HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFNRyxlQUFlO3NCQUF2QixLQUFLO2dCQU1HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFRRyxhQUFhO3NCQUFyQixLQUFLO2dCQVdJLFlBQVk7c0JBQXJCLE1BQU07Z0JBS0csWUFBWTtzQkFBckIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLFlBQVk7c0JBQXJCLE1BQU07Z0JBS0csZUFBZTtzQkFBeEIsTUFBTTtnQkFLRyxxQkFBcUI7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgU3RhY2tlZEJhckl0ZW0sXHJcbiAgVGltZWxpbmVQb2ludCxcclxuICBEb251dENoYXJ0SXRlbSxcclxuICBGdW5uZWxCYXJJdGVtLFxyXG4gIENvbXBhcmlzb25JdGVtXHJcbn0gZnJvbSAnQGNhcmVvbmJyYXNpbC9uZy1jaGFydHMnO1xyXG5pbXBvcnQge1xyXG4gIERhc2hib2FyZE92ZXJ2aWV3RGF0YSxcclxuICBEYXNoYm9hcmRQZXJpb2QsXHJcbiAgRGFzaGJvYXJkSXRlbVNlbGVjdGVkRXZlbnQsXHJcbiAgRGFzaGJvYXJkQXR0ZW50aW9uSXRlbSxcclxuICBEYXNoYm9hcmRQZXJmb3JtYW5jZUFuYWx5c2lzLFxyXG4gIFBlcmZvcm1hbmNlTGV2ZWwsXHJcbiAgRGFzaGJvYXJkRHV0eUFuYWx5c2lzLFxyXG4gIERhc2hib2FyZER1dHlTYWxhcnlDb21wYXJpc29uLFxyXG4gIER1dHlTYWxhcnlTdGF0dXNcclxufSBmcm9tICcuL21vZGVscy9kYXNoYm9hcmQubW9kZWxzJztcclxuXHJcbmV4cG9ydCB0eXBlIEtwaVBvbGFyaXR5ID0gJ2hpZ2hlcklzQmV0dGVyJyB8ICdsb3dlcklzQmV0dGVyJyB8ICduZXV0cmFsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgS3BpQmFkZ2VJbmZvIHtcclxuICBjaGFuZ2VUZXh0OiBzdHJpbmc7XHJcbiAgYmFkZ2VDbGFzczogc3RyaW5nO1xyXG4gIGlzUG9zaXRpdmU6IGJvb2xlYW47XHJcbiAgaXNOZWdhdGl2ZTogYm9vbGVhbjtcclxuICBpc1plcm86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRLcGlCYWRnZShkaWZmOiBudW1iZXIsIHBvbGFyaXR5OiBLcGlQb2xhcml0eSwgaXNEZWNpbWFsID0gZmFsc2UpOiBLcGlCYWRnZUluZm8ge1xyXG4gIGNvbnN0IGlzWmVybyA9IGRpZmYgPT09IDA7XHJcbiAgY29uc3QgaXNQb3NpdGl2ZSA9IGRpZmYgPiAwO1xyXG4gIGNvbnN0IGlzTmVnYXRpdmUgPSBkaWZmIDwgMDtcclxuXHJcbiAgY29uc3QgY2hhbmdlVGV4dCA9IGlzWmVyb1xyXG4gICAgPyAoaXNEZWNpbWFsID8gJzAsMCcgOiAnMCcpXHJcbiAgICA6IChpc0RlY2ltYWwgPyBNYXRoLmFicyhkaWZmKS50b0ZpeGVkKDEpLnJlcGxhY2UoJy4nLCAnLCcpIDogYCR7TWF0aC5hYnMoZGlmZil9YCk7XHJcblxyXG4gIGxldCBiYWRnZUNsYXNzID0gJ2twaS1iYWRnZS0tZ3JheSc7XHJcbiAgaWYgKCFpc1plcm8pIHtcclxuICAgIGlmIChwb2xhcml0eSA9PT0gJ25ldXRyYWwnKSB7XHJcbiAgICAgIGJhZGdlQ2xhc3MgPSAna3BpLWJhZGdlLS1ibHVlJztcclxuICAgIH0gZWxzZSBpZiAocG9sYXJpdHkgPT09ICdoaWdoZXJJc0JldHRlcicpIHtcclxuICAgICAgYmFkZ2VDbGFzcyA9IGlzUG9zaXRpdmUgPyAna3BpLWJhZGdlLS1ncmVlbicgOiAna3BpLWJhZGdlLS1jb3JhbCc7XHJcbiAgICB9IGVsc2UgaWYgKHBvbGFyaXR5ID09PSAnbG93ZXJJc0JldHRlcicpIHtcclxuICAgICAgYmFkZ2VDbGFzcyA9IGlzUG9zaXRpdmUgPyAna3BpLWJhZGdlLS1jb3JhbCcgOiAna3BpLWJhZGdlLS1ncmVlbic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4geyBjaGFuZ2VUZXh0LCBiYWRnZUNsYXNzLCBpc1Bvc2l0aXZlLCBpc05lZ2F0aXZlLCBpc1plcm8gfTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUEVSRk9STUFOQ0VfVEVYVFM6IFJlY29yZDxQZXJmb3JtYW5jZUxldmVsLCB7IHRpdGxlOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSB7XHJcbiAgW1BlcmZvcm1hbmNlTGV2ZWwuQmx1ZV06IHtcclxuICAgIHRpdGxlOiAnQWluZGEgdGVtIGVzcGHDp28gcGFyYSBzZSBkZXN0YWNhci4nLFxyXG4gICAgZGVzY3JpcHRpb246ICdTdWEgaW5zdGl0dWnDp8OjbyBqw6EgZGVzcGVydGEgYm9tIGludGVyZXNzZSBlbnRyZSBvcyBjYW5kaWRhdG9zLiBGYWxlIGNvbSB1bSBjb25zdWx0b3IgZGEgQ2FyZU9uIHBhcmEgaXIgYWluZGEgbWFpcyBsb25nZS4nXHJcbiAgfSxcclxuICBbUGVyZm9ybWFuY2VMZXZlbC5PcmFuZ2VdOiB7XHJcbiAgICB0aXRsZTogJ1N1YXMgdmFnYXMgZXN0w6NvIHNlbmRvIHZpc3RhcywgbWFzIHBvdWNhIGdlbnRlIHNlIGNhbmRpZGF0YS4nLFxyXG4gICAgZGVzY3JpcHRpb246ICdJc3NvIHBvZGUgaW5kaWNhciBxdWUgb3MgdmFsb3JlcyBvZmVyZWNpZG9zIGVzdMOjbyBhYmFpeG8gZGEgbcOpZGlhIGRhIHJlZ2nDo28sIHF1ZSBmYWx0YW0gaW5mb3JtYcOnw7VlcyBtYWlzIGF0cmF0aXZhcyBvdSBxdWUgc3VhcyBpbmZvcm1hw6fDtWVzIGVzdMOjbyBpbmNvbXBsZXRhcy4gRmFsZSBjb20gdW0gY29uc3VsdG9yIGRhIENhcmVPbi4nXHJcbiAgfSxcclxuICBbUGVyZm9ybWFuY2VMZXZlbC5SZWRdOiB7XHJcbiAgICB0aXRsZTogJ1N1YSBpbnN0aXR1acOnw6NvIG7Do28gZXN0w6Egc2VuZG8gbXVpdG8gcHJvY3VyYWRhIHBlbG9zIGNhbmRpZGF0b3MuJyxcclxuICAgIGRlc2NyaXB0aW9uOiAnRmF6IHRlbXBvIHF1ZSB2b2PDqiBuw6NvIHB1YmxpY2EgdW1hIHZhZ2EsIHBvciBpc3NvIHN1YSBhbsOhbGlzZSBkZSBkZXNlbXBlbmhvIHZlbSBjYWluZG8uIEZhbGUgY29tIHVtIGNvbnN1bHRvciBkYSBDYXJlT24gcGFyYSB0ZXIgdW0gYXBvaW8gcGVyc29uYWxpemFkby4nXHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgcHJpbmNpcGFsIGRlIERhc2hib2FyZCBkZSBSZWNydXRhbWVudG8gSW5zdGl0dWNpb25hbCBkYSBDYXJlT24uXHJcbiAqIFxyXG4gKiBDZW50cmFsaXphIGUgb3JxdWVzdHJhIGEgZXhpYmljYW8gZGU6XHJcbiAqIC0gQ2FiZWNhbGhvIGNvbSBmaWx0cm9zIHRlbXBvcmFpcyByZWF0aXZvcyAoSG9qZSwgU2VtYW5hLCBNZXMpXHJcbiAqIC0gQ2FyZHMgc3VwZXJpb3JlcyBkZSBJbmRpY2Fkb3Jlcy1DaGF2ZSBkZSBQZXJmb3JtYW5jZSAoS1BJcylcclxuICogLSBTZWNhbyBhY2lvbmF2ZWwgXCJQcmVjaXNhIGRhIHN1YSBhdGVuY2FvXCIgKGFsZXJ0YXMgZGUgdmFnYXMgY3JpdGljYXMpXHJcbiAqIC0gU2VjYW8gXCJBbmFsaXNlIGRlIERlc2VtcGVuaG9cIiAoY3VydmEgZGUgb25kYXMgdmV0b3JpYWwgZSBvcmllbnRhY2FvIGNvbnN1bHRpdmEpXHJcbiAqIC0gU2VjYW8gXCJBbmFsaXNlIHBvciBWYWdhXCIgKGRyb3Bkb3duIGRlIHZhZ2FzLCB0aW1lbGluZSwgZG9udXQgZGUgY29udmVyc2FvLCBmdW5pbCBlIGFuYWxpc2Ugc2FsYXJpYWwpXHJcbiAqIC0gU2VjYW8gXCJDYW5kaWRhdHVyYXMgcG9yIFZhZ2FcIiAoZ3JhZmljbyBjb21wYXJhdGl2byBkZSBiYXJyYXMgZW50cmUgdmFnYXMpXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NhcmVvbi1kYXNoYm9hcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXNoYm9hcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Rhc2hib2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIC8vICNyZWdpb24gSW5wdXRzXHJcbiAgLyoqXHJcbiAgICogQ29uc29saWRhdGVkIG1ldHJpY3MgZGF0YXNldCBmZWVkaW5nIHRoZSBkYXNoYm9hcmQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGF0YT86IERhc2hib2FyZE92ZXJ2aWV3RGF0YTtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgZGFzaGJvYXJkIGlzIGN1cnJlbnRseSBmZXRjaGluZyBkYXRhIGZyb20gdGhlIGJhY2tlbmQgQVBJLlxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmUgdGltZSBwZXJpb2QgZmlsdGVyLlxyXG4gICAqIEBkZWZhdWx0ICdXZWVrJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRQZXJpb2Q6IERhc2hib2FyZFBlcmlvZCA9IERhc2hib2FyZFBlcmlvZC5XZWVrO1xyXG5cclxuICByZWFkb25seSBEdXR5U2FsYXJ5U3RhdHVzID0gRHV0eVNhbGFyeVN0YXR1cztcclxuICByZWFkb25seSBQZXJmb3JtYW5jZUxldmVsID0gUGVyZm9ybWFuY2VMZXZlbDtcclxuICByZWFkb25seSBEYXNoYm9hcmRQZXJpb2QgPSBEYXNoYm9hcmRQZXJpb2Q7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1haW4gZGFzaGJvYXJkIHRpdGxlLlxyXG4gICAqIEBkZWZhdWx0ICdEYXNoYm9hcmQnXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGl0bGUgPSAnRGFzaGJvYXJkJztcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgc3VidGl0bGUgb3IgaW5zdGl0dXRpb24gbmFtZSBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlci5cclxuICAgKiBAZGVmYXVsdCAnVmlzw6NvIGdlcmFsIGRlIHJlY3J1dGFtZW50bydcclxuICAgKi9cclxuICBASW5wdXQoKSBzdWJ0aXRsZSA9ICdWaXPDo28gZ2VyYWwgZGUgcmVjcnV0YW1lbnRvJztcclxuXHJcbiAgLyoqXHJcbiAgICogRW1wdHkgc3RhdGUgbWVzc2FnZSB3aGVuIG5vIGRhdGEgaXMgcmV0dXJuZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ05lbmh1bSBkYWRvIHJlZ2lzdHJhZG8gcGFyYSBvIHBlcsOtb2RvIHNlbGVjaW9uYWRvLic7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN1bHRhbnQgcGhvbmUgbnVtYmVyIGZvciBXaGF0c0FwcCByZWRpcmVjdC5cclxuICAgKiBAZGVmYXVsdCAnNTU0Nzk5NjU2OTcwNydcclxuICAgKi9cclxuICBASW5wdXQoKSBjb25zdWx0YW50UGhvbmUgPSAnNTU0Nzk5NjU2OTcwNyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWwgbWVzc2FnZSBmb3IgV2hhdHNBcHAgY29uc3VsdGFudCBjaGF0LlxyXG4gICAqIEBkZWZhdWx0ICdlbXB0eSBzdHJpbmcnXHJcbiAgICovXHJcbiAgQElucHV0KCkgY29uc3VsdGFudE1lc3NhZ2UgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbHMgd2hldGhlciB6ZXJvZWQgc3RhdGVzIGRpc3BsYXkgdGhlIGFjdGlvbmFibGUgJ1B1YmxpY2FyIFZhZ2EnIENUQSBiYW5uZXIgb3IgYSBiYXNpYyBpbmZvcm1hdGlvbmFsIHplcm8gc3RhdGUuXHJcbiAgICogLSAncHVibGlzaCc6IGRpc3BsYXlzIHRoZSBzcGVjaWFsIGJ1c2luZXNzIHplcm8gc3RhdGUgd2l0aCB0aGUgJ1B1YmxpY2FyIFZhZ2EnIGFjdGlvbiBidXR0b24uXHJcbiAgICogLSAnYmFzaWMnOiBkaXNwbGF5cyB0aGUgc2ltcGxlL2Jhc2ljIHplcm8gc3RhdGUgd2l0aG91dCB0aGUgJ1B1YmxpY2FyIFZhZ2EnIGFjdGlvbiBidXR0b24uXHJcbiAgICogQGRlZmF1bHQgJ3B1Ymxpc2gnXHJcbiAgICovXHJcbiAgQElucHV0KCkgemVyb1N0YXRlTW9kZTogJ3B1Ymxpc2gnIHwgJ2Jhc2ljJyA9ICdwdWJsaXNoJztcclxuXHJcbiAgZ2V0IGlzUHVibGlzaFplcm9TdGF0ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnplcm9TdGF0ZU1vZGUgPT09ICdwdWJsaXNoJztcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIE91dHB1dHNcclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW5ldmVyIHRoZSB1c2VyIHNlbGVjdHMgYSBkaWZmZXJlbnQgcGVyaW9kIGZpbHRlciAoVG9kYXksIFdlZWssIE1vbnRoKS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcGVyaW9kQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRQZXJpb2Q+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbmV2ZXIgYW4gaW50ZXJhY3RpdmUgZWxlbWVudCBpbiBhbnkgY2hhcnQgaXMgY2xpY2tlZCAocmVzZXJ2ZWQgZm9yIHVwY29taW5nIGNoYXJ0IHNlY3Rpb25zKS5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgaXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRJdGVtU2VsZWN0ZWRFdmVudD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuZXZlciB0aGUgdXNlciBjbGlja3Mgb24gJ1B1YmxpY2FyIFZhZ2EnIGFjcm9zcyBhbnkgb2YgdGhlIHplcm8tc3RhdGUgYmFubmVycy5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHVibGlzaER1dHkgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IHZvaWQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHVzZXIgc2VsZWN0cyBhIGR1dHkgaW4gdGhlIHZhY2FuY3kgYW5hbHlzaXMgZHJvcGRvd24uXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGR1dHlTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkRHV0eUFuYWx5c2lzPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW5ldmVyIHRoZSB1c2VyIGNsaWNrcyBvbiAnRmFsZSBjb20gdW0gY29uc3VsdG9yJyBhY3Jvc3MgYW55IHNlY3Rpb24uXHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGNvbnN1bHRhbnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW5ldmVyIGEgdmFjYW5jeSBpbiB0aGUgYXR0ZW50aW9uIGxpc3QgaXMgY2xpY2tlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgYXR0ZW50aW9uSXRlbVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRBdHRlbnRpb25JdGVtPigpO1xyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgb25QdWJsaXNoRHV0eShzZWN0aW9uID0gJ1plcm8gU3RhdGUnKTogdm9pZCB7XHJcbiAgICB0aGlzLnB1Ymxpc2hEdXR5LmVtaXQoc2VjdGlvbik7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10pIHtcclxuICAgICAgdGhpcy5zeW5jU2VsZWN0ZWREdXR5KCk7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2xvYWRpbmcnXSB8fCBjaGFuZ2VzWydjdXJyZW50UGVyaW9kJ10pIHtcclxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN5bmNTZWxlY3RlZER1dHkoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudmFjYW5jaWVzQW5hbHlzaXMgfHwgdGhpcy52YWNhbmNpZXNBbmFseXNpcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZER1dHlJZCA9IG51bGw7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMudmFjYW5jaWVzQW5hbHlzaXMuc29tZShkID0+IGQuZHV0eUlkID09PSB0aGlzLnNlbGVjdGVkRHV0eUlkKTtcclxuICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREdXR5SWQgPSB0aGlzLnZhY2FuY2llc0FuYWx5c2lzWzBdLmR1dHlJZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gQXR0ZW50aW9uU2VjdGlvblxyXG4gIGdldCBhdHRlbnRpb25JdGVtcygpOiBEYXNoYm9hcmRBdHRlbnRpb25JdGVtW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8uYXR0ZW50aW9uSXRlbXMgPz8gW107XHJcbiAgfVxyXG5cclxuICBvbkF0dGVudGlvbkl0ZW1DbGljayhpdGVtOiBEYXNoYm9hcmRBdHRlbnRpb25JdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmF0dGVudGlvbkl0ZW1TZWxlY3RlZC5lbWl0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgb3BlbkNvbnN1bHRhbnRXaGF0c0FwcChzZWN0aW9uID0gJ0NvbnN1bHRvcicpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3VsdGFudENsaWNrLmVtaXQoc2VjdGlvbik7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgY29uc3QgY2xlYW5QaG9uZSA9ICh0aGlzLmNvbnN1bHRhbnRQaG9uZSB8fCAnNTU0Nzk5NjU2OTcwNycpLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcbiAgICAgIGNvbnN0IHRleHRQYXJhbSA9IHRoaXMuY29uc3VsdGFudE1lc3NhZ2VcclxuICAgICAgICA/IGAmdGV4dD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLmNvbnN1bHRhbnRNZXNzYWdlKX1gXHJcbiAgICAgICAgOiAnJztcclxuICAgICAgY29uc3Qgd2hhdHNhcHBVcmwgPSBgaHR0cHM6Ly9hcGkud2hhdHNhcHAuY29tL3NlbmQ/cGhvbmU9JHtjbGVhblBob25lfSR7dGV4dFBhcmFtfWA7XHJcbiAgICAgIHdpbmRvdy5vcGVuKHdoYXRzYXBwVXJsLCAnX2JsYW5rJywgJ25vb3BlbmVyLG5vcmVmZXJyZXInKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFBlcmZvcm1hbmNlQW5hbHlzaXNTZWN0aW9uXHJcbiAgc2hvd0luZm9Ub29sdGlwID0gZmFsc2U7XHJcblxyXG4gIHRvZ2dsZUluZm9Ub29sdGlwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93SW5mb1Rvb2x0aXAgPSAhdGhpcy5zaG93SW5mb1Rvb2x0aXA7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uSW5mb01vdXNlRW50ZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dJbmZvVG9vbHRpcCA9IHRydWU7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uSW5mb01vdXNlTGVhdmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dJbmZvVG9vbHRpcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGVyZm9ybWFuY2VBbmFseXNpcygpOiBEYXNoYm9hcmRQZXJmb3JtYW5jZUFuYWx5c2lzIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LnBlcmZvcm1hbmNlQW5hbHlzaXM7XHJcbiAgfVxyXG5cclxuICBnZXQgcGVyZm9ybWFuY2VMZXZlbCgpOiBQZXJmb3JtYW5jZUxldmVsIHtcclxuICAgIGNvbnN0IGxldmVsID0gdGhpcy5wZXJmb3JtYW5jZUFuYWx5c2lzPy5sZXZlbDtcclxuICAgIGlmIChsZXZlbCA9PT0gUGVyZm9ybWFuY2VMZXZlbC5CbHVlIHx8IChsZXZlbCBhcyBhbnkpID09PSAwKSByZXR1cm4gUGVyZm9ybWFuY2VMZXZlbC5CbHVlO1xyXG4gICAgaWYgKGxldmVsID09PSBQZXJmb3JtYW5jZUxldmVsLk9yYW5nZSB8fCAobGV2ZWwgYXMgYW55KSA9PT0gMSkgcmV0dXJuIFBlcmZvcm1hbmNlTGV2ZWwuT3JhbmdlO1xyXG4gICAgaWYgKGxldmVsID09PSBQZXJmb3JtYW5jZUxldmVsLlJlZCB8fCAobGV2ZWwgYXMgYW55KSA9PT0gMikgcmV0dXJuIFBlcmZvcm1hbmNlTGV2ZWwuUmVkO1xyXG4gICAgcmV0dXJuIFBlcmZvcm1hbmNlTGV2ZWwuUmVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBlcmZvcm1hbmNlVGl0bGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnBlcmZvcm1hbmNlQW5hbHlzaXM/LmhpZ2hsaWdodFRpdGxlXHJcbiAgICAgIHx8IERFRkFVTFRfUEVSRk9STUFOQ0VfVEVYVFNbdGhpcy5wZXJmb3JtYW5jZUxldmVsXT8udGl0bGVcclxuICAgICAgfHwgREVGQVVMVF9QRVJGT1JNQU5DRV9URVhUU1tQZXJmb3JtYW5jZUxldmVsLlJlZF0udGl0bGU7XHJcbiAgfVxyXG5cclxuICBnZXQgcGVyZm9ybWFuY2VEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucGVyZm9ybWFuY2VBbmFseXNpcz8uZGVzY3JpcHRpb25cclxuICAgICAgfHwgREVGQVVMVF9QRVJGT1JNQU5DRV9URVhUU1t0aGlzLnBlcmZvcm1hbmNlTGV2ZWxdPy5kZXNjcmlwdGlvblxyXG4gICAgICB8fCBERUZBVUxUX1BFUkZPUk1BTkNFX1RFWFRTW1BlcmZvcm1hbmNlTGV2ZWwuUmVkXS5kZXNjcmlwdGlvbjtcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFZhY2FuY3lBbmFseXNpc1NlY3Rpb25cclxuICBzZWxlY3RlZER1dHlJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgaXNEdXR5RHJvcGRvd25PcGVuID0gZmFsc2U7XHJcblxyXG4gIGdldCB2YWNhbmNpZXNBbmFseXNpcygpOiBEYXNoYm9hcmREdXR5QW5hbHlzaXNbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhPy52YWNhbmNpZXNBbmFseXNpcyA/PyBbXTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZER1dHkoKTogRGFzaGJvYXJkRHV0eUFuYWx5c2lzIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy52YWNhbmNpZXNBbmFseXNpcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREdXR5SWQpIHtcclxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnZhY2FuY2llc0FuYWx5c2lzLmZpbmQoZCA9PiBkLmR1dHlJZCA9PT0gdGhpcy5zZWxlY3RlZER1dHlJZCk7XHJcbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudmFjYW5jaWVzQW5hbHlzaXNbMF07XHJcbiAgfVxyXG5cclxuICB0b2dnbGVEdXR5RHJvcGRvd24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzRHV0eURyb3Bkb3duT3BlbiA9ICF0aGlzLmlzRHV0eURyb3Bkb3duT3BlbjtcclxuICB9XHJcblxyXG4gIGNsb3NlRHV0eURyb3Bkb3duKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0R1dHlEcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNlbGVjdER1dHkoZHV0eTogRGFzaGJvYXJkRHV0eUFuYWx5c2lzKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRHV0eUlkID0gZHV0eS5kdXR5SWQ7XHJcbiAgICB0aGlzLmlzRHV0eURyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5kdXR5U2VsZWN0ZWQuZW1pdChkdXR5KTtcclxuICB9XHJcblxyXG4gIGdldCB2YWNhbmN5U2VjdGlvblN1YnRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gdGhpcy5zZWxlY3RlZER1dHk/LmNhbmRpZGF0ZXNDb3VudCA/PyAwO1xyXG4gICAgY29uc3QgY2FuZFRleHQgPSBjYW5kaWRhdGVzID09PSAxID8gJ2NhbmRpZGF0dXJhJyA6ICdjYW5kaWRhdHVyYXMnO1xyXG4gICAgc3dpdGNoICh0aGlzLmN1cnJlbnRQZXJpb2QpIHtcclxuICAgICAgY2FzZSBEYXNoYm9hcmRQZXJpb2QuV2VlazpcclxuICAgICAgICByZXR1cm4gYCR7Y2FuZGlkYXRlc30gJHtjYW5kVGV4dH0gbm9zIMO6bHRpbW9zIDcgZGlhc2A7XHJcbiAgICAgIGNhc2UgRGFzaGJvYXJkUGVyaW9kLk1vbnRoOlxyXG4gICAgICAgIHJldHVybiBgJHtjYW5kaWRhdGVzfSAke2NhbmRUZXh0fSBuZXN0ZSBtw6pzYDtcclxuICAgICAgY2FzZSBEYXNoYm9hcmRQZXJpb2QuVG9kYXk6XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGAke2NhbmRpZGF0ZXN9ICR7Y2FuZFRleHR9IGhvamVgO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkRHV0eVRpbWVsaW5lUG9pbnRzKCk6IFRpbWVsaW5lUG9pbnRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZER1dHk/LnRpbWVsaW5lUG9pbnRzID8/IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkRHV0eURvbnV0SXRlbXMoKTogRG9udXRDaGFydEl0ZW1bXSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZER1dHk/LmNvbnZlcnNpb25Eb251dCAmJiB0aGlzLnNlbGVjdGVkRHV0eS5jb252ZXJzaW9uRG9udXQubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZER1dHkuY29udmVyc2lvbkRvbnV0O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgdmlld3MgPSB0aGlzLnNlbGVjdGVkRHV0eT8udmlld3NDb3VudCA/PyAwO1xyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IHRoaXMuc2VsZWN0ZWREdXR5Py5jYW5kaWRhdGVzQ291bnQgPz8gMDtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHsgbGFiZWw6ICdWaXN1YWxpemHDp8O1ZXMnLCB2YWx1ZTogdmlld3MsIGNvbG9yOiAnIzFFMUI0QicgfSxcclxuICAgICAgeyBsYWJlbDogJ0NhbmRpZGF0dXJhcycsIHZhbHVlOiBjYW5kaWRhdGVzLCBjb2xvcjogJyMzQjgyRjYnIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWREdXR5Q29udmVyc2lvblJhdGVUZXh0KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYXRlID0gdGhpcy5zZWxlY3RlZER1dHk/LmNvbnZlcnNpb25SYXRlID8/IDA7XHJcbiAgICByZXR1cm4gYCR7cmF0ZX0lYDtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZER1dHlGdW5uZWxJdGVtcygpOiBGdW5uZWxCYXJJdGVtW10ge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREdXR5Py5mdW5uZWxJdGVtcyAmJiB0aGlzLnNlbGVjdGVkRHV0eS5mdW5uZWxJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRHV0eS5mdW5uZWxJdGVtcztcclxuICAgIH1cclxuICAgIGNvbnN0IHZpZXdzID0gdGhpcy5zZWxlY3RlZER1dHk/LnZpZXdzQ291bnQgPz8gMDtcclxuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRHV0eT8uY2FuZGlkYXRlc0NvdW50ID8/IDA7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7IGxhYmVsOiAnVmlzdWFsaXphw6fDtWVzJywgY291bnQ6IHZpZXdzLCBiYXJDb2xvcjogJyMxRTFCNEInIH0sXHJcbiAgICAgIHsgbGFiZWw6ICdDYW5kaWRhdHVyYXMnLCBjb3VudDogY2FuZGlkYXRlcywgYmFyQ29sb3I6ICcjM0I4MkY2JyB9XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgb25UaW1lbGluZVBvaW50U2VsZWN0ZWQocG9pbnQ6IFRpbWVsaW5lUG9pbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoe1xyXG4gICAgICBjaGFydDogJ0xpbmhhIFRlbXBvcmFsIHBvciBWYWdhJyxcclxuICAgICAgaXRlbTogcG9pbnRcclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gVmFjYW5jeVNhbGFyeUNvbXBhcmlzb25TZWN0aW9uXHJcbiAgZ2V0IHNlbGVjdGVkRHV0eVNhbGFyeUNvbXBhcmlzb24oKTogRGFzaGJvYXJkRHV0eVNhbGFyeUNvbXBhcmlzb24gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWREdXR5Py5zYWxhcnlDb21wYXJpc29uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNhbGFyeVN0YXR1cygpOiBEdXR5U2FsYXJ5U3RhdHVzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBzID0gdGhpcy5zZWxlY3RlZER1dHlTYWxhcnlDb21wYXJpc29uPy5zdGF0dXM7XHJcbiAgICBpZiAocyA9PT0gRHV0eVNhbGFyeVN0YXR1cy5CZWxvd01hcmtldCB8fCAocyBhcyBhbnkpID09PSAwKSByZXR1cm4gRHV0eVNhbGFyeVN0YXR1cy5CZWxvd01hcmtldDtcclxuICAgIGlmIChzID09PSBEdXR5U2FsYXJ5U3RhdHVzLkF0TWFya2V0IHx8IChzIGFzIGFueSkgPT09IDEpIHJldHVybiBEdXR5U2FsYXJ5U3RhdHVzLkF0TWFya2V0O1xyXG4gICAgaWYgKHMgPT09IER1dHlTYWxhcnlTdGF0dXMuQWJvdmVNYXJrZXQgfHwgKHMgYXMgYW55KSA9PT0gMikgcmV0dXJuIER1dHlTYWxhcnlTdGF0dXMuQWJvdmVNYXJrZXQ7XHJcbiAgICBpZiAocyA9PT0gRHV0eVNhbGFyeVN0YXR1cy5Ob3RJbmZvcm1lZCB8fCAocyBhcyBhbnkpID09PSAzKSByZXR1cm4gRHV0eVNhbGFyeVN0YXR1cy5Ob3RJbmZvcm1lZDtcclxuICAgIGlmIChzID09PSBEdXR5U2FsYXJ5U3RhdHVzLkluc3VmZmljaWVudERhdGEgfHwgKHMgYXMgYW55KSA9PT0gNCkgcmV0dXJuIER1dHlTYWxhcnlTdGF0dXMuSW5zdWZmaWNpZW50RGF0YTtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0Q3VycmVuY3kodmFsdWU/OiBudW1iZXIgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xyXG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcclxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxyXG4gICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDBcclxuICAgIH0pLmZvcm1hdCh2YWx1ZSkucmVwbGFjZSgvXFx1MDBBMC9nLCAnICcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZvcm1hdHRlZFlvdXJTYWxhcnkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbXBhcmlzb24gPSB0aGlzLnNlbGVjdGVkRHV0eVNhbGFyeUNvbXBhcmlzb247XHJcbiAgICBpZiAoIWNvbXBhcmlzb24gfHwgdGhpcy5zYWxhcnlTdGF0dXMgPT09IER1dHlTYWxhcnlTdGF0dXMuTm90SW5mb3JtZWQgfHwgY29tcGFyaXNvbi55b3VyU2FsYXJ5ID09PSBudWxsIHx8IGNvbXBhcmlzb24ueW91clNhbGFyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAnTsOjbyBpbmZvcm1hZG8nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0Q3VycmVuY3koY29tcGFyaXNvbi55b3VyU2FsYXJ5KTtcclxuICB9XHJcblxyXG4gIGdldCBmb3JtYXR0ZWRSZWdpb25hbEF2ZXJhZ2UoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbXBhcmlzb24gPSB0aGlzLnNlbGVjdGVkRHV0eVNhbGFyeUNvbXBhcmlzb247XHJcbiAgICBpZiAoIWNvbXBhcmlzb24gfHwgdGhpcy5zYWxhcnlTdGF0dXMgPT09IER1dHlTYWxhcnlTdGF0dXMuSW5zdWZmaWNpZW50RGF0YSB8fCBjb21wYXJpc29uLnJlZ2lvbmFsQXZlcmFnZVNhbGFyeSA9PT0gbnVsbCB8fCBjb21wYXJpc29uLnJlZ2lvbmFsQXZlcmFnZVNhbGFyeSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAnRGFkb3MgaW5zdWZpY2llbnRlcyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRDdXJyZW5jeShjb21wYXJpc29uLnJlZ2lvbmFsQXZlcmFnZVNhbGFyeSk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2FsYXJ5QmFkZ2VDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLnNhbGFyeVN0YXR1cykge1xyXG4gICAgICBjYXNlIER1dHlTYWxhcnlTdGF0dXMuQmVsb3dNYXJrZXQ6XHJcbiAgICAgICAgcmV0dXJuICdzYWxhcnktYmFkZ2UtLW9yYW5nZSc7XHJcbiAgICAgIGNhc2UgRHV0eVNhbGFyeVN0YXR1cy5BdE1hcmtldDpcclxuICAgICAgICByZXR1cm4gJ3NhbGFyeS1iYWRnZS0tYmx1ZSc7XHJcbiAgICAgIGNhc2UgRHV0eVNhbGFyeVN0YXR1cy5BYm92ZU1hcmtldDpcclxuICAgICAgICByZXR1cm4gJ3NhbGFyeS1iYWRnZS0tcHVycGxlJztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc2FsYXJ5VGl0bGVDb2xvckNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2FsYXJ5U3RhdHVzKSB7XHJcbiAgICAgIGNhc2UgRHV0eVNhbGFyeVN0YXR1cy5CZWxvd01hcmtldDpcclxuICAgICAgICByZXR1cm4gJ3NhbGFyeS10aXRsZS0tb3JhbmdlJztcclxuICAgICAgY2FzZSBEdXR5U2FsYXJ5U3RhdHVzLkF0TWFya2V0OlxyXG4gICAgICAgIHJldHVybiAnc2FsYXJ5LXRpdGxlLS1ibHVlJztcclxuICAgICAgY2FzZSBEdXR5U2FsYXJ5U3RhdHVzLkFib3ZlTWFya2V0OlxyXG4gICAgICAgIHJldHVybiAnc2FsYXJ5LXRpdGxlLS1wdXJwbGUnO1xyXG4gICAgICBjYXNlIER1dHlTYWxhcnlTdGF0dXMuTm90SW5mb3JtZWQ6XHJcbiAgICAgICAgcmV0dXJuICdzYWxhcnktdGl0bGUtLXJlZCc7XHJcbiAgICAgIGNhc2UgRHV0eVNhbGFyeVN0YXR1cy5JbnN1ZmZpY2llbnREYXRhOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnc2FsYXJ5LXRpdGxlLS1kZWZhdWx0JztcclxuICAgIH1cclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIEtwaUdldHRlcnNcclxuICAvLyAxLiBWYWdhcyBQdWJsaWNhZGFzXHJcbiAgZ2V0IHJlZ2lzdGVyZWRWYWNhbmNpZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmtwaXM/LnJlZ2lzdGVyZWRWYWNhbmNpZXMgPz8gMDtcclxuICB9XHJcblxyXG4gIGdldCByZWdpc3RlcmVkVmFjYW5jaWVzRGlmZigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ua3Bpcz8ucmVnaXN0ZXJlZFZhY2FuY2llc0RpZmZlcmVuY2UgPz8gMDtcclxuICB9XHJcblxyXG4gIGdldCByZWdpc3RlcmVkVmFjYW5jaWVzQmFkZ2UoKTogS3BpQmFkZ2VJbmZvIHtcclxuICAgIHJldHVybiBmb3JtYXRLcGlCYWRnZSh0aGlzLnJlZ2lzdGVyZWRWYWNhbmNpZXNEaWZmLCAnbmV1dHJhbCcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlZ2lzdGVyZWRWYWNhbmNpZXNDaGFuZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyZWRWYWNhbmNpZXNCYWRnZS5jaGFuZ2VUZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJlZ2lzdGVyZWRWYWNhbmNpZXNCYWRnZUNsYXNzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RlcmVkVmFjYW5jaWVzQmFkZ2UuYmFkZ2VDbGFzcztcclxuICB9XHJcblxyXG4gIC8vIDIuIENhbmRpZGF0b3MgSW5zY3JpdG9zXHJcbiAgZ2V0IGNhbmRpZGF0ZUFwcGxpY2F0aW9ucygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ua3Bpcz8uY2FuZGlkYXRlQXBwbGljYXRpb25zID8/IDA7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuZGlkYXRlQXBwbGljYXRpb25zRGlmZigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ua3Bpcz8uY2FuZGlkYXRlQXBwbGljYXRpb25zRGlmZmVyZW5jZSA/PyAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNhbmRpZGF0ZUFwcGxpY2F0aW9uc0JhZGdlKCk6IEtwaUJhZGdlSW5mbyB7XHJcbiAgICByZXR1cm4gZm9ybWF0S3BpQmFkZ2UodGhpcy5jYW5kaWRhdGVBcHBsaWNhdGlvbnNEaWZmLCAnaGlnaGVySXNCZXR0ZXInKTtcclxuICB9XHJcblxyXG4gIGdldCBjYW5kaWRhdGVBcHBsaWNhdGlvbnNDaGFuZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNhbmRpZGF0ZUFwcGxpY2F0aW9uc0JhZGdlLmNoYW5nZVRleHQ7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FuZGlkYXRlQXBwbGljYXRpb25zQmFkZ2VDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FuZGlkYXRlQXBwbGljYXRpb25zQmFkZ2UuYmFkZ2VDbGFzcztcclxuICB9XHJcblxyXG4gIC8vIDMuIEN1cnLDrWN1bG9zIHBhcmEgQXZhbGlhclxyXG4gIGdldCBwZW5kaW5nUmV2aWV3cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ua3Bpcz8ucGVuZGluZ1Jldmlld3MgPz8gMDtcclxuICB9XHJcblxyXG4gIGdldCBwZW5kaW5nUmV2aWV3c0RpZmYoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmtwaXM/LnBlbmRpbmdSZXZpZXdzRGlmZmVyZW5jZSA/PyAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBlbmRpbmdSZXZpZXdzQmFkZ2UoKTogS3BpQmFkZ2VJbmZvIHtcclxuICAgIHJldHVybiBmb3JtYXRLcGlCYWRnZSh0aGlzLnBlbmRpbmdSZXZpZXdzRGlmZiwgJ2xvd2VySXNCZXR0ZXInKTtcclxuICB9XHJcblxyXG4gIGdldCBwZW5kaW5nUmV2aWV3c0NoYW5nZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucGVuZGluZ1Jldmlld3NCYWRnZS5jaGFuZ2VUZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBlbmRpbmdSZXZpZXdzQmFkZ2VDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucGVuZGluZ1Jldmlld3NCYWRnZS5iYWRnZUNsYXNzO1xyXG4gIH1cclxuXHJcbiAgLy8gNC4gTcOpZGlhIGRlIENhbmRpZGF0b3NcclxuICBnZXQgYXZlcmFnZUNhbmRpZGF0ZXNQZXJWYWNhbmN5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhdmcgPSB0aGlzLmRhdGE/LmtwaXM/LmF2ZXJhZ2VDYW5kaWRhdGVzUGVyVmFjYW5jeTtcclxuICAgIGlmIChhdmcgPT09IHVuZGVmaW5lZCB8fCBhdmcgPT09IG51bGwpIHJldHVybiAnMCwwJztcclxuICAgIHJldHVybiBhdmcudG9GaXhlZCgxKS5yZXBsYWNlKCcuJywgJywnKTtcclxuICB9XHJcblxyXG4gIGdldCBhdmVyYWdlQ2FuZGlkYXRlc0RpZmYoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmtwaXM/LmF2ZXJhZ2VDYW5kaWRhdGVzRGlmZmVyZW5jZSA/PyAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGF2ZXJhZ2VDYW5kaWRhdGVzQmFkZ2UoKTogS3BpQmFkZ2VJbmZvIHtcclxuICAgIHJldHVybiBmb3JtYXRLcGlCYWRnZSh0aGlzLmF2ZXJhZ2VDYW5kaWRhdGVzRGlmZiwgJ2hpZ2hlcklzQmV0dGVyJywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXZlcmFnZUNhbmRpZGF0ZXNDaGFuZ2UoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmF2ZXJhZ2VDYW5kaWRhdGVzQmFkZ2UuY2hhbmdlVGV4dDtcclxuICB9XHJcblxyXG4gIGdldCBhdmVyYWdlQ2FuZGlkYXRlc0JhZGdlQ2xhc3MoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmF2ZXJhZ2VDYW5kaWRhdGVzQmFkZ2UuYmFkZ2VDbGFzcztcclxuICB9XHJcblxyXG4gIC8vIDUuIFN0YXR1cyBkYXMgVmFnYXNcclxuICBnZXQgb3BlblZhY2FuY2llcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ua3Bpcz8ub3BlblZhY2FuY2llcyA/PyAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNsb3NlZFZhY2FuY2llcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ua3Bpcz8uY2xvc2VkVmFjYW5jaWVzID8/IDA7XHJcbiAgfVxyXG5cclxuICBnZXQgdG90YWxEdXRpZXNDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YT8ua3Bpcz8udG90YWxWYWNhbmNpZXMgPz8gKHRoaXMub3BlblZhY2FuY2llcyArIHRoaXMuY2xvc2VkVmFjYW5jaWVzKTtcclxuICB9XHJcblxyXG4gIGdldCBkdXRpZXNTdGF0dXNJdGVtcygpOiBTdGFja2VkQmFySXRlbVtdIHtcclxuICAgIGlmICh0aGlzLmRhdGE/LmR1dGllc1N0YXR1cyAmJiB0aGlzLmRhdGEuZHV0aWVzU3RhdHVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kdXRpZXNTdGF0dXM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7IGxhYmVsOiAnQWJlcnRhcycsIHZhbHVlOiB0aGlzLm9wZW5WYWNhbmNpZXMsIGNvbG9yOiAnIzNCODJGNicgfSxcclxuICAgICAgeyBsYWJlbDogJ0VuY2VycmFkYXMnLCB2YWx1ZTogdGhpcy5jbG9zZWRWYWNhbmNpZXMsIGNvbG9yOiAnIzFFMUI0QicgfVxyXG4gICAgXTtcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIENvbXBhcmlzb25TZWN0aW9uXHJcbiAgZ2V0IGNvbXBhcmlzb25JdGVtcygpOiBDb21wYXJpc29uSXRlbVtdIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE/LmNvbXBhcmlzb24gPz8gW107XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzQ29tcGFyaXNvbkR1dGllcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBhcmlzb25JdGVtcy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvdGFsQ29tcGFyaXNvbkNhbmRpZGF0ZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNvbXBhcmlzb25JdGVtcy5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIudmFsdWUgfHwgMCksIDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRvdGFsQ29tcGFyaXNvblZhY2FuY2llcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyaXNvbkl0ZW1zLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGdldCBjb21wYXJpc29uU3VidGl0bGUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNhbmRDb3VudCA9IHRoaXMudG90YWxDb21wYXJpc29uQ2FuZGlkYXRlcztcclxuICAgIGNvbnN0IGR1dHlDb3VudCA9IHRoaXMudG90YWxDb21wYXJpc29uVmFjYW5jaWVzO1xyXG4gICAgY29uc3QgY2FuZFRleHQgPSBjYW5kQ291bnQgPT09IDEgPyAnMSBjYW5kaWRhdHVyYSBubyB0b3RhbCcgOiBgJHtjYW5kQ291bnR9IGNhbmRpZGF0dXJhcyBubyB0b3RhbGA7XHJcbiAgICBjb25zdCBkdXR5VGV4dCA9IGR1dHlDb3VudCA9PT0gMSA/ICcxIHZhZ2EgYXRpdmEnIDogYCR7ZHV0eUNvdW50fSB2YWdhcyBhdGl2YXNgO1xyXG4gICAgcmV0dXJuIGAke2NhbmRUZXh0fSwgZW0gJHtkdXR5VGV4dH1gO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gU3RhdGVIZWxwZXJzXHJcbiAgZ2V0IGhhc0RhdGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGEua3BpcztcclxuICB9XHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFVzZXJBY3Rpb25zXHJcbiAgc2V0UGVyaW9kKHBlcmlvZDogRGFzaGJvYXJkUGVyaW9kKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGVyaW9kID09PSBwZXJpb2QpIHJldHVybjtcclxuICAgIHRoaXMuY3VycmVudFBlcmlvZCA9IHBlcmlvZDtcclxuICAgIHRoaXMucGVyaW9kQ2hhbmdlLmVtaXQocGVyaW9kKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhcnRJdGVtU2VsZWN0ZWQoaXRlbTogYW55LCBjaGFydE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdCh7XHJcbiAgICAgIGNoYXJ0OiBjaGFydE5hbWUsXHJcbiAgICAgIGl0ZW1cclxuICAgIH0pO1xyXG4gIH1cclxuICAvLyAjZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmVvbi1kYXNoYm9hcmQtY29udGFpbmVyXCI+XHJcbiAgPCEtLSAjcmVnaW9uIERhc2hib2FyZEhlYWRlciAtLT5cclxuICA8aGVhZGVyIGNsYXNzPVwiZGFzaGJvYXJkLWhlYWRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZXNcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWFpbi10aXRsZVwiPnt7IHRpdGxlIH19PC9oMT5cclxuICAgICAgPHAgKm5nSWY9XCJzdWJ0aXRsZVwiIGNsYXNzPVwic3VidGl0bGVcIj5cclxuICAgICAgICB7eyBzdWJ0aXRsZSB9fVxyXG4gICAgICA8L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicGVyaW9kLWZpbHRlci1ncm91cFwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJwZXJpb2QtcGlsbFwiXHJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50UGVyaW9kID09PSBEYXNoYm9hcmRQZXJpb2QuVG9kYXlcIlxyXG4gICAgICAgIChjbGljayk9XCJzZXRQZXJpb2QoRGFzaGJvYXJkUGVyaW9kLlRvZGF5KVwiXHJcbiAgICAgID5cclxuICAgICAgICBIb2plXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJwZXJpb2QtcGlsbFwiXHJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50UGVyaW9kID09PSBEYXNoYm9hcmRQZXJpb2QuV2Vla1wiXHJcbiAgICAgICAgKGNsaWNrKT1cInNldFBlcmlvZChEYXNoYm9hcmRQZXJpb2QuV2VlaylcIlxyXG4gICAgICA+XHJcbiAgICAgICAgU2VtYW5hXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgY2xhc3M9XCJwZXJpb2QtcGlsbFwiXHJcbiAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJjdXJyZW50UGVyaW9kID09PSBEYXNoYm9hcmRQZXJpb2QuTW9udGhcIlxyXG4gICAgICAgIChjbGljayk9XCJzZXRQZXJpb2QoRGFzaGJvYXJkUGVyaW9kLk1vbnRoKVwiXHJcbiAgICAgID5cclxuICAgICAgICBNw6pzXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9oZWFkZXI+XHJcbiAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICA8IS0tICNyZWdpb24gTG9hZGluZ1NrZWxldG9uU3RhdGUgLS0+XHJcbiAgPGNhcmVvbi1kYXNoYm9hcmQtc2tlbGV0b24gKm5nSWY9XCJsb2FkaW5nXCI+PC9jYXJlb24tZGFzaGJvYXJkLXNrZWxldG9uPlxyXG4gIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgPCEtLSAjcmVnaW9uIEVtcHR5U3RhdGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFoYXNEYXRhXCIgY2xhc3M9XCJkYXNoYm9hcmQtZW1wdHktc3RhdGVcIj5cclxuICAgIDxwIGNsYXNzPVwiZW1wdHktdGl0bGVcIj5TZW0gcmVnaXN0cm9zPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJlbXB0eS1kZXNjcmlwdGlvblwiPnt7IGVtcHR5TWVzc2FnZSB9fTwvcD5cclxuICA8L2Rpdj5cclxuICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gIDwhLS0gI3JlZ2lvbiBEYXNoYm9hcmRDb250ZW50IC0tPlxyXG4gIDxtYWluICpuZ0lmPVwiIWxvYWRpbmcgJiYgaGFzRGF0YVwiIGNsYXNzPVwiZGFzaGJvYXJkLWNvbnRlbnRcIj5cclxuICAgIDwhLS0gI3JlZ2lvbiBLcGlDYXJkc1JvdyAtLT5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwia3BpLWNhcmRzLWdyaWRcIj5cclxuICAgICAgPCEtLSBLUEkgMTogVmFnYXMgUHVibGljYWRhcyAtLT5cclxuICAgICAgPGFydGljbGUgY2xhc3M9XCJrcGktY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrcGktY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwia3BpLWxhYmVsXCI+VmFnYXMgUHVibGljYWRhczwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwia3BpLWNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJrcGktdmFsdWVcIj57eyByZWdpc3RlcmVkVmFjYW5jaWVzIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJrcGktYmFkZ2VcIiBbbmdDbGFzc109XCJyZWdpc3RlcmVkVmFjYW5jaWVzQmFkZ2UuYmFkZ2VDbGFzc1wiPlxyXG4gICAgICAgICAgICA8Y2FyZW9uLWRhc2hib2FyZC1pY29uICpuZ0lmPVwicmVnaXN0ZXJlZFZhY2FuY2llc0JhZGdlLmlzUG9zaXRpdmVcIiBuYW1lPVwiYXJyb3ctdXBcIiBjbGFzcz1cImtwaS1iYWRnZS1pY29uXCI+PC9jYXJlb24tZGFzaGJvYXJkLWljb24+XHJcbiAgICAgICAgICAgIDxjYXJlb24tZGFzaGJvYXJkLWljb24gKm5nSWY9XCJyZWdpc3RlcmVkVmFjYW5jaWVzQmFkZ2UuaXNOZWdhdGl2ZVwiIG5hbWU9XCJhcnJvdy1kb3duXCIgY2xhc3M9XCJrcGktYmFkZ2UtaWNvblwiPjwvY2FyZW9uLWRhc2hib2FyZC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyByZWdpc3RlcmVkVmFjYW5jaWVzQmFkZ2UuY2hhbmdlVGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImtwaS1mb290ZXJcIj5cclxuICAgICAgICAgIG5vIHRvdGFsXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2FydGljbGU+XHJcblxyXG4gICAgICA8IS0tIEtQSSAyOiBDYW5kaWRhdG9zIEluc2NyaXRvcyAtLT5cclxuICAgICAgPGFydGljbGUgY2xhc3M9XCJrcGktY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrcGktY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwia3BpLWxhYmVsXCI+Q2FuZGlkYXRvcyBJbnNjcml0b3M8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImtwaS1jYXJkLWJvZHlcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwia3BpLXZhbHVlXCI+e3sgY2FuZGlkYXRlQXBwbGljYXRpb25zIH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJrcGktYmFkZ2VcIiBbbmdDbGFzc109XCJjYW5kaWRhdGVBcHBsaWNhdGlvbnNCYWRnZS5iYWRnZUNsYXNzXCI+XHJcbiAgICAgICAgICAgIDxjYXJlb24tZGFzaGJvYXJkLWljb24gKm5nSWY9XCJjYW5kaWRhdGVBcHBsaWNhdGlvbnNCYWRnZS5pc1Bvc2l0aXZlXCIgbmFtZT1cImFycm93LXVwXCIgY2xhc3M9XCJrcGktYmFkZ2UtaWNvblwiPjwvY2FyZW9uLWRhc2hib2FyZC1pY29uPlxyXG4gICAgICAgICAgICA8Y2FyZW9uLWRhc2hib2FyZC1pY29uICpuZ0lmPVwiY2FuZGlkYXRlQXBwbGljYXRpb25zQmFkZ2UuaXNOZWdhdGl2ZVwiIG5hbWU9XCJhcnJvdy1kb3duXCIgY2xhc3M9XCJrcGktYmFkZ2UtaWNvblwiPjwvY2FyZW9uLWRhc2hib2FyZC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBjYW5kaWRhdGVBcHBsaWNhdGlvbnNCYWRnZS5jaGFuZ2VUZXh0IH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwia3BpLWZvb3RlclwiPlxyXG4gICAgICAgICAge3sgY3VycmVudFBlcmlvZCA9PT0gJ1RvZGF5JyA/ICdob2plJyA6IGN1cnJlbnRQZXJpb2QgPT09ICdXZWVrJyA/ICdlc3NhIHNlbWFuYScgOiAnZXNzZSBtw6pzJyB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9hcnRpY2xlPlxyXG5cclxuICAgICAgPCEtLSBLUEkgMzogQ3VycsOtY3Vsb3MgcGFyYSBBdmFsaWFyIC0tPlxyXG4gICAgICA8YXJ0aWNsZSBjbGFzcz1cImtwaS1jYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImtwaS1jYXJkLWhlYWRlclwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJrcGktbGFiZWxcIj5DdXJyw61jdWxvcyBwYXJhIEF2YWxpYXI8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImtwaS1jYXJkLWJvZHlcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwia3BpLXZhbHVlXCI+e3sgcGVuZGluZ1Jldmlld3MgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImtwaS1iYWRnZVwiIFtuZ0NsYXNzXT1cInBlbmRpbmdSZXZpZXdzQmFkZ2UuYmFkZ2VDbGFzc1wiPlxyXG4gICAgICAgICAgICA8Y2FyZW9uLWRhc2hib2FyZC1pY29uICpuZ0lmPVwicGVuZGluZ1Jldmlld3NCYWRnZS5pc1Bvc2l0aXZlXCIgbmFtZT1cImFycm93LXVwXCIgY2xhc3M9XCJrcGktYmFkZ2UtaWNvblwiPjwvY2FyZW9uLWRhc2hib2FyZC1pY29uPlxyXG4gICAgICAgICAgICA8Y2FyZW9uLWRhc2hib2FyZC1pY29uICpuZ0lmPVwicGVuZGluZ1Jldmlld3NCYWRnZS5pc05lZ2F0aXZlXCIgbmFtZT1cImFycm93LWRvd25cIiBjbGFzcz1cImtwaS1iYWRnZS1pY29uXCI+PC9jYXJlb24tZGFzaGJvYXJkLWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHBlbmRpbmdSZXZpZXdzQmFkZ2UuY2hhbmdlVGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImtwaS1mb290ZXJcIj5hZ3VhcmRhbmRvIGFnb3JhPC9zcGFuPlxyXG4gICAgICA8L2FydGljbGU+XHJcblxyXG4gICAgICA8IS0tIEtQSSA0OiBNw6lkaWEgZGUgQ2FuZGlkYXRvcyAtLT5cclxuICAgICAgPGFydGljbGUgY2xhc3M9XCJrcGktY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrcGktY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwia3BpLWxhYmVsXCI+TcOpZGlhIGRlIENhbmRpZGF0b3M8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImtwaS1jYXJkLWJvZHlcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwia3BpLXZhbHVlXCI+e3sgYXZlcmFnZUNhbmRpZGF0ZXNQZXJWYWNhbmN5IH19PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJrcGktYmFkZ2VcIiBbbmdDbGFzc109XCJhdmVyYWdlQ2FuZGlkYXRlc0JhZGdlLmJhZGdlQ2xhc3NcIj5cclxuICAgICAgICAgICAgPGNhcmVvbi1kYXNoYm9hcmQtaWNvbiAqbmdJZj1cImF2ZXJhZ2VDYW5kaWRhdGVzQmFkZ2UuaXNQb3NpdGl2ZVwiIG5hbWU9XCJhcnJvdy11cFwiIGNsYXNzPVwia3BpLWJhZGdlLWljb25cIj48L2NhcmVvbi1kYXNoYm9hcmQtaWNvbj5cclxuICAgICAgICAgICAgPGNhcmVvbi1kYXNoYm9hcmQtaWNvbiAqbmdJZj1cImF2ZXJhZ2VDYW5kaWRhdGVzQmFkZ2UuaXNOZWdhdGl2ZVwiIG5hbWU9XCJhcnJvdy1kb3duXCIgY2xhc3M9XCJrcGktYmFkZ2UtaWNvblwiPjwvY2FyZW9uLWRhc2hib2FyZC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyBhdmVyYWdlQ2FuZGlkYXRlc0JhZGdlLmNoYW5nZVRleHQgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJrcGktZm9vdGVyXCI+cG9yIHZhZ2E8L3NwYW4+XHJcbiAgICAgIDwvYXJ0aWNsZT5cclxuXHJcbiAgICAgIDwhLS0gS1BJIDU6IFN0YXR1cyBkYXMgVmFnYXMgLS0+XHJcbiAgICAgIDxhcnRpY2xlIGNsYXNzPVwia3BpLWNhcmQga3BpLWNhcmQtLXN0YXR1c1wiPlxyXG4gICAgICAgIDxjYXJlb24tc3RhY2tlZC1ob3Jpem9udGFsLWJhclxyXG4gICAgICAgICAgW3RpdGxlXT1cIidTdGF0dXMgZGFzIFZhZ2FzJ1wiXHJcbiAgICAgICAgICBbdG90YWxMYWJlbF09XCIndmFnYXMnXCJcclxuICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgW3Nob3dMZWdlbmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbZGF0YV09XCJkdXRpZXNTdGF0dXNJdGVtc1wiXHJcbiAgICAgICAgICBbZW1wdHlUZXh0XT1cIidTZW0gdmFnYXMgcmVnaXN0cmFkYXMnXCJcclxuICAgICAgICAgIChpdGVtU2VsZWN0ZWQpPVwib25DaGFydEl0ZW1TZWxlY3RlZCgkZXZlbnQsICdTdGF0dXMgZGFzIFZhZ2FzJylcIlxyXG4gICAgICAgID48L2NhcmVvbi1zdGFja2VkLWhvcml6b250YWwtYmFyPlxyXG4gICAgICA8L2FydGljbGU+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgPCEtLSAjcmVnaW9uIEF0dGVudGlvblNlY3Rpb24gLS0+XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImF0dGVudGlvbi1zZWN0aW9uXCI+XHJcbiAgICAgIDwhLS0gI3JlZ2lvbiBBdHRlbnRpb25DYXJkIC0tPlxyXG4gICAgICA8YXJ0aWNsZSBjbGFzcz1cImF0dGVudGlvbi1jYXJkXCI+XHJcbiAgICAgICAgPGgyIGNsYXNzPVwiYXR0ZW50aW9uLWNhcmQtdGl0bGVcIj5QcmVjaXNhIGRhIHN1YSBhdGVuw6fDo288L2gyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXR0ZW50aW9uSXRlbXMubGVuZ3RoID4gMDsgZWxzZSBub0F0dGVudGlvblwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGVudGlvbi1pdGVtcy1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXR0ZW50aW9uSXRlbXM7IGxldCBsYXN0ID0gbGFzdFwiIGNsYXNzPVwiYXR0ZW50aW9uLWl0ZW0td3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRlbnRpb24taXRlbVwiIChjbGljayk9XCJvbkF0dGVudGlvbkl0ZW1DbGljayhpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdHRlbnRpb24taXRlbS10aXRsZVwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF0dGVudGlvbi1pdGVtLXN1YnRpdGxlXCI+e3sgaXRlbS5zdWJ0aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxhc3RcIiBjbGFzcz1cImF0dGVudGlvbi1kaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY29uc3VsdGFudFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29uc3VsdGFudFdoYXRzQXBwKCdQcmVjaXNhIGRhIHN1YSBhdGVuw6fDo28nKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEZhbGUgY29tIHVtIGNvbnN1bHRvclxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9BdHRlbnRpb24+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNQdWJsaXNoWmVyb1N0YXRlOyBlbHNlIGJhc2ljQXR0ZW50aW9uWmVyb1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0ZW50aW9uLXplcm8tYm94XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGVudGlvbi16ZXJvLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGNhcmVvbi1kYXNoYm9hcmQtaWNvbiBuYW1lPVwiaW5mb1wiIGNsYXNzPVwiemVyby1pbmZvLWljb25cIj48L2NhcmVvbi1kYXNoYm9hcmQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRlbnRpb24temVyby10ZXh0c1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJhdHRlbnRpb24temVyby10aXRsZVwiPk5lbmh1bWEgdmFnYSBwcmVjaXNhIGRlIGF0ZW7Dp8OjbzwvaDM+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXR0ZW50aW9uLXplcm8tc3VidGl0bGVcIj5Wb2PDqiBuw6NvIHRlbSB2YWdhcyBlbSBhYmVydG8gcGFyYSByZXZpc2FyLjwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4temVyby1wdWJsaXNoIGJ0bi16ZXJvLXB1Ymxpc2gtLWZ1bGxcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUHVibGlzaER1dHkoJ1ByZWNpc2EgZGEgc3VhIGF0ZW7Dp8OjbycpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBQdWJsaWNhciBWYWdhXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNiYXNpY0F0dGVudGlvblplcm8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1lbXB0eS1zdGF0ZSBiYXNpYy1lbXB0eS1zdGF0ZS0tYXR0ZW50aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLWVtcHR5LWljb24td3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPGNhcmVvbi1kYXNoYm9hcmQtaWNvbiBuYW1lPVwiaW5mb1wiIGNsYXNzPVwiYmFzaWMtZW1wdHktaWNvblwiPjwvY2FyZW9uLWRhc2hib2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImJhc2ljLWVtcHR5LXRpdGxlXCI+VHVkbyBlbSBkaWEhPC9oMz5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImJhc2ljLWVtcHR5LXRleHRcIj5OZW5odW1hIHZhZ2EgcHJlY2lzYSBkYSBzdWEgYXRlbsOnw6NvIG5vIG1vbWVudG8uPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNvbnN1bHRhbnRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29uc3VsdGFudFdoYXRzQXBwKCdQcmVjaXNhIGRhIHN1YSBhdGVuw6fDo28gLSBTZW0gdmFnYXMnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBGYWxlIGNvbSB1bSBjb25zdWx0b3JcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvYXJ0aWNsZT5cclxuICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgICAgPCEtLSAjcmVnaW9uIFBlcmZvcm1hbmNlQ2FyZCAtLT5cclxuICAgICAgPGFydGljbGUgY2xhc3M9XCJwZXJmb3JtYW5jZS1jYXJkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBlcmZvcm1hbmNlLWNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8aDIgY2xhc3M9XCJwZXJmb3JtYW5jZS1jYXJkLXRpdGxlXCI+QW7DoWxpc2UgZGUgRGVzZW1wZW5obzwvaDI+XHJcblxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInBlcmZvcm1hbmNlLWluZm8td3JhcHBlclwiXHJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uSW5mb01vdXNlRW50ZXIoKVwiXHJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uSW5mb01vdXNlTGVhdmUoKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1pbmZvXCJcclxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5mb3JtYcOnw7VlcyBzb2JyZSBhIEFuw6FsaXNlIGRlIERlc2VtcGVuaG9cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJbmZvVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxjYXJlb24tZGFzaGJvYXJkLWljb24gbmFtZT1cImluZm9cIiBjbGFzcz1cImluZm8taWNvblwiPjwvY2FyZW9uLWRhc2hib2FyZC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVG9vbHRpcCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dJbmZvVG9vbHRpcFwiIGNsYXNzPVwiaW5mby10b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidG9vbHRpcC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICBFc3RhIGFuw6FsaXNlIG1lZGUgbyBpbnRlcmVzc2UgZG9zIGNhbmRpZGF0b3MgcGVsYSBzdWEgZW1wcmVzYSBlIMOpIGF0dWFsaXphZGEgY29udGludWFtZW50ZSDDoCBtZWRpZGEgcXVlIG1haXMgcHJvZmlzc2lvbmFpcyBkZW1vbnN0cmFtIGRlc2VqbyBkZSBmYXplciBwYXJ0ZSBkbyBzZXUgdGltZS5cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gR3LDoWZpY28gZGUgT25kYXMgLS0+XHJcbiAgICAgICAgPGNhcmVvbi1wZXJmb3JtYW5jZS13YXZlIFtsZXZlbF09XCJwZXJmb3JtYW5jZUxldmVsXCI+PC9jYXJlb24tcGVyZm9ybWFuY2Utd2F2ZT5cclxuXHJcbiAgICAgICAgPCEtLSBDb250ZcO6ZG8gVGV4dHVhbCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGVyZm9ybWFuY2UtYm9keVwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwicGVyZm9ybWFuY2UtaGlnaGxpZ2h0LXRpdGxlXCI+e3sgcGVyZm9ybWFuY2VUaXRsZSB9fTwvaDM+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInBlcmZvcm1hbmNlLWRlc2NyaXB0aW9uXCI+e3sgcGVyZm9ybWFuY2VEZXNjcmlwdGlvbiB9fTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBCb3TDo28gV2hhdHNBcHAgLS0+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0bi1jb25zdWx0YW50XCJcclxuICAgICAgICAgIChjbGljayk9XCJvcGVuQ29uc3VsdGFudFdoYXRzQXBwKCdBbsOhbGlzZSBkZSBEZXNlbXBlbmhvJylcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEZhbGUgY29tIHVtIGNvbnN1bHRvclxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2FydGljbGU+XHJcbiAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgIDwvc2VjdGlvbj5cclxuICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICA8IS0tICNyZWdpb24gVmFjYW5jeUFuYWx5c2lzU2VjdGlvbiAtLT5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwidmFjYW5jeS1hbmFseXNpcy1zZWN0aW9uIHZhY2FuY3ktYW5hbHlzaXMtY2FyZFwiPlxyXG4gICAgICA8IS0tICNyZWdpb24gU2VjdGlvbkhlYWRlciAtLT5cclxuICAgICAgPGhlYWRlciBjbGFzcz1cInZhY2FuY3ktc2VjdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidmFjYW5jeS1zZWN0aW9uLXRpdGxlLWdyb3VwXCI+XHJcbiAgICAgICAgICA8aDIgY2xhc3M9XCJ2YWNhbmN5LXNlY3Rpb24tdGl0bGVcIj5BbsOhbGlzZSBwb3IgVmFnYTwvaDI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhY2FuY3ktc2VjdGlvbi1zdWJ0aXRsZVwiICpuZ0lmPVwic2VsZWN0ZWREdXR5XCI+e3sgdmFjYW5jeVNlY3Rpb25TdWJ0aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFjYW5jeS1zZWN0aW9uLXN1YnRpdGxlXCIgKm5nSWY9XCIhc2VsZWN0ZWREdXR5XCI+XHJcbiAgICAgICAgICAgIHt7IGlzUHVibGlzaFplcm9TdGF0ZSA/ICdOZW5odW1hIGNhbmRpZGF0dXJhIHJlZ2lzdHJhZGEnIDogJ05lbmh1bWEgdmFnYSBhdGl2YSBubyBtb21lbnRvJyB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidmFjYW5jeS1kcm9wZG93bi13cmFwcGVyXCIgKm5nSWY9XCJ2YWNhbmNpZXNBbmFseXNpcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhY2FuY3ktZHJvcGRvd24tbGFiZWxcIj5Fc2NvbGhhIGEgdmFnYTo8L3NwYW4+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZhY2FuY3ktZHJvcGRvd24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInZhY2FuY3ktZHJvcGRvd24tYnRuXCJcclxuICAgICAgICAgICAgICBbY2xhc3MudmFjYW5jeS1kcm9wZG93bi1idG4tLW9wZW5dPVwiaXNEdXR5RHJvcGRvd25PcGVuXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHV0eURyb3Bkb3duKClcIlxyXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNEdXR5RHJvcGRvd25PcGVuXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFjYW5jeS1kcm9wZG93bi1idG4tdGV4dFwiPnt7IHNlbGVjdGVkRHV0eT8udGl0bGUgfHwgJ1NlbGVjaW9uZSB1bWEgdmFnYScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGNhcmVvbi1kYXNoYm9hcmQtaWNvbiBuYW1lPVwiY2hldnJvbi1kb3duXCIgW3JvdGF0ZWRdPVwiaXNEdXR5RHJvcGRvd25PcGVuXCIgY2xhc3M9XCJ2YWNhbmN5LWRyb3Bkb3duLWJ0bi1pY29uXCI+PC9jYXJlb24tZGFzaGJvYXJkLWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBCYWNrZHJvcCBwYXJhIGZlY2hhciBkcm9wZG93biBhbyBjbGljYXIgZm9yYSAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRHV0eURyb3Bkb3duT3BlblwiIGNsYXNzPVwidmFjYW5jeS1kcm9wZG93bi1iYWNrZHJvcFwiIChjbGljayk9XCJjbG9zZUR1dHlEcm9wZG93bigpXCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE1lbnUgZmx1dHVhbnRlIGRvIGRyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNEdXR5RHJvcGRvd25PcGVuXCIgY2xhc3M9XCJ2YWNhbmN5LWRyb3Bkb3duLW1lbnVcIiByb2xlPVwibWVudVwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkdXR5IG9mIHZhY2FuY2llc0FuYWx5c2lzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidmFjYW5jeS1kcm9wZG93bi1pdGVtXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy52YWNhbmN5LWRyb3Bkb3duLWl0ZW0tLXNlbGVjdGVkXT1cImR1dHkuZHV0eUlkID09PSBzZWxlY3RlZER1dHk/LmR1dHlJZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RHV0eShkdXR5KVwiXHJcbiAgICAgICAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkdXR5LXJhZGlvLW91dGVyXCIgW2NsYXNzLmR1dHktcmFkaW8tb3V0ZXItLWNoZWNrZWRdPVwiZHV0eS5kdXR5SWQgPT09IHNlbGVjdGVkRHV0eT8uZHV0eUlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkdXR5LXJhZGlvLWlubmVyXCIgKm5nSWY9XCJkdXR5LmR1dHlJZCA9PT0gc2VsZWN0ZWREdXR5Py5kdXR5SWRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkdXR5LWl0ZW0tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImR1dHktaXRlbS10aXRsZVwiPnt7IGR1dHkudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHV0eS1pdGVtLXN1YnRpdGxlXCI+e3sgZHV0eS5zdWJ0aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2hlYWRlcj5cclxuICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkRHV0eTsgZWxzZSBub0FjdGl2ZUR1dGllc1wiPlxyXG4gICAgICAgIDwhLS0gI3JlZ2lvbiBUaW1lbGluZUNoYXJ0IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2YWNhbmN5LXRpbWVsaW5lLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxjYXJlb24tdGltZWxpbmUtYmFyLWNoYXJ0XHJcbiAgICAgICAgICAgIFtkYXRhXT1cInNlbGVjdGVkRHV0eVRpbWVsaW5lUG9pbnRzXCJcclxuICAgICAgICAgICAgW2F1dG9CYXJXaWR0aF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtiYXJXaWR0aF09XCI2OFwiXHJcbiAgICAgICAgICAgIChpdGVtU2VsZWN0ZWQpPVwib25UaW1lbGluZVBvaW50U2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+PC9jYXJlb24tdGltZWxpbmUtYmFyLWNoYXJ0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICAgICAgPCEtLSAjcmVnaW9uIEJvdHRvbU1ldHJpY3NSb3cgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZhY2FuY3ktYm90dG9tLWdyaWRcIj5cclxuICAgICAgICAgIDwhLS0gQ2FyZCBUYXhhIGRlIENvbnZlcnPDo28gLS0+XHJcbiAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cInZhY2FuY3ktbWV0cmljLWNhcmQgdmFjYW5jeS1tZXRyaWMtY2FyZC0tZG9udXRcIj5cclxuICAgICAgICAgICAgPGNhcmVvbi1kb251dC1jaGFydFxyXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInVGF4YSBkZSBjb252ZXJzw6NvJ1wiXHJcbiAgICAgICAgICAgICAgW3RpdGxlQm9sZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbdGl0bGVTaXplXT1cIjE0XCJcclxuICAgICAgICAgICAgICBbdGl0bGVQYWRkaW5nXT1cIjZcIlxyXG4gICAgICAgICAgICAgIFtkYXRhXT1cInNlbGVjdGVkRHV0eURvbnV0SXRlbXNcIlxyXG4gICAgICAgICAgICAgIFtjZW50ZXJUZXh0XT1cInNlbGVjdGVkRHV0eUNvbnZlcnNpb25SYXRlVGV4dFwiXHJcbiAgICAgICAgICAgICAgW3NpemVdPVwiOTZcIlxyXG4gICAgICAgICAgICAgIFtzdHJva2VXaWR0aF09XCIxOFwiXHJcbiAgICAgICAgICAgID48L2NhcmVvbi1kb251dC1jaGFydD5cclxuICAgICAgICAgIDwvYXJ0aWNsZT5cclxuXHJcbiAgICAgICAgICA8IS0tIENhcmQgVmlzdWFsaXphw6fDtWVzIOKGkiBDYW5kaWRhdHVyYXMgLS0+XHJcbiAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cInZhY2FuY3ktbWV0cmljLWNhcmQgdmFjYW5jeS1tZXRyaWMtY2FyZC0tZnVubmVsXCI+XHJcbiAgICAgICAgICAgIDxjYXJlb24tZnVubmVsLWJhclxyXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInVmlzdWFsaXphw6fDtWVzIOKGkiBDYW5kaWRhdHVyYXMnXCJcclxuICAgICAgICAgICAgICBbdGl0bGVCb2xkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFt0aXRsZVNpemVdPVwiMTRcIlxyXG4gICAgICAgICAgICAgIFt0aXRsZVBhZGRpbmddPVwiNlwiXHJcbiAgICAgICAgICAgICAgW2RhdGFdPVwic2VsZWN0ZWREdXR5RnVubmVsSXRlbXNcIlxyXG4gICAgICAgICAgICAgIFttaW5CYXJXaWR0aF09XCIyNjBcIlxyXG4gICAgICAgICAgICA+PC9jYXJlb24tZnVubmVsLWJhcj5cclxuICAgICAgICAgIDwvYXJ0aWNsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcblxyXG4gICAgICAgIDwhLS0gI3JlZ2lvbiBTYWxhcnlBbmRTdXBwb3J0Um93IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2YWNhbmN5LXNhbGFyeS1zdXBwb3J0LWdyaWRcIiAqbmdJZj1cInNlbGVjdGVkRHV0eVNhbGFyeUNvbXBhcmlzb25cIj5cclxuICAgICAgICAgIDwhLS0gQ2FyZCBNw6lkaWEgU2FsYXJpYWwgLS0+XHJcbiAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cInZhY2FuY3ktc2FsYXJ5LWNhcmRcIj5cclxuICAgICAgICAgICAgPGhlYWRlciBjbGFzcz1cInNhbGFyeS1jYXJkLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gQ29sdW5hIDE6IFNldSB2YWxvciAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2FsYXJ5LW1ldHJpYy1jb2xcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2FsYXJ5LW1ldHJpYy1sYWJlbFwiPlNldSB2YWxvcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FsYXJ5LW1ldHJpYy12YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zYWxhcnktbWV0cmljLXZhbHVlLS1ub3QtaW5mb3JtZWRdPVwic2FsYXJ5U3RhdHVzID09PSBEdXR5U2FsYXJ5U3RhdHVzLk5vdEluZm9ybWVkXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNhbGFyeS1tZXRyaWMtdmFsdWUtLWluc3VmZmljaWVudF09XCJzYWxhcnlTdGF0dXMgPT09IER1dHlTYWxhcnlTdGF0dXMuSW5zdWZmaWNpZW50RGF0YVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdHRlZFlvdXJTYWxhcnkgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBEaXZpc29yIHZlcnRpY2FsIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYWxhcnktbWV0cmljLWRpdmlkZXJcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBDb2x1bmEgMjogTcOpZGlhIGRhIHJlZ2nDo28gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhbGFyeS1tZXRyaWMtY29sXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNhbGFyeS1tZXRyaWMtbGFiZWxcIj5Nw6lkaWEgZGEgcmVnacOjbzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FsYXJ5LW1ldHJpYy12YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zYWxhcnktbWV0cmljLXZhbHVlLS1vcmFuZ2VdPVwic2FsYXJ5U3RhdHVzID09PSBEdXR5U2FsYXJ5U3RhdHVzLkJlbG93TWFya2V0XCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNhbGFyeS1tZXRyaWMtdmFsdWUtLWJsdWVdPVwic2FsYXJ5U3RhdHVzID09PSBEdXR5U2FsYXJ5U3RhdHVzLkF0TWFya2V0XCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNhbGFyeS1tZXRyaWMtdmFsdWUtLW5hdnldPVwic2FsYXJ5U3RhdHVzID09PSBEdXR5U2FsYXJ5U3RhdHVzLkFib3ZlTWFya2V0XCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNhbGFyeS1tZXRyaWMtdmFsdWUtLWluc3VmZmljaWVudF09XCJzYWxhcnlTdGF0dXMgPT09IER1dHlTYWxhcnlTdGF0dXMuSW5zdWZmaWNpZW50RGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zYWxhcnktbWV0cmljLXZhbHVlLS1tdXRlZF09XCJzYWxhcnlTdGF0dXMgPT09IER1dHlTYWxhcnlTdGF0dXMuTm90SW5mb3JtZWRcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICB7eyBmb3JtYXR0ZWRSZWdpb25hbEF2ZXJhZ2UgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBCYWRnZSBEaW7Dom1pY28gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYWxhcnktYmFkZ2VcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2FsYXJ5QmFkZ2VDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkRHV0eVNhbGFyeUNvbXBhcmlzb24uYmFkZ2VUZXh0XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZER1dHlTYWxhcnlDb21wYXJpc29uLmJhZGdlVGV4dCB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2hlYWRlcj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTGluaGEvQ29ycG8gdGV4dHVhbCBjb20gRGVzdGFxdWUgZSBFeHBsaWNhw6fDo28gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYWxhcnktY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPGg0IGNsYXNzPVwic2FsYXJ5LWhpZ2hsaWdodC10aXRsZVwiIFtuZ0NsYXNzXT1cInNhbGFyeVRpdGxlQ29sb3JDbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWREdXR5U2FsYXJ5Q29tcGFyaXNvbi5oaWdobGlnaHRUaXRsZSB9fVxyXG4gICAgICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJzYWxhcnktZGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkRHV0eVNhbGFyeUNvbXBhcmlzb24uZGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcnRpY2xlPlxyXG5cclxuICAgICAgICAgIDwhLS0gQ2FyZCBkZSBTdXBvcnRlOiBEw7p2aWRhcyBzb2JyZSBlc3NlcyBkYWRvcz8gLS0+XHJcbiAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cInZhY2FuY3ktc3VwcG9ydC1jYXJkXCI+XHJcbiAgICAgICAgICAgIDxoNCBjbGFzcz1cInN1cHBvcnQtY2FyZC10aXRsZVwiPkFpbmRhIGNvbSBkw7p2aWRhcyBzb2JyZSBlc3NlcyBkYWRvcz88L2g0PlxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cInN1cHBvcnQtY2FyZC1zdWJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgIFNlIGRlcG9pcyBkZSB2ZXIgb3MgZ3LDoWZpY29zIHZvY8OqIGZpY291IGNvbSBwZXJndW50YXMgc2VtIHJlc3Bvc3RhLCBmYWxlIGNvbSBhIG5vc3NhIGVxdWlwZS5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4tc3VwcG9ydC1jb25zdWx0YW50XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbnN1bHRhbnRXaGF0c0FwcCgnRMO6dmlkYXMgc29icmUgZXNzZXMgZGFkb3MnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBGYWxlIGNvbSB1bSBjb25zdWx0b3JcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2FydGljbGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9BY3RpdmVEdXRpZXM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInplcm8tc3RhdGUtYmFubmVyXCIgKm5nSWY9XCJpc1B1Ymxpc2haZXJvU3RhdGU7IGVsc2UgYmFzaWNWYWNhbmN5WmVyb1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInplcm8tc3RhdGUtYmFubmVyLWxlZnRcIj5cclxuICAgICAgICAgICAgPGNhcmVvbi1kYXNoYm9hcmQtaWNvbiBuYW1lPVwiaW5mb1wiIGNsYXNzPVwiemVyby1pbmZvLWljb25cIj48L2NhcmVvbi1kYXNoYm9hcmQtaWNvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInplcm8tc3RhdGUtYmFubmVyLXRleHRzXCI+XHJcbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiemVyby1zdGF0ZS1iYW5uZXItdGl0bGVcIj5OZW5odW1hIHZhZ2EgcGFyYSBhbmFsaXNhcjwvaDM+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ6ZXJvLXN0YXRlLWJhbm5lci1zdWJ0aXRsZVwiPkNhZGFzdHJlIHVtYSB2YWdhIHBhcmEgY29tZcOnYXIgYSBhY29tcGFuaGFyIG8gZGVzZW1wZW5obyBkZWxhIGFxdWkuPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4temVyby1wdWJsaXNoXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUHVibGlzaER1dHkoJ0Fuw6FsaXNlIHBvciBWYWdhJylcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBQdWJsaWNhciBWYWdhXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNiYXNpY1ZhY2FuY3laZXJvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLWVtcHR5LXN0YXRlIGJhc2ljLWVtcHR5LXN0YXRlLS12YWNhbmN5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1lbXB0eS1pY29uLXdyYXBcIj5cclxuICAgICAgICAgICAgICA8Y2FyZW9uLWRhc2hib2FyZC1pY29uIG5hbWU9XCJpbmZvXCIgY2xhc3M9XCJiYXNpYy1lbXB0eS1pY29uXCI+PC9jYXJlb24tZGFzaGJvYXJkLWljb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJiYXNpYy1lbXB0eS10aXRsZVwiPk5lbmh1bWEgdmFnYSBwYXJhIGFuYWxpc2FyPC9oMz5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJiYXNpYy1lbXB0eS10ZXh0XCI+TmVuaHVtYSB2YWdhIGF0aXZhIG5vIG1vbWVudG8gcGFyYSBhbsOhbGlzZS48L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgIDwhLS0gI3JlZ2lvbiBBcHBsaWNhdGlvbnNQZXJWYWNhbmN5U2VjdGlvbiAtLT5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwiYXBwbGljYXRpb25zLXBlci12YWNhbmN5LXNlY3Rpb25cIj5cclxuICAgICAgPGhlYWRlciBjbGFzcz1cImFwcGxpY2F0aW9ucy1zZWN0aW9uLWhlYWRlclwiPlxyXG4gICAgICAgIDxoMiBjbGFzcz1cImFwcGxpY2F0aW9ucy1zZWN0aW9uLXRpdGxlXCI+Q2FuZGlkYXR1cmFzIHBvciBWYWdhPC9oMj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImFwcGxpY2F0aW9ucy1zZWN0aW9uLXN1YnRpdGxlXCIgKm5nSWY9XCJoYXNDb21wYXJpc29uRHV0aWVzXCI+XHJcbiAgICAgICAgICB7eyBjb21wYXJpc29uU3VidGl0bGUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHBsaWNhdGlvbnMtc2VjdGlvbi1zdWJ0aXRsZVwiICpuZ0lmPVwiIWhhc0NvbXBhcmlzb25EdXRpZXNcIj5cclxuICAgICAgICAgIHt7IGlzUHVibGlzaFplcm9TdGF0ZSA/ICcwIGNhbmRpZGF0dXJhcyBubyB0b3RhbCwgbmVuaHVtYSB2YWdhIGF0aXZhJyA6ICdOZW5odW1hIHZhZ2EgYXRpdmEgbm8gbW9tZW50bycgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvaGVhZGVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImFwcGxpY2F0aW9ucy1jaGFydC13cmFwcGVyXCIgKm5nSWY9XCJoYXNDb21wYXJpc29uRHV0aWVzOyBlbHNlIG5vQ29tcGFyaXNvbkR1dGllc1wiPlxyXG4gICAgICAgIDxjYXJlb24tY29tcGFyaXNvbi1iYXItY2hhcnRcclxuICAgICAgICAgIFtkYXRhXT1cImNvbXBhcmlzb25JdGVtc1wiXHJcbiAgICAgICAgICBbYXV0b0JhcldpZHRoXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtiYXJXaWR0aF09XCI3NVwiXHJcbiAgICAgICAgICBbaXRlbVNsb3RXaWR0aF09XCIxMDBcIlxyXG4gICAgICAgICAgW2JhckNvbG9yXT1cIicjM0I4MkY2J1wiXHJcbiAgICAgICAgICBbemVyb0NvbG9yXT1cIicjRUY0NDQ0J1wiXHJcbiAgICAgICAgICBbdHJlbmRMaW5lQ29sb3JdPVwiJyMxRTI5M0InXCJcclxuICAgICAgICAgIFtkb3RDb2xvcl09XCInIzFFMjkzQidcIlxyXG4gICAgICAgICAgW3RleHRDb2xvcl09XCInIzY0NzQ4QidcIlxyXG4gICAgICAgICAgKGl0ZW1TZWxlY3RlZCk9XCJvbkNoYXJ0SXRlbVNlbGVjdGVkKCRldmVudCwgJ0NhbmRpZGF0dXJhcyBwb3IgVmFnYScpXCJcclxuICAgICAgICA+PC9jYXJlb24tY29tcGFyaXNvbi1iYXItY2hhcnQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNub0NvbXBhcmlzb25EdXRpZXM+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInplcm8tc3RhdGUtYmFubmVyXCIgKm5nSWY9XCJpc1B1Ymxpc2haZXJvU3RhdGU7IGVsc2UgYmFzaWNDb21wYXJpc29uWmVyb1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInplcm8tc3RhdGUtYmFubmVyLWxlZnRcIj5cclxuICAgICAgICAgICAgPGNhcmVvbi1kYXNoYm9hcmQtaWNvbiBuYW1lPVwiaW5mb1wiIGNsYXNzPVwiemVyby1pbmZvLWljb25cIj48L2NhcmVvbi1kYXNoYm9hcmQtaWNvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInplcm8tc3RhdGUtYmFubmVyLXRleHRzXCI+XHJcbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiemVyby1zdGF0ZS1iYW5uZXItdGl0bGVcIj5OZW5odW1hIGNhbmRpZGF0dXJhIHJlZ2lzdHJhZGE8L2gzPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiemVyby1zdGF0ZS1iYW5uZXItc3VidGl0bGVcIj5TZW0gdmFnYXMgZW0gYWJlcnRvLCBhaW5kYSBuw6NvIGjDoSBjYW5kaWRhdHVyYXMgcGFyYSBtb3N0cmFyLjwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLXplcm8tcHVibGlzaFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblB1Ymxpc2hEdXR5KCdDYW5kaWRhdHVyYXMgcG9yIFZhZ2EnKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFB1YmxpY2FyIFZhZ2FcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2Jhc2ljQ29tcGFyaXNvblplcm8+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtZW1wdHktc3RhdGUgYmFzaWMtZW1wdHktc3RhdGUtLWNvbXBhcmlzb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLWVtcHR5LWljb24td3JhcFwiPlxyXG4gICAgICAgICAgICAgIDxjYXJlb24tZGFzaGJvYXJkLWljb24gbmFtZT1cImluZm9cIiBjbGFzcz1cImJhc2ljLWVtcHR5LWljb25cIj48L2NhcmVvbi1kYXNoYm9hcmQtaWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImJhc2ljLWVtcHR5LXRpdGxlXCI+TmVuaHVtYSBjYW5kaWRhdHVyYSByZWdpc3RyYWRhPC9oMz5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJiYXNpYy1lbXB0eS10ZXh0XCI+TmVuaHVtYSB2YWdhIGF0aXZhIG5vIG1vbWVudG8gcGFyYSBhbsOhbGlzZS48L3A+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gIDwvbWFpbj5cclxuICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbjwvZGl2PlxyXG4iXX0=