@qbs-origin/origin-form 0.8.10 → 0.8.12
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/esm2022/lib/form-css.helper.mjs +122 -28
- package/esm2022/lib/formly/custom-section-separator.component.mjs +11 -3
- package/esm2022/lib/formly/form-section-separator.component.mjs +34 -11
- package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +23 -8
- package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +3 -3
- package/esm2022/lib/formly/formly-row-spacer.mjs +12 -0
- package/esm2022/lib/formly/formly-row-wrapper.mjs +32 -0
- package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +21 -26
- package/esm2022/lib/model-population.helper.mjs +22 -1
- package/esm2022/lib/models/flux.model.mjs +1 -1
- package/esm2022/lib/models/forms.model.mjs +77 -25
- package/esm2022/lib/origin-form.component.mjs +170 -55
- package/esm2022/lib/origin-form.module.mjs +11 -1
- package/esm2022/lib/services/applicationData.service.mjs +1 -1
- package/fesm2022/qbs-origin-origin-form.mjs +518 -151
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -1
- package/lib/form-css.helper.d.ts +7 -0
- package/lib/formly/form-section-separator.component.d.ts +2 -2
- package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +2 -1
- package/lib/formly/formly-row-spacer.d.ts +6 -0
- package/lib/formly/formly-row-wrapper.d.ts +6 -0
- package/lib/models/flux.model.d.ts +4 -0
- package/lib/models/forms.model.d.ts +22 -6
- package/lib/origin-form.component.d.ts +6 -1
- package/lib/origin-form.module.d.ts +64 -62
- package/lib/services/applicationData.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -36,38 +36,97 @@ export class FormCssHelper {
|
|
|
36
36
|
case '.component-data':
|
|
37
37
|
cssText = this.getSpecificCssForData(key, values, cssRules);
|
|
38
38
|
break;
|
|
39
|
+
case '.component-dictionary':
|
|
40
|
+
cssText = this.getSpecificCssForDictionary(key, values, cssRules);
|
|
41
|
+
break;
|
|
39
42
|
case '.table-details':
|
|
40
43
|
cssText = this.getSpecificCssForTableDetail(values);
|
|
41
44
|
break;
|
|
42
45
|
case '.table-header':
|
|
43
46
|
cssText = this.getSpecificCssForTableHeader(values);
|
|
44
47
|
break;
|
|
48
|
+
case '.component-progress-bar':
|
|
49
|
+
cssText = this.getSpecificCssForProgressBar(values);
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
// Append component-level margin rules (applies to all 5 margin-enabled components)
|
|
53
|
+
const marginTop = values['component-margin-top'];
|
|
54
|
+
const marginBottom = values['component-margin-bottom'];
|
|
55
|
+
const marginParts = [];
|
|
56
|
+
if (marginTop && marginTop !== 'none') {
|
|
57
|
+
marginParts.push(`margin-top: ${marginTop} !important;`);
|
|
58
|
+
}
|
|
59
|
+
if (marginBottom && marginBottom !== 'none') {
|
|
60
|
+
marginParts.push(`margin-bottom: ${marginBottom} !important;`);
|
|
61
|
+
}
|
|
62
|
+
if (marginParts.length > 0) {
|
|
63
|
+
cssText += ` ${key} { ${marginParts.join(' ')} }`;
|
|
45
64
|
}
|
|
46
65
|
return cssText;
|
|
47
66
|
}
|
|
67
|
+
static getSpecificCssForDictionary(key, values, cssRules) {
|
|
68
|
+
let inputSpecificCss = '';
|
|
69
|
+
const fontStyleSource = cssRules['.component-dictionary-value'] || cssRules['.font-input'];
|
|
70
|
+
if (fontStyleSource) {
|
|
71
|
+
const fontStyleForInputText = { ...fontStyleSource };
|
|
72
|
+
if (values['text-align']) {
|
|
73
|
+
fontStyleForInputText['text-align'] = values['text-align'];
|
|
74
|
+
}
|
|
75
|
+
fontStyleForInputText['color'] = (fontStyleForInputText['color'] || '') + ' !important';
|
|
76
|
+
inputSpecificCss = this.styleObjectToString({ ...fontStyleForInputText });
|
|
77
|
+
}
|
|
78
|
+
let labelSpecificCss = '';
|
|
79
|
+
const labelSource = cssRules['.component-dictionary-label'];
|
|
80
|
+
if (labelSource) {
|
|
81
|
+
labelSpecificCss = this.styleObjectToString({ ...labelSource });
|
|
82
|
+
}
|
|
83
|
+
var css = `
|
|
84
|
+
.mat-mdc-text-field-wrapper.mdc-text-field {
|
|
85
|
+
${this.styleObjectToString({ ...values })};
|
|
86
|
+
border-style: solid;
|
|
87
|
+
input {
|
|
88
|
+
${inputSpecificCss}
|
|
89
|
+
}
|
|
90
|
+
mat-label {
|
|
91
|
+
${labelSpecificCss}
|
|
92
|
+
}
|
|
93
|
+
.mdc-line-ripple--active::after {
|
|
94
|
+
border-bottom-color: ${labelSource ? labelSource['color'] : 'inherit'}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.component-dictionary-label label {
|
|
99
|
+
${labelSpecificCss}
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
102
|
+
return `${key} { ${css} }`;
|
|
103
|
+
}
|
|
48
104
|
static getSpecificCssForInput(key, values, cssRules) {
|
|
49
105
|
let inputSpecificCss = '';
|
|
50
106
|
let signInputSpecificCss = '';
|
|
51
|
-
const
|
|
52
|
-
if (
|
|
107
|
+
const fontStyleSource = cssRules['.component-text-field-value'] || cssRules['.font-input'];
|
|
108
|
+
if (fontStyleSource) {
|
|
109
|
+
const fontStyleForInputText = { ...fontStyleSource };
|
|
53
110
|
//transfer property from component to input
|
|
54
111
|
if (values['text-align']) {
|
|
55
112
|
fontStyleForInputText['text-align'] = values['text-align'];
|
|
56
113
|
}
|
|
57
|
-
fontStyleForInputText['color']
|
|
58
|
-
inputSpecificCss = this.styleObjectToString(fontStyleForInputText);
|
|
59
|
-
signInputSpecificCss = this.styleObjectToString(fontStyleForInputText, true);
|
|
114
|
+
fontStyleForInputText['color'] = (fontStyleForInputText['color'] || '') + ' !important';
|
|
115
|
+
inputSpecificCss = this.styleObjectToString({ ...fontStyleForInputText });
|
|
116
|
+
signInputSpecificCss = this.styleObjectToString({ ...fontStyleForInputText }, true);
|
|
60
117
|
}
|
|
61
118
|
let labelSpecificCss = '';
|
|
62
119
|
let signLabelSpecificCss = '';
|
|
63
|
-
const
|
|
64
|
-
if (
|
|
65
|
-
labelSpecificCss = this.styleObjectToString(
|
|
66
|
-
signLabelSpecificCss = this.styleObjectToString(
|
|
120
|
+
const labelSource = cssRules['.component-text-field-label'];
|
|
121
|
+
if (labelSource) {
|
|
122
|
+
labelSpecificCss = this.styleObjectToString({ ...labelSource });
|
|
123
|
+
signLabelSpecificCss = this.styleObjectToString({ ...labelSource }, true);
|
|
67
124
|
}
|
|
125
|
+
const textareaHeight = values['textarea-height'] || '';
|
|
126
|
+
const textareaMaxHeight = values['textarea-max-height'] || '';
|
|
68
127
|
var css = `
|
|
69
128
|
.mat-mdc-text-field-wrapper.mdc-text-field {
|
|
70
|
-
${this.styleObjectToString(values)};
|
|
129
|
+
${this.styleObjectToString({ ...values })};
|
|
71
130
|
border-style: solid;
|
|
72
131
|
input {
|
|
73
132
|
${inputSpecificCss}
|
|
@@ -76,13 +135,13 @@ export class FormCssHelper {
|
|
|
76
135
|
${labelSpecificCss}
|
|
77
136
|
}
|
|
78
137
|
.mdc-line-ripple--active::after {
|
|
79
|
-
border-bottom-color: ${
|
|
138
|
+
border-bottom-color: ${labelSource ? labelSource['color'] : 'inherit'}
|
|
80
139
|
}
|
|
81
140
|
}
|
|
82
141
|
|
|
83
142
|
input.component-text-field {
|
|
84
143
|
border-style: solid !important;
|
|
85
|
-
${this.styleObjectToString(values, true)};
|
|
144
|
+
${this.styleObjectToString({ ...values }, true)};
|
|
86
145
|
${signInputSpecificCss}
|
|
87
146
|
}
|
|
88
147
|
|
|
@@ -90,7 +149,34 @@ export class FormCssHelper {
|
|
|
90
149
|
${signLabelSpecificCss}
|
|
91
150
|
}
|
|
92
151
|
`;
|
|
93
|
-
|
|
152
|
+
// Flat explicit rules scoped to textarea only.
|
|
153
|
+
// :has(textarea) on the infix ensures min-height/max-height do NOT affect
|
|
154
|
+
// text/numeric inputs that share the same .component-text-field class.
|
|
155
|
+
const textareaFlatCss = `
|
|
156
|
+
${key} .mat-mdc-text-field-wrapper.mdc-text-field:has(textarea) .mat-mdc-form-field-infix {
|
|
157
|
+
${textareaHeight ? `min-height: ${textareaHeight} !important;` : ''}
|
|
158
|
+
}
|
|
159
|
+
${key} .mat-mdc-text-field-wrapper.mdc-text-field textarea {
|
|
160
|
+
${inputSpecificCss}
|
|
161
|
+
${textareaHeight ? `min-height: ${textareaHeight} !important;` : ''}
|
|
162
|
+
${textareaMaxHeight && textareaMaxHeight !== 'none' ? `max-height: ${textareaMaxHeight} !important; overflow-y: auto !important;` : ''}
|
|
163
|
+
resize: none !important;
|
|
164
|
+
}
|
|
165
|
+
`;
|
|
166
|
+
return `${key} { ${css}} ${textareaFlatCss}`;
|
|
167
|
+
}
|
|
168
|
+
static getSpecificCssForProgressBar(values) {
|
|
169
|
+
const startColor = values['startColor'] || '#8848EF';
|
|
170
|
+
const endColor = values['endColor'] || '#8848EF';
|
|
171
|
+
const height = values['height'] || '4px';
|
|
172
|
+
const borderRadius = values['borderRadius'] || '7px';
|
|
173
|
+
return `
|
|
174
|
+
.component-progress-bar {
|
|
175
|
+
background: linear-gradient(to right, ${startColor}, ${endColor}) !important;
|
|
176
|
+
height: ${height} !important;
|
|
177
|
+
border-radius: ${borderRadius} !important;
|
|
178
|
+
}
|
|
179
|
+
`;
|
|
94
180
|
}
|
|
95
181
|
static getSpecificCssForTableHeader(values) {
|
|
96
182
|
const backgroundColor = values['background-color'] || '#ffffff';
|
|
@@ -271,7 +357,8 @@ export class FormCssHelper {
|
|
|
271
357
|
.component-text-field mat-label,
|
|
272
358
|
.component-checkbox mat-label,
|
|
273
359
|
.component-radio mat-label,
|
|
274
|
-
.component-date mat-label
|
|
360
|
+
.component-date mat-label,
|
|
361
|
+
.component-dictionary mat-label {
|
|
275
362
|
${cssRules['.font-label']
|
|
276
363
|
? this.styleObjectToString(cssRules['.font-label'])
|
|
277
364
|
: ''}
|
|
@@ -326,21 +413,22 @@ export class FormCssHelper {
|
|
|
326
413
|
}
|
|
327
414
|
static getSpecificCssForData(key, values, cssRules) {
|
|
328
415
|
let inputSpecificCss = '';
|
|
329
|
-
const
|
|
330
|
-
if (
|
|
416
|
+
const fontStyleSource = cssRules['.component-date-value'] || cssRules['.component-data-value'] || cssRules['.font-list'];
|
|
417
|
+
if (fontStyleSource) {
|
|
418
|
+
const fontStyleForInputText = { ...fontStyleSource };
|
|
331
419
|
//transfer property from component to input
|
|
332
420
|
if (values['text-align']) {
|
|
333
421
|
fontStyleForInputText['text-align'] = values['text-align'];
|
|
334
422
|
}
|
|
335
|
-
inputSpecificCss = this.styleObjectToString(fontStyleForInputText);
|
|
423
|
+
inputSpecificCss = this.styleObjectToString({ ...fontStyleForInputText });
|
|
336
424
|
}
|
|
337
425
|
let labelSpecificCss = '';
|
|
338
|
-
const
|
|
339
|
-
if (
|
|
340
|
-
labelSpecificCss = this.styleObjectToString(
|
|
426
|
+
const labelSource = cssRules['.component-data-label'];
|
|
427
|
+
if (labelSource) {
|
|
428
|
+
labelSpecificCss = this.styleObjectToString({ ...labelSource });
|
|
341
429
|
}
|
|
342
430
|
return ` ${key} { .mat-mdc-text-field-wrapper.mdc-text-field {
|
|
343
|
-
${this.styleObjectToString(values)};
|
|
431
|
+
${this.styleObjectToString({ ...values })};
|
|
344
432
|
border-style:solid;
|
|
345
433
|
input{
|
|
346
434
|
${inputSpecificCss}
|
|
@@ -353,15 +441,21 @@ export class FormCssHelper {
|
|
|
353
441
|
}
|
|
354
442
|
} `;
|
|
355
443
|
}
|
|
444
|
+
static { this.INTERNAL_KEYS = ['textarea-height', 'textarea-max-height', 'component-margin-top', 'component-margin-bottom']; }
|
|
356
445
|
static styleObjectToString(values, important = false) {
|
|
357
|
-
values
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
446
|
+
const output = { ...values };
|
|
447
|
+
// Remove internal keys that are not valid CSS properties
|
|
448
|
+
this.INTERNAL_KEYS.forEach(k => delete output[k]);
|
|
449
|
+
if (!output['width']) {
|
|
450
|
+
output['width'] =
|
|
451
|
+
'calc(100%' +
|
|
452
|
+
('margin-left' in output ? ` - ${output['margin-left']}` : '') +
|
|
453
|
+
('margin-right' in output ? ` - ${output['margin-right']}` : '') +
|
|
454
|
+
')';
|
|
455
|
+
}
|
|
456
|
+
return Object.entries(output)
|
|
363
457
|
.map(([key, value]) => `${key}: ${value}${important ? ' !important' : ''}`)
|
|
364
458
|
.join('; ');
|
|
365
459
|
}
|
|
366
460
|
}
|
|
367
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jc3MuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtLWNzcy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGFBQWE7SUFFakIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQWtCLEVBQUUsYUFBc0I7UUFDM0UsSUFBSSxXQUFXLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUN2QywwQ0FBMEMsRUFDMUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ25CLFFBQVEsQ0FDVCxDQUFDO1lBQ0YsV0FBVyxJQUFJLE9BQU8sQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFrQjtRQUNoRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDakMsR0FBVyxFQUNYLE1BQXNDLEVBQ3RDLFFBQWtCO1FBRWxCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLE9BQU8sR0FBRyxJQUFJLEdBQUcsS0FBSyxZQUFZLElBQUksQ0FBQztRQUUzQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ1osS0FBSyx1QkFBdUI7Z0JBQzFCLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDN0QsTUFBTTtZQUNSLEtBQUsscUJBQXFCO2dCQUN4QixPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2hFLE1BQU07WUFDUixLQUFLLGlCQUFpQjtnQkFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNO1lBQ1IsS0FBSyxlQUFlLENBQUM7WUFDckIsS0FBSyxrQkFBa0I7Z0JBQ3JCLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNO1lBQ1IsS0FBSyxpQkFBaUIsQ0FBQztZQUN2QixLQUFLLGlCQUFpQjtnQkFDcEIsT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM1RCxNQUFNO1lBQ1IsS0FBSyxnQkFBZ0I7Z0JBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BELE1BQU07WUFDUixLQUFLLGVBQWU7Z0JBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BELE1BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDbEMsR0FBVyxFQUNYLE1BQXNDLEVBQ3RDLFFBQWtCO1FBRWxCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQiwyQ0FBMkM7WUFDM0MsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDekIscUJBQXFCLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUM7WUFDaEQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbkUsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUM3QyxxQkFBcUIsRUFDckIsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDOUIsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUN0RSxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDMUIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDbkUsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUM3QyxxQkFBcUIsRUFDckIsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxHQUFHLEdBQUc7O1FBRU4sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQzs7O1VBRzlCLGdCQUFnQjs7O1VBR2hCLGdCQUFnQjs7OytCQUdLLHFCQUFxQixDQUFDLE9BQU8sQ0FBQzs7Ozs7O1FBTXJELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQ3RDLG9CQUFvQjs7OztRQUlwQixvQkFBb0I7O0tBRXZCLENBQUM7UUFFRixPQUFPLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNLENBQUMsNEJBQTRCLENBQ3hDLE1BQXNDO1FBRXRDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUNoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksU0FBUyxDQUFDO1FBQ3hELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLFVBQVUsQ0FBQztRQUMvRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDdEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUNqRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxRQUFRLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksUUFBUSxDQUFDO1FBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDO1FBRTFDLE1BQU0sR0FBRyxHQUFHOzs7eUJBR1MsY0FBYzt3QkFDZixhQUFhO3FCQUNoQixVQUFVO21CQUNaLFFBQVE7OztnQkFHWCxNQUFNOzt5QkFFRyxNQUFNOzs7MEJBR0wsZUFBZTtlQUMxQixLQUFLO3lCQUNLLGNBQWM7MEJBQ2IsYUFBYTtrQkFDckIsTUFBTSxVQUFVLFdBQVc7MEJBQ25CLGFBQWE7dUJBQ2hCLFVBQVU7cUJBQ1osUUFBUTs7O2VBR2QsU0FBUztnQkFDUixNQUFNLFVBQVUsV0FBVztvQkFDdkIsU0FBUzt3QkFDTCxhQUFhO2lCQUNwQixPQUFPO2dCQUNSLE1BQU07OztLQUdqQixDQUFDO1FBQ0YsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUFDLDRCQUE0QixDQUN4QyxNQUFzQztRQUV0QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDaEUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQVMsQ0FBQztRQUMvQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDO1FBQ2pELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxRQUFRLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksUUFBUSxDQUFDO1FBQzNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQztRQUMvQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxTQUFTLENBQUM7UUFDOUQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxTQUFTLENBQUM7UUFFM0UsTUFBTSxHQUFHLEdBQUc7OzsyQkFHVyxlQUFlOzs7a0JBR3hCLFNBQVMsVUFBVSxjQUFjO3FCQUM5QixTQUFTLFVBQVUsY0FBYzthQUN6QyxTQUFTO2tCQUNKLFNBQVM7c0JBQ0wsYUFBYTtzQkFDYixhQUFhOzs7Ozt3QkFLWCxvQkFBb0I7Ozs7O2VBSzdCLE9BQU87OztLQUdqQixDQUFDO1FBRUYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUFDLHlCQUF5QixDQUNyQyxHQUFXLEVBQ1gsTUFBc0MsRUFDdEMsUUFBa0I7UUFFbEIsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNwRSxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDMUIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELElBQUksR0FBRyxHQUFHOztvQkFFTSxNQUFNLENBQUMsWUFBWSxDQUFDO3NCQUNsQixNQUFNLENBQUMsY0FBYyxDQUFDO3VCQUNyQixNQUFNLENBQUMsZUFBZSxDQUFDO3FCQUN6QixNQUFNLENBQUMsYUFBYSxDQUFDOztVQUVoQyxnQkFBZ0I7Ozs7O2tDQUtRLE1BQU0sQ0FBQyxjQUFjLENBQUM7bUNBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUM7cUNBQ3BCLE1BQU0sQ0FBQyxjQUFjLENBQUM7Ozs7Ozs7NEJBTy9CLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztrQkFDcEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLE1BQU0sQ0FBQyxjQUFjLENBQUM7eUJBQy9DLE1BQU0sQ0FBQyxlQUFlLENBQUM7a0NBQ2QsTUFBTSxDQUFDLGNBQWMsQ0FBQzttQ0FDckIsTUFBTSxDQUFDLGNBQWMsQ0FBQzs7OztnQkFJekMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLE1BQU0sQ0FBQyxjQUFjLENBQUM7OztlQUd2RCxNQUFNLENBQUMsT0FBTyxDQUFDO01BQ3hCLENBQUM7UUFDSCxPQUFPLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNLENBQUMsMEJBQTBCLENBQ3ZDLEdBQVcsRUFDWCxNQUFzQyxFQUN0QyxRQUFrQjtRQUVsQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxRCwwQ0FBMEM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQUcsYUFBYTtZQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQztZQUN6QyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsa0NBQWtDO1FBQ2xDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sZUFBZSxHQUFHLGFBQWE7WUFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7WUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLHFDQUFxQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRCxNQUFNLGtCQUFrQixHQUFHLGFBQWE7WUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUM7WUFDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLE9BQU87OztZQUdDLFlBQVk7Ozs7O1VBS2QsWUFBWTs7OztVQUlaLFlBQVk7Ozs7O1VBS1osZUFBZTs7Ozs7VUFLZixrQkFBa0I7Ozs7O1VBS2xCLFlBQVk7Ozs7Ozs7VUFPWixRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxFQUNKOztLQUVELENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLHNCQUFzQixDQUNsQyxNQUFzQyxFQUN0QyxRQUFrQjtRQUVsQixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2pFLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsSUFBSSxHQUFHLEdBQUc7O29CQUVNLE1BQU0sQ0FBQyxZQUFZLENBQUM7c0JBQ2xCLE1BQU0sQ0FBQyxjQUFjLENBQUM7dUJBQ3JCLE1BQU0sQ0FBQyxlQUFlLENBQUM7cUJBQ3pCLE1BQU0sQ0FBQyxhQUFhLENBQUM7O1VBRWhDLGdCQUFnQjs7Ozs7Ozs7Ozs7O29DQVlVLE1BQU0sQ0FBQyxjQUFjLENBQUM7cUNBQ3JCLE1BQU0sQ0FBQyxjQUFjLENBQUM7O2dDQUUzQixNQUFNLENBQUMsa0JBQWtCLENBQUM7c0JBQ3BDLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxNQUFNLENBQUMsY0FBYyxDQUFDOztzQ0FFdEMsTUFBTSxDQUFDLGNBQWMsQ0FBQzt1Q0FDckIsTUFBTSxDQUFDLGNBQWMsQ0FBQzs7OEJBRS9CLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQzs7OzhCQUcxQixNQUFNLENBQUMsT0FBTyxDQUFDOzs7Ozs7S0FNeEMsQ0FBQztRQUVGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FDakMsR0FBVyxFQUNYLE1BQXNDLEVBQ3RDLFFBQWtCO1FBRWxCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JELElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQiwyQ0FBMkM7WUFDM0MsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDekIscUJBQXFCLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxxQkFBcUIsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNoRSxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDMUIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sSUFBSSxHQUFHOzRCQUNVLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7Ozs4QkFHOUIsZ0JBQWdCOzs7OytCQUlmLGdCQUFnQjs7Ozt1QkFJeEIsQ0FBQztJQUN0QixDQUFDO0lBRU0sTUFBTSxDQUFDLG1CQUFtQixDQUMvQixNQUFzQyxFQUN0QyxZQUFxQixLQUFLO1FBRTFCLE1BQU0sQ0FBQyxPQUFPLENBQUM7WUFDYixXQUFXO2dCQUNYLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5RCxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEUsR0FBRyxDQUFDO1FBRU4sT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUMxQixHQUFHLENBQ0YsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDdEU7YUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3NzUnVsZXMgfSBmcm9tIFwiLi9vdGhlcnMvdXRpbHNcIjtcblxuZXhwb3J0IGNsYXNzIEZvcm1Dc3NIZWxwZXIge1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFRvU3R5bGVTdHJpbmcoY3NzUnVsZXM6IENzc1J1bGVzLCBpc0Rpc3BsYXlNb2RlOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgc3R5bGVTdHJpbmcgPSBGb3JtQ3NzSGVscGVyLmNvbnZlcnRUb0Nzc1RleHQoY3NzUnVsZXMpO1xuICAgIGlmIChpc0Rpc3BsYXlNb2RlKSB7XG4gICAgICBjb25zdCBuZXdSdWxlID0gdGhpcy5jb252ZXJ0UnVsZVRvQ3NzVGV4dChcbiAgICAgICAgJy5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlci1jb250YWluZXInLFxuICAgICAgICB7IGRpc3BsYXk6ICdub25lJyB9LFxuICAgICAgICBjc3NSdWxlc1xuICAgICAgKTtcbiAgICAgIHN0eWxlU3RyaW5nICs9IG5ld1J1bGU7XG4gICAgfVxuICAgIHJldHVybiBzdHlsZVN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbnZlcnRUb0Nzc1RleHQoY3NzUnVsZXM6IENzc1J1bGVzKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHlsZVN0cmluZyA9IE9iamVjdC5lbnRyaWVzKGNzc1J1bGVzKVxuICAgICAgLm1hcCgoW2ssIHZdKSA9PiB0aGlzLmNvbnZlcnRSdWxlVG9Dc3NUZXh0KGssIHYsIGNzc1J1bGVzKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gICAgcmV0dXJuIHN0eWxlU3RyaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY29udmVydFJ1bGVUb0Nzc1RleHQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWVzOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgY3NzUnVsZXM6IENzc1J1bGVzXG4gICkge1xuICAgIGNvbnN0IHZhbHVlc0FzVGV4dCA9IE9iamVjdC5lbnRyaWVzKHZhbHVlcylcbiAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a306JHt2fTtgKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgICBsZXQgY3NzVGV4dCA9IGAgJHtrZXl9IHske3ZhbHVlc0FzVGV4dH19IGA7XG5cbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnLmNvbXBvbmVudC10ZXh0LWZpZWxkJzpcbiAgICAgICAgY3NzVGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDc3NGb3JJbnB1dChrZXksIHZhbHVlcywgY3NzUnVsZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy5jb21wb25lbnQtY2hlY2tib3gnOlxuICAgICAgICBjc3NUZXh0ID0gdGhpcy5nZXRTcGVjaWZpY0Nzc0ZvckNoZWNrQm94KGtleSwgdmFsdWVzLCBjc3NSdWxlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLmZvbnQtaGVhZGluZy0xJzpcbiAgICAgICAgY3NzVGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDc3NGb3JTdGVwTGFiZWwoa2V5LCB2YWx1ZXMsIGNzc1J1bGVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcuZm9ybWx5LXJhZGlvJzpcbiAgICAgIGNhc2UgJy5jb21wb25lbnQtcmFkaW8nOlxuICAgICAgICBjc3NUZXh0ID0gdGhpcy5nZXRTcGVjaWZpY0Nzc0ZvclJhZGlvKHZhbHVlcywgY3NzUnVsZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy5jb21wb25lbnQtZGF0ZSc6XG4gICAgICBjYXNlICcuY29tcG9uZW50LWRhdGEnOlxuICAgICAgICBjc3NUZXh0ID0gdGhpcy5nZXRTcGVjaWZpY0Nzc0ZvckRhdGEoa2V5LCB2YWx1ZXMsIGNzc1J1bGVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcudGFibGUtZGV0YWlscyc6XG4gICAgICAgIGNzc1RleHQgPSB0aGlzLmdldFNwZWNpZmljQ3NzRm9yVGFibGVEZXRhaWwodmFsdWVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcudGFibGUtaGVhZGVyJzpcbiAgICAgICAgY3NzVGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDc3NGb3JUYWJsZUhlYWRlcih2YWx1ZXMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGNzc1RleHQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFNwZWNpZmljQ3NzRm9ySW5wdXQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWVzOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgY3NzUnVsZXM6IENzc1J1bGVzXG4gICkge1xuICAgIGxldCBpbnB1dFNwZWNpZmljQ3NzID0gJyc7XG4gICAgbGV0IHNpZ25JbnB1dFNwZWNpZmljQ3NzID0gJyc7XG4gICAgY29uc3QgZm9udFN0eWxlRm9ySW5wdXRUZXh0ID0gY3NzUnVsZXNbJy5mb250LWlucHV0J107XG4gICAgaWYgKGZvbnRTdHlsZUZvcklucHV0VGV4dCkge1xuICAgICAgLy90cmFuc2ZlciBwcm9wZXJ0eSBmcm9tIGNvbXBvbmVudCB0byBpbnB1dFxuICAgICAgaWYgKHZhbHVlc1sndGV4dC1hbGlnbiddKSB7XG4gICAgICAgIGZvbnRTdHlsZUZvcklucHV0VGV4dFsndGV4dC1hbGlnbiddID0gdmFsdWVzWyd0ZXh0LWFsaWduJ107XG4gICAgICB9XG4gICAgICBmb250U3R5bGVGb3JJbnB1dFRleHRbJ2NvbG9yJ10gKz0gJyAhaW1wb3J0YW50JztcbiAgICAgIGlucHV0U3BlY2lmaWNDc3MgPSB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoZm9udFN0eWxlRm9ySW5wdXRUZXh0KTtcbiAgICAgIHNpZ25JbnB1dFNwZWNpZmljQ3NzID0gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKFxuICAgICAgICBmb250U3R5bGVGb3JJbnB1dFRleHQsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxhYmVsU3BlY2lmaWNDc3MgPSAnJztcbiAgICBsZXQgc2lnbkxhYmVsU3BlY2lmaWNDc3MgPSAnJztcbiAgICBjb25zdCBmb250U3R5bGVGb3JMYWJlbFRleHQgPSBjc3NSdWxlc1snLmNvbXBvbmVudC10ZXh0LWZpZWxkLWxhYmVsJ107XG4gICAgaWYgKGZvbnRTdHlsZUZvckxhYmVsVGV4dCkge1xuICAgICAgbGFiZWxTcGVjaWZpY0NzcyA9IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyhmb250U3R5bGVGb3JMYWJlbFRleHQpO1xuICAgICAgc2lnbkxhYmVsU3BlY2lmaWNDc3MgPSB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoXG4gICAgICAgIGZvbnRTdHlsZUZvckxhYmVsVGV4dCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgY3NzID0gYFxuICAgIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZCB7XG4gICAgICAke3RoaXMuc3R5bGVPYmplY3RUb1N0cmluZyh2YWx1ZXMpfTtcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICBpbnB1dCB7XG4gICAgICAgICR7aW5wdXRTcGVjaWZpY0Nzc31cbiAgICAgIH1cbiAgICAgIG1hdC1sYWJlbCB7XG4gICAgICAgICR7bGFiZWxTcGVjaWZpY0Nzc31cbiAgICAgIH1cbiAgICAgIC5tZGMtbGluZS1yaXBwbGUtLWFjdGl2ZTo6YWZ0ZXIge1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2ZvbnRTdHlsZUZvckxhYmVsVGV4dFsnY29sb3InXX1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnB1dC5jb21wb25lbnQtdGV4dC1maWVsZCB7XG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkICFpbXBvcnRhbnQ7XG4gICAgICAke3RoaXMuc3R5bGVPYmplY3RUb1N0cmluZyh2YWx1ZXMsIHRydWUpfTtcbiAgICAgICR7c2lnbklucHV0U3BlY2lmaWNDc3N9XG4gICAgfVxuXG4gICAgLmNvbXBvbmVudC10ZXh0LWZpZWxkLWxhYmVsIGxhYmVsIHtcbiAgICAgICR7c2lnbkxhYmVsU3BlY2lmaWNDc3N9XG4gICAgfVxuICAgIGA7XG5cbiAgICByZXR1cm4gYCR7a2V5fSB7ICR7Y3NzfX1gO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRTcGVjaWZpY0Nzc0ZvclRhYmxlSGVhZGVyKFxuICAgIHZhbHVlczogeyBbcHJvcGVydHk6IHN0cmluZ106IHN0cmluZyB9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdmFsdWVzWydiYWNrZ3JvdW5kLWNvbG9yJ10gfHwgJyNmZmZmZmYnO1xuICAgIGNvbnN0IHRleHRDb2xvciA9IHZhbHVlc1snY29sb3InXSB8fCAnIzAwMDAwMCc7XG4gICAgY29uc3QgYm9yZGVyID0gdmFsdWVzWydib3JkZXItd2lkdGgnXTtcbiAgICBjb25zdCBib3JkZXJDb2xvciA9IHZhbHVlc1snYm9yZGVyLWNvbG9yJ10gfHwgJyMwMDAwMDAnO1xuICAgIGNvbnN0IGJvcmRlckNvbGxhcHNlID0gdmFsdWVzWydib3JkZXItY29sbGFwc2UnXSB8fCAnY29sbGFwc2UnO1xuICAgIGNvbnN0IGJvcmRlclNwYWNpbmcgPSB2YWx1ZXNbJ2JvcmRlci1zcGFjaW5nJ10gfHwgJzAnO1xuICAgIGNvbnN0IHRleHRBbGlnbiA9IHZhbHVlc1sndGV4dC1hbGlnbiddIHx8ICdsZWZ0JztcbiAgICBjb25zdCB2ZXJ0aWNhbEFsaWduID0gdmFsdWVzWyd2ZXJ0aWNhbC1hbGlnbiddIHx8ICdtaWRkbGUnO1xuICAgIGNvbnN0IGZvbnRGYW1pbHkgPSB2YWx1ZXNbJ2ZvbnQtZmFtaWx5J10gfHwgJ0FyaWFsLCBzYW5zLXNlcmlmJztcbiAgICBjb25zdCBmb250U2l6ZSA9IHZhbHVlc1snZm9udC1zaXplJ10gfHwgJzE0cHgnO1xuICAgIGNvbnN0IGxldHRlclNwYWNpbmcgPSB2YWx1ZXNbJ2xldHRlci1zcGFjaW5nJ10gfHwgJ25vcm1hbCc7XG4gICAgY29uc3QgcGFkZGluZyA9IHZhbHVlc1sncGFkZGluZyddIHx8ICc4cHgnO1xuICAgIGNvbnN0IHdpZHRoID0gdmFsdWVzWyd3aWR0aCddIHx8ICdhdXRvJztcbiAgICBjb25zdCBoZWlnaHQgPSB2YWx1ZXNbJ2hlaWdodCddIHx8ICdhdXRvJztcblxuICAgIGNvbnN0IGNzcyA9IGBcbiAgICB0YWJsZSBcbiAgICAge1xuICAgICAgYm9yZGVyLWNvbGxhcHNlOiAke2JvcmRlckNvbGxhcHNlfSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXNwYWNpbmc6ICR7Ym9yZGVyU3BhY2luZ307ICAgXG4gICAgICBmb250LWZhbWlseTogJHtmb250RmFtaWx5fTtcbiAgICAgIGZvbnQtc2l6ZTogJHtmb250U2l6ZX07XG4gICAgfVxuICAgICAgdGFibGUgdGgge1xuICAgICAgaGVpZ2h0OiAke2hlaWdodH07XG4gICAgICB9XG4gICAgICB0YWJsZSB0ZHtoZWlnaHQ6ICR7aGVpZ2h0fTtcbiAgICAgIH1cbiAgICAudGFibGUtaGVhZCB0ciB0aHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7YmFja2dyb3VuZENvbG9yfSAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6ICR7d2lkdGh9ICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sbGFwc2U6ICR7Ym9yZGVyQ29sbGFwc2V9O1xuICAgICAgICBib3JkZXItc3BhY2luZzogJHtib3JkZXJTcGFjaW5nfTtcbiAgICAgICAgYm9yZGVyOiAke2JvcmRlcn0gc29saWQgJHtib3JkZXJDb2xvcn07IFxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogJHt2ZXJ0aWNhbEFsaWdufTtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7Zm9udEZhbWlseX07XG4gICAgICAgIGZvbnQtc2l6ZTogJHtmb250U2l6ZX07XG4gICAgICB9XG4gICAgLnRhYmxlLWhlYWQge1xuICAgICAgY29sb3I6ICR7dGV4dENvbG9yfTtcbiAgICAgIGJvcmRlcjogJHtib3JkZXJ9IHNvbGlkICR7Ym9yZGVyQ29sb3J9OyAgXG4gICAgICB0ZXh0LWFsaWduOiAke3RleHRBbGlnbn07ICAgICAgICAgICAgXG4gICAgICBsZXR0ZXItc3BhY2luZzogJHtsZXR0ZXJTcGFjaW5nfTtcbiAgICAgIHBhZGRpbmc6ICR7cGFkZGluZ307ICAgICAgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fTtcbiAgICAgfVxuXG4gICAgYDtcbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRTcGVjaWZpY0Nzc0ZvclRhYmxlRGV0YWlsKFxuICAgIHZhbHVlczogeyBbcHJvcGVydHk6IHN0cmluZ106IHN0cmluZyB9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdmFsdWVzWydiYWNrZ3JvdW5kLWNvbG9yJ10gfHwgJyNmZmZmZmYnO1xuICAgIGNvbnN0IHRleHRDb2xvciA9IHZhbHVlc1snY29sb3InXSB8fCAnIzAwMDAwMCc7XG4gICAgY29uc3QgdGV4dEFsaWduID0gdmFsdWVzWyd0ZXh0LWFsaWduJ10gfHwgJ2xlZnQnO1xuICAgIGNvbnN0IHZlcnRpY2FsQWxpZ24gPSB2YWx1ZXNbJ3ZlcnRpY2FsQWxpZ24nXSB8fCAnbWlkZGxlJztcbiAgICBjb25zdCBsZXR0ZXJTcGFjaW5nID0gdmFsdWVzWydsZXR0ZXItc3BhY2luZyddIHx8ICdub3JtYWwnO1xuICAgIGNvbnN0IHBhZGRpbmcgPSB2YWx1ZXNbJ3BhZGRpbmcnXSB8fCAnOHB4JztcbiAgICBjb25zdCByb3dCb3JkZXIgPSB2YWx1ZXNbJ3Jvd2JvcmRlciddIHx8ICcxcHgnO1xuICAgIGNvbnN0IHJvd0JvcmRlckNvbG9yID0gdmFsdWVzWydyb3dib3JkZXItY29sb3InXSB8fCAnIzAwMDAwMCc7XG4gICAgY29uc3QgaG92ZXJCYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZXNbJ2hvdmVyLWJhY2tncm91bmQtY29sb3InXSB8fCAnI2YwZjBmMCc7XG5cbiAgICBjb25zdCBjc3MgPSBgICAgIFxuXG4gICAgICAudGFibGUtZGV0YWlse1xuICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7YmFja2dyb3VuZENvbG9yfVxuICAgICAgfVxuICAgICAgICAudGFibGUtZGV0YWlsIC5uZy1zdGFyLWluc2VydGVkIHtcbiAgICBib3JkZXItdG9wOiAke3Jvd0JvcmRlcn0gc29saWQgJHtyb3dCb3JkZXJDb2xvcn0gIWltcG9ydGFudDtcbiAgICBib3JkZXItYm90dG9tOiAke3Jvd0JvcmRlcn0gc29saWQgJHtyb3dCb3JkZXJDb2xvcn0gIWltcG9ydGFudDsgICAgXG4gICAgY29sb3I6ICR7dGV4dENvbG9yfSAhaW1wb3J0YW50O1xuICAgIHRleHQtYWxpZ246ICR7dGV4dEFsaWdufTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogJHt2ZXJ0aWNhbEFsaWdufTtcbiAgICBsZXR0ZXItc3BhY2luZzogJHtsZXR0ZXJTcGFjaW5nfTsgICAgXG4gIH1cbiAgXG5cbiAgLnRhYmxlLWRldGFpbCAubmctc3Rhci1pbnNlcnRlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtob3ZlckJhY2tncm91bmRDb2xvcn0gIWltcG9ydGFudDtcbiAgICBcbiAgfVxuXG4gIC50YWJsZS1kZXRhaWwgdGQge1xuICAgIHBhZGRpbmc6ICR7cGFkZGluZ30gIWltcG9ydGFudDtcbiAgfVxuICAgICBcbiAgICBgO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3BlY2lmaWNDc3NGb3JDaGVja0JveChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBjc3NSdWxlczogQ3NzUnVsZXNcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgbGFiZWxTcGVjaWZpY0NzcyA9ICcnO1xuICAgIGNvbnN0IGZvbnRTdHlsZUZvckxhYmVsVGV4dCA9IGNzc1J1bGVzWycuY29tcG9uZW50LWNoZWNrYm94LWxhYmVsJ107XG4gICAgaWYgKGZvbnRTdHlsZUZvckxhYmVsVGV4dCkge1xuICAgICAgbGFiZWxTcGVjaWZpY0NzcyA9IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyhmb250U3R5bGVGb3JMYWJlbFRleHQpO1xuICAgIH1cblxuICAgIHZhciBjc3MgPSBgXG4gICAgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy1jaGVja2JveC1maWVsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAke3ZhbHVlc1snbWFyZ2luLXRvcCddfTtcbiAgICAgIG1hcmdpbi1yaWdodDogJHt2YWx1ZXNbJ21hcmdpbi1yaWdodCddfTtcbiAgICAgIG1hcmdpbi1ib3R0b206ICR7dmFsdWVzWydtYXJnaW4tYm90dG9tJ119O1xuICAgICAgbWFyZ2luLWxlZnQ6ICR7dmFsdWVzWydtYXJnaW4tbGVmdCddfTtcbiAgICAgIC5tZGMtZm9ybS1maWVsZCA+IGxhYmVsIHtcbiAgICAgICAgJHtsYWJlbFNwZWNpZmljQ3NzfTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXRvcDogMnB4O1xuICAgICAgfTtcbiAgICAgIC5tZGMtY2hlY2tib3gge1xuICAgICAgICB3aWR0aDogY2FsYygxOHB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgIGhlaWdodDogY2FsYygxOHB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgIGZsZXg6IDAgMCBjYWxjKDE4cHggKyAoMiAqICR7dmFsdWVzWydib3JkZXItd2lkdGgnXX0pKTtcbiAgICAgIH1cbiAgICAgIC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2wge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICAgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dmFsdWVzWydiYWNrZ3JvdW5kLWNvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlcjogJHt2YWx1ZXNbJ2JvcmRlci13aWR0aCddfSBzb2xpZCAke3ZhbHVlc1snYm9yZGVyLWNvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dmFsdWVzWydib3JkZXItcmFkaXVzJ119O1xuICAgICAgICB3aWR0aDogY2FsYygxOXB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgIGhlaWdodDogY2FsYygxOXB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICB9O1xuICAgIH1cbiAgICAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCB7XG4gICAgICBib3JkZXI6ICR7dmFsdWVzWydib3JkZXItd2lkdGgnXX0gc29saWQgJHt2YWx1ZXNbJ2JvcmRlci1jb2xvciddfSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubWRjLWNoZWNrYm94X19jaGVja21hcmstcGF0aCB7XG4gICAgICBjb2xvcjogJHt2YWx1ZXNbJ2NvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgfWA7XG4gICAgcmV0dXJuIGAke2tleX0geyAke2Nzc30gfWA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRTcGVjaWZpY0Nzc0ZvclN0ZXBMYWJlbChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBjc3NSdWxlczogQ3NzUnVsZXNcbiAgKSB7XG4gICAgY29uc3QgbGFiZWxTcGVjaWZpY0NzcyA9IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyh2YWx1ZXMpO1xuXG4gICAgLy8gTWFwIEhlYWRpbmcgMSB0byBzdGVwIGxhYmVscyBpbiBzdGVwcGVyXG4gICAgY29uc3QgaGVhZGluZzFTdHlsZSA9IGNzc1J1bGVzWycuZm9udC1oZWFkaW5nLTEnXTtcbiAgICBjb25zdCBzdGVwTGFiZWxDc3MgPSBoZWFkaW5nMVN0eWxlXG4gICAgICA/IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyhoZWFkaW5nMVN0eWxlKVxuICAgICAgOiAnJztcblxuICAgIC8vIE1hcCBIZWFkaW5nIDIgdG8gc2VjdGlvbiB0aXRsZXNcbiAgICBjb25zdCBoZWFkaW5nMlN0eWxlID0gY3NzUnVsZXNbJy5mb250LWhlYWRpbmctMiddO1xuICAgIGNvbnN0IHNlY3Rpb25UaXRsZUNzcyA9IGhlYWRpbmcyU3R5bGVcbiAgICAgID8gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKGhlYWRpbmcyU3R5bGUpXG4gICAgICA6ICcnO1xuXG4gICAgLy8gTWFwIEhlYWRpbmcgMyB0byBzdGVwIGRlc2NyaXB0aW9uc1xuICAgIGNvbnN0IGhlYWRpbmczU3R5bGUgPSBjc3NSdWxlc1snLmZvbnQtaGVhZGluZy0zJ107XG4gICAgY29uc3Qgc3RlcERlc2NyaXB0aW9uQ3NzID0gaGVhZGluZzNTdHlsZVxuICAgICAgPyB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoaGVhZGluZzNTdHlsZSlcbiAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gYCBcbiAgICAgIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLXdyYXBwZXIge1xuICAgICAgICAubWF0LXN0ZXAtdGV4dC1sYWJlbCB7XG4gICAgICAgICAgJHtzdGVwTGFiZWxDc3N9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLm1hdC1zdGVwLWxhYmVsIHtcbiAgICAgICAgJHtzdGVwTGFiZWxDc3N9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZCB7XG4gICAgICAgICR7c3RlcExhYmVsQ3NzfVxuICAgICAgfVxuICAgICAgXG4gICAgICAuZm9ybS1zZWN0aW9uLXRpdGxlIGgyLFxuICAgICAgLnNlcGFyYXRvciBoMiB7XG4gICAgICAgICR7c2VjdGlvblRpdGxlQ3NzfVxuICAgICAgfVxuICAgICAgXG4gICAgICAuc3RlcC1kZXNjcmlwdGlvbixcbiAgICAgIC5tYXQtc3RlcC1zdWItbGFiZWwge1xuICAgICAgICAke3N0ZXBEZXNjcmlwdGlvbkNzc31cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwgLm1hdC1zdGVwLWxhYmVsLFxuICAgICAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsIC5tYXQtc3RlcC1sYWJlbCB7XG4gICAgICAgICR7c3RlcExhYmVsQ3NzfVxuICAgICAgfVxuICAgICAgXG4gICAgICAuY29tcG9uZW50LXRleHQtZmllbGQgbWF0LWxhYmVsLFxuICAgICAgLmNvbXBvbmVudC1jaGVja2JveCBtYXQtbGFiZWwsXG4gICAgICAuY29tcG9uZW50LXJhZGlvIG1hdC1sYWJlbCxcbiAgICAgIC5jb21wb25lbnQtZGF0ZSBtYXQtbGFiZWwge1xuICAgICAgICAke2Nzc1J1bGVzWycuZm9udC1sYWJlbCddXG4gICAgICAgID8gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKGNzc1J1bGVzWycuZm9udC1sYWJlbCddKVxuICAgICAgICA6ICcnXG4gICAgICB9XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3BlY2lmaWNDc3NGb3JSYWRpbyhcbiAgICB2YWx1ZXM6IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBjc3NSdWxlczogQ3NzUnVsZXNcbiAgKSB7XG4gICAgbGV0IGxhYmVsU3BlY2lmaWNDc3MgPSAnJztcbiAgICBjb25zdCBmb250U3R5bGVGb3JMYWJlbFRleHQgPSBjc3NSdWxlc1snLmNvbXBvbmVudC1yYWRpby1sYWJlbCddO1xuICAgIGlmIChmb250U3R5bGVGb3JMYWJlbFRleHQpIHtcbiAgICAgIGxhYmVsU3BlY2lmaWNDc3MgPSB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoZm9udFN0eWxlRm9yTGFiZWxUZXh0KTtcbiAgICB9XG5cbiAgICB2YXIgY3NzID0gYFxuICAgIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtcmFkaW9ib3gtZmllbGQge1xuICAgICAgbWFyZ2luLXRvcDogJHt2YWx1ZXNbJ21hcmdpbi10b3AnXX07XG4gICAgICBtYXJnaW4tcmlnaHQ6ICR7dmFsdWVzWydtYXJnaW4tcmlnaHQnXX07XG4gICAgICBtYXJnaW4tYm90dG9tOiAke3ZhbHVlc1snbWFyZ2luLWJvdHRvbSddfTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAke3ZhbHVlc1snbWFyZ2luLWxlZnQnXX07XG4gICAgICBsYWJlbCB7XG4gICAgICAgICR7bGFiZWxTcGVjaWZpY0Nzc307XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgcCB7XG4gICAgICAgICAgbWFyZ2luOiAwIDAgMTBweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLm1hdC1tZGMtcmFkaW8tYnV0dG9uIHtcbiAgICAgICAgLm1kYy1yYWRpb19fbmF0aXZlLWNvbnRyb2wge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgfVxuICAgICAgICAubWRjLXJhZGlvIHtcbiAgICAgICAgICB3aWR0aDogY2FsYygyMHB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgICAgaGVpZ2h0OiBjYWxjKDIwcHggKyAoMiAqICR7dmFsdWVzWydib3JkZXItd2lkdGgnXX0pKTtcbiAgICAgICAgICAubWRjLXJhZGlvX19iYWNrZ3JvdW5kIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dmFsdWVzWydiYWNrZ3JvdW5kLWNvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBib3JkZXI6ICR7dmFsdWVzWydib3JkZXItd2lkdGgnXX0gc29saWQgJHt2YWx1ZXNbJ2JvcmRlci1jb2xvciddfSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgd2lkdGg6IGNhbGMoMjBweCArICgyICogJHt2YWx1ZXNbJ2JvcmRlci13aWR0aCddfSkpO1xuICAgICAgICAgICAgaGVpZ2h0OiBjYWxjKDIwcHggKyAoMiAqICR7dmFsdWVzWydib3JkZXItd2lkdGgnXX0pKTtcbiAgICAgICAgICAgIC5tZGMtcmFkaW9fX291dGVyLWNpcmNsZSB7XG4gICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHt2YWx1ZXNbJ2JhY2tncm91bmQtY29sb3InXX0gIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5tZGMtcmFkaW9fX2lubmVyLWNpcmNsZSB7XG4gICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogJHt2YWx1ZXNbJ2NvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGA7XG5cbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRTcGVjaWZpY0Nzc0ZvckRhdGEoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWVzOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgY3NzUnVsZXM6IENzc1J1bGVzXG4gICkge1xuICAgIGxldCBpbnB1dFNwZWNpZmljQ3NzID0gJyc7XG4gICAgY29uc3QgZm9udFN0eWxlRm9ySW5wdXRUZXh0ID0gY3NzUnVsZXNbJy5mb250LWxpc3QnXTtcbiAgICBpZiAoZm9udFN0eWxlRm9ySW5wdXRUZXh0KSB7XG4gICAgICAvL3RyYW5zZmVyIHByb3BlcnR5IGZyb20gY29tcG9uZW50IHRvIGlucHV0XG4gICAgICBpZiAodmFsdWVzWyd0ZXh0LWFsaWduJ10pIHtcbiAgICAgICAgZm9udFN0eWxlRm9ySW5wdXRUZXh0Wyd0ZXh0LWFsaWduJ10gPSB2YWx1ZXNbJ3RleHQtYWxpZ24nXTtcbiAgICAgIH1cbiAgICAgIGlucHV0U3BlY2lmaWNDc3MgPSB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoZm9udFN0eWxlRm9ySW5wdXRUZXh0KTtcbiAgICB9XG5cbiAgICBsZXQgbGFiZWxTcGVjaWZpY0NzcyA9ICcnO1xuICAgIGNvbnN0IGZvbnRTdHlsZUZvckxhYmVsVGV4dCA9IGNzc1J1bGVzWycuY29tcG9uZW50LWRhdGEtbGFiZWwnXTtcbiAgICBpZiAoZm9udFN0eWxlRm9yTGFiZWxUZXh0KSB7XG4gICAgICBsYWJlbFNwZWNpZmljQ3NzID0gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKGZvbnRTdHlsZUZvckxhYmVsVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBgICR7a2V5fSB7IC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKHZhbHVlcyl9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItc3R5bGU6c29saWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5wdXRTcGVjaWZpY0Nzc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5maXgge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hdC1tZGMtZm9ybS1maWVsZC1pbnB1dC1jb250cm9sOjpwbGFjZWhvbGRlcntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsYWJlbFNwZWNpZmljQ3NzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHN0eWxlT2JqZWN0VG9TdHJpbmcoXG4gICAgdmFsdWVzOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgaW1wb3J0YW50OiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICB2YWx1ZXNbJ3dpZHRoJ10gPVxuICAgICAgJ2NhbGMoMTAwJScgK1xuICAgICAgKCdtYXJnaW4tbGVmdCcgaW4gdmFsdWVzID8gYCAtICR7dmFsdWVzWydtYXJnaW4tbGVmdCddfWAgOiAnJykgK1xuICAgICAgKCdtYXJnaW4tcmlnaHQnIGluIHZhbHVlcyA/IGAgLSAke3ZhbHVlc1snbWFyZ2luLXJpZ2h0J119YCA6ICcnKSArXG4gICAgICAnKSc7XG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWVzKVxuICAgICAgLm1hcChcbiAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fTogJHt2YWx1ZX0ke2ltcG9ydGFudCA/ICcgIWltcG9ydGFudCcgOiAnJ31gXG4gICAgICApXG4gICAgICAuam9pbignOyAnKTtcbiAgfVxufVxuIl19
|
|
461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jc3MuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb3JpZ2luLWZvcm0vc3JjL2xpYi9mb3JtLWNzcy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGFBQWE7SUFFakIsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQWtCLEVBQUUsYUFBc0I7UUFDM0UsSUFBSSxXQUFXLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUN2QywwQ0FBMEMsRUFDMUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ25CLFFBQVEsQ0FDVCxDQUFDO1lBQ0YsV0FBVyxJQUFJLE9BQU8sQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFrQjtRQUNoRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDakMsR0FBVyxFQUNYLE1BQXNDLEVBQ3RDLFFBQWtCO1FBRWxCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUs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QyxhQUFhLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzlELENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNoRSxHQUFHLENBQUM7UUFDUixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzthQUMxQixHQUFHLENBQ0YsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDdEU7YUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENzc1J1bGVzIH0gZnJvbSBcIi4vb3RoZXJzL3V0aWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBGb3JtQ3NzSGVscGVyIHtcblxuICBwdWJsaWMgc3RhdGljIGNvbnZlcnRUb1N0eWxlU3RyaW5nKGNzc1J1bGVzOiBDc3NSdWxlcywgaXNEaXNwbGF5TW9kZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgbGV0IHN0eWxlU3RyaW5nID0gRm9ybUNzc0hlbHBlci5jb252ZXJ0VG9Dc3NUZXh0KGNzc1J1bGVzKTtcbiAgICBpZiAoaXNEaXNwbGF5TW9kZSkge1xuICAgICAgY29uc3QgbmV3UnVsZSA9IHRoaXMuY29udmVydFJ1bGVUb0Nzc1RleHQoXG4gICAgICAgICcubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXItY29udGFpbmVyJyxcbiAgICAgICAgeyBkaXNwbGF5OiAnbm9uZScgfSxcbiAgICAgICAgY3NzUnVsZXNcbiAgICAgICk7XG4gICAgICBzdHlsZVN0cmluZyArPSBuZXdSdWxlO1xuICAgIH1cbiAgICByZXR1cm4gc3R5bGVTdHJpbmc7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb252ZXJ0VG9Dc3NUZXh0KGNzc1J1bGVzOiBDc3NSdWxlcyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3R5bGVTdHJpbmcgPSBPYmplY3QuZW50cmllcyhjc3NSdWxlcylcbiAgICAgIC5tYXAoKFtrLCB2XSkgPT4gdGhpcy5jb252ZXJ0UnVsZVRvQ3NzVGV4dChrLCB2LCBjc3NSdWxlcykpXG4gICAgICAuam9pbignICcpO1xuICAgIHJldHVybiBzdHlsZVN0cmluZztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvbnZlcnRSdWxlVG9Dc3NUZXh0KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlczogeyBbcHJvcGVydHk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIGNzc1J1bGVzOiBDc3NSdWxlc1xuICApIHtcbiAgICBjb25zdCB2YWx1ZXNBc1RleHQgPSBPYmplY3QuZW50cmllcyh2YWx1ZXMpXG4gICAgICAubWFwKChbaywgdl0pID0+IGAke2t9OiR7dn07YClcbiAgICAgIC5qb2luKCcgJyk7XG4gICAgbGV0IGNzc1RleHQgPSBgICR7a2V5fSB7JHt2YWx1ZXNBc1RleHR9fSBgO1xuXG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJy5jb21wb25lbnQtdGV4dC1maWVsZCc6XG4gICAgICAgIGNzc1RleHQgPSB0aGlzLmdldFNwZWNpZmljQ3NzRm9ySW5wdXQoa2V5LCB2YWx1ZXMsIGNzc1J1bGVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcuY29tcG9uZW50LWNoZWNrYm94JzpcbiAgICAgICAgY3NzVGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDc3NGb3JDaGVja0JveChrZXksIHZhbHVlcywgY3NzUnVsZXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy5mb250LWhlYWRpbmctMSc6XG4gICAgICAgIGNzc1RleHQgPSB0aGlzLmdldFNwZWNpZmljQ3NzRm9yU3RlcExhYmVsKGtleSwgdmFsdWVzLCBjc3NSdWxlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLmZvcm1seS1yYWRpbyc6XG4gICAgICBjYXNlICcuY29tcG9uZW50LXJhZGlvJzpcbiAgICAgICAgY3NzVGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDc3NGb3JSYWRpbyh2YWx1ZXMsIGNzc1J1bGVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICcuY29tcG9uZW50LWRhdGUnOlxuICAgICAgY2FzZSAnLmNvbXBvbmVudC1kYXRhJzpcbiAgICAgICAgY3NzVGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDc3NGb3JEYXRhKGtleSwgdmFsdWVzLCBjc3NSdWxlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLmNvbXBvbmVudC1kaWN0aW9uYXJ5JzpcbiAgICAgICAgY3NzVGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDc3NGb3JEaWN0aW9uYXJ5KGtleSwgdmFsdWVzLCBjc3NSdWxlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLnRhYmxlLWRldGFpbHMnOlxuICAgICAgICBjc3NUZXh0ID0gdGhpcy5nZXRTcGVjaWZpY0Nzc0ZvclRhYmxlRGV0YWlsKHZhbHVlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLnRhYmxlLWhlYWRlcic6XG4gICAgICAgIGNzc1RleHQgPSB0aGlzLmdldFNwZWNpZmljQ3NzRm9yVGFibGVIZWFkZXIodmFsdWVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgIGNhc2UgJy5jb21wb25lbnQtcHJvZ3Jlc3MtYmFyJzpcbiAgICAgICAgY3NzVGV4dCA9IHRoaXMuZ2V0U3BlY2lmaWNDc3NGb3JQcm9ncmVzc0Jhcih2YWx1ZXMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyBBcHBlbmQgY29tcG9uZW50LWxldmVsIG1hcmdpbiBydWxlcyAoYXBwbGllcyB0byBhbGwgNSBtYXJnaW4tZW5hYmxlZCBjb21wb25lbnRzKVxuICAgIGNvbnN0IG1hcmdpblRvcCA9IHZhbHVlc1snY29tcG9uZW50LW1hcmdpbi10b3AnXTtcbiAgICBjb25zdCBtYXJnaW5Cb3R0b20gPSB2YWx1ZXNbJ2NvbXBvbmVudC1tYXJnaW4tYm90dG9tJ107XG4gICAgY29uc3QgbWFyZ2luUGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKG1hcmdpblRvcCAmJiBtYXJnaW5Ub3AgIT09ICdub25lJykge1xuICAgICAgbWFyZ2luUGFydHMucHVzaChgbWFyZ2luLXRvcDogJHttYXJnaW5Ub3B9ICFpbXBvcnRhbnQ7YCk7XG4gICAgfVxuICAgIGlmIChtYXJnaW5Cb3R0b20gJiYgbWFyZ2luQm90dG9tICE9PSAnbm9uZScpIHtcbiAgICAgIG1hcmdpblBhcnRzLnB1c2goYG1hcmdpbi1ib3R0b206ICR7bWFyZ2luQm90dG9tfSAhaW1wb3J0YW50O2ApO1xuICAgIH1cbiAgICBpZiAobWFyZ2luUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgY3NzVGV4dCArPSBgICR7a2V5fSB7ICR7bWFyZ2luUGFydHMuam9pbignICcpfSB9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzVGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3BlY2lmaWNDc3NGb3JEaWN0aW9uYXJ5KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlczogeyBbcHJvcGVydHk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIGNzc1J1bGVzOiBDc3NSdWxlc1xuICApOiBzdHJpbmcge1xuICAgIGxldCBpbnB1dFNwZWNpZmljQ3NzID0gJyc7XG4gICAgY29uc3QgZm9udFN0eWxlU291cmNlID0gY3NzUnVsZXNbJy5jb21wb25lbnQtZGljdGlvbmFyeS12YWx1ZSddIHx8IGNzc1J1bGVzWycuZm9udC1pbnB1dCddO1xuICAgIGlmIChmb250U3R5bGVTb3VyY2UpIHtcbiAgICAgIGNvbnN0IGZvbnRTdHlsZUZvcklucHV0VGV4dCA9IHsgLi4uZm9udFN0eWxlU291cmNlIH07XG4gICAgICBpZiAodmFsdWVzWyd0ZXh0LWFsaWduJ10pIHtcbiAgICAgICAgZm9udFN0eWxlRm9ySW5wdXRUZXh0Wyd0ZXh0LWFsaWduJ10gPSB2YWx1ZXNbJ3RleHQtYWxpZ24nXTtcbiAgICAgIH1cbiAgICAgIGZvbnRTdHlsZUZvcklucHV0VGV4dFsnY29sb3InXSA9IChmb250U3R5bGVGb3JJbnB1dFRleHRbJ2NvbG9yJ10gfHwgJycpICsgJyAhaW1wb3J0YW50JztcbiAgICAgIGlucHV0U3BlY2lmaWNDc3MgPSB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoeyAuLi5mb250U3R5bGVGb3JJbnB1dFRleHQgfSk7XG4gICAgfVxuXG4gICAgbGV0IGxhYmVsU3BlY2lmaWNDc3MgPSAnJztcbiAgICBjb25zdCBsYWJlbFNvdXJjZSA9IGNzc1J1bGVzWycuY29tcG9uZW50LWRpY3Rpb25hcnktbGFiZWwnXTtcbiAgICBpZiAobGFiZWxTb3VyY2UpIHtcbiAgICAgIGxhYmVsU3BlY2lmaWNDc3MgPSB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoeyAuLi5sYWJlbFNvdXJjZSB9KTtcbiAgICB9XG5cbiAgICB2YXIgY3NzID0gYFxuICAgIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZCB7XG4gICAgICAke3RoaXMuc3R5bGVPYmplY3RUb1N0cmluZyh7IC4uLnZhbHVlcyB9KX07XG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgaW5wdXQge1xuICAgICAgICAke2lucHV0U3BlY2lmaWNDc3N9XG4gICAgICB9XG4gICAgICBtYXQtbGFiZWwge1xuICAgICAgICAke2xhYmVsU3BlY2lmaWNDc3N9XG4gICAgICB9XG4gICAgICAubWRjLWxpbmUtcmlwcGxlLS1hY3RpdmU6OmFmdGVyIHtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJHtsYWJlbFNvdXJjZSA/IGxhYmVsU291cmNlWydjb2xvciddIDogJ2luaGVyaXQnfVxuICAgICAgfVxuICAgIH1cblxuICAgIC5jb21wb25lbnQtZGljdGlvbmFyeS1sYWJlbCBsYWJlbCB7XG4gICAgICAke2xhYmVsU3BlY2lmaWNDc3N9XG4gICAgfVxuICAgIGA7XG5cbiAgICByZXR1cm4gYCR7a2V5fSB7ICR7Y3NzfSB9YDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3BlY2lmaWNDc3NGb3JJbnB1dChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBjc3NSdWxlczogQ3NzUnVsZXNcbiAgKSB7XG4gICAgbGV0IGlucHV0U3BlY2lmaWNDc3MgPSAnJztcbiAgICBsZXQgc2lnbklucHV0U3BlY2lmaWNDc3MgPSAnJztcbiAgICBjb25zdCBmb250U3R5bGVTb3VyY2UgPSBjc3NSdWxlc1snLmNvbXBvbmVudC10ZXh0LWZpZWxkLXZhbHVlJ10gfHwgY3NzUnVsZXNbJy5mb250LWlucHV0J107XG4gICAgaWYgKGZvbnRTdHlsZVNvdXJjZSkge1xuICAgICAgY29uc3QgZm9udFN0eWxlRm9ySW5wdXRUZXh0ID0geyAuLi5mb250U3R5bGVTb3VyY2UgfTtcbiAgICAgIC8vdHJhbnNmZXIgcHJvcGVydHkgZnJvbSBjb21wb25lbnQgdG8gaW5wdXRcbiAgICAgIGlmICh2YWx1ZXNbJ3RleHQtYWxpZ24nXSkge1xuICAgICAgICBmb250U3R5bGVGb3JJbnB1dFRleHRbJ3RleHQtYWxpZ24nXSA9IHZhbHVlc1sndGV4dC1hbGlnbiddO1xuICAgICAgfVxuICAgICAgZm9udFN0eWxlRm9ySW5wdXRUZXh0Wydjb2xvciddID0gKGZvbnRTdHlsZUZvcklucHV0VGV4dFsnY29sb3InXSB8fCAnJykgKyAnICFpbXBvcnRhbnQnO1xuICAgICAgaW5wdXRTcGVjaWZpY0NzcyA9IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyh7IC4uLmZvbnRTdHlsZUZvcklucHV0VGV4dCB9KTtcbiAgICAgIHNpZ25JbnB1dFNwZWNpZmljQ3NzID0gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKFxuICAgICAgICB7IC4uLmZvbnRTdHlsZUZvcklucHV0VGV4dCB9LFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsYWJlbFNwZWNpZmljQ3NzID0gJyc7XG4gICAgbGV0IHNpZ25MYWJlbFNwZWNpZmljQ3NzID0gJyc7XG4gICAgY29uc3QgbGFiZWxTb3VyY2UgPSBjc3NSdWxlc1snLmNvbXBvbmVudC10ZXh0LWZpZWxkLWxhYmVsJ107XG4gICAgaWYgKGxhYmVsU291cmNlKSB7XG4gICAgICBsYWJlbFNwZWNpZmljQ3NzID0gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKHsgLi4ubGFiZWxTb3VyY2UgfSk7XG4gICAgICBzaWduTGFiZWxTcGVjaWZpY0NzcyA9IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyhcbiAgICAgICAgeyAuLi5sYWJlbFNvdXJjZSB9LFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHRleHRhcmVhSGVpZ2h0ID0gdmFsdWVzWyd0ZXh0YXJlYS1oZWlnaHQnXSB8fCAnJztcbiAgICBjb25zdCB0ZXh0YXJlYU1heEhlaWdodCA9IHZhbHVlc1sndGV4dGFyZWEtbWF4LWhlaWdodCddIHx8ICcnO1xuXG4gICAgdmFyIGNzcyA9IGBcbiAgICAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQge1xuICAgICAgJHt0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoeyAuLi52YWx1ZXMgfSl9O1xuICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgIGlucHV0IHtcbiAgICAgICAgJHtpbnB1dFNwZWNpZmljQ3NzfVxuICAgICAgfVxuICAgICAgbWF0LWxhYmVsIHtcbiAgICAgICAgJHtsYWJlbFNwZWNpZmljQ3NzfVxuICAgICAgfVxuICAgICAgLm1kYy1saW5lLXJpcHBsZS0tYWN0aXZlOjphZnRlciB7XG4gICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7bGFiZWxTb3VyY2UgPyBsYWJlbFNvdXJjZVsnY29sb3InXSA6ICdpbmhlcml0J31cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnB1dC5jb21wb25lbnQtdGV4dC1maWVsZCB7XG4gICAgICBib3JkZXItc3R5bGU6IHNvbGlkICFpbXBvcnRhbnQ7XG4gICAgICAke3RoaXMuc3R5bGVPYmplY3RUb1N0cmluZyh7IC4uLnZhbHVlcyB9LCB0cnVlKX07XG4gICAgICAke3NpZ25JbnB1dFNwZWNpZmljQ3NzfVxuICAgIH1cblxuICAgIC5jb21wb25lbnQtdGV4dC1maWVsZC1sYWJlbCBsYWJlbCB7XG4gICAgICAke3NpZ25MYWJlbFNwZWNpZmljQ3NzfVxuICAgIH1cbiAgICBgO1xuXG4gICAgLy8gRmxhdCBleHBsaWNpdCBydWxlcyBzY29wZWQgdG8gdGV4dGFyZWEgb25seS5cbiAgICAvLyA6aGFzKHRleHRhcmVhKSBvbiB0aGUgaW5maXggZW5zdXJlcyBtaW4taGVpZ2h0L21heC1oZWlnaHQgZG8gTk9UIGFmZmVjdFxuICAgIC8vIHRleHQvbnVtZXJpYyBpbnB1dHMgdGhhdCBzaGFyZSB0aGUgc2FtZSAuY29tcG9uZW50LXRleHQtZmllbGQgY2xhc3MuXG4gICAgY29uc3QgdGV4dGFyZWFGbGF0Q3NzID0gYFxuICAgICR7a2V5fSAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQ6aGFzKHRleHRhcmVhKSAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICR7dGV4dGFyZWFIZWlnaHQgPyBgbWluLWhlaWdodDogJHt0ZXh0YXJlYUhlaWdodH0gIWltcG9ydGFudDtgIDogJyd9XG4gICAgfVxuICAgICR7a2V5fSAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXRleHQtZmllbGQgdGV4dGFyZWEge1xuICAgICAgJHtpbnB1dFNwZWNpZmljQ3NzfVxuICAgICAgJHt0ZXh0YXJlYUhlaWdodCA/IGBtaW4taGVpZ2h0OiAke3RleHRhcmVhSGVpZ2h0fSAhaW1wb3J0YW50O2AgOiAnJ31cbiAgICAgICR7dGV4dGFyZWFNYXhIZWlnaHQgJiYgdGV4dGFyZWFNYXhIZWlnaHQgIT09ICdub25lJyA/IGBtYXgtaGVpZ2h0OiAke3RleHRhcmVhTWF4SGVpZ2h0fSAhaW1wb3J0YW50OyBvdmVyZmxvdy15OiBhdXRvICFpbXBvcnRhbnQ7YCA6ICcnfVxuICAgICAgcmVzaXplOiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIGA7XG5cbiAgICByZXR1cm4gYCR7a2V5fSB7ICR7Y3NzfX0gJHt0ZXh0YXJlYUZsYXRDc3N9YDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3BlY2lmaWNDc3NGb3JQcm9ncmVzc0Jhcih2YWx1ZXM6IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhcnRDb2xvciA9IHZhbHVlc1snc3RhcnRDb2xvciddIHx8ICcjODg0OEVGJztcbiAgICBjb25zdCBlbmRDb2xvciA9IHZhbHVlc1snZW5kQ29sb3InXSB8fCAnIzg4NDhFRic7XG4gICAgY29uc3QgaGVpZ2h0ID0gdmFsdWVzWydoZWlnaHQnXSB8fCAnNHB4JztcbiAgICBjb25zdCBib3JkZXJSYWRpdXMgPSB2YWx1ZXNbJ2JvcmRlclJhZGl1cyddIHx8ICc3cHgnO1xuXG4gICAgcmV0dXJuIGBcbiAgICAgIC5jb21wb25lbnQtcHJvZ3Jlc3MtYmFyIHtcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCAke3N0YXJ0Q29sb3J9LCAke2VuZENvbG9yfSkgIWltcG9ydGFudDtcbiAgICAgICAgaGVpZ2h0OiAke2hlaWdodH0gIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJHtib3JkZXJSYWRpdXN9ICFpbXBvcnRhbnQ7XG4gICAgICB9XG4gICAgYDtcbiAgfVxuXG5cbiAgcHVibGljIHN0YXRpYyBnZXRTcGVjaWZpY0Nzc0ZvclRhYmxlSGVhZGVyKFxuICAgIHZhbHVlczogeyBbcHJvcGVydHk6IHN0cmluZ106IHN0cmluZyB9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdmFsdWVzWydiYWNrZ3JvdW5kLWNvbG9yJ10gfHwgJyNmZmZmZmYnO1xuICAgIGNvbnN0IHRleHRDb2xvciA9IHZhbHVlc1snY29sb3InXSB8fCAnIzAwMDAwMCc7XG4gICAgY29uc3QgYm9yZGVyID0gdmFsdWVzWydib3JkZXItd2lkdGgnXTtcbiAgICBjb25zdCBib3JkZXJDb2xvciA9IHZhbHVlc1snYm9yZGVyLWNvbG9yJ10gfHwgJyMwMDAwMDAnO1xuICAgIGNvbnN0IGJvcmRlckNvbGxhcHNlID0gdmFsdWVzWydib3JkZXItY29sbGFwc2UnXSB8fCAnY29sbGFwc2UnO1xuICAgIGNvbnN0IGJvcmRlclNwYWNpbmcgPSB2YWx1ZXNbJ2JvcmRlci1zcGFjaW5nJ10gfHwgJzAnO1xuICAgIGNvbnN0IHRleHRBbGlnbiA9IHZhbHVlc1sndGV4dC1hbGlnbiddIHx8ICdsZWZ0JztcbiAgICBjb25zdCB2ZXJ0aWNhbEFsaWduID0gdmFsdWVzWyd2ZXJ0aWNhbC1hbGlnbiddIHx8ICdtaWRkbGUnO1xuICAgIGNvbnN0IGZvbnRGYW1pbHkgPSB2YWx1ZXNbJ2ZvbnQtZmFtaWx5J10gfHwgJ0FyaWFsLCBzYW5zLXNlcmlmJztcbiAgICBjb25zdCBmb250U2l6ZSA9IHZhbHVlc1snZm9udC1zaXplJ10gfHwgJzE0cHgnO1xuICAgIGNvbnN0IGxldHRlclNwYWNpbmcgPSB2YWx1ZXNbJ2xldHRlci1zcGFjaW5nJ10gfHwgJ25vcm1hbCc7XG4gICAgY29uc3QgcGFkZGluZyA9IHZhbHVlc1sncGFkZGluZyddIHx8ICc4cHgnO1xuICAgIGNvbnN0IHdpZHRoID0gdmFsdWVzWyd3aWR0aCddIHx8ICdhdXRvJztcbiAgICBjb25zdCBoZWlnaHQgPSB2YWx1ZXNbJ2hlaWdodCddIHx8ICdhdXRvJztcblxuICAgIGNvbnN0IGNzcyA9IGBcbiAgICB0YWJsZSBcbiAgICAge1xuICAgICAgYm9yZGVyLWNvbGxhcHNlOiAke2JvcmRlckNvbGxhcHNlfSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXNwYWNpbmc6ICR7Ym9yZGVyU3BhY2luZ307ICAgXG4gICAgICBmb250LWZhbWlseTogJHtmb250RmFtaWx5fTtcbiAgICAgIGZvbnQtc2l6ZTogJHtmb250U2l6ZX07XG4gICAgfVxuICAgICAgdGFibGUgdGgge1xuICAgICAgaGVpZ2h0OiAke2hlaWdodH07XG4gICAgICB9XG4gICAgICB0YWJsZSB0ZHtoZWlnaHQ6ICR7aGVpZ2h0fTtcbiAgICAgIH1cbiAgICAudGFibGUtaGVhZCB0ciB0aHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7YmFja2dyb3VuZENvbG9yfSAhaW1wb3J0YW50O1xuICAgICAgd2lkdGg6ICR7d2lkdGh9ICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sbGFwc2U6ICR7Ym9yZGVyQ29sbGFwc2V9O1xuICAgICAgICBib3JkZXItc3BhY2luZzogJHtib3JkZXJTcGFjaW5nfTtcbiAgICAgICAgYm9yZGVyOiAke2JvcmRlcn0gc29saWQgJHtib3JkZXJDb2xvcn07IFxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogJHt2ZXJ0aWNhbEFsaWdufTtcbiAgICAgICAgZm9udC1mYW1pbHk6ICR7Zm9udEZhbWlseX07XG4gICAgICAgIGZvbnQtc2l6ZTogJHtmb250U2l6ZX07XG4gICAgICB9XG4gICAgLnRhYmxlLWhlYWQge1xuICAgICAgY29sb3I6ICR7dGV4dENvbG9yfTtcbiAgICAgIGJvcmRlcjogJHtib3JkZXJ9IHNvbGlkICR7Ym9yZGVyQ29sb3J9OyAgXG4gICAgICB0ZXh0LWFsaWduOiAke3RleHRBbGlnbn07ICAgICAgICAgICAgXG4gICAgICBsZXR0ZXItc3BhY2luZzogJHtsZXR0ZXJTcGFjaW5nfTtcbiAgICAgIHBhZGRpbmc6ICR7cGFkZGluZ307ICAgICAgXG4gICAgICBoZWlnaHQ6ICR7aGVpZ2h0fTtcbiAgICAgfVxuXG4gICAgYDtcbiAgICByZXR1cm4gY3NzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRTcGVjaWZpY0Nzc0ZvclRhYmxlRGV0YWlsKFxuICAgIHZhbHVlczogeyBbcHJvcGVydHk6IHN0cmluZ106IHN0cmluZyB9XG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gdmFsdWVzWydiYWNrZ3JvdW5kLWNvbG9yJ10gfHwgJyNmZmZmZmYnO1xuICAgIGNvbnN0IHRleHRDb2xvciA9IHZhbHVlc1snY29sb3InXSB8fCAnIzAwMDAwMCc7XG4gICAgY29uc3QgdGV4dEFsaWduID0gdmFsdWVzWyd0ZXh0LWFsaWduJ10gfHwgJ2xlZnQnO1xuICAgIGNvbnN0IHZlcnRpY2FsQWxpZ24gPSB2YWx1ZXNbJ3ZlcnRpY2FsQWxpZ24nXSB8fCAnbWlkZGxlJztcbiAgICBjb25zdCBsZXR0ZXJTcGFjaW5nID0gdmFsdWVzWydsZXR0ZXItc3BhY2luZyddIHx8ICdub3JtYWwnO1xuICAgIGNvbnN0IHBhZGRpbmcgPSB2YWx1ZXNbJ3BhZGRpbmcnXSB8fCAnOHB4JztcbiAgICBjb25zdCByb3dCb3JkZXIgPSB2YWx1ZXNbJ3Jvd2JvcmRlciddIHx8ICcxcHgnO1xuICAgIGNvbnN0IHJvd0JvcmRlckNvbG9yID0gdmFsdWVzWydyb3dib3JkZXItY29sb3InXSB8fCAnIzAwMDAwMCc7XG4gICAgY29uc3QgaG92ZXJCYWNrZ3JvdW5kQ29sb3IgPSB2YWx1ZXNbJ2hvdmVyLWJhY2tncm91bmQtY29sb3InXSB8fCAnI2YwZjBmMCc7XG5cbiAgICBjb25zdCBjc3MgPSBgICAgIFxuXG4gICAgICAudGFibGUtZGV0YWlse1xuICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7YmFja2dyb3VuZENvbG9yfVxuICAgICAgfVxuICAgICAgICAudGFibGUtZGV0YWlsIC5uZy1zdGFyLWluc2VydGVkIHtcbiAgICBib3JkZXItdG9wOiAke3Jvd0JvcmRlcn0gc29saWQgJHtyb3dCb3JkZXJDb2xvcn0gIWltcG9ydGFudDtcbiAgICBib3JkZXItYm90dG9tOiAke3Jvd0JvcmRlcn0gc29saWQgJHtyb3dCb3JkZXJDb2xvcn0gIWltcG9ydGFudDsgICAgXG4gICAgY29sb3I6ICR7dGV4dENvbG9yfSAhaW1wb3J0YW50O1xuICAgIHRleHQtYWxpZ246ICR7dGV4dEFsaWdufTtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogJHt2ZXJ0aWNhbEFsaWdufTtcbiAgICBsZXR0ZXItc3BhY2luZzogJHtsZXR0ZXJTcGFjaW5nfTsgICAgXG4gIH1cbiAgXG5cbiAgLnRhYmxlLWRldGFpbCAubmctc3Rhci1pbnNlcnRlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHtob3ZlckJhY2tncm91bmRDb2xvcn0gIWltcG9ydGFudDtcbiAgICBcbiAgfVxuXG4gIC50YWJsZS1kZXRhaWwgdGQge1xuICAgIHBhZGRpbmc6ICR7cGFkZGluZ30gIWltcG9ydGFudDtcbiAgfVxuICAgICBcbiAgICBgO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3BlY2lmaWNDc3NGb3JDaGVja0JveChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBjc3NSdWxlczogQ3NzUnVsZXNcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgbGFiZWxTcGVjaWZpY0NzcyA9ICcnO1xuICAgIGNvbnN0IGZvbnRTdHlsZUZvckxhYmVsVGV4dCA9IGNzc1J1bGVzWycuY29tcG9uZW50LWNoZWNrYm94LWxhYmVsJ107XG4gICAgaWYgKGZvbnRTdHlsZUZvckxhYmVsVGV4dCkge1xuICAgICAgbGFiZWxTcGVjaWZpY0NzcyA9IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyhmb250U3R5bGVGb3JMYWJlbFRleHQpO1xuICAgIH1cblxuICAgIHZhciBjc3MgPSBgXG4gICAgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyLm1kYy1jaGVja2JveC1maWVsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAke3ZhbHVlc1snbWFyZ2luLXRvcCddfTtcbiAgICAgIG1hcmdpbi1yaWdodDogJHt2YWx1ZXNbJ21hcmdpbi1yaWdodCddfTtcbiAgICAgIG1hcmdpbi1ib3R0b206ICR7dmFsdWVzWydtYXJnaW4tYm90dG9tJ119O1xuICAgICAgbWFyZ2luLWxlZnQ6ICR7dmFsdWVzWydtYXJnaW4tbGVmdCddfTtcbiAgICAgIC5tZGMtZm9ybS1maWVsZCA+IGxhYmVsIHtcbiAgICAgICAgJHtsYWJlbFNwZWNpZmljQ3NzfTtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgICBwYWRkaW5nLXRvcDogMnB4O1xuICAgICAgfTtcbiAgICAgIC5tZGMtY2hlY2tib3gge1xuICAgICAgICB3aWR0aDogY2FsYygxOHB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgIGhlaWdodDogY2FsYygxOHB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgIGZsZXg6IDAgMCBjYWxjKDE4cHggKyAoMiAqICR7dmFsdWVzWydib3JkZXItd2lkdGgnXX0pKTtcbiAgICAgIH1cbiAgICAgIC5tZGMtY2hlY2tib3ggLm1kYy1jaGVja2JveF9fbmF0aXZlLWNvbnRyb2wge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuICAgICAgLm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7dmFsdWVzWydiYWNrZ3JvdW5kLWNvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlcjogJHt2YWx1ZXNbJ2JvcmRlci13aWR0aCddfSBzb2xpZCAke3ZhbHVlc1snYm9yZGVyLWNvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICR7dmFsdWVzWydib3JkZXItcmFkaXVzJ119O1xuICAgICAgICB3aWR0aDogY2FsYygxOXB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgIGhlaWdodDogY2FsYygxOXB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICB9O1xuICAgIH1cbiAgICAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOmNoZWNrZWR+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCB7XG4gICAgICBib3JkZXI6ICR7dmFsdWVzWydib3JkZXItd2lkdGgnXX0gc29saWQgJHt2YWx1ZXNbJ2JvcmRlci1jb2xvciddfSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubWRjLWNoZWNrYm94X19jaGVja21hcmstcGF0aCB7XG4gICAgICBjb2xvcjogJHt2YWx1ZXNbJ2NvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgfWA7XG4gICAgcmV0dXJuIGAke2tleX0geyAke2Nzc30gfWA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRTcGVjaWZpY0Nzc0ZvclN0ZXBMYWJlbChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZXM6IHsgW3Byb3BlcnR5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBjc3NSdWxlczogQ3NzUnVsZXNcbiAgKSB7XG4gICAgY29uc3QgbGFiZWxTcGVjaWZpY0NzcyA9IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyh2YWx1ZXMpO1xuXG4gICAgLy8gTWFwIEhlYWRpbmcgMSB0byBzdGVwIGxhYmVscyBpbiBzdGVwcGVyXG4gICAgY29uc3QgaGVhZGluZzFTdHlsZSA9IGNzc1J1bGVzWycuZm9udC1oZWFkaW5nLTEnXTtcbiAgICBjb25zdCBzdGVwTGFiZWxDc3MgPSBoZWFkaW5nMVN0eWxlXG4gICAgICA/IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyhoZWFkaW5nMVN0eWxlKVxuICAgICAgOiAnJztcblxuICAgIC8vIE1hcCBIZWFkaW5nIDIgdG8gc2VjdGlvbiB0aXRsZXNcbiAgICBjb25zdCBoZWFkaW5nMlN0eWxlID0gY3NzUnVsZXNbJy5mb250LWhlYWRpbmctMiddO1xuICAgIGNvbnN0IHNlY3Rpb25UaXRsZUNzcyA9IGhlYWRpbmcyU3R5bGVcbiAgICAgID8gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKGhlYWRpbmcyU3R5bGUpXG4gICAgICA6ICcnO1xuXG4gICAgLy8gTWFwIEhlYWRpbmcgMyB0byBzdGVwIGRlc2NyaXB0aW9uc1xuICAgIGNvbnN0IGhlYWRpbmczU3R5bGUgPSBjc3NSdWxlc1snLmZvbnQtaGVhZGluZy0zJ107XG4gICAgY29uc3Qgc3RlcERlc2NyaXB0aW9uQ3NzID0gaGVhZGluZzNTdHlsZVxuICAgICAgPyB0aGlzLnN0eWxlT2JqZWN0VG9TdHJpbmcoaGVhZGluZzNTdHlsZSlcbiAgICAgIDogJyc7XG5cbiAgICByZXR1cm4gYCBcbiAgICAgIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLXdyYXBwZXIge1xuICAgICAgICAubWF0LXN0ZXAtdGV4dC1sYWJlbCB7XG4gICAgICAgICAgJHtzdGVwTGFiZWxDc3N9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLm1hdC1zdGVwLWxhYmVsIHtcbiAgICAgICAgJHtzdGVwTGFiZWxDc3N9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC5tYXQtc3RlcC1sYWJlbC1zZWxlY3RlZCB7XG4gICAgICAgICR7c3RlcExhYmVsQ3NzfVxuICAgICAgfVxuICAgICAgXG4gICAgICAuZm9ybS1zZWN0aW9uLXRpdGxlIGgyLFxuICAgICAgLnNlcGFyYXRvciBoMiB7XG4gICAgICAgICR7c2VjdGlvblRpdGxlQ3NzfVxuICAgICAgfVxuICAgICAgXG4gICAgICAuc3RlcC1kZXNjcmlwdGlvbixcbiAgICAgIC5tYXQtc3RlcC1zdWItbGFiZWwge1xuICAgICAgICAke3N0ZXBEZXNjcmlwdGlvbkNzc31cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLm1hdC1zdGVwcGVyLWhvcml6b250YWwgLm1hdC1zdGVwLWxhYmVsLFxuICAgICAgLm1hdC1zdGVwcGVyLXZlcnRpY2FsIC5tYXQtc3RlcC1sYWJlbCB7XG4gICAgICAgICR7c3RlcExhYmVsQ3NzfVxuICAgICAgfVxuICAgICAgXG4gICAgICAuY29tcG9uZW50LXRleHQtZmllbGQgbWF0LWxhYmVsLFxuICAgICAgLmNvbXBvbmVudC1jaGVja2JveCBtYXQtbGFiZWwsXG4gICAgICAuY29tcG9uZW50LXJhZGlvIG1hdC1sYWJlbCxcbiAgICAgIC5jb21wb25lbnQtZGF0ZSBtYXQtbGFiZWwsXG4gICAgICAuY29tcG9uZW50LWRpY3Rpb25hcnkgbWF0LWxhYmVsIHtcbiAgICAgICAgJHtjc3NSdWxlc1snLmZvbnQtbGFiZWwnXVxuICAgICAgICA/IHRoaXMuc3R5bGVPYmplY3RUb1N0cmluZyhjc3NSdWxlc1snLmZvbnQtbGFiZWwnXSlcbiAgICAgICAgOiAnJ1xuICAgICAgfVxuICAgICAgfVxuICAgIGA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldFNwZWNpZmljQ3NzRm9yUmFkaW8oXG4gICAgdmFsdWVzOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgY3NzUnVsZXM6IENzc1J1bGVzXG4gICkge1xuICAgIGxldCBsYWJlbFNwZWNpZmljQ3NzID0gJyc7XG4gICAgY29uc3QgZm9udFN0eWxlRm9yTGFiZWxUZXh0ID0gY3NzUnVsZXNbJy5jb21wb25lbnQtcmFkaW8tbGFiZWwnXTtcbiAgICBpZiAoZm9udFN0eWxlRm9yTGFiZWxUZXh0KSB7XG4gICAgICBsYWJlbFNwZWNpZmljQ3NzID0gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKGZvbnRTdHlsZUZvckxhYmVsVGV4dCk7XG4gICAgfVxuXG4gICAgdmFyIGNzcyA9IGBcbiAgICAubWF0LW1kYy10ZXh0LWZpZWxkLXdyYXBwZXIubWRjLXJhZGlvYm94LWZpZWxkIHtcbiAgICAgIG1hcmdpbi10b3A6ICR7dmFsdWVzWydtYXJnaW4tdG9wJ119O1xuICAgICAgbWFyZ2luLXJpZ2h0OiAke3ZhbHVlc1snbWFyZ2luLXJpZ2h0J119O1xuICAgICAgbWFyZ2luLWJvdHRvbTogJHt2YWx1ZXNbJ21hcmdpbi1ib3R0b20nXX07XG4gICAgICBtYXJnaW4tbGVmdDogJHt2YWx1ZXNbJ21hcmdpbi1sZWZ0J119O1xuICAgICAgbGFiZWwge1xuICAgICAgICAke2xhYmVsU3BlY2lmaWNDc3N9O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIHAge1xuICAgICAgICAgIG1hcmdpbjogMCAwIDEwcHg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC5tYXQtbWRjLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAgIC5tZGMtcmFkaW9fX25hdGl2ZS1jb250cm9sIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIH1cbiAgICAgICAgLm1kYy1yYWRpbyB7XG4gICAgICAgICAgd2lkdGg6IGNhbGMoMjBweCArICgyICogJHt2YWx1ZXNbJ2JvcmRlci13aWR0aCddfSkpO1xuICAgICAgICAgIGhlaWdodDogY2FsYygyMHB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgICAgLm1kYy1yYWRpb19fYmFja2dyb3VuZCB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3ZhbHVlc1snYmFja2dyb3VuZC1jb2xvciddfSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYm9yZGVyOiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119IHNvbGlkICR7dmFsdWVzWydib3JkZXItY29sb3InXX0gIWltcG9ydGFudDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgICAgICAgIHdpZHRoOiBjYWxjKDIwcHggKyAoMiAqICR7dmFsdWVzWydib3JkZXItd2lkdGgnXX0pKTtcbiAgICAgICAgICAgIGhlaWdodDogY2FsYygyMHB4ICsgKDIgKiAke3ZhbHVlc1snYm9yZGVyLXdpZHRoJ119KSk7XG4gICAgICAgICAgICAubWRjLXJhZGlvX19vdXRlci1jaXJjbGUge1xuICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICR7dmFsdWVzWydiYWNrZ3JvdW5kLWNvbG9yJ119ICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAubWRjLXJhZGlvX19pbm5lci1jaXJjbGUge1xuICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICR7dmFsdWVzWydjb2xvciddfSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBgO1xuXG4gICAgcmV0dXJuIGNzcztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3BlY2lmaWNDc3NGb3JEYXRhKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlczogeyBbcHJvcGVydHk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIGNzc1J1bGVzOiBDc3NSdWxlc1xuICApIHtcbiAgICBsZXQgaW5wdXRTcGVjaWZpY0NzcyA9ICcnO1xuICAgIGNvbnN0IGZvbnRTdHlsZVNvdXJjZSA9IGNzc1J1bGVzWycuY29tcG9uZW50LWRhdGUtdmFsdWUnXSB8fCBjc3NSdWxlc1snLmNvbXBvbmVudC1kYXRhLXZhbHVlJ10gfHwgY3NzUnVsZXNbJy5mb250LWxpc3QnXTtcbiAgICBpZiAoZm9udFN0eWxlU291cmNlKSB7XG4gICAgICBjb25zdCBmb250U3R5bGVGb3JJbnB1dFRleHQgPSB7IC4uLmZvbnRTdHlsZVNvdXJjZSB9O1xuICAgICAgLy90cmFuc2ZlciBwcm9wZXJ0eSBmcm9tIGNvbXBvbmVudCB0byBpbnB1dFxuICAgICAgaWYgKHZhbHVlc1sndGV4dC1hbGlnbiddKSB7XG4gICAgICAgIGZvbnRTdHlsZUZvcklucHV0VGV4dFsndGV4dC1hbGlnbiddID0gdmFsdWVzWyd0ZXh0LWFsaWduJ107XG4gICAgICB9XG4gICAgICBpbnB1dFNwZWNpZmljQ3NzID0gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKHsgLi4uZm9udFN0eWxlRm9ySW5wdXRUZXh0IH0pO1xuICAgIH1cblxuICAgIGxldCBsYWJlbFNwZWNpZmljQ3NzID0gJyc7XG4gICAgY29uc3QgbGFiZWxTb3VyY2UgPSBjc3NSdWxlc1snLmNvbXBvbmVudC1kYXRhLWxhYmVsJ107XG4gICAgaWYgKGxhYmVsU291cmNlKSB7XG4gICAgICBsYWJlbFNwZWNpZmljQ3NzID0gdGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKHsgLi4ubGFiZWxTb3VyY2UgfSk7XG4gICAgfVxuICAgIHJldHVybiBgICR7a2V5fSB7IC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlci5tZGMtdGV4dC1maWVsZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5zdHlsZU9iamVjdFRvU3RyaW5nKHsgLi4udmFsdWVzIH0pfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXN0eWxlOnNvbGlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2lucHV0U3BlY2lmaWNDc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAubWF0LW1kYy1mb3JtLWZpZWxkLWluZml4IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXQtbWRjLWZvcm0tZmllbGQtaW5wdXQtY29udHJvbDo6cGxhY2Vob2xkZXJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGFiZWxTcGVjaWZpY0Nzc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSU5URVJOQUxfS0VZUyA9IFsndGV4dGFyZWEtaGVpZ2h0JywgJ3RleHRhcmVhLW1heC1oZWlnaHQnLCAnY29tcG9uZW50LW1hcmdpbi10b3AnLCAnY29tcG9uZW50LW1hcmdpbi1ib3R0b20nXTtcblxuICBwdWJsaWMgc3RhdGljIHN0eWxlT2JqZWN0VG9TdHJpbmcoXG4gICAgdmFsdWVzOiB7IFtwcm9wZXJ0eTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgaW1wb3J0YW50OiBib29sZWFuID0gZmFsc2VcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBvdXRwdXQgPSB7IC4uLnZhbHVlcyB9O1xuICAgIC8vIFJlbW92ZSBpbnRlcm5hbCBrZXlzIHRoYXQgYXJlIG5vdCB2YWxpZCBDU1MgcHJvcGVydGllc1xuICAgIHRoaXMuSU5URVJOQUxfS0VZUy5mb3JFYWNoKGsgPT4gZGVsZXRlIG91dHB1dFtrXSk7XG5cbiAgICBpZiAoIW91dHB1dFsnd2lkdGgnXSkge1xuICAgICAgb3V0cHV0Wyd3aWR0aCddID1cbiAgICAgICAgJ2NhbGMoMTAwJScgK1xuICAgICAgICAoJ21hcmdpbi1sZWZ0JyBpbiBvdXRwdXQgPyBgIC0gJHtvdXRwdXRbJ21hcmdpbi1sZWZ0J119YCA6ICcnKSArXG4gICAgICAgICgnbWFyZ2luLXJpZ2h0JyBpbiBvdXRwdXQgPyBgIC0gJHtvdXRwdXRbJ21hcmdpbi1yaWdodCddfWAgOiAnJykgK1xuICAgICAgICAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG91dHB1dClcbiAgICAgIC5tYXAoXG4gICAgICAgIChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7dmFsdWV9JHtpbXBvcnRhbnQgPyAnICFpbXBvcnRhbnQnIDogJyd9YFxuICAgICAgKVxuICAgICAgLmpvaW4oJzsgJyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -6,7 +6,11 @@ import * as i2 from "@ngx-formly/core";
|
|
|
6
6
|
export class CustomSectionComponent extends FieldType {
|
|
7
7
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomSectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
8
8
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CustomSectionComponent, selector: "formly-custom-section", usesInheritance: true, ngImport: i0, template: `
|
|
9
|
-
<div
|
|
9
|
+
<div
|
|
10
|
+
class="custom-section"
|
|
11
|
+
[style.paddingTop]="props['sectionMarginTop']"
|
|
12
|
+
[style.paddingBottom]="props['sectionMarginBottom']"
|
|
13
|
+
>
|
|
10
14
|
<ng-container *ngFor="let field of field.fieldGroup">
|
|
11
15
|
<formly-field
|
|
12
16
|
[field]="field"
|
|
@@ -19,7 +23,11 @@ export class CustomSectionComponent extends FieldType {
|
|
|
19
23
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomSectionComponent, decorators: [{
|
|
20
24
|
type: Component,
|
|
21
25
|
args: [{ selector: 'formly-custom-section', template: `
|
|
22
|
-
<div
|
|
26
|
+
<div
|
|
27
|
+
class="custom-section"
|
|
28
|
+
[style.paddingTop]="props['sectionMarginTop']"
|
|
29
|
+
[style.paddingBottom]="props['sectionMarginBottom']"
|
|
30
|
+
>
|
|
23
31
|
<ng-container *ngFor="let field of field.fieldGroup">
|
|
24
32
|
<formly-field
|
|
25
33
|
[field]="field"
|
|
@@ -29,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
29
37
|
</div>
|
|
30
38
|
`, styles: [".custom-section{display:grid;gap:5px;margin-bottom:5px;grid-template-columns:repeat(12,1fr)}.full-width{grid-column:span 12}.half-width{grid-column:span 6}.quarter-width{grid-column:span 3}\n"] }]
|
|
31
39
|
}] });
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlY3Rpb24tc2VwYXJhdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvZm9ybWx5L2N1c3RvbS1zZWN0aW9uLXNlcGFyYXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFzQzdDLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxTQUFTOytHQUF4QyxzQkFBc0I7bUdBQXRCLHNCQUFzQixvRkFsQ3ZCOzs7Ozs7Ozs7Ozs7O0dBYVQ7OzRGQXFCVSxzQkFBc0I7a0JBcENsQyxTQUFTOytCQUNFLHVCQUF1QixZQUN2Qjs7Ozs7Ozs7Ozs7OztHQWFUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybWx5LWN1c3RvbS1zZWN0aW9uJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImN1c3RvbS1zZWN0aW9uXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nVG9wXT1cInByb3BzWydzZWN0aW9uTWFyZ2luVG9wJ11cIlxuICAgICAgW3N0eWxlLnBhZGRpbmdCb3R0b21dPVwicHJvcHNbJ3NlY3Rpb25NYXJnaW5Cb3R0b20nXVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGQuZmllbGRHcm91cFwiPlxuICAgICAgICA8Zm9ybWx5LWZpZWxkXG4gICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJmaWVsZC5jbGFzc05hbWVcIlxuICAgICAgICA+PC9mb3JtbHktZmllbGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLmN1c3RvbS1zZWN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiA1cHg7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDVweDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTIsIDFmcik7XG4gICAgICB9XG4gICAgICAuZnVsbC13aWR0aCB7XG4gICAgICAgIGdyaWQtY29sdW1uOiBzcGFuIDEyO1xuICAgICAgfVxuICAgICAgLmhhbGYtd2lkdGgge1xuICAgICAgICBncmlkLWNvbHVtbjogc3BhbiA2O1xuICAgICAgfVxuICAgICAgLnF1YXJ0ZXItd2lkdGgge1xuICAgICAgICBncmlkLWNvbHVtbjogc3BhbiAzO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbVNlY3Rpb25Db21wb25lbnQgZXh0ZW5kcyBGaWVsZFR5cGUgeyB9XG4iXX0=
|
|
@@ -3,34 +3,57 @@ import { FieldType } from '@ngx-formly/core';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/common";
|
|
5
5
|
export class FormSectionSeparatorComponent extends FieldType {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.heading2Style = {};
|
|
9
|
+
this.separatorStyle = {};
|
|
10
|
+
}
|
|
6
11
|
ngOnInit() {
|
|
7
12
|
if (this.props['design']) {
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
if (
|
|
11
|
-
this.
|
|
13
|
+
// Use the corrected CSS class name for Heading 2
|
|
14
|
+
const heading2Design = this.props['design']['.font-heading-2'];
|
|
15
|
+
if (heading2Design) {
|
|
16
|
+
this.heading2Style = heading2Design;
|
|
17
|
+
}
|
|
18
|
+
// Apply separator section styles
|
|
19
|
+
const separatorDesign = this.props['design']['.separator-section'];
|
|
20
|
+
if (separatorDesign) {
|
|
21
|
+
this.separatorStyle = {
|
|
22
|
+
...separatorDesign,
|
|
23
|
+
display: separatorDesign.height && separatorDesign.height !== '0px'
|
|
24
|
+
? 'block'
|
|
25
|
+
: 'none',
|
|
26
|
+
};
|
|
12
27
|
}
|
|
13
28
|
}
|
|
14
29
|
}
|
|
15
30
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormSectionSeparatorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
16
31
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FormSectionSeparatorComponent, selector: "form-section-separator", usesInheritance: true, ngImport: i0, template: `
|
|
17
|
-
<div class="separator" style="
|
|
32
|
+
<div class="separator form-section-title" [style.paddingTop]="props['sectionMarginTop'] || '2%'">
|
|
18
33
|
<h2 *ngIf="to && to['title']" [ngStyle]="heading2Style">
|
|
19
34
|
{{ to['title'] }}
|
|
20
35
|
</h2>
|
|
21
|
-
<hr
|
|
36
|
+
<hr
|
|
37
|
+
*ngIf="to && to['showSeparator']"
|
|
38
|
+
[ngStyle]="separatorStyle"
|
|
39
|
+
class="section-separator"
|
|
40
|
+
/>
|
|
22
41
|
</div>
|
|
23
|
-
`, isInline: true, styles: [".separator{
|
|
42
|
+
`, isInline: true, styles: [".separator{padding-bottom:2%}.section-separator{border:none;margin:10px 0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
|
|
24
43
|
}
|
|
25
44
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormSectionSeparatorComponent, decorators: [{
|
|
26
45
|
type: Component,
|
|
27
46
|
args: [{ selector: 'form-section-separator', template: `
|
|
28
|
-
<div class="separator" style="
|
|
47
|
+
<div class="separator form-section-title" [style.paddingTop]="props['sectionMarginTop'] || '2%'">
|
|
29
48
|
<h2 *ngIf="to && to['title']" [ngStyle]="heading2Style">
|
|
30
49
|
{{ to['title'] }}
|
|
31
50
|
</h2>
|
|
32
|
-
<hr
|
|
51
|
+
<hr
|
|
52
|
+
*ngIf="to && to['showSeparator']"
|
|
53
|
+
[ngStyle]="separatorStyle"
|
|
54
|
+
class="section-separator"
|
|
55
|
+
/>
|
|
33
56
|
</div>
|
|
34
|
-
`, styles: [".separator{
|
|
57
|
+
`, styles: [".separator{padding-bottom:2%}.section-separator{border:none;margin:10px 0}\n"] }]
|
|
35
58
|
}] });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zZWN0aW9uLXNlcGFyYXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL2Zvcm1seS9mb3JtLXNlY3Rpb24tc2VwYXJhdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBNEI3QyxNQUFNLE9BQU8sNkJBQThCLFNBQVEsU0FBUztJQTFCNUQ7O1FBMkJFLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLG1CQUFjLEdBQVEsRUFBRSxDQUFDO0tBdUIxQjtJQXJCQyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDekIsaURBQWlEO1lBQ2pELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUMvRCxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsYUFBYSxHQUFHLGNBQWMsQ0FBQztZQUN0QyxDQUFDO1lBRUQsaUNBQWlDO1lBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUNuRSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHO29CQUNwQixHQUFHLGVBQWU7b0JBQ2xCLE9BQU8sRUFDTCxlQUFlLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxNQUFNLEtBQUssS0FBSzt3QkFDeEQsQ0FBQyxDQUFDLE9BQU87d0JBQ1QsQ0FBQyxDQUFDLE1BQU07aUJBQ2IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0F4QlUsNkJBQTZCO21HQUE3Qiw2QkFBNkIscUZBeEI5Qjs7Ozs7Ozs7Ozs7R0FXVDs7NEZBYVUsNkJBQTZCO2tCQTFCekMsU0FBUzsrQkFDRSx3QkFBd0IsWUFDeEI7Ozs7Ozs7Ozs7O0dBV1QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zvcm0tc2VjdGlvbi1zZXBhcmF0b3InLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3IgZm9ybS1zZWN0aW9uLXRpdGxlXCIgW3N0eWxlLnBhZGRpbmdUb3BdPVwicHJvcHNbJ3NlY3Rpb25NYXJnaW5Ub3AnXSB8fCAnMiUnXCI+XG4gICAgICA8aDIgKm5nSWY9XCJ0byAmJiB0b1sndGl0bGUnXVwiIFtuZ1N0eWxlXT1cImhlYWRpbmcyU3R5bGVcIj5cbiAgICAgICAge3sgdG9bJ3RpdGxlJ10gfX1cbiAgICAgIDwvaDI+XG4gICAgICA8aHJcbiAgICAgICAgKm5nSWY9XCJ0byAmJiB0b1snc2hvd1NlcGFyYXRvciddXCJcbiAgICAgICAgW25nU3R5bGVdPVwic2VwYXJhdG9yU3R5bGVcIlxuICAgICAgICBjbGFzcz1cInNlY3Rpb24tc2VwYXJhdG9yXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5zZXBhcmF0b3Ige1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMiU7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1zZXBhcmF0b3Ige1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIG1hcmdpbjogMTBweCAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1TZWN0aW9uU2VwYXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgaGVhZGluZzJTdHlsZTogYW55ID0ge307XG4gIHNlcGFyYXRvclN0eWxlOiBhbnkgPSB7fTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wc1snZGVzaWduJ10pIHtcbiAgICAgIC8vIFVzZSB0aGUgY29ycmVjdGVkIENTUyBjbGFzcyBuYW1lIGZvciBIZWFkaW5nIDJcbiAgICAgIGNvbnN0IGhlYWRpbmcyRGVzaWduID0gdGhpcy5wcm9wc1snZGVzaWduJ11bJy5mb250LWhlYWRpbmctMiddO1xuICAgICAgaWYgKGhlYWRpbmcyRGVzaWduKSB7XG4gICAgICAgIHRoaXMuaGVhZGluZzJTdHlsZSA9IGhlYWRpbmcyRGVzaWduO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBzZXBhcmF0b3Igc2VjdGlvbiBzdHlsZXNcbiAgICAgIGNvbnN0IHNlcGFyYXRvckRlc2lnbiA9IHRoaXMucHJvcHNbJ2Rlc2lnbiddWycuc2VwYXJhdG9yLXNlY3Rpb24nXTtcbiAgICAgIGlmIChzZXBhcmF0b3JEZXNpZ24pIHtcbiAgICAgICAgdGhpcy5zZXBhcmF0b3JTdHlsZSA9IHtcbiAgICAgICAgICAuLi5zZXBhcmF0b3JEZXNpZ24sXG4gICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgIHNlcGFyYXRvckRlc2lnbi5oZWlnaHQgJiYgc2VwYXJhdG9yRGVzaWduLmhlaWdodCAhPT0gJzBweCdcbiAgICAgICAgICAgICAgPyAnYmxvY2snXG4gICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|