@sachin9822/reports-lib 0.0.148 → 0.0.150

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/esm2020/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.mjs +22 -8
  2. package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +254 -0
  3. package/esm2020/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.mjs +463 -0
  4. package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +33 -53
  5. package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +348 -0
  6. package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +28 -77
  7. package/esm2020/lib/models/accounting-report/accounting-report-entry-model.mjs +2 -0
  8. package/esm2020/lib/models/accounting-report/accounting-report-model.mjs +2 -0
  9. package/esm2020/lib/models/branch-activity-receive-report/branch-activity-receive.model.mjs +2 -0
  10. package/esm2020/lib/models/cancellation-transaction-report/cancellation-transaction.model.mjs +2 -0
  11. package/esm2020/lib/reports-lib.module.mjs +18 -5
  12. package/esm2020/lib/services/report.service.mjs +91 -1
  13. package/esm2020/lib/shared/export-generic.service.mjs +324 -0
  14. package/esm2020/lib/shared/export.service.mjs +2 -2
  15. package/esm2020/lib/shared/metadata/metadata.component.mjs +50 -0
  16. package/esm2020/lib/shared/page-size-selector/page-size-selector.component.mjs +2 -2
  17. package/esm2020/lib/shared/search-filter/search-filter.component.mjs +402 -23
  18. package/esm2020/lib/shared/shared.module.mjs +8 -6
  19. package/esm2020/public-api.mjs +7 -1
  20. package/esm2020/sachin9822-reports-lib.mjs +5 -0
  21. package/fesm2015/sachin9822-reports-lib.mjs +4054 -0
  22. package/fesm2015/sachin9822-reports-lib.mjs.map +1 -0
  23. package/fesm2020/sachin9822-reports-lib.mjs +4013 -0
  24. package/fesm2020/sachin9822-reports-lib.mjs.map +1 -0
  25. package/index.d.ts +1 -1
  26. package/lib/components/acc-gl-details-enquiry-report/acc-gl-details-enquiry-report.component.d.ts +5 -2
  27. package/lib/components/accounting-report/accounting-report.component.d.ts +56 -0
  28. package/lib/components/branch-activity-receive-report/branch-activity-receive-report.component.d.ts +52 -0
  29. package/lib/components/branch-activity-send-report/branch-activity-send-report.component.d.ts +4 -31
  30. package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +99 -0
  31. package/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.d.ts +4 -32
  32. package/lib/models/accounting-report/accounting-report-entry-model.d.ts +24 -0
  33. package/lib/models/accounting-report/accounting-report-model.d.ts +8 -0
  34. package/lib/models/branch-activity-receive-report/branch-activity-receive.model.d.ts +18 -0
  35. package/lib/models/cancellation-transaction-report/cancellation-transaction.model.d.ts +44 -0
  36. package/lib/reports-lib.module.d.ts +13 -10
  37. package/lib/services/report.service.d.ts +18 -0
  38. package/lib/shared/export-generic.service.d.ts +47 -0
  39. package/lib/shared/metadata/metadata.component.d.ts +24 -0
  40. package/lib/shared/search-filter/search-filter.component.d.ts +3 -0
  41. package/lib/shared/shared.module.d.ts +5 -3
  42. package/package.json +1 -1
  43. package/public-api.d.ts +6 -0
  44. package/esm2020/xpressmoney-reports-lib.mjs +0 -5
  45. package/fesm2015/xpressmoney-reports-lib.mjs +0 -2230
  46. package/fesm2015/xpressmoney-reports-lib.mjs.map +0 -1
  47. package/fesm2020/xpressmoney-reports-lib.mjs +0 -2200
  48. package/fesm2020/xpressmoney-reports-lib.mjs.map +0 -1
@@ -0,0 +1,254 @@
1
+ import { Component } from '@angular/core';
2
+ import { formatDate } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/report.service";
5
+ import * as i2 from "../../shared/export.service";
6
+ import * as i3 from "ag-grid-angular";
7
+ import * as i4 from "../../shared/page-size-selector/page-size-selector.component";
8
+ import * as i5 from "../../shared/metadata/metadata.component";
9
+ import * as i6 from "../../shared/search-filter/search-filter.component";
10
+ export class AccountingReportComponent {
11
+ constructor(reportService, exportService) {
12
+ this.reportService = reportService;
13
+ this.exportService = exportService;
14
+ this.ReportName = "Accounting";
15
+ this.reportRequest = {
16
+ startDate: "2025-06-01",
17
+ endDate: "2025-11-08",
18
+ sendCountryCode: "ALL",
19
+ recvCountryCode: "ALL",
20
+ businessPartnerCorrelationID: "ALL",
21
+ transactionStatus: "ALL",
22
+ payoutCurrency: "ALL",
23
+ transactionType: "ALL",
24
+ branchCode: "ALL",
25
+ companyCode: "ALL"
26
+ };
27
+ this.searchText = '';
28
+ this.rowData = [];
29
+ this.pageSize = 15;
30
+ this.selectedExportOption = 'excel';
31
+ this.exportFormats = [{ formatName: "Excel", code: 'excel' }, { formatName: "PDF", code: 'pdf' }, { formatName: "CSV", code: 'csv' }];
32
+ this.defaultColDef = {
33
+ resizable: true,
34
+ sortable: false,
35
+ minWidth: 40,
36
+ suppressSizeToFit: false,
37
+ // 🔹 Header wrapping
38
+ wrapHeaderText: true,
39
+ autoHeaderHeight: true,
40
+ // 🔹 Cell wrapping
41
+ wrapText: true,
42
+ autoHeight: true
43
+ };
44
+ // columnDefs: ColDef[] = [
45
+ // { headerName: 'BusinessDate', field: 'businessDate', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 80, tooltipField: 'businessDate' },
46
+ // { headerName: 'TxnDate&Time', field: 'transactionDateAndTime', flex: 1.8, cellClass: 'ag-left-cols-cell compact-cell-transaction', minWidth: 80, tooltipField: 'transactionDateAndTime', valueFormatter: this.formatDate },
47
+ // { headerName: 'Transaction Number', field: 'transactionNumber', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 90, tooltipField: 'transactionNumber' },
48
+ // { headerName: 'SendClient', field: 'sendClient', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 80, tooltipField: 'sendClient' },
49
+ // { headerName: 'Principle SendClient (If Applicable)', field: 'principleSendClient', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 160, tooltipField: 'principleSendClient' },
50
+ // { headerName: 'ReceiveClient', field: 'receiveClient', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 120, tooltipField: 'receiveClient' },
51
+ // { headerName: 'Principle ReceiveClient (If Applicable)', field: 'principleReceiveClient', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 170, tooltipField: 'principleReceiveClient' },
52
+ // { headerName: 'ReceiveCcy', field: 'receiveCurrency', flex: 0.8, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 80, tooltipField: 'receiveCurrency' },
53
+ // { headerName: 'AmountPaid', field: 'amountPaid', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 100, tooltipValueGetter: (params) => this.formatNumber(params) },
54
+ // { headerName: 'SendCcy', field: 'sendCurrency', flex: 0.8, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 80, tooltipField: 'sendCurrency' },
55
+ // { headerName: 'ServiceFee', field: 'serviceFee', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 90, tooltipValueGetter: (params) => this.formatNumber(params) },
56
+ // { headerName: 'Tax', field: 'tax', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 70, tooltipValueGetter: (params) => this.formatNumber(params) },
57
+ // { headerName: 'PrincipleSend Amount', field: 'principleSendAmount', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 130, tooltipValueGetter: (params) => this.formatNumber(params) },
58
+ // { headerName: 'Transaction Status', field: 'transactionStatus', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 120, tooltipField: 'transactionStatus' },
59
+ // { headerName: 'SettlementCcy', field: 'settlementCurrency', flex: 0.8, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 100, tooltipField: 'settlementCurrency' },
60
+ // { headerName: 'ClientSettl (in SCcy)', field: 'clientSettlementInSCcy', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 140, tooltipValueGetter: (params) => this.formatNumber(params) },
61
+ // { headerName: 'ClientSettl (in USD)', field: 'clientSettlementInUSD', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 140, tooltipValueGetter: (params) => this.formatNumber(params) },
62
+ // { headerName: 'ShareType', field: 'shareType', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 100, tooltipField: 'shareType' },
63
+ // { headerName: 'ShareValue', field: 'shareValue', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 100, tooltipValueGetter: (params) => this.formatNumber(params) },
64
+ // { headerName: 'Send/Receive FeeCcy', field: 'sendReceiveFeeCcy', flex: 1.2, cellClass: 'ag-left-cols-cell compact-cell', minWidth: 150, tooltipField: 'sendReceiveFeeCcy' },
65
+ // { headerName: 'ShareAmt (in USD)', field: 'shareAmountInUSD', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 130, tooltipValueGetter: (params) => this.formatNumber(params) },
66
+ // { headerName: 'Settlement Rate', field: 'settlementRate', flex: 1.2, valueFormatter: this.formatNumber, cellClass: 'ag-right-aligned-cell compact-cell', minWidth: 130, tooltipValueGetter: (params) => this.formatNumber(params) },
67
+ // ];
68
+ this.columnDefs = [
69
+ { headerName: 'BusinessDate', field: 'businessDate', tooltipField: 'businessDate' },
70
+ { headerName: 'TxnDate&Time', field: 'transactionDateAndTime', tooltipField: 'transactionDateAndTime', minWidth: 110, },
71
+ { headerName: 'Transaction Number', field: 'transactionNumber', tooltipField: 'transactionNumber' },
72
+ { headerName: 'SendClient', field: 'sendClient', tooltipField: 'sendClient' },
73
+ { headerName: 'Principle SendClient (If Applicable)', field: 'principleSendClient', tooltipField: 'principleSendClient' },
74
+ { headerName: 'ReceiveClient', field: 'receiveClient', tooltipField: 'receiveClient' },
75
+ { headerName: 'Principle ReceiveClient (If Applicable)', field: 'principleReceiveClient', tooltipField: 'principleReceiveClient' },
76
+ { headerName: 'ReceiveCcy', field: 'receiveCurrency', tooltipField: 'receiveCurrency' },
77
+ { headerName: 'AmountPaid', field: 'amountPaid', tooltipField: 'amountPaid', cellClass: 'ag-right-aligned-cell' },
78
+ { headerName: 'SendCcy', field: 'sendCurrency', tooltipField: 'sendCurrency', },
79
+ { headerName: 'ServiceFee', field: 'serviceFee', tooltipField: 'serviceFee', cellClass: 'ag-right-aligned-cell' },
80
+ { headerName: 'Tax', field: 'tax', tooltipField: 'tax', cellClass: 'ag-right-aligned-cell' },
81
+ { headerName: 'PrincipleSend Amount', field: 'principleSendAmount', tooltipField: 'principleSendAmount', cellClass: 'ag-right-aligned-cell' },
82
+ { headerName: 'Transaction Status', field: 'transactionStatus', tooltipField: 'transactionStatus' },
83
+ { headerName: 'SettlementCcy', field: 'settlementCurrency', tooltipField: 'settlementCurrency', cellClass: 'ag-right-aligned-cell' },
84
+ { headerName: 'ClientSettl (in SCcy)', field: 'clientSettlementInSCcy', tooltipField: 'clientSettlementInSCcy', cellClass: 'ag-right-aligned-cell' },
85
+ { headerName: 'ClientSettl (in USD)', field: 'clientSettlementInUSD', tooltipField: 'clientSettlementInUSD', cellClass: 'ag-right-aligned-cell' },
86
+ { headerName: 'ShareType', field: 'shareType', tooltipField: 'shareType' },
87
+ { headerName: 'ShareValue', field: 'shareValue', tooltipField: 'shareValue', cellClass: 'ag-right-aligned-cell' },
88
+ { headerName: 'Send/Receive FeeCcy', field: 'sendReceiveFeeCcy', tooltipField: 'sendReceiveFeeCcy' },
89
+ { headerName: 'ShareAmt (in USD)', field: 'shareAmountInUSD', tooltipField: 'shareAmountInUSD', cellClass: 'ag-right-aligned-cell' },
90
+ { headerName: 'Settlement Rate', field: 'settlementRate', tooltipField: 'settlementRate', cellClass: 'ag-right-aligned-cell' },
91
+ ];
92
+ }
93
+ ;
94
+ ngOnInit() {
95
+ }
96
+ getAccountingReport(request) {
97
+ const finalReq = request ?? this.reportRequest;
98
+ this.reportService.getAccountingReport(finalReq).subscribe(data => {
99
+ this.accountingReportModel = data;
100
+ // this.rowData = this.accountingReportModel.accountingReportEntriesList;
101
+ this.rowData = this.accountingReportModel.accountingReportEntriesList.map(entry => {
102
+ return {
103
+ ...entry,
104
+ businessDate: formatDate(entry.businessDate, 'dd/MM/yyyy', 'en-US'),
105
+ transactionDateAndTime: formatDate(entry.transactionDateAndTime, 'dd/MM/yyyy hh:mm a', 'en-US'),
106
+ };
107
+ });
108
+ this.reportUser = this.accountingReportModel.reportUser;
109
+ this.reportTime = formatDate(new Date(), 'dd/MM/yyyy hh:mm a', 'en-US');
110
+ this.reportPeriod = `${formatDate(finalReq.startDate, 'dd/MM/yyyy', 'en-US')} - ${formatDate(finalReq.endDate, 'dd/MM/yyyy', 'en-US')}`;
111
+ this.leftData = {
112
+ 'Report User ': `${this.reportUser}`,
113
+ 'Report Time': `${this.reportTime}`,
114
+ };
115
+ this.rightData = {
116
+ 'Company': "Xpress Money",
117
+ 'Report Period': `${this.reportPeriod}`,
118
+ };
119
+ // console.log(data);
120
+ console.log(this.accountingReportModel);
121
+ console.log(this.rowData);
122
+ }, error => {
123
+ console.log(error);
124
+ });
125
+ }
126
+ async handleExport(option) {
127
+ this.selectedExportOption = option;
128
+ switch (this.selectedExportOption) {
129
+ case 'excel':
130
+ this.exportToExcel();
131
+ break;
132
+ case 'pdf':
133
+ this.exportToPdf();
134
+ break;
135
+ case 'csv':
136
+ this.exportToCsv();
137
+ break;
138
+ default:
139
+ alert('Please select an export format.');
140
+ }
141
+ }
142
+ onSearch(text) {
143
+ const normalize = (str) => str?.toString()
144
+ .toLowerCase()
145
+ .replace(/,/g, '') // remove commas
146
+ .replace(/\s+/g, ' ') // normalize all spaces to one
147
+ .replace(/[\u200B-\u200D\uFEFF]/g, '') // remove invisible chars
148
+ .trim();
149
+ this.searchText = text;
150
+ const search = normalize(this.searchText);
151
+ const formattedData = this.accountingReportModel.accountingReportEntriesList.map(entry => ({
152
+ ...entry,
153
+ businessDate: formatDate(entry.businessDate, 'dd/MM/yyyy', 'en-US'),
154
+ transactionDateAndTime: formatDate(entry.transactionDateAndTime, 'dd/MM/yyyy hh:mm a', 'en-US'),
155
+ }));
156
+ if (search) {
157
+ this.rowData = formattedData.filter(item => Object.values(item).some(value => normalize(value).includes(search)));
158
+ }
159
+ else {
160
+ this.rowData = formattedData;
161
+ }
162
+ }
163
+ // public formatDate(params: any): string {
164
+ // return formatDate(new Date(params.value), 'dd/MM/yyyy', 'en-US');
165
+ // }
166
+ onGridReady(params) {
167
+ this.gridApi = params.api;
168
+ this.gridColumnApi = params.columnApi;
169
+ this.gridColumnApi.autoSizeAllColumns();
170
+ }
171
+ getRowHeight(params) {
172
+ const description = params.data?.description || '';
173
+ if (description.length > 50) {
174
+ return 40;
175
+ }
176
+ return 20;
177
+ }
178
+ formatNumber(params) {
179
+ if (params.value == null)
180
+ return '';
181
+ const field = params.colDef.field;
182
+ if (field === 'settlementRate') {
183
+ return Number(params.value).toFixed(8);
184
+ }
185
+ return Number(params.value).toFixed(3);
186
+ }
187
+ async exportToPdf() {
188
+ if (!this.accountingReportModel.accountingReportEntriesList?.length)
189
+ return;
190
+ const title = `Xpress Money - Accounting Report`;
191
+ const metadata = this.exportService.generateReportMetadata([
192
+ ['Report User : ', this.reportUser],
193
+ ['Report Time : ', this.reportTime],
194
+ ['Report Period : ', this.reportPeriod],
195
+ ]);
196
+ const { headers, rows } = this.exportService.prepareExportTable(this.accountingReportModel.accountingReportEntriesList, this.columnDefs, {
197
+ currencyFields: ['localCredit', 'forexCredit', 'localDebit', 'forexDebit']
198
+ });
199
+ await this.exportService.exportToPdfUniversal(title, metadata, headers, rows, 'Accounting-Report.pdf');
200
+ }
201
+ exportToExcel() {
202
+ if (!this.accountingReportModel.accountingReportEntriesList?.length)
203
+ return;
204
+ const title = `Xpress Money - Accounting Report`;
205
+ const metadata = this.exportService.generateReportMetadata([
206
+ ['Report User', this.reportUser],
207
+ ['Report Time', this.reportTime],
208
+ ['Report Period', this.reportPeriod],
209
+ ]);
210
+ const { headers, rows } = this.exportService.prepareExportTable(this.accountingReportModel.accountingReportEntriesList, this.columnDefs, {
211
+ currencyFields: ['localCredit', 'forexCredit', 'localDebit', 'forexDebit']
212
+ });
213
+ this.exportService.exportToExcelUniversal(title, metadata, headers, rows, 'Accounting-Report.xlsx');
214
+ }
215
+ exportToCsv() {
216
+ if (!this.accountingReportModel.accountingReportEntriesList?.length)
217
+ return;
218
+ const title = `Xpress Money - Accounting Report`;
219
+ const metadata = this.exportService.generateReportMetadata([
220
+ ['Report User', this.reportUser],
221
+ ['Report Time', this.reportTime],
222
+ ['Report Period', this.reportPeriod],
223
+ ]);
224
+ const { headers, rows } = this.exportService.prepareExportTable(this.accountingReportModel.accountingReportEntriesList, this.columnDefs, {
225
+ currencyFields: ['localCredit', 'forexCredit', 'localDebit', 'forexDebit']
226
+ });
227
+ this.exportService.exportToCsvUniversal(title, metadata, headers, rows, 'Accounting-Report.csv');
228
+ }
229
+ getReport(payload) {
230
+ const modal = payload?.modal || payload;
231
+ const req = {
232
+ startDate: new Date(modal.fromDate).toISOString().split("T")[0],
233
+ endDate: new Date(modal.toDate).toISOString().split("T")[0],
234
+ sendCountryCode: modal.sendCountry ?? 'ALL',
235
+ recvCountryCode: modal.receiveCountry ?? 'ALL',
236
+ businessPartnerCorrelationID: modal.client ?? 'ALL',
237
+ transactionStatus: Array.isArray(modal.transactionStatus)
238
+ ? (modal.transactionStatus.includes('All') ? 'ALL' : modal.transactionStatus.join(','))
239
+ : (modal.transactionStatus || 'ALL'),
240
+ payoutCurrency: modal.currency ?? 'ALL',
241
+ transactionType: modal.product ?? 'ALL',
242
+ branchCode: modal.branch ?? 'ALL',
243
+ companyCode: 'ALL' // or 'BH' if your API requires it specifically
244
+ };
245
+ this.getAccountingReport(req);
246
+ }
247
+ }
248
+ AccountingReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountingReportComponent, deps: [{ token: i1.ReportService }, { token: i2.ExportService }], target: i0.ɵɵFactoryTarget.Component });
249
+ AccountingReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AccountingReportComponent, selector: "lib-accounting-report", ngImport: i0, template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\">\n</lib-search-filter>\n\n<lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\n\n<div style=\"position: relative;\">\n <lib-page-size-selector [totalEntries]=\"accountingReportModel?.accountingReportEntriesList?.length\"\n [defaultSize]=\"'15'\" [gridApi]=\"gridApi\">\n ></lib-page-size-selector>\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" [rowData]=\"rowData\" [columnDefs]=\"columnDefs\"\n [defaultColDef]=\"defaultColDef\" [animateRows]=\"true\" [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\"\n [domLayout]=\"'normal'\" [paginationPageSize]=\"pageSize\" [suppressHorizontalScroll]=\"false\"\n [suppressRowHoverHighlight]=\"false\" [getRowHeight]=\"getRowHeight.bind(this)\" (gridReady)=\"onGridReady($event)\"\n [suppressDragLeaveHidesColumns]=\"true\" [suppressMovableColumns]=\"false\">\n </ag-grid-angular>\n</div>", styles: ["::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:auto!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .ag-theme-alpine .ag-header-cell-label{white-space:normal;line-height:1.2;text-align:center}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 4px!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 2!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 .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 .compact-grid .ag-paging-panel{font-size:11px!important;height:30px!important;padding:4px!important}::ng-deep .compact-grid .ag-paging-button{height:20px!important;width:20px!important;font-size:10px!important;margin:0 2px!important}::ng-deep .compact-grid .ag-paging-description{font-size:11px!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-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-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}.grid-size{width:100%!important;font-weight:500!important;height:390px!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}\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: "component", type: i4.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i5.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i6.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked"] }] });
250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountingReportComponent, decorators: [{
251
+ type: Component,
252
+ args: [{ selector: 'lib-accounting-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\">\n</lib-search-filter>\n\n<lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\n\n<div style=\"position: relative;\">\n <lib-page-size-selector [totalEntries]=\"accountingReportModel?.accountingReportEntriesList?.length\"\n [defaultSize]=\"'15'\" [gridApi]=\"gridApi\">\n ></lib-page-size-selector>\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" [rowData]=\"rowData\" [columnDefs]=\"columnDefs\"\n [defaultColDef]=\"defaultColDef\" [animateRows]=\"true\" [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\"\n [domLayout]=\"'normal'\" [paginationPageSize]=\"pageSize\" [suppressHorizontalScroll]=\"false\"\n [suppressRowHoverHighlight]=\"false\" [getRowHeight]=\"getRowHeight.bind(this)\" (gridReady)=\"onGridReady($event)\"\n [suppressDragLeaveHidesColumns]=\"true\" [suppressMovableColumns]=\"false\">\n </ag-grid-angular>\n</div>", styles: ["::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:auto!important;display:flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;background-color:#f8f9fa;border-right:1px solid #e0e0e0}::ng-deep .compact-grid .ag-header-cell-text{font-size:10px!important;font-weight:700!important;text-align:center!important;width:100%}::ng-deep .ag-theme-alpine .ag-header-cell-label{white-space:normal;line-height:1.2;text-align:center}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 4px!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 2!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 .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 .compact-grid .ag-paging-panel{font-size:11px!important;height:30px!important;padding:4px!important}::ng-deep .compact-grid .ag-paging-button{height:20px!important;width:20px!important;font-size:10px!important;margin:0 2px!important}::ng-deep .compact-grid .ag-paging-description{font-size:11px!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-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-cell-transaction{white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;align-items:left!important;padding-left:5px!important}.grid-size{width:100%!important;font-weight:500!important;height:390px!important}::ng-deep .ag-root{-webkit-user-select:text!important;user-select:text!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}\n"] }]
253
+ }], ctorParameters: function () { return [{ type: i1.ReportService }, { type: i2.ExportService }]; } });
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBS2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7QUFvQjdDLE1BQU0sT0FBTyx5QkFBeUI7SUEyR3BDLFlBQW9CLGFBQTRCLEVBQVUsYUFBNEI7UUFBbEUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXhHdEYsZUFBVSxHQUFXLFlBQVksQ0FBQztRQUtsQyxrQkFBYSxHQUE0QjtZQUN2QyxTQUFTLEVBQUUsWUFBWTtZQUN2QixPQUFPLEVBQUUsWUFBWTtZQUNyQixlQUFlLEVBQUUsS0FBSztZQUN0QixlQUFlLEVBQUUsS0FBSztZQUN0Qiw0QkFBNEIsRUFBRSxLQUFLO1lBQ25DLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsY0FBYyxFQUFFLEtBQUs7WUFDckIsZUFBZSxFQUFFLEtBQUs7WUFDdEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQztRQUtGLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFFdEIseUJBQW9CLEdBQVcsT0FBTyxDQUFDO1FBQ3ZD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QyxpQkFBaUIsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2RixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDO1lBQ3RDLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUs7WUFDdkMsZUFBZSxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSztZQUN2QyxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLO1lBQ2pDLFdBQVcsRUFBRSxLQUFLLENBQUMsK0NBQStDO1NBQ25FLENBQUM7UUFFRixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7c0hBdlRVLHlCQUF5QjswR0FBekIseUJBQXlCLDZEQ3pCdEMsMG9DQWdCTTsyRkRTTyx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjY291bnRpbmdSZXBvcnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC1tb2RlbCc7XG5pbXBvcnQgeyBDb2xEZWYsIENvbHVtbkFwaSwgR3JpZEFwaSwgR3JpZFJlYWR5RXZlbnQgfSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCB7XG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xuICBlbmREYXRlOiBzdHJpbmc7XG4gIHNlbmRDb3VudHJ5Q29kZTogc3RyaW5nO1xuICByZWN2Q291bnRyeUNvZGU6IHN0cmluZztcbiAgYnVzaW5lc3NQYXJ0bmVyQ29ycmVsYXRpb25JRDogc3RyaW5nO1xuICB0cmFuc2FjdGlvblN0YXR1czogc3RyaW5nO1xuICBwYXlvdXRDdXJyZW5jeTogc3RyaW5nO1xuICB0cmFuc2FjdGlvblR5cGU6IHN0cmluZztcbiAgYnJhbmNoQ29kZTogc3RyaW5nO1xuICBjb21wYW55Q29kZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItYWNjb3VudGluZy1yZXBvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFjY291bnRpbmdSZXBvcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG5cbiAgUmVwb3J0TmFtZTogc3RyaW5nID0gXCJBY2NvdW50aW5nXCI7XG4gIHJlcG9ydFVzZXI6IGFueTtcbiAgcmVwb3J0VGltZTogYW55O1xuICByZXBvcnRQZXJpb2Q6IGFueTtcblxuICByZXBvcnRSZXF1ZXN0OiBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCA9IHtcbiAgICBzdGFydERhdGU6IFwiMjAyNS0wNi0wMVwiLFxuICAgIGVuZERhdGU6IFwiMjAyNS0xMS0wOFwiLFxuICAgIHNlbmRDb3VudHJ5Q29kZTogXCJBTExcIixcbiAgICByZWN2Q291bnRyeUNvZGU6IFwiQUxMXCIsXG4gICAgYnVzaW5lc3NQYXJ0bmVyQ29ycmVsYXRpb25JRDogXCJBTExcIixcbiAgICB0cmFuc2FjdGlvblN0YXR1czogXCJBTExcIixcbiAgICBwYXlvdXRDdXJyZW5jeTogXCJBTExcIixcbiAgICB0cmFuc2FjdGlvblR5cGU6IFwiQUxMXCIsXG4gICAgYnJhbmNoQ29kZTogXCJBTExcIixcbiAgICBjb21wYW55Q29kZTogXCJBTExcIlxuICB9O1xuXG4gIGxlZnREYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByaWdodERhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gIHJvd0RhdGEgPSBbXTtcbiAgYWNjb3VudGluZ1JlcG9ydE1vZGVsOiBBY2NvdW50aW5nUmVwb3J0TW9kZWw7XG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxNTtcblxuICBzZWxlY3RlZEV4cG9ydE9wdGlvbjogc3RyaW5nID0gJ2V4Y2VsJztcbiAgZXhwb3J0Rm9ybWF0cyA9IFt7IGZvcm1hdE5hbWU6IFwiRXhjZWxcIiwgY29kZTogJ2V4Y2VsJyB9LCB7IGZvcm1hdE5hbWU6IFwiUERGXCIsIGNvZGU6ICdwZGYnIH0sIHsgZm9ybWF0TmFtZTogXCJDU1ZcIiwgY29kZTogJ2NzdicgfV1cblxuXG5cbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xuICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgbWluV2lkdGg6IDQwLFxuICAgIHN1cHByZXNzU2l6ZVRvRml0OiBmYWxzZSxcblxuICAgIC8vIPCflLkgSGVhZGVyIHdyYXBwaW5nXG4gICAgd3JhcEhlYWRlclRleHQ6IHRydWUsXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcblxuICAgIC8vIPCflLkgQ2VsbCB3cmFwcGluZ1xuICAgIHdyYXBUZXh0OiB0cnVlLFxuICAgIGF1dG9IZWlnaHQ6IHRydWVcbiAgfTtcblxuICAvLyBjb2x1bW5EZWZzOiBDb2xEZWZbXSA9IFtcbiAgLy8gICB7IGhlYWRlck5hbWU6ICdCdXNpbmVzc0RhdGUnLCBmaWVsZDogJ2J1c2luZXNzRGF0ZScsIGZsZXg6IDEuMiwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDgwLCB0b29sdGlwRmllbGQ6ICdidXNpbmVzc0RhdGUnIH0sXG4gIC8vICAgeyBoZWFkZXJOYW1lOiAnVHhuRGF0ZSZUaW1lJywgZmllbGQ6ICd0cmFuc2FjdGlvbkRhdGVBbmRUaW1lJywgZmxleDogMS44LCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwtdHJhbnNhY3Rpb24nLCBtaW5XaWR0aDogODAsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXREYXRlIH0sXG4gIC8vICAgeyBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gTnVtYmVyJywgZmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicsIGZsZXg6IDEuMiwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDkwLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicgfSxcbiAgLy8gICB7IGhlYWRlck5hbWU6ICdTZW5kQ2xpZW50JywgZmllbGQ6ICdzZW5kQ2xpZW50JywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogODAsIHRvb2x0aXBGaWVsZDogJ3NlbmRDbGllbnQnIH0sXG4gIC8vICAgeyBoZWFkZXJOYW1lOiAnUHJpbmNpcGxlIFNlbmRDbGllbnQgKElmIEFwcGxpY2FibGUpJywgZmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50JywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogMTYwLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50JyB9LFxuICAvLyAgIHsgaGVhZGVyTmFtZTogJ1JlY2VpdmVDbGllbnQnLCBmaWVsZDogJ3JlY2VpdmVDbGllbnQnLCBmbGV4OiAxLjIsIGNlbGxDbGFzczogJ2FnLWxlZnQtY29scy1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiAxMjAsIHRvb2x0aXBGaWVsZDogJ3JlY2VpdmVDbGllbnQnIH0sXG4gIC8vICAgeyBoZWFkZXJOYW1lOiAnUHJpbmNpcGxlIFJlY2VpdmVDbGllbnQgKElmIEFwcGxpY2FibGUpJywgZmllbGQ6ICdwcmluY2lwbGVSZWNlaXZlQ2xpZW50JywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogMTcwLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVSZWNlaXZlQ2xpZW50JyB9LFxuICAvLyAgIHsgaGVhZGVyTmFtZTogJ1JlY2VpdmVDY3knLCBmaWVsZDogJ3JlY2VpdmVDdXJyZW5jeScsIGZsZXg6IDAuOCwgY2VsbENsYXNzOiAnYWctbGVmdC1jb2xzLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDgwLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQ3VycmVuY3knIH0sXG4gIC8vICAgeyBoZWFkZXJOYW1lOiAnQW1vdW50UGFpZCcsIGZpZWxkOiAnYW1vdW50UGFpZCcsIGZsZXg6IDEuMiwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuZm9ybWF0TnVtYmVyLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDEwMCwgdG9vbHRpcFZhbHVlR2V0dGVyOiAocGFyYW1zKSA9PiB0aGlzLmZvcm1hdE51bWJlcihwYXJhbXMpIH0sXG4gIC8vICAgeyBoZWFkZXJOYW1lOiAnU2VuZENjeScsIGZpZWxkOiAnc2VuZEN1cnJlbmN5JywgZmxleDogMC44LCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogODAsIHRvb2x0aXBGaWVsZDogJ3NlbmRDdXJyZW5jeScgfSxcbiAgLy8gICB7IGhlYWRlck5hbWU6ICdTZXJ2aWNlRmVlJywgZmllbGQ6ICdzZXJ2aWNlRmVlJywgZmxleDogMS4yLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXROdW1iZXIsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogOTAsIHRvb2x0aXBWYWx1ZUdldHRlcjogKHBhcmFtcykgPT4gdGhpcy5mb3JtYXROdW1iZXIocGFyYW1zKSB9LFxuICAvLyAgIHsgaGVhZGVyTmFtZTogJ1RheCcsIGZpZWxkOiAndGF4JywgZmxleDogMS4yLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXROdW1iZXIsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogNzAsIHRvb2x0aXBWYWx1ZUdldHRlcjogKHBhcmFtcykgPT4gdGhpcy5mb3JtYXROdW1iZXIocGFyYW1zKSB9LFxuICAvLyAgIHsgaGVhZGVyTmFtZTogJ1ByaW5jaXBsZVNlbmQgQW1vdW50JywgZmllbGQ6ICdwcmluY2lwbGVTZW5kQW1vdW50JywgZmxleDogMS4yLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXROdW1iZXIsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogMTMwLCB0b29sdGlwVmFsdWVHZXR0ZXI6IChwYXJhbXMpID0+IHRoaXMuZm9ybWF0TnVtYmVyKHBhcmFtcykgfSxcbiAgLy8gICB7IGhlYWRlck5hbWU6ICdUcmFuc2FjdGlvbiBTdGF0dXMnLCBmaWVsZDogJ3RyYW5zYWN0aW9uU3RhdHVzJywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogMTIwLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvblN0YXR1cycgfSxcbiAgLy8gICB7IGhlYWRlck5hbWU6ICdTZXR0bGVtZW50Q2N5JywgZmllbGQ6ICdzZXR0bGVtZW50Q3VycmVuY3knLCBmbGV4OiAwLjgsIGNlbGxDbGFzczogJ2FnLWxlZnQtY29scy1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiAxMDAsIHRvb2x0aXBGaWVsZDogJ3NldHRsZW1lbnRDdXJyZW5jeScgfSxcbiAgLy8gICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gU0NjeSknLCBmaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblNDY3knLCBmbGV4OiAxLjIsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmZvcm1hdE51bWJlciwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiAxNDAsIHRvb2x0aXBWYWx1ZUdldHRlcjogKHBhcmFtcykgPT4gdGhpcy5mb3JtYXROdW1iZXIocGFyYW1zKSB9LFxuICAvLyAgIHsgaGVhZGVyTmFtZTogJ0NsaWVudFNldHRsIChpbiBVU0QpJywgZmllbGQ6ICdjbGllbnRTZXR0bGVtZW50SW5VU0QnLCBmbGV4OiAxLjIsIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmZvcm1hdE51bWJlciwgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiAxNDAsIHRvb2x0aXBWYWx1ZUdldHRlcjogKHBhcmFtcykgPT4gdGhpcy5mb3JtYXROdW1iZXIocGFyYW1zKSB9LFxuICAvLyAgIHsgaGVhZGVyTmFtZTogJ1NoYXJlVHlwZScsIGZpZWxkOiAnc2hhcmVUeXBlJywgZmxleDogMS4yLCBjZWxsQ2xhc3M6ICdhZy1sZWZ0LWNvbHMtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogMTAwLCB0b29sdGlwRmllbGQ6ICdzaGFyZVR5cGUnIH0sXG4gIC8vICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVWYWx1ZScsIGZpZWxkOiAnc2hhcmVWYWx1ZScsIGZsZXg6IDEuMiwgdmFsdWVGb3JtYXR0ZXI6IHRoaXMuZm9ybWF0TnVtYmVyLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwgY29tcGFjdC1jZWxsJywgbWluV2lkdGg6IDEwMCwgdG9vbHRpcFZhbHVlR2V0dGVyOiAocGFyYW1zKSA9PiB0aGlzLmZvcm1hdE51bWJlcihwYXJhbXMpIH0sXG4gIC8vICAgeyBoZWFkZXJOYW1lOiAnU2VuZC9SZWNlaXZlIEZlZUNjeScsIGZpZWxkOiAnc2VuZFJlY2VpdmVGZWVDY3knLCBmbGV4OiAxLjIsIGNlbGxDbGFzczogJ2FnLWxlZnQtY29scy1jZWxsIGNvbXBhY3QtY2VsbCcsIG1pbldpZHRoOiAxNTAsIHRvb2x0aXBGaWVsZDogJ3NlbmRSZWNlaXZlRmVlQ2N5JyB9LFxuICAvLyAgIHsgaGVhZGVyTmFtZTogJ1NoYXJlQW10IChpbiBVU0QpJywgZmllbGQ6ICdzaGFyZUFtb3VudEluVVNEJywgZmxleDogMS4yLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXROdW1iZXIsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogMTMwLCB0b29sdGlwVmFsdWVHZXR0ZXI6IChwYXJhbXMpID0+IHRoaXMuZm9ybWF0TnVtYmVyKHBhcmFtcykgfSxcbiAgLy8gICB7IGhlYWRlck5hbWU6ICdTZXR0bGVtZW50IFJhdGUnLCBmaWVsZDogJ3NldHRsZW1lbnRSYXRlJywgZmxleDogMS4yLCB2YWx1ZUZvcm1hdHRlcjogdGhpcy5mb3JtYXROdW1iZXIsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCBjb21wYWN0LWNlbGwnLCBtaW5XaWR0aDogMTMwLCB0b29sdGlwVmFsdWVHZXR0ZXI6IChwYXJhbXMpID0+IHRoaXMuZm9ybWF0TnVtYmVyKHBhcmFtcykgfSxcbiAgLy8gXTtcblxuXG4gIGNvbHVtbkRlZnM6IENvbERlZltdID0gW1xuICAgIHsgaGVhZGVyTmFtZTogJ0J1c2luZXNzRGF0ZScsIGZpZWxkOiAnYnVzaW5lc3NEYXRlJywgdG9vbHRpcEZpZWxkOiAnYnVzaW5lc3NEYXRlJyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1R4bkRhdGUmVGltZScsIGZpZWxkOiAndHJhbnNhY3Rpb25EYXRlQW5kVGltZScsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnLCBtaW5XaWR0aDogMTEwLCB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIE51bWJlcicsIGZpZWxkOiAndHJhbnNhY3Rpb25OdW1iZXInLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicgfSxcbiAgICB7IGhlYWRlck5hbWU6ICdTZW5kQ2xpZW50JywgZmllbGQ6ICdzZW5kQ2xpZW50JywgdG9vbHRpcEZpZWxkOiAnc2VuZENsaWVudCcgfSxcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGUgU2VuZENsaWVudCAoSWYgQXBwbGljYWJsZSknLCBmaWVsZDogJ3ByaW5jaXBsZVNlbmRDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50JyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1JlY2VpdmVDbGllbnQnLCBmaWVsZDogJ3JlY2VpdmVDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdyZWNlaXZlQ2xpZW50JyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1ByaW5jaXBsZSBSZWNlaXZlQ2xpZW50IChJZiBBcHBsaWNhYmxlKScsIGZpZWxkOiAncHJpbmNpcGxlUmVjZWl2ZUNsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3ByaW5jaXBsZVJlY2VpdmVDbGllbnQnIH0sXG4gICAgeyBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNjeScsIGZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JywgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ0Ftb3VudFBhaWQnLCBmaWVsZDogJ2Ftb3VudFBhaWQnLCB0b29sdGlwRmllbGQ6ICdhbW91bnRQYWlkJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmRDY3knLCBmaWVsZDogJ3NlbmRDdXJyZW5jeScsIHRvb2x0aXBGaWVsZDogJ3NlbmRDdXJyZW5jeScsIH0sXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VydmljZUZlZScsIGZpZWxkOiAnc2VydmljZUZlZScsIHRvb2x0aXBGaWVsZDogJ3NlcnZpY2VGZWUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXG4gICAgeyBoZWFkZXJOYW1lOiAnVGF4JywgZmllbGQ6ICd0YXgnLCB0b29sdGlwRmllbGQ6ICd0YXgnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXG4gICAgeyBoZWFkZXJOYW1lOiAnUHJpbmNpcGxlU2VuZCBBbW91bnQnLCBmaWVsZDogJ3ByaW5jaXBsZVNlbmRBbW91bnQnLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVTZW5kQW1vdW50JywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZpZWxkOiAndHJhbnNhY3Rpb25TdGF0dXMnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvblN0YXR1cycgfSxcbiAgICB7IGhlYWRlck5hbWU6ICdTZXR0bGVtZW50Q2N5JywgZmllbGQ6ICdzZXR0bGVtZW50Q3VycmVuY3knLCB0b29sdGlwRmllbGQ6ICdzZXR0bGVtZW50Q3VycmVuY3knLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXG4gICAgeyBoZWFkZXJOYW1lOiAnQ2xpZW50U2V0dGwgKGluIFNDY3kpJywgZmllbGQ6ICdjbGllbnRTZXR0bGVtZW50SW5TQ2N5JywgdG9vbHRpcEZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluU0NjeScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcbiAgICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gVVNEKScsIGZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgdG9vbHRpcEZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1NoYXJlVHlwZScsIGZpZWxkOiAnc2hhcmVUeXBlJywgdG9vbHRpcEZpZWxkOiAnc2hhcmVUeXBlJyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1NoYXJlVmFsdWUnLCBmaWVsZDogJ3NoYXJlVmFsdWUnLCB0b29sdGlwRmllbGQ6ICdzaGFyZVZhbHVlJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmQvUmVjZWl2ZSBGZWVDY3knLCBmaWVsZDogJ3NlbmRSZWNlaXZlRmVlQ2N5JywgdG9vbHRpcEZpZWxkOiAnc2VuZFJlY2VpdmVGZWVDY3knIH0sXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVBbXQgKGluIFVTRCknLCBmaWVsZDogJ3NoYXJlQW1vdW50SW5VU0QnLCB0b29sdGlwRmllbGQ6ICdzaGFyZUFtb3VudEluVVNEJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxuICAgIHsgaGVhZGVyTmFtZTogJ1NldHRsZW1lbnQgUmF0ZScsIGZpZWxkOiAnc2V0dGxlbWVudFJhdGUnLCB0b29sdGlwRmllbGQ6ICdzZXR0bGVtZW50UmF0ZScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcbiAgXTtcblxuXG5cblxuXG4gIGdyaWRBcGk6IEdyaWRBcGk8YW55Pjs7XG4gIGdyaWRDb2x1bW5BcGk6IENvbHVtbkFwaTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRBY2NvdW50aW5nUmVwb3J0KHJlcXVlc3Q/OiBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCkge1xuXG4gICAgY29uc3QgZmluYWxSZXEgPSByZXF1ZXN0ID8/IHRoaXMucmVwb3J0UmVxdWVzdDtcblxuICAgIHRoaXMucmVwb3J0U2VydmljZS5nZXRBY2NvdW50aW5nUmVwb3J0KGZpbmFsUmVxKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbCA9IGRhdGE7XG4gICAgICAvLyB0aGlzLnJvd0RhdGEgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0RW50cmllc0xpc3Q7XG5cbiAgICAgIHRoaXMucm93RGF0YSA9IHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRFbnRyaWVzTGlzdC5tYXAoZW50cnkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmVudHJ5LFxuICAgICAgICAgIGJ1c2luZXNzRGF0ZTogZm9ybWF0RGF0ZShlbnRyeS5idXNpbmVzc0RhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyksXG4gICAgICAgICAgdHJhbnNhY3Rpb25EYXRlQW5kVGltZTogZm9ybWF0RGF0ZShlbnRyeS50cmFuc2FjdGlvbkRhdGVBbmRUaW1lLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyksXG5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnJlcG9ydFVzZXIgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5yZXBvcnRVc2VyO1xuICAgICAgdGhpcy5yZXBvcnRUaW1lID0gZm9ybWF0RGF0ZShuZXcgRGF0ZSgpLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyk7XG4gICAgICB0aGlzLnJlcG9ydFBlcmlvZCA9IGAke2Zvcm1hdERhdGUoZmluYWxSZXEuc3RhcnREYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpfSAtICR7Zm9ybWF0RGF0ZShmaW5hbFJlcS5lbmREYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpfWA7XG5cbiAgICAgIHRoaXMubGVmdERhdGEgPSB7XG4gICAgICAgICdSZXBvcnQgVXNlciAnOiBgJHt0aGlzLnJlcG9ydFVzZXJ9YCxcbiAgICAgICAgJ1JlcG9ydCBUaW1lJzogYCR7dGhpcy5yZXBvcnRUaW1lfWAsXG4gICAgICB9XG5cbiAgICAgIHRoaXMucmlnaHREYXRhID0ge1xuICAgICAgICAnQ29tcGFueSc6IFwiWHByZXNzIE1vbmV5XCIsXG4gICAgICAgICdSZXBvcnQgUGVyaW9kJzogYCR7dGhpcy5yZXBvcnRQZXJpb2R9YCxcbiAgICAgIH1cblxuXG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgY29uc29sZS5sb2codGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwpO1xuICAgICAgY29uc29sZS5sb2codGhpcy5yb3dEYXRhKTtcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgfSk7XG4gIH1cblxuXG4gIGFzeW5jIGhhbmRsZUV4cG9ydChvcHRpb246IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSBvcHRpb247XG4gICAgc3dpdGNoICh0aGlzLnNlbGVjdGVkRXhwb3J0T3B0aW9uKSB7XG4gICAgICBjYXNlICdleGNlbCc6XG4gICAgICAgIHRoaXMuZXhwb3J0VG9FeGNlbCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BkZic6XG4gICAgICAgIHRoaXMuZXhwb3J0VG9QZGYoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjc3YnOlxuICAgICAgICB0aGlzLmV4cG9ydFRvQ3N2KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYW4gZXhwb3J0IGZvcm1hdC4nKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgb25TZWFyY2godGV4dDogc3RyaW5nKSB7XG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHN0cjogYW55KTogc3RyaW5nID0+XG4gICAgICBzdHI/LnRvU3RyaW5nKClcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoLywvZywgJycpICAgICAgICAgICAvLyByZW1vdmUgY29tbWFzXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJykgICAgICAgIC8vIG5vcm1hbGl6ZSBhbGwgc3BhY2VzIHRvIG9uZVxuICAgICAgICAucmVwbGFjZSgvW1xcdTIwMEItXFx1MjAwRFxcdUZFRkZdL2csICcnKSAvLyByZW1vdmUgaW52aXNpYmxlIGNoYXJzXG4gICAgICAgIC50cmltKCk7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gdGV4dDtcbiAgICBjb25zdCBzZWFyY2ggPSBub3JtYWxpemUodGhpcy5zZWFyY2hUZXh0KTtcblxuICAgIGNvbnN0IGZvcm1hdHRlZERhdGEgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0RW50cmllc0xpc3QubWFwKGVudHJ5ID0+ICh7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIGJ1c2luZXNzRGF0ZTogZm9ybWF0RGF0ZShlbnRyeS5idXNpbmVzc0RhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyksXG4gICAgICB0cmFuc2FjdGlvbkRhdGVBbmRUaW1lOiBmb3JtYXREYXRlKGVudHJ5LnRyYW5zYWN0aW9uRGF0ZUFuZFRpbWUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKSxcbiAgICB9KSk7XG5cbiAgICBpZiAoc2VhcmNoKSB7XG4gICAgICB0aGlzLnJvd0RhdGEgPSBmb3JtYXR0ZWREYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbSkuc29tZSh2YWx1ZSA9PlxuICAgICAgICAgIG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd0RhdGEgPSBmb3JtYXR0ZWREYXRhO1xuICAgIH1cblxuICB9XG5cblxuICAvLyBwdWJsaWMgZm9ybWF0RGF0ZShwYXJhbXM6IGFueSk6IHN0cmluZyB7XG4gIC8vICAgcmV0dXJuIGZvcm1hdERhdGUobmV3IERhdGUocGFyYW1zLnZhbHVlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKTtcbiAgLy8gfVxuXG4gIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQpIHtcbiAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xuICAgIHRoaXMuZ3JpZENvbHVtbkFwaSA9IHBhcmFtcy5jb2x1bW5BcGk7XG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpLmF1dG9TaXplQWxsQ29sdW1ucygpO1xuICB9XG5cbiAgZ2V0Um93SGVpZ2h0KHBhcmFtczogYW55KTogbnVtYmVyIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHBhcmFtcy5kYXRhPy5kZXNjcmlwdGlvbiB8fCAnJztcbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gNTApIHtcbiAgICAgIHJldHVybiA0MDtcbiAgICB9XG4gICAgcmV0dXJuIDIwO1xuICB9XG5cbiAgZm9ybWF0TnVtYmVyKHBhcmFtczogYW55KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW1zLnZhbHVlID09IG51bGwpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGZpZWxkID0gcGFyYW1zLmNvbERlZi5maWVsZDtcblxuICAgIGlmIChmaWVsZCA9PT0gJ3NldHRsZW1lbnRSYXRlJykge1xuICAgICAgcmV0dXJuIE51bWJlcihwYXJhbXMudmFsdWUpLnRvRml4ZWQoOCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihwYXJhbXMudmFsdWUpLnRvRml4ZWQoMyk7XG4gIH1cblxuXG5cblxuICBhc3luYyBleHBvcnRUb1BkZigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRFbnRyaWVzTGlzdD8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCB0aXRsZSA9IGBYcHJlc3MgTW9uZXkgLSBBY2NvdW50aW5nIFJlcG9ydGA7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVSZXBvcnRNZXRhZGF0YShbXG4gICAgICBbJ1JlcG9ydCBVc2VyIDogJywgdGhpcy5yZXBvcnRVc2VyXSxcbiAgICAgIFsnUmVwb3J0IFRpbWUgOiAnLCB0aGlzLnJlcG9ydFRpbWVdLFxuICAgICAgWydSZXBvcnQgUGVyaW9kIDogJywgdGhpcy5yZXBvcnRQZXJpb2RdLFxuICAgIF0pO1xuXG4gICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLmV4cG9ydFNlcnZpY2UucHJlcGFyZUV4cG9ydFRhYmxlKHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRFbnRyaWVzTGlzdCwgdGhpcy5jb2x1bW5EZWZzLCB7XG4gICAgICBjdXJyZW5jeUZpZWxkczogWydsb2NhbENyZWRpdCcsICdmb3JleENyZWRpdCcsICdsb2NhbERlYml0JywgJ2ZvcmV4RGViaXQnXVxuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydFRvUGRmVW5pdmVyc2FsKHRpdGxlLCBtZXRhZGF0YSwgaGVhZGVycywgcm93cywgJ0FjY291bnRpbmctUmVwb3J0LnBkZicpO1xuICB9XG5cbiAgZXhwb3J0VG9FeGNlbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRFbnRyaWVzTGlzdD8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCB0aXRsZSA9IGBYcHJlc3MgTW9uZXkgLSBBY2NvdW50aW5nIFJlcG9ydGA7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVSZXBvcnRNZXRhZGF0YShbXG4gICAgICBbJ1JlcG9ydCBVc2VyJywgdGhpcy5yZXBvcnRVc2VyXSxcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCB0aGlzLnJlcG9ydFRpbWVdLFxuICAgICAgWydSZXBvcnQgUGVyaW9kJywgdGhpcy5yZXBvcnRQZXJpb2RdLFxuXG4gICAgXSk7XG5cbiAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMuZXhwb3J0U2VydmljZS5wcmVwYXJlRXhwb3J0VGFibGUodGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEVudHJpZXNMaXN0LCB0aGlzLmNvbHVtbkRlZnMsIHtcbiAgICAgIGN1cnJlbmN5RmllbGRzOiBbJ2xvY2FsQ3JlZGl0JywgJ2ZvcmV4Q3JlZGl0JywgJ2xvY2FsRGViaXQnLCAnZm9yZXhEZWJpdCddXG4gICAgfSk7XG5cbiAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0VG9FeGNlbFVuaXZlcnNhbCh0aXRsZSwgbWV0YWRhdGEsIGhlYWRlcnMsIHJvd3MsICdBY2NvdW50aW5nLVJlcG9ydC54bHN4Jyk7XG4gIH1cblxuICBleHBvcnRUb0NzdigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRFbnRyaWVzTGlzdD8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCB0aXRsZSA9IGBYcHJlc3MgTW9uZXkgLSBBY2NvdW50aW5nIFJlcG9ydGA7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UuZ2VuZXJhdGVSZXBvcnRNZXRhZGF0YShbXG4gICAgICBbJ1JlcG9ydCBVc2VyJywgdGhpcy5yZXBvcnRVc2VyXSxcbiAgICAgIFsnUmVwb3J0IFRpbWUnLCB0aGlzLnJlcG9ydFRpbWVdLFxuICAgICAgWydSZXBvcnQgUGVyaW9kJywgdGhpcy5yZXBvcnRQZXJpb2RdLFxuICAgIF0pO1xuXG4gICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLmV4cG9ydFNlcnZpY2UucHJlcGFyZUV4cG9ydFRhYmxlKHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRFbnRyaWVzTGlzdCwgdGhpcy5jb2x1bW5EZWZzLCB7XG4gICAgICBjdXJyZW5jeUZpZWxkczogWydsb2NhbENyZWRpdCcsICdmb3JleENyZWRpdCcsICdsb2NhbERlYml0JywgJ2ZvcmV4RGViaXQnXVxuICAgIH0pO1xuXG4gICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydFRvQ3N2VW5pdmVyc2FsKHRpdGxlLCBtZXRhZGF0YSwgaGVhZGVycywgcm93cywgJ0FjY291bnRpbmctUmVwb3J0LmNzdicpO1xuICB9XG5cblxuXG5cbiAgZ2V0UmVwb3J0KHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IG1vZGFsID0gcGF5bG9hZD8ubW9kYWwgfHwgcGF5bG9hZDtcblxuICAgIGNvbnN0IHJlcTogQWNjb3VudGluZ1JlcG9ydFJlcXVlc3QgPSB7XG4gICAgICBzdGFydERhdGU6IG5ldyBEYXRlKG1vZGFsLmZyb21EYXRlKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgLy8geXl5eS1NTS1kZCBmcm9tIHRoZSBmaWx0ZXJcbiAgICAgIGVuZERhdGU6IG5ldyBEYXRlKG1vZGFsLnRvRGF0ZSkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sXG4gICAgICBzZW5kQ291bnRyeUNvZGU6IG1vZGFsLnNlbmRDb3VudHJ5ID8/ICdBTEwnLFxuICAgICAgcmVjdkNvdW50cnlDb2RlOiBtb2RhbC5yZWNlaXZlQ291bnRyeSA/PyAnQUxMJyxcbiAgICAgIGJ1c2luZXNzUGFydG5lckNvcnJlbGF0aW9uSUQ6IG1vZGFsLmNsaWVudCA/PyAnQUxMJyxcbiAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBBcnJheS5pc0FycmF5KG1vZGFsLnRyYW5zYWN0aW9uU3RhdHVzKVxuICAgICAgICA/IChtb2RhbC50cmFuc2FjdGlvblN0YXR1cy5pbmNsdWRlcygnQWxsJykgPyAnQUxMJyA6IG1vZGFsLnRyYW5zYWN0aW9uU3RhdHVzLmpvaW4oJywnKSlcbiAgICAgICAgOiAobW9kYWwudHJhbnNhY3Rpb25TdGF0dXMgfHwgJ0FMTCcpLFxuICAgICAgcGF5b3V0Q3VycmVuY3k6IG1vZGFsLmN1cnJlbmN5ID8/ICdBTEwnLFxuICAgICAgdHJhbnNhY3Rpb25UeXBlOiBtb2RhbC5wcm9kdWN0ID8/ICdBTEwnLFxuICAgICAgYnJhbmNoQ29kZTogbW9kYWwuYnJhbmNoID8/ICdBTEwnLFxuICAgICAgY29tcGFueUNvZGU6ICdBTEwnIC8vIG9yICdCSCcgaWYgeW91ciBBUEkgcmVxdWlyZXMgaXQgc3BlY2lmaWNhbGx5XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0QWNjb3VudGluZ1JlcG9ydChyZXEpO1xuICB9XG5cblxuXG59XG4iLCI8bGliLXNlYXJjaC1maWx0ZXIgW1JlcG9ydE5hbWVdPVwiUmVwb3J0TmFtZVwiIChzZWFyY2hDbGlja2VkKT1cImdldFJlcG9ydCgkZXZlbnQpXCI+XG48L2xpYi1zZWFyY2gtZmlsdGVyPlxuXG48bGliLW1ldGFkYXRhIFtyZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiBbc2hvd21ldGFEYXRhT25lXT1cInRydWVcIiBbc2hvd21ldGFEYXRhVHdvXT1cInRydWVcIiBbbWV0YURhdGFPbmVdPVwibGVmdERhdGFcIlxuICBbbWV0YURhdGFUd29dPVwicmlnaHREYXRhXCIgKGV4cG9ydEV2ZW50KT1cImhhbmRsZUV4cG9ydCgkZXZlbnQpXCIgKHNlYXJjaEV2ZW50KT1cIm9uU2VhcmNoKCRldmVudClcIj48L2xpYi1tZXRhZGF0YT5cblxuPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cbiAgPGxpYi1wYWdlLXNpemUtc2VsZWN0b3IgW3RvdGFsRW50cmllc109XCJhY2NvdW50aW5nUmVwb3J0TW9kZWw/LmFjY291bnRpbmdSZXBvcnRFbnRyaWVzTGlzdD8ubGVuZ3RoXCJcbiAgICBbZGVmYXVsdFNpemVdPVwiJzE1J1wiIFtncmlkQXBpXT1cImdyaWRBcGlcIj5cbiAgICA+PC9saWItcGFnZS1zaXplLXNlbGVjdG9yPlxuICA8YWctZ3JpZC1hbmd1bGFyIGNsYXNzPVwiYWctdGhlbWUtYWxwaW5lIGNvbXBhY3QtZ3JpZCBncmlkLXNpemVcIiBbcm93RGF0YV09XCJyb3dEYXRhXCIgW2NvbHVtbkRlZnNdPVwiY29sdW1uRGVmc1wiXG4gICAgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiIFthbmltYXRlUm93c109XCJ0cnVlXCIgW3Jvd0hlaWdodF09XCIyMFwiIFtoZWFkZXJIZWlnaHRdPVwiMjRcIiBbcGFnaW5hdGlvbl09XCJ0cnVlXCJcbiAgICBbZG9tTGF5b3V0XT1cIidub3JtYWwnXCIgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtzdXBwcmVzc0hvcml6b250YWxTY3JvbGxdPVwiZmFsc2VcIlxuICAgIFtzdXBwcmVzc1Jvd0hvdmVySGlnaGxpZ2h0XT1cImZhbHNlXCIgW2dldFJvd0hlaWdodF09XCJnZXRSb3dIZWlnaHQuYmluZCh0aGlzKVwiIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50KVwiXG4gICAgW3N1cHByZXNzRHJhZ0xlYXZlSGlkZXNDb2x1bW5zXT1cInRydWVcIiBbc3VwcHJlc3NNb3ZhYmxlQ29sdW1uc109XCJmYWxzZVwiPlxuICA8L2FnLWdyaWQtYW5ndWxhcj5cbjwvZGl2PiJdfQ==