@sachin9822/reports-lib 0.0.143 → 0.0.145

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.
@@ -1,25 +1,25 @@
1
1
  import { Component } from '@angular/core';
2
2
  // import { Component, ElementRef, HostListener, ViewChild } from '@angular/core';
3
- import { FormArray, Validators } from '@angular/forms';
3
+ import { FormArray } from '@angular/forms';
4
4
  import * as XLSX from 'xlsx';
5
5
  import { saveAs } from 'file-saver';
6
6
  import * as ExcelJS from 'exceljs';
7
7
  import * as FileSaver from 'file-saver';
8
8
  import { themeAlpine } from '@ag-grid-community/theming';
9
9
  import jsPDF from 'jspdf';
10
+ import 'jspdf-autotable';
10
11
  import { formatDate } from '@angular/common';
11
- import { BranchActivitySendReportRequestDomainModel } from '../../models/branch-activity-report/branch-activity-send-report-request-domain-model';
12
- import { forkJoin, of } from 'rxjs';
13
- import { catchError } from 'rxjs/operators';
14
12
  import { ComponentLoadingStates } from '../../models/component-loading-states';
15
13
  import * as i0 from "@angular/core";
16
14
  import * as i1 from "@angular/forms";
17
15
  import * as i2 from "../../services/report.service";
18
16
  import * as i3 from "ag-grid-angular";
19
17
  import * as i4 from "@angular/common";
20
- import * as i5 from "@ng-bootstrap/ng-bootstrap";
21
- import * as i6 from "@ng-select/ng-select";
22
- import * as i7 from "../../shared/loader/loader.component";
18
+ import * as i5 from "../../shared/page-size-selector/page-size-selector.component";
19
+ import * as i6 from "@ng-bootstrap/ng-bootstrap";
20
+ import * as i7 from "@ng-select/ng-select";
21
+ import * as i8 from "../../shared/loader/loader.component";
22
+ import * as i9 from "../../shared/search-filter/search-filter.component";
23
23
  export class BranchActivitySendReportComponent {
24
24
  constructor(formBuilder, reportService, ngZone) {
25
25
  this.formBuilder = formBuilder;
@@ -36,6 +36,7 @@ export class BranchActivitySendReportComponent {
36
36
  this.showRange = false;
37
37
  this.isAgentSelected = false;
38
38
  this.selectedExportOption = 'excel';
39
+ this.gridApis = [];
39
40
  this.user = "kaushik.kulsange@xpressmoney.tech";
40
41
  this.myStatus = new FormArray([]);
41
42
  this.status = ['All'];
@@ -44,6 +45,7 @@ export class BranchActivitySendReportComponent {
44
45
  this.ComponentLoadingState = ComponentLoadingStates;
45
46
  this.loadingState = ComponentLoadingStates.Loading;
46
47
  this.exportFormats = [{ formatName: "Excel", code: 'excel' }, { formatName: "PDF", code: 'pdf' }, { formatName: "CSV", code: 'csv' }];
48
+ this.ReportName = "Branch Activity Send";
47
49
  // flags
48
50
  this.showStatusDropdown = false;
49
51
  this.showClients = false;
@@ -92,6 +94,7 @@ export class BranchActivitySendReportComponent {
92
94
  });
93
95
  }
94
96
  ngOnInit() {
97
+ this.loadingState = ComponentLoadingStates.Complete;
95
98
  // Check if User is falcon user or fossilUser
96
99
  if (sessionStorage.getItem('fossilusername')) {
97
100
  this.sysUserId = sessionStorage.getItem('fossilusername');
@@ -102,119 +105,10 @@ export class BranchActivitySendReportComponent {
102
105
  this.sysUserId = this.sysUserId.replace(/^["'](.*)["']$/, '$1');
103
106
  this.user = this.sysUserId;
104
107
  console.log("System User Id : " + this.sysUserId);
105
- this.initForm();
106
- this.reportService.getCompanyConfig().subscribe(data => {
107
- this.params = data;
108
- console.log(this.params);
109
- });
110
- forkJoin({
111
- params: this.reportService.getParams().pipe(catchError(err => {
112
- console.error('Error loading params', err);
113
- return of(null);
114
- })),
115
- clients: this.reportService.getPayInAgents(this.sysUserId).pipe(catchError(err => {
116
- console.error('Error loading clients', err);
117
- return of([]);
118
- }))
119
- }).subscribe({
120
- next: ({ params, clients }) => {
121
- this.params = params;
122
- this.clients = [...clients];
123
- this.clientsData = [...clients];
124
- if (!sessionStorage.getItem('fossilusername') && this.clients?.length) {
125
- this.selectClient(this.clients[0].code);
126
- }
127
- this.loadingState = ComponentLoadingStates.Complete;
128
- },
129
- error: err => {
130
- console.error('Unexpected forkJoin error', err);
131
- this.loadingState = ComponentLoadingStates.Error;
132
- },
133
- complete: () => {
134
- this.loadingState = ComponentLoadingStates.Complete;
135
- this.onClientSelected();
136
- }
137
- });
138
- this.subscribeToDateChanges();
139
- this.subscribeToClientChange();
140
- //Convert Logo to base64
141
- this.loadImageAsBase64('src/assets/reports-lib/images/XMCoral.png').then(base64 => {
108
+ this.loadImageAsBase64('/assets/reports-lib/assets/images/XMLogo.png').then(base64 => {
142
109
  this.logoBase64 = base64;
143
110
  });
144
111
  }
145
- initForm() {
146
- this.form = this.formBuilder.group({
147
- fromDate: [new Date().toISOString().split("T")[0], Validators.required],
148
- toDate: [{ value: new Date().toISOString().split("T")[0], disabled: false }, Validators.required],
149
- sendCountry: ['All', Validators.required],
150
- receiveCountry: ['All', Validators.required],
151
- client: [null, Validators.required],
152
- branch: [{ value: null, disabled: this.isAgentSelected }, Validators.required],
153
- product: ['All', Validators.required],
154
- receiveCurrency: ['All', Validators.required],
155
- transactionStatus: [['All'], Validators.required],
156
- selectedStatus: ['All', Validators.required]
157
- });
158
- }
159
- onSubmit() {
160
- this.showStatusDropdown = false;
161
- this.showClients = false;
162
- this.searchText = "";
163
- this.showError = false;
164
- this.showReport = false;
165
- // console.log(this.form.value)
166
- this.fromDate = this.form.controls["fromDate"].value;
167
- this.toDate = this.form.controls["toDate"].value;
168
- // Validate Form
169
- if (!this.form.valid) {
170
- this.showError = true;
171
- this.errorMessage = `Please fill all the required fields`;
172
- return;
173
- }
174
- // Check if fromDate is greater than toDate
175
- if (new Date(this.fromDate) > new Date(this.toDate)) {
176
- this.showError = true;
177
- this.errorMessage = `From Date ${this.fromDate} can not be greater than To Date ${this.toDate}`;
178
- return;
179
- }
180
- // Calculate the difference in days
181
- const from = new Date(this.fromDate);
182
- const to = new Date(this.toDate);
183
- const differenceInDays = Math.floor((to?.getTime() - from?.getTime()) / (1000 * 60 * 60 * 24));
184
- // Check if the difference between the two dates exceeds 31 days (1 months approx)
185
- if (differenceInDays > 31) {
186
- this.showError = true;
187
- this.errorMessage = `From Date ${this.fromDate} and To Date ${this.toDate} should have difference of max 1 month`;
188
- return;
189
- }
190
- this.showError = false;
191
- const d = new Date().toISOString();
192
- this.reportDate = new Date().toISOString();
193
- this.reportDate = formatDate(this.reportDate, 'dd/MM/yyyy hh:mm a', 'en-US');
194
- const modal = this.mapFormToModel();
195
- modal.transactionStatus = this.form.controls["selectedStatus"].value;
196
- console.log(modal);
197
- this.showMessage = true;
198
- this.loadingState = ComponentLoadingStates.Loading;
199
- this.reportService.getBranchActivityReport(modal).subscribe({
200
- next: (data) => {
201
- console.log(data);
202
- this.dataMap = JSON.parse(JSON.stringify(data));
203
- this.filteredData = data;
204
- this.noDataFound = Object.keys(this.filteredData).length == 0 ? true : false;
205
- this.proxyData = structuredClone(data);
206
- this.paginationArray = new Array(Object.keys(this.filteredData).length).fill(15);
207
- this.showMessage = Object.keys(this.filteredData).length == 0 ? true : false;
208
- this.showReport = true;
209
- },
210
- error: (err) => {
211
- this.loadingState = ComponentLoadingStates.Complete;
212
- },
213
- complete: () => {
214
- this.loadingState = ComponentLoadingStates.Complete;
215
- }
216
- });
217
- }
218
112
  onSearch() {
219
113
  console.log(this.searchText);
220
114
  if (this.searchText.trim().length === 0) {
@@ -232,51 +126,11 @@ export class BranchActivitySendReportComponent {
232
126
  }
233
127
  this.filteredData;
234
128
  }
235
- onAgentSelected(code) {
236
- if (this.form.controls['client'].value === null) {
237
- return;
238
- }
239
- this.form.controls['branch'].patchValue(null);
240
- this.loadingState = ComponentLoadingStates.Loading;
241
- this.reportService.getBranchByAgent(this.sysUserId, code).subscribe({
242
- next: (data) => {
243
- this.clientBranches = data;
244
- },
245
- error: (err) => {
246
- this.loadingState = ComponentLoadingStates.Complete;
247
- },
248
- complete: () => {
249
- if (sessionStorage.getItem("ezremitusername")) {
250
- const index = this.clientBranches.findIndex((branch) => branch.branchCode === "All");
251
- if (index == -1) {
252
- this.form.controls['branch'].setValue(this.clientBranches[0].branchCode);
253
- }
254
- else {
255
- this.form.controls['branch'].setValue('All');
256
- }
257
- }
258
- this.loadingState = ComponentLoadingStates.Complete;
259
- }
260
- });
261
- }
262
- mapFormToModel() {
263
- const data = new BranchActivitySendReportRequestDomainModel(this.form.getRawValue());
264
- data.startDate = this.form.controls['fromDate'].value;
265
- data.endDate = this.form.controls['toDate'].value;
266
- data.sendCountryCode = this.form.controls['sendCountry'].value;
267
- data.recvCountryCode = this.form.controls['receiveCountry'].value;
268
- data.businessPartnerCode = this.form.controls['client'].value;
269
- data.transactionStatus = this.form.controls['transactionStatus'].value;
270
- data.transactionType = this.form.controls['product'].value;
271
- data.branchCode = this.form.controls['branch'].value;
272
- data.payoutCurrency = this.form.controls['receiveCurrency'].value;
273
- data.companyCode = "BH";
274
- return data;
275
- }
276
- onGridReady(params) {
129
+ onGridReady(params, id) {
277
130
  params.api.sizeColumnsToFit();
278
131
  this.gridAPi = params.api;
279
132
  this.gridColumnApi = params.columnApi;
133
+ this.gridApis[id] = params.api;
280
134
  }
281
135
  onGridSizeChanged(params) {
282
136
  params.api.sizeColumnsToFit();
@@ -292,10 +146,10 @@ export class BranchActivitySendReportComponent {
292
146
  }
293
147
  async handleExport() {
294
148
  const data = [];
295
- this.gridAPi.forEachNode(node => data.push(node.data));
296
149
  if (Object.keys(this.filteredData).length == 0) {
297
150
  return;
298
151
  }
152
+ this.gridAPi.forEachNode(node => data.push(node.data));
299
153
  switch (this.selectedExportOption) {
300
154
  case 'excel':
301
155
  this.exportExcel(data);
@@ -590,179 +444,6 @@ export class BranchActivitySendReportComponent {
590
444
  const blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });
591
445
  saveAs(blob, 'Branch-Activity-Send-Report.csv');
592
446
  }
593
- // showStatus(event: Event) {
594
- // this.ngZone.run(() => {
595
- // this.showStatusDropdown = !this.showStatusDropdown;
596
- // });
597
- // }
598
- // selectStatus(event: Event) {
599
- // const target = event.target as HTMLInputElement;
600
- // this.status = [];
601
- // // this.status = this.form.controls["selectedStatus"].value.split(",");
602
- // this.selectAll = false;
603
- // if (target.checked) {
604
- // this.myStatus.push(new FormControl(target.value));
605
- // console.log(this.myStatus);
606
- // } else {
607
- // const index = this.myStatus.controls
608
- // .findIndex(ctrl => ctrl.value === target.value);
609
- // if (index !== -1) {
610
- // this.myStatus.removeAt(index);
611
- // }
612
- // }
613
- // for (let i = 0; i < this.myStatus.controls.length; i++) {
614
- // this.status.push(this.myStatus.controls[i].value);
615
- // }
616
- // console.log(this.myStatus);
617
- // this.form.setControl('transactionStatus', new FormArray([new FormControl(target.value)]));
618
- // this.form.controls["selectedStatus"].setValue(this.status.join(","));
619
- // console.log(this.form.controls["selectedStatus"].value);
620
- // }
621
- // selectAllStatus(event: Event) {
622
- // const target = event.target as HTMLInputElement;
623
- // this.status = [];
624
- // this.selectAll = !this.selectAll;
625
- // if (target.checked) {
626
- // for (let s of this.params?.transactionStatusTypes) {
627
- // this.myStatus.push(new FormControl(s.transactionStatus));
628
- // this.status.push(s.transactionStatus);
629
- // }
630
- // } else {
631
- // this.myStatus.clear();
632
- // this.status = []
633
- // }
634
- // this.form.controls["selectedStatus"].setValue(this.status.join(","));
635
- // console.log(this.form.controls["selectedStatus"].value);
636
- // }
637
- //Currency Dropdown
638
- // toggleCurrencyDropdown() {
639
- // this.showCurrency = !this.showCurrency;
640
- // }
641
- // selectCurrency(currencyCode: string) {
642
- // this.form.controls["receiveCurrency"].setValue(currencyCode);
643
- // this.showCurrency = false;
644
- // }
645
- // getSelectedCurrencyDisplay(): string {
646
- // const currency = this.form.controls["receiveCurrency"].value;
647
- // if (currency && this.params?.currencies) {
648
- // return this.params.currencies[this.params.currencies.findIndex(c => c.currencyCode == currency)].currency;
649
- // } else {
650
- // this.form.controls["receiveCurrency"].setValue("All");
651
- // return "All";
652
- // }
653
- // }
654
- //Product Dropdown
655
- // toggleProductDropdown() {
656
- // this.showProduct = !this.showProduct;
657
- // }
658
- // selectProduct(productCode: string) {
659
- // this.form.controls["product"].setValue(productCode);
660
- // this.showProduct = false;
661
- // }
662
- // getSelectedProductDisplay(): string {
663
- // const product = this.form.controls["product"].value;
664
- // if (product && this.params?.transactionProductTypes) {
665
- // return this.params.transactionProductTypes[this.params.transactionProductTypes.findIndex(p => p.productCode == product)].name;
666
- // } else {
667
- // this.form.controls["product"].setValue("All");
668
- // return "All";
669
- // }
670
- // }
671
- //SendCountry Dropdown
672
- // toggleSendCountryDropdown() {
673
- // this.showSendCountry = !this.showSendCountry;
674
- // }
675
- // selectSendCountry(countryCode: any) {
676
- // this.form.controls["sendCountry"].setValue(countryCode);
677
- // this.showSendCountry = false;
678
- // }
679
- // getSelectedSendCountryDisplay(): string {
680
- // const country = this.form.controls["sendCountry"].value;
681
- // if (country && this.params?.countries) {
682
- // return this.params.countries[this.params.countries.findIndex(c => c.countryCode == country)].country;
683
- // } else {
684
- // this.form.controls["sendCountry"].setValue("All");
685
- // return "All";
686
- // }
687
- // }
688
- //ReceiveCountry Dropdown
689
- // toggleReceiveCountry() {
690
- // this.showReceiveCountry = !this.showReceiveCountry;
691
- // }
692
- // selectReceiveCountry(countryCode: string) {
693
- // this.form.controls["receiveCountry"].setValue(countryCode);
694
- // this.showReceiveCountry = false;
695
- // }
696
- // getSelectedReceiveCountryDisplay(): string {
697
- // const country = this.form.controls["receiveCountry"].value;
698
- // if (country && this.params?.countries) {
699
- // return this.params.countries[this.params.countries.findIndex(c => c.countryCode == country)].country;
700
- // } else {
701
- // this.form.controls["receiveCountry"].setValue("All");
702
- // return "All";
703
- // }
704
- // }
705
- //Clients Dropdown
706
- // toggleClients() {
707
- // this.showClients = !this.showClients;
708
- // }
709
- selectClient(client) {
710
- this.form.controls["client"].setValue(client);
711
- this.form.controls["branch"].setValue(null);
712
- this.onAgentSelected(client);
713
- this.showClients = false;
714
- this.clientSelected = true;
715
- }
716
- // getSelectedClient(): string {
717
- // let client = this.form.controls["client"].value;
718
- // // if (sessionStorage.getItem('fossilusername')) {
719
- // // } else {
720
- // // if(!client && this.clients){
721
- // // this.selectClient(this.clients[0].code);
722
- // // }
723
- // // }
724
- // if (client) {
725
- // return this.clients[this.clients.findIndex(c => c.code == client)].agent;
726
- // } else {
727
- // return "Select Client";
728
- // }
729
- // }
730
- //Branch Dropdown
731
- // toggleBranch() {
732
- // this.showBranch = !this.showBranch;
733
- // }
734
- // selectBranch(branchCode: any) {
735
- // this.form.controls["branch"].setValue(branchCode);
736
- // this.showBranch = false;
737
- // }
738
- // getSelectedBranch(): string {
739
- // const branch = this.form.controls["branch"].value;
740
- // if (branch && this.clientBranches) {
741
- // return this.clientBranches[this.clientBranches.findIndex(b => b.branchCode == branch)].businessPartnerBranch;
742
- // } else {
743
- // return "Select Branch";
744
- // }
745
- // }
746
- //Status Dropdown
747
- // toggleStatusDropdown() {
748
- // this.showStatusDropdown = !this.showStatusDropdown;
749
- // }
750
- // clearError() {
751
- // this.showError = false;
752
- // }
753
- // clearMessage() {
754
- // this.showMessage = false;
755
- // }
756
- // dateChange(type: string) {
757
- // if (type === "fromDate") {
758
- // this.disableToDate = true;
759
- // this.form.controls["fromDate"].enable();
760
- // // this.form.controls["fromDate"].setValue(this.formatDate(this.form.controls["fromDate"].value));
761
- // }
762
- // if (type === "toDate") {
763
- // // this.form.controls["toDate"].setValue(this.formatDate(this.form.controls["toDate"].value));
764
- // }
765
- // }
766
447
  formatDate(params) {
767
448
  return formatDate(new Date(params.value), 'dd/MM/yyyy', 'en-US');
768
449
  }
@@ -781,106 +462,51 @@ export class BranchActivitySendReportComponent {
781
462
  maximumFractionDigits: 3
782
463
  });
783
464
  }
784
- //Date Picler
785
- // onDateChangeFromDate(event: Event) {
786
- // const input = event.target as HTMLInputElement;
787
- // const selectedDate = input.value;
788
- // this.form.controls["fromDate"].setValue(formatDate(new Date(selectedDate), 'dd/MM/yyyy', 'en-US'));
789
- // }
790
- // onDateChangeToDate(event: Event) {
791
- // const input = event.target as HTMLInputElement;
792
- // const selectedDate = input.value;
793
- // this.form.controls["toDate"].setValue(formatDate(new Date(selectedDate), 'dd/MM/yyyy', 'en-US'));
794
- // }
795
- // onEnterKey(event: Event) {
796
- // const keyboardEvent = event as KeyboardEvent;
797
- // keyboardEvent.preventDefault();
798
- // if (keyboardEvent.target instanceof HTMLElement) {
799
- // keyboardEvent.target.blur();
800
- // }
801
- // }
802
- // fromDateChange() {
803
- // const msPerDay = 1000 * 60 * 60 * 24;
804
- // const fd = this.form.controls["fromDate"].value;
805
- // const td = this.form.controls["toDate"].value;
806
- // const from = new Date(fd);
807
- // const to = new Date(td);
808
- // const differenceInDays = Math.floor((to?.getTime() - from?.getTime()) / (1000 * 60 * 60 * 24));
809
- // if (differenceInDays > 31) {
810
- // // Set toDate to fromDate + 31 days
811
- // const d = new Date(from.getTime() + 31 * msPerDay);
812
- // this.form.controls['toDate']?.patchValue(d);
813
- // }
814
- // }
815
- // toDateChange() {
816
- // const msPerDay = 1000 * 60 * 60 * 24;
817
- // const fd = this.form.controls["fromDate"].value;
818
- // const td = this.form.controls["toDate"].value;
819
- // const from = new Date(fd);
820
- // const to = new Date(td);
821
- // const differenceInDays = Math.floor((to?.getTime() - from?.getTime()) / (1000 * 60 * 60 * 24));
822
- // if (differenceInDays > 31) {
823
- // // Set toDate to fromDate + 31 days
824
- // const d = new Date(from.getTime() + 31 * msPerDay)
825
- // this.form.controls['fromDate']?.patchValue(d);
826
- // }
827
- // }
828
- subscribeToDateChanges() {
829
- this.form.get('fromDate')?.valueChanges.subscribe(fromDateStr => {
830
- const toDateControl = this.form.get('toDate');
831
- const toDateStr = toDateControl?.value;
832
- if (!fromDateStr || !toDateStr)
833
- return;
834
- const fromDate = new Date(fromDateStr);
835
- const toDate = new Date(toDateStr);
836
- const maxToDate = new Date(fromDate);
837
- maxToDate?.setDate(fromDate.getDate() + 31);
838
- if (toDate > maxToDate) {
839
- toDateControl?.patchValue(maxToDate.toISOString().split("T")[0]);
840
- }
841
- });
842
- this.form.get('toDate')?.valueChanges.subscribe(toDateStr => {
843
- const fromDateControl = this.form.get('fromDate');
844
- const fromDateStr = fromDateControl?.value;
845
- if (!toDateStr || !fromDateStr)
846
- return;
847
- const toDate = new Date(toDateStr);
848
- const fromDate = new Date(fromDateStr);
849
- const minFromDate = new Date(toDate);
850
- minFromDate?.setDate(toDate.getDate() - 31);
851
- if (fromDate < minFromDate) {
852
- fromDateControl?.patchValue(minFromDate.toISOString().split("T")[0]);
853
- }
854
- });
855
- }
856
- subscribeToClientChange() {
857
- this.form.get('client')?.valueChanges.subscribe(val => {
858
- if (val === null) {
859
- this.form.controls['branch'].patchValue(null);
465
+ handleSearch(criteria) {
466
+ const modal = criteria.modal;
467
+ this.user = criteria.sysUserID;
468
+ console.log(modal);
469
+ const searchData = {
470
+ "StartDate": modal.fromDate,
471
+ "EndDate": modal.toDate,
472
+ "SendCountryCode": modal.sendCountry,
473
+ "RecvCountryCode": modal.receiveCountry,
474
+ "BusinessPartnerCode": modal.client,
475
+ "TransactionStatus": modal.transactionStatus.join(","),
476
+ "PayoutCurrency": "ALL",
477
+ "TransactionType": "ALL",
478
+ "BranchCode": modal.branch,
479
+ "CompanyCode": "BH"
480
+ };
481
+ this.showMessage = true;
482
+ this.loadingState = ComponentLoadingStates.Loading;
483
+ this.reportService.getBranchActivityReport(searchData).subscribe({
484
+ next: (data) => {
485
+ console.log(data);
486
+ this.dataMap = JSON.parse(JSON.stringify(data));
487
+ this.filteredData = data;
488
+ this.noDataFound = Object.keys(this.filteredData).length == 0 ? true : false;
489
+ this.proxyData = structuredClone(data);
490
+ this.paginationArray = new Array(Object.keys(this.filteredData).length).fill(15);
491
+ this.showMessage = Object.keys(this.filteredData).length == 0 ? true : false;
492
+ this.showReport = true;
493
+ },
494
+ error: (err) => {
495
+ this.loadingState = ComponentLoadingStates.Complete;
496
+ },
497
+ complete: () => {
498
+ this.loadingState = ComponentLoadingStates.Complete;
499
+ this.showReport = true;
500
+ this.reportDate = new Date().toISOString();
501
+ this.reportDate = formatDate(this.reportDate, 'dd/MM/yyyy hh:mm a', 'en-US');
860
502
  }
861
503
  });
862
504
  }
863
- // searchClient(event:Event){
864
- // const target = event.target as HTMLInputElement;
865
- // let searchText = target.value.trim();
866
- // if(searchText.length==0){
867
- // this.clients = [...this.clientsData];
868
- // }
869
- // this.clients = this.clientsData.filter((client)=>{
870
- // client?.agent?.includes(searchText);
871
- // })
872
- // }
873
- onClientSelected() {
874
- this.form.get('client')?.valueChanges.subscribe((val) => {
875
- val = this.form.get('client')?.value;
876
- this.onAgentSelected(val);
877
- });
878
- }
879
505
  }
880
506
  BranchActivitySendReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BranchActivitySendReportComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ReportService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
881
- BranchActivitySendReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BranchActivitySendReportComponent, selector: "lib-branch-activity-send-report", ngImport: i0, template: "<section>\r\n <div class=\"Breadcrumb\">\r\n <h1>Reports</h1>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <h2 class=\"BreadCrumbActive\">Branch Activity Send</h2>\r\n </div>\r\n</section>\r\n\r\n<section id=\"request-params\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td style=\"width: 36%;border-top: 0;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\" for=\"client\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clients\">\r\n <ng-select [items]=\"clients\" bindLabel=\"agent\" bindValue=\"code\" formControlName=\"client\"\r\n placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.agent }}\" class=\"ng-option-text\">\r\n {{ item.agent }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"client\" required>\r\n <ng-option *ngFor=\"let client of clients\" [value]=\"client.code\">\r\n {{ client.agent }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\" col-2\">\r\n <label class=\"label-data\">From<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" name=\"fromDate\" id=\"fromDate\" formControlName=\"fromDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <input id=\"fromdate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"fromDate\"> -->\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\">To<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <!-- <input id=\"todate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"toDate\"> -->\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" name=\"toDate\" id=\"toDate\" formControlName=\"toDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 8%;\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-report\" (click)=\"onSubmit()\">View</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"branch\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clientBranches\">\r\n <ng-select [items]=\"clientBranches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n formControlName=\"branch\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.businessPartnerBranch }}\" class=\"ng-option-text\">\r\n {{ item.businessPartnerBranch }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\"> Send<span class=\"text-danger\">*</span> Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"sendCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"sendCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCountry\"> Receive<span class=\"text-danger\">*</span>\r\n Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"receiveCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"transactionStatus\">Transaction Status <span\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionStatusTypes\" [multiple]=\"true\"\r\n formControlName=\"transactionStatus\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select items\" [closeOnSelect]=\"false\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"product\">Product<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"custom-dropdown-container\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionProductTypes\" bindLabel=\"name\" bindValue=\"productCode\"\r\n formControlName=\"product\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.name }}\" class=\"ng-option-text\">\r\n {{ item.name }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"product\" required>\r\n <ng-option *ngFor=\"let product of params.transactionProductTypes\" [value]=\"product.productCode\">\r\n {{ product.name }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCurrency\">Receive<span class=\"text-danger\">*</span>\r\n Currency</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.currencies\" bindLabel=\"currency\" bindValue=\"currencyCode\"\r\n formControlName=\"receiveCurrency\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.currency }}\" class=\"ng-option-text\">\r\n {{ item.currency }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCurrency\" required>\r\n <ng-option *ngFor=\"let currency of params.currencies\" [value]=\"currency.currencyCode\">\r\n {{ currency.currency }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </form>\r\n</section>\r\n\r\n\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\" *ngIf=\"showError\">\r\n <span>{{ errorMessage }}</span>\r\n</div>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2\">\r\n <div class=\"title mb-3\">\r\n Branch Activity Send\r\n </div>\r\n <div class=\"mb-2 flex-container\">\r\n <tbody>\r\n <tr>\r\n <td class=\"labl meta-td\">Report User:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{user}}</span></td>\r\n </tr>\r\n <tr>\r\n <td class=\"labl meta-td\">Report Time:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{ reportDate }}</span></td>\r\n </tr>\r\n </tbody>\r\n </div>\r\n\r\n <!-- Info Message -->\r\n <!-- <div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\"\r\n *ngIf=\"showMessage\">\r\n <span><strong>Message:</strong> {{ message }}</span>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"clearMessage()\"></button>\r\n</div> -->\r\n\r\n <div class=\"added-functions\">\r\n <div class=\"searchBox\">\r\n <input type=\"text\" [(ngModel)]=\"searchText\" name=\"searchText\" class=\"search-input\" (ngModelChange)=\"onSearch()\"\r\n placeholder=\"Search...\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\" class=\"btn btn-sm search-btn\" (click)=\"onSearch()\">\r\n <img src=\"assets/images/Search.svg\" alt=\"Search\" class=\"search-icon\" />\r\n </button>\r\n\r\n </div>\r\n <div class=\"export-options\">\r\n <ng-select placeholder=\"- Please select -\" class=\"export-selector\" [(ngModel)]=\"selectedExportOption\"\r\n [clearable]=\"false\" required>\r\n <ng-option *ngFor=\"let format of exportFormats\" [value]=\"format.code\">\r\n {{ format.formatName }}\r\n </ng-option>\r\n </ng-select>\r\n <!-- <select class=\"opt-cls\" [(ngModel)]=\"selectedExportOption\">\r\n <option value=\"excel\" selected>Excel</option>\r\n <option value=\"pdf\">PDF</option>\r\n <option value=\"csv\">CSV</option>\r\n </select> -->\r\n </div>\r\n <div>\r\n <button class=\"btn btn-report\" (click)=\"handleExport()\">Export</button>\r\n <!-- <div class=\"btn-box\">\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid myGrid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n\r\n\r\n <div class=\"pgn\">\r\n <div style=\"position: absolute;\">\r\n <div class=\"pagination-mobile mb-2\">\r\n <div class=\"ngx-dropdown ngx-range-dropdown\" [class.ngx-active]=\"showRange && activeBranch == i\">\r\n <div class=\"ngx-btn-group\">\r\n <span *ngIf=\"ranges.indexOf(paginationArray[i]) != -1; else showAll\"\r\n class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n {{ paginationArray[i] }} &nbsp; &nbsp;<i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n <ng-template #showAll>\r\n <span class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n All &nbsp; &nbsp;<i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"pagination-label\">Entries per page</span>\r\n <ul class=\"ngx-menu\" *ngIf=\"showRange\">\r\n <li class=\"ngx-c-hand ngx-range-dropdown-button\" *ngFor=\"let limit of ranges\"\r\n (click)=\"changeLimit(limit,i,item.key)\">\r\n <span>{{ limit }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n</section>", styles: ["@charset \"UTF-8\";@import\"ag-grid-community/styles/ag-grid.css\";@import\"ag-grid-community/styles/ag-theme-alpine.css\";.btn-report{border-radius:3px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:80px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2}.cal:focus{box-shadow:none!important}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem;padding-top:.15rem!important}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.ag-theme-alpine{--ag-header-font-size: 9px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}.ag-theme-alpine .ag-header-cell-label,.ag-theme-alpine .ag-header-group-cell-label{justify-content:flex-start!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .compact-grid{font-weight:500!important;line-height:1.1!important}::ng-deep .compact-grid .ag-header-cell{padding:1px 2px!important;font-size:10px!important;font-weight:700!important;line-height:1.2!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}.myGrid .ag-center-cols-clipper,.myGrid .ag-body-viewport{display:none}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .description-cell{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-overflow:clip!important;text-align:left!important;padding:3px 4px!important;line-height:1.5!important;display:block!important;overflow:hidden!important;max-height:none!important}::ng-deep .compact-grid .compact-cell{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:center!important}::ng-deep .compact-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-left-cols-cell{text-align:left!important;text-overflow:ellipsis!important}::ng-deep .compact-grid .ag-center-cols-cell{text-align:center!important;justify-content:center!important}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden!important}::ng-deep .compact-grid .ag-row{min-height:20px!important;max-height:none!important;border-bottom:1px solid #f0f0f0}::ng-deep .compact-grid .ag-row:hover{background-color:#f8f9fa!important}::ng-deep .ag-cell-value.ag-cell-link{cursor:pointer!important}::ng-deep .ag-paging-panel{border-top:1px solid;border-top-color:var(--ag-border-color);color:var(--ag-secondary-foreground-color);height:30px;font-size:11px!important}.btn-box{width:16rem;margin:0 0 0 20px!important}.meta-td{padding:0!important}.form-group label{display:inline-block;padding-right:5px}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.75rem;border-radius:.25rem;font-weight:400;color:#000;border-color:#ddd}.added-functions{display:flex;justify-content:flex-end;width:100%;padding-right:4px;margin-bottom:.625rem}.pagination-mobile .ngx-range-dropdown{margin-top:8px;margin-right:2px}.pagination-mobile .ngx-range-dropdown .ngx-btn,.pagination-mobile .ngx-range-dropdown .ngx-menu .ngx-range-dropdown-button{cursor:pointer}.ngx-btn{color:#050506;border:1px solid #050506;display:inline-block;width:4rem}.ngx-range-dropdown-button{padding-left:.2rem;list-style:none;font-size:12px}.pagination-label{margin-left:10px;font-size:10px;font-weight:600}@media screen and (max-width: 480px){.pagination-mobile{margin-right:auto;margin-left:auto}}.searchBox{margin-right:auto;display:flex}::ng-deep .card-header{padding:.25rem .75rem}.custom-panel-title{font-size:13px;line-height:1.2;margin:0;padding:2px 0;height:30px}::ng-deep .accordion-button{position:relative;display:flex;align-items:center;width:100%;height:30px;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:#e7f1ff;border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.small-labels p,.compact-report-metadata .text-dark p{margin-bottom:.15rem!important;margin-left:1rem!important;line-height:1.2}::ng-deep .small-labels p{font-weight:700!important;color:#000!important}::ng-deep .text-dark p{font-weight:500!important;color:#000!important}.ngx-icon-arrow-down:before,.ngx-icon-arrow-left:before,.ngx-icon-arrow-right:before,.ngx-icon-arrow-up:before,.ngx-icon-downward:before,.ngx-icon-back:before,.ngx-icon-forward:before,.ngx-icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;content:\"\";height:.65em;width:.65em}.ngx-icon:before,.ngx-icon:after{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(45deg)}*,:after,:before{box-sizing:border-box}.ngx-icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.pgn{position:relative;top:-2.1rem;left:2px;width:30%!important;height:10%!important}.ngx-menu{position:relative;top:-11.4rem;width:3rem;background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem #454d5d4d;list-style:none;margin:0;min-width:4rem;padding:.4rem;transform:translateY(.2rem);z-index:100}.ngx-btn-group{height:10px}.accordion-button:before{display:none!important}.status-text{width:100%;transform:scale(1)}.custom-input{width:100%;border:none;caret-color:transparent;cursor:pointer;text-transform:uppercase}.custom-input:focus{outline:none}#request-params{padding-bottom:2px;border-bottom:1px solid rgba(74,73,73,.1)}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i5.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i5.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i5.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i5.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i6.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i6.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "component", type: i7.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] });
507
+ BranchActivitySendReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BranchActivitySendReportComponent, selector: "lib-branch-activity-send-report", ngImport: i0, template: "<lib-search-filter \r\n [ReportName]=\"ReportName\" \r\n (searchClicked)=\"handleSearch($event)\">\r\n</lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\" *ngIf=\"showError\">\r\n <span>{{ errorMessage }}</span>\r\n</div>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2\">\r\n <div class=\"title mb-3\">\r\n Branch Activity Send\r\n </div>\r\n <div class=\"mb-2 flex-container\">\r\n <tbody>\r\n <tr>\r\n <td class=\"labl meta-td\">Report User:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{user}}</span></td>\r\n </tr>\r\n <tr>\r\n <td class=\"labl meta-td\">Report Time:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{ reportDate }}</span></td>\r\n </tr>\r\n </tbody>\r\n </div>\r\n\r\n <!-- Info Message -->\r\n <!-- <div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\"\r\n *ngIf=\"showMessage\">\r\n <span><strong>Message:</strong> {{ message }}</span>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"clearMessage()\"></button>\r\n</div> -->\r\n\r\n <div class=\"added-functions\">\r\n <div class=\"searchBox\">\r\n <input type=\"text\" [(ngModel)]=\"searchText\" name=\"searchText\" class=\"search-input\" (ngModelChange)=\"onSearch()\"\r\n placeholder=\"Search...\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\" class=\"btn btn-sm search-btn\" (click)=\"onSearch()\">\r\n <img src=\"assets/images/Search.svg\" alt=\"Search\" class=\"search-icon\" />\r\n </button>\r\n\r\n </div>\r\n <div class=\"export-options\">\r\n <ng-select placeholder=\"- Please select -\" class=\"export-selector\" [(ngModel)]=\"selectedExportOption\"\r\n [clearable]=\"false\" required>\r\n <ng-option *ngFor=\"let format of exportFormats\" [value]=\"format.code\">\r\n {{ format.formatName }}\r\n </ng-option>\r\n </ng-select>\r\n <!-- <select class=\"opt-cls\" [(ngModel)]=\"selectedExportOption\">\r\n <option value=\"excel\" selected>Excel</option>\r\n <option value=\"pdf\">PDF</option>\r\n <option value=\"csv\">CSV</option>\r\n </select> -->\r\n </div>\r\n <div>\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-report\" (click)=\"handleExport()\">Export</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <div style=\"position: relative;\">\r\n\r\n <lib-page-size-selector [totalEntries]=\"item?.value?.length\"\r\n [defaultSize]=\"'15'\" [gridApi]=\"gridApis[i]\">\r\n ></lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid myGrid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event,i)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n\r\n\r\n <!-- <div class=\"pgn\">\r\n <div style=\"position: absolute;\">\r\n <div class=\"pagination-mobile mb-2\">\r\n <div class=\"ngx-dropdown ngx-range-dropdown\" [class.ngx-active]=\"showRange && activeBranch == i\">\r\n <div class=\"ngx-btn-group\">\r\n <span *ngIf=\"ranges.indexOf(paginationArray[i]) != -1; else showAll\"\r\n class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n {{ paginationArray[i] }} &nbsp; &nbsp;<i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n <ng-template #showAll>\r\n <span class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n All &nbsp; &nbsp;<i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"pagination-label\">Entries per page</span>\r\n <ul class=\"ngx-menu\" *ngIf=\"showRange\">\r\n <li class=\"ngx-c-hand ngx-range-dropdown-button\" *ngFor=\"let limit of ranges\"\r\n (click)=\"changeLimit(limit,i,item.key)\">\r\n <span>{{ limit }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n</section>", styles: ["@charset \"UTF-8\";.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.ag-theme-alpine{--ag-header-font-size: 9px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}.ag-theme-alpine .ag-header-cell-label,.ag-theme-alpine .ag-header-group-cell-label{justify-content:flex-start!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .compact-grid{font-weight:500!important;line-height:1.1!important}::ng-deep .compact-grid .ag-header-cell{padding:1px 2px!important;font-size:10px!important;font-weight:700!important;line-height:1.2!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}.myGrid .ag-center-cols-clipper,.myGrid .ag-body-viewport{display:none}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .description-cell{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-overflow:clip!important;text-align:left!important;padding:3px 4px!important;line-height:1.5!important;display:block!important;overflow:hidden!important;max-height:none!important}::ng-deep .compact-grid .compact-cell{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:center!important}::ng-deep .compact-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-left-cols-cell{text-align:left!important;text-overflow:ellipsis!important}::ng-deep .compact-grid .ag-center-cols-cell{text-align:center!important;justify-content:center!important}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden!important}::ng-deep .compact-grid .ag-row{min-height:20px!important;max-height:none!important;border-bottom:1px solid #f0f0f0}::ng-deep .compact-grid .ag-row:hover{background-color:#f8f9fa!important}::ng-deep .ag-cell-value.ag-cell-link{cursor:pointer!important}::ng-deep .ag-paging-panel{border-top:1px solid;border-top-color:var(--ag-border-color);color:var(--ag-secondary-foreground-color);height:30px;font-size:11px!important}.btn-box{width:110px;margin-right:18px}.meta-td{padding:0!important}.form-group label{display:inline-block;padding-right:5px}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.75rem;border-radius:.25rem;font-weight:400;color:#000;border-color:#ddd}.added-functions{display:flex;justify-content:flex-end;width:100%;padding-right:4px;margin-bottom:.625rem}.pagination-mobile .ngx-range-dropdown{margin-top:8px;margin-right:2px}.pagination-mobile .ngx-range-dropdown .ngx-btn,.pagination-mobile .ngx-range-dropdown .ngx-menu .ngx-range-dropdown-button{cursor:pointer}.ngx-btn{color:#050506;border:1px solid #050506;display:inline-block;width:4rem}.ngx-range-dropdown-button{padding-left:.2rem;list-style:none;font-size:12px}.pagination-label{margin-left:10px;font-size:10px;font-weight:600}@media screen and (max-width: 480px){.pagination-mobile{margin-right:auto;margin-left:auto}}.searchBox{margin-right:auto;display:flex}::ng-deep .card-header{padding:.25rem .75rem}.custom-panel-title{font-size:13px;line-height:1.2;margin:0;padding:2px 0;height:30px}::ng-deep .accordion-button{position:relative;display:flex;align-items:center;width:100%;height:30px;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:#e7f1ff;border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.small-labels p,.compact-report-metadata .text-dark p{margin-bottom:.15rem!important;margin-left:1rem!important;line-height:1.2}::ng-deep .small-labels p{font-weight:700!important;color:#000!important}::ng-deep .text-dark p{font-weight:500!important;color:#000!important}.ngx-icon-arrow-down:before,.ngx-icon-arrow-left:before,.ngx-icon-arrow-right:before,.ngx-icon-arrow-up:before,.ngx-icon-downward:before,.ngx-icon-back:before,.ngx-icon-forward:before,.ngx-icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;content:\"\";height:.65em;width:.65em}.ngx-icon:before,.ngx-icon:after{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(45deg)}*,:after,:before{box-sizing:border-box}.ngx-icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.pgn{position:relative;top:-2.1rem;left:2px;width:30%!important;height:10%!important}.ngx-menu{position:relative;top:-11.4rem;width:3rem;background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem #454d5d4d;list-style:none;margin:0;min-width:4rem;padding:.4rem;transform:translateY(.2rem);z-index:100}.ngx-btn-group{height:10px}.accordion-button:before{display:none!important}.status-text{width:100%;transform:scale(1)}.custom-input{width:100%;border:none;caret-color:transparent;cursor:pointer;text-transform:uppercase}.custom-input:focus{outline:none}#request-params{padding-bottom:2px;border-bottom:1px solid rgba(74,73,73,.1)}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i6.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i6.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i6.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i7.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i9.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked"] }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] });
882
508
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BranchActivitySendReportComponent, decorators: [{
883
509
  type: Component,
884
- args: [{ selector: 'lib-branch-activity-send-report', template: "<section>\r\n <div class=\"Breadcrumb\">\r\n <h1>Reports</h1>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <h2 class=\"BreadCrumbActive\">Branch Activity Send</h2>\r\n </div>\r\n</section>\r\n\r\n<section id=\"request-params\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\r\n <table>\r\n <tbody>\r\n <tr>\r\n <td style=\"width: 36%;border-top: 0;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\" for=\"client\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clients\">\r\n <ng-select [items]=\"clients\" bindLabel=\"agent\" bindValue=\"code\" formControlName=\"client\"\r\n placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.agent }}\" class=\"ng-option-text\">\r\n {{ item.agent }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"client\" required>\r\n <ng-option *ngFor=\"let client of clients\" [value]=\"client.code\">\r\n {{ client.agent }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\" col-2\">\r\n <label class=\"label-data\">From<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" name=\"fromDate\" id=\"fromDate\" formControlName=\"fromDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <input id=\"fromdate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"fromDate\"> -->\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 28%;\">\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2\">\r\n <label class=\"label-data\">To<span class=\"text-danger\">*</span> Date</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <!-- <input id=\"todate\" class=\"form-control form-control-sm\" type=\"date\" formControlName=\"toDate\"> -->\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" name=\"toDate\" id=\"toDate\" formControlName=\"toDate\" />\r\n <div class=\"input-group-append\">\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td style=\"width: 8%;\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-report\" (click)=\"onSubmit()\">View</button>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"branch\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"clientBranches\">\r\n <ng-select [items]=\"clientBranches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n formControlName=\"branch\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.businessPartnerBranch }}\" class=\"ng-option-text\">\r\n {{ item.businessPartnerBranch }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\"> Send<span class=\"text-danger\">*</span> Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"sendCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"sendCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCountry\"> Receive<span class=\"text-danger\">*</span>\r\n Country</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n formControlName=\"receiveCountry\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.country }}\" class=\"ng-option-text\">\r\n {{ item.country }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCountry\" required>\r\n <ng-option *ngFor=\"let country of params.countries\" [value]=\"country.countryCode\">\r\n {{ country.country }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"transactionStatus\">Transaction Status <span\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionStatusTypes\" [multiple]=\"true\"\r\n formControlName=\"transactionStatus\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select items\" [closeOnSelect]=\"false\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"product\">Product<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <div class=\"custom-dropdown-container\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.transactionProductTypes\" bindLabel=\"name\" bindValue=\"productCode\"\r\n formControlName=\"product\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.name }}\" class=\"ng-option-text\">\r\n {{ item.name }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"product\" required>\r\n <ng-option *ngFor=\"let product of params.transactionProductTypes\" [value]=\"product.productCode\">\r\n {{ product.name }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"row d-flex justify-content-center align-items-center row-cls\">\r\n <div class=\"col-2 \">\r\n <label class=\"label-data\" for=\"receiveCurrency\">Receive<span class=\"text-danger\">*</span>\r\n Currency</label>\r\n </div>\r\n <div class=\"col-10 inputbox\">\r\n <ng-container *ngIf=\"params\">\r\n <ng-select [items]=\"params.currencies\" bindLabel=\"currency\" bindValue=\"currencyCode\"\r\n formControlName=\"receiveCurrency\" placeholder=\"- Please select -\" required>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div title=\"{{ item.currency }}\" class=\"ng-option-text\">\r\n {{ item.currency }}\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select placeholder=\"- Please select -\" formControlName=\"receiveCurrency\" required>\r\n <ng-option *ngFor=\"let currency of params.currencies\" [value]=\"currency.currencyCode\">\r\n {{ currency.currency }}\r\n </ng-option>\r\n </ng-select> -->\r\n </ng-container>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </form>\r\n</section>\r\n\r\n\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\" *ngIf=\"showError\">\r\n <span>{{ errorMessage }}</span>\r\n</div>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2\">\r\n <div class=\"title mb-3\">\r\n Branch Activity Send\r\n </div>\r\n <div class=\"mb-2 flex-container\">\r\n <tbody>\r\n <tr>\r\n <td class=\"labl meta-td\">Report User:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{user}}</span></td>\r\n </tr>\r\n <tr>\r\n <td class=\"labl meta-td\">Report Time:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{ reportDate }}</span></td>\r\n </tr>\r\n </tbody>\r\n </div>\r\n\r\n <!-- Info Message -->\r\n <!-- <div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\"\r\n *ngIf=\"showMessage\">\r\n <span><strong>Message:</strong> {{ message }}</span>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"clearMessage()\"></button>\r\n</div> -->\r\n\r\n <div class=\"added-functions\">\r\n <div class=\"searchBox\">\r\n <input type=\"text\" [(ngModel)]=\"searchText\" name=\"searchText\" class=\"search-input\" (ngModelChange)=\"onSearch()\"\r\n placeholder=\"Search...\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\" class=\"btn btn-sm search-btn\" (click)=\"onSearch()\">\r\n <img src=\"assets/images/Search.svg\" alt=\"Search\" class=\"search-icon\" />\r\n </button>\r\n\r\n </div>\r\n <div class=\"export-options\">\r\n <ng-select placeholder=\"- Please select -\" class=\"export-selector\" [(ngModel)]=\"selectedExportOption\"\r\n [clearable]=\"false\" required>\r\n <ng-option *ngFor=\"let format of exportFormats\" [value]=\"format.code\">\r\n {{ format.formatName }}\r\n </ng-option>\r\n </ng-select>\r\n <!-- <select class=\"opt-cls\" [(ngModel)]=\"selectedExportOption\">\r\n <option value=\"excel\" selected>Excel</option>\r\n <option value=\"pdf\">PDF</option>\r\n <option value=\"csv\">CSV</option>\r\n </select> -->\r\n </div>\r\n <div>\r\n <button class=\"btn btn-report\" (click)=\"handleExport()\">Export</button>\r\n <!-- <div class=\"btn-box\">\r\n </div> -->\r\n </div>\r\n </div>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid myGrid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n\r\n\r\n <div class=\"pgn\">\r\n <div style=\"position: absolute;\">\r\n <div class=\"pagination-mobile mb-2\">\r\n <div class=\"ngx-dropdown ngx-range-dropdown\" [class.ngx-active]=\"showRange && activeBranch == i\">\r\n <div class=\"ngx-btn-group\">\r\n <span *ngIf=\"ranges.indexOf(paginationArray[i]) != -1; else showAll\"\r\n class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n {{ paginationArray[i] }} &nbsp; &nbsp;<i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n <ng-template #showAll>\r\n <span class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n All &nbsp; &nbsp;<i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"pagination-label\">Entries per page</span>\r\n <ul class=\"ngx-menu\" *ngIf=\"showRange\">\r\n <li class=\"ngx-c-hand ngx-range-dropdown-button\" *ngFor=\"let limit of ranges\"\r\n (click)=\"changeLimit(limit,i,item.key)\">\r\n <span>{{ limit }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n</section>", styles: ["@charset \"UTF-8\";@import\"ag-grid-community/styles/ag-grid.css\";@import\"ag-grid-community/styles/ag-theme-alpine.css\";.btn-report{border-radius:3px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:80px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2}.cal:focus{box-shadow:none!important}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem;padding-top:.15rem!important}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.ag-theme-alpine{--ag-header-font-size: 9px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}.ag-theme-alpine .ag-header-cell-label,.ag-theme-alpine .ag-header-group-cell-label{justify-content:flex-start!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .compact-grid{font-weight:500!important;line-height:1.1!important}::ng-deep .compact-grid .ag-header-cell{padding:1px 2px!important;font-size:10px!important;font-weight:700!important;line-height:1.2!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}.myGrid .ag-center-cols-clipper,.myGrid .ag-body-viewport{display:none}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .description-cell{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-overflow:clip!important;text-align:left!important;padding:3px 4px!important;line-height:1.5!important;display:block!important;overflow:hidden!important;max-height:none!important}::ng-deep .compact-grid .compact-cell{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:center!important}::ng-deep .compact-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-left-cols-cell{text-align:left!important;text-overflow:ellipsis!important}::ng-deep .compact-grid .ag-center-cols-cell{text-align:center!important;justify-content:center!important}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden!important}::ng-deep .compact-grid .ag-row{min-height:20px!important;max-height:none!important;border-bottom:1px solid #f0f0f0}::ng-deep .compact-grid .ag-row:hover{background-color:#f8f9fa!important}::ng-deep .ag-cell-value.ag-cell-link{cursor:pointer!important}::ng-deep .ag-paging-panel{border-top:1px solid;border-top-color:var(--ag-border-color);color:var(--ag-secondary-foreground-color);height:30px;font-size:11px!important}.btn-box{width:16rem;margin:0 0 0 20px!important}.meta-td{padding:0!important}.form-group label{display:inline-block;padding-right:5px}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.75rem;border-radius:.25rem;font-weight:400;color:#000;border-color:#ddd}.added-functions{display:flex;justify-content:flex-end;width:100%;padding-right:4px;margin-bottom:.625rem}.pagination-mobile .ngx-range-dropdown{margin-top:8px;margin-right:2px}.pagination-mobile .ngx-range-dropdown .ngx-btn,.pagination-mobile .ngx-range-dropdown .ngx-menu .ngx-range-dropdown-button{cursor:pointer}.ngx-btn{color:#050506;border:1px solid #050506;display:inline-block;width:4rem}.ngx-range-dropdown-button{padding-left:.2rem;list-style:none;font-size:12px}.pagination-label{margin-left:10px;font-size:10px;font-weight:600}@media screen and (max-width: 480px){.pagination-mobile{margin-right:auto;margin-left:auto}}.searchBox{margin-right:auto;display:flex}::ng-deep .card-header{padding:.25rem .75rem}.custom-panel-title{font-size:13px;line-height:1.2;margin:0;padding:2px 0;height:30px}::ng-deep .accordion-button{position:relative;display:flex;align-items:center;width:100%;height:30px;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:#e7f1ff;border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.small-labels p,.compact-report-metadata .text-dark p{margin-bottom:.15rem!important;margin-left:1rem!important;line-height:1.2}::ng-deep .small-labels p{font-weight:700!important;color:#000!important}::ng-deep .text-dark p{font-weight:500!important;color:#000!important}.ngx-icon-arrow-down:before,.ngx-icon-arrow-left:before,.ngx-icon-arrow-right:before,.ngx-icon-arrow-up:before,.ngx-icon-downward:before,.ngx-icon-back:before,.ngx-icon-forward:before,.ngx-icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;content:\"\";height:.65em;width:.65em}.ngx-icon:before,.ngx-icon:after{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(45deg)}*,:after,:before{box-sizing:border-box}.ngx-icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.pgn{position:relative;top:-2.1rem;left:2px;width:30%!important;height:10%!important}.ngx-menu{position:relative;top:-11.4rem;width:3rem;background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem #454d5d4d;list-style:none;margin:0;min-width:4rem;padding:.4rem;transform:translateY(.2rem);z-index:100}.ngx-btn-group{height:10px}.accordion-button:before{display:none!important}.status-text{width:100%;transform:scale(1)}.custom-input{width:100%;border:none;caret-color:transparent;cursor:pointer;text-transform:uppercase}.custom-input:focus{outline:none}#request-params{padding-bottom:2px;border-bottom:1px solid rgba(74,73,73,.1)}\n"] }]
510
+ args: [{ selector: 'lib-branch-activity-send-report', template: "<lib-search-filter \r\n [ReportName]=\"ReportName\" \r\n (searchClicked)=\"handleSearch($event)\">\r\n</lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\" *ngIf=\"showError\">\r\n <span>{{ errorMessage }}</span>\r\n</div>\r\n\r\n<section *ngIf=\"showReport\" class=\"my-2\">\r\n <div class=\"title mb-3\">\r\n Branch Activity Send\r\n </div>\r\n <div class=\"mb-2 flex-container\">\r\n <tbody>\r\n <tr>\r\n <td class=\"labl meta-td\">Report User:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{user}}</span></td>\r\n </tr>\r\n <tr>\r\n <td class=\"labl meta-td\">Report Time:</td>\r\n <td class=\"px-3 meta-td\"><span class=\"info\">{{ reportDate }}</span></td>\r\n </tr>\r\n </tbody>\r\n </div>\r\n\r\n <!-- Info Message -->\r\n <!-- <div class=\"alert alert-danger mt-3 d-flex justify-content-between align-items-center\"\r\n *ngIf=\"showMessage\">\r\n <span><strong>Message:</strong> {{ message }}</span>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"clearMessage()\"></button>\r\n</div> -->\r\n\r\n <div class=\"added-functions\">\r\n <div class=\"searchBox\">\r\n <input type=\"text\" [(ngModel)]=\"searchText\" name=\"searchText\" class=\"search-input\" (ngModelChange)=\"onSearch()\"\r\n placeholder=\"Search...\" autocomplete=\"off\" />\r\n\r\n <button type=\"button\" class=\"btn btn-sm search-btn\" (click)=\"onSearch()\">\r\n <img src=\"assets/images/Search.svg\" alt=\"Search\" class=\"search-icon\" />\r\n </button>\r\n\r\n </div>\r\n <div class=\"export-options\">\r\n <ng-select placeholder=\"- Please select -\" class=\"export-selector\" [(ngModel)]=\"selectedExportOption\"\r\n [clearable]=\"false\" required>\r\n <ng-option *ngFor=\"let format of exportFormats\" [value]=\"format.code\">\r\n {{ format.formatName }}\r\n </ng-option>\r\n </ng-select>\r\n <!-- <select class=\"opt-cls\" [(ngModel)]=\"selectedExportOption\">\r\n <option value=\"excel\" selected>Excel</option>\r\n <option value=\"pdf\">PDF</option>\r\n <option value=\"csv\">CSV</option>\r\n </select> -->\r\n </div>\r\n <div>\r\n <div class=\"btn-box\">\r\n <button class=\"btn btn-report\" (click)=\"handleExport()\">Export</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let item of filteredData | keyvalue; let i = index\">\r\n <ngb-panel *ngIf=\"item.value.length > 0\" [id]=\"'panel-' + i\">\r\n\r\n <ng-template ngbPanelTitle style=\"height: 10%;\">\r\n <label\r\n style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">{{\r\n item.key\r\n }}</label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <div style=\"position: relative;\">\r\n\r\n <lib-page-size-selector [totalEntries]=\"item?.value?.length\"\r\n [defaultSize]=\"'15'\" [gridApi]=\"gridApis[i]\">\r\n ></lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid myGrid\" style=\"width: 100%;height: 370px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"item.value\" [rowHeight]=\"20\"\r\n [headerHeight]=\"22\" [gridOptions]=\"{\r\n suppressHorizontalScroll: true,\r\n scrollbarWidth: 0\r\n }\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\" (gridReady)=\"onGridReady($event,i)\"\r\n (gridSizeChanged)=\"onGridSizeChanged($event)\">\r\n </ag-grid-angular>\r\n\r\n\r\n <!-- <div class=\"pgn\">\r\n <div style=\"position: absolute;\">\r\n <div class=\"pagination-mobile mb-2\">\r\n <div class=\"ngx-dropdown ngx-range-dropdown\" [class.ngx-active]=\"showRange && activeBranch == i\">\r\n <div class=\"ngx-btn-group\">\r\n <span *ngIf=\"ranges.indexOf(paginationArray[i]) != -1; else showAll\"\r\n class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n {{ paginationArray[i] }} &nbsp; &nbsp;<i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n <ng-template #showAll>\r\n <span class=\"ngx-btn ngx-range-dropdown-button\" (click)=\"activateBranchPagination(i)\">\r\n All &nbsp; &nbsp;<i class=\"ngx-icon ngx-icon-arrow-down\"></i>\r\n </span>\r\n </ng-template>\r\n <span class=\"pagination-label\">Entries per page</span>\r\n <ul class=\"ngx-menu\" *ngIf=\"showRange\">\r\n <li class=\"ngx-c-hand ngx-range-dropdown-button\" *ngFor=\"let limit of ranges\"\r\n (click)=\"changeLimit(limit,i,item.key)\">\r\n <span>{{ limit }}</span>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </ng-template>\r\n\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n <div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound\">\r\n No Data Found\r\n </div>\r\n</section>", styles: ["@charset \"UTF-8\";.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.ag-theme-alpine{--ag-header-font-size: 9px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}.ag-theme-alpine .ag-header-cell-label,.ag-theme-alpine .ag-header-group-cell-label{justify-content:flex-start!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .compact-grid{font-weight:500!important;line-height:1.1!important}::ng-deep .compact-grid .ag-header-cell{padding:1px 2px!important;font-size:10px!important;font-weight:700!important;line-height:1.2!important;height:36px!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}.myGrid .ag-center-cols-clipper,.myGrid .ag-body-viewport{display:none}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .description-cell{white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-overflow:clip!important;text-align:left!important;padding:3px 4px!important;line-height:1.5!important;display:block!important;overflow:hidden!important;max-height:none!important}::ng-deep .compact-grid .compact-cell{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:center!important}::ng-deep .compact-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}::ng-deep .ag-left-cols-cell{text-align:left!important;text-overflow:ellipsis!important}::ng-deep .compact-grid .ag-center-cols-cell{text-align:center!important;justify-content:center!important}::ng-deep .ag-center-cols-viewport{width:100%;overflow-x:hidden!important}::ng-deep .compact-grid .ag-row{min-height:20px!important;max-height:none!important;border-bottom:1px solid #f0f0f0}::ng-deep .compact-grid .ag-row:hover{background-color:#f8f9fa!important}::ng-deep .ag-cell-value.ag-cell-link{cursor:pointer!important}::ng-deep .ag-paging-panel{border-top:1px solid;border-top-color:var(--ag-border-color);color:var(--ag-secondary-foreground-color);height:30px;font-size:11px!important}.btn-box{width:110px;margin-right:18px}.meta-td{padding:0!important}.form-group label{display:inline-block;padding-right:5px}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.75rem;border-radius:.25rem;font-weight:400;color:#000;border-color:#ddd}.added-functions{display:flex;justify-content:flex-end;width:100%;padding-right:4px;margin-bottom:.625rem}.pagination-mobile .ngx-range-dropdown{margin-top:8px;margin-right:2px}.pagination-mobile .ngx-range-dropdown .ngx-btn,.pagination-mobile .ngx-range-dropdown .ngx-menu .ngx-range-dropdown-button{cursor:pointer}.ngx-btn{color:#050506;border:1px solid #050506;display:inline-block;width:4rem}.ngx-range-dropdown-button{padding-left:.2rem;list-style:none;font-size:12px}.pagination-label{margin-left:10px;font-size:10px;font-weight:600}@media screen and (max-width: 480px){.pagination-mobile{margin-right:auto;margin-left:auto}}.searchBox{margin-right:auto;display:flex}::ng-deep .card-header{padding:.25rem .75rem}.custom-panel-title{font-size:13px;line-height:1.2;margin:0;padding:2px 0;height:30px}::ng-deep .accordion-button{position:relative;display:flex;align-items:center;width:100%;height:30px;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:#e7f1ff;border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}.small-labels p,.compact-report-metadata .text-dark p{margin-bottom:.15rem!important;margin-left:1rem!important;line-height:1.2}::ng-deep .small-labels p{font-weight:700!important;color:#000!important}::ng-deep .text-dark p{font-weight:500!important;color:#000!important}.ngx-icon-arrow-down:before,.ngx-icon-arrow-left:before,.ngx-icon-arrow-right:before,.ngx-icon-arrow-up:before,.ngx-icon-downward:before,.ngx-icon-back:before,.ngx-icon-forward:before,.ngx-icon-upward:before{border:.1rem solid currentColor;border-bottom:0;border-right:0;content:\"\";height:.65em;width:.65em}.ngx-icon:before,.ngx-icon:after{display:block;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) rotate(45deg)}*,:after,:before{box-sizing:border-box}.ngx-icon{box-sizing:border-box;display:inline-block;font-size:inherit;font-style:normal;height:1em;position:relative;text-indent:-9999px;vertical-align:middle;width:1em}.pgn{position:relative;top:-2.1rem;left:2px;width:30%!important;height:10%!important}.ngx-menu{position:relative;top:-11.4rem;width:3rem;background:#fff;border-radius:.1rem;box-shadow:0 .05rem .2rem #454d5d4d;list-style:none;margin:0;min-width:4rem;padding:.4rem;transform:translateY(.2rem);z-index:100}.ngx-btn-group{height:10px}.accordion-button:before{display:none!important}.status-text{width:100%;transform:scale(1)}.custom-input{width:100%;border:none;caret-color:transparent;cursor:pointer;text-transform:uppercase}.custom-input:focus{outline:none}#request-params{padding-bottom:2px;border-bottom:1px solid rgba(74,73,73,.1)}\n"] }]
885
511
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ReportService }, { type: i0.NgZone }]; } });
886
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXVELE1BQU0sZUFBZSxDQUFDO0FBQy9GLGtGQUFrRjtBQUNsRixPQUFPLEVBQUUsU0FBUyxFQUE0RCxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqSCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLHNGQUFzRixDQUFDO0FBQ2xKLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVB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QU07SUFDTix1REFBdUQ7SUFDdkQsNkNBQTZDO0lBQzdDLE9BQU87SUFDUCxJQUFJO0lBRUosZ0JBQWdCO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO1lBQ3JELEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQTtJQUVKLENBQUM7OzhIQTE4QlUsaUNBQWlDO2tIQUFqQyxpQ0FBaUMsdUVDeEI5Qyw2bWlCQTRWVTsyRkRwVUcsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgTmdab25lLCBPbkluaXQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbi8vIGltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnJhbmNoQWN0aXZpdHlSZXBvcnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvYnJhbmNoLWFjdGl2aXR5LXJlcG9ydC9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIEdyaWRPcHRpb25zLCBHcmlkUmVhZHlFdmVudCwgUm93R3JvdXBpbmdEaXNwbGF5VHlwZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgdGhlbWVBbHBpbmUgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvdGhlbWluZyc7XHJcblxyXG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQgeyBmb3JtYXREYXRlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEJyYW5jaEFjdGl2aXR5U2VuZFJlcG9ydFJlcXVlc3REb21haW5Nb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9icmFuY2gtYWN0aXZpdHktcmVwb3J0L2JyYW5jaC1hY3Rpdml0eS1zZW5kLXJlcG9ydC1yZXF1ZXN0LWRvbWFpbi1tb2RlbCc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRMb2FkaW5nU3RhdGVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBvbmVudC1sb2FkaW5nLXN0YXRlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2JyYW5jaC1hY3Rpdml0eS1zZW5kLXJlcG9ydC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcmFuY2hBY3Rpdml0eVNlbmRSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGRhdGFNYXA6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBmaWx0ZXJlZERhdGE6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBwcm94eURhdGE6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgY291bnRyaWVzOiBhbnk7XHJcbiAgcGFyYW1zOiBhbnk7XHJcbiAgZnJvbURhdGU6IGFueTtcclxuICB0b0RhdGU6IGFueTtcclxuICBjbGllbnRzOiBhbnkgPSBbXTtcclxuICBjbGllbnRzRGF0YTphbnkgPSBbXTtcclxuICBjbGllbnRCcmFuY2hlczogYW55ID0gW107XHJcbiAgc2hvd1JlcG9ydDogYm9vbGVhbjtcclxuICByYW5nZXM6IGFueVtdID0gWzEwLCAxNSwgMjAsIDMwLCA1MCwgMTAwLCAyMDAsICdBbGwnXTtcclxuICBwYWdpbmF0aW9uUGFnZVNpemU6IG51bWJlciA9IDE1O1xyXG4gIHBhZ2luYXRpb25BcnJheTogYW55W107XHJcbiAgc2hvd1JhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNBZ2VudFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSAnZXhjZWwnO1xyXG4gIGdyaWRBUGk7XHJcbiAgZ3JpZENvbHVtbkFwaTtcclxuICB1c2VyOiBzdHJpbmcgPSBcImthdXNoaWsua3Vsc2FuZ2VAeHByZXNzbW9uZXkudGVjaFwiO1xyXG4gIHJlcG9ydERhdGU6IHN0cmluZztcclxuICBzZWFyY2hUZXh0OiBzdHJpbmc7XHJcbiAgYnVmZmVyOiBhbnk7XHJcbiAgbXlTdGF0dXM6IEZvcm1BcnJheSA9IG5ldyBGb3JtQXJyYXkoW10pO1xyXG4gIHN0YXR1cyA9IFsnQWxsJ107XHJcbiAgZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgc3lzVXNlcklkOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBsb2dvQmFzZTY0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgbWVzc2FnZTogc3RyaW5nID0gJ05vIERhdGEgRm91bmQnO1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXM7XHJcbiAgbG9hZGluZ1N0YXRlOiBDb21wb25lbnRMb2FkaW5nU3RhdGVzID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Mb2FkaW5nO1xyXG4gIGV4cG9ydEZvcm1hdHMgPSBbe2Zvcm1hdE5hbWU6XCJFeGNlbFwiLGNvZGU6J2V4Y2VsJ30se2Zvcm1hdE5hbWU6XCJQREZcIixjb2RlOidwZGYnfSx7Zm9ybWF0TmFtZTpcIkNTVlwiLGNvZGU6J2Nzdid9XVxyXG4gIC8vIGZsYWdzXHJcbiAgc2hvd1N0YXR1c0Ryb3Bkb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0NsaWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93Q3VycmVuY3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UHJvZHVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dTZW5kQ291bnRyeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dSZWNlaXZlQ291bnRyeTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dCcmFuY2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaXNhYmxlVG9EYXRlOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93RXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93TWVzc2FnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdEFsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG5vRGF0YUZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2xpZW50U2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhY3RpdmVCcmFuY2g6IG51bWJlcjtcclxuXHJcbiAgY29sdW1uRGVmczogQ29sRGVmPEJyYW5jaEFjdGl2aXR5UmVwb3J0PltdID0gW1xyXG4gICAgeyBmaWVsZDogJ2J1c2luZXNzRGF0ZVRpbWUnLCBoZWFkZXJOYW1lOiAnQnVzaW5lc3MgRGF0ZScsIGZsZXg6IDEsIGhlYWRlckNsYXNzOiAnYWctbGVmdC1hbGlnbmVkLWhlYWRlcicsIG1pbldpZHRoOiA3MCwgd2lkdGg6IDcwLCB0b29sdGlwRmllbGQ6ICdidXNpbmVzc0RhdGVUaW1lJyB9LFxyXG4gICAgeyBmaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZVRpbWUnLCBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gRGF0ZScsIGZsZXg6IDIsIHdyYXBUZXh0OiB0cnVlLCBhdXRvSGVpZ2h0OiB0cnVlIH0sXHJcbiAgICB7IGZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInLCBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gTnVtYmVyJywgZmxleDogMS44LCB3aWR0aDogMTMwLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwtdHJhbnNhY3Rpb24nLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicgfSxcclxuICAgIHsgZmllbGQ6ICdwcm9kdWN0JywgaGVhZGVyTmFtZTogJ1Byb2R1Y3QnLCBmbGV4OiAwLjUsIG1pbldpZHRoOiA1MCwgd2lkdGg6IDYwLCB0b29sdGlwRmllbGQ6ICdwcm9kdWN0JyB9LFxyXG4gICAgeyBmaWVsZDogJ3NlbmRBZ2VudEJyYW5jaENvZGUnLCBoZWFkZXJOYW1lOiAnU2VuZCBCcmFuY2hDb2RlJywgZmxleDogMSwgd2lkdGg6IDEyMCwgdG9vbHRpcEZpZWxkOiAnc2VuZEFnZW50QnJhbmNoQ29kZScgfSxcclxuICAgIHsgZmllbGQ6ICdyZWNlaXZlQWdlbnRDb2RlJywgaGVhZGVyTmFtZTogJ1JlY2VpdmUgQ2xpZW50Q29kZScsIGZsZXg6IDEsIG1pbldpZHRoOiA3MCwgd2lkdGg6IDcwLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQWdlbnRDb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3BheW91dENDY29kZScsIGhlYWRlck5hbWU6ICdSZWNlaXZlQ2N5IENvZGUnLCBmbGV4OiAxLCB3aWR0aDogMTEwLCB0b29sdGlwRmllbGQ6ICdwYXlvdXRDQ2NvZGUnIH0sXHJcbiAgICB7IGZpZWxkOiAncGF5b3V0QW1vdW50JywgaGVhZGVyTmFtZTogJ1JlY2VpdmUgQW1vdW50JywgZmxleDogMSwgbWF4V2lkdGg6IDEzMCwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3BheW91dEFtb3VudCcgfSxcclxuICAgIHsgZmllbGQ6ICdwYXlpbkNDY29kZScsIGhlYWRlck5hbWU6ICdTZW5kQ2N5IENvZGUnLCBmbGV4OiAxLCBtYXhXaWR0aDogOTAsIHRvb2x0aXBGaWVsZDogJ3BheWluQ0Njb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3BheWluQW1vdW50JywgaGVhZGVyTmFtZTogJ1NlbmQgQW1vdW50JywgZmxleDogMSwgbWF4V2lkdGg6IDEyMCwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3BheWluQW1vdW50JyB9LFxyXG4gICAgeyBmaWVsZDogJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbkFtb3VudCcsIGhlYWRlck5hbWU6ICdTZXJ2aWNlIEZlZScsIGZsZXg6IDEsIG1heFdpZHRoOiAxMjAsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbkNvbW1pc3Npb25BbW91bnQnIH0sXHJcbiAgICB7IGZpZWxkOiAndGF4JywgaGVhZGVyTmFtZTogJ1RheCcsIGZsZXg6IDEsIHdpZHRoOiA3MCwgbWF4V2lkdGg6IDEwMCwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3RheCcgfSxcclxuICAgIHsgZmllbGQ6ICd0b3RhbFBheWluQW1vdW50JywgaGVhZGVyTmFtZTogJ1RvdGFsIFNlbmQgQW1vdW50JywgZmxleDogMSwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuY3VycmVuY3lGb3JtYXR0ZXIuYmluZCh0aGlzKSwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIHRvb2x0aXBGaWVsZDogJ3RvdGFsUGF5aW5BbW91bnQnIH0sXHJcbiAgICB7IGZpZWxkOiAnc3RhdHVzJywgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZsZXg6IDEsIHRvb2x0aXBGaWVsZDogJ3N0YXR1cycgfVxyXG4gIF07XHJcblxyXG5cclxuICBkZWZhdWx0Q29sRGVmID0ge1xyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgICBmaWx0ZXI6IGZhbHNlLFxyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgbWlud2lkdGg6IDQwLFxyXG4gICAgd3JhcEhlYWRlclRleHQ6IHRydWUsXHJcbiAgICBhdXRvSGVhZGVySGVpZ2h0OiB0cnVlLFxyXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxyXG4gICAgd3JhcFRleHQ6IHRydWVcclxuICB9O1xyXG4gIHJvd0RhdGE6IEJyYW5jaEFjdGl2aXR5UmVwb3J0W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgcmVwb3J0U2VydmljZTogUmVwb3J0U2VydmljZSwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkgeyB9XHJcblxyXG4gIHJlcG9ydFRoZW1lID0gdGhlbWVBbHBpbmUud2l0aFBhcmFtcyh7XHJcbiAgICBoZWFkZXJGb250U2l6ZTogJzEwcHgnLFxyXG4gICAgZm9udEZhbWlseTogWydBcmlhbCcsICdzYW5zLXNlcmlmJ10sXHJcbiAgICBmb250U2l6ZTogJzlweCdcclxuICB9KTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBDaGVjayBpZiBVc2VyIGlzIGZhbGNvbiB1c2VyIG9yIGZvc3NpbFVzZXJcclxuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmb3NzaWx1c2VybmFtZScpKSB7XHJcbiAgICAgIHRoaXMuc3lzVXNlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3lzVXNlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN5c1VzZXJJZCA9IHRoaXMuc3lzVXNlcklkLnJlcGxhY2UoL15bXCInXSguKilbXCInXSQvLCAnJDEnKTtcclxuICAgIHRoaXMudXNlciA9IHRoaXMuc3lzVXNlcklkO1xyXG4gICAgY29uc29sZS5sb2coXCJTeXN0ZW0gVXNlciBJZCA6IFwiICsgdGhpcy5zeXNVc2VySWQpO1xyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldENvbXBhbnlDb25maWcoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMucGFyYW1zID0gZGF0YTtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5wYXJhbXMpXHJcbiAgICB9KVxyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgcGFyYW1zOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0UGFyYW1zKCkucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBhcmFtcycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgICAgY2xpZW50czogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFBheUluQWdlbnRzKHRoaXMuc3lzVXNlcklkKS5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2xpZW50cycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pOyBcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KS5zdWJzY3JpYmUoXHJcbiAgICAgIHtcclxuICAgICAgICBuZXh0OiAoeyBwYXJhbXMsIGNsaWVudHMgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudHMgPSBbLi4uY2xpZW50c107XHJcbiAgICAgICAgICB0aGlzLmNsaWVudHNEYXRhID0gWy4uLmNsaWVudHNdO1xyXG4gICAgICAgICAgaWYgKCFzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmb3NzaWx1c2VybmFtZScpICYmIHRoaXMuY2xpZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Q2xpZW50KHRoaXMuY2xpZW50c1swXS5jb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuRXJyb3I7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWVudFNlbGVjdGVkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0NsaWVudENoYW5nZSgpO1xyXG4gICAgLy9Db252ZXJ0IExvZ28gdG8gYmFzZTY0XHJcbiAgICB0aGlzLmxvYWRJbWFnZUFzQmFzZTY0KCdzcmMvYXNzZXRzL3JlcG9ydHMtbGliL2ltYWdlcy9YTUNvcmFsLnBuZycpLnRoZW4oYmFzZTY0ID0+IHtcclxuICAgICAgdGhpcy5sb2dvQmFzZTY0ID0gYmFzZTY0O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0Rm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICB0b0RhdGU6IFt7IHZhbHVlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBkaXNhYmxlZDogZmFsc2UgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHNlbmRDb3VudHJ5OiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICByZWNlaXZlQ291bnRyeTogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGJyYW5jaDogW3sgdmFsdWU6IG51bGwsIGRpc2FibGVkOiB0aGlzLmlzQWdlbnRTZWxlY3RlZCB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcHJvZHVjdDogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgcmVjZWl2ZUN1cnJlbmN5OiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICB0cmFuc2FjdGlvblN0YXR1czogW1snQWxsJ10sVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHNlbGVjdGVkU3RhdHVzOiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgdGhpcy5zaG93U3RhdHVzRHJvcGRvd24gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0NsaWVudHMgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IFwiXCI7XHJcbiAgICB0aGlzLnNob3dFcnJvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmVwb3J0ID0gZmFsc2U7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmZvcm0udmFsdWUpXHJcbiAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiZnJvbURhdGVcIl0udmFsdWU7XHJcbiAgICB0aGlzLnRvRGF0ZSA9IHRoaXMuZm9ybS5jb250cm9sc1tcInRvRGF0ZVwiXS52YWx1ZTtcclxuICAgIC8vIFZhbGlkYXRlIEZvcm1cclxuICAgIGlmICghdGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Vycm9yID0gdHJ1ZTtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBgUGxlYXNlIGZpbGwgYWxsIHRoZSByZXF1aXJlZCBmaWVsZHNgO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiBmcm9tRGF0ZSBpcyBncmVhdGVyIHRoYW4gdG9EYXRlXHJcbiAgICBpZiAobmV3IERhdGUodGhpcy5mcm9tRGF0ZSkgPiBuZXcgRGF0ZSh0aGlzLnRvRGF0ZSkpIHtcclxuICAgICAgdGhpcy5zaG93RXJyb3IgPSB0cnVlO1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGBGcm9tIERhdGUgJHt0aGlzLmZyb21EYXRlfSBjYW4gbm90IGJlIGdyZWF0ZXIgdGhhbiBUbyBEYXRlICR7dGhpcy50b0RhdGV9YDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGRheXMgXHJcbiAgICBjb25zdCBmcm9tID0gbmV3IERhdGUodGhpcy5mcm9tRGF0ZSk7XHJcbiAgICBjb25zdCB0byA9IG5ldyBEYXRlKHRoaXMudG9EYXRlKTtcclxuICAgIGNvbnN0IGRpZmZlcmVuY2VJbkRheXMgPSBNYXRoLmZsb29yKCh0bz8uZ2V0VGltZSgpIC0gZnJvbT8uZ2V0VGltZSgpKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gZGF0ZXMgZXhjZWVkcyAzMSBkYXlzICgxIG1vbnRocyBhcHByb3gpXHJcbiAgICBpZiAoZGlmZmVyZW5jZUluRGF5cyA+IDMxKSB7XHJcbiAgICAgIHRoaXMuc2hvd0Vycm9yID0gdHJ1ZTtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBgRnJvbSBEYXRlICR7dGhpcy5mcm9tRGF0ZX0gYW5kIFRvIERhdGUgJHt0aGlzLnRvRGF0ZX0gc2hvdWxkIGhhdmUgZGlmZmVyZW5jZSBvZiBtYXggMSBtb250aGA7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd0Vycm9yID0gZmFsc2U7XHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgdGhpcy5yZXBvcnREYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgdGhpcy5yZXBvcnREYXRlID0gZm9ybWF0RGF0ZSh0aGlzLnJlcG9ydERhdGUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcclxuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5tYXBGb3JtVG9Nb2RlbCgpO1xyXG4gICAgbW9kYWwudHJhbnNhY3Rpb25TdGF0dXMgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJzZWxlY3RlZFN0YXR1c1wiXS52YWx1ZTtcclxuICAgIGNvbnNvbGUubG9nKG1vZGFsKTtcclxuICAgIHRoaXMuc2hvd01lc3NhZ2UgPSB0cnVlO1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQWN0aXZpdHlSZXBvcnQobW9kYWwpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgdGhpcy5kYXRhTWFwID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMubm9EYXRhRm91bmQgPSBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcmVkRGF0YSkubGVuZ3RoID09IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcm94eURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZGF0YSk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uQXJyYXkgPSBuZXcgQXJyYXkoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZERhdGEpLmxlbmd0aCkuZmlsbCgxNSk7XHJcbiAgICAgICAgdGhpcy5zaG93TWVzc2FnZSA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyZWREYXRhKS5sZW5ndGggPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dSZXBvcnQgPSB0cnVlO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICBvblNlYXJjaCgpIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc2VhcmNoVGV4dCk7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5kYXRhTWFwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIGVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJveHlEYXRhKSkge1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBlbnRyaWVzLmZpbHRlcihlbnRyeSA9PiBPYmplY3QudmFsdWVzKGVudHJ5KVxyXG4gICAgICAgIC5zb21lKHZhbCA9PiB7XHJcbiAgICAgICAgICBsZXQgYTogc3RyaW5nID0gdmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIHJldHVybiBhLnNlYXJjaCh0aGlzLnNlYXJjaFRleHQpID09IC0xID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIH0pKVxyXG5cclxuICAgICAgdGhpcy5maWx0ZXJlZERhdGFba2V5XSA9IGZpbHRlcmVkRGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyZWREYXRhO1xyXG4gIH1cclxuXHJcbiAgb25BZ2VudFNlbGVjdGVkKGNvZGU6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1snY2xpZW50J10udmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzWydicmFuY2gnXS5wYXRjaFZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQnlBZ2VudCh0aGlzLnN5c1VzZXJJZCwgY29kZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmNsaWVudEJyYW5jaGVzID0gZGF0YTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImV6cmVtaXR1c2VybmFtZVwiKSl7XHJcbiAgICAgICAgICBjb25zdCBpbmRleD10aGlzLmNsaWVudEJyYW5jaGVzLmZpbmRJbmRleCgoYnJhbmNoKT0+YnJhbmNoLmJyYW5jaENvZGUgPT09IFwiQWxsXCIpO1xyXG4gICAgICAgICAgaWYoaW5kZXg9PS0xKXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydicmFuY2gnXS5zZXRWYWx1ZSh0aGlzLmNsaWVudEJyYW5jaGVzWzBdLmJyYW5jaENvZGUpXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydicmFuY2gnXS5zZXRWYWx1ZSgnQWxsJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcy5Db21wbGV0ZTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbWFwRm9ybVRvTW9kZWwoKTogQnJhbmNoQWN0aXZpdHlTZW5kUmVwb3J0UmVxdWVzdERvbWFpbk1vZGVsIHtcclxuICAgIGNvbnN0IGRhdGEgPSBuZXcgQnJhbmNoQWN0aXZpdHlTZW5kUmVwb3J0UmVxdWVzdERvbWFpbk1vZGVsKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKTtcclxuICAgIGRhdGEuc3RhcnREYXRlID0gdGhpcy5mb3JtLmNvbnRyb2xzWydmcm9tRGF0ZSddLnZhbHVlO1xyXG4gICAgZGF0YS5lbmREYXRlID0gdGhpcy5mb3JtLmNvbnRyb2xzWyd0b0RhdGUnXS52YWx1ZTtcclxuICAgIGRhdGEuc2VuZENvdW50cnlDb2RlID0gdGhpcy5mb3JtLmNvbnRyb2xzWydzZW5kQ291bnRyeSddLnZhbHVlO1xyXG4gICAgZGF0YS5yZWN2Q291bnRyeUNvZGUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ3JlY2VpdmVDb3VudHJ5J10udmFsdWU7XHJcbiAgICBkYXRhLmJ1c2luZXNzUGFydG5lckNvZGUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ2NsaWVudCddLnZhbHVlO1xyXG4gICAgZGF0YS50cmFuc2FjdGlvblN0YXR1cyA9IHRoaXMuZm9ybS5jb250cm9sc1sndHJhbnNhY3Rpb25TdGF0dXMnXS52YWx1ZTtcclxuICAgIGRhdGEudHJhbnNhY3Rpb25UeXBlID0gdGhpcy5mb3JtLmNvbnRyb2xzWydwcm9kdWN0J10udmFsdWU7XHJcbiAgICBkYXRhLmJyYW5jaENvZGUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ2JyYW5jaCddLnZhbHVlO1xyXG4gICAgZGF0YS5wYXlvdXRDdXJyZW5jeSA9IHRoaXMuZm9ybS5jb250cm9sc1sncmVjZWl2ZUN1cnJlbmN5J10udmFsdWU7XHJcbiAgICBkYXRhLmNvbXBhbnlDb2RlID0gXCJCSFwiO1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBvbkdyaWRSZWFkeShwYXJhbXM6IEdyaWRSZWFkeUV2ZW50KSB7XHJcbiAgICBwYXJhbXMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIHRoaXMuZ3JpZEFQaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmdyaWRDb2x1bW5BcGkgPSBwYXJhbXMuY29sdW1uQXBpO1xyXG4gIH1cclxuXHJcbiAgb25HcmlkU2l6ZUNoYW5nZWQocGFyYW1zOiBhbnkpIHtcclxuICAgIHBhcmFtcy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIGNoYW5nZUxpbWl0KGxpbWl0OiBhbnksIGluZGV4OiBudW1iZXIsIGtleTogc3RyaW5nKSB7XHJcbiAgICBpZiAobGltaXQgIT0gXCJBbGxcIikge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25BcnJheVtpbmRleF0gPSBsaW1pdDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbkFycmF5W2luZGV4XSA9IHRoaXMuZmlsdGVyZWREYXRhW2tleV0ubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaG93UmFuZ2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZUV4cG9ydCgpIHtcclxuICAgIGNvbnN0IGRhdGE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmdyaWRBUGkuZm9yRWFjaE5vZGUobm9kZSA9PiBkYXRhLnB1c2gobm9kZS5kYXRhKSlcclxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZpbHRlcmVkRGF0YSkubGVuZ3RoID09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ2V4Y2VsJzpcclxuICAgICAgICB0aGlzLmV4cG9ydEV4Y2VsKGRhdGEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwZGYnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0UERGKGRhdGEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjc3YnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0Q1NWKGRhdGEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGFsZXJ0KCdQbGVhc2Ugc2VsZWN0IGFuIGV4cG9ydCBmb3JtYXQuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVXRpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBwcml2YXRlIGxvYWRJbWFnZUFzQmFzZTY0KGltYWdlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICBpbWcuY3Jvc3NPcmlnaW4gPSAnYW5vbnltb3VzJztcclxuICAgICAgaW1nLnNyYyA9IGltYWdlUGF0aDtcclxuXHJcbiAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgLy8gU2NhbGUgdXAgY2FudmFzIHJlc29sdXRpb24gKDJ4IG9yIG1vcmUpXHJcbiAgICAgICAgY29uc3Qgc2NhbGUgPSAyO1xyXG4gICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aCAqIHNjYWxlO1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0ICogc2NhbGU7XHJcblxyXG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIGlmIChjdHgpIHtcclxuICAgICAgICAgIGN0eC5zY2FsZShzY2FsZSwgc2NhbGUpOyAvLyBEcmF3IGltYWdlIGF0IGhpZ2hlciBxdWFsaXR5XHJcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgICBjb25zdCBiYXNlNjQgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnLCAxLjApOyAvLyAxLjAgPSBoaWdoZXN0IHF1YWxpdHlcclxuICAgICAgICAgIHJlc29sdmUoYmFzZTY0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KCdGYWlsZWQgdG8gZ2V0IGNhbnZhcyBjb250ZXh0LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCdGYWlsZWQgdG8gbG9hZCBpbWFnZTogJyArIGltYWdlUGF0aCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4cG9ydFBERihkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbmN5RmllbGRzID0gWydwYXlvdXRBbW91bnQnLCAncGF5aW5BbW91bnQnLCAndG90YWxQYXlpbkFtb3VudCcsICd0YXgnLCAndHJhbnNhY3Rpb25Db21taXNzaW9uQW1vdW50J107XHJcbiAgICBkYXRhID0gT2JqZWN0LnZhbHVlcyh0aGlzLmRhdGFNYXApWzBdO1xyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHtcclxuICAgICAgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLFxyXG4gICAgICB1bml0OiAnbW0nLFxyXG4gICAgICBmb3JtYXQ6IFs0MDAsIDIxMF1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuXHJcbiAgICAvL1RpdGxlXHJcbiAgICBjb25zdCB0aXRsZSA9IGBCcmFuY2ggQWN0aXZpdHkgU2VuZGA7XHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTUpO1xyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBjb25zdCB0ZXh0V2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKHRpdGxlKTtcclxuICAgIGRvYy50ZXh0KHRpdGxlLCBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLyAyLCAxNSwgeyBhbGlnbjogJ2NlbnRlcicgfSk7XHJcblxyXG4gICAgLy9BZGQgSW1hZ2VcclxuICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgZG9jLmFkZEltYWdlKHRoaXMubG9nb0Jhc2U2NCwgJ1BORycsIDE1LCA1LCAyNSwgMjApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vSW5mbyBibG9ja1xyXG4gICAgY29uc3QgaW5mb1kgPSAzMDtcclxuICAgIGNvbnN0IGxlZnRNYXJnaW4gPSAxNTtcclxuICAgIGNvbnN0IGxpbmVIZWlnaHQgPSA3O1xyXG4gICAgY29uc3QgaW5mb0xpbmVzID0gW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyIEFuZCBUaW1lOicsIHRoaXMudXNlcl0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCBmb3JtYXREYXRlKHRoaXMucmVwb3J0RGF0ZSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpXVxyXG4gICAgICAvLyBbJ1JlcG9ydCBQZXJpb2Q6JywgYCR7dGhpcy5mcm9tRGF0ZX0gLSAke3RoaXMudG9EYXRlfWBdXHJcbiAgICBdXHJcblxyXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgIGluZm9MaW5lcy5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCB5ID0gaW5mb1kgKyBpICogbGluZUhlaWdodDtcclxuICAgICAgLy8gRHJhdyBsYWJlbCBpbiBib2xkXHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChsYWJlbCwgbGVmdE1hcmdpbiwgeSk7XHJcblxyXG4gICAgICAvLyBEcmF3IHZhbHVlIGluIG5vcm1hbCBmb250IHJpZ2h0IGFmdGVyIGxhYmVsXHJcbiAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSBkb2MuZ2V0VGV4dFdpZHRoKGxhYmVsICsgJyAnKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdub3JtYWwnKTtcclxuICAgICAgZG9jLnRleHQodmFsdWUsIGxlZnRNYXJnaW4gKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkQ29sdW1ucyA9IHRoaXMuY29sdW1uRGVmcy5maWx0ZXIoY29sID0+XHJcbiAgICAgICEoY29sLmhlYWRlck5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NyLiBubycpIHx8IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnc3JubycpIHx8IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnc2VyaWFsJykpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFByZXBhcmUgaGVhZGVycyB3aXRoIFNyIE5vXHJcbiAgICBjb25zdCBoZWFkZXJzID0gWydTciBObycsIC4uLmZpbHRlcmVkQ29sdW1ucy5tYXAoY29sID0+IGNvbC5oZWFkZXJOYW1lIHx8IGNvbC5maWVsZCEpXTtcclxuXHJcbiAgICBsZXQgUm93czogYW55W10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHJlcG9ydHNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YU1hcCkpIHtcclxuICAgICAgUm93cy5wdXNoKFt7IGNvbnRlbnQ6IGtleSwgY29sU3BhbjogMTUgfV0pO1xyXG4gICAgICBjb25zdCByb3dzID0gcmVwb3J0cy5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCByb3dEYXRhID0gZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gcm93W2NvbC5maWVsZCFdO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgJiYgdmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUm93cy5wdXNoKFtpbmRleCArIDEsIC4uLnJvd0RhdGFdKTtcclxuICAgICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93RGF0YV07XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBSb3dzLnB1c2gocm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHJlcGFyZSByb3dzIHdpdGggU3IgTm9cclxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLm1hcCgocm93LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCByb3dEYXRhID0gZmlsdGVyZWRDb2x1bW5zLm1hcChjb2wgPT4ge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tjb2wuZmllbGQhXTtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93RGF0YV07XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBkeW5hbWljIGNvbHVtbiBzdHlsZXMgZm9yIGF1dG8td2lkdGhcclxuICAgIGNvbnN0IGNvbHVtblN0eWxlczogeyBba2V5OiBudW1iZXJdOiBhbnkgfSA9IHt9O1xyXG4gICAgaGVhZGVycy5mb3JFYWNoKChfLCBpKSA9PiB7XHJcbiAgICAgIGNvbHVtblN0eWxlc1tpXSA9IHsgY2VsbFdpZHRoOiAnYXV0bycgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbHVtblN0eWxlc1syXSA9IHsgY2VsbFdpZHRoOiA0MCB9O1xyXG5cclxuICAgIC8vIFJlbmRlciBUYWJsZVxyXG4gICAgZG9jLmF1dG9UYWJsZSh7XHJcbiAgICAgIGhlYWQ6IFtoZWFkZXJzXSxcclxuICAgICAgYm9keTogUm93cyxcclxuICAgICAgc3RhcnRZOiBpbmZvWSArIGluZm9MaW5lcy5sZW5ndGggKiBsaW5lSGVpZ2h0ICsgNSxcclxuICAgICAgdGhlbWU6ICdncmlkJyxcclxuICAgICAgaGVhZFN0eWxlczoge1xyXG4gICAgICAgIGZpbGxDb2xvcjogWzIyMCwgMjIwLCAyMjBdLFxyXG4gICAgICAgIHRleHRDb2xvcjogMCxcclxuICAgICAgICBmb250U3R5bGU6ICdib2xkJyxcclxuICAgICAgICBmb250U2l6ZTogOSxcclxuICAgICAgICBoYWxpZ246ICdjZW50ZXInXHJcbiAgICAgIH0sXHJcbiAgICAgIGJkeVN0eWxlczoge1xyXG4gICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgIGZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTVdLFxyXG4gICAgICAgIHRleHRDb2xvcjogWzAsIDAsIDBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0eWxlczoge1xyXG4gICAgICAgIGNlbGxQYWRkaW5nOiAyLFxyXG4gICAgICAgIG92ZXJmbG93OiAnbGluZWJyZWFrJyxcclxuICAgICAgICBtaW5DZWxsSGVpZ2h0OiA2XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbHVtblN0eWxlczogY29sdW1uU3R5bGVzXHJcbiAgICB9KTtcclxuICAgIGRvYy5zYXZlKFwiQnJhbmNoLUFjdGl2aXR5LVNlbmQtUmVwb3J0LnBkZlwiKVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0RXhjZWwoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsncGF5b3V0QW1vdW50JywgJ3BheWluQW1vdW50JywgJ3RvdGFsUGF5aW5BbW91bnQnLCAndGF4JywgJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbkFtb3VudCddO1xyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xyXG4gICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdCcmFuY2gtQWN0aXZpdHktU2VuZC1SZXBvcnQnKTtcclxuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMuY29sdW1uRGVmcy5sZW5ndGg7XHJcblxyXG4gICAgLy8gVGl0bGUgUm93XHJcbiAgICBjb25zdCB0aXRsZVJvdyA9IHdvcmtzaGVldC5hZGRSb3coW1wiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIl0pO1xyXG4gICAgdGl0bGVSb3cuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTQgfTtcclxuICAgIHRpdGxlUm93LmhlaWdodCA9IDYwO1xyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEEke3RpdGxlUm93Lm51bWJlcn06JHtTdHJpbmcuZnJvbUNoYXJDb2RlKDY0ICsgdG90YWxDb2x1bW5zKX0ke3RpdGxlUm93Lm51bWJlcn1gKTtcclxuICAgIC8vQ2VudGVyIGFsaWduIHRoZSB0aXRsZVxyXG4gICAgY29uc3QgbWFzdGVyQ2VsbCA9IHdvcmtzaGVldC5nZXRDZWxsKGBBJHt0aXRsZVJvdy5udW1iZXJ9YCk7XHJcbiAgICBtYXN0ZXJDZWxsLmFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogJ2NlbnRlcicsIHZlcnRpY2FsOiAnbWlkZGxlJyB9O1xyXG5cclxuICAgIC8vIEFkZCBpbWFnZSBpZiBhdmFpbGFibGVcclxuICAgIGlmICh0aGlzLmxvZ29CYXNlNjQpIHtcclxuICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHRoaXMubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgICBiYXNlNjQ6IGJhc2U2NERhdGEsXHJcbiAgICAgICAgZXh0ZW5zaW9uOiAncG5nJyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBQbGFjZSBpbWFnZSBhdCB0b3AtbGVmdCAoZS5nLiwgQTE6QzQpXHJcbiAgICAgIHdvcmtzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XHJcbiAgICAgICAgdGw6IHsgY29sOiAwLCByb3c6IDAgfSxcclxuICAgICAgICBleHQ6IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiA1MCB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvL01ldGEgRGF0YVxyXG4gICAgY29uc3QgbWV0YTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyICcsIHRoaXMudXNlcl0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCBmb3JtYXREYXRlKHRoaXMucmVwb3J0RGF0ZSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpXVxyXG4gICAgICAvLyBbJ1JlcG9ydCBQZXJpb2QnLCBgJHt0aGlzLmZyb21EYXRlfSAtICR7dGhpcy50b0RhdGV9YF1cclxuICAgIF1cclxuXHJcbiAgICBtZXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5hZGRSb3coW2xhYmVsLCB2YWx1ZV0pO1xyXG4gICAgICAvL0JvbGQgdGhlIGtleSBjb2x1bW5cclxuICAgICAgY29uc3QgbGFiZWxDZWxsID0gcm93LmdldENlbGwoMSk7XHJcbiAgICAgIGxhYmVsQ2VsbC5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICB9KVxyXG4gICAgLy8gRm9yIEVtcHR5IFJvd1xyXG4gICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7XHJcblxyXG4gICAgLy8gQWRkIEhlYWRlciBSb3cgZm9yIERhdGEgVGFibGVcclxuICAgIGNvbnN0IGhlYWRlclJvdyA9IHdvcmtzaGVldC5hZGRSb3codGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4gY29sLmhlYWRlck5hbWUgfHwgY29sLmZpZWxkKSk7XHJcbiAgICBoZWFkZXJSb3cuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gdGhpcy5jb2x1bW5EZWZzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBoZWFkZXJSb3cuZ2V0Q2VsbChpKTtcclxuICAgICAgY2VsbC5maWxsID0ge1xyXG4gICAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcclxuICAgICAgICBwYXR0ZXJuOiAnc29saWQnLFxyXG4gICAgICAgIGZnQ29sb3I6IHsgYXJnYjogJ0Q5RDlEOScgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBoZWFkZXJSb3cuYWxpZ25tZW50ID0ge1xyXG4gICAgICB3cmFwVGV4dDogdHJ1ZSxcclxuICAgICAgdmVydGljYWw6ICd0b3AnLFxyXG4gICAgICBob3Jpem9udGFsOiAnY2VudGVyJ1xyXG4gICAgfTtcclxuICAgIGhlYWRlclJvdy5ib3JkZXIgPSB7XHJcbiAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZGF0YVN0YXJ0Um93ID0gd29ya3NoZWV0Lmxhc3RSb3chLm51bWJlciArIDE7XHJcbiAgICBjb25zdCBicmFuY2hSb3dzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHJlcG9ydHNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YU1hcCkpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0tleTonLCBrZXkpO1xyXG4gICAgICBjb25zb2xlLmxvZygnUmVwb3J0czonLCByZXBvcnRzKTtcclxuICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmFkZFJvdyhbYCR7a2V5fWBdKTtcclxuICAgICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMocm93Lm51bWJlciwgMSwgcm93Lm51bWJlciwgMTApO1xyXG4gICAgICBicmFuY2hSb3dzLnB1c2gocm93Lm51bWJlcik7XHJcbiAgICAgIC8vIEFkZCBEYXRhIFJvd3NcclxuICAgICAgcmVwb3J0cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IHJvd1tjb2wuZmllbGQhXTtcclxuICAgICAgICAgIC8vIEZvcm1hdCBjdXJyZW5jeSBmaWVsZHNcclxuICAgICAgICAgIGlmIChjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgXFx0ICR7dmFsdWV9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2YWx1ZSA/PyAnJztcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IGRhdGFSb3cgPSB3b3Jrc2hlZXQuYWRkUm93KHJvd0RhdGEpO1xyXG4gICAgICAgIGRhdGFSb3cuYm9yZGVyID0ge1xyXG4gICAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcclxuICAgICAgICAgIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXV0byBjb2x1bW4gd2lkdGggT05MWSBiYXNlZCBvbiBkYXRhIHJvd3NcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRvdGFsQ29sdW1uczsgaSsrKSB7XHJcbiAgICAgIGxldCBtYXhMZW5ndGggPSAxMDtcclxuICAgICAgZm9yIChsZXQgcm93TnVtID0gZGF0YVN0YXJ0Um93OyByb3dOdW0gPD0gd29ya3NoZWV0Lmxhc3RSb3chLm51bWJlcjsgcm93TnVtKyspIHtcclxuICAgICAgICBpZiAoYnJhbmNoUm93cy5pbmRleE9mKHggPT4geCA9PT0gcm93TnVtKSA9PT0gLTEpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjZWxsID0gd29ya3NoZWV0LmdldFJvdyhyb3dOdW0pLmdldENlbGwoaSk7XHJcbiAgICAgICAgY29uc3QgdmFsID0gY2VsbC52YWx1ZSA/IGNlbGwudmFsdWUudG9TdHJpbmcoKSA6ICcnO1xyXG4gICAgICAgIG1heExlbmd0aCA9IE1hdGgubWF4KG1heExlbmd0aCwgdmFsLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpKS53aWR0aCA9IG1heExlbmd0aCArIDI7XHJcbiAgICB9XHJcbiAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gMjA7XHJcbiAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKDMpLndpZHRoID0gMTU7XHJcbiAgICAvLyBFeHBvcnRcclxuICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKS50aGVuKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcclxuICAgICAgfSlcclxuICAgICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCAnQnJhbmNoLUFjdGl2aXR5LVNlbmQtUmVwb3J0Lnhsc3gnKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBleHBvcnRDU1YoZGF0YTogYW55W10pIHtcclxuICAgIGNvbnN0IGN1cnJlbmN5RmllbGRzID0gWydwYXlvdXRBbW91bnQnLCAncGF5aW5BbW91bnQnLCAndG90YWxQYXlpbkFtb3VudCcsICd0YXgnLCAndHJhbnNhY3Rpb25Db21taXNzaW9uQW1vdW50J107XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IFtcclxuICAgICAgWydSZXBvcnQgVGl0bGUnLCAnQnJhbmNoIEFjdGl2aXR5IFNlbmQnXSxcclxuICAgICAgWydSZXBvcnQgVGltZScsIGZvcm1hdERhdGUodGhpcy5yZXBvcnREYXRlLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyldXHJcbiAgICAgIC8vIFsnUmVwb3J0IFVzZXInLCB0aGlzLnVzZXJdXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlcmVkQ29scyA9IHRoaXMuY29sdW1uRGVmcy5maWx0ZXIoXHJcbiAgICAgIGNvbCA9PlxyXG4gICAgICAgICEoY29sLmhlYWRlck5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NyLiBubycpIHx8XHJcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NyLiBubycpKVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzID0gWydTciBObycsIC4uLmZpbHRlcmVkQ29scy5tYXAoY29sID0+IGNvbC5oZWFkZXJOYW1lIHx8IGNvbC5maWVsZCEpXTtcclxuXHJcbiAgICBsZXQgUm93czogYW55W11bXSA9IFtdXHJcbiAgICBmb3IgKGNvbnN0IFtrZXksIHJlcG9ydHNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YU1hcCkpIHtcclxuICAgICAgUm93cy5wdXNoKFtrZXldKTtcclxuICAgICAgcmVwb3J0cy5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCByb3dWYWxzID0gZmlsdGVyZWRDb2xzLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgbGV0IHYgPSByb3dbY29sLmZpZWxkIV07XHJcbiAgICAgICAgICBpZiAoY3VycmVuY3lGaWVsZHMuaW5jbHVkZXMoY29sLmZpZWxkKSAmJiB2ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdiA9IHBhcnNlRmxvYXQodikudG9GaXhlZCgzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2wuZmllbGQgPT09ICd0cmFuc2FjdGlvbk51bWJlcicgfHwgY29sLmhlYWRlck5hbWUgPT09ICdUcmFuc2FjdGlvbiBOdW1iZXInKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgXFx0ICR7dn1gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHYgPz8gJyc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUm93cy5wdXNoKFtpbmRleCArIDEsIC4uLnJvd1ZhbHNdKTtcclxuICAgICAgICByZXR1cm4gW2luZGV4ICsgMSwgLi4ucm93VmFsc107XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYW9hOiBhbnlbXVtdID0gW1xyXG4gICAgICAuLi5tZXRhZGF0YSxcclxuICAgICAgW10sICAgICAgLy8gYmxhbmsgcm93IGZvciBzZXBhcmF0aW9uXHJcbiAgICAgIGhlYWRlcnMsXHJcbiAgICAgIC4uLlJvd3NcclxuICAgIF07XHJcblxyXG4gICAgLy8gY29udmVydCB0byB3b3Jrc2hlZXQgJiBDU1ZcclxuICAgIGNvbnN0IHdzID0gWExTWC51dGlscy5hb2FfdG9fc2hlZXQoYW9hKTtcclxuICAgIGNvbnN0IGNzdiA9IFhMU1gudXRpbHMuc2hlZXRfdG9fY3N2KHdzLCB7XHJcbiAgICAgIEZTOiAnLCcsIFJTOiAnXFxuJywgYmxhbmtyb3dzOiBmYWxzZSwgZm9yY2VRdW90ZXM6IGZhbHNlXHJcbiAgICB9IGFzIGFueSk7XHJcblxyXG4gICAgLy8gdHJpZ2dlciBkb3dubG9hZFxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XHJcbiAgICBzYXZlQXMoYmxvYiwgJ0JyYW5jaC1BY3Rpdml0eS1TZW5kLVJlcG9ydC5jc3YnKTtcclxuICB9XHJcblxyXG4gIC8vIHNob3dTdGF0dXMoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gIC8vICAgICB0aGlzLnNob3dTdGF0dXNEcm9wZG93biA9ICF0aGlzLnNob3dTdGF0dXNEcm9wZG93bjtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2VsZWN0U3RhdHVzKGV2ZW50OiBFdmVudCkge1xyXG4gIC8vICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgLy8gICB0aGlzLnN0YXR1cyA9IFtdO1xyXG4gIC8vICAgLy8gdGhpcy5zdGF0dXMgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJzZWxlY3RlZFN0YXR1c1wiXS52YWx1ZS5zcGxpdChcIixcIik7XHJcbiAgLy8gICB0aGlzLnNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gIC8vICAgaWYgKHRhcmdldC5jaGVja2VkKSB7XHJcbiAgLy8gICAgIHRoaXMubXlTdGF0dXMucHVzaChuZXcgRm9ybUNvbnRyb2wodGFyZ2V0LnZhbHVlKSk7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMubXlTdGF0dXMpO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgY29uc3QgaW5kZXggPSB0aGlzLm15U3RhdHVzLmNvbnRyb2xzXHJcbiAgLy8gICAgICAgLmZpbmRJbmRleChjdHJsID0+IGN0cmwudmFsdWUgPT09IHRhcmdldC52YWx1ZSk7XHJcbiAgLy8gICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAvLyAgICAgICB0aGlzLm15U3RhdHVzLnJlbW92ZUF0KGluZGV4KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5teVN0YXR1cy5jb250cm9scy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICB0aGlzLnN0YXR1cy5wdXNoKHRoaXMubXlTdGF0dXMuY29udHJvbHNbaV0udmFsdWUpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgY29uc29sZS5sb2codGhpcy5teVN0YXR1cyk7XHJcbiAgLy8gICB0aGlzLmZvcm0uc2V0Q29udHJvbCgndHJhbnNhY3Rpb25TdGF0dXMnLCBuZXcgRm9ybUFycmF5KFtuZXcgRm9ybUNvbnRyb2wodGFyZ2V0LnZhbHVlKV0pKTtcclxuICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1tcInNlbGVjdGVkU3RhdHVzXCJdLnNldFZhbHVlKHRoaXMuc3RhdHVzLmpvaW4oXCIsXCIpKTtcclxuICAvLyAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybS5jb250cm9sc1tcInNlbGVjdGVkU3RhdHVzXCJdLnZhbHVlKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNlbGVjdEFsbFN0YXR1cyhldmVudDogRXZlbnQpIHtcclxuICAvLyAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIC8vICAgdGhpcy5zdGF0dXMgPSBbXTtcclxuICAvLyAgIHRoaXMuc2VsZWN0QWxsID0gIXRoaXMuc2VsZWN0QWxsO1xyXG4gIC8vICAgaWYgKHRhcmdldC5jaGVja2VkKSB7XHJcbiAgLy8gICAgIGZvciAobGV0IHMgb2YgdGhpcy5wYXJhbXM/LnRyYW5zYWN0aW9uU3RhdHVzVHlwZXMpIHtcclxuICAvLyAgICAgICB0aGlzLm15U3RhdHVzLnB1c2gobmV3IEZvcm1Db250cm9sKHMudHJhbnNhY3Rpb25TdGF0dXMpKTtcclxuICAvLyAgICAgICB0aGlzLnN0YXR1cy5wdXNoKHMudHJhbnNhY3Rpb25TdGF0dXMpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLm15U3RhdHVzLmNsZWFyKCk7XHJcbiAgLy8gICAgIHRoaXMuc3RhdHVzID0gW11cclxuICAvLyAgIH1cclxuICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1tcInNlbGVjdGVkU3RhdHVzXCJdLnNldFZhbHVlKHRoaXMuc3RhdHVzLmpvaW4oXCIsXCIpKTtcclxuICAvLyAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybS5jb250cm9sc1tcInNlbGVjdGVkU3RhdHVzXCJdLnZhbHVlKTtcclxuICAvLyB9XHJcblxyXG4gIC8vQ3VycmVuY3kgRHJvcGRvd25cclxuICAvLyB0b2dnbGVDdXJyZW5jeURyb3Bkb3duKCkge1xyXG4gIC8vICAgdGhpcy5zaG93Q3VycmVuY3kgPSAhdGhpcy5zaG93Q3VycmVuY3k7XHJcbiAgLy8gfVxyXG4gIC8vIHNlbGVjdEN1cnJlbmN5KGN1cnJlbmN5Q29kZTogc3RyaW5nKSB7XHJcbiAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbXCJyZWNlaXZlQ3VycmVuY3lcIl0uc2V0VmFsdWUoY3VycmVuY3lDb2RlKTtcclxuICAvLyAgIHRoaXMuc2hvd0N1cnJlbmN5ID0gZmFsc2U7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBnZXRTZWxlY3RlZEN1cnJlbmN5RGlzcGxheSgpOiBzdHJpbmcge1xyXG4gIC8vICAgY29uc3QgY3VycmVuY3kgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJyZWNlaXZlQ3VycmVuY3lcIl0udmFsdWU7XHJcbiAgLy8gICBpZiAoY3VycmVuY3kgJiYgdGhpcy5wYXJhbXM/LmN1cnJlbmNpZXMpIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMucGFyYW1zLmN1cnJlbmNpZXNbdGhpcy5wYXJhbXMuY3VycmVuY2llcy5maW5kSW5kZXgoYyA9PiBjLmN1cnJlbmN5Q29kZSA9PSBjdXJyZW5jeSldLmN1cnJlbmN5O1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW1wicmVjZWl2ZUN1cnJlbmN5XCJdLnNldFZhbHVlKFwiQWxsXCIpO1xyXG4gIC8vICAgICByZXR1cm4gXCJBbGxcIjtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vUHJvZHVjdCBEcm9wZG93blxyXG4gIC8vIHRvZ2dsZVByb2R1Y3REcm9wZG93bigpIHtcclxuICAvLyAgIHRoaXMuc2hvd1Byb2R1Y3QgPSAhdGhpcy5zaG93UHJvZHVjdDtcclxuICAvLyB9XHJcbiAgLy8gc2VsZWN0UHJvZHVjdChwcm9kdWN0Q29kZTogc3RyaW5nKSB7XHJcbiAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbXCJwcm9kdWN0XCJdLnNldFZhbHVlKHByb2R1Y3RDb2RlKTtcclxuICAvLyAgIHRoaXMuc2hvd1Byb2R1Y3QgPSBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldFNlbGVjdGVkUHJvZHVjdERpc3BsYXkoKTogc3RyaW5nIHtcclxuICAvLyAgIGNvbnN0IHByb2R1Y3QgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJwcm9kdWN0XCJdLnZhbHVlO1xyXG4gIC8vICAgaWYgKHByb2R1Y3QgJiYgdGhpcy5wYXJhbXM/LnRyYW5zYWN0aW9uUHJvZHVjdFR5cGVzKSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLnBhcmFtcy50cmFuc2FjdGlvblByb2R1Y3RUeXBlc1t0aGlzLnBhcmFtcy50cmFuc2FjdGlvblByb2R1Y3RUeXBlcy5maW5kSW5kZXgocCA9PiBwLnByb2R1Y3RDb2RlID09IHByb2R1Y3QpXS5uYW1lO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW1wicHJvZHVjdFwiXS5zZXRWYWx1ZShcIkFsbFwiKTtcclxuICAvLyAgICAgcmV0dXJuIFwiQWxsXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvL1NlbmRDb3VudHJ5IERyb3Bkb3duXHJcbiAgLy8gdG9nZ2xlU2VuZENvdW50cnlEcm9wZG93bigpIHtcclxuICAvLyAgIHRoaXMuc2hvd1NlbmRDb3VudHJ5ID0gIXRoaXMuc2hvd1NlbmRDb3VudHJ5O1xyXG4gIC8vIH1cclxuICAvLyBzZWxlY3RTZW5kQ291bnRyeShjb3VudHJ5Q29kZTogYW55KSB7XHJcbiAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbXCJzZW5kQ291bnRyeVwiXS5zZXRWYWx1ZShjb3VudHJ5Q29kZSk7XHJcbiAgLy8gICB0aGlzLnNob3dTZW5kQ291bnRyeSA9IGZhbHNlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRTZW5kQ291bnRyeURpc3BsYXkoKTogc3RyaW5nIHtcclxuICAvLyAgIGNvbnN0IGNvdW50cnkgPSB0aGlzLmZvcm0uY29udHJvbHNbXCJzZW5kQ291bnRyeVwiXS52YWx1ZTtcclxuICAvLyAgIGlmIChjb3VudHJ5ICYmIHRoaXMucGFyYW1zPy5jb3VudHJpZXMpIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMucGFyYW1zLmNvdW50cmllc1t0aGlzLnBhcmFtcy5jb3VudHJpZXMuZmluZEluZGV4KGMgPT4gYy5jb3VudHJ5Q29kZSA9PSBjb3VudHJ5KV0uY291bnRyeTtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMuZm9ybS5jb250cm9sc1tcInNlbmRDb3VudHJ5XCJdLnNldFZhbHVlKFwiQWxsXCIpO1xyXG4gIC8vICAgICByZXR1cm4gXCJBbGxcIjtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vUmVjZWl2ZUNvdW50cnkgRHJvcGRvd25cclxuICAvLyB0b2dnbGVSZWNlaXZlQ291bnRyeSgpIHtcclxuICAvLyAgIHRoaXMuc2hvd1JlY2VpdmVDb3VudHJ5ID0gIXRoaXMuc2hvd1JlY2VpdmVDb3VudHJ5O1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2VsZWN0UmVjZWl2ZUNvdW50cnkoY291bnRyeUNvZGU6IHN0cmluZykge1xyXG4gIC8vICAgdGhpcy5mb3JtLmNvbnRyb2xzW1wicmVjZWl2ZUNvdW50cnlcIl0uc2V0VmFsdWUoY291bnRyeUNvZGUpO1xyXG4gIC8vICAgdGhpcy5zaG93UmVjZWl2ZUNvdW50cnkgPSBmYWxzZTtcclxuICAvLyB9XHJcblxyXG4gIC8vIGdldFNlbGVjdGVkUmVjZWl2ZUNvdW50cnlEaXNwbGF5KCk6IHN0cmluZyB7XHJcbiAgLy8gICBjb25zdCBjb3VudHJ5ID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wicmVjZWl2ZUNvdW50cnlcIl0udmFsdWU7XHJcbiAgLy8gICBpZiAoY291bnRyeSAmJiB0aGlzLnBhcmFtcz8uY291bnRyaWVzKSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLnBhcmFtcy5jb3VudHJpZXNbdGhpcy5wYXJhbXMuY291bnRyaWVzLmZpbmRJbmRleChjID0+IGMuY291bnRyeUNvZGUgPT0gY291bnRyeSldLmNvdW50cnk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLmZvcm0uY29udHJvbHNbXCJyZWNlaXZlQ291bnRyeVwiXS5zZXRWYWx1ZShcIkFsbFwiKTtcclxuICAvLyAgICAgcmV0dXJuIFwiQWxsXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvL0NsaWVudHMgRHJvcGRvd25cclxuICAvLyB0b2dnbGVDbGllbnRzKCkge1xyXG4gIC8vICAgdGhpcy5zaG93Q2xpZW50cyA9ICF0aGlzLnNob3dDbGllbnRzO1xyXG4gIC8vIH1cclxuXHJcbiAgc2VsZWN0Q2xpZW50KGNsaWVudDogYW55KSB7XHJcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbXCJjbGllbnRcIl0uc2V0VmFsdWUoY2xpZW50KTtcclxuICAgIHRoaXMuZm9ybS5jb250cm9sc1tcImJyYW5jaFwiXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMub25BZ2VudFNlbGVjdGVkKGNsaWVudCk7XHJcbiAgICB0aGlzLnNob3dDbGllbnRzID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsaWVudFNlbGVjdGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIGdldFNlbGVjdGVkQ2xpZW50KCk6IHN0cmluZyB7XHJcbiAgLy8gICBsZXQgY2xpZW50ID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiY2xpZW50XCJdLnZhbHVlO1xyXG4gIC8vICAgLy8gaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2Zvc3NpbHVzZXJuYW1lJykpIHtcclxuXHJcbiAgLy8gICAvLyB9IGVsc2Uge1xyXG4gIC8vICAgLy8gICBpZighY2xpZW50ICYmIHRoaXMuY2xpZW50cyl7XHJcbiAgLy8gICAvLyAgICAgdGhpcy5zZWxlY3RDbGllbnQodGhpcy5jbGllbnRzWzBdLmNvZGUpO1xyXG4gIC8vICAgLy8gICB9XHJcbiAgLy8gICAvLyB9XHJcbiAgLy8gICBpZiAoY2xpZW50KSB7XHJcbiAgLy8gICAgIHJldHVybiB0aGlzLmNsaWVudHNbdGhpcy5jbGllbnRzLmZpbmRJbmRleChjID0+IGMuY29kZSA9PSBjbGllbnQpXS5hZ2VudDtcclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiBcIlNlbGVjdCBDbGllbnRcIjtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIC8vQnJhbmNoIERyb3Bkb3duXHJcbiAgLy8gdG9nZ2xlQnJhbmNoKCkge1xyXG4gIC8vICAgdGhpcy5zaG93QnJhbmNoID0gIXRoaXMuc2hvd0JyYW5jaDtcclxuICAvLyB9XHJcblxyXG4gIC8vIHNlbGVjdEJyYW5jaChicmFuY2hDb2RlOiBhbnkpIHtcclxuICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1tcImJyYW5jaFwiXS5zZXRWYWx1ZShicmFuY2hDb2RlKTtcclxuICAvLyAgIHRoaXMuc2hvd0JyYW5jaCA9IGZhbHNlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRCcmFuY2goKTogc3RyaW5nIHtcclxuICAvLyAgIGNvbnN0IGJyYW5jaCA9IHRoaXMuZm9ybS5jb250cm9sc1tcImJyYW5jaFwiXS52YWx1ZTtcclxuICAvLyAgIGlmIChicmFuY2ggJiYgdGhpcy5jbGllbnRCcmFuY2hlcykge1xyXG4gIC8vICAgICByZXR1cm4gdGhpcy5jbGllbnRCcmFuY2hlc1t0aGlzLmNsaWVudEJyYW5jaGVzLmZpbmRJbmRleChiID0+IGIuYnJhbmNoQ29kZSA9PSBicmFuY2gpXS5idXNpbmVzc1BhcnRuZXJCcmFuY2g7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICByZXR1cm4gXCJTZWxlY3QgQnJhbmNoXCI7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvL1N0YXR1cyBEcm9wZG93blxyXG4gIC8vIHRvZ2dsZVN0YXR1c0Ryb3Bkb3duKCkge1xyXG4gIC8vICAgdGhpcy5zaG93U3RhdHVzRHJvcGRvd24gPSAhdGhpcy5zaG93U3RhdHVzRHJvcGRvd247XHJcbiAgLy8gfVxyXG5cclxuICAvLyBjbGVhckVycm9yKCkge1xyXG4gIC8vICAgdGhpcy5zaG93RXJyb3IgPSBmYWxzZTtcclxuICAvLyB9XHJcbiAgLy8gY2xlYXJNZXNzYWdlKCkge1xyXG4gIC8vICAgdGhpcy5zaG93TWVzc2FnZSA9IGZhbHNlO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZGF0ZUNoYW5nZSh0eXBlOiBzdHJpbmcpIHtcclxuICAvLyAgIGlmICh0eXBlID09PSBcImZyb21EYXRlXCIpIHtcclxuICAvLyAgICAgdGhpcy5kaXNhYmxlVG9EYXRlID0gdHJ1ZTtcclxuICAvLyAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW1wiZnJvbURhdGVcIl0uZW5hYmxlKCk7XHJcbiAgLy8gICAgIC8vIHRoaXMuZm9ybS5jb250cm9sc1tcImZyb21EYXRlXCJdLnNldFZhbHVlKHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm0uY29udHJvbHNbXCJmcm9tRGF0ZVwiXS52YWx1ZSkpO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgaWYgKHR5cGUgPT09IFwidG9EYXRlXCIpIHtcclxuICAvLyAgICAgLy8gdGhpcy5mb3JtLmNvbnRyb2xzW1widG9EYXRlXCJdLnNldFZhbHVlKHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm0uY29udHJvbHNbXCJ0b0RhdGVcIl0udmFsdWUpKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBmb3JtYXREYXRlKHBhcmFtczogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBmb3JtYXREYXRlKG5ldyBEYXRlKHBhcmFtcy52YWx1ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyk7XHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZUJyYW5jaFBhZ2luYXRpb24oYnJhbmNoSW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVCcmFuY2ggPSBicmFuY2hJbmRleDtcclxuICAgIHRoaXMuc2hvd1JhbmdlID0gIXRoaXMuc2hvd1JhbmdlO1xyXG4gIH1cclxuXHJcbiAgY3VycmVuY3lGb3JtYXR0ZXIocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHBhcmFtcy52YWx1ZSA9PSBudWxsIHx8IHBhcmFtcy52YWx1ZSA9PT0gJycpIHJldHVybiAnJztcclxuICAgIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQocGFyYW1zLnZhbHVlKTtcclxuICAgIGlmIChpc05hTihudW1iZXIpKSByZXR1cm4gcGFyYW1zLnZhbHVlO1xyXG4gICAgcmV0dXJuIG51bWJlci50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7XHJcbiAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMyxcclxuICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vRGF0ZSBQaWNsZXJcclxuICAvLyBvbkRhdGVDaGFuZ2VGcm9tRGF0ZShldmVudDogRXZlbnQpIHtcclxuICAvLyAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgLy8gICBjb25zdCBzZWxlY3RlZERhdGUgPSBpbnB1dC52YWx1ZTtcclxuICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1tcImZyb21EYXRlXCJdLnNldFZhbHVlKGZvcm1hdERhdGUobmV3IERhdGUoc2VsZWN0ZWREYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBvbkRhdGVDaGFuZ2VUb0RhdGUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gaW5wdXQudmFsdWU7XHJcbiAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbXCJ0b0RhdGVcIl0uc2V0VmFsdWUoZm9ybWF0RGF0ZShuZXcgRGF0ZShzZWxlY3RlZERhdGUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpKTtcclxuICAvLyB9XHJcblxyXG4gIC8vIG9uRW50ZXJLZXkoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBrZXlib2FyZEV2ZW50ID0gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAvLyAgIGtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgLy8gICBpZiAoa2V5Ym9hcmRFdmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gIC8vICAgICBrZXlib2FyZEV2ZW50LnRhcmdldC5ibHVyKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBmcm9tRGF0ZUNoYW5nZSgpIHtcclxuICAvLyAgIGNvbnN0IG1zUGVyRGF5ID0gMTAwMCAqIDYwICogNjAgKiAyNDtcclxuICAvLyAgIGNvbnN0IGZkID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiZnJvbURhdGVcIl0udmFsdWU7XHJcbiAgLy8gICBjb25zdCB0ZCA9IHRoaXMuZm9ybS5jb250cm9sc1tcInRvRGF0ZVwiXS52YWx1ZTtcclxuICAvLyAgIGNvbnN0IGZyb20gPSBuZXcgRGF0ZShmZCk7XHJcbiAgLy8gICBjb25zdCB0byA9IG5ldyBEYXRlKHRkKTtcclxuICAvLyAgIGNvbnN0IGRpZmZlcmVuY2VJbkRheXMgPSBNYXRoLmZsb29yKCh0bz8uZ2V0VGltZSgpIC0gZnJvbT8uZ2V0VGltZSgpKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcbiAgLy8gICBpZiAoZGlmZmVyZW5jZUluRGF5cyA+IDMxKSB7XHJcbiAgLy8gICAgIC8vIFNldCB0b0RhdGUgdG8gZnJvbURhdGUgKyAzMSBkYXlzXHJcbiAgLy8gICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShmcm9tLmdldFRpbWUoKSArIDMxICogbXNQZXJEYXkpO1xyXG4gIC8vICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3RvRGF0ZSddPy5wYXRjaFZhbHVlKGQpO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyB9XHJcblxyXG4gIC8vIHRvRGF0ZUNoYW5nZSgpIHtcclxuICAvLyAgIGNvbnN0IG1zUGVyRGF5ID0gMTAwMCAqIDYwICogNjAgKiAyNDtcclxuICAvLyAgIGNvbnN0IGZkID0gdGhpcy5mb3JtLmNvbnRyb2xzW1wiZnJvbURhdGVcIl0udmFsdWU7XHJcbiAgLy8gICBjb25zdCB0ZCA9IHRoaXMuZm9ybS5jb250cm9sc1tcInRvRGF0ZVwiXS52YWx1ZTtcclxuICAvLyAgIGNvbnN0IGZyb20gPSBuZXcgRGF0ZShmZCk7XHJcbiAgLy8gICBjb25zdCB0byA9IG5ldyBEYXRlKHRkKTtcclxuICAvLyAgIGNvbnN0IGRpZmZlcmVuY2VJbkRheXMgPSBNYXRoLmZsb29yKCh0bz8uZ2V0VGltZSgpIC0gZnJvbT8uZ2V0VGltZSgpKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XHJcbiAgLy8gICBpZiAoZGlmZmVyZW5jZUluRGF5cyA+IDMxKSB7XHJcbiAgLy8gICAgIC8vIFNldCB0b0RhdGUgdG8gZnJvbURhdGUgKyAzMSBkYXlzXHJcbiAgLy8gICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShmcm9tLmdldFRpbWUoKSArIDMxICogbXNQZXJEYXkpXHJcbiAgLy8gICAgIHRoaXMuZm9ybS5jb250cm9sc1snZnJvbURhdGUnXT8ucGF0Y2hWYWx1ZShkKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpOiB2b2lkIHtcclxuICB0aGlzLmZvcm0uZ2V0KCdmcm9tRGF0ZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGZyb21EYXRlU3RyID0+IHtcclxuICAgIGNvbnN0IHRvRGF0ZUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCd0b0RhdGUnKTtcclxuICAgIGNvbnN0IHRvRGF0ZVN0ciA9IHRvRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgaWYgKCFmcm9tRGF0ZVN0ciB8fCAhdG9EYXRlU3RyKSByZXR1cm47XHJcbiAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlU3RyKTtcclxuICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZVN0cik7XHJcbiBcclxuICAgIGNvbnN0IG1heFRvRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlKTtcclxuICAgIG1heFRvRGF0ZT8uc2V0RGF0ZShmcm9tRGF0ZS5nZXREYXRlKCkgKyAzMSk7XHJcbiAgICBpZiAodG9EYXRlID4gbWF4VG9EYXRlKSB7XHJcbiAgICAgIHRvRGF0ZUNvbnRyb2w/LnBhdGNoVmFsdWUobWF4VG9EYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdKTtcclxuICAgIH1cclxuICB9KTtcclxuIFxyXG4gIHRoaXMuZm9ybS5nZXQoJ3RvRGF0ZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHRvRGF0ZVN0ciA9PiB7XHJcbiAgICBjb25zdCBmcm9tRGF0ZUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdmcm9tRGF0ZScpO1xyXG4gICAgY29uc3QgZnJvbURhdGVTdHIgPSBmcm9tRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgaWYgKCF0b0RhdGVTdHIgfHwgIWZyb21EYXRlU3RyKSByZXR1cm47XHJcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh0b0RhdGVTdHIpO1xyXG4gICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZVN0cik7XHJcbiBcclxuICAgIGNvbnN0IG1pbkZyb21EYXRlID0gbmV3IERhdGUodG9EYXRlKTtcclxuICAgIG1pbkZyb21EYXRlPy5zZXREYXRlKHRvRGF0ZS5nZXREYXRlKCkgLSAzMSk7XHJcbiAgICBpZiAoZnJvbURhdGUgPCBtaW5Gcm9tRGF0ZSkge1xyXG4gICAgICBmcm9tRGF0ZUNvbnRyb2w/LnBhdGNoVmFsdWUobWluRnJvbURhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5wcml2YXRlIHN1YnNjcmliZVRvQ2xpZW50Q2hhbmdlKCk6IHZvaWQge1xyXG4gIHRoaXMuZm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICBpZih2YWwgPT09IG51bGwpe1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2JyYW5jaCddLnBhdGNoVmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuLy8gc2VhcmNoQ2xpZW50KGV2ZW50OkV2ZW50KXtcclxuLy8gICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuLy8gICBsZXQgc2VhcmNoVGV4dCA9IHRhcmdldC52YWx1ZS50cmltKCk7XHJcbi8vICAgaWYoc2VhcmNoVGV4dC5sZW5ndGg9PTApe1xyXG4vLyAgICAgdGhpcy5jbGllbnRzID0gWy4uLnRoaXMuY2xpZW50c0RhdGFdO1xyXG4vLyAgIH1cclxuLy8gICB0aGlzLmNsaWVudHMgPSB0aGlzLmNsaWVudHNEYXRhLmZpbHRlcigoY2xpZW50KT0+e1xyXG4vLyAgICAgICBjbGllbnQ/LmFnZW50Py5pbmNsdWRlcyhzZWFyY2hUZXh0KTtcclxuLy8gICB9KVxyXG4vLyB9XHJcblxyXG5vbkNsaWVudFNlbGVjdGVkKCl7XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdjbGllbnQnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsKT0+e1xyXG4gICAgICB2YWwgPSB0aGlzLmZvcm0uZ2V0KCdjbGllbnQnKT8udmFsdWU7XHJcbiAgICAgIHRoaXMub25BZ2VudFNlbGVjdGVkKHZhbCk7XHJcbiAgICB9KVxyXG4gICAgICBcclxuICB9XHJcblxyXG59XHJcblxyXG4iLCI8c2VjdGlvbj5cclxuICA8ZGl2IGNsYXNzPVwiQnJlYWRjcnVtYlwiPlxyXG4gICAgPGgxPlJlcG9ydHM8L2gxPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJCcmVhZENydW1iQXJyb3dcIj48L3NwYW4+XHJcbiAgICA8aDIgY2xhc3M9XCJCcmVhZENydW1iQWN0aXZlXCI+QnJhbmNoIEFjdGl2aXR5IFNlbmQ8L2gyPlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBpZD1cInJlcXVlc3QtcGFyYW1zXCI+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cclxuICAgIDx0YWJsZT5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAzNiU7Ym9yZGVyLXRvcDogMDtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgcm93LWNsc1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtZGF0YVwiIGZvcj1cImNsaWVudFwiPkNsaWVudDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBpbnB1dGJveFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsaWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiY2xpZW50c1wiIGJpbmRMYWJlbD1cImFnZW50XCIgYmluZFZhbHVlPVwiY29kZVwiIGZvcm1Db250cm9sTmFtZT1cImNsaWVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT1cInt7IGl0ZW0uYWdlbnQgfX1cIiBjbGFzcz1cIm5nLW9wdGlvbi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uYWdlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIGZvcm1Db250cm9sTmFtZT1cImNsaWVudFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1vcHRpb24gKm5nRm9yPVwibGV0IGNsaWVudCBvZiBjbGllbnRzXCIgW3ZhbHVlXT1cImNsaWVudC5jb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjbGllbnQuYWdlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAyOCU7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1kYXRhXCI+RnJvbTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPiBEYXRlPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwIGlucHV0Ym94XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgI2Zyb21EYXRlSW5wdXQ9XCJuZ2JEYXRlcGlja2VyXCIgbmFtZT1cImZyb21EYXRlXCIgaWQ9XCJmcm9tRGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImZyb21EYXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cImZyb21EYXRlSW5wdXQudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgaWQ9XCJmcm9tZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZnJvbURhdGVcIj4gLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAyOCU7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLWRhdGFcIj5UbzxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPiBEYXRlPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwIGlucHV0Ym94XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxpbnB1dCBpZD1cInRvZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIHR5cGU9XCJkYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9EYXRlXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICN0b0RhdGVJbnB1dD1cIm5nYkRhdGVwaWNrZXJcIiBuYW1lPVwidG9EYXRlXCIgaWQ9XCJ0b0RhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0b0RhdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ1dHRvbiBjYWxcIiAoY2xpY2spPVwidG9EYXRlSW5wdXQudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogOCU7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1yZXBvcnRcIiAoY2xpY2spPVwib25TdWJtaXQoKVwiPlZpZXc8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciByb3ctY2xzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtZGF0YVwiIGZvcj1cImJyYW5jaFwiPkJyYW5jaDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBpbnB1dGJveFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNsaWVudEJyYW5jaGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImNsaWVudEJyYW5jaGVzXCIgYmluZExhYmVsPVwiYnVzaW5lc3NQYXJ0bmVyQnJhbmNoXCIgYmluZFZhbHVlPVwiYnJhbmNoQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmNoXCIgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT1cInt7IGl0ZW0uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoIH19XCIgY2xhc3M9XCJuZy1vcHRpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmJ1c2luZXNzUGFydG5lckJyYW5jaCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciByb3ctY2xzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtZGF0YVwiPiBTZW5kPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+IENvdW50cnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgaW5wdXRib3hcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbXNcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwicGFyYW1zLmNvdW50cmllc1wiIGJpbmRMYWJlbD1cImNvdW50cnlcIiBiaW5kVmFsdWU9XCJjb3VudHJ5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VuZENvdW50cnlcIiBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPVwie3sgaXRlbS5jb3VudHJ5IH19XCIgY2xhc3M9XCJuZy1vcHRpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmNvdW50cnkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIGZvcm1Db250cm9sTmFtZT1cInNlbmRDb3VudHJ5XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLW9wdGlvbiAqbmdGb3I9XCJsZXQgY291bnRyeSBvZiBwYXJhbXMuY291bnRyaWVzXCIgW3ZhbHVlXT1cImNvdW50cnkuY291bnRyeUNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGNvdW50cnkuY291bnRyeSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciByb3ctY2xzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yIFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtZGF0YVwiIGZvcj1cInJlY2VpdmVDb3VudHJ5XCI+IFJlY2VpdmU8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgQ291bnRyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBpbnB1dGJveFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmFtc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJwYXJhbXMuY291bnRyaWVzXCIgYmluZExhYmVsPVwiY291bnRyeVwiIGJpbmRWYWx1ZT1cImNvdW50cnlDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWNlaXZlQ291bnRyeVwiIHBsYWNlaG9sZGVyPVwiLSBQbGVhc2Ugc2VsZWN0IC1cIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9XCJ7eyBpdGVtLmNvdW50cnkgfX1cIiBjbGFzcz1cIm5nLW9wdGlvbi10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uY291bnRyeSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVjZWl2ZUNvdW50cnlcIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICA8bmctb3B0aW9uICpuZ0Zvcj1cImxldCBjb3VudHJ5IG9mIHBhcmFtcy5jb3VudHJpZXNcIiBbdmFsdWVdPVwiY291bnRyeS5jb3VudHJ5Q29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgY291bnRyeS5jb3VudHJ5IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1kYXRhXCIgZm9yPVwidHJhbnNhY3Rpb25TdGF0dXNcIj5UcmFuc2FjdGlvbiBTdGF0dXMgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgaW5wdXRib3hcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbXNcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwicGFyYW1zLnRyYW5zYWN0aW9uU3RhdHVzVHlwZXNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHJhbnNhY3Rpb25TdGF0dXNcIiBiaW5kTGFiZWw9XCJ0cmFuc2FjdGlvblN0YXR1c1wiIGJpbmRWYWx1ZT1cInRyYW5zYWN0aW9uU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBpdGVtc1wiIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpdGVtJC5zZWxlY3RlZFwiIC8+IHt7IGl0ZW0udHJhbnNhY3Rpb25TdGF0dXMgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1kYXRhXCIgZm9yPVwicHJvZHVjdFwiPlByb2R1Y3Q8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgaW5wdXRib3hcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tZHJvcGRvd24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJwYXJhbXMudHJhbnNhY3Rpb25Qcm9kdWN0VHlwZXNcIiBiaW5kTGFiZWw9XCJuYW1lXCIgYmluZFZhbHVlPVwicHJvZHVjdENvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdFwiIHBsYWNlaG9sZGVyPVwiLSBQbGVhc2Ugc2VsZWN0IC1cIiByZXF1aXJlZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPVwie3sgaXRlbS5uYW1lIH19XCIgY2xhc3M9XCJuZy1vcHRpb24tdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctc2VsZWN0IHBsYWNlaG9sZGVyPVwiLSBQbGVhc2Ugc2VsZWN0IC1cIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctb3B0aW9uICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHBhcmFtcy50cmFuc2FjdGlvblByb2R1Y3RUeXBlc1wiIFt2YWx1ZV09XCJwcm9kdWN0LnByb2R1Y3RDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByb2R1Y3QubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHJvdy1jbHNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1kYXRhXCIgZm9yPVwicmVjZWl2ZUN1cnJlbmN5XCI+UmVjZWl2ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICBDdXJyZW5jeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCBpbnB1dGJveFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmFtc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJwYXJhbXMuY3VycmVuY2llc1wiIGJpbmRMYWJlbD1cImN1cnJlbmN5XCIgYmluZFZhbHVlPVwiY3VycmVuY3lDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWNlaXZlQ3VycmVuY3lcIiBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPVwie3sgaXRlbS5jdXJyZW5jeSB9fVwiIGNsYXNzPVwibmctb3B0aW9uLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jdXJyZW5jeSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVjZWl2ZUN1cnJlbmN5XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLW9wdGlvbiAqbmdGb3I9XCJsZXQgY3VycmVuY3kgb2YgcGFyYW1zLmN1cnJlbmNpZXNcIiBbdmFsdWVdPVwiY3VycmVuY3kuY3VycmVuY3lDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW5jeS5jdXJyZW5jeSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG4gIDwvZm9ybT5cclxuPC9zZWN0aW9uPlxyXG5cclxuXHJcblxyXG48YXBwLWxvYWRlciBjbGFzcz1cIlwiICpuZ0lmPVwibG9hZGluZ1N0YXRlID09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+PC9hcHAtbG9hZGVyPlxyXG5cclxuPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBtdC0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cInNob3dFcnJvclwiPlxyXG4gIDxzcGFuPnt7IGVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cclxuPC9kaXY+XHJcblxyXG48c2VjdGlvbiAqbmdJZj1cInNob3dSZXBvcnRcIiBjbGFzcz1cIm15LTJcIj5cclxuICA8ZGl2IGNsYXNzPVwidGl0bGUgbWItM1wiPlxyXG4gICAgQnJhbmNoIEFjdGl2aXR5IFNlbmRcclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWItMiBmbGV4LWNvbnRhaW5lclwiPlxyXG4gICAgPHRib2R5PlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibGFibCBtZXRhLXRkXCI+UmVwb3J0IFVzZXI6PC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJweC0zIG1ldGEtdGRcIj48c3BhbiBjbGFzcz1cImluZm9cIj57e3VzZXJ9fTwvc3Bhbj48L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwibGFibCBtZXRhLXRkXCI+UmVwb3J0IFRpbWU6PC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJweC0zIG1ldGEtdGRcIj48c3BhbiBjbGFzcz1cImluZm9cIj57eyByZXBvcnREYXRlIH19PC9zcGFuPjwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEluZm8gTWVzc2FnZSAtLT5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgbXQtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICpuZ0lmPVwic2hvd01lc3NhZ2VcIj5cclxuICAgIDxzcGFuPjxzdHJvbmc+TWVzc2FnZTo8L3N0cm9uZz4ge3sgbWVzc2FnZSB9fTwvc3Bhbj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgKGNsaWNrKT1cImNsZWFyTWVzc2FnZSgpXCI+PC9idXR0b24+XHJcbjwvZGl2PiAtLT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImFkZGVkLWZ1bmN0aW9uc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaEJveFwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBuYW1lPVwic2VhcmNoVGV4dFwiIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2goKVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIHNlYXJjaC1idG5cIiAoY2xpY2spPVwib25TZWFyY2goKVwiPlxyXG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ltYWdlcy9TZWFyY2guc3ZnXCIgYWx0PVwiU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtaWNvblwiIC8+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImV4cG9ydC1vcHRpb25zXCI+XHJcbiAgICAgIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIGNsYXNzPVwiZXhwb3J0LXNlbGVjdG9yXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEV4cG9ydE9wdGlvblwiXHJcbiAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgIDxuZy1vcHRpb24gKm5nRm9yPVwibGV0IGZvcm1hdCBvZiBleHBvcnRGb3JtYXRzXCIgW3ZhbHVlXT1cImZvcm1hdC5jb2RlXCI+XHJcbiAgICAgICAgICB7eyBmb3JtYXQuZm9ybWF0TmFtZSB9fVxyXG4gICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgPCEtLSA8c2VsZWN0IGNsYXNzPVwib3B0LWNsc1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFeHBvcnRPcHRpb25cIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXhjZWxcIiBzZWxlY3RlZD5FeGNlbDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJwZGZcIj5QREY8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3N2XCI+Q1NWPC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcmVwb3J0XCIgKGNsaWNrKT1cImhhbmRsZUV4cG9ydCgpXCI+RXhwb3J0PC9idXR0b24+XHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImJ0bi1ib3hcIj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZ2ItYWNjb3JkaW9uICNhY2M9XCJuZ2JBY2NvcmRpb25cIiBbY2xvc2VPdGhlcnNdPVwiZmFsc2VcIiBbYWN0aXZlSWRzXT1cIidwYW5lbC0wJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZERhdGEgfCBrZXl2YWx1ZTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8bmdiLXBhbmVsICpuZ0lmPVwiaXRlbS52YWx1ZS5sZW5ndGggPiAwXCIgW2lkXT1cIidwYW5lbC0nICsgaVwiPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZSBzdHlsZT1cImhlaWdodDogMTAlO1wiPlxyXG4gICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuMjsgbWFyZ2luOiAwOyBwYWRkaW5nOiAycHggMDtjb2xvcjogIzBjNjNlNDtcIj57e1xyXG4gICAgICAgICAgICBpdGVtLmtleVxyXG4gICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgY29tcGFjdC1ncmlkIG15R3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAzNzBweDtcIlxyXG4gICAgICAgICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtyb3dEYXRhXT1cIml0ZW0udmFsdWVcIiBbcm93SGVpZ2h0XT1cIjIwXCJcclxuICAgICAgICAgICAgW2hlYWRlckhlaWdodF09XCIyMlwiIFtncmlkT3B0aW9uc109XCJ7XHJcbiAgICAgICAgICAgICAgc3VwcHJlc3NIb3Jpem9udGFsU2Nyb2xsOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHNjcm9sbGJhcldpZHRoOiAwXHJcbiAgICAgICAgICAgIH1cIiBbcGFnaW5hdGlvbl09XCJ0cnVlXCIgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uQXJyYXlbaV1cIiAoZ3JpZFJlYWR5KT1cIm9uR3JpZFJlYWR5KCRldmVudClcIlxyXG4gICAgICAgICAgICAoZ3JpZFNpemVDaGFuZ2VkKT1cIm9uR3JpZFNpemVDaGFuZ2VkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGduXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tbW9iaWxlIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24gbmd4LXJhbmdlLWRyb3Bkb3duXCIgW2NsYXNzLm5neC1hY3RpdmVdPVwic2hvd1JhbmdlICYmIGFjdGl2ZUJyYW5jaCA9PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3gtYnRuLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyYW5nZXMuaW5kZXhPZihwYWdpbmF0aW9uQXJyYXlbaV0pICE9IC0xOyBlbHNlIHNob3dBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZ3gtYnRuIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVCcmFuY2hQYWdpbmF0aW9uKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBwYWdpbmF0aW9uQXJyYXlbaV0gfX0gJm5ic3A7ICZuYnNwOzxpIGNsYXNzPVwibmd4LWljb24gbmd4LWljb24tYXJyb3ctZG93blwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93QWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtYnRuIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVCcmFuY2hQYWdpbmF0aW9uKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbCAmbmJzcDsgJm5ic3A7PGkgY2xhc3M9XCJuZ3gtaWNvbiBuZ3gtaWNvbi1hcnJvdy1kb3duXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0aW9uLWxhYmVsXCI+RW50cmllcyBwZXIgcGFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuZ3gtbWVudVwiICpuZ0lmPVwic2hvd1JhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuZ3gtYy1oYW5kIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAqbmdGb3I9XCJsZXQgbGltaXQgb2YgcmFuZ2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUxpbWl0KGxpbWl0LGksaXRlbS5rZXkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGxpbWl0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8L25nYi1wYW5lbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmdiLWFjY29yZGlvbj5cclxuICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZyBtdC0zXCIgKm5nSWY9XCJub0RhdGFGb3VuZFwiPlxyXG4gICAgTm8gRGF0YSBGb3VuZFxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19
512
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQvYnJhbmNoLWFjdGl2aXR5LXNlbmQtcmVwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXVELE1BQU0sZUFBZSxDQUFDO0FBQy9GLGtGQUFrRjtBQUNsRixPQUFPLEVBQUUsU0FBUyxFQUF3RSxNQUFNLGdCQUFnQixDQUFDO0FBSWpILE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxpQkFBaUIsQ0FBQztBQUl2RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFhL0UsTUFBTSxPQUFPLGlDQUFpQztJQWtGNUMsWUFBb0IsV0FBd0IsRUFBVSxhQUE0QixFQUFVLE1BQWM7UUFBdEYsZ0JBQVcsR0FBWCxXQUFX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R0FBRyxJQUFJLENBQUM7WUFDekIsQ0FBQztZQUVELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1lBQ3RELENBQUM7WUFFRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsc0JBQXNCLENBQUMsUUFBUSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFFLElBQUksQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9FLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDOzs4SEFyaUJRLGlDQUFpQztrSEFBakMsaUNBQWlDLHVFQzlCOUMsaXBMQWdJVTsyRkRsR0csaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGlDQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgTmdab25lLCBPbkluaXQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbi8vIGltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnJhbmNoQWN0aXZpdHlSZXBvcnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvYnJhbmNoLWFjdGl2aXR5LXJlcG9ydC9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQnO1xyXG5pbXBvcnQgeyBDb2xEZWYsIEdyaWRBcGksIEdyaWRPcHRpb25zLCBHcmlkUmVhZHlFdmVudCwgUm93R3JvdXBpbmdEaXNwbGF5VHlwZSB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgdGhlbWVBbHBpbmUgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvdGhlbWluZyc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCAnanNwZGYtYXV0b3RhYmxlJztcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSwgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBCcmFuY2hBY3Rpdml0eVNlbmRSZXBvcnRSZXF1ZXN0RG9tYWluTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvYnJhbmNoLWFjdGl2aXR5LXJlcG9ydC9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQtcmVxdWVzdC1kb21haW4tbW9kZWwnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TG9hZGluZ1N0YXRlcyB9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQtbG9hZGluZy1zdGF0ZXMnO1xyXG5cclxuZGVjbGFyZSBtb2R1bGUgJ2pzcGRmJyB7XHJcbiAgaW50ZXJmYWNlIGpzUERGIHtcclxuICAgIGF1dG9UYWJsZTogKG9wdGlvbnM6IGFueSkgPT4ganNQREY7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9icmFuY2gtYWN0aXZpdHktc2VuZC1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2JyYW5jaC1hY3Rpdml0eS1zZW5kLXJlcG9ydC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcmFuY2hBY3Rpdml0eVNlbmRSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGRhdGFNYXA6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBmaWx0ZXJlZERhdGE6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBwcm94eURhdGE6IFJlY29yZDxzdHJpbmcsIEJyYW5jaEFjdGl2aXR5UmVwb3J0W10+ID0ge31cclxuICBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgY291bnRyaWVzOiBhbnk7XHJcbiAgcGFyYW1zOiBhbnk7XHJcbiAgZnJvbURhdGU6IGFueTtcclxuICB0b0RhdGU6IGFueTtcclxuICBjbGllbnRzOiBhbnkgPSBbXTtcclxuICBjbGllbnRzRGF0YTphbnkgPSBbXTtcclxuICBjbGllbnRCcmFuY2hlczogYW55ID0gW107XHJcbiAgc2hvd1JlcG9ydDogYm9vbGVhbjtcclxuICByYW5nZXM6IGFueVtdID0gWzEwLCAxNSwgMjAsIDMwLCA1MCwgMTAwLCAyMDAsICdBbGwnXTtcclxuICBwYWdpbmF0aW9uUGFnZVNpemU6IG51bWJlciA9IDE1O1xyXG4gIHBhZ2luYXRpb25BcnJheTogYW55W107XHJcbiAgc2hvd1JhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNBZ2VudFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSAnZXhjZWwnO1xyXG4gIGdyaWRBUGk7XHJcbiAgZ3JpZEFwaXM6IEdyaWRBcGlbXSA9IFtdO1xyXG4gIGdyaWRDb2x1bW5BcGk7XHJcbiAgdXNlcjogc3RyaW5nID0gXCJrYXVzaGlrLmt1bHNhbmdlQHhwcmVzc21vbmV5LnRlY2hcIjtcclxuICByZXBvcnREYXRlOiBzdHJpbmc7XHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nO1xyXG4gIGJ1ZmZlcjogYW55O1xyXG4gIG15U3RhdHVzOiBGb3JtQXJyYXkgPSBuZXcgRm9ybUFycmF5KFtdKTtcclxuICBzdGF0dXMgPSBbJ0FsbCddO1xyXG4gIGVycm9yTWVzc2FnZSA9ICcnO1xyXG4gIHN5c1VzZXJJZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgbG9nb0Jhc2U2NDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIG1lc3NhZ2U6IHN0cmluZyA9ICdObyBEYXRhIEZvdW5kJztcclxuICBDb21wb25lbnRMb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzO1xyXG4gIGxvYWRpbmdTdGF0ZTogQ29tcG9uZW50TG9hZGluZ1N0YXRlcyA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcclxuICBleHBvcnRGb3JtYXRzID0gW3tmb3JtYXROYW1lOlwiRXhjZWxcIixjb2RlOidleGNlbCd9LHtmb3JtYXROYW1lOlwiUERGXCIsY29kZToncGRmJ30se2Zvcm1hdE5hbWU6XCJDU1ZcIixjb2RlOidjc3YnfV1cclxuICBSZXBvcnROYW1lOnN0cmluZyA9IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIjtcclxuICAvLyBmbGFnc1xyXG4gIHNob3dTdGF0dXNEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dDbGllbnRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0N1cnJlbmN5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1Byb2R1Y3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2VuZENvdW50cnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UmVjZWl2ZUNvdW50cnk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93QnJhbmNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZVRvRGF0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd0Vycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd01lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWxlY3RBbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBub0RhdGFGb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGNsaWVudFNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWN0aXZlQnJhbmNoOiBudW1iZXI7XHJcblxyXG4gIGNvbHVtbkRlZnM6IENvbERlZjxCcmFuY2hBY3Rpdml0eVJlcG9ydD5bXSA9IFtcclxuICAgIHsgZmllbGQ6ICdidXNpbmVzc0RhdGVUaW1lJywgaGVhZGVyTmFtZTogJ0J1c2luZXNzIERhdGUnLCBmbGV4OiAxLCBoZWFkZXJDbGFzczogJ2FnLWxlZnQtYWxpZ25lZC1oZWFkZXInLCBtaW5XaWR0aDogNzAsIHdpZHRoOiA3MCwgdG9vbHRpcEZpZWxkOiAnYnVzaW5lc3NEYXRlVGltZScgfSxcclxuICAgIHsgZmllbGQ6ICd0cmFuc2FjdGlvbkRhdGVUaW1lJywgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIERhdGUnLCBmbGV4OiAyLCB3cmFwVGV4dDogdHJ1ZSwgYXV0b0hlaWdodDogdHJ1ZSB9LFxyXG4gICAgeyBmaWVsZDogJ3RyYW5zYWN0aW9uTnVtYmVyJywgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIE51bWJlcicsIGZsZXg6IDEuOCwgd2lkdGg6IDEzMCwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsLXRyYW5zYWN0aW9uJywgdG9vbHRpcEZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInIH0sXHJcbiAgICB7IGZpZWxkOiAncHJvZHVjdCcsIGhlYWRlck5hbWU6ICdQcm9kdWN0JywgZmxleDogMC41LCBtaW5XaWR0aDogNTAsIHdpZHRoOiA2MCwgdG9vbHRpcEZpZWxkOiAncHJvZHVjdCcgfSxcclxuICAgIHsgZmllbGQ6ICdzZW5kQWdlbnRCcmFuY2hDb2RlJywgaGVhZGVyTmFtZTogJ1NlbmQgQnJhbmNoQ29kZScsIGZsZXg6IDEsIHdpZHRoOiAxMjAsIHRvb2x0aXBGaWVsZDogJ3NlbmRBZ2VudEJyYW5jaENvZGUnIH0sXHJcbiAgICB7IGZpZWxkOiAncmVjZWl2ZUFnZW50Q29kZScsIGhlYWRlck5hbWU6ICdSZWNlaXZlIENsaWVudENvZGUnLCBmbGV4OiAxLCBtaW5XaWR0aDogNzAsIHdpZHRoOiA3MCwgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUFnZW50Q29kZScgfSxcclxuICAgIHsgZmllbGQ6ICdwYXlvdXRDQ2NvZGUnLCBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNjeSBDb2RlJywgZmxleDogMSwgd2lkdGg6IDExMCwgdG9vbHRpcEZpZWxkOiAncGF5b3V0Q0Njb2RlJyB9LFxyXG4gICAgeyBmaWVsZDogJ3BheW91dEFtb3VudCcsIGhlYWRlck5hbWU6ICdSZWNlaXZlIEFtb3VudCcsIGZsZXg6IDEsIG1heFdpZHRoOiAxMzAsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICdwYXlvdXRBbW91bnQnIH0sXHJcbiAgICB7IGZpZWxkOiAncGF5aW5DQ2NvZGUnLCBoZWFkZXJOYW1lOiAnU2VuZENjeSBDb2RlJywgZmxleDogMSwgbWF4V2lkdGg6IDkwLCB0b29sdGlwRmllbGQ6ICdwYXlpbkNDY29kZScgfSxcclxuICAgIHsgZmllbGQ6ICdwYXlpbkFtb3VudCcsIGhlYWRlck5hbWU6ICdTZW5kIEFtb3VudCcsIGZsZXg6IDEsIG1heFdpZHRoOiAxMjAsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICdwYXlpbkFtb3VudCcgfSxcclxuICAgIHsgZmllbGQ6ICd0cmFuc2FjdGlvbkNvbW1pc3Npb25BbW91bnQnLCBoZWFkZXJOYW1lOiAnU2VydmljZSBGZWUnLCBmbGV4OiAxLCBtYXhXaWR0aDogMTIwLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5jdXJyZW5jeUZvcm1hdHRlci5iaW5kKHRoaXMpLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwgY29tcGFjdC1jZWxsJywgdG9vbHRpcEZpZWxkOiAndHJhbnNhY3Rpb25Db21taXNzaW9uQW1vdW50JyB9LFxyXG4gICAgeyBmaWVsZDogJ3RheCcsIGhlYWRlck5hbWU6ICdUYXgnLCBmbGV4OiAxLCB3aWR0aDogNzAsIG1heFdpZHRoOiAxMDAsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICd0YXgnIH0sXHJcbiAgICB7IGZpZWxkOiAndG90YWxQYXlpbkFtb3VudCcsIGhlYWRlck5hbWU6ICdUb3RhbCBTZW5kIEFtb3VudCcsIGZsZXg6IDEsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmN1cnJlbmN5Rm9ybWF0dGVyLmJpbmQodGhpcyksIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCB0b29sdGlwRmllbGQ6ICd0b3RhbFBheWluQW1vdW50JyB9LFxyXG4gICAgeyBmaWVsZDogJ3N0YXR1cycsIGhlYWRlck5hbWU6ICdUcmFuc2FjdGlvbiBTdGF0dXMnLCBmbGV4OiAxLCB0b29sdGlwRmllbGQ6ICdzdGF0dXMnIH1cclxuICBdO1xyXG5cclxuXHJcbiAgZGVmYXVsdENvbERlZiA9IHtcclxuICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgZmlsdGVyOiBmYWxzZSxcclxuICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgIG1pbndpZHRoOiA0MCxcclxuICAgIHdyYXBIZWFkZXJUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcclxuICAgIHN1cHByZXNzU2l6ZVRvRml0OiBmYWxzZSxcclxuICAgIHdyYXBUZXh0OiB0cnVlXHJcbiAgfTtcclxuICByb3dEYXRhOiBCcmFuY2hBY3Rpdml0eVJlcG9ydFtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsIHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHsgfVxyXG5cclxuICByZXBvcnRUaGVtZSA9IHRoZW1lQWxwaW5lLndpdGhQYXJhbXMoe1xyXG4gICAgaGVhZGVyRm9udFNpemU6ICcxMHB4JyxcclxuICAgIGZvbnRGYW1pbHk6IFsnQXJpYWwnLCAnc2Fucy1zZXJpZiddLFxyXG4gICAgZm9udFNpemU6ICc5cHgnXHJcbiAgfSk7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPUNvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAvLyBDaGVjayBpZiBVc2VyIGlzIGZhbGNvbiB1c2VyIG9yIGZvc3NpbFVzZXJcclxuICAgIGlmIChzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmb3NzaWx1c2VybmFtZScpKSB7XHJcbiAgICAgIHRoaXMuc3lzVXNlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3lzVXNlcklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN5c1VzZXJJZCA9IHRoaXMuc3lzVXNlcklkLnJlcGxhY2UoL15bXCInXSguKilbXCInXSQvLCAnJDEnKTtcclxuICAgIHRoaXMudXNlciA9IHRoaXMuc3lzVXNlcklkO1xyXG4gICAgY29uc29sZS5sb2coXCJTeXN0ZW0gVXNlciBJZCA6IFwiICsgdGhpcy5zeXNVc2VySWQpO1xyXG4gICAgdGhpcy5sb2FkSW1hZ2VBc0Jhc2U2NCgnL2Fzc2V0cy9yZXBvcnRzLWxpYi9hc3NldHMvaW1hZ2VzL1hNTG9nby5wbmcnKS50aGVuKGJhc2U2NCA9PiB7XHJcbiAgICAgIHRoaXMubG9nb0Jhc2U2NCA9IGJhc2U2NDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2goKSB7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlYXJjaFRleHQpO1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dC50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhID0gc3RydWN0dXJlZENsb25lKHRoaXMuZGF0YU1hcCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnByb3h5RGF0YSkpIHtcclxuICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gZW50cmllcy5maWx0ZXIoZW50cnkgPT4gT2JqZWN0LnZhbHVlcyhlbnRyeSlcclxuICAgICAgICAuc29tZSh2YWwgPT4ge1xyXG4gICAgICAgICAgbGV0IGE6IHN0cmluZyA9IHZhbC50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICByZXR1cm4gYS5zZWFyY2godGhpcy5zZWFyY2hUZXh0KSA9PSAtMSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICB9KSlcclxuXHJcbiAgICAgIHRoaXMuZmlsdGVyZWREYXRhW2tleV0gPSBmaWx0ZXJlZERhdGE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpbHRlcmVkRGF0YTtcclxuICB9XHJcblxyXG4gICBvbkdyaWRSZWFkeShwYXJhbXM6IEdyaWRSZWFkeUV2ZW50LGlkOm51bWJlcikge1xyXG4gICAgcGFyYW1zLmFwaS5zaXplQ29sdW1uc1RvRml0KCk7XHJcbiAgICB0aGlzLmdyaWRBUGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpID0gcGFyYW1zLmNvbHVtbkFwaTtcclxuICAgIHRoaXMuZ3JpZEFwaXNbaWRdID0gcGFyYW1zLmFwaTtcclxuICB9XHJcblxyXG4gIG9uR3JpZFNpemVDaGFuZ2VkKHBhcmFtczogYW55KSB7XHJcbiAgICBwYXJhbXMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICB9XHJcblxyXG5cclxuICBjaGFuZ2VMaW1pdChsaW1pdDogYW55LCBpbmRleDogbnVtYmVyLCBrZXk6IHN0cmluZykge1xyXG4gICAgaWYgKGxpbWl0ICE9IFwiQWxsXCIpIHtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uQXJyYXlbaW5kZXhdID0gbGltaXQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb25BcnJheVtpbmRleF0gPSB0aGlzLmZpbHRlcmVkRGF0YVtrZXldLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd1JhbmdlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVFeHBvcnQoKSB7XHJcbiAgICBjb25zdCBkYXRhOiBhbnlbXSA9IFtdO1xyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyZWREYXRhKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyaWRBUGkuZm9yRWFjaE5vZGUobm9kZSA9PiBkYXRhLnB1c2gobm9kZS5kYXRhKSlcclxuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZEV4cG9ydE9wdGlvbikge1xyXG4gICAgICBjYXNlICdleGNlbCc6XHJcbiAgICAgICAgdGhpcy5leHBvcnRFeGNlbChkYXRhKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncGRmJzpcclxuICAgICAgICB0aGlzLmV4cG9ydFBERihkYXRhKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzpcclxuICAgICAgICB0aGlzLmV4cG9ydENTVihkYXRhKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBhbGVydCgnUGxlYXNlIHNlbGVjdCBhbiBleHBvcnQgZm9ybWF0LicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFV0aWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgcHJpdmF0ZSBsb2FkSW1hZ2VBc0Jhc2U2NChpbWFnZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgaW1nLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XHJcbiAgICAgIGltZy5zcmMgPSBpbWFnZVBhdGg7XHJcblxyXG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIFNjYWxlIHVwIGNhbnZhcyByZXNvbHV0aW9uICgyeCBvciBtb3JlKVxyXG4gICAgICAgIGNvbnN0IHNjYWxlID0gMjtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGggKiBzY2FsZTtcclxuICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodCAqIHNjYWxlO1xyXG5cclxuICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBpZiAoY3R4KSB7XHJcbiAgICAgICAgICBjdHguc2NhbGUoc2NhbGUsIHNjYWxlKTsgLy8gRHJhdyBpbWFnZSBhdCBoaWdoZXIgcXVhbGl0eVxyXG4gICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xyXG4gICAgICAgICAgY29uc3QgYmFzZTY0ID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJywgMS4wKTsgLy8gMS4wID0gaGlnaGVzdCBxdWFsaXR5XHJcbiAgICAgICAgICByZXNvbHZlKGJhc2U2NCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlamVjdCgnRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdCgnRmFpbGVkIHRvIGxvYWQgaW1hZ2U6ICcgKyBpbWFnZVBhdGgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRQREYoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsncGF5b3V0QW1vdW50JywgJ3BheWluQW1vdW50JywgJ3RvdGFsUGF5aW5BbW91bnQnLCAndGF4JywgJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbkFtb3VudCddO1xyXG4gICAgZGF0YSA9IE9iamVjdC52YWx1ZXModGhpcy5kYXRhTWFwKVswXTtcclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7XHJcbiAgICAgIG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJyxcclxuICAgICAgdW5pdDogJ21tJyxcclxuICAgICAgZm9ybWF0OiBbNDAwLCAyMTBdXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcblxyXG4gICAgLy9UaXRsZVxyXG4gICAgY29uc3QgdGl0bGUgPSBgQnJhbmNoIEFjdGl2aXR5IFNlbmRgO1xyXG4gICAgZG9jLnNldEZvbnRTaXplKDE1KTtcclxuICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgY29uc3QgdGV4dFdpZHRoID0gZG9jLmdldFRleHRXaWR0aCh0aXRsZSk7XHJcbiAgICBkb2MudGV4dCh0aXRsZSwgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC8gMiwgMTUsIHsgYWxpZ246ICdjZW50ZXInIH0pO1xyXG5cclxuICAgIC8vQWRkIEltYWdlXHJcbiAgICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICAgIGRvYy5hZGRJbWFnZSh0aGlzLmxvZ29CYXNlNjQsICdQTkcnLCAxNSwgNSwgMjUsIDIwKTtcclxuICAgIH1cclxuXHJcbiAgICAvL0luZm8gYmxvY2tcclxuICAgIGNvbnN0IGluZm9ZID0gMzA7XHJcbiAgICBjb25zdCBsZWZ0TWFyZ2luID0gMTU7XHJcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gNztcclxuICAgIGNvbnN0IGluZm9MaW5lcyA9IFtcclxuICAgICAgWydSZXBvcnQgVXNlciBBbmQgVGltZTonLCB0aGlzLnVzZXJdLFxyXG4gICAgICBbJ1JlcG9ydCBUaW1lJywgZm9ybWF0RGF0ZSh0aGlzLnJlcG9ydERhdGUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKV1cclxuICAgICAgLy8gWydSZXBvcnQgUGVyaW9kOicsIGAke3RoaXMuZnJvbURhdGV9IC0gJHt0aGlzLnRvRGF0ZX1gXVxyXG4gICAgXVxyXG5cclxuICAgIGRvYy5zZXRGb250U2l6ZSgxMCk7XHJcbiAgICBpbmZvTGluZXMuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGkpID0+IHtcclxuICAgICAgY29uc3QgeSA9IGluZm9ZICsgaSAqIGxpbmVIZWlnaHQ7XHJcbiAgICAgIC8vIERyYXcgbGFiZWwgaW4gYm9sZFxyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgZG9jLnRleHQobGFiZWwsIGxlZnRNYXJnaW4sIHkpO1xyXG5cclxuICAgICAgLy8gRHJhdyB2YWx1ZSBpbiBub3JtYWwgZm9udCByaWdodCBhZnRlciBsYWJlbFxyXG4gICAgICBjb25zdCBsYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChsYWJlbCArICcgJyk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KHZhbHVlLCBsZWZ0TWFyZ2luICsgbGFiZWxXaWR0aCwgeSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSB0aGlzLmNvbHVtbkRlZnMuZmlsdGVyKGNvbCA9PlxyXG4gICAgICAhKGNvbC5oZWFkZXJOYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzci4gbm8nKSB8fCBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3Nybm8nKSB8fCBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3NlcmlhbCcpKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBQcmVwYXJlIGhlYWRlcnMgd2l0aCBTciBOb1xyXG4gICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5maWx0ZXJlZENvbHVtbnMubWFwKGNvbCA9PiBjb2wuaGVhZGVyTmFtZSB8fCBjb2wuZmllbGQhKV07XHJcblxyXG4gICAgbGV0IFJvd3M6IGFueVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBba2V5LCByZXBvcnRzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmRhdGFNYXApKSB7XHJcbiAgICAgIFJvd3MucHVzaChbeyBjb250ZW50OiBrZXksIGNvbFNwYW46IDE1IH1dKTtcclxuICAgICAgY29uc3Qgcm93cyA9IHJlcG9ydHMubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IGZpbHRlcmVkQ29sdW1ucy5tYXAoY29sID0+IHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IHJvd1tjb2wuZmllbGQhXTtcclxuICAgICAgICAgIGlmIChjdXJyZW5jeUZpZWxkcy5pbmNsdWRlcyhjb2wuZmllbGQpICYmIHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8/ICcnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFJvd3MucHVzaChbaW5kZXggKyAxLCAuLi5yb3dEYXRhXSk7XHJcbiAgICAgICAgcmV0dXJuIFtpbmRleCArIDEsIC4uLnJvd0RhdGFdO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gUm93cy5wdXNoKHJvd3MpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByZXBhcmUgcm93cyB3aXRoIFNyIE5vXHJcbiAgICBjb25zdCByb3dzID0gZGF0YS5tYXAoKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3Qgcm93RGF0YSA9IGZpbHRlcmVkQ29sdW1ucy5tYXAoY29sID0+IHtcclxuICAgICAgICBsZXQgdmFsdWUgPSByb3dbY29sLmZpZWxkIV07XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID8/ICcnO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIFtpbmRleCArIDEsIC4uLnJvd0RhdGFdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gR2VuZXJhdGUgZHluYW1pYyBjb2x1bW4gc3R5bGVzIGZvciBhdXRvLXdpZHRoXHJcbiAgICBjb25zdCBjb2x1bW5TdHlsZXM6IHsgW2tleTogbnVtYmVyXTogYW55IH0gPSB7fTtcclxuICAgIGhlYWRlcnMuZm9yRWFjaCgoXywgaSkgPT4ge1xyXG4gICAgICBjb2x1bW5TdHlsZXNbaV0gPSB7IGNlbGxXaWR0aDogJ2F1dG8nIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb2x1bW5TdHlsZXNbMl0gPSB7IGNlbGxXaWR0aDogNDAgfTtcclxuXHJcbiAgICAvLyBSZW5kZXIgVGFibGVcclxuICAgIGRvYy5hdXRvVGFibGUoe1xyXG4gICAgICBoZWFkOiBbaGVhZGVyc10sXHJcbiAgICAgIGJvZHk6IFJvd3MsXHJcbiAgICAgIHN0YXJ0WTogaW5mb1kgKyBpbmZvTGluZXMubGVuZ3RoICogbGluZUhlaWdodCArIDUsXHJcbiAgICAgIHRoZW1lOiAnZ3JpZCcsXHJcbiAgICAgIGhlYWRTdHlsZXM6IHtcclxuICAgICAgICBmaWxsQ29sb3I6IFsyMjAsIDIyMCwgMjIwXSxcclxuICAgICAgICB0ZXh0Q29sb3I6IDAsXHJcbiAgICAgICAgZm9udFN0eWxlOiAnYm9sZCcsXHJcbiAgICAgICAgZm9udFNpemU6IDksXHJcbiAgICAgICAgaGFsaWduOiAnY2VudGVyJ1xyXG4gICAgICB9LFxyXG4gICAgICBiZHlTdHlsZXM6IHtcclxuICAgICAgICBmb250U2l6ZTogOCxcclxuICAgICAgICBmaWxsQ29sb3I6IFsyNTUsIDI1NSwgMjU1XSxcclxuICAgICAgICB0ZXh0Q29sb3I6IFswLCAwLCAwXVxyXG4gICAgICB9LFxyXG4gICAgICBzdHlsZXM6IHtcclxuICAgICAgICBjZWxsUGFkZGluZzogMixcclxuICAgICAgICBvdmVyZmxvdzogJ2xpbmVicmVhaycsXHJcbiAgICAgICAgbWluQ2VsbEhlaWdodDogNlxyXG4gICAgICB9LFxyXG4gICAgICBjb2x1bW5TdHlsZXM6IGNvbHVtblN0eWxlc1xyXG4gICAgfSk7XHJcbiAgICBkb2Muc2F2ZShcIkJyYW5jaC1BY3Rpdml0eS1TZW5kLVJlcG9ydC5wZGZcIilcclxuICB9XHJcblxyXG4gIGV4cG9ydEV4Y2VsKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgY3VycmVuY3lGaWVsZHMgPSBbJ3BheW91dEFtb3VudCcsICdwYXlpbkFtb3VudCcsICd0b3RhbFBheWluQW1vdW50JywgJ3RheCcsICd0cmFuc2FjdGlvbkNvbW1pc3Npb25BbW91bnQnXTtcclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcclxuICAgIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCgnQnJhbmNoLUFjdGl2aXR5LVNlbmQtUmVwb3J0Jyk7XHJcbiAgICBjb25zdCB0b3RhbENvbHVtbnMgPSB0aGlzLmNvbHVtbkRlZnMubGVuZ3RoO1xyXG5cclxuICAgIC8vIFRpdGxlIFJvd1xyXG4gICAgY29uc3QgdGl0bGVSb3cgPSB3b3Jrc2hlZXQuYWRkUm93KFtcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCJdKTtcclxuICAgIHRpdGxlUm93LmZvbnQgPSB7IGJvbGQ6IHRydWUsIHNpemU6IDE0IH07XHJcbiAgICB0aXRsZVJvdy5oZWlnaHQgPSA2MDtcclxuICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKGBBJHt0aXRsZVJvdy5udW1iZXJ9OiR7U3RyaW5nLmZyb21DaGFyQ29kZSg2NCArIHRvdGFsQ29sdW1ucyl9JHt0aXRsZVJvdy5udW1iZXJ9YCk7XHJcbiAgICAvL0NlbnRlciBhbGlnbiB0aGUgdGl0bGVcclxuICAgIGNvbnN0IG1hc3RlckNlbGwgPSB3b3Jrc2hlZXQuZ2V0Q2VsbChgQSR7dGl0bGVSb3cubnVtYmVyfWApO1xyXG4gICAgbWFzdGVyQ2VsbC5hbGlnbm1lbnQgPSB7IGhvcml6b250YWw6ICdjZW50ZXInLCB2ZXJ0aWNhbDogJ21pZGRsZScgfTtcclxuXHJcbiAgICAvLyBBZGQgaW1hZ2UgaWYgYXZhaWxhYmxlXHJcbiAgICBpZiAodGhpcy5sb2dvQmFzZTY0KSB7XHJcbiAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmxvZ29CYXNlNjQucmVwbGFjZSgvXmRhdGE6aW1hZ2VcXC9cXHcrO2Jhc2U2NCwvLCAnJyk7XHJcbiAgICAgIGNvbnN0IGltYWdlSWQgPSB3b3JrYm9vay5hZGRJbWFnZSh7XHJcbiAgICAgICAgYmFzZTY0OiBiYXNlNjREYXRhLFxyXG4gICAgICAgIGV4dGVuc2lvbjogJ3BuZycsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gUGxhY2UgaW1hZ2UgYXQgdG9wLWxlZnQgKGUuZy4sIEExOkM0KVxyXG4gICAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xyXG4gICAgICAgIHRsOiB7IGNvbDogMCwgcm93OiAwIH0sXHJcbiAgICAgICAgZXh0OiB7IHdpZHRoOiAxNTAsIGhlaWdodDogNTAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9NZXRhIERhdGFcclxuICAgIGNvbnN0IG1ldGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgWydSZXBvcnQgVXNlciAnLCB0aGlzLnVzZXJdLFxyXG4gICAgICBbJ1JlcG9ydCBUaW1lJywgZm9ybWF0RGF0ZSh0aGlzLnJlcG9ydERhdGUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKV1cclxuICAgICAgLy8gWydSZXBvcnQgUGVyaW9kJywgYCR7dGhpcy5mcm9tRGF0ZX0gLSAke3RoaXMudG9EYXRlfWBdXHJcbiAgICBdXHJcblxyXG4gICAgbWV0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xyXG4gICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuYWRkUm93KFtsYWJlbCwgdmFsdWVdKTtcclxuICAgICAgLy9Cb2xkIHRoZSBrZXkgY29sdW1uXHJcbiAgICAgIGNvbnN0IGxhYmVsQ2VsbCA9IHJvdy5nZXRDZWxsKDEpO1xyXG4gICAgICBsYWJlbENlbGwuZm9udCA9IHsgYm9sZDogdHJ1ZSB9O1xyXG4gICAgfSlcclxuICAgIC8vIEZvciBFbXB0eSBSb3dcclxuICAgIHdvcmtzaGVldC5hZGRSb3coW10pO1xyXG5cclxuICAgIC8vIEFkZCBIZWFkZXIgUm93IGZvciBEYXRhIFRhYmxlXHJcbiAgICBjb25zdCBoZWFkZXJSb3cgPSB3b3Jrc2hlZXQuYWRkUm93KHRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IGNvbC5oZWFkZXJOYW1lIHx8IGNvbC5maWVsZCkpO1xyXG4gICAgaGVhZGVyUm93LmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMuY29sdW1uRGVmcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBjZWxsID0gaGVhZGVyUm93LmdldENlbGwoaSk7XHJcbiAgICAgIGNlbGwuZmlsbCA9IHtcclxuICAgICAgICB0eXBlOiAncGF0dGVybicsXHJcbiAgICAgICAgcGF0dGVybjogJ3NvbGlkJyxcclxuICAgICAgICBmZ0NvbG9yOiB7IGFyZ2I6ICdEOUQ5RDknIH0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaGVhZGVyUm93LmFsaWdubWVudCA9IHtcclxuICAgICAgd3JhcFRleHQ6IHRydWUsXHJcbiAgICAgIHZlcnRpY2FsOiAndG9wJyxcclxuICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcidcclxuICAgIH07XHJcbiAgICBoZWFkZXJSb3cuYm9yZGVyID0ge1xyXG4gICAgICB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxyXG4gICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGRhdGFTdGFydFJvdyA9IHdvcmtzaGVldC5sYXN0Um93IS5udW1iZXIgKyAxO1xyXG4gICAgY29uc3QgYnJhbmNoUm93cyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBba2V5LCByZXBvcnRzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmRhdGFNYXApKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdLZXk6Jywga2V5KTtcclxuICAgICAgY29uc29sZS5sb2coJ1JlcG9ydHM6JywgcmVwb3J0cyk7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5hZGRSb3coW2Ake2tleX1gXSk7XHJcbiAgICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKHJvdy5udW1iZXIsIDEsIHJvdy5udW1iZXIsIDEwKTtcclxuICAgICAgYnJhbmNoUm93cy5wdXNoKHJvdy5udW1iZXIpO1xyXG4gICAgICAvLyBBZGQgRGF0YSBSb3dzXHJcbiAgICAgIHJlcG9ydHMuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLmNvbHVtbkRlZnMubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgICBsZXQgdmFsdWUgPSByb3dbY29sLmZpZWxkIV07XHJcbiAgICAgICAgICAvLyBGb3JtYXQgY3VycmVuY3kgZmllbGRzXHJcbiAgICAgICAgICBpZiAoY3VycmVuY3lGaWVsZHMuaW5jbHVkZXMoY29sLmZpZWxkKSAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZSkudG9GaXhlZCgzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYFxcdCAke3ZhbHVlfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPz8gJyc7XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCBkYXRhUm93ID0gd29ya3NoZWV0LmFkZFJvdyhyb3dEYXRhKTtcclxuICAgICAgICBkYXRhUm93LmJvcmRlciA9IHtcclxuICAgICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sXHJcbiAgICAgICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9XHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHdvcmtzaGVldC5hZGRSb3coW10pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEF1dG8gY29sdW1uIHdpZHRoIE9OTFkgYmFzZWQgb24gZGF0YSByb3dzXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0b3RhbENvbHVtbnM7IGkrKykge1xyXG4gICAgICBsZXQgbWF4TGVuZ3RoID0gMTA7XHJcbiAgICAgIGZvciAobGV0IHJvd051bSA9IGRhdGFTdGFydFJvdzsgcm93TnVtIDw9IHdvcmtzaGVldC5sYXN0Um93IS5udW1iZXI7IHJvd051bSsrKSB7XHJcbiAgICAgICAgaWYgKGJyYW5jaFJvd3MuaW5kZXhPZih4ID0+IHggPT09IHJvd051bSkgPT09IC0xKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IHdvcmtzaGVldC5nZXRSb3cocm93TnVtKS5nZXRDZWxsKGkpO1xyXG4gICAgICAgIGNvbnN0IHZhbCA9IGNlbGwudmFsdWUgPyBjZWxsLnZhbHVlLnRvU3RyaW5nKCkgOiAnJztcclxuICAgICAgICBtYXhMZW5ndGggPSBNYXRoLm1heChtYXhMZW5ndGgsIHZhbC5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICAgIHdvcmtzaGVldC5nZXRDb2x1bW4oaSkud2lkdGggPSBtYXhMZW5ndGggKyAyO1xyXG4gICAgfVxyXG4gICAgd29ya3NoZWV0LmdldENvbHVtbigyKS53aWR0aCA9IDIwO1xyXG4gICAgd29ya3NoZWV0LmdldENvbHVtbigzKS53aWR0aCA9IDE1O1xyXG4gICAgLy8gRXhwb3J0XHJcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWZmZXIgPT4ge1xyXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXHJcbiAgICAgIH0pXHJcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgJ0JyYW5jaC1BY3Rpdml0eS1TZW5kLVJlcG9ydC54bHN4Jyk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0Q1NWKGRhdGE6IGFueVtdKSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsncGF5b3V0QW1vdW50JywgJ3BheWluQW1vdW50JywgJ3RvdGFsUGF5aW5BbW91bnQnLCAndGF4JywgJ3RyYW5zYWN0aW9uQ29tbWlzc2lvbkFtb3VudCddO1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSBbXHJcbiAgICAgIFsnUmVwb3J0IFRpdGxlJywgJ0JyYW5jaCBBY3Rpdml0eSBTZW5kJ10sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCBmb3JtYXREYXRlKHRoaXMucmVwb3J0RGF0ZSwgJ2RkL01NL3l5eXkgaGg6bW0gYScsICdlbi1VUycpXVxyXG4gICAgICAvLyBbJ1JlcG9ydCBVc2VyJywgdGhpcy51c2VyXVxyXG4gICAgXTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJlZENvbHMgPSB0aGlzLmNvbHVtbkRlZnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT5cclxuICAgICAgICAhKGNvbC5oZWFkZXJOYW1lPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzci4gbm8nKSB8fFxyXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdzci4gbm8nKSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi5maWx0ZXJlZENvbHMubWFwKGNvbCA9PiBjb2wuaGVhZGVyTmFtZSB8fCBjb2wuZmllbGQhKV07XHJcblxyXG4gICAgbGV0IFJvd3M6IGFueVtdW10gPSBbXVxyXG4gICAgZm9yIChjb25zdCBba2V5LCByZXBvcnRzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmRhdGFNYXApKSB7XHJcbiAgICAgIFJvd3MucHVzaChba2V5XSk7XHJcbiAgICAgIHJlcG9ydHMubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93VmFscyA9IGZpbHRlcmVkQ29scy5tYXAoY29sID0+IHtcclxuICAgICAgICAgIGxldCB2ID0gcm93W2NvbC5maWVsZCFdO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkgJiYgdiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHYgPSBwYXJzZUZsb2F0KHYpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAndHJhbnNhY3Rpb25OdW1iZXInIHx8IGNvbC5oZWFkZXJOYW1lID09PSAnVHJhbnNhY3Rpb24gTnVtYmVyJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYFxcdCAke3Z9YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2ID8/ICcnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFJvd3MucHVzaChbaW5kZXggKyAxLCAuLi5yb3dWYWxzXSk7XHJcbiAgICAgICAgcmV0dXJuIFtpbmRleCArIDEsIC4uLnJvd1ZhbHNdO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFvYTogYW55W11bXSA9IFtcclxuICAgICAgLi4ubWV0YWRhdGEsXHJcbiAgICAgIFtdLCAgICAgIC8vIGJsYW5rIHJvdyBmb3Igc2VwYXJhdGlvblxyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgICAuLi5Sb3dzXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIGNvbnZlcnQgdG8gd29ya3NoZWV0ICYgQ1NWXHJcbiAgICBjb25zdCB3cyA9IFhMU1gudXRpbHMuYW9hX3RvX3NoZWV0KGFvYSk7XHJcbiAgICBjb25zdCBjc3YgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2Nzdih3cywge1xyXG4gICAgICBGUzogJywnLCBSUzogJ1xcbicsIGJsYW5rcm93czogZmFsc2UsIGZvcmNlUXVvdGVzOiBmYWxzZVxyXG4gICAgfSBhcyBhbnkpO1xyXG5cclxuICAgIC8vIHRyaWdnZXIgZG93bmxvYWRcclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xyXG4gICAgc2F2ZUFzKGJsb2IsICdCcmFuY2gtQWN0aXZpdHktU2VuZC1SZXBvcnQuY3N2Jyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGZvcm1hdERhdGUocGFyYW1zOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGZvcm1hdERhdGUobmV3IERhdGUocGFyYW1zLnZhbHVlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlQnJhbmNoUGFnaW5hdGlvbihicmFuY2hJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUJyYW5jaCA9IGJyYW5jaEluZGV4O1xyXG4gICAgdGhpcy5zaG93UmFuZ2UgPSAhdGhpcy5zaG93UmFuZ2U7XHJcbiAgfVxyXG5cclxuICBjdXJyZW5jeUZvcm1hdHRlcihwYXJhbXM6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAocGFyYW1zLnZhbHVlID09IG51bGwgfHwgcGFyYW1zLnZhbHVlID09PSAnJykgcmV0dXJuICcnO1xyXG4gICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdChwYXJhbXMudmFsdWUpO1xyXG4gICAgaWYgKGlzTmFOKG51bWJlcikpIHJldHVybiBwYXJhbXMudmFsdWU7XHJcbiAgICByZXR1cm4gbnVtYmVyLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHtcclxuICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAzLFxyXG4gICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VhcmNoKGNyaXRlcmlhOiBhbnkpOiB2b2lkIHtcclxuICAgICAgY29uc3QgbW9kYWwgPSBjcml0ZXJpYS5tb2RhbDtcclxuICAgICAgdGhpcy51c2VyID0gY3JpdGVyaWEuc3lzVXNlcklEO1xyXG4gICAgICBjb25zb2xlLmxvZyhtb2RhbCk7XHJcbiAgICAgIGNvbnN0IHNlYXJjaERhdGEgPSB7XHJcbiAgICAgICAgXCJTdGFydERhdGVcIjogbW9kYWwuZnJvbURhdGUsXHJcbiAgICAgICAgXCJFbmREYXRlXCI6IG1vZGFsLnRvRGF0ZSxcclxuICAgICAgICBcIlNlbmRDb3VudHJ5Q29kZVwiOiBtb2RhbC5zZW5kQ291bnRyeSxcclxuICAgICAgICBcIlJlY3ZDb3VudHJ5Q29kZVwiOiBtb2RhbC5yZWNlaXZlQ291bnRyeSxcclxuICAgICAgICBcIkJ1c2luZXNzUGFydG5lckNvZGVcIjogbW9kYWwuY2xpZW50LFxyXG4gICAgICAgIFwiVHJhbnNhY3Rpb25TdGF0dXNcIjogbW9kYWwudHJhbnNhY3Rpb25TdGF0dXMuam9pbihcIixcIiksXHJcbiAgICAgICAgXCJQYXlvdXRDdXJyZW5jeVwiOiBcIkFMTFwiLFxyXG4gICAgICAgIFwiVHJhbnNhY3Rpb25UeXBlXCI6IFwiQUxMXCIsXHJcbiAgICAgICAgXCJCcmFuY2hDb2RlXCI6IG1vZGFsLmJyYW5jaCxcclxuICAgICAgICBcIkNvbXBhbnlDb2RlXCI6IFwiQkhcIlxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNob3dNZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkxvYWRpbmc7XHJcbiAgICAgIHRoaXMucmVwb3J0U2VydmljZS5nZXRCcmFuY2hBY3Rpdml0eVJlcG9ydChzZWFyY2hEYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgIHRoaXMuZGF0YU1hcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyZWREYXRhKS5sZW5ndGggPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJveHlEYXRhID0gc3RydWN0dXJlZENsb25lKGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5wYWdpbmF0aW9uQXJyYXkgPSBuZXcgQXJyYXkoT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZERhdGEpLmxlbmd0aCkuZmlsbCgxNSk7XHJcbiAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlID0gT2JqZWN0LmtleXModGhpcy5maWx0ZXJlZERhdGEpLmxlbmd0aCA9PSAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVwb3J0ID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gIFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcbiAgICAgICAgfSxcclxuICBcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVwb3J0ID10cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnREYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xyXG4gICAgICAgICAgdGhpcy5yZXBvcnREYXRlID0gZm9ybWF0RGF0ZSh0aGlzLnJlcG9ydERhdGUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG59XHJcblxyXG4iLCI8bGliLXNlYXJjaC1maWx0ZXIgXHJcbiAgICBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgXHJcbiAgICAoc2VhcmNoQ2xpY2tlZCk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiPlxyXG48L2xpYi1zZWFyY2gtZmlsdGVyPlxyXG5cclxuPGFwcC1sb2FkZXIgY2xhc3M9XCJcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuXHJcbjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgbXQtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCJzaG93RXJyb3JcIj5cclxuICA8c3Bhbj57eyBlcnJvck1lc3NhZ2UgfX08L3NwYW4+XHJcbjwvZGl2PlxyXG5cclxuPHNlY3Rpb24gKm5nSWY9XCJzaG93UmVwb3J0XCIgY2xhc3M9XCJteS0yXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRpdGxlIG1iLTNcIj5cclxuICAgIEJyYW5jaCBBY3Rpdml0eSBTZW5kXHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1iLTIgZmxleC1jb250YWluZXJcIj5cclxuICAgIDx0Ym9keT5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cImxhYmwgbWV0YS10ZFwiPlJlcG9ydCBVc2VyOjwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwicHgtMyBtZXRhLXRkXCI+PHNwYW4gY2xhc3M9XCJpbmZvXCI+e3t1c2VyfX08L3NwYW4+PC90ZD5cclxuICAgICAgPC90cj5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cImxhYmwgbWV0YS10ZFwiPlJlcG9ydCBUaW1lOjwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwicHgtMyBtZXRhLXRkXCI+PHNwYW4gY2xhc3M9XCJpbmZvXCI+e3sgcmVwb3J0RGF0ZSB9fTwvc3Bhbj48L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90Ym9keT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBJbmZvIE1lc3NhZ2UgLS0+XHJcbiAgPCEtLSA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIG10LTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAqbmdJZj1cInNob3dNZXNzYWdlXCI+XHJcbiAgICA8c3Bhbj48c3Ryb25nPk1lc3NhZ2U6PC9zdHJvbmc+IHt7IG1lc3NhZ2UgfX08L3NwYW4+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIChjbGljayk9XCJjbGVhck1lc3NhZ2UoKVwiPjwvYnV0dG9uPlxyXG48L2Rpdj4gLS0+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJhZGRlZC1mdW5jdGlvbnNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hCb3hcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgbmFtZT1cInNlYXJjaFRleHRcIiBjbGFzcz1cInNlYXJjaC1pbnB1dFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoKClcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuXHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBzZWFyY2gtYnRuXCIgKGNsaWNrKT1cIm9uU2VhcmNoKClcIj5cclxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvU2VhcmNoLnN2Z1wiIGFsdD1cIlNlYXJjaFwiIGNsYXNzPVwic2VhcmNoLWljb25cIiAvPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJleHBvcnQtb3B0aW9uc1wiPlxyXG4gICAgICA8bmctc2VsZWN0IHBsYWNlaG9sZGVyPVwiLSBQbGVhc2Ugc2VsZWN0IC1cIiBjbGFzcz1cImV4cG9ydC1zZWxlY3RvclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFeHBvcnRPcHRpb25cIlxyXG4gICAgICAgIFtjbGVhcmFibGVdPVwiZmFsc2VcIiByZXF1aXJlZD5cclxuICAgICAgICA8bmctb3B0aW9uICpuZ0Zvcj1cImxldCBmb3JtYXQgb2YgZXhwb3J0Rm9ybWF0c1wiIFt2YWx1ZV09XCJmb3JtYXQuY29kZVwiPlxyXG4gICAgICAgICAge3sgZm9ybWF0LmZvcm1hdE5hbWUgfX1cclxuICAgICAgICA8L25nLW9wdGlvbj5cclxuICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgIDwhLS0gPHNlbGVjdCBjbGFzcz1cIm9wdC1jbHNcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRXhwb3J0T3B0aW9uXCI+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImV4Y2VsXCIgc2VsZWN0ZWQ+RXhjZWw8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwicGRmXCI+UERGPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNzdlwiPkNTVjwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD4gLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJidG4tYm94XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcmVwb3J0XCIgKGNsaWNrKT1cImhhbmRsZUV4cG9ydCgpXCI+RXhwb3J0PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZ2ItYWNjb3JkaW9uICNhY2M9XCJuZ2JBY2NvcmRpb25cIiBbY2xvc2VPdGhlcnNdPVwiZmFsc2VcIiBbYWN0aXZlSWRzXT1cIidwYW5lbC0wJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZERhdGEgfCBrZXl2YWx1ZTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICA8bmdiLXBhbmVsICpuZ0lmPVwiaXRlbS52YWx1ZS5sZW5ndGggPiAwXCIgW2lkXT1cIidwYW5lbC0nICsgaVwiPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbmdiUGFuZWxUaXRsZSBzdHlsZT1cImhlaWdodDogMTAlO1wiPlxyXG4gICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuMjsgbWFyZ2luOiAwOyBwYWRkaW5nOiAycHggMDtjb2xvcjogIzBjNjNlNDtcIj57e1xyXG4gICAgICAgICAgICBpdGVtLmtleVxyXG4gICAgICAgICAgICB9fTwvbGFiZWw+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcblxyXG4gICAgICAgICAgICA8bGliLXBhZ2Utc2l6ZS1zZWxlY3RvciBbdG90YWxFbnRyaWVzXT1cIml0ZW0/LnZhbHVlPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICBbZGVmYXVsdFNpemVdPVwiJzE1J1wiIFtncmlkQXBpXT1cImdyaWRBcGlzW2ldXCI+XHJcbiAgICAgICAgICAgID48L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XHJcblxyXG4gICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIGNvbXBhY3QtZ3JpZCBteUdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlO2hlaWdodDogMzcwcHg7XCJcclxuICAgICAgICAgICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCIgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFtyb3dEYXRhXT1cIml0ZW0udmFsdWVcIiBbcm93SGVpZ2h0XT1cIjIwXCJcclxuICAgICAgICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIjIyXCIgW2dyaWRPcHRpb25zXT1cIntcclxuICAgICAgICAgICAgICBzdXBwcmVzc0hvcml6b250YWxTY3JvbGw6IHRydWUsXHJcbiAgICAgICAgICAgICAgc2Nyb2xsYmFyV2lkdGg6IDBcclxuICAgICAgICAgICAgfVwiIFtwYWdpbmF0aW9uXT1cInRydWVcIiBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25BcnJheVtpXVwiIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50LGkpXCJcclxuICAgICAgICAgICAgICAoZ3JpZFNpemVDaGFuZ2VkKT1cIm9uR3JpZFNpemVDaGFuZ2VkKCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcblxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicGduXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24tbW9iaWxlIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24gbmd4LXJhbmdlLWRyb3Bkb3duXCIgW2NsYXNzLm5neC1hY3RpdmVdPVwic2hvd1JhbmdlICYmIGFjdGl2ZUJyYW5jaCA9PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZ3gtYnRuLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyYW5nZXMuaW5kZXhPZihwYWdpbmF0aW9uQXJyYXlbaV0pICE9IC0xOyBlbHNlIHNob3dBbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZ3gtYnRuIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVCcmFuY2hQYWdpbmF0aW9uKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBwYWdpbmF0aW9uQXJyYXlbaV0gfX0gJm5ic3A7ICZuYnNwOzxpIGNsYXNzPVwibmd4LWljb24gbmd4LWljb24tYXJyb3ctZG93blwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93QWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZ3gtYnRuIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVCcmFuY2hQYWdpbmF0aW9uKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFsbCAmbmJzcDsgJm5ic3A7PGkgY2xhc3M9XCJuZ3gtaWNvbiBuZ3gtaWNvbi1hcnJvdy1kb3duXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0aW9uLWxhYmVsXCI+RW50cmllcyBwZXIgcGFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuZ3gtbWVudVwiICpuZ0lmPVwic2hvd1JhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuZ3gtYy1oYW5kIG5neC1yYW5nZS1kcm9wZG93bi1idXR0b25cIiAqbmdGb3I9XCJsZXQgbGltaXQgb2YgcmFuZ2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUxpbWl0KGxpbWl0LGksaXRlbS5rZXkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGxpbWl0IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwvbmdiLXBhbmVsPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZ2ItYWNjb3JkaW9uPlxyXG4gIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nIG10LTNcIiAqbmdJZj1cIm5vRGF0YUZvdW5kXCI+XHJcbiAgICBObyBEYXRhIEZvdW5kXHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj4iXX0=