@aquera/ngx-smart-table 0.0.16-alpha → 0.0.18-alpha
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/{fesm2020 → fesm2022}/aquera-ngx-smart-table.mjs +1664 -2107
- package/fesm2022/aquera-ngx-smart-table.mjs.map +1 -0
- package/package.json +8 -16
- package/types/aquera-ngx-smart-table.d.ts +5909 -0
- package/aquera-ngx-smart-table.d.ts +0 -5
- package/esm2020/aquera-ngx-smart-table.mjs +0 -5
- package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +0 -63
- package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +0 -115
- package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +0 -206
- package/esm2020/lib/builder/components/column-list/column-list.component.mjs +0 -125
- package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +0 -105
- package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +0 -132
- package/esm2020/lib/builder/definition-builder.module.mjs +0 -70
- package/esm2020/lib/builder/models/builder-state.interface.mjs +0 -5
- package/esm2020/lib/builder/services/definition-builder.service.mjs +0 -251
- package/esm2020/lib/builder/services/definition-export.service.mjs +0 -167
- package/esm2020/lib/builder/services/definition-import.service.mjs +0 -193
- package/esm2020/lib/builder/services/sample-data-generator.service.mjs +0 -126
- package/esm2020/lib/builder/utils/config-validator.util.mjs +0 -165
- package/esm2020/lib/builder/utils/typescript-generator.util.mjs +0 -206
- package/esm2020/lib/editors/index.mjs +0 -9
- package/esm2020/lib/editors/nile-autocomplete-editor.mjs +0 -228
- package/esm2020/lib/editors/nile-calendar-editor.mjs +0 -211
- package/esm2020/lib/editors/nile-date-picker-editor.mjs +0 -188
- package/esm2020/lib/editors/nile-input-editor.mjs +0 -235
- package/esm2020/lib/editors/nile-select-editor.mjs +0 -419
- package/esm2020/lib/factories/column-config.factory.mjs +0 -231
- package/esm2020/lib/models/autosave-config.interface.mjs +0 -8
- package/esm2020/lib/models/base-column-config.class.mjs +0 -253
- package/esm2020/lib/models/cell-strategies.interface.mjs +0 -6
- package/esm2020/lib/models/cell-types.mjs +0 -147
- package/esm2020/lib/models/column-action.interface.mjs +0 -6
- package/esm2020/lib/models/column-config.interface.mjs +0 -43
- package/esm2020/lib/models/column-config.utils.mjs +0 -101
- package/esm2020/lib/models/row-action.interface.mjs +0 -5
- package/esm2020/lib/models/row-validator.interface.mjs +0 -2
- package/esm2020/lib/models/schema-validation.interface.mjs +0 -2
- package/esm2020/lib/models/sheet-action.interface.mjs +0 -5
- package/esm2020/lib/models/sheet-config.interface.mjs +0 -5
- package/esm2020/lib/models/table-config.interface.mjs +0 -107
- package/esm2020/lib/models/table-validator.interface.mjs +0 -2
- package/esm2020/lib/models/workbook-action.interface.mjs +0 -5
- package/esm2020/lib/models/workbook-config.interface.mjs +0 -5
- package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +0 -24
- package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +0 -397
- package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +0 -103
- package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +0 -383
- package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +0 -232
- package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +0 -97
- package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +0 -157
- package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +0 -87
- package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +0 -167
- package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +0 -165
- package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +0 -112
- package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +0 -1453
- package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +0 -169
- package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +0 -581
- package/esm2020/lib/renderer/directives/click-outside.directive.mjs +0 -28
- package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +0 -108
- package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +0 -83
- package/esm2020/lib/renderer/models/cell-state.interface.mjs +0 -66
- package/esm2020/lib/renderer/models/cell.class.mjs +0 -389
- package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +0 -7
- package/esm2020/lib/renderer/models/sheet-state.class.mjs +0 -90
- package/esm2020/lib/renderer/models/sheet-state.interface.mjs +0 -5
- package/esm2020/lib/renderer/models/table-state.class.mjs +0 -871
- package/esm2020/lib/renderer/models/table-state.interface.mjs +0 -5
- package/esm2020/lib/renderer/models/table-types.mjs +0 -29
- package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +0 -7
- package/esm2020/lib/renderer/models/workbook-state.class.mjs +0 -174
- package/esm2020/lib/renderer/models/workbook-state.interface.mjs +0 -5
- package/esm2020/lib/renderer/models/z-index.enum.mjs +0 -55
- package/esm2020/lib/schemas/table-config.schema.mjs +0 -472
- package/esm2020/lib/services/autosave.service.mjs +0 -92
- package/esm2020/lib/services/custom-validation-rules.util.mjs +0 -124
- package/esm2020/lib/services/json-schema-validator.service.mjs +0 -216
- package/esm2020/lib/services/row-validation.service.mjs +0 -42
- package/esm2020/lib/services/validation-logger.service.mjs +0 -177
- package/esm2020/lib/services/virtual-scroll.service.mjs +0 -52
- package/esm2020/lib/shared/shared-table-components.module.mjs +0 -35
- package/esm2020/lib/smart-table.module.mjs +0 -124
- package/esm2020/lib/strategies/default-editors.mjs +0 -433
- package/esm2020/lib/strategies/default-formatters.mjs +0 -238
- package/esm2020/lib/strategies/default-validators.mjs +0 -327
- package/esm2020/public-api.mjs +0 -146
- package/fesm2015/aquera-ngx-smart-table.mjs +0 -12267
- package/fesm2015/aquera-ngx-smart-table.mjs.map +0 -1
- package/fesm2020/aquera-ngx-smart-table.mjs.map +0 -1
- package/lib/builder/components/builder-preview/builder-preview.component.d.ts +0 -31
- package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +0 -53
- package/lib/builder/components/column-editor/column-editor.component.d.ts +0 -69
- package/lib/builder/components/column-list/column-list.component.d.ts +0 -65
- package/lib/builder/components/definition-builder/definition-builder.component.d.ts +0 -58
- package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +0 -32
- package/lib/builder/definition-builder.module.d.ts +0 -15
- package/lib/builder/models/builder-state.interface.d.ts +0 -93
- package/lib/builder/services/definition-builder.service.d.ts +0 -80
- package/lib/builder/services/definition-export.service.d.ts +0 -59
- package/lib/builder/services/definition-import.service.d.ts +0 -31
- package/lib/builder/services/sample-data-generator.service.d.ts +0 -41
- package/lib/builder/utils/config-validator.util.d.ts +0 -32
- package/lib/builder/utils/typescript-generator.util.d.ts +0 -29
- package/lib/editors/index.d.ts +0 -8
- package/lib/editors/nile-autocomplete-editor.d.ts +0 -102
- package/lib/editors/nile-calendar-editor.d.ts +0 -88
- package/lib/editors/nile-date-picker-editor.d.ts +0 -97
- package/lib/editors/nile-input-editor.d.ts +0 -67
- package/lib/editors/nile-select-editor.d.ts +0 -110
- package/lib/factories/column-config.factory.d.ts +0 -73
- package/lib/models/autosave-config.interface.d.ts +0 -23
- package/lib/models/base-column-config.class.d.ts +0 -115
- package/lib/models/cell-strategies.interface.d.ts +0 -188
- package/lib/models/cell-types.d.ts +0 -337
- package/lib/models/column-action.interface.d.ts +0 -86
- package/lib/models/column-config.interface.d.ts +0 -272
- package/lib/models/column-config.utils.d.ts +0 -37
- package/lib/models/row-action.interface.d.ts +0 -86
- package/lib/models/row-validator.interface.d.ts +0 -37
- package/lib/models/schema-validation.interface.d.ts +0 -42
- package/lib/models/sheet-action.interface.d.ts +0 -59
- package/lib/models/sheet-config.interface.d.ts +0 -41
- package/lib/models/table-config.interface.d.ts +0 -251
- package/lib/models/table-validator.interface.d.ts +0 -40
- package/lib/models/workbook-action.interface.d.ts +0 -95
- package/lib/models/workbook-config.interface.d.ts +0 -107
- package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +0 -9
- package/lib/renderer/components/st-cell/st-cell.component.d.ts +0 -69
- package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +0 -39
- package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +0 -139
- package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +0 -81
- package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +0 -44
- package/lib/renderer/components/st-header/st-header.component.d.ts +0 -93
- package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +0 -42
- package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +0 -67
- package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +0 -98
- package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +0 -58
- package/lib/renderer/components/st-table/st-table.component.d.ts +0 -380
- package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +0 -77
- package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +0 -275
- package/lib/renderer/directives/click-outside.directive.d.ts +0 -10
- package/lib/renderer/directives/st-column-resize.directive.d.ts +0 -44
- package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +0 -19
- package/lib/renderer/models/cell-state.interface.d.ts +0 -118
- package/lib/renderer/models/cell.class.d.ts +0 -174
- package/lib/renderer/models/row-validation-state.interface.d.ts +0 -27
- package/lib/renderer/models/sheet-state.class.d.ts +0 -67
- package/lib/renderer/models/sheet-state.interface.d.ts +0 -55
- package/lib/renderer/models/table-state.class.d.ts +0 -320
- package/lib/renderer/models/table-state.interface.d.ts +0 -18
- package/lib/renderer/models/table-types.d.ts +0 -228
- package/lib/renderer/models/table-validation-state.interface.d.ts +0 -34
- package/lib/renderer/models/workbook-state.class.d.ts +0 -117
- package/lib/renderer/models/workbook-state.interface.d.ts +0 -71
- package/lib/renderer/models/z-index.enum.d.ts +0 -44
- package/lib/schemas/table-config.schema.d.ts +0 -455
- package/lib/services/autosave.service.d.ts +0 -73
- package/lib/services/custom-validation-rules.util.d.ts +0 -12
- package/lib/services/json-schema-validator.service.d.ts +0 -49
- package/lib/services/row-validation.service.d.ts +0 -17
- package/lib/services/validation-logger.service.d.ts +0 -87
- package/lib/services/virtual-scroll.service.d.ts +0 -44
- package/lib/shared/shared-table-components.module.d.ts +0 -9
- package/lib/smart-table.module.d.ts +0 -26
- package/lib/strategies/default-editors.d.ts +0 -109
- package/lib/strategies/default-formatters.d.ts +0 -116
- package/lib/strategies/default-validators.d.ts +0 -113
- package/public-api.d.ts +0 -70
- package/src/lib/builder/README.md +0 -30
- package/src/lib/editors/README.md +0 -303
- package/src/lib/renderer/components/st-column-filter/README.md +0 -286
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TypeScript code generator utility
|
|
3
|
-
* Converts TableConfig to TypeScript code using ColumnConfigFactory
|
|
4
|
-
*/
|
|
5
|
-
import { CellDataType } from '../../models/cell-types';
|
|
6
|
-
/**
|
|
7
|
-
* Generate TypeScript code from TableConfig
|
|
8
|
-
* @param config Table configuration
|
|
9
|
-
* @param options Generation options
|
|
10
|
-
* @returns TypeScript code string
|
|
11
|
-
*/
|
|
12
|
-
export function generateTypeScriptCode(config, options = {}) {
|
|
13
|
-
const { variableName = 'tableConfig', includeComments = true, indent = ' ' } = options;
|
|
14
|
-
const lines = [];
|
|
15
|
-
// Add imports
|
|
16
|
-
lines.push("import { ColumnConfigFactory, TableConfig } from 'ngx-smart-table';");
|
|
17
|
-
lines.push('');
|
|
18
|
-
// Add comment if requested
|
|
19
|
-
if (includeComments) {
|
|
20
|
-
lines.push('/**');
|
|
21
|
-
lines.push(' * Table configuration generated by Smart Table Builder');
|
|
22
|
-
lines.push(' * @generated');
|
|
23
|
-
lines.push(' */');
|
|
24
|
-
}
|
|
25
|
-
// Start config object
|
|
26
|
-
lines.push(`export const ${variableName}: TableConfig = {`);
|
|
27
|
-
// Generate columns array
|
|
28
|
-
lines.push(`${indent}columns: [`);
|
|
29
|
-
config.columns.forEach((column, index) => {
|
|
30
|
-
const columnCode = generateColumnCode(column, indent + indent, includeComments);
|
|
31
|
-
const isLast = index === config.columns.length - 1;
|
|
32
|
-
lines.push(`${indent}${indent}${columnCode}${isLast ? '' : ','}`);
|
|
33
|
-
});
|
|
34
|
-
lines.push(`${indent}],`);
|
|
35
|
-
// Generate pagination config
|
|
36
|
-
if (config.pagination) {
|
|
37
|
-
lines.push(`${indent}pagination: {`);
|
|
38
|
-
if (config.pagination.enabled !== undefined) {
|
|
39
|
-
lines.push(`${indent}${indent}enabled: ${config.pagination.enabled},`);
|
|
40
|
-
}
|
|
41
|
-
if (config.pagination.pageSize !== undefined) {
|
|
42
|
-
lines.push(`${indent}${indent}pageSize: ${config.pagination.pageSize},`);
|
|
43
|
-
}
|
|
44
|
-
if (config.pagination.pageSizeOptions) {
|
|
45
|
-
lines.push(`${indent}${indent}pageSizeOptions: [${config.pagination.pageSizeOptions.join(', ')}],`);
|
|
46
|
-
}
|
|
47
|
-
if (config.pagination.showTopControls !== undefined) {
|
|
48
|
-
lines.push(`${indent}${indent}showTopControls: ${config.pagination.showTopControls},`);
|
|
49
|
-
}
|
|
50
|
-
if (config.pagination.showBottomControls !== undefined) {
|
|
51
|
-
lines.push(`${indent}${indent}showBottomControls: ${config.pagination.showBottomControls},`);
|
|
52
|
-
}
|
|
53
|
-
if (config.pagination.totalItems !== undefined) {
|
|
54
|
-
lines.push(`${indent}${indent}totalItems: ${config.pagination.totalItems},`);
|
|
55
|
-
}
|
|
56
|
-
if (config.pagination.variant !== undefined) {
|
|
57
|
-
lines.push(`${indent}${indent}variant: '${config.pagination.variant}',`);
|
|
58
|
-
}
|
|
59
|
-
lines.push(`${indent}},`);
|
|
60
|
-
}
|
|
61
|
-
// Generate sorting config
|
|
62
|
-
if (config.sorting) {
|
|
63
|
-
lines.push(`${indent}sorting: {`);
|
|
64
|
-
if (config.sorting.enabled !== undefined) {
|
|
65
|
-
lines.push(`${indent}${indent}enabled: ${config.sorting.enabled},`);
|
|
66
|
-
}
|
|
67
|
-
if (config.sorting.multiColumn !== undefined) {
|
|
68
|
-
lines.push(`${indent}${indent}multiColumn: ${config.sorting.multiColumn},`);
|
|
69
|
-
}
|
|
70
|
-
if (config.sorting.mode) {
|
|
71
|
-
lines.push(`${indent}${indent}mode: '${config.sorting.mode}',`);
|
|
72
|
-
}
|
|
73
|
-
lines.push(`${indent}},`);
|
|
74
|
-
}
|
|
75
|
-
// Generate filtering config
|
|
76
|
-
if (config.filtering) {
|
|
77
|
-
lines.push(`${indent}filtering: {`);
|
|
78
|
-
if (config.filtering.enabled !== undefined) {
|
|
79
|
-
lines.push(`${indent}${indent}enabled: ${config.filtering.enabled},`);
|
|
80
|
-
}
|
|
81
|
-
if (config.filtering.mode) {
|
|
82
|
-
lines.push(`${indent}${indent}mode: '${config.filtering.mode}',`);
|
|
83
|
-
}
|
|
84
|
-
lines.push(`${indent}},`);
|
|
85
|
-
}
|
|
86
|
-
// Generate display config
|
|
87
|
-
if (config.display) {
|
|
88
|
-
lines.push(`${indent}display: {`);
|
|
89
|
-
if (config.display.stickyHeader !== undefined) {
|
|
90
|
-
lines.push(`${indent}${indent}stickyHeader: ${config.display.stickyHeader},`);
|
|
91
|
-
}
|
|
92
|
-
if (config.display.maxHeight !== undefined) {
|
|
93
|
-
lines.push(`${indent}${indent}maxHeight: ${config.display.maxHeight},`);
|
|
94
|
-
}
|
|
95
|
-
lines.push(`${indent}},`);
|
|
96
|
-
}
|
|
97
|
-
// Close config object
|
|
98
|
-
lines.push('};');
|
|
99
|
-
return lines.join('\n');
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Generate TypeScript code for a single column
|
|
103
|
-
* @param column Column configuration
|
|
104
|
-
* @param indent Indentation string
|
|
105
|
-
* @param includeComments Whether to include comments
|
|
106
|
-
* @returns TypeScript code string
|
|
107
|
-
*/
|
|
108
|
-
function generateColumnCode(column, indent, includeComments) {
|
|
109
|
-
const factoryMethod = getFactoryMethod(column);
|
|
110
|
-
const options = generateColumnOptions(column, indent);
|
|
111
|
-
if (options) {
|
|
112
|
-
return `ColumnConfigFactory.${factoryMethod}('${column.key}', ${options})`;
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
return `ColumnConfigFactory.${factoryMethod}('${column.key}')`;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Get the appropriate factory method name for a column
|
|
120
|
-
* @param column Column configuration
|
|
121
|
-
* @returns Factory method name
|
|
122
|
-
*/
|
|
123
|
-
function getFactoryMethod(column) {
|
|
124
|
-
// Check if readonly
|
|
125
|
-
if (column.editable === false) {
|
|
126
|
-
return 'readonly';
|
|
127
|
-
}
|
|
128
|
-
// Check dataType
|
|
129
|
-
switch (column.dataType) {
|
|
130
|
-
case CellDataType.STRING:
|
|
131
|
-
// Check if email validator exists
|
|
132
|
-
if (column.validator && column.validator.toString().includes('email')) {
|
|
133
|
-
return 'email';
|
|
134
|
-
}
|
|
135
|
-
return 'text';
|
|
136
|
-
case CellDataType.NUMBER:
|
|
137
|
-
// Check if currency formatter exists
|
|
138
|
-
if (column.formatter && column.formatter.toString().includes('Currency')) {
|
|
139
|
-
return 'currency';
|
|
140
|
-
}
|
|
141
|
-
return 'number';
|
|
142
|
-
case CellDataType.DATE:
|
|
143
|
-
return 'date';
|
|
144
|
-
case CellDataType.BOOLEAN:
|
|
145
|
-
return 'boolean';
|
|
146
|
-
default:
|
|
147
|
-
return 'custom';
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Generate options object for column factory method
|
|
152
|
-
* @param column Column configuration
|
|
153
|
-
* @param indent Indentation string
|
|
154
|
-
* @returns Options object string or null
|
|
155
|
-
*/
|
|
156
|
-
function generateColumnOptions(column, indent) {
|
|
157
|
-
const options = [];
|
|
158
|
-
if (column.header && column.header !== column.key) {
|
|
159
|
-
options.push(`header: '${escapeString(column.header)}'`);
|
|
160
|
-
}
|
|
161
|
-
if (column.width !== undefined) {
|
|
162
|
-
if (typeof column.width === 'number') {
|
|
163
|
-
options.push(`width: ${column.width}`);
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
options.push(`width: '${column.width}'`);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
if (column.minWidth !== undefined) {
|
|
170
|
-
options.push(`minWidth: ${column.minWidth}`);
|
|
171
|
-
}
|
|
172
|
-
if (column.maxWidth !== undefined) {
|
|
173
|
-
options.push(`maxWidth: ${column.maxWidth}`);
|
|
174
|
-
}
|
|
175
|
-
if (column.sticky) {
|
|
176
|
-
options.push(`sticky: '${column.sticky}'`);
|
|
177
|
-
}
|
|
178
|
-
if (column.editable !== undefined) {
|
|
179
|
-
options.push(`editable: ${column.editable}`);
|
|
180
|
-
}
|
|
181
|
-
if (column.sortable !== undefined) {
|
|
182
|
-
options.push(`sortable: ${column.sortable}`);
|
|
183
|
-
}
|
|
184
|
-
if (column.filterable !== undefined) {
|
|
185
|
-
options.push(`filterable: ${column.filterable}`);
|
|
186
|
-
}
|
|
187
|
-
if (column.resizable !== undefined) {
|
|
188
|
-
options.push(`resizable: ${column.resizable}`);
|
|
189
|
-
}
|
|
190
|
-
// For custom columns, we'd need to include more complex options
|
|
191
|
-
// This is a simplified version - full implementation would handle
|
|
192
|
-
// formatters, validators, editors, etc.
|
|
193
|
-
if (options.length === 0) {
|
|
194
|
-
return null;
|
|
195
|
-
}
|
|
196
|
-
return `{\n${indent}${indent}${options.join(`,\n${indent}${indent}`)}\n${indent}}`;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Escape string for use in TypeScript code
|
|
200
|
-
* @param str String to escape
|
|
201
|
-
* @returns Escaped string
|
|
202
|
-
*/
|
|
203
|
-
function escapeString(str) {
|
|
204
|
-
return str.replace(/'/g, "\\'").replace(/\n/g, '\\n');
|
|
205
|
-
}
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1nZW5lcmF0b3IudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvYnVpbGRlci91dGlscy90eXBlc2NyaXB0LWdlbmVyYXRvci51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUlILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXNCdkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE1BQW1CLEVBQ25CLFVBQXNDLEVBQUU7SUFFeEMsTUFBTSxFQUNKLFlBQVksR0FBRyxhQUFhLEVBQzVCLGVBQWUsR0FBRyxJQUFJLEVBQ3RCLE1BQU0sR0FBRyxJQUFJLEVBQ2QsR0FBRyxPQUFPLENBQUM7SUFFWixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFFM0IsY0FBYztJQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMscUVBQXFFLENBQUMsQ0FBQztJQUNsRixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWYsMkJBQTJCO0lBQzNCLElBQUksZUFBZSxFQUFFO1FBQ25CLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsS0FBSyxDQUFDLElBQUksQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQ3RFLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNuQjtJQUVELHNCQUFzQjtJQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixZQUFZLG1CQUFtQixDQUFDLENBQUM7SUFFNUQseUJBQXlCO0lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLFlBQVksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxD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LE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLEtBQUssTUFBTSxHQUFHLENBQUM7QUFDckYsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQy9CLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlU2NyaXB0IGNvZGUgZ2VuZXJhdG9yIHV0aWxpdHlcbiAqIENvbnZlcnRzIFRhYmxlQ29uZmlnIHRvIFR5cGVTY3JpcHQgY29kZSB1c2luZyBDb2x1bW5Db25maWdGYWN0b3J5XG4gKi9cblxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb2x1bW5Db25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFR5cGVTY3JpcHQgY29kZSBnZW5lcmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNjcmlwdEdlbmVyYXRvck9wdGlvbnMge1xuICAvKipcbiAgICogVmFyaWFibGUgbmFtZSBmb3IgdGhlIGV4cG9ydGVkIGNvbmZpZ1xuICAgKi9cbiAgdmFyaWFibGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNvbW1lbnRzIGluIGdlbmVyYXRlZCBjb2RlXG4gICAqL1xuICBpbmNsdWRlQ29tbWVudHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRlbnRhdGlvbiBzdHJpbmcgKGRlZmF1bHQ6IDIgc3BhY2VzKVxuICAgKi9cbiAgaW5kZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIFR5cGVTY3JpcHQgY29kZSBmcm9tIFRhYmxlQ29uZmlnXG4gKiBAcGFyYW0gY29uZmlnIFRhYmxlIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zIEdlbmVyYXRpb24gb3B0aW9uc1xuICogQHJldHVybnMgVHlwZVNjcmlwdCBjb2RlIHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUeXBlU2NyaXB0Q29kZShcbiAgY29uZmlnOiBUYWJsZUNvbmZpZyxcbiAgb3B0aW9uczogVHlwZVNjcmlwdEdlbmVyYXRvck9wdGlvbnMgPSB7fVxuKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIHZhcmlhYmxlTmFtZSA9ICd0YWJsZUNvbmZpZycsXG4gICAgaW5jbHVkZUNvbW1lbnRzID0gdHJ1ZSxcbiAgICBpbmRlbnQgPSAnICAnXG4gIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIEFkZCBpbXBvcnRzXG4gIGxpbmVzLnB1c2goXCJpbXBvcnQgeyBDb2x1bW5Db25maWdGYWN0b3J5LCBUYWJsZUNvbmZpZyB9IGZyb20gJ25neC1zbWFydC10YWJsZSc7XCIpO1xuICBsaW5lcy5wdXNoKCcnKTtcblxuICAvLyBBZGQgY29tbWVudCBpZiByZXF1ZXN0ZWRcbiAgaWYgKGluY2x1ZGVDb21tZW50cykge1xuICAgIGxpbmVzLnB1c2goJy8qKicpO1xuICAgIGxpbmVzLnB1c2goJyAqIFRhYmxlIGNvbmZpZ3VyYXRpb24gZ2VuZXJhdGVkIGJ5IFNtYXJ0IFRhYmxlIEJ1aWxkZXInKTtcbiAgICBsaW5lcy5wdXNoKCcgKiBAZ2VuZXJhdGVkJyk7XG4gICAgbGluZXMucHVzaCgnICovJyk7XG4gIH1cblxuICAvLyBTdGFydCBjb25maWcgb2JqZWN0XG4gIGxpbmVzLnB1c2goYGV4cG9ydCBjb25zdCAke3ZhcmlhYmxlTmFtZX06IFRhYmxlQ29uZmlnID0ge2ApO1xuXG4gIC8vIEdlbmVyYXRlIGNvbHVtbnMgYXJyYXlcbiAgbGluZXMucHVzaChgJHtpbmRlbnR9Y29sdW1uczogW2ApO1xuICBjb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgY29sdW1uQ29kZSA9IGdlbmVyYXRlQ29sdW1uQ29kZShjb2x1bW4sIGluZGVudCArIGluZGVudCwgaW5jbHVkZUNvbW1lbnRzKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA9PT0gY29uZmlnLmNvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH0ke2NvbHVtbkNvZGV9JHtpc0xhc3QgPyAnJyA6ICcsJ31gKTtcbiAgfSk7XG4gIGxpbmVzLnB1c2goYCR7aW5kZW50fV0sYCk7XG5cbiAgLy8gR2VuZXJhdGUgcGFnaW5hdGlvbiBjb25maWdcbiAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9cGFnaW5hdGlvbjoge2ApO1xuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fWVuYWJsZWQ6ICR7Y29uZmlnLnBhZ2luYXRpb24uZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1wYWdlU2l6ZTogJHtjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZX0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZU9wdGlvbnMpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fXBhZ2VTaXplT3B0aW9uczogWyR7Y29uZmlnLnBhZ2luYXRpb24ucGFnZVNpemVPcHRpb25zLmpvaW4oJywgJyl9XSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnNob3dUb3BDb250cm9scyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1zaG93VG9wQ29udHJvbHM6ICR7Y29uZmlnLnBhZ2luYXRpb24uc2hvd1RvcENvbnRyb2xzfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnNob3dCb3R0b21Db250cm9scyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1zaG93Qm90dG9tQ29udHJvbHM6ICR7Y29uZmlnLnBhZ2luYXRpb24uc2hvd0JvdHRvbUNvbnRyb2xzfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnRvdGFsSXRlbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9dG90YWxJdGVtczogJHtjb25maWcucGFnaW5hdGlvbi50b3RhbEl0ZW1zfSxgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5wYWdpbmF0aW9uLnZhcmlhbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9dmFyaWFudDogJyR7Y29uZmlnLnBhZ2luYXRpb24udmFyaWFudH0nLGApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH19LGApO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgc29ydGluZyBjb25maWdcbiAgaWYgKGNvbmZpZy5zb3J0aW5nKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9c29ydGluZzoge2ApO1xuICAgIGlmIChjb25maWcuc29ydGluZy5lbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fWVuYWJsZWQ6ICR7Y29uZmlnLnNvcnRpbmcuZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuc29ydGluZy5tdWx0aUNvbHVtbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1tdWx0aUNvbHVtbjogJHtjb25maWcuc29ydGluZy5tdWx0aUNvbHVtbn0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuc29ydGluZy5tb2RlKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1tb2RlOiAnJHtjb25maWcuc29ydGluZy5tb2RlfScsYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fX0sYCk7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBmaWx0ZXJpbmcgY29uZmlnXG4gIGlmIChjb25maWcuZmlsdGVyaW5nKSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9ZmlsdGVyaW5nOiB7YCk7XG4gICAgaWYgKGNvbmZpZy5maWx0ZXJpbmcuZW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGAke2luZGVudH0ke2luZGVudH1lbmFibGVkOiAke2NvbmZpZy5maWx0ZXJpbmcuZW5hYmxlZH0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZmlsdGVyaW5nLm1vZGUpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fSR7aW5kZW50fW1vZGU6ICcke2NvbmZpZy5maWx0ZXJpbmcubW9kZX0nLGApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKGAke2luZGVudH19LGApO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgZGlzcGxheSBjb25maWdcbiAgaWYgKGNvbmZpZy5kaXNwbGF5KSB7XG4gICAgbGluZXMucHVzaChgJHtpbmRlbnR9ZGlzcGxheToge2ApO1xuICAgIGlmIChjb25maWcuZGlzcGxheS5zdGlja3lIZWFkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9c3RpY2t5SGVhZGVyOiAke2NvbmZpZy5kaXNwbGF5LnN0aWNreUhlYWRlcn0sYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuZGlzcGxheS5tYXhIZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbGluZXMucHVzaChgJHtpbmRlbnR9JHtpbmRlbnR9bWF4SGVpZ2h0OiAke2NvbmZpZy5kaXNwbGF5Lm1heEhlaWdodH0sYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goYCR7aW5kZW50fX0sYCk7XG4gIH1cblxuICAvLyBDbG9zZSBjb25maWcgb2JqZWN0XG4gIGxpbmVzLnB1c2goJ307Jyk7XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIFR5cGVTY3JpcHQgY29kZSBmb3IgYSBzaW5nbGUgY29sdW1uXG4gKiBAcGFyYW0gY29sdW1uIENvbHVtbiBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gaW5kZW50IEluZGVudGF0aW9uIHN0cmluZ1xuICogQHBhcmFtIGluY2x1ZGVDb21tZW50cyBXaGV0aGVyIHRvIGluY2x1ZGUgY29tbWVudHNcbiAqIEByZXR1cm5zIFR5cGVTY3JpcHQgY29kZSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2x1bW5Db2RlKFxuICBjb2x1bW46IENvbHVtbkNvbmZpZyxcbiAgaW5kZW50OiBzdHJpbmcsXG4gIGluY2x1ZGVDb21tZW50czogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgY29uc3QgZmFjdG9yeU1ldGhvZCA9IGdldEZhY3RvcnlNZXRob2QoY29sdW1uKTtcbiAgY29uc3Qgb3B0aW9ucyA9IGdlbmVyYXRlQ29sdW1uT3B0aW9ucyhjb2x1bW4sIGluZGVudCk7XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYENvbHVtbkNvbmZpZ0ZhY3RvcnkuJHtmYWN0b3J5TWV0aG9kfSgnJHtjb2x1bW4ua2V5fScsICR7b3B0aW9uc30pYDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYENvbHVtbkNvbmZpZ0ZhY3RvcnkuJHtmYWN0b3J5TWV0aG9kfSgnJHtjb2x1bW4ua2V5fScpYDtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgYXBwcm9wcmlhdGUgZmFjdG9yeSBtZXRob2QgbmFtZSBmb3IgYSBjb2x1bW5cbiAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIEZhY3RvcnkgbWV0aG9kIG5hbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RmFjdG9yeU1ldGhvZChjb2x1bW46IENvbHVtbkNvbmZpZyk6IHN0cmluZyB7XG4gIC8vIENoZWNrIGlmIHJlYWRvbmx5XG4gIGlmIChjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICdyZWFkb25seSc7XG4gIH1cblxuICAvLyBDaGVjayBkYXRhVHlwZVxuICBzd2l0Y2ggKGNvbHVtbi5kYXRhVHlwZSkge1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLlNUUklORzpcbiAgICAgIC8vIENoZWNrIGlmIGVtYWlsIHZhbGlkYXRvciBleGlzdHNcbiAgICAgIGlmIChjb2x1bW4udmFsaWRhdG9yICYmIGNvbHVtbi52YWxpZGF0b3IudG9TdHJpbmcoKS5pbmNsdWRlcygnZW1haWwnKSkge1xuICAgICAgICByZXR1cm4gJ2VtYWlsJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAndGV4dCc7XG4gICAgY2FzZSBDZWxsRGF0YVR5cGUuTlVNQkVSOlxuICAgICAgLy8gQ2hlY2sgaWYgY3VycmVuY3kgZm9ybWF0dGVyIGV4aXN0c1xuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLmZvcm1hdHRlci50b1N0cmluZygpLmluY2x1ZGVzKCdDdXJyZW5jeScpKSB7XG4gICAgICAgIHJldHVybiAnY3VycmVuY3knO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdudW1iZXInO1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLkRBVEU6XG4gICAgICByZXR1cm4gJ2RhdGUnO1xuICAgIGNhc2UgQ2VsbERhdGFUeXBlLkJPT0xFQU46XG4gICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ2N1c3RvbSc7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBvcHRpb25zIG9iamVjdCBmb3IgY29sdW1uIGZhY3RvcnkgbWV0aG9kXG4gKiBAcGFyYW0gY29sdW1uIENvbHVtbiBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0gaW5kZW50IEluZGVudGF0aW9uIHN0cmluZ1xuICogQHJldHVybnMgT3B0aW9ucyBvYmplY3Qgc3RyaW5nIG9yIG51bGxcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVDb2x1bW5PcHRpb25zKGNvbHVtbjogQ29sdW1uQ29uZmlnLCBpbmRlbnQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChjb2x1bW4uaGVhZGVyICYmIGNvbHVtbi5oZWFkZXIgIT09IGNvbHVtbi5rZXkpIHtcbiAgICBvcHRpb25zLnB1c2goYGhlYWRlcjogJyR7ZXNjYXBlU3RyaW5nKGNvbHVtbi5oZWFkZXIpfSdgKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4ud2lkdGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgY29sdW1uLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgICAgb3B0aW9ucy5wdXNoKGB3aWR0aDogJHtjb2x1bW4ud2lkdGh9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMucHVzaChgd2lkdGg6ICcke2NvbHVtbi53aWR0aH0nYCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbHVtbi5taW5XaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBtaW5XaWR0aDogJHtjb2x1bW4ubWluV2lkdGh9YCk7XG4gIH1cblxuICBpZiAoY29sdW1uLm1heFdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zLnB1c2goYG1heFdpZHRoOiAke2NvbHVtbi5tYXhXaWR0aH1gKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4uc3RpY2t5KSB7XG4gICAgb3B0aW9ucy5wdXNoKGBzdGlja3k6ICcke2NvbHVtbi5zdGlja3l9J2ApO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5lZGl0YWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBlZGl0YWJsZTogJHtjb2x1bW4uZWRpdGFibGV9YCk7XG4gIH1cblxuICBpZiAoY29sdW1uLnNvcnRhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBvcHRpb25zLnB1c2goYHNvcnRhYmxlOiAke2NvbHVtbi5zb3J0YWJsZX1gKTtcbiAgfVxuXG4gIGlmIChjb2x1bW4uZmlsdGVyYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5wdXNoKGBmaWx0ZXJhYmxlOiAke2NvbHVtbi5maWx0ZXJhYmxlfWApO1xuICB9XG5cbiAgaWYgKGNvbHVtbi5yZXNpemFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgIG9wdGlvbnMucHVzaChgcmVzaXphYmxlOiAke2NvbHVtbi5yZXNpemFibGV9YCk7XG4gIH1cblxuICAvLyBGb3IgY3VzdG9tIGNvbHVtbnMsIHdlJ2QgbmVlZCB0byBpbmNsdWRlIG1vcmUgY29tcGxleCBvcHRpb25zXG4gIC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gLSBmdWxsIGltcGxlbWVudGF0aW9uIHdvdWxkIGhhbmRsZVxuICAvLyBmb3JtYXR0ZXJzLCB2YWxpZGF0b3JzLCBlZGl0b3JzLCBldGMuXG5cbiAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYHtcXG4ke2luZGVudH0ke2luZGVudH0ke29wdGlvbnMuam9pbihgLFxcbiR7aW5kZW50fSR7aW5kZW50fWApfVxcbiR7aW5kZW50fX1gO1xufVxuXG4vKipcbiAqIEVzY2FwZSBzdHJpbmcgZm9yIHVzZSBpbiBUeXBlU2NyaXB0IGNvZGVcbiAqIEBwYXJhbSBzdHIgU3RyaW5nIHRvIGVzY2FwZVxuICogQHJldHVybnMgRXNjYXBlZCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxuL2csICdcXFxcbicpO1xufVxuXG4iXX0=
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom cell editors for ngx-smart-table
|
|
3
|
-
*/
|
|
4
|
-
export { NileInputEditor } from './nile-input-editor';
|
|
5
|
-
export { NileSelectEditor } from './nile-select-editor';
|
|
6
|
-
export { NileAutoCompleteEditor } from './nile-autocomplete-editor';
|
|
7
|
-
export { NileCalendarEditor } from './nile-calendar-editor';
|
|
8
|
-
export { NileDatePickerEditor } from './nile-date-picker-editor';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2VkaXRvcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUEwQixNQUFNLHFCQUFxQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsc0JBQXNCLEVBQXFELE1BQU0sNEJBQTRCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGtCQUFrQixFQUFnRCxNQUFNLHdCQUF3QixDQUFDO0FBQzFHLE9BQU8sRUFBRSxvQkFBb0IsRUFBMEMsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3VzdG9tIGNlbGwgZWRpdG9ycyBmb3Igbmd4LXNtYXJ0LXRhYmxlXG4gKi9cblxuZXhwb3J0IHsgTmlsZUlucHV0RWRpdG9yLCBOaWxlSW5wdXRFZGl0b3JPcHRpb25zIH0gZnJvbSAnLi9uaWxlLWlucHV0LWVkaXRvcic7XG5leHBvcnQgeyBOaWxlU2VsZWN0RWRpdG9yLCBOaWxlU2VsZWN0RWRpdG9yT3B0aW9ucywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9uaWxlLXNlbGVjdC1lZGl0b3InO1xuZXhwb3J0IHsgTmlsZUF1dG9Db21wbGV0ZUVkaXRvciwgTmlsZUF1dG9Db21wbGV0ZUVkaXRvck9wdGlvbnMsIEF1dG9Db21wbGV0ZU9wdGlvbiB9IGZyb20gJy4vbmlsZS1hdXRvY29tcGxldGUtZWRpdG9yJztcbmV4cG9ydCB7IE5pbGVDYWxlbmRhckVkaXRvciwgTmlsZUNhbGVuZGFyRWRpdG9yT3B0aW9ucywgQWxsb3dlZERhdGVzUmFuZ2UgfSBmcm9tICcuL25pbGUtY2FsZW5kYXItZWRpdG9yJztcbmV4cG9ydCB7IE5pbGVEYXRlUGlja2VyRWRpdG9yLCBOaWxlRGF0ZVBpY2tlckVkaXRvck9wdGlvbnMsIERhdGVSYW5nZSB9IGZyb20gJy4vbmlsZS1kYXRlLXBpY2tlci1lZGl0b3InO1xuIl19
|
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom editor using NileAutoComplete from @aquera/nile-elements
|
|
3
|
-
* Provides real-time suggestions as users type in table cells
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Custom editor that uses NileAutoComplete component
|
|
7
|
-
* @template T The value type (string by default)
|
|
8
|
-
*/
|
|
9
|
-
export class NileAutoCompleteEditor {
|
|
10
|
-
constructor(options) {
|
|
11
|
-
this.options = options;
|
|
12
|
-
this.eventListeners = [];
|
|
13
|
-
if (!options.options || options.options.length === 0) {
|
|
14
|
-
console.warn('NileAutoCompleteEditor requires options array to be provided');
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
edit(context) {
|
|
18
|
-
if (!context.container) {
|
|
19
|
-
console.warn('NileAutoCompleteEditor requires a container element');
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
// Create NileAutoComplete custom element using document.createElement
|
|
23
|
-
this.autocomplete = document.createElement('nile-autocomplete');
|
|
24
|
-
this.autocomplete.value = String(context.value ?? '');
|
|
25
|
-
this.autocomplete.className = 'st-cell-editor st-nile-autocomplete-editor';
|
|
26
|
-
// Apply inline styles for proper cell fitting
|
|
27
|
-
this.autocomplete.style.width = 'inherit';
|
|
28
|
-
this.autocomplete.style.height = 'inherit';
|
|
29
|
-
this.autocomplete.style.boxSizing = 'border-box';
|
|
30
|
-
// Apply all configuration options
|
|
31
|
-
this.applyOptions();
|
|
32
|
-
// Set allMenuItems property for autocomplete suggestions
|
|
33
|
-
this.setMenuItems();
|
|
34
|
-
// Set up event listeners
|
|
35
|
-
this.setupEventListeners(context);
|
|
36
|
-
// Clear container and append autocomplete
|
|
37
|
-
context.container.innerHTML = '';
|
|
38
|
-
context.container.appendChild(this.autocomplete);
|
|
39
|
-
// Auto focus
|
|
40
|
-
if (this.options?.autoFocus !== false) {
|
|
41
|
-
setTimeout(() => {
|
|
42
|
-
this.autocomplete?.focus();
|
|
43
|
-
}, 0);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Set allMenuItems property for autocomplete suggestions
|
|
48
|
-
* NileAutoComplete requires allMenuItems to be set as a property, not child elements
|
|
49
|
-
*/
|
|
50
|
-
setMenuItems() {
|
|
51
|
-
if (!this.autocomplete)
|
|
52
|
-
return;
|
|
53
|
-
const options = this.options.options || [];
|
|
54
|
-
// Convert options to string array for allMenuItems
|
|
55
|
-
const menuItems = options.map(opt => {
|
|
56
|
-
if (typeof opt === 'string') {
|
|
57
|
-
return opt;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
// For AutoCompleteOption objects, use the label for display
|
|
61
|
-
return opt.label;
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
// Set the allMenuItems property directly on the element
|
|
65
|
-
this.autocomplete.allMenuItems = menuItems;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Apply all configuration options to the NileAutoComplete element
|
|
69
|
-
*/
|
|
70
|
-
applyOptions() {
|
|
71
|
-
if (!this.autocomplete)
|
|
72
|
-
return;
|
|
73
|
-
// Basic properties
|
|
74
|
-
if (this.options?.placeholder) {
|
|
75
|
-
this.autocomplete.placeholder = this.options.placeholder;
|
|
76
|
-
}
|
|
77
|
-
if (this.options?.disabled) {
|
|
78
|
-
this.autocomplete.disabled = this.options.disabled;
|
|
79
|
-
}
|
|
80
|
-
// Note: Some properties may not be available on NileAutoComplete
|
|
81
|
-
// Setting via attributes as fallback
|
|
82
|
-
if (this.options?.helpText) {
|
|
83
|
-
this.autocomplete.setAttribute('help-text', this.options.helpText);
|
|
84
|
-
}
|
|
85
|
-
// Size (if supported by NileAutoComplete)
|
|
86
|
-
if (this.options?.size) {
|
|
87
|
-
this.autocomplete.setAttribute('size', this.options.size);
|
|
88
|
-
}
|
|
89
|
-
// Behavior options - using attributes for properties that may not exist
|
|
90
|
-
if (this.options?.clearable) {
|
|
91
|
-
this.autocomplete.setAttribute('clearable', String(this.options.clearable));
|
|
92
|
-
}
|
|
93
|
-
if (this.options?.required) {
|
|
94
|
-
this.autocomplete.setAttribute('required', String(this.options.required));
|
|
95
|
-
}
|
|
96
|
-
// Styling options
|
|
97
|
-
if (this.options?.filled !== undefined) {
|
|
98
|
-
this.autocomplete.setAttribute('filled', String(this.options.filled));
|
|
99
|
-
}
|
|
100
|
-
if (this.options?.pill) {
|
|
101
|
-
this.autocomplete.setAttribute('pill', String(this.options.pill));
|
|
102
|
-
}
|
|
103
|
-
// Visual states - using attributes for properties that may not exist
|
|
104
|
-
if (this.options?.warning) {
|
|
105
|
-
this.autocomplete.setAttribute('warning', String(this.options.warning));
|
|
106
|
-
}
|
|
107
|
-
if (this.options?.error) {
|
|
108
|
-
this.autocomplete.setAttribute('error', String(this.options.error));
|
|
109
|
-
}
|
|
110
|
-
if (this.options?.success) {
|
|
111
|
-
this.autocomplete.setAttribute('success', String(this.options.success));
|
|
112
|
-
}
|
|
113
|
-
if (this.options?.errorMessage) {
|
|
114
|
-
this.autocomplete.setAttribute('error-message', this.options.errorMessage);
|
|
115
|
-
}
|
|
116
|
-
// Autocomplete specific options
|
|
117
|
-
if (this.options?.minSearchLength !== undefined) {
|
|
118
|
-
this.autocomplete.setAttribute('min-search-length', String(this.options.minSearchLength));
|
|
119
|
-
}
|
|
120
|
-
if (this.options?.maxSuggestions !== undefined) {
|
|
121
|
-
this.autocomplete.setAttribute('max-suggestions', String(this.options.maxSuggestions));
|
|
122
|
-
}
|
|
123
|
-
if (this.options?.caseSensitive !== undefined) {
|
|
124
|
-
this.autocomplete.setAttribute('case-sensitive', String(this.options.caseSensitive));
|
|
125
|
-
}
|
|
126
|
-
// Advanced options
|
|
127
|
-
if (this.options?.hoist) {
|
|
128
|
-
this.autocomplete.setAttribute('hoist', String(this.options.hoist));
|
|
129
|
-
}
|
|
130
|
-
if (this.options?.placement) {
|
|
131
|
-
this.autocomplete.setAttribute('placement', this.options.placement);
|
|
132
|
-
}
|
|
133
|
-
// Set portal attribute for proper dropdown rendering
|
|
134
|
-
this.autocomplete.setAttribute('portal', 'true');
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Set up all event listeners with proper cleanup tracking
|
|
138
|
-
*/
|
|
139
|
-
setupEventListeners(context) {
|
|
140
|
-
if (!this.autocomplete)
|
|
141
|
-
return;
|
|
142
|
-
const validateOnSave = this.options?.validateOnSave !== false;
|
|
143
|
-
// Handle keyboard events (keydown is not replaced by custom events)
|
|
144
|
-
const keydownHandler = (e) => {
|
|
145
|
-
const keyEvent = e;
|
|
146
|
-
if (keyEvent.key === 'Enter') {
|
|
147
|
-
keyEvent.preventDefault();
|
|
148
|
-
keyEvent.stopPropagation();
|
|
149
|
-
this.saveValue(context, validateOnSave);
|
|
150
|
-
}
|
|
151
|
-
else if (keyEvent.key === 'Escape') {
|
|
152
|
-
keyEvent.preventDefault();
|
|
153
|
-
keyEvent.stopPropagation();
|
|
154
|
-
context.onCancel();
|
|
155
|
-
}
|
|
156
|
-
else if (keyEvent.key === 'Tab') {
|
|
157
|
-
keyEvent.preventDefault();
|
|
158
|
-
keyEvent.stopPropagation();
|
|
159
|
-
this.saveValue(context, validateOnSave);
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
this.autocomplete.addEventListener('keydown', keydownHandler);
|
|
163
|
-
this.eventListeners.push({ event: 'keydown', handler: keydownHandler });
|
|
164
|
-
// Use nile-complete custom event for when user selects an autocomplete suggestion
|
|
165
|
-
const completeHandler = (e) => {
|
|
166
|
-
const customEvent = e;
|
|
167
|
-
// Save the selected value from autocomplete
|
|
168
|
-
if (customEvent.detail && customEvent.detail.value !== undefined) {
|
|
169
|
-
context.onSave(this.parseValue(customEvent.detail.value));
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
this.autocomplete.addEventListener('nile-complete', completeHandler);
|
|
173
|
-
this.eventListeners.push({ event: 'nile-complete', handler: completeHandler });
|
|
174
|
-
// Use native blur event (NileAutoComplete doesn't have nile-blur)
|
|
175
|
-
const blurHandler = (e) => {
|
|
176
|
-
const customEvent = e;
|
|
177
|
-
// Get current value directly from the component
|
|
178
|
-
const currentValue = customEvent.detail?.value ?? '';
|
|
179
|
-
// Save on blur - TableState coordination ensures only one cell is editing at a time
|
|
180
|
-
context.onSave(this.parseValue(currentValue));
|
|
181
|
-
};
|
|
182
|
-
this.autocomplete.addEventListener('blur', blurHandler);
|
|
183
|
-
this.eventListeners.push({ event: 'blur', handler: blurHandler });
|
|
184
|
-
// Use native input event for real-time value updates (NileAutoComplete doesn't have nile-input)
|
|
185
|
-
const inputHandler = () => {
|
|
186
|
-
const currentValue = this.autocomplete?.value ?? '';
|
|
187
|
-
context.onChange(this.parseValue(currentValue));
|
|
188
|
-
};
|
|
189
|
-
this.autocomplete.addEventListener('input', inputHandler);
|
|
190
|
-
this.eventListeners.push({ event: 'input', handler: inputHandler });
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Save value with optional validation
|
|
194
|
-
*/
|
|
195
|
-
saveValue(context, validate) {
|
|
196
|
-
if (!this.autocomplete)
|
|
197
|
-
return;
|
|
198
|
-
// Note: NileAutoComplete may not have validation methods
|
|
199
|
-
// Validation should be handled by the validator strategy instead
|
|
200
|
-
context.onSave(this.getCurrentValue());
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Parse value to appropriate type
|
|
204
|
-
*/
|
|
205
|
-
parseValue(value) {
|
|
206
|
-
return value;
|
|
207
|
-
}
|
|
208
|
-
destroy() {
|
|
209
|
-
// Remove all event listeners
|
|
210
|
-
if (this.autocomplete) {
|
|
211
|
-
this.eventListeners.forEach(({ event, handler }) => {
|
|
212
|
-
this.autocomplete?.removeEventListener(event, handler);
|
|
213
|
-
});
|
|
214
|
-
this.eventListeners = [];
|
|
215
|
-
this.autocomplete.remove();
|
|
216
|
-
this.autocomplete = undefined;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
focus() {
|
|
220
|
-
this.autocomplete?.focus();
|
|
221
|
-
}
|
|
222
|
-
getCurrentValue() {
|
|
223
|
-
if (!this.autocomplete)
|
|
224
|
-
return '';
|
|
225
|
-
return (this.autocomplete.value ?? '');
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1hdXRvY29tcGxldGUtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9lZGl0b3JzL25pbGUtYXV0b2NvbXBsZXRlLWVkaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFtRkg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUlqQyxZQUE2QixPQUFzQztRQUF0QyxZQUFPLEdBQVAsT0FBTyxDQUErQjtRQUYzRCxtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFHNUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztTQUM5RTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsT0FBNkI7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3BFLE9BQU87U0FDUjtRQUVELHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyw0Q0FBNEMsQ0FBQztRQUUzRSw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZ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SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVBdXRvQ29tcGxldGUgZnJvbSBAYXF1ZXJhL25pbGUtZWxlbWVudHNcbiAqIFByb3ZpZGVzIHJlYWwtdGltZSBzdWdnZXN0aW9ucyBhcyB1c2VycyB0eXBlIGluIHRhYmxlIGNlbGxzXG4gKi9cblxuaW1wb3J0IHsgQ2VsbEVkaXRvciwgQ2VsbEVkaXRvckNvbnRleHQgfSBmcm9tICcuLi9tb2RlbHMvY2VsbC1zdHJhdGVnaWVzLmludGVyZmFjZSc7XG5cbi8qKlxuICogQXV0b2NvbXBsZXRlIG9wdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0NvbXBsZXRlT3B0aW9uIHtcbiAgLyoqIFRoZSBvcHRpb24ncyB2YWx1ZSAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIG9wdGlvbiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogV2hldGhlciB0aGUgb3B0aW9uIGlzIGRpc2FibGVkICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGludGVyZmFjZSBmb3IgTmlsZUF1dG9Db21wbGV0ZUVkaXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbGVBdXRvQ29tcGxldGVFZGl0b3JPcHRpb25zIHtcbiAgLy8gT3B0aW9ucyBjb25maWd1cmF0aW9uIChSRVFVSVJFRClcbiAgLyoqIEFycmF5IG9mIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9ucyAtIHN1cHBvcnRzIGJvdGggc2ltcGxlIHN0cmluZyBhcnJheSBvciBkZXRhaWxlZCBBdXRvQ29tcGxldGVPcHRpb24gb2JqZWN0cyAqL1xuICBvcHRpb25zOiBBdXRvQ29tcGxldGVPcHRpb25bXSB8IHN0cmluZ1tdO1xuICBcbiAgLy8gQmFzaWMgcHJvcGVydGllc1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCB0byBzaG93IGFzIGEgaGludCB3aGVuIHRoZSBzZWFyY2ggaXMgZW1wdHkgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlIHRoZSBhdXRvY29tcGxldGUgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBIZWxwIHRleHQgdG8gZGlzcGxheSBiZWxvdyB0aGUgY29udHJvbCAqL1xuICBoZWxwVGV4dD86IHN0cmluZztcbiAgLyoqIFNpemUgb2YgdGhlIGF1dG9jb21wbGV0ZSBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICBcbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICAvKiogQWRkcyBjbGVhciBidXR0b24gd2hlbiB2YWx1ZSBpcyBub3QgZW1wdHkgKi9cbiAgY2xlYXJhYmxlPzogYm9vbGVhbjtcbiAgLyoqIE1ha2UgdGhlIGF1dG9jb21wbGV0ZSByZXF1aXJlZCAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBBdXRvLWZvY3VzIHRoZSBpbnB1dCB3aGVuIGVkaXRvciBvcGVucyAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICAvKiogU2VsZWN0IGFsbCB0ZXh0IHdoZW4gZm9jdXNlZCAqL1xuICBzZWxlY3RPbkZvY3VzPzogYm9vbGVhbjtcbiAgXG4gIC8vIFZpc3VhbCBzdGF0ZXNcbiAgLyoqIFdhcm5pbmcgc3RhdGUgc3R5bGluZyAqL1xuICB3YXJuaW5nPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIHN0YXRlIHN0eWxpbmcgKi9cbiAgZXJyb3I/OiBib29sZWFuO1xuICAvKiogU3VjY2VzcyBzdGF0ZSBzdHlsaW5nICovXG4gIHN1Y2Nlc3M/OiBib29sZWFuO1xuICAvKiogRXJyb3IgbWVzc2FnZSB0byBkaXNwbGF5ICovXG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgXG4gIC8vIEF1dG9jb21wbGV0ZSBzcGVjaWZpYyBvcHRpb25zXG4gIC8qKiBNaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJlZm9yZSBzaG93aW5nIHN1Z2dlc3Rpb25zICovXG4gIG1pblNlYXJjaExlbmd0aD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIHN1Z2dlc3Rpb25zIHRvIHNob3cgKi9cbiAgbWF4U3VnZ2VzdGlvbnM/OiBudW1iZXI7XG4gIC8qKiBDYXNlLXNlbnNpdGl2ZSBtYXRjaGluZyAqL1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgLyoqIEZpbHRlciBtb2RlIGZvciBtYXRjaGluZyBzdWdnZXN0aW9ucyAqL1xuICBmaWx0ZXJNb2RlPzogJ3N0YXJ0c1dpdGgnIHwgJ2NvbnRhaW5zJyB8ICdjdXN0b20nO1xuICAvKiogQ3VzdG9tIGZpbHRlciBmdW5jdGlvbiBmb3IgbWF0Y2hpbmcgKi9cbiAgY3VzdG9tRmlsdGVyPzogKGlucHV0OiBzdHJpbmcsIG9wdGlvbjogQXV0b0NvbXBsZXRlT3B0aW9uKSA9PiBib29sZWFuO1xuICBcbiAgLy8gU3R5bGluZyBvcHRpb25zXG4gIC8qKiBEcmF3cyBhIGZpbGxlZCBhdXRvY29tcGxldGUgc3R5bGUgKi9cbiAgZmlsbGVkPzogYm9vbGVhbjtcbiAgLyoqIFBpbGwtc3R5bGUgd2l0aCByb3VuZGVkIGVkZ2VzICovXG4gIHBpbGw/OiBib29sZWFuO1xuICBcbiAgLy8gQWR2YW5jZWQgb3B0aW9uc1xuICAvKiogVXNlIGZpeGVkIHBvc2l0aW9uaW5nIHRvIHByZXZlbnQgY2xpcHBpbmcgKi9cbiAgaG9pc3Q/OiBib29sZWFuO1xuICAvKiogUGxhY2VtZW50IG9mIHRoZSBzdWdnZXN0aW9ucyBkcm9wZG93biAqL1xuICBwbGFjZW1lbnQ/OiAndG9wJyB8ICdib3R0b20nO1xuICBcbiAgLy8gVmFsaWRhdGlvblxuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVBdXRvQ29tcGxldGUgY29tcG9uZW50XG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGJ5IGRlZmF1bHQpXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWxlQXV0b0NvbXBsZXRlRWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIHByaXZhdGUgYXV0b2NvbXBsZXRlPzogYW55O1xuICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBBcnJheTx7IGV2ZW50OiBzdHJpbmc7IGhhbmRsZXI6IEV2ZW50TGlzdGVuZXIgfT4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE5pbGVBdXRvQ29tcGxldGVFZGl0b3JPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLm9wdGlvbnMgfHwgb3B0aW9ucy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlQXV0b0NvbXBsZXRlRWRpdG9yIHJlcXVpcmVzIG9wdGlvbnMgYXJyYXkgdG8gYmUgcHJvdmlkZWQnKTtcbiAgICB9XG4gIH1cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlQXV0b0NvbXBsZXRlRWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgTmlsZUF1dG9Db21wbGV0ZSBjdXN0b20gZWxlbWVudCB1c2luZyBkb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgdGhpcy5hdXRvY29tcGxldGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWF1dG9jb21wbGV0ZScpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLnZhbHVlID0gU3RyaW5nKGNvbnRleHQudmFsdWUgPz8gJycpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmNsYXNzTmFtZSA9ICdzdC1jZWxsLWVkaXRvciBzdC1uaWxlLWF1dG9jb21wbGV0ZS1lZGl0b3InO1xuICAgIFxuICAgIC8vIEFwcGx5IGlubGluZSBzdHlsZXMgZm9yIHByb3BlciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5zdHlsZS53aWR0aCA9ICdpbmhlcml0JztcbiAgICB0aGlzLmF1dG9jb21wbGV0ZS5zdHlsZS5oZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5hdXRvY29tcGxldGUuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICB0aGlzLmFwcGx5T3B0aW9ucygpO1xuXG4gICAgLy8gU2V0IGFsbE1lbnVJdGVtcyBwcm9wZXJ0eSBmb3IgYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRNZW51SXRlbXMoKTtcblxuICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dCk7XG5cbiAgICAvLyBDbGVhciBjb250YWluZXIgYW5kIGFwcGVuZCBhdXRvY29tcGxldGVcbiAgICBjb250ZXh0LmNvbnRhaW5lci5pbm5lckhUTUwgPSAnJztcbiAgICBjb250ZXh0LmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmF1dG9jb21wbGV0ZSk7XG5cbiAgICAvLyBBdXRvIGZvY3VzXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYXV0b0ZvY3VzICE9PSBmYWxzZSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbGxNZW51SXRlbXMgcHJvcGVydHkgZm9yIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICAgKiBOaWxlQXV0b0NvbXBsZXRlIHJlcXVpcmVzIGFsbE1lbnVJdGVtcyB0byBiZSBzZXQgYXMgYSBwcm9wZXJ0eSwgbm90IGNoaWxkIGVsZW1lbnRzXG4gICAqL1xuICBwcml2YXRlIHNldE1lbnVJdGVtcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLm9wdGlvbnMgfHwgW107XG4gICAgXG4gICAgLy8gQ29udmVydCBvcHRpb25zIHRvIHN0cmluZyBhcnJheSBmb3IgYWxsTWVudUl0ZW1zXG4gICAgY29uc3QgbWVudUl0ZW1zOiBzdHJpbmdbXSA9IG9wdGlvbnMubWFwKG9wdCA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG9wdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciBBdXRvQ29tcGxldGVPcHRpb24gb2JqZWN0cywgdXNlIHRoZSBsYWJlbCBmb3IgZGlzcGxheVxuICAgICAgICByZXR1cm4gb3B0LmxhYmVsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRoZSBhbGxNZW51SXRlbXMgcHJvcGVydHkgZGlyZWN0bHkgb24gdGhlIGVsZW1lbnRcbiAgICAodGhpcy5hdXRvY29tcGxldGUgYXMgYW55KS5hbGxNZW51SXRlbXMgPSBtZW51SXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYWxsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUgTmlsZUF1dG9Db21wbGV0ZSBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGFwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICAvLyBCYXNpYyBwcm9wZXJ0aWVzXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnBsYWNlaG9sZGVyID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5kaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBTb21lIHByb3BlcnRpZXMgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gTmlsZUF1dG9Db21wbGV0ZVxuICAgIC8vIFNldHRpbmcgdmlhIGF0dHJpYnV0ZXMgYXMgZmFsbGJhY2tcbiAgICBpZiAodGhpcy5vcHRpb25zPy5oZWxwVGV4dCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdoZWxwLXRleHQnLCB0aGlzLm9wdGlvbnMuaGVscFRleHQpO1xuICAgIH1cblxuICAgIC8vIFNpemUgKGlmIHN1cHBvcnRlZCBieSBOaWxlQXV0b0NvbXBsZXRlKVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnNpemUpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnc2l6ZScsIHRoaXMub3B0aW9ucy5zaXplKTtcbiAgICB9XG5cbiAgICAvLyBCZWhhdmlvciBvcHRpb25zIC0gdXNpbmcgYXR0cmlidXRlcyBmb3IgcHJvcGVydGllcyB0aGF0IG1heSBub3QgZXhpc3RcbiAgICBpZiAodGhpcy5vcHRpb25zPy5jbGVhcmFibGUpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnY2xlYXJhYmxlJywgU3RyaW5nKHRoaXMub3B0aW9ucy5jbGVhcmFibGUpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zPy5yZXF1aXJlZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdyZXF1aXJlZCcsIFN0cmluZyh0aGlzLm9wdGlvbnMucmVxdWlyZWQpKTtcbiAgICB9XG5cbiAgICAvLyBTdHlsaW5nIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5maWxsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdmaWxsZWQnLCBTdHJpbmcodGhpcy5vcHRpb25zLmZpbGxlZCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBpbGwpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgncGlsbCcsIFN0cmluZyh0aGlzLm9wdGlvbnMucGlsbCkpO1xuICAgIH1cblxuICAgIC8vIFZpc3VhbCBzdGF0ZXMgLSB1c2luZyBhdHRyaWJ1dGVzIGZvciBwcm9wZXJ0aWVzIHRoYXQgbWF5IG5vdCBleGlzdFxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lndhcm5pbmcpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnd2FybmluZycsIFN0cmluZyh0aGlzLm9wdGlvbnMud2FybmluZykpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2Vycm9yJywgU3RyaW5nKHRoaXMub3B0aW9ucy5lcnJvcikpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgnc3VjY2VzcycsIFN0cmluZyh0aGlzLm9wdGlvbnMuc3VjY2VzcykpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdlcnJvci1tZXNzYWdlJywgdGhpcy5vcHRpb25zLmVycm9yTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgLy8gQXV0b2NvbXBsZXRlIHNwZWNpZmljIG9wdGlvbnNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5taW5TZWFyY2hMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdtaW4tc2VhcmNoLWxlbmd0aCcsIFN0cmluZyh0aGlzLm9wdGlvbnMubWluU2VhcmNoTGVuZ3RoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ubWF4U3VnZ2VzdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdtYXgtc3VnZ2VzdGlvbnMnLCBTdHJpbmcodGhpcy5vcHRpb25zLm1heFN1Z2dlc3Rpb25zKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uY2FzZVNlbnNpdGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2Nhc2Utc2Vuc2l0aXZlJywgU3RyaW5nKHRoaXMub3B0aW9ucy5jYXNlU2Vuc2l0aXZlKSk7XG4gICAgfVxuXG4gICAgLy8gQWR2YW5jZWQgb3B0aW9uc1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmhvaXN0KSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5zZXRBdHRyaWJ1dGUoJ2hvaXN0JywgU3RyaW5nKHRoaXMub3B0aW9ucy5ob2lzdCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnBsYWNlbWVudCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGUuc2V0QXR0cmlidXRlKCdwbGFjZW1lbnQnLCB0aGlzLm9wdGlvbnMucGxhY2VtZW50KTtcbiAgICB9XG5cbiAgICAvLyBTZXQgcG9ydGFsIGF0dHJpYnV0ZSBmb3IgcHJvcGVyIGRyb3Bkb3duIHJlbmRlcmluZ1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLnNldEF0dHJpYnV0ZSgncG9ydGFsJywgJ3RydWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucz8udmFsaWRhdGVPblNhdmUgIT09IGZhbHNlO1xuXG4gICAgLy8gSGFuZGxlIGtleWJvYXJkIGV2ZW50cyAoa2V5ZG93biBpcyBub3QgcmVwbGFjZWQgYnkgY3VzdG9tIGV2ZW50cylcbiAgICBjb25zdCBrZXlkb3duSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBlIGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25DYW5jZWwoKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5RXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5hdXRvY29tcGxldGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25IYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2tleWRvd24nLCBoYW5kbGVyOiBrZXlkb3duSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuaWxlLWNvbXBsZXRlIGN1c3RvbSBldmVudCBmb3Igd2hlbiB1c2VyIHNlbGVjdHMgYW4gYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25cbiAgICBjb25zdCBjb21wbGV0ZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGVkIHZhbHVlIGZyb20gYXV0b2NvbXBsZXRlXG4gICAgICBpZiAoY3VzdG9tRXZlbnQuZGV0YWlsICYmIGN1c3RvbUV2ZW50LmRldGFpbC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZShjdXN0b21FdmVudC5kZXRhaWwudmFsdWUpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY29tcGxldGUnLCBjb21wbGV0ZUhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1jb21wbGV0ZScsIGhhbmRsZXI6IGNvbXBsZXRlSGFuZGxlciB9KTtcblxuICAgIC8vIFVzZSBuYXRpdmUgYmx1ciBldmVudCAoTmlsZUF1dG9Db21wbGV0ZSBkb2Vzbid0IGhhdmUgbmlsZS1ibHVyKVxuICAgIGNvbnN0IGJsdXJIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICAvLyBHZXQgY3VycmVudCB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBjb21wb25lbnRcbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGN1c3RvbUV2ZW50LmRldGFpbD8udmFsdWUgPz8gJyc7XG4gICAgICAvLyBTYXZlIG9uIGJsdXIgLSBUYWJsZVN0YXRlIGNvb3JkaW5hdGlvbiBlbnN1cmVzIG9ubHkgb25lIGNlbGwgaXMgZWRpdGluZyBhdCBhIHRpbWVcbiAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZShjdXJyZW50VmFsdWUpKTtcbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBibHVySGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICdibHVyJywgaGFuZGxlcjogYmx1ckhhbmRsZXIgfSk7XG5cbiAgICAvLyBVc2UgbmF0aXZlIGlucHV0IGV2ZW50IGZvciByZWFsLXRpbWUgdmFsdWUgdXBkYXRlcyAoTmlsZUF1dG9Db21wbGV0ZSBkb2Vzbid0IGhhdmUgbmlsZS1pbnB1dClcbiAgICBjb25zdCBpbnB1dEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmF1dG9jb21wbGV0ZT8udmFsdWUgPz8gJyc7XG4gICAgICBjb250ZXh0Lm9uQ2hhbmdlKHRoaXMucGFyc2VWYWx1ZShjdXJyZW50VmFsdWUpKTtcbiAgICB9O1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgaW5wdXRIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2lucHV0JywgaGFuZGxlcjogaW5wdXRIYW5kbGVyIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdmFsdWUgd2l0aCBvcHRpb25hbCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHNhdmVWYWx1ZShjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPiwgdmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXV0b2NvbXBsZXRlKSByZXR1cm47XG5cbiAgICAvLyBOb3RlOiBOaWxlQXV0b0NvbXBsZXRlIG1heSBub3QgaGF2ZSB2YWxpZGF0aW9uIG1ldGhvZHNcbiAgICAvLyBWYWxpZGF0aW9uIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSB2YWxpZGF0b3Igc3RyYXRlZ3kgaW5zdGVhZFxuICAgIGNvbnRleHQub25TYXZlKHRoaXMuZ2V0Q3VycmVudFZhbHVlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIHRvIGFwcHJvcHJpYXRlIHR5cGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWYWx1ZSh2YWx1ZTogc3RyaW5nKTogVCB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIHVua25vd24gYXMgVDtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ldmVudExpc3RlbmVycyA9IFtdO1xuICAgICAgXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5yZW1vdmUoKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5mb2N1cygpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy5hdXRvY29tcGxldGUpIHJldHVybiAnJyBhcyB1bmtub3duIGFzIFQ7XG4gICAgcmV0dXJuICh0aGlzLmF1dG9jb21wbGV0ZS52YWx1ZSA/PyAnJykgYXMgdW5rbm93biBhcyBUO1xuICB9XG59XG4iXX0=
|