@rangertechnologies/ngnxt 2.1.78 → 2.1.80
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.
- package/README.md +27 -30
- package/esm2022/lib/ar.i18n.mjs +29 -29
- package/esm2022/lib/components/custom-button/custom-button.component.mjs +39 -39
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +366 -366
- package/esm2022/lib/components/custom-date/custom-date.component.mjs +47 -47
- package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +48 -48
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +219 -219
- package/esm2022/lib/components/custom-image/custom-image.component.mjs +34 -34
- package/esm2022/lib/components/custom-input/custom-input.component.mjs +93 -93
- package/esm2022/lib/components/custom-label/custom-label.component.mjs +21 -21
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +48 -48
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +115 -115
- package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +156 -0
- package/esm2022/lib/components/custom-table/custom-table.component.mjs +169 -169
- package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +65 -65
- package/esm2022/lib/components/custom-time/custom-time.component.mjs +61 -61
- package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +42 -42
- package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +39 -39
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +233 -233
- package/esm2022/lib/components/file-view/file-view.component.mjs +46 -46
- package/esm2022/lib/components/loader/loader.component.mjs +23 -23
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +188 -188
- package/esm2022/lib/components/search-box/search-box.component.mjs +130 -130
- package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +123 -123
- package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +19 -19
- package/esm2022/lib/en.i18n.mjs +29 -29
- package/esm2022/lib/i18n-config.service.mjs +4 -4
- package/esm2022/lib/i18n.component.mjs +47 -47
- package/esm2022/lib/i18n.module.mjs +38 -38
- package/esm2022/lib/i18n.pipe.mjs +25 -25
- package/esm2022/lib/i18n.service.mjs +56 -56
- package/esm2022/lib/interfaces/actionMeta.mjs +2 -2
- package/esm2022/lib/interfaces/apimeta.mjs +2 -2
- package/esm2022/lib/interfaces/dependencyMeta.mjs +2 -2
- package/esm2022/lib/model/bookletWrapper.mjs +9 -9
- package/esm2022/lib/model/changeWrapper.mjs +11 -11
- package/esm2022/lib/model/errorWrapper.mjs +6 -6
- package/esm2022/lib/model/tableWrapper.mjs +20 -20
- package/esm2022/lib/nxt-app.component.mjs +22 -22
- package/esm2022/lib/nxt-app.module.mjs +364 -352
- package/esm2022/lib/nxt-app.service.mjs +14 -14
- package/esm2022/lib/pages/booklet/booklet.component.mjs +540 -541
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +428 -407
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +2387 -2373
- package/esm2022/lib/pages/summary-page/summary-page.component.mjs +76 -76
- package/esm2022/lib/pipe/get-value.pipe.mjs +50 -50
- package/esm2022/lib/sample.mjs +3715 -3431
- package/esm2022/lib/services/change.service.mjs +53 -53
- package/esm2022/lib/services/data.service.mjs +80 -80
- package/esm2022/lib/services/salesforce.service.mjs +46 -46
- package/esm2022/lib/services/shared.service.mjs +100 -100
- package/esm2022/lib/services/storage.service.mjs +44 -44
- package/esm2022/lib/tam.i18n.mjs +29 -29
- package/esm2022/lib/wrapper.mjs +175 -175
- package/esm2022/public-api.mjs +15 -15
- package/esm2022/rangertechnologies-ngnxt.mjs +4 -4
- package/fesm2022/rangertechnologies-ngnxt.mjs +10306 -9830
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/ar.i18n.d.ts +24 -24
- package/lib/components/custom-button/custom-button.component.d.ts +16 -16
- package/lib/components/custom-calendar/custom-calendar.component.d.ts +65 -65
- package/lib/components/custom-date/custom-date.component.d.ts +18 -18
- package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +19 -19
- package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +39 -39
- package/lib/components/custom-image/custom-image.component.d.ts +13 -13
- package/lib/components/custom-input/custom-input.component.d.ts +31 -31
- package/lib/components/custom-label/custom-label.component.d.ts +10 -10
- package/lib/components/custom-model/custom-model.component.d.ts +19 -19
- package/lib/components/custom-radio/custom-radio.component.d.ts +33 -33
- package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +29 -0
- package/lib/components/custom-table/custom-table.component.d.ts +43 -43
- package/lib/components/custom-text-area/custom-text-area.component.d.ts +22 -22
- package/lib/components/custom-time/custom-time.component.d.ts +18 -18
- package/lib/components/dependent-table/dependent-table.component.d.ts +15 -15
- package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +16 -16
- package/lib/components/file-upload/file-upload.component.d.ts +42 -42
- package/lib/components/file-view/file-view.component.d.ts +16 -16
- package/lib/components/loader/loader.component.d.ts +11 -11
- package/lib/components/pick-location/pick-location.component.d.ts +42 -42
- package/lib/components/search-box/search-box.component.d.ts +40 -40
- package/lib/components/table-appendix/table-appendix.component.d.ts +30 -30
- package/lib/directives/componenthost/componenthost.directive.d.ts +8 -8
- package/lib/en.i18n.d.ts +24 -24
- package/lib/i18n-config.service.d.ts +2 -2
- package/lib/i18n.component.d.ts +11 -11
- package/lib/i18n.module.d.ts +9 -9
- package/lib/i18n.pipe.d.ts +10 -10
- package/lib/i18n.service.d.ts +14 -14
- package/lib/interfaces/actionMeta.d.ts +5 -5
- package/lib/interfaces/apimeta.d.ts +14 -14
- package/lib/interfaces/dependencyMeta.d.ts +8 -8
- package/lib/model/bookletWrapper.d.ts +5 -5
- package/lib/model/changeWrapper.d.ts +10 -10
- package/lib/model/errorWrapper.d.ts +5 -5
- package/lib/model/tableWrapper.d.ts +18 -18
- package/lib/nxt-app.component.d.ts +8 -8
- package/lib/nxt-app.module.d.ts +47 -46
- package/lib/nxt-app.service.d.ts +6 -6
- package/lib/pages/booklet/booklet.component.d.ts +68 -68
- package/lib/pages/questionbook/questionbook.component.d.ts +66 -66
- package/lib/pages/questionnaire/questionnaire.component.d.ts +220 -218
- package/lib/pages/summary-page/summary-page.component.d.ts +20 -20
- package/lib/pipe/get-value.pipe.d.ts +7 -7
- package/lib/sample.d.ts +11 -10
- package/lib/services/change.service.d.ts +22 -22
- package/lib/services/data.service.d.ts +13 -13
- package/lib/services/salesforce.service.d.ts +11 -11
- package/lib/services/shared.service.d.ts +15 -15
- package/lib/services/storage.service.d.ts +13 -13
- package/lib/tam.i18n.d.ts +24 -24
- package/lib/wrapper.d.ts +203 -203
- package/package.json +3 -3
- package/public-api.d.ts +10 -10
- package/rangertechnologies-ngnxt-2.1.80.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.78.tgz +0 -0
|
@@ -1,169 +1,169 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "../../services/change.service";
|
|
4
|
-
import * as i2 from "../../i18n.service";
|
|
5
|
-
import * as i3 from "../../services/salesforce.service";
|
|
6
|
-
import * as i4 from "../../services/data.service";
|
|
7
|
-
import * as i5 from "@angular/common";
|
|
8
|
-
import * as i6 from "@angular/forms";
|
|
9
|
-
import * as i7 from "../../pipe/get-value.pipe";
|
|
10
|
-
export class CustomTableComponent {
|
|
11
|
-
changeService;
|
|
12
|
-
i18nService;
|
|
13
|
-
sfService;
|
|
14
|
-
dataService;
|
|
15
|
-
question;
|
|
16
|
-
valueChange = new EventEmitter();
|
|
17
|
-
tableInfo;
|
|
18
|
-
tableHeader = [];
|
|
19
|
-
tableData = [];
|
|
20
|
-
addRowColSpan;
|
|
21
|
-
tableSize; // HA 28DEC23 table size declaration
|
|
22
|
-
objName;
|
|
23
|
-
filterLogic;
|
|
24
|
-
fieldMeta;
|
|
25
|
-
firStr;
|
|
26
|
-
searchBox = false;
|
|
27
|
-
apiMeta;
|
|
28
|
-
options;
|
|
29
|
-
isDisabled = true;
|
|
30
|
-
subscription;
|
|
31
|
-
labelField;
|
|
32
|
-
constructor(changeService, i18nService, sfService, dataService) {
|
|
33
|
-
this.changeService = changeService;
|
|
34
|
-
this.i18nService = i18nService;
|
|
35
|
-
this.sfService = sfService;
|
|
36
|
-
this.dataService = dataService;
|
|
37
|
-
}
|
|
38
|
-
// RS 09DEC24 Changed keys
|
|
39
|
-
ngOnInit() {
|
|
40
|
-
this.tableHeader = JSON.parse(this.question['fieldsMeta']);
|
|
41
|
-
this.tableSize = 10 / this.tableHeader.length;
|
|
42
|
-
// 12JUN24 - default table value
|
|
43
|
-
if (this.question?.input) {
|
|
44
|
-
this.tableData = this.question?.input;
|
|
45
|
-
}
|
|
46
|
-
if (this.apiMeta !== undefined) {
|
|
47
|
-
this.options = [];
|
|
48
|
-
let apiObj = JSON.parse(this.apiMeta);
|
|
49
|
-
this.labelField = apiObj.field;
|
|
50
|
-
if (apiObj.endpoint) {
|
|
51
|
-
this.dataService.apiResponse(apiObj.endpoint)?.subscribe((apiResponse) => {
|
|
52
|
-
let responses;
|
|
53
|
-
if (apiObj.variable) {
|
|
54
|
-
// VD 22May24 - handling multiple child objects
|
|
55
|
-
responses = this.dataService.getValue(apiResponse, apiObj.variable);
|
|
56
|
-
let results = [];
|
|
57
|
-
// HA 19JAN24 To avoid undefined error in console
|
|
58
|
-
for (let i = 0; i < responses?.length; i++) {
|
|
59
|
-
var resp = responses[i];
|
|
60
|
-
results.push(resp);
|
|
61
|
-
}
|
|
62
|
-
this.options = results;
|
|
63
|
-
}
|
|
64
|
-
else { // VD 19JAN24 - if response has value(which is array) only
|
|
65
|
-
responses = apiResponse;
|
|
66
|
-
this.options = responses;
|
|
67
|
-
}
|
|
68
|
-
this.options = this.options.map((obj) => ({ ...obj, edit: false }));
|
|
69
|
-
// Reference https://www.npmjs.com/package/@ng-select/ng-select
|
|
70
|
-
this.tableData = this.options;
|
|
71
|
-
console.log('tableData', this.tableData);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
// VD NOV23 - handle the dependent update for dropdown
|
|
75
|
-
let sourceId = apiObj.sourceQuestionId;
|
|
76
|
-
let field = apiObj.field; // VD 13MAY24 - dynamic field changes
|
|
77
|
-
if (sourceId) {
|
|
78
|
-
// // VD 10May24 Subscribe for the changes
|
|
79
|
-
this.subscription = this.changeService.changeAnnounced$.subscribe((changeValue) => {
|
|
80
|
-
if (changeValue != undefined) {
|
|
81
|
-
if (changeValue.valueObj != undefined && changeValue.fromQuestionId == apiObj.sourceQuestionId) {
|
|
82
|
-
console.log('changes happen');
|
|
83
|
-
this.options = this.options.map((obj) => ({ ...obj, edit: false }));
|
|
84
|
-
let item = changeValue.valueObj;
|
|
85
|
-
let validItem = true;
|
|
86
|
-
// VD 13MAY24 - bind dynamic field
|
|
87
|
-
if (this.tableData.length > 0) {
|
|
88
|
-
this.tableData.forEach(element => {
|
|
89
|
-
// VD 26Jun24 - to handle multiple objects
|
|
90
|
-
const objElementValue = this.dataService.getValue(element, field);
|
|
91
|
-
const objItemValue = this.dataService.getValue(item, field);
|
|
92
|
-
if (objElementValue == objItemValue) {
|
|
93
|
-
validItem = false;
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
if (validItem) {
|
|
98
|
-
if (this.tableData.length > 0) {
|
|
99
|
-
this.tableData = [...this.tableData, item];
|
|
100
|
-
this.emitTableDataValue(this.tableData);
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
this.tableData.push(item);
|
|
104
|
-
this.emitTableDataValue(this.tableData);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
this.changeService.confirmChange(apiObj.sourceQuestionId);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
console.log('tableData', this.tableData);
|
|
114
|
-
console.log('tableHeader', this.tableHeader);
|
|
115
|
-
console.log('tableInfo', this.tableInfo);
|
|
116
|
-
}
|
|
117
|
-
addRow() {
|
|
118
|
-
let newItem = {};
|
|
119
|
-
this.tableHeader.forEach(item => {
|
|
120
|
-
if (item.apiName) {
|
|
121
|
-
newItem[item.apiName] = "";
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
const updatedTableData = [...this.tableData, newItem];
|
|
125
|
-
this.tableData = updatedTableData;
|
|
126
|
-
this.emitTableDataValue(updatedTableData);
|
|
127
|
-
}
|
|
128
|
-
updateRadio(item, value) {
|
|
129
|
-
item.value = value;
|
|
130
|
-
this.emitTableDataValue(this.tableData);
|
|
131
|
-
}
|
|
132
|
-
// VD 23Aug24 handle Type
|
|
133
|
-
updateLabel(rowIndex, label, value) {
|
|
134
|
-
this.tableData[rowIndex][label] = value;
|
|
135
|
-
this.emitTableDataValue(this.tableData);
|
|
136
|
-
}
|
|
137
|
-
deleteRow(rowIndex) {
|
|
138
|
-
this.tableData.splice(rowIndex, 1);
|
|
139
|
-
}
|
|
140
|
-
editRow(rowIndex) {
|
|
141
|
-
var a = 0;
|
|
142
|
-
this.tableData.forEach(element => {
|
|
143
|
-
if (a === rowIndex) {
|
|
144
|
-
element.edit = true;
|
|
145
|
-
}
|
|
146
|
-
a++;
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
updateNumber(item, label, value) {
|
|
150
|
-
item.value[label] = value;
|
|
151
|
-
this.emitTableDataValue(this.tableData);
|
|
152
|
-
}
|
|
153
|
-
emitTableDataValue(updatedTableData) {
|
|
154
|
-
this.valueChange.emit(updatedTableData);
|
|
155
|
-
}
|
|
156
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
157
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
158
|
-
}
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
160
|
-
type: Component,
|
|
161
|
-
args: [{ selector: 'app-custom-table', template: "<table class=\"table table-striped table-bordered\">\
|
|
162
|
-
}], ctorParameters:
|
|
163
|
-
type: Input
|
|
164
|
-
}], valueChange: [{
|
|
165
|
-
type: Output
|
|
166
|
-
}], apiMeta: [{
|
|
167
|
-
type: Input
|
|
168
|
-
}] } });
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS10YWJsZS9jdXN0b20tdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXRhYmxlL2N1c3RvbS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFtQi9FLE1BQU0sT0FBTyxvQkFBb0I7SUFxQlg7SUFBb0M7SUFBa0M7SUFBc0M7SUFwQnZILFFBQVEsQ0FBVTtJQUNqQixXQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFFbkUsU0FBUyxDQUFlO0lBQ3hCLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakIsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNmLGFBQWEsQ0FBUztJQUN0QixTQUFTLENBQVMsQ0FBQyxvQ0FBb0M7SUFDdkQsT0FBTyxDQUFNO0lBQ2IsV0FBVyxDQUFNO0lBQ2pCLFNBQVMsQ0FBUztJQUNsQixNQUFNLENBQVM7SUFDZixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQ2xCLE9BQU8sQ0FBUztJQUNsQixPQUFPLENBQVc7SUFDekIsVUFBVSxHQUFZLElBQUksQ0FBQztJQUMzQixZQUFZLENBQWU7SUFFcEIsVUFBVSxDQUFTO0lBRTFCLFlBQW9CLGFBQTRCLEVBQVEsV0FBd0IsRUFBVSxTQUE0QixFQUFVLFdBQXdCO1FBQXBJLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVEsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUFVLGdCQUFX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dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcclxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYWJsZVdyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC90YWJsZVdyYXBwZXInO1xyXG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vd3JhcHBlcic7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYXBpbWV0YSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5cclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tdGFibGUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBRdWVzdGlvblxyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgdGFibGVJbmZvOiBUYWJsZVdyYXBwZXI7XHJcbiAgdGFibGVIZWFkZXIgPSBbXTtcclxuICB0YWJsZURhdGEgPSBbXTtcclxuICBhZGRSb3dDb2xTcGFuOiBudW1iZXI7XHJcbiAgdGFibGVTaXplOiBudW1iZXI7IC8vIEhBIDI4REVDMjMgdGFibGUgc2l6ZSBkZWNsYXJhdGlvblxyXG4gIG9iak5hbWU6IGFueTtcclxuICBmaWx0ZXJMb2dpYzogYW55O1xyXG4gIGZpZWxkTWV0YTogc3RyaW5nO1xyXG4gIGZpclN0cjogc3RyaW5nO1xyXG4gIHNlYXJjaEJveDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZztcclxuICBwdWJsaWMgb3B0aW9uczogc3RyaW5nW107XHJcbiAgaXNEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHB1YmxpYyBsYWJlbEZpZWxkOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSxwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLCBwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlKSB7IH1cclxuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZUhlYWRlciA9IEpTT04ucGFyc2UodGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddKTtcclxuICAgIHRoaXMudGFibGVTaXplID0gMTAvdGhpcy50YWJsZUhlYWRlci5sZW5ndGg7XHJcbi8vIDEySlVOMjQgLSBkZWZhdWx0IHRhYmxlIHZhbHVlXHJcbiAgICBpZih0aGlzLnF1ZXN0aW9uPy5pbnB1dCl7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLnF1ZXN0aW9uPy5pbnB1dDtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuYXBpTWV0YSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xyXG4gICAgICBsZXQgYXBpT2JqOiBBUElNZXRhID0gSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xyXG4gICAgICB0aGlzLmxhYmVsRmllbGQgPSBhcGlPYmouZmllbGQ7XHJcbiAgICAgIGlmKGFwaU9iai5lbmRwb2ludCl7XHJcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5hcGlSZXNwb25zZShhcGlPYmouZW5kcG9pbnQpPy5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBsZXQgcmVzcG9uc2VzO1xyXG4gICAgICAgICAgaWYoYXBpT2JqLnZhcmlhYmxlKXtcclxuICAgICAgICAgICAgIC8vIFZEIDIyTWF5MjQgLSBoYW5kbGluZyBtdWx0aXBsZSBjaGlsZCBvYmplY3RzXHJcbiAgICAgICAgICAgIHJlc3BvbnNlcyA9ICB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGFwaVJlc3BvbnNlLGFwaU9iai52YXJpYWJsZSk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgIC8vIEhBIDE5SkFOMjQgVG8gYXZvaWQgdW5kZWZpbmVkIGVycm9yIGluIGNvbnNvbGVcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZXM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHJlc3AgPSByZXNwb25zZXNbaV07XHJcbiAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3VsdHM7XHJcbiAgICAgICAgICB9ZWxzZXsgIC8vIFZEIDE5SkFOMjQgLSBpZiByZXNwb25zZSBoYXMgdmFsdWUod2hpY2ggaXMgYXJyYXkpIG9ubHlcclxuICAgICAgICAgICAgcmVzcG9uc2VzID0gYXBpUmVzcG9uc2U7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3BvbnNlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucy5tYXAoKG9iajogYW55KSA9PiAoeyAuLi5vYmosIGVkaXQ6IGZhbHNlIH0pKTtcclxuICAgICAgICAgIC8vIFJlZmVyZW5jZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Abmctc2VsZWN0L25nLXNlbGVjdFxyXG4gICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMub3B0aW9ucztcclxuICAgICAgICBjb25zb2xlLmxvZygndGFibGVEYXRhJywgdGhpcy50YWJsZURhdGEpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICBcclxuICAgICAgLy8gVkQgTk9WMjMgLSBoYW5kbGUgdGhlIGRlcGVuZGVudCB1cGRhdGUgZm9yIGRyb3Bkb3duXHJcbiAgICAgIGxldCBzb3VyY2VJZCA9IGFwaU9iai5zb3VyY2VRdWVzdGlvbklkO1xyXG4gICAgICBsZXQgZmllbGQgPSBhcGlPYmouZmllbGQ7ICAgICAgICAvLyBWRCAxM01BWTI0IC0gZHluYW1pYyBmaWVsZCBjaGFuZ2VzXHJcbiAgICAgIGlmKHNvdXJjZUlkKXtcclxuICAgICAgICAvLyAvLyBWRCAxME1heTI0IFN1YnNjcmliZSBmb3IgdGhlIGNoYW5nZXNcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcclxuICAgICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjaGFuZ2VzIGhhcHBlbicpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBjaGFuZ2VWYWx1ZS52YWx1ZU9iajtcclxuICAgICAgICAgICAgICAgIGxldCB2YWxpZEl0ZW0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgIC8vIFZEIDEzTUFZMjQgLSBiaW5kIGR5bmFtaWMgZmllbGRcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMudGFibGVEYXRhLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgLy8gVkQgMjZKdW4yNCAtIHRvIGhhbmRsZSBtdWx0aXBsZSBvYmplY3RzXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqRWxlbWVudFZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShlbGVtZW50LGZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmpJdGVtVmFsdWUgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGl0ZW0sZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYob2JqRWxlbWVudFZhbHVlID09IG9iakl0ZW1WYWx1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRJdGVtID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKHZhbGlkSXRlbSl7XHJcbiAgICAgICAgICAgICAgICAgIGlmKHRoaXMudGFibGVEYXRhLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gWy4uLnRoaXMudGFibGVEYXRhLGl0ZW1dO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy50YWJsZURhdGEpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5jb25maXJtQ2hhbmdlKGFwaU9iai5zb3VyY2VRdWVzdGlvbklkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCd0YWJsZURhdGEnLCB0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICBjb25zb2xlLmxvZygndGFibGVIZWFkZXInLCB0aGlzLnRhYmxlSGVhZGVyKTtcclxuICAgIGNvbnNvbGUubG9nKCd0YWJsZUluZm8nLCB0aGlzLnRhYmxlSW5mbyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYWRkUm93KCk6IHZvaWQge1xyXG4gICAgbGV0IG5ld0l0ZW0gPSB7fTtcclxuICAgICAgdGhpcy50YWJsZUhlYWRlci5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGlmKGl0ZW0uYXBpTmFtZSl7XHJcbiAgICAgICAgICBuZXdJdGVtW2l0ZW0uYXBpTmFtZV09IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIGNvbnN0IHVwZGF0ZWRUYWJsZURhdGEgPSBbLi4udGhpcy50YWJsZURhdGEsIG5ld0l0ZW1dO1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSB1cGRhdGVkVGFibGVEYXRhO1xyXG4gICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodXBkYXRlZFRhYmxlRGF0YSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSYWRpbyhpdGVtOiBhbnksIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcbiAgLy8gVkQgMjNBdWcyNCBoYW5kbGUgIFR5cGVcclxuICB1cGRhdGVMYWJlbChyb3dJbmRleDogbnVtYmVyLCBsYWJlbDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYmxlRGF0YVtyb3dJbmRleF1bbGFiZWxdID0gdmFsdWU7XHJcbiAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgfVxyXG4gIGRlbGV0ZVJvdyhyb3dJbmRleDogbnVtYmVyKXtcclxuICAgIHRoaXMudGFibGVEYXRhLnNwbGljZShyb3dJbmRleCwgMSk7XHJcbiAgfVxyXG4gIGVkaXRSb3cocm93SW5kZXg6IG51bWJlcil7XHJcbiAgICB2YXIgYSA9IDA7XHJcbiAgICB0aGlzLnRhYmxlRGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICBpZihhID09PSByb3dJbmRleCl7XHJcbiAgICAgICAgZWxlbWVudC5lZGl0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBhKys7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU51bWJlcihpdGVtOiBhbnksIGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpe1xyXG4gICAgaXRlbS52YWx1ZVtsYWJlbF0gPSB2YWx1ZTtcclxuICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcclxuICB9XHJcblxyXG5cclxuICBlbWl0VGFibGVEYXRhVmFsdWUodXBkYXRlZFRhYmxlRGF0YTogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh1cGRhdGVkVGFibGVEYXRhKTtcclxuICB9XHJcbn0iLCI8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkXCI+XHJcbiAgPHRoZWFkPlxyXG4gICAgPCEtLSBIQSAyOERFQzIzIGNoYW5nZWQgdGFibGUgaGVhZGVyIHZhbHVlcyBhbmQgY2hhbmdlZCB0YWJsZSBzaXplIGxvZ2ljIHRvIGV2ZW5seSB2aXNpYmxlIC0tPlxyXG4gICAgPCEtLSA8dGg+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjaGFuZ2UpPVwic2VsZWN0QWxsKCRldmVudC50YXJnZXQuY2hlY2tlZClcIj48L3RoPiAtLT5cclxuICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHRhYmxlSGVhZGVyOyBsZXQgaGkgPSBpbmRleFwiIFtjbGFzc109XCInY29sLW1kLScgKyB0YWJsZVNpemVcIj5cclxuICAgICAge3sgaGVhZGVyLmxhYmVsIH19XHJcbiAgICA8L3RoPlxyXG4gICAgPHRoIGNsYXNzPVwiY29sLW1kLTJcIiBjb2xzcGFuPVwiMlwiPkFjdGlvbnM8L3RoPlxyXG4gIDwvdGhlYWQ+XHJcbiAgPHRib2R5ICpuZ0lmPVwidGFibGVEYXRhXCI+XHJcbiAgICA8dHIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdGFibGVEYXRhOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDwhLS0gPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cIml0ZW0uc2VsZWN0ZWRcIiAoY2hhbmdlKT1cInNlbGVjdEl0ZW0oaXRlbSlcIj48L3RkPiAtLT5cclxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkZXI7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdpbWFnZXRleHQnXCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIGhlYWRlci5zaXplXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgICAgPGltZyBzdHlsZT1cIndpZHRoOiAzNXB4OyBoZWlnaHQ6IDMycHg7IG1hcmdpbi1yaWdodDogNXB4O1wiIFtzcmNdPVwiaXRlbS5pbWFnZVNyY1wiIFthbHRdPVwiaXRlbS5hbHRUZXh0XCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cIml0ZW1baGVhZGVyLmZpZWxkTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVMYWJlbChpLCBoZWFkZXIuZmllbGROYW1lLCBpdGVtW2hlYWRlci5maWVsZE5hbWVdKVwiIGNsYXNzPVwic2hlLWxpbmUtaW5wdXQgdGFibGUtaW5wdXRcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdpbWFnZSdcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgaGVhZGVyLnNpemVcIj5cclxuICAgICAgICAgIDxpbWcgc3R5bGU9XCJ3aWR0aDogMzVweDsgaGVpZ2h0OiAzMnB4OyBtYXJnaW4tcmlnaHQ6IDVweDtcIiBbc3JjXT1cIml0ZW1baGVhZGVyLmZpZWxkTmFtZV1cIiBbYWx0XT1cIml0ZW0uYWx0VGV4dFwiPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1WRCAyM0F1ZzI0IGhhbmRsZSByZWFkT25seSAgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlci5mbGRUeXBlID09PSAnVGV4dCcgfHwgaGVhZGVyLmZsZFR5cGUgPT09ICdUZXh0J1wiPlxyXG4gICAgICAgICAgPCEtLSBWRCAyNkp1bjI0IC0gcGlwZSBjaGFuZ2UgdG8gaGFuZGxlIG11bHRpcGxlIG9iamVjdHMtLT5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtyZWFkb25seV09XCJoZWFkZXIucmVhZE9ubHlcIiBbZGlzYWJsZWRdPVwiIWl0ZW0uZWRpdFwiIFtuZ0NsYXNzXT1cInsnZWRpdElucHV0JzogaXRlbS5lZGl0ICYmICFoZWFkZXIucmVhZE9ubHl9XCIgW25nTW9kZWxdPVwiJycgfCBnZXRWYWx1ZTogaXRlbSA6IGhlYWRlci5hcGlOYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGFiZWwoaSwgaGVhZGVyLmFwaU5hbWUsJGV2ZW50KVwiIGNsYXNzPVwic2hlLWxpbmUtaW5wdXQgdGFibGUtaW5wdXRcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tVkQgMjNBdWcyNCBoYW5kbGUgTnVtYmVyIFR5cGUgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlci5mbGRUeXBlID09PSAnTnVtYmVyJyB8fCBoZWFkZXIuZmxkVHlwZSA9PT0gJ051bWJlcidcIj5cclxuICAgICAgICAgIDwhLS0gVkQgMjZKdW4yNCAtIHBpcGUgY2hhbmdlIHRvIGhhbmRsZSBtdWx0aXBsZSBvYmplY3RzLS0+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIk51bWJlclwiIFtyZWFkb25seV09XCJoZWFkZXIucmVhZE9ubHlcIiBbZGlzYWJsZWRdPVwiIWl0ZW0uZWRpdFwiIFtuZ0NsYXNzXT1cInsnZWRpdElucHV0JzogaXRlbS5lZGl0ICYmICFoZWFkZXIucmVhZE9ubHl9XCIgW25nTW9kZWxdPVwiJycgfCBnZXRWYWx1ZTogaXRlbSA6IGhlYWRlci5hcGlOYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTGFiZWwoaSwgaGVhZGVyLmFwaU5hbWUsJGV2ZW50KVwiIGNsYXNzPVwic2hlLWxpbmUtaW5wdXQgdGFibGUtaW5wdXRcIj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdyYWRpbydcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgaGVhZGVyLnNpemVcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbbmFtZV09XCJpdGVtLm5hbWVcIiBbY2hlY2tlZF09XCJpdGVtLnZhbHVlID09IGhlYWRlci5maWVsZE5hbWVcIiAgKGNsaWNrKT1cInVwZGF0ZVJhZGlvKGl0ZW0sIGhlYWRlci5maWVsZE5hbWUpXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0ZCBjbGFzcz1cImFjdGlvblwiPlxyXG4gICAgICAgIDxhIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XCIgKGNsaWNrKT1cImVkaXRSb3coaSlcIj48aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz48c3Bhbj5FZGl0PC9zcGFuPjwvYT5cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRkIGNsYXNzPVwiYWN0aW9uXCI+XHJcbiAgICAgICAgPGEgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcIiAoY2xpY2spPVwiZGVsZXRlUm93KGkpXCI+PGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCIvPjxzcGFuPkRlbGV0ZTwvc3Bhbj48L2E+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L3RyPlxyXG4gIDwvdGJvZHk+XHJcbjwvdGFibGU+XHJcbjxkaXYgKGNsaWNrKT1cImFkZFJvdygpXCIgY2xhc3M9XCJhZGRSb3dDbGFzc1wiPjxkaXYgY2xhc3M9XCJjaXJjbGUtYnV0dG9uXCI+KzwvZGl2PjwvZGl2PiJdfQ==
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/change.service";
|
|
4
|
+
import * as i2 from "../../i18n.service";
|
|
5
|
+
import * as i3 from "../../services/salesforce.service";
|
|
6
|
+
import * as i4 from "../../services/data.service";
|
|
7
|
+
import * as i5 from "@angular/common";
|
|
8
|
+
import * as i6 from "@angular/forms";
|
|
9
|
+
import * as i7 from "../../pipe/get-value.pipe";
|
|
10
|
+
export class CustomTableComponent {
|
|
11
|
+
changeService;
|
|
12
|
+
i18nService;
|
|
13
|
+
sfService;
|
|
14
|
+
dataService;
|
|
15
|
+
question;
|
|
16
|
+
valueChange = new EventEmitter();
|
|
17
|
+
tableInfo;
|
|
18
|
+
tableHeader = [];
|
|
19
|
+
tableData = [];
|
|
20
|
+
addRowColSpan;
|
|
21
|
+
tableSize; // HA 28DEC23 table size declaration
|
|
22
|
+
objName;
|
|
23
|
+
filterLogic;
|
|
24
|
+
fieldMeta;
|
|
25
|
+
firStr;
|
|
26
|
+
searchBox = false;
|
|
27
|
+
apiMeta;
|
|
28
|
+
options;
|
|
29
|
+
isDisabled = true;
|
|
30
|
+
subscription;
|
|
31
|
+
labelField;
|
|
32
|
+
constructor(changeService, i18nService, sfService, dataService) {
|
|
33
|
+
this.changeService = changeService;
|
|
34
|
+
this.i18nService = i18nService;
|
|
35
|
+
this.sfService = sfService;
|
|
36
|
+
this.dataService = dataService;
|
|
37
|
+
}
|
|
38
|
+
// RS 09DEC24 Changed keys
|
|
39
|
+
ngOnInit() {
|
|
40
|
+
this.tableHeader = JSON.parse(this.question['fieldsMeta']);
|
|
41
|
+
this.tableSize = 10 / this.tableHeader.length;
|
|
42
|
+
// 12JUN24 - default table value
|
|
43
|
+
if (this.question?.input) {
|
|
44
|
+
this.tableData = this.question?.input;
|
|
45
|
+
}
|
|
46
|
+
if (this.apiMeta !== undefined) {
|
|
47
|
+
this.options = [];
|
|
48
|
+
let apiObj = JSON.parse(this.apiMeta);
|
|
49
|
+
this.labelField = apiObj.field;
|
|
50
|
+
if (apiObj.endpoint) {
|
|
51
|
+
this.dataService.apiResponse(apiObj.endpoint)?.subscribe((apiResponse) => {
|
|
52
|
+
let responses;
|
|
53
|
+
if (apiObj.variable) {
|
|
54
|
+
// VD 22May24 - handling multiple child objects
|
|
55
|
+
responses = this.dataService.getValue(apiResponse, apiObj.variable);
|
|
56
|
+
let results = [];
|
|
57
|
+
// HA 19JAN24 To avoid undefined error in console
|
|
58
|
+
for (let i = 0; i < responses?.length; i++) {
|
|
59
|
+
var resp = responses[i];
|
|
60
|
+
results.push(resp);
|
|
61
|
+
}
|
|
62
|
+
this.options = results;
|
|
63
|
+
}
|
|
64
|
+
else { // VD 19JAN24 - if response has value(which is array) only
|
|
65
|
+
responses = apiResponse;
|
|
66
|
+
this.options = responses;
|
|
67
|
+
}
|
|
68
|
+
this.options = this.options.map((obj) => ({ ...obj, edit: false }));
|
|
69
|
+
// Reference https://www.npmjs.com/package/@ng-select/ng-select
|
|
70
|
+
this.tableData = this.options;
|
|
71
|
+
console.log('tableData', this.tableData);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
// VD NOV23 - handle the dependent update for dropdown
|
|
75
|
+
let sourceId = apiObj.sourceQuestionId;
|
|
76
|
+
let field = apiObj.field; // VD 13MAY24 - dynamic field changes
|
|
77
|
+
if (sourceId) {
|
|
78
|
+
// // VD 10May24 Subscribe for the changes
|
|
79
|
+
this.subscription = this.changeService.changeAnnounced$.subscribe((changeValue) => {
|
|
80
|
+
if (changeValue != undefined) {
|
|
81
|
+
if (changeValue.valueObj != undefined && changeValue.fromQuestionId == apiObj.sourceQuestionId) {
|
|
82
|
+
console.log('changes happen');
|
|
83
|
+
this.options = this.options.map((obj) => ({ ...obj, edit: false }));
|
|
84
|
+
let item = changeValue.valueObj;
|
|
85
|
+
let validItem = true;
|
|
86
|
+
// VD 13MAY24 - bind dynamic field
|
|
87
|
+
if (this.tableData.length > 0) {
|
|
88
|
+
this.tableData.forEach(element => {
|
|
89
|
+
// VD 26Jun24 - to handle multiple objects
|
|
90
|
+
const objElementValue = this.dataService.getValue(element, field);
|
|
91
|
+
const objItemValue = this.dataService.getValue(item, field);
|
|
92
|
+
if (objElementValue == objItemValue) {
|
|
93
|
+
validItem = false;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (validItem) {
|
|
98
|
+
if (this.tableData.length > 0) {
|
|
99
|
+
this.tableData = [...this.tableData, item];
|
|
100
|
+
this.emitTableDataValue(this.tableData);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.tableData.push(item);
|
|
104
|
+
this.emitTableDataValue(this.tableData);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
this.changeService.confirmChange(apiObj.sourceQuestionId);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
console.log('tableData', this.tableData);
|
|
114
|
+
console.log('tableHeader', this.tableHeader);
|
|
115
|
+
console.log('tableInfo', this.tableInfo);
|
|
116
|
+
}
|
|
117
|
+
addRow() {
|
|
118
|
+
let newItem = {};
|
|
119
|
+
this.tableHeader.forEach(item => {
|
|
120
|
+
if (item.apiName) {
|
|
121
|
+
newItem[item.apiName] = "";
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
const updatedTableData = [...this.tableData, newItem];
|
|
125
|
+
this.tableData = updatedTableData;
|
|
126
|
+
this.emitTableDataValue(updatedTableData);
|
|
127
|
+
}
|
|
128
|
+
updateRadio(item, value) {
|
|
129
|
+
item.value = value;
|
|
130
|
+
this.emitTableDataValue(this.tableData);
|
|
131
|
+
}
|
|
132
|
+
// VD 23Aug24 handle Type
|
|
133
|
+
updateLabel(rowIndex, label, value) {
|
|
134
|
+
this.tableData[rowIndex][label] = value;
|
|
135
|
+
this.emitTableDataValue(this.tableData);
|
|
136
|
+
}
|
|
137
|
+
deleteRow(rowIndex) {
|
|
138
|
+
this.tableData.splice(rowIndex, 1);
|
|
139
|
+
}
|
|
140
|
+
editRow(rowIndex) {
|
|
141
|
+
var a = 0;
|
|
142
|
+
this.tableData.forEach(element => {
|
|
143
|
+
if (a === rowIndex) {
|
|
144
|
+
element.edit = true;
|
|
145
|
+
}
|
|
146
|
+
a++;
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
updateNumber(item, label, value) {
|
|
150
|
+
item.value[label] = value;
|
|
151
|
+
this.emitTableDataValue(this.tableData);
|
|
152
|
+
}
|
|
153
|
+
emitTableDataValue(updatedTableData) {
|
|
154
|
+
this.valueChange.emit(updatedTableData);
|
|
155
|
+
}
|
|
156
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomTableComponent, deps: [{ token: i1.ChangeService }, { token: i2.I18nService }, { token: i3.SalesforceService }, { token: i4.DataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
157
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomTableComponent, selector: "app-custom-table", inputs: { question: "question", apiMeta: "apiMeta" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<table class=\"table table-striped table-bordered\">\n <thead>\n <!-- HA 28DEC23 changed table header values and changed table size logic to evenly visible -->\n <!-- <th><input type=\"checkbox\" (change)=\"selectAll($event.target.checked)\"></th> -->\n <th *ngFor=\"let header of tableHeader; let hi = index\" [class]=\"'col-md-' + tableSize\">\n {{ header.label }}\n </th>\n <th class=\"col-md-2\" colspan=\"2\">Actions</th>\n </thead>\n <tbody *ngIf=\"tableData\">\n <tr *ngFor=\"let item of tableData; let i = index\">\n <!-- <td><input type=\"checkbox\" [(ngModel)]=\"item.selected\" (change)=\"selectItem(item)\"></td> -->\n <td *ngFor=\"let header of tableHeader; let j = index\">\n <div *ngIf=\"header.fldType === 'imagetext'\" [class]=\"'col-md-' + header.size\" style=\"display: flex;\">\n <img style=\"width: 35px; height: 32px; margin-right: 5px;\" [src]=\"item.imageSrc\" [alt]=\"item.altText\">\n <input type=\"text\" [(ngModel)]=\"item[header.fieldName]\" (ngModelChange)=\"updateLabel(i, header.fieldName, item[header.fieldName])\" class=\"she-line-input table-input\">\n </div>\n <div *ngIf=\"header.fldType === 'image'\" [class]=\"'col-md-' + header.size\">\n <img style=\"width: 35px; height: 32px; margin-right: 5px;\" [src]=\"item[header.fieldName]\" [alt]=\"item.altText\">\n </div>\n <!--VD 23Aug24 handle readOnly -->\n <div *ngIf=\"header.fldType === 'Text' || header.fldType === 'Text'\">\n <!-- VD 26Jun24 - pipe change to handle multiple objects-->\n <input type=\"text\" [readonly]=\"header.readOnly\" [disabled]=\"!item.edit\" [ngClass]=\"{'editInput': item.edit && !header.readOnly}\" [ngModel]=\"'' | getValue: item : header.apiName\" (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" class=\"she-line-input table-input\">\n </div>\n <!--VD 23Aug24 handle Number Type -->\n <div *ngIf=\"header.fldType === 'Number' || header.fldType === 'Number'\">\n <!-- VD 26Jun24 - pipe change to handle multiple objects-->\n <input type=\"Number\" [readonly]=\"header.readOnly\" [disabled]=\"!item.edit\" [ngClass]=\"{'editInput': item.edit && !header.readOnly}\" [ngModel]=\"'' | getValue: item : header.apiName\" (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" class=\"she-line-input table-input\">\n </div>\n <div *ngIf=\"header.fldType === 'radio'\" [class]=\"'col-md-' + header.size\">\n <input type=\"radio\" [name]=\"item.name\" [checked]=\"item.value == header.fieldName\" (click)=\"updateRadio(item, header.fieldName)\">\n </div>\n </td>\n <td class=\"action\">\n <a style=\"display: flex; justify-content: space-evenly;\" (click)=\"editRow(i)\"><img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit1\" /><span>Edit</span></a>\n </td>\n <td class=\"action\">\n <a style=\"display: flex; justify-content: space-evenly;\" (click)=\"deleteRow(i)\"><img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"/><span>Delete</span></a>\n </td>\n </tr>\n </tbody>\n</table>\n<div (click)=\"addRow()\" class=\"addRowClass\"><div class=\"circle-button\">+</div></div>", styles: [".table{width:100%;max-width:100%;margin-bottom:20px;border-collapse:collapse;border-spacing:0}.table-bordered{border:1px solid #ddd}thead{background-color:#03a9f4}thead th{color:#fff;font-size:14px;text-align:center}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}th{text-align:left}thead .permission{text-align:center}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}tbody{color:#797979}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}tbody td{font-size:13px}.permission_yes,.permission_no,.permission_na{text-align:center}.none-border th{border:none}.addRowClass{float:right;margin-right:15%}.editInput{border-bottom:1px solid red!important}.action,.addRowClass{cursor:pointer}.action :hover{color:red}.circle-button{width:50px;height:50px;border-radius:50%;background-color:#03a9f4;color:#fff;font-size:25px;display:flex;justify-content:center;align-items:center;cursor:pointer;box-shadow:0 2px 4px #0003}.circle-button:hover{background-color:#03a9f4}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.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: i6.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i7.GetValuePipe, name: "getValue" }] });
|
|
158
|
+
}
|
|
159
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomTableComponent, decorators: [{
|
|
160
|
+
type: Component,
|
|
161
|
+
args: [{ selector: 'app-custom-table', template: "<table class=\"table table-striped table-bordered\">\n <thead>\n <!-- HA 28DEC23 changed table header values and changed table size logic to evenly visible -->\n <!-- <th><input type=\"checkbox\" (change)=\"selectAll($event.target.checked)\"></th> -->\n <th *ngFor=\"let header of tableHeader; let hi = index\" [class]=\"'col-md-' + tableSize\">\n {{ header.label }}\n </th>\n <th class=\"col-md-2\" colspan=\"2\">Actions</th>\n </thead>\n <tbody *ngIf=\"tableData\">\n <tr *ngFor=\"let item of tableData; let i = index\">\n <!-- <td><input type=\"checkbox\" [(ngModel)]=\"item.selected\" (change)=\"selectItem(item)\"></td> -->\n <td *ngFor=\"let header of tableHeader; let j = index\">\n <div *ngIf=\"header.fldType === 'imagetext'\" [class]=\"'col-md-' + header.size\" style=\"display: flex;\">\n <img style=\"width: 35px; height: 32px; margin-right: 5px;\" [src]=\"item.imageSrc\" [alt]=\"item.altText\">\n <input type=\"text\" [(ngModel)]=\"item[header.fieldName]\" (ngModelChange)=\"updateLabel(i, header.fieldName, item[header.fieldName])\" class=\"she-line-input table-input\">\n </div>\n <div *ngIf=\"header.fldType === 'image'\" [class]=\"'col-md-' + header.size\">\n <img style=\"width: 35px; height: 32px; margin-right: 5px;\" [src]=\"item[header.fieldName]\" [alt]=\"item.altText\">\n </div>\n <!--VD 23Aug24 handle readOnly -->\n <div *ngIf=\"header.fldType === 'Text' || header.fldType === 'Text'\">\n <!-- VD 26Jun24 - pipe change to handle multiple objects-->\n <input type=\"text\" [readonly]=\"header.readOnly\" [disabled]=\"!item.edit\" [ngClass]=\"{'editInput': item.edit && !header.readOnly}\" [ngModel]=\"'' | getValue: item : header.apiName\" (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" class=\"she-line-input table-input\">\n </div>\n <!--VD 23Aug24 handle Number Type -->\n <div *ngIf=\"header.fldType === 'Number' || header.fldType === 'Number'\">\n <!-- VD 26Jun24 - pipe change to handle multiple objects-->\n <input type=\"Number\" [readonly]=\"header.readOnly\" [disabled]=\"!item.edit\" [ngClass]=\"{'editInput': item.edit && !header.readOnly}\" [ngModel]=\"'' | getValue: item : header.apiName\" (ngModelChange)=\"updateLabel(i, header.apiName,$event)\" class=\"she-line-input table-input\">\n </div>\n <div *ngIf=\"header.fldType === 'radio'\" [class]=\"'col-md-' + header.size\">\n <input type=\"radio\" [name]=\"item.name\" [checked]=\"item.value == header.fieldName\" (click)=\"updateRadio(item, header.fieldName)\">\n </div>\n </td>\n <td class=\"action\">\n <a style=\"display: flex; justify-content: space-evenly;\" (click)=\"editRow(i)\"><img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit1\" /><span>Edit</span></a>\n </td>\n <td class=\"action\">\n <a style=\"display: flex; justify-content: space-evenly;\" (click)=\"deleteRow(i)\"><img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"/><span>Delete</span></a>\n </td>\n </tr>\n </tbody>\n</table>\n<div (click)=\"addRow()\" class=\"addRowClass\"><div class=\"circle-button\">+</div></div>", styles: [".table{width:100%;max-width:100%;margin-bottom:20px;border-collapse:collapse;border-spacing:0}.table-bordered{border:1px solid #ddd}thead{background-color:#03a9f4}thead th{color:#fff;font-size:14px;text-align:center}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}th{text-align:left}thead .permission{text-align:center}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}tbody{color:#797979}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}tbody td{font-size:13px}.permission_yes,.permission_no,.permission_na{text-align:center}.none-border th{border:none}.addRowClass{float:right;margin-right:15%}.editInput{border-bottom:1px solid red!important}.action,.addRowClass{cursor:pointer}.action :hover{color:red}.circle-button{width:50px;height:50px;border-radius:50%;background-color:#03a9f4;color:#fff;font-size:25px;display:flex;justify-content:center;align-items:center;cursor:pointer;box-shadow:0 2px 4px #0003}.circle-button:hover{background-color:#03a9f4}\n"] }]
|
|
162
|
+
}], ctorParameters: () => [{ type: i1.ChangeService }, { type: i2.I18nService }, { type: i3.SalesforceService }, { type: i4.DataService }], propDecorators: { question: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], valueChange: [{
|
|
165
|
+
type: Output
|
|
166
|
+
}], apiMeta: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}] } });
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS10YWJsZS9jdXN0b20tdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLXRhYmxlL2N1c3RvbS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFtQi9FLE1BQU0sT0FBTyxvQkFBb0I7SUFxQlg7SUFBb0M7SUFBa0M7SUFBc0M7SUFwQnZILFFBQVEsQ0FBVTtJQUNqQixXQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFFbkUsU0FBUyxDQUFlO0lBQ3hCLFdBQVcsR0FBRyxFQUFFLENBQUM7SUFDakIsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNmLGFBQWEsQ0FBUztJQUN0QixTQUFTLENBQVMsQ0FBQyxvQ0FBb0M7SUFDdkQsT0FBTyxDQUFNO0lBQ2IsV0FBVyxDQUFNO0lBQ2pCLFNBQVMsQ0FBUztJQUNsQixNQUFNLENBQVM7SUFDZixTQUFTLEdBQVksS0FBSyxDQUFDO0lBQ2xCLE9BQU8sQ0FBUztJQUNsQixPQUFPLENBQVc7SUFDekIsVUFBVSxHQUFZLElBQUksQ0FBQztJQUMzQixZQUFZLENBQWU7SUFFcEIsVUFBVSxDQUFTO0lBRTFCLFlBQW9CLGFBQTRCLEVBQVEsV0FBd0IsRUFBVSxTQUE0QixFQUFVLFdBQXdCO1FBQXBJLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVEsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUFVLGdCQUFX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QyxTQUFTOytCQUNFLGtCQUFrQjtzS0FNbkIsUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQVlFLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVXcmFwcGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvdGFibGVXcmFwcGVyJztcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vd3JhcHBlcic7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBBUElNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hcGltZXRhJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY3VzdG9tLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS10YWJsZS5jb21wb25lbnQuY3NzJ11cbn0pXG5cbmV4cG9ydCBjbGFzcyBDdXN0b21UYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBRdWVzdGlvblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgdGFibGVJbmZvOiBUYWJsZVdyYXBwZXI7XG4gIHRhYmxlSGVhZGVyID0gW107XG4gIHRhYmxlRGF0YSA9IFtdO1xuICBhZGRSb3dDb2xTcGFuOiBudW1iZXI7XG4gIHRhYmxlU2l6ZTogbnVtYmVyOyAvLyBIQSAyOERFQzIzIHRhYmxlIHNpemUgZGVjbGFyYXRpb25cbiAgb2JqTmFtZTogYW55O1xuICBmaWx0ZXJMb2dpYzogYW55O1xuICBmaWVsZE1ldGE6IHN0cmluZztcbiAgZmlyU3RyOiBzdHJpbmc7XG4gIHNlYXJjaEJveDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhcGlNZXRhOiBzdHJpbmc7XG4gIHB1YmxpYyBvcHRpb25zOiBzdHJpbmdbXTtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBsYWJlbEZpZWxkOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSwgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UpIHsgfVxuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVyID0gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xuICAgIHRoaXMudGFibGVTaXplID0gMTAvdGhpcy50YWJsZUhlYWRlci5sZW5ndGg7XG4vLyAxMkpVTjI0IC0gZGVmYXVsdCB0YWJsZSB2YWx1ZVxuICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0KXtcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLnF1ZXN0aW9uPy5pbnB1dDtcbiAgICB9XG4gICAgaWYodGhpcy5hcGlNZXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtdO1xuICAgICAgbGV0IGFwaU9iajogQVBJTWV0YSA9IEpTT04ucGFyc2UodGhpcy5hcGlNZXRhKTtcbiAgICAgIHRoaXMubGFiZWxGaWVsZCA9IGFwaU9iai5maWVsZDtcbiAgICAgIGlmKGFwaU9iai5lbmRwb2ludCl7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGxldCByZXNwb25zZXM7XG4gICAgICAgICAgaWYoYXBpT2JqLnZhcmlhYmxlKXtcbiAgICAgICAgICAgICAvLyBWRCAyMk1heTI0IC0gaGFuZGxpbmcgbXVsdGlwbGUgY2hpbGQgb2JqZWN0c1xuICAgICAgICAgICAgcmVzcG9uc2VzID0gIHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoYXBpUmVzcG9uc2UsYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgICAgIGxldCByZXN1bHRzID0gW107XG4gICAgICAgICAgICAvLyBIQSAxOUpBTjI0IFRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvciBpbiBjb25zb2xlXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIHJlc3AgPSByZXNwb25zZXNbaV07XG4gICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3VsdHM7XG4gICAgICAgICAgfWVsc2V7ICAvLyBWRCAxOUpBTjI0IC0gaWYgcmVzcG9uc2UgaGFzIHZhbHVlKHdoaWNoIGlzIGFycmF5KSBvbmx5XG4gICAgICAgICAgICByZXNwb25zZXMgPSBhcGlSZXNwb25zZTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgIC8vIFJlZmVyZW5jZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Abmctc2VsZWN0L25nLXNlbGVjdFxuICAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0YWJsZURhdGEnLCB0aGlzLnRhYmxlRGF0YSk7XG4gICAgICAgICAgXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICBcbiAgICAgIC8vIFZEIE5PVjIzIC0gaGFuZGxlIHRoZSBkZXBlbmRlbnQgdXBkYXRlIGZvciBkcm9wZG93blxuICAgICAgbGV0IHNvdXJjZUlkID0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQ7XG4gICAgICBsZXQgZmllbGQgPSBhcGlPYmouZmllbGQ7ICAgICAgICAvLyBWRCAxM01BWTI0IC0gZHluYW1pYyBmaWVsZCBjaGFuZ2VzXG4gICAgICBpZihzb3VyY2VJZCl7XG4gICAgICAgIC8vIC8vIFZEIDEwTWF5MjQgU3Vic2NyaWJlIGZvciB0aGUgY2hhbmdlc1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jaGFuZ2VBbm5vdW5jZWQkLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBpZihjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2hhbmdlcyBoYXBwZW4nKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMubWFwKChvYmo6IGFueSkgPT4gKHsgLi4ub2JqLCBlZGl0OiBmYWxzZSB9KSk7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBjaGFuZ2VWYWx1ZS52YWx1ZU9iajtcbiAgICAgICAgICAgICAgICBsZXQgdmFsaWRJdGVtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgLy8gVkQgMTNNQVkyNCAtIGJpbmQgZHluYW1pYyBmaWVsZFxuICAgICAgICAgICAgICAgIGlmKHRoaXMudGFibGVEYXRhLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAvLyBWRCAyNkp1bjI0IC0gdG8gaGFuZGxlIG11bHRpcGxlIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqRWxlbWVudFZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShlbGVtZW50LGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbVZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShpdGVtLGZpZWxkKVxuICAgICAgICAgICAgICAgICAgICBpZihvYmpFbGVtZW50VmFsdWUgPT0gb2JqSXRlbVZhbHVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRJdGVtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih2YWxpZEl0ZW0pe1xuICAgICAgICAgICAgICAgICAgaWYodGhpcy50YWJsZURhdGEubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gWy4uLnRoaXMudGFibGVEYXRhLGl0ZW1dO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XG4gICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMudGFibGVEYXRhKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmNvbmZpcm1DaGFuZ2UoYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ3RhYmxlRGF0YScsIHRoaXMudGFibGVEYXRhKTtcbiAgICBjb25zb2xlLmxvZygndGFibGVIZWFkZXInLCB0aGlzLnRhYmxlSGVhZGVyKTtcbiAgICBjb25zb2xlLmxvZygndGFibGVJbmZvJywgdGhpcy50YWJsZUluZm8pO1xuICB9XG5cblxuICBhZGRSb3coKTogdm9pZCB7XG4gICAgbGV0IG5ld0l0ZW0gPSB7fTtcbiAgICAgIHRoaXMudGFibGVIZWFkZXIuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYoaXRlbS5hcGlOYW1lKXtcbiAgICAgICAgICBuZXdJdGVtW2l0ZW0uYXBpTmFtZV09IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGNvbnN0IHVwZGF0ZWRUYWJsZURhdGEgPSBbLi4udGhpcy50YWJsZURhdGEsIG5ld0l0ZW1dO1xuICAgIHRoaXMudGFibGVEYXRhID0gdXBkYXRlZFRhYmxlRGF0YTtcbiAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh1cGRhdGVkVGFibGVEYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVJhZGlvKGl0ZW06IGFueSwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGl0ZW0udmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XG4gIH1cbiAgLy8gVkQgMjNBdWcyNCBoYW5kbGUgIFR5cGVcbiAgdXBkYXRlTGFiZWwocm93SW5kZXg6IG51bWJlciwgbGFiZWw6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudGFibGVEYXRhW3Jvd0luZGV4XVtsYWJlbF0gPSB2YWx1ZTtcbiAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLnRhYmxlRGF0YSk7XG4gIH1cbiAgZGVsZXRlUm93KHJvd0luZGV4OiBudW1iZXIpe1xuICAgIHRoaXMudGFibGVEYXRhLnNwbGljZShyb3dJbmRleCwgMSk7XG4gIH1cbiAgZWRpdFJvdyhyb3dJbmRleDogbnVtYmVyKXtcbiAgICB2YXIgYSA9IDA7XG4gICAgdGhpcy50YWJsZURhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGlmKGEgPT09IHJvd0luZGV4KXtcbiAgICAgICAgZWxlbWVudC5lZGl0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGErKztcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU51bWJlcihpdGVtOiBhbnksIGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpe1xuICAgIGl0ZW0udmFsdWVbbGFiZWxdID0gdmFsdWU7XG4gICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy50YWJsZURhdGEpO1xuICB9XG5cblxuICBlbWl0VGFibGVEYXRhVmFsdWUodXBkYXRlZFRhYmxlRGF0YTogYW55W10pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodXBkYXRlZFRhYmxlRGF0YSk7XG4gIH1cbn0iLCI8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkXCI+XG4gIDx0aGVhZD5cbiAgICA8IS0tIEhBIDI4REVDMjMgY2hhbmdlZCB0YWJsZSBoZWFkZXIgdmFsdWVzIGFuZCBjaGFuZ2VkIHRhYmxlIHNpemUgbG9naWMgdG8gZXZlbmx5IHZpc2libGUgLS0+XG4gICAgPCEtLSA8dGg+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjaGFuZ2UpPVwic2VsZWN0QWxsKCRldmVudC50YXJnZXQuY2hlY2tlZClcIj48L3RoPiAtLT5cbiAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0YWJsZUhlYWRlcjsgbGV0IGhpID0gaW5kZXhcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgdGFibGVTaXplXCI+XG4gICAgICB7eyBoZWFkZXIubGFiZWwgfX1cbiAgICA8L3RoPlxuICAgIDx0aCBjbGFzcz1cImNvbC1tZC0yXCIgY29sc3Bhbj1cIjJcIj5BY3Rpb25zPC90aD5cbiAgPC90aGVhZD5cbiAgPHRib2R5ICpuZ0lmPVwidGFibGVEYXRhXCI+XG4gICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRhYmxlRGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPCEtLSA8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiIChjaGFuZ2UpPVwic2VsZWN0SXRlbShpdGVtKVwiPjwvdGQ+IC0tPlxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdGFibGVIZWFkZXI7IGxldCBqID0gaW5kZXhcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlci5mbGRUeXBlID09PSAnaW1hZ2V0ZXh0J1wiIFtjbGFzc109XCInY29sLW1kLScgKyBoZWFkZXIuc2l6ZVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cbiAgICAgICAgICA8aW1nIHN0eWxlPVwid2lkdGg6IDM1cHg7IGhlaWdodDogMzJweDsgbWFyZ2luLXJpZ2h0OiA1cHg7XCIgW3NyY109XCJpdGVtLmltYWdlU3JjXCIgW2FsdF09XCJpdGVtLmFsdFRleHRcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cIml0ZW1baGVhZGVyLmZpZWxkTmFtZV1cIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVMYWJlbChpLCBoZWFkZXIuZmllbGROYW1lLCBpdGVtW2hlYWRlci5maWVsZE5hbWVdKVwiIGNsYXNzPVwic2hlLWxpbmUtaW5wdXQgdGFibGUtaW5wdXRcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJoZWFkZXIuZmxkVHlwZSA9PT0gJ2ltYWdlJ1wiIFtjbGFzc109XCInY29sLW1kLScgKyBoZWFkZXIuc2l6ZVwiPlxuICAgICAgICAgIDxpbWcgc3R5bGU9XCJ3aWR0aDogMzVweDsgaGVpZ2h0OiAzMnB4OyBtYXJnaW4tcmlnaHQ6IDVweDtcIiBbc3JjXT1cIml0ZW1baGVhZGVyLmZpZWxkTmFtZV1cIiBbYWx0XT1cIml0ZW0uYWx0VGV4dFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLVZEIDIzQXVnMjQgaGFuZGxlIHJlYWRPbmx5ICAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhlYWRlci5mbGRUeXBlID09PSAnVGV4dCcgfHwgaGVhZGVyLmZsZFR5cGUgPT09ICdUZXh0J1wiPlxuICAgICAgICAgIDwhLS0gVkQgMjZKdW4yNCAtIHBpcGUgY2hhbmdlIHRvIGhhbmRsZSBtdWx0aXBsZSBvYmplY3RzLS0+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW3JlYWRvbmx5XT1cImhlYWRlci5yZWFkT25seVwiIFtkaXNhYmxlZF09XCIhaXRlbS5lZGl0XCIgW25nQ2xhc3NdPVwieydlZGl0SW5wdXQnOiBpdGVtLmVkaXQgJiYgIWhlYWRlci5yZWFkT25seX1cIiBbbmdNb2RlbF09XCInJyB8IGdldFZhbHVlOiBpdGVtIDogaGVhZGVyLmFwaU5hbWVcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVMYWJlbChpLCBoZWFkZXIuYXBpTmFtZSwkZXZlbnQpXCIgY2xhc3M9XCJzaGUtbGluZS1pbnB1dCB0YWJsZS1pbnB1dFwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLVZEIDIzQXVnMjQgaGFuZGxlIE51bWJlciBUeXBlIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdOdW1iZXInIHx8IGhlYWRlci5mbGRUeXBlID09PSAnTnVtYmVyJ1wiPlxuICAgICAgICAgIDwhLS0gVkQgMjZKdW4yNCAtIHBpcGUgY2hhbmdlIHRvIGhhbmRsZSBtdWx0aXBsZSBvYmplY3RzLS0+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJOdW1iZXJcIiBbcmVhZG9ubHldPVwiaGVhZGVyLnJlYWRPbmx5XCIgW2Rpc2FibGVkXT1cIiFpdGVtLmVkaXRcIiBbbmdDbGFzc109XCJ7J2VkaXRJbnB1dCc6IGl0ZW0uZWRpdCAmJiAhaGVhZGVyLnJlYWRPbmx5fVwiIFtuZ01vZGVsXT1cIicnIHwgZ2V0VmFsdWU6IGl0ZW0gOiBoZWFkZXIuYXBpTmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUxhYmVsKGksIGhlYWRlci5hcGlOYW1lLCRldmVudClcIiBjbGFzcz1cInNoZS1saW5lLWlucHV0IHRhYmxlLWlucHV0XCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVhZGVyLmZsZFR5cGUgPT09ICdyYWRpbydcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgaGVhZGVyLnNpemVcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW25hbWVdPVwiaXRlbS5uYW1lXCIgW2NoZWNrZWRdPVwiaXRlbS52YWx1ZSA9PSBoZWFkZXIuZmllbGROYW1lXCIgIChjbGljayk9XCJ1cGRhdGVSYWRpbyhpdGVtLCBoZWFkZXIuZmllbGROYW1lKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJhY3Rpb25cIj5cbiAgICAgICAgPGEgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcIiAoY2xpY2spPVwiZWRpdFJvdyhpKVwiPjxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPjxzcGFuPkVkaXQ8L3NwYW4+PC9hPlxuICAgICAgPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImFjdGlvblwiPlxuICAgICAgICA8YSBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtZXZlbmx5O1wiIChjbGljayk9XCJkZWxldGVSb3coaSlcIj48aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIi8+PHNwYW4+RGVsZXRlPC9zcGFuPjwvYT5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG48ZGl2IChjbGljayk9XCJhZGRSb3coKVwiIGNsYXNzPVwiYWRkUm93Q2xhc3NcIj48ZGl2IGNsYXNzPVwiY2lyY2xlLWJ1dHRvblwiPis8L2Rpdj48L2Rpdj4iXX0=
|