@alfresco/adf-process-services-cloud 6.8.0-8451615813 → 6.8.0-8452757747
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/esm2020/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +26 -16
- package/fesm2015/adf-process-services-cloud.mjs +26 -16
- package/fesm2015/adf-process-services-cloud.mjs.map +1 -1
- package/fesm2020/adf-process-services-cloud.mjs +25 -15
- package/fesm2020/adf-process-services-cloud.mjs.map +1 -1
- package/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.d.ts +2 -0
- package/package.json +4 -4
package/esm2020/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs
CHANGED
|
@@ -49,6 +49,7 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
49
49
|
this.newVersionUploaderService = newVersionUploaderService;
|
|
50
50
|
this.typeId = 'AttachFileCloudWidgetComponent';
|
|
51
51
|
this.rootNodeId = ALIAS_USER_FOLDER;
|
|
52
|
+
this.previewState = false;
|
|
52
53
|
this.displayedColumns = ['icon', 'fileName', 'action'];
|
|
53
54
|
}
|
|
54
55
|
get nodesApi() {
|
|
@@ -63,6 +64,7 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
63
64
|
}
|
|
64
65
|
this.field.params.displayableCMProperties = this.field.params.displayableCMProperties ?? [];
|
|
65
66
|
this.displayedColumns.splice(2, 0, ...(this.field.params.displayableCMProperties?.map(property => property?.name) || []));
|
|
67
|
+
this.setPreviewState();
|
|
66
68
|
}
|
|
67
69
|
isPathStaticType() {
|
|
68
70
|
return this.field.params?.fileSource?.destinationFolderPath?.type === DestinationFolderPathType.STATIC_TYPE;
|
|
@@ -88,21 +90,26 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
88
90
|
return path;
|
|
89
91
|
}
|
|
90
92
|
async openSelectDialog() {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
93
|
+
if (this.previewState) {
|
|
94
|
+
this.notificationService.showWarning('FORM.PREVIEW.ATTACH_FILE_WIDGET.ON_ATTACH_FILE_CLICK');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const selectedMode = this.field.params.multiple ? 'multiple' : 'single';
|
|
98
|
+
const nodeId = await this.getDestinationFolderNodeId();
|
|
99
|
+
this.rootNodeId = nodeId ? nodeId : ALIAS_USER_FOLDER;
|
|
100
|
+
this.contentNodeSelectorPanelService.customModels = this.field.params.customModels;
|
|
101
|
+
this.contentNodeSelectorService
|
|
102
|
+
.openUploadFileDialog(this.rootNodeId, selectedMode, this.isAlfrescoAndLocal(), true)
|
|
103
|
+
.subscribe((selections) => {
|
|
104
|
+
selections.forEach(node => (node['isExternal'] = true));
|
|
105
|
+
const selectionWithoutDuplication = this.removeExistingSelection(selections);
|
|
106
|
+
const hadFilesAttached = this.field.value?.length > 0;
|
|
107
|
+
this.fixIncompatibilityFromPreviousAndNewForm(selectionWithoutDuplication);
|
|
108
|
+
if (!hadFilesAttached) {
|
|
109
|
+
this.contentModelFormFileHandler(this.field.value.length > 0 ? this.field.value[0] : null);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
106
113
|
}
|
|
107
114
|
async getDestinationFolderNodeId() {
|
|
108
115
|
let rootNodeId;
|
|
@@ -218,6 +225,9 @@ export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
218
225
|
ngOnDestroy() {
|
|
219
226
|
this.contentNodeSelectorPanelService.customModels = [];
|
|
220
227
|
}
|
|
228
|
+
setPreviewState() {
|
|
229
|
+
this.previewState = this.formService.getPreviewState();
|
|
230
|
+
}
|
|
221
231
|
}
|
|
222
232
|
AttachFileCloudWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AttachFileCloudWidgetComponent, deps: [{ token: i1.FormService }, { token: i1.LogService }, { token: i1.ThumbnailService }, { token: i2.ProcessCloudContentService }, { token: i1.NotificationService }, { token: i3.ContentCloudNodeSelectorService }, { token: i1.AppConfigService }, { token: i1.AlfrescoApiService }, { token: i4.ContentNodeSelectorPanelService }, { token: i4.NewVersionUploaderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
223
233
|
AttachFileCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: AttachFileCloudWidgetComponent, selector: "adf-cloud-attach-file-cloud-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n ></adf-cloud-file-properties-table>\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:32px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap;margin-left:8px}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-files-row .adf-file{margin-bottom:0}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "component", type: i9.FilePropertiesTableCloudComponent, selector: "adf-cloud-file-properties-table", inputs: ["uploadedFiles", "hasFile", "selectedNode", "field", "displayedColumns", "mimeTypeIcon"], outputs: ["rowClick", "attachFileClick", "downloadFile", "uploadNewFileVersion", "contentModelFileHandler", "removeAttachFile"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
@@ -235,4 +245,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
|
|
|
235
245
|
'(select)': 'event($event)'
|
|
236
246
|
}, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n ></adf-cloud-file-properties-table>\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:32px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap;margin-left:8px}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-files-row .adf-file{margin-bottom:0}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"] }]
|
|
237
247
|
}], ctorParameters: function () { return [{ type: i1.FormService }, { type: i1.LogService }, { type: i1.ThumbnailService }, { type: i2.ProcessCloudContentService }, { type: i1.NotificationService }, { type: i3.ContentCloudNodeSelectorService }, { type: i1.AppConfigService }, { type: i1.AlfrescoApiService }, { type: i4.ContentNodeSelectorPanelService }, { type: i4.NewVersionUploaderService }]; } });
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQ0gsV0FBVyxFQUNYLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBRW5CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLDRCQUE0QixFQUUvQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBUSxRQUFRLEVBQWdDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDeEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUE4Qix5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSw0QkFBNEIsRUFBZ0MseUJBQXlCLEVBQTRCLE1BQU0sZ0NBQWdD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SUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN0QixPQUFPLEtBQUssSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxVQUFVO1FBQ04sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLCtCQUErQixDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDM0QsQ0FBQzs7MkhBck5RLDhCQUE4QjsrR0FBOUIsOEJBQThCLDRXQzlEM0MsODNFQWdEQTsyRkRjYSw4QkFBOEI7a0JBakIxQyxTQUFTOytCQUNJLG9DQUFvQyxRQUd4Qzt3QkFDRixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsUUFBUSxFQUFFLGVBQWU7d0JBQ3pCLFVBQVUsRUFBRSxlQUFlO3dCQUMzQixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLFlBQVksRUFBRSxlQUFlO3dCQUM3QixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLFVBQVUsRUFBRSxlQUFlO3FCQUM5QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEZvcm1TZXJ2aWNlLFxuICAgIExvZ1NlcnZpY2UsXG4gICAgVGh1bWJuYWlsU2VydmljZSxcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIEZvcm1WYWx1ZXMsXG4gICAgQ29udGVudExpbmtNb2RlbCxcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIEFsZnJlc2NvQXBpU2VydmljZSxcbiAgICBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsLFxuICAgIERlc3RpbmF0aW9uRm9sZGVyUGF0aFxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgTm9kZSwgTm9kZXNBcGksIFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24gfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IENvbnRlbnRDbG91ZE5vZGVTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZW50LWNsb3VkLW5vZGUtc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtY2xvdWQtY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVwbG9hZENsb3VkV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQtY2xvdWQud2lkZ2V0JztcbmltcG9ydCB7IERlc3RpbmF0aW9uRm9sZGVyUGF0aE1vZGVsLCBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0tY2xvdWQtcmVwcmVzZW50YXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZSwgTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbiwgTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSwgTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZSwgVmVyc2lvbk1hbmFnZXJVcGxvYWREYXRhIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcblxuZXhwb3J0IGNvbnN0IFJFVFJJRVZFX01FVEFEQVRBX09QVElPTiA9ICdyZXRyaWV2ZU1ldGFkYXRhJztcbmV4cG9ydCBjb25zdCBBTElBU19ST09UX0ZPTERFUiA9ICctcm9vdC0nO1xuZXhwb3J0IGNvbnN0IEFMSUFTX1VTRVJfRk9MREVSID0gJy1teS0nO1xuZXhwb3J0IGNvbnN0IEFQUF9OQU1FID0gJy1hcHBuYW1lLSc7XG5leHBvcnQgY29uc3QgVkFMSURfQUxJQVMgPSBbIEFMSUFTX1JPT1RfRk9MREVSLCBBTElBU19VU0VSX0ZPTERFUiwgJy1zaGFyZWQtJyBdO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2F0dGFjaC1maWxlLWNsb3VkLXdpZGdldC5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhjbGljayknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoY2hhbmdlKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGlucHV0KSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhpbnZhbGlkKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhzZWxlY3QpJzogJ2V2ZW50KCRldmVudCknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaEZpbGVDbG91ZFdpZGdldENvbXBvbmVudCBleHRlbmRzIFVwbG9hZENsb3VkV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHR5cGVJZCA9ICdBdHRhY2hGaWxlQ2xvdWRXaWRnZXRDb21wb25lbnQnO1xuICAgIHJvb3ROb2RlSWQgPSBBTElBU19VU0VSX0ZPTERFUjtcbiAgICBzZWxlY3RlZE5vZGU6IE5vZGU7XG5cbiAgICBwcml2YXRlIF9ub2Rlc0FwaTogTm9kZXNBcGk7XG4gICAgZ2V0IG5vZGVzQXBpKCk6IE5vZGVzQXBpIHtcbiAgICAgICAgdGhpcy5fbm9kZXNBcGkgPSB0aGlzLl9ub2Rlc0FwaSA/PyBuZXcgTm9kZXNBcGkodGhpcy5hcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNBcGk7XG4gICAgfVxuICAgIGRpc3BsYXllZENvbHVtbnMgPSBbJ2ljb24nLCAnZmlsZU5hbWUnLCAnYWN0aW9uJ107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgICAgICBsb2dnZXI6IExvZ1NlcnZpY2UsXG4gICAgICAgIHRodW1ibmFpbHM6IFRodW1ibmFpbFNlcnZpY2UsXG4gICAgICAgIHByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlOiBQcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZSxcbiAgICAgICAgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50Tm9kZVNlbGVjdG9yU2VydmljZTogQ29udGVudENsb3VkTm9kZVNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFsZnJlc2NvQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlOiBDb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2U6IE5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoZm9ybVNlcnZpY2UsIHRodW1ibmFpbHMsIHByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlLCBub3RpZmljYXRpb25TZXJ2aWNlLCBsb2dnZXIpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICBpZiAodGhpcy5oYXNGaWxlICYmIHRoaXMuZmllbGQudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLmZpZWxkLnZhbHVlIHx8IHRoaXMuZmllbGQuZm9ybS52YWx1ZXNbdGhpcy5maWVsZC5pZF07XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRNb2RlbEZvcm1GaWxlSGFuZGxlcihmaWxlc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWVsZC5wYXJhbXMuZGlzcGxheWFibGVDTVByb3BlcnRpZXMgPSB0aGlzLmZpZWxkLnBhcmFtcy5kaXNwbGF5YWJsZUNNUHJvcGVydGllcyA/PyBbXTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnNwbGljZSgyLCAwLCAuLi4odGhpcy5maWVsZC5wYXJhbXMuZGlzcGxheWFibGVDTVByb3BlcnRpZXM/Lm1hcChwcm9wZXJ0eSA9PiBwcm9wZXJ0eT8ubmFtZSkgfHwgW10pKTtcbiAgICB9XG5cbiAgICBpc1BhdGhTdGF0aWNUeXBlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5wYXJhbXM/LmZpbGVTb3VyY2U/LmRlc3RpbmF0aW9uRm9sZGVyUGF0aD8udHlwZSA9PT0gRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5TVEFUSUNfVFlQRTtcbiAgICB9XG5cbiAgICBpc1VwbG9hZEJ1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaGFzRmlsZSB8fCB0aGlzLm11bHRpcGxlT3B0aW9uKSAmJiAhdGhpcy5maWVsZC5yZWFkT25seTtcbiAgICB9XG5cbiAgICBvblJlbW92ZUF0dGFjaEZpbGUoZmlsZTogRmlsZSB8IFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24gfCBOb2RlKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRmlsZShmaWxlKTtcbiAgICAgICAgaWYgKGZpbGVbJ2lkJ10gPT09IHRoaXMuc2VsZWN0ZWROb2RlPy5pZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuZmllbGQudmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuZmllbGQudmFsdWVbMF0gOiBudWxsKTtcbiAgICB9XG5cbiAgICBmZXRjaEFwcE5hbWVGcm9tQXBwQ29uZmlnKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0KCdhbGZyZXNjby1kZXBsb3llZC1hcHBzJylbMF0/Lm5hbWU7XG4gICAgfVxuXG4gICAgcmVwbGFjZUFwcE5hbWVBbGlhc1dpdGhWYWx1ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAocGF0aD8ubWF0Y2goQVBQX05BTUUpKSB7XG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lID0gdGhpcy5mZXRjaEFwcE5hbWVGcm9tQXBwQ29uZmlnKCk7XG4gICAgICAgICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKEFQUF9OQU1FLCBhcHBOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuU2VsZWN0RGlhbG9nKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZE1vZGUgPSB0aGlzLmZpZWxkLnBhcmFtcy5tdWx0aXBsZSA/ICdtdWx0aXBsZScgOiAnc2luZ2xlJztcbiAgICAgICAgY29uc3Qgbm9kZUlkID0gYXdhaXQgdGhpcy5nZXREZXN0aW5hdGlvbkZvbGRlck5vZGVJZCgpO1xuICAgICAgICB0aGlzLnJvb3ROb2RlSWQgPSBub2RlSWQgPyBub2RlSWQgOiBBTElBU19VU0VSX0ZPTERFUjtcbiAgICAgICAgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlLmN1c3RvbU1vZGVscyA9IHRoaXMuZmllbGQucGFyYW1zLmN1c3RvbU1vZGVscztcblxuICAgICAgICB0aGlzLmNvbnRlbnROb2RlU2VsZWN0b3JTZXJ2aWNlXG4gICAgICAgICAgICAub3BlblVwbG9hZEZpbGVEaWFsb2codGhpcy5yb290Tm9kZUlkLCBzZWxlY3RlZE1vZGUsIHRoaXMuaXNBbGZyZXNjb0FuZExvY2FsKCksIHRydWUpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzZWxlY3Rpb25zOiBOb2RlW10pID0+IHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25zLmZvckVhY2gobm9kZSA9PiAobm9kZVsnaXNFeHRlcm5hbCddID0gdHJ1ZSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbldpdGhvdXREdXBsaWNhdGlvbiA9IHRoaXMucmVtb3ZlRXhpc3RpbmdTZWxlY3Rpb24oc2VsZWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFkRmlsZXNBdHRhY2hlZCA9IHRoaXMuZmllbGQudmFsdWU/Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5maXhJbmNvbXBhdGliaWxpdHlGcm9tUHJldmlvdXNBbmROZXdGb3JtKHNlbGVjdGlvbldpdGhvdXREdXBsaWNhdGlvbik7XG4gICAgICAgICAgICAgICAgaWYoIWhhZEZpbGVzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIodGhpcy5maWVsZC52YWx1ZS5sZW5ndGggPiAwID8gdGhpcy5maWVsZC52YWx1ZVswXSA6IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RGVzdGluYXRpb25Gb2xkZXJOb2RlSWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IHJvb3ROb2RlSWQ6IHN0cmluZztcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuZmllbGQ/LnBhcmFtcz8uZmlsZVNvdXJjZT8uZGVzdGluYXRpb25Gb2xkZXJQYXRoPy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUuU1RBVElDX1RZUEU6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgodGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZS5kZXN0aW5hdGlvbkZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLlNUUklOR19UWVBFOlxuICAgICAgICAgICAgICAgIHJvb3ROb2RlSWQgPSBhd2FpdCB0aGlzLmdldE5vZGVJZEZyb21QYXRoKHRoaXMuZmllbGQucGFyYW1zLmZpbGVTb3VyY2UuZGVzdGluYXRpb25Gb2xkZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5GT0xERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByb290Tm9kZUlkID0gYXdhaXQgdGhpcy5nZXROb2RlSWRGcm9tRm9sZGVyVmFyaWFibGVWYWx1ZSh0aGlzLmZpZWxkLnBhcmFtcy5maWxlU291cmNlLmRlc3RpbmF0aW9uRm9sZGVyUGF0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJvb3ROb2RlSWQgPSBhd2FpdCB0aGlzLmdldE5vZGVJZEZyb21QYXRoKHsgdHlwZTogJycsIHZhbHVlOiBBTElBU19VU0VSX0ZPTERFUiB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb290Tm9kZUlkO1xuICAgIH1cblxuICAgYXN5bmMgZ2V0Tm9kZUlkRnJvbVBhdGgoZGVzdGluYXRpb25Gb2xkZXJQYXRoOiBEZXN0aW5hdGlvbkZvbGRlclBhdGgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgbm9kZUlkOiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUGF0aCA9ICB0aGlzLmdldEFsaWFzQW5kUmVsYXRpdmVQYXRoRnJvbURlc3RpbmF0aW9uRm9sZGVyUGF0aChkZXN0aW5hdGlvbkZvbGRlclBhdGgudmFsdWUpO1xuICAgICAgICBkZXN0aW5hdGlvblBhdGgucGF0aCA9IHRoaXMucmVwbGFjZUFwcE5hbWVBbGlhc1dpdGhWYWx1ZShkZXN0aW5hdGlvblBhdGgucGF0aCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBub2RlSWQgPSBhd2FpdCB0aGlzLmNvbnRlbnROb2RlU2VsZWN0b3JTZXJ2aWNlLmdldE5vZGVJZEZyb21QYXRoKGRlc3RpbmF0aW9uUGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGVJZDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXROb2RlSWRGcm9tRm9sZGVyVmFyaWFibGVWYWx1ZShkZXN0aW5hdGlvbkZvbGRlclBhdGg6IERlc3RpbmF0aW9uRm9sZGVyUGF0aCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBub2RlSWQ6IHN0cmluZztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVJZCA9IGF3YWl0IHRoaXMuY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2UuZ2V0Tm9kZUlkRnJvbUZvbGRlclZhcmlhYmxlVmFsdWUoZGVzdGluYXRpb25Gb2xkZXJQYXRoLnZhbHVlLCBBTElBU19VU0VSX0ZPTERFUik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGVJZDtcbiAgICB9XG5cbiAgICBnZXRBbGlhc0FuZFJlbGF0aXZlUGF0aEZyb21EZXN0aW5hdGlvbkZvbGRlclBhdGgoZGVzdGluYXRpb25Gb2xkZXJQYXRoOiBzdHJpbmcpOiBEZXN0aW5hdGlvbkZvbGRlclBhdGhNb2RlbCB7XG4gICAgICAgIGxldCBhbGlhczogc3RyaW5nOyBsZXQgcGF0aDogc3RyaW5nO1xuICAgICAgICBpZiAoZGVzdGluYXRpb25Gb2xkZXJQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydE9mUmVsYXRpdmVQYXRoSW5kZXggPSBkZXN0aW5hdGlvbkZvbGRlclBhdGguaW5kZXhPZignLycpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0T2ZSZWxhdGl2ZVBhdGhJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgYWxpYXMgPSBkZXN0aW5hdGlvbkZvbGRlclBhdGguc3Vic3RyaW5nKDAsIHN0YXJ0T2ZSZWxhdGl2ZVBhdGhJbmRleCk7XG4gICAgICAgICAgICAgICAgcGF0aCA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5zdWJzdHJpbmcoc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4LCBkZXN0aW5hdGlvbkZvbGRlclBhdGgubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxpYXMgPSBkZXN0aW5hdGlvbkZvbGRlclBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkQWxpYXMoYWxpYXMpID8geyBhbGlhcywgcGF0aCB9IDogeyBhbGlhczogQUxJQVNfVVNFUl9GT0xERVIsIHBhdGg6IHVuZGVmaW5lZCB9O1xuICAgIH1cblxuICAgIHJlbW92ZUV4aXN0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbnM6IE5vZGVbXSkge1xuICAgICAgICBjb25zdCBleGlzdGluZ05vZGU6IE5vZGVbXSA9IFsuLi50aGlzLmZpZWxkLnZhbHVlIHx8IFtdXTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbnMuZmlsdGVyKG9wdCA9PiAhZXhpc3RpbmdOb2RlLnNvbWUoKG5vZGUpID0+IG5vZGUuaWQgPT09IG9wdC5pZCkpO1xuICAgIH1cblxuICAgIGRvd25sb2FkQ29udGVudChmaWxlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2UuZG93bmxvYWRGaWxlKGZpbGUuaWQpO1xuICAgIH1cblxuICAgIG9uVXBsb2FkTmV3RmlsZVZlcnNpb24obm9kZTogTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLm5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2Uub3BlblVwbG9hZE5ld1ZlcnNpb25EaWFsb2cobm9kZSkuc3Vic2NyaWJlKChuZXdWZXJzaW9uVXBsb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAobmV3VmVyc2lvblVwbG9hZGVyRGF0YS5hY3Rpb24gPT09IE5ld1ZlcnNpb25VcGxvYWRlckRhdGFBY3Rpb24udXBsb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlT2xkRmlsZVZlcnNpb25XaXRoTmV3KG5ld1ZlcnNpb25VcGxvYWRlckRhdGEgYXMgVmVyc2lvbk1hbmFnZXJVcGxvYWREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93RXJyb3IoZXJyb3IudmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25BdHRhY2hGaWxlQ2xpY2tlZChub2RlU2VsZWN0b3I6IGFueSkge1xuICAgICAgICBub2RlU2VsZWN0b3Iubm9kZUlkID0gbm9kZVNlbGVjdG9yLmlkO1xuICAgICAgICB0aGlzLmZpbGVDbGlja2VkKG5ldyBDb250ZW50TGlua01vZGVsKG5vZGVTZWxlY3RvcikpO1xuICAgIH1cblxuICAgIGdldFdpZGdldEljb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBbGZyZXNjb0FuZExvY2FsKCkgPyAnZmlsZV91cGxvYWQnIDogJ2F0dGFjaF9maWxlJztcbiAgICB9XG5cbiAgICBvblJvd0NsaWNrZWQoZmlsZT86IE5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlPy5pZCA9PT0gZmlsZT8uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gZmlsZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRNb2RlbEZvcm1GaWxlSGFuZGxlcih0aGlzLnNlbGVjdGVkTm9kZSk7XG4gICAgfVxuXG4gICAgY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKGZpbGU/OiBhbnkpIHtcbiAgICAgICAgaWYgKGZpbGU/LmlkICYmIHRoaXMuaXNSZXRyaWV2ZU1ldGFkYXRhT3B0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IEZvcm1WYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubm9kZXNBcGkuZ2V0Tm9kZShmaWxlLmlkKS50aGVuKGFjc05vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gYWNzTm9kZT8uZW50cnk/LnByb3BlcnRpZXM7XG4gICAgICAgICAgICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhtZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2FuaXRpemVkS2V5ID0ga2V5LnJlcGxhY2UoJzonLCAnXycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW3Nhbml0aXplZEtleV0gPSBtZXRhZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtU2VydmljZS51cGRhdGVGb3JtVmFsdWVzUmVxdWVzdGVkLm5leHQodmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGVDbGlja2VkKG5ldyBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsKGZpbGUsIHRoaXMuZmllbGQuaWQpKTtcbiAgICB9XG5cbiAgICBpc1JldHJpZXZlTWV0YWRhdGFPcHRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZD8ucGFyYW1zPy5tZW51T3B0aW9ucyAmJiB0aGlzLmZpZWxkLnBhcmFtcy5tZW51T3B0aW9uc1tSRVRSSUVWRV9NRVRBREFUQV9PUFRJT05dO1xuICAgIH1cblxuICAgIGlzVmFsaWRBbGlhcyhhbGlhczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhbGlhcyAmJiBWQUxJRF9BTElBUy5pbmNsdWRlcyhhbGlhcyk7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRmlsZTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlLmN1c3RvbU1vZGVscyA9IFtdO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLWZpbGUtd2lkZ2V0LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldCB7e2ZpZWxkLmNsYXNzTmFtZX19XCJcbiAgICAgICAgW2NsYXNzLmFkZi1yZWFkb25seV09XCJmaWVsZC5yZWFkT25seVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJhZGYtbGFiZWxcIiBbYXR0ci5mb3JdPVwiZmllbGQuaWRcIj57e2ZpZWxkLm5hbWV9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtYXN0ZXJpc2tcIiAqbmdJZj1cImlzUmVxdWlyZWQoKVwiPio8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldC1jb250YWluZXJcIiAoZm9jdXNvdXQpPVwibWFya0FzVG91Y2hlZCgpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX21lbnUtdXBsb2FkXCIgKm5nSWY9XCJpc1VwbG9hZEJ1dHRvblZpc2libGUoKVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5TZWxlY3REaWFsb2coKVwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX21lbnUtdXBsb2FkX19idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQuaWRcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJmaWVsZC50b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiMTAwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0ZPUk0uRklFTEQuQVRUQUNIJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXRfX21lbnUtdXBsb2FkX19idXR0b25fX2ljb25cIj57e2dldFdpZGdldEljb24oKX19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLWF0dGFjaC13aWRnZXQtcmVhZG9ubHktbGlzdFwiIGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXQtcmVhZG9ubHktdGFibGVcIj5cbiAgICAgICAgPGFkZi1jbG91ZC1maWxlLXByb3BlcnRpZXMtdGFibGVcbiAgICAgICAgICAgIFt1cGxvYWRlZEZpbGVzXT1cInVwbG9hZGVkRmlsZXNcIlxuICAgICAgICAgICAgW2hhc0ZpbGVdPVwiaGFzRmlsZVwiXG4gICAgICAgICAgICBbc2VsZWN0ZWROb2RlXT1cInNlbGVjdGVkTm9kZVwiXG4gICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgICAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1uc1wiXG4gICAgICAgICAgICBbbWltZVR5cGVJY29uXT1cIm1pbWVUeXBlSWNvblwiXG4gICAgICAgICAgICAocm93Q2xpY2spPVwib25Sb3dDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGF0dGFjaEZpbGVDbGljayk9XCJvbkF0dGFjaEZpbGVDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGRvd25sb2FkRmlsZSk9XCJkb3dubG9hZENvbnRlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAodXBsb2FkTmV3RmlsZVZlcnNpb24pPVwib25VcGxvYWROZXdGaWxlVmVyc2lvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIChjb250ZW50TW9kZWxGaWxlSGFuZGxlcik9XCJjb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAocmVtb3ZlQXR0YWNoRmlsZSk9XCJvblJlbW92ZUF0dGFjaEZpbGUoJGV2ZW50KVwiXG4gICAgICAgID48L2FkZi1jbG91ZC1maWxlLXByb3BlcnRpZXMtdGFibGU+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaGFzRmlsZSAmJiBmaWVsZC5yZWFkT25seVwiIGlkPVwie3snYWRmLWF0dGFjaC1lbXB0eS1saXN0LScrZmllbGQuaWR9fVwiPlxuICAgICAgICAgICAge3sgJ0ZPUk0uRklFTEQuTk9fRklMRV9BVFRBQ0hFRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxlcnJvci13aWRnZXQgW2Vycm9yXT1cImZpZWxkLnZhbGlkYXRpb25TdW1tYXJ5XCI+PC9lcnJvci13aWRnZXQ+XG4gICAgPGVycm9yLXdpZGdldCAqbmdJZj1cIiFmaWVsZC5pc1ZhbGlkICYmIGlzVG91Y2hlZCgpICYmICFpc1NlbGVjdGVkKClcIiByZXF1aXJlZD1cInt7ICdGT1JNLkZJRUxELlJFUVVJUkVEJyB8IHRyYW5zbGF0ZSB9fVwiPjwvZXJyb3Itd2lkZ2V0PlxuPC9kaXY+XG4iXX0=
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQ0gsV0FBVyxFQUNYLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBRW5CLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLDRCQUE0QixFQUUvQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBUSxRQUFRLEVBQWdDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDeEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUE4Qix5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hILE9BQU8sRUFBRSwrQkFBK0IsRUFBRSw0QkFBNEIsRUFBZ0MseUJBQXlCLEVBQTRCLE1BQU0sZ0NBQWdD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LyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEZvcm1TZXJ2aWNlLFxuICAgIExvZ1NlcnZpY2UsXG4gICAgVGh1bWJuYWlsU2VydmljZSxcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIEZvcm1WYWx1ZXMsXG4gICAgQ29udGVudExpbmtNb2RlbCxcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIEFsZnJlc2NvQXBpU2VydmljZSxcbiAgICBVcGxvYWRXaWRnZXRDb250ZW50TGlua01vZGVsLFxuICAgIERlc3RpbmF0aW9uRm9sZGVyUGF0aFxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgTm9kZSwgTm9kZXNBcGksIFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24gfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IENvbnRlbnRDbG91ZE5vZGVTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZW50LWNsb3VkLW5vZGUtc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Byb2Nlc3MtY2xvdWQtY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFVwbG9hZENsb3VkV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi91cGxvYWQtY2xvdWQud2lkZ2V0JztcbmltcG9ydCB7IERlc3RpbmF0aW9uRm9sZGVyUGF0aE1vZGVsLCBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2Zvcm0tY2xvdWQtcmVwcmVzZW50YXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZSwgTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbiwgTmV3VmVyc2lvblVwbG9hZGVyRGlhbG9nRGF0YSwgTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZSwgVmVyc2lvbk1hbmFnZXJVcGxvYWREYXRhIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb250ZW50LXNlcnZpY2VzJztcblxuZXhwb3J0IGNvbnN0IFJFVFJJRVZFX01FVEFEQVRBX09QVElPTiA9ICdyZXRyaWV2ZU1ldGFkYXRhJztcbmV4cG9ydCBjb25zdCBBTElBU19ST09UX0ZPTERFUiA9ICctcm9vdC0nO1xuZXhwb3J0IGNvbnN0IEFMSUFTX1VTRVJfRk9MREVSID0gJy1teS0nO1xuZXhwb3J0IGNvbnN0IEFQUF9OQU1FID0gJy1hcHBuYW1lLSc7XG5leHBvcnQgY29uc3QgVkFMSURfQUxJQVMgPSBbIEFMSUFTX1JPT1RfRk9MREVSLCBBTElBU19VU0VSX0ZPTERFUiwgJy1zaGFyZWQtJyBdO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2F0dGFjaC1maWxlLWNsb3VkLXdpZGdldC5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhjbGljayknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoY2hhbmdlKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGlucHV0KSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhpbnZhbGlkKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhzZWxlY3QpJzogJ2V2ZW50KCRldmVudCknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaEZpbGVDbG91ZFdpZGdldENvbXBvbmVudCBleHRlbmRzIFVwbG9hZENsb3VkV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHR5cGVJZCA9ICdBdHRhY2hGaWxlQ2xvdWRXaWRnZXRDb21wb25lbnQnO1xuICAgIHJvb3ROb2RlSWQgPSBBTElBU19VU0VSX0ZPTERFUjtcbiAgICBzZWxlY3RlZE5vZGU6IE5vZGU7XG5cbiAgICBwcml2YXRlIHByZXZpZXdTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX25vZGVzQXBpOiBOb2Rlc0FwaTtcbiAgICBnZXQgbm9kZXNBcGkoKTogTm9kZXNBcGkge1xuICAgICAgICB0aGlzLl9ub2Rlc0FwaSA9IHRoaXMuX25vZGVzQXBpID8/IG5ldyBOb2Rlc0FwaSh0aGlzLmFwaVNlcnZpY2UuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc0FwaTtcbiAgICB9XG4gICAgZGlzcGxheWVkQ29sdW1ucyA9IFsnaWNvbicsICdmaWxlTmFtZScsICdhY3Rpb24nXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgICAgIGxvZ2dlcjogTG9nU2VydmljZSxcbiAgICAgICAgdGh1bWJuYWlsczogVGh1bWJuYWlsU2VydmljZSxcbiAgICAgICAgcHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2U6IFByb2Nlc3NDbG91ZENvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnROb2RlU2VsZWN0b3JTZXJ2aWNlOiBDb250ZW50Q2xvdWROb2RlU2VsZWN0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZ1NlcnZpY2U6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2U6IENvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmV3VmVyc2lvblVwbG9hZGVyU2VydmljZTogTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihmb3JtU2VydmljZSwgdGh1bWJuYWlscywgcHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2UsIG5vdGlmaWNhdGlvblNlcnZpY2UsIGxvZ2dlcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmhhc0ZpbGUgJiYgdGhpcy5maWVsZC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZmllbGQudmFsdWUgfHwgdGhpcy5maWVsZC5mb3JtLnZhbHVlc1t0aGlzLmZpZWxkLmlkXTtcbiAgICAgICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKGZpbGVzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpZWxkLnBhcmFtcy5kaXNwbGF5YWJsZUNNUHJvcGVydGllcyA9IHRoaXMuZmllbGQucGFyYW1zLmRpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzID8/IFtdO1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuc3BsaWNlKDIsIDAsIC4uLih0aGlzLmZpZWxkLnBhcmFtcy5kaXNwbGF5YWJsZUNNUHJvcGVydGllcz8ubWFwKHByb3BlcnR5ID0+IHByb3BlcnR5Py5uYW1lKSB8fCBbXSkpO1xuICAgICAgICB0aGlzLnNldFByZXZpZXdTdGF0ZSgpO1xuICAgIH1cblxuICAgIGlzUGF0aFN0YXRpY1R5cGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLnBhcmFtcz8uZmlsZVNvdXJjZT8uZGVzdGluYXRpb25Gb2xkZXJQYXRoPy50eXBlID09PSBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLlNUQVRJQ19UWVBFO1xuICAgIH1cblxuICAgIGlzVXBsb2FkQnV0dG9uVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICghdGhpcy5oYXNGaWxlIHx8IHRoaXMubXVsdGlwbGVPcHRpb24pICYmICF0aGlzLmZpZWxkLnJlYWRPbmx5O1xuICAgIH1cblxuICAgIG9uUmVtb3ZlQXR0YWNoRmlsZShmaWxlOiBGaWxlIHwgUmVsYXRlZENvbnRlbnRSZXByZXNlbnRhdGlvbiB8IE5vZGUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGZpbGUpO1xuICAgICAgICBpZiAoZmlsZVsnaWQnXSA9PT0gdGhpcy5zZWxlY3RlZE5vZGU/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIodGhpcy5maWVsZC52YWx1ZS5sZW5ndGggPiAwID8gdGhpcy5maWVsZC52YWx1ZVswXSA6IG51bGwpO1xuICAgIH1cblxuICAgIGZldGNoQXBwTmFtZUZyb21BcHBDb25maWcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXQoJ2FsZnJlc2NvLWRlcGxveWVkLWFwcHMnKVswXT8ubmFtZTtcbiAgICB9XG5cbiAgICByZXBsYWNlQXBwTmFtZUFsaWFzV2l0aFZhbHVlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXRoPy5tYXRjaChBUFBfTkFNRSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFwcE5hbWUgPSB0aGlzLmZldGNoQXBwTmFtZUZyb21BcHBDb25maWcoKTtcbiAgICAgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2UoQVBQX05BTUUsIGFwcE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIGFzeW5jIG9wZW5TZWxlY3REaWFsb2coKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dXYXJuaW5nKCdGT1JNLlBSRVZJRVcuQVRUQUNIX0ZJTEVfV0lER0VULk9OX0FUVEFDSF9GSUxFX0NMSUNLJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE1vZGUgPSB0aGlzLmZpZWxkLnBhcmFtcy5tdWx0aXBsZSA/ICdtdWx0aXBsZScgOiAnc2luZ2xlJztcbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0RGVzdGluYXRpb25Gb2xkZXJOb2RlSWQoKTtcbiAgICAgICAgICAgIHRoaXMucm9vdE5vZGVJZCA9IG5vZGVJZCA/IG5vZGVJZCA6IEFMSUFTX1VTRVJfRk9MREVSO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlLmN1c3RvbU1vZGVscyA9IHRoaXMuZmllbGQucGFyYW1zLmN1c3RvbU1vZGVscztcblxuICAgICAgICAgICAgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yU2VydmljZVxuICAgICAgICAgICAgICAgIC5vcGVuVXBsb2FkRmlsZURpYWxvZyh0aGlzLnJvb3ROb2RlSWQsIHNlbGVjdGVkTW9kZSwgdGhpcy5pc0FsZnJlc2NvQW5kTG9jYWwoKSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzZWxlY3Rpb25zOiBOb2RlW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9ucy5mb3JFYWNoKG5vZGUgPT4gKG5vZGVbJ2lzRXh0ZXJuYWwnXSA9IHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uV2l0aG91dER1cGxpY2F0aW9uID0gdGhpcy5yZW1vdmVFeGlzdGluZ1NlbGVjdGlvbihzZWxlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFkRmlsZXNBdHRhY2hlZCA9IHRoaXMuZmllbGQudmFsdWU/Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZml4SW5jb21wYXRpYmlsaXR5RnJvbVByZXZpb3VzQW5kTmV3Rm9ybShzZWxlY3Rpb25XaXRob3V0RHVwbGljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEZpbGVzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuZmllbGQudmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuZmllbGQudmFsdWVbMF0gOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREZXN0aW5hdGlvbkZvbGRlck5vZGVJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgcm9vdE5vZGVJZDogc3RyaW5nO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5maWVsZD8ucGFyYW1zPy5maWxlU291cmNlPy5kZXN0aW5hdGlvbkZvbGRlclBhdGg/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5TVEFUSUNfVFlQRTpcbiAgICAgICAgICAgICAgICByb290Tm9kZUlkID0gYXdhaXQgdGhpcy5nZXROb2RlSWRGcm9tUGF0aCh0aGlzLmZpZWxkLnBhcmFtcy5maWxlU291cmNlLmRlc3RpbmF0aW9uRm9sZGVyUGF0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUuU1RSSU5HX1RZUEU6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgodGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZS5kZXN0aW5hdGlvbkZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLkZPTERFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJvb3ROb2RlSWQgPSBhd2FpdCB0aGlzLmdldE5vZGVJZEZyb21Gb2xkZXJWYXJpYWJsZVZhbHVlKHRoaXMuZmllbGQucGFyYW1zLmZpbGVTb3VyY2UuZGVzdGluYXRpb25Gb2xkZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgoeyB0eXBlOiAnJywgdmFsdWU6IEFMSUFTX1VTRVJfRk9MREVSIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvb3ROb2RlSWQ7XG4gICAgfVxuXG4gICBhc3luYyBnZXROb2RlSWRGcm9tUGF0aChkZXN0aW5hdGlvbkZvbGRlclBhdGg6IERlc3RpbmF0aW9uRm9sZGVyUGF0aCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGxldCBub2RlSWQ6IHN0cmluZztcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25QYXRoID0gIHRoaXMuZ2V0QWxpYXNBbmRSZWxhdGl2ZVBhdGhGcm9tRGVzdGluYXRpb25Gb2xkZXJQYXRoKGRlc3RpbmF0aW9uRm9sZGVyUGF0aC52YWx1ZSk7XG4gICAgICAgIGRlc3RpbmF0aW9uUGF0aC5wYXRoID0gdGhpcy5yZXBsYWNlQXBwTmFtZUFsaWFzV2l0aFZhbHVlKGRlc3RpbmF0aW9uUGF0aC5wYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVJZCA9IGF3YWl0IHRoaXMuY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2UuZ2V0Tm9kZUlkRnJvbVBhdGgoZGVzdGluYXRpb25QYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZUlkO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vZGVJZEZyb21Gb2xkZXJWYXJpYWJsZVZhbHVlKGRlc3RpbmF0aW9uRm9sZGVyUGF0aDogRGVzdGluYXRpb25Gb2xkZXJQYXRoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IG5vZGVJZDogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbm9kZUlkID0gYXdhaXQgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yU2VydmljZS5nZXROb2RlSWRGcm9tRm9sZGVyVmFyaWFibGVWYWx1ZShkZXN0aW5hdGlvbkZvbGRlclBhdGgudmFsdWUsIEFMSUFTX1VTRVJfRk9MREVSKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMubG9nU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZUlkO1xuICAgIH1cblxuICAgIGdldEFsaWFzQW5kUmVsYXRpdmVQYXRoRnJvbURlc3RpbmF0aW9uRm9sZGVyUGF0aChkZXN0aW5hdGlvbkZvbGRlclBhdGg6IHN0cmluZyk6IERlc3RpbmF0aW9uRm9sZGVyUGF0aE1vZGVsIHtcbiAgICAgICAgbGV0IGFsaWFzOiBzdHJpbmc7IGxldCBwYXRoOiBzdHJpbmc7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkZvbGRlclBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2ZSZWxhdGl2ZVBhdGhJbmRleCA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5pbmRleE9mKCcvJyk7XG4gICAgICAgICAgICBpZiAoc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5zdWJzdHJpbmcoMCwgc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4KTtcbiAgICAgICAgICAgICAgICBwYXRoID0gZGVzdGluYXRpb25Gb2xkZXJQYXRoLnN1YnN0cmluZyhzdGFydE9mUmVsYXRpdmVQYXRoSW5kZXgsIGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRBbGlhcyhhbGlhcykgPyB7IGFsaWFzLCBwYXRoIH0gOiB7IGFsaWFzOiBBTElBU19VU0VSX0ZPTERFUiwgcGF0aDogdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgcmVtb3ZlRXhpc3RpbmdTZWxlY3Rpb24oc2VsZWN0aW9uczogTm9kZVtdKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTm9kZTogTm9kZVtdID0gWy4uLnRoaXMuZmllbGQudmFsdWUgfHwgW11dO1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9ucy5maWx0ZXIob3B0ID0+ICFleGlzdGluZ05vZGUuc29tZSgobm9kZSkgPT4gbm9kZS5pZCA9PT0gb3B0LmlkKSk7XG4gICAgfVxuXG4gICAgZG93bmxvYWRDb250ZW50KGZpbGU6IE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzQ2xvdWRDb250ZW50U2VydmljZS5kb3dubG9hZEZpbGUoZmlsZS5pZCk7XG4gICAgfVxuXG4gICAgb25VcGxvYWROZXdGaWxlVmVyc2lvbihub2RlOiBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV3VmVyc2lvblVwbG9hZGVyU2VydmljZS5vcGVuVXBsb2FkTmV3VmVyc2lvbkRpYWxvZyhub2RlKS5zdWJzY3JpYmUoKG5ld1ZlcnNpb25VcGxvYWRlckRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXdWZXJzaW9uVXBsb2FkZXJEYXRhLmFjdGlvbiA9PT0gTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbi51cGxvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VPbGRGaWxlVmVyc2lvbldpdGhOZXcobmV3VmVyc2lvblVwbG9hZGVyRGF0YSBhcyBWZXJzaW9uTWFuYWdlclVwbG9hZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IgPT4gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dFcnJvcihlcnJvci52YWx1ZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkF0dGFjaEZpbGVDbGlja2VkKG5vZGVTZWxlY3RvcjogYW55KSB7XG4gICAgICAgIG5vZGVTZWxlY3Rvci5ub2RlSWQgPSBub2RlU2VsZWN0b3IuaWQ7XG4gICAgICAgIHRoaXMuZmlsZUNsaWNrZWQobmV3IENvbnRlbnRMaW5rTW9kZWwobm9kZVNlbGVjdG9yKSk7XG4gICAgfVxuXG4gICAgZ2V0V2lkZ2V0SWNvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FsZnJlc2NvQW5kTG9jYWwoKSA/ICdmaWxlX3VwbG9hZCcgOiAnYXR0YWNoX2ZpbGUnO1xuICAgIH1cblxuICAgIG9uUm93Q2xpY2tlZChmaWxlPzogTm9kZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGU/LmlkID09PSBmaWxlPy5pZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBmaWxlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuc2VsZWN0ZWROb2RlKTtcbiAgICB9XG5cbiAgICBjb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIoZmlsZT86IGFueSkge1xuICAgICAgICBpZiAoZmlsZT8uaWQgJiYgdGhpcy5pc1JldHJpZXZlTWV0YWRhdGFPcHRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlczogRm9ybVZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgdGhpcy5ub2Rlc0FwaS5nZXROb2RlKGZpbGUuaWQpLnRoZW4oYWNzTm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBhY3NOb2RlPy5lbnRyeT8ucHJvcGVydGllcztcbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzYW5pdGl6ZWRLZXkgPSBrZXkucmVwbGFjZSgnOicsICdfJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbc2FuaXRpemVkS2V5XSA9IG1ldGFkYXRhW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm1WYWx1ZXNSZXF1ZXN0ZWQubmV4dCh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZUNsaWNrZWQobmV3IFVwbG9hZFdpZGdldENvbnRlbnRMaW5rTW9kZWwoZmlsZSwgdGhpcy5maWVsZC5pZCkpO1xuICAgIH1cblxuICAgIGlzUmV0cmlldmVNZXRhZGF0YU9wdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5wYXJhbXM/Lm1lbnVPcHRpb25zICYmIHRoaXMuZmllbGQucGFyYW1zLm1lbnVPcHRpb25zW1JFVFJJRVZFX01FVEFEQVRBX09QVElPTl07XG4gICAgfVxuXG4gICAgaXNWYWxpZEFsaWFzKGFsaWFzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGFsaWFzICYmIFZBTElEX0FMSUFTLmluY2x1ZGVzKGFsaWFzKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNGaWxlO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2UuY3VzdG9tTW9kZWxzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcmV2aWV3U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld1N0YXRlID0gdGhpcy5mb3JtU2VydmljZS5nZXRQcmV2aWV3U3RhdGUoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC1maWxlLXdpZGdldC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXQge3tmaWVsZC5jbGFzc05hbWV9fVwiXG4gICAgICAgIFtjbGFzcy5hZGYtcmVhZG9ubHldPVwiZmllbGQucmVhZE9ubHlcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWRmLWxhYmVsXCIgW2F0dHIuZm9yXT1cImZpZWxkLmlkXCI+e3tmaWVsZC5uYW1lfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLWFzdGVyaXNrXCIgKm5nSWY9XCJpc1JlcXVpcmVkKClcIj4qPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWF0dGFjaC13aWRnZXQtY29udGFpbmVyXCIgKGZvY3Vzb3V0KT1cIm1hcmtBc1RvdWNoZWQoKVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0X19tZW51LXVwbG9hZFwiICpuZ0lmPVwiaXNVcGxvYWRCdXR0b25WaXNpYmxlKClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU2VsZWN0RGlhbG9nKClcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0X19tZW51LXVwbG9hZF9fYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImZpZWxkLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZmllbGQudG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjEwMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdGT1JNLkZJRUxELkFUVEFDSCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0X19tZW51LXVwbG9hZF9fYnV0dG9uX19pY29uXCI+e3tnZXRXaWRnZXRJY29uKCl9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1hdHRhY2gtd2lkZ2V0LXJlYWRvbmx5LWxpc3RcIiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0LXJlYWRvbmx5LXRhYmxlXCI+XG4gICAgICAgIDxhZGYtY2xvdWQtZmlsZS1wcm9wZXJ0aWVzLXRhYmxlXG4gICAgICAgICAgICBbdXBsb2FkZWRGaWxlc109XCJ1cGxvYWRlZEZpbGVzXCJcbiAgICAgICAgICAgIFtoYXNGaWxlXT1cImhhc0ZpbGVcIlxuICAgICAgICAgICAgW3NlbGVjdGVkTm9kZV09XCJzZWxlY3RlZE5vZGVcIlxuICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cImRpc3BsYXllZENvbHVtbnNcIlxuICAgICAgICAgICAgW21pbWVUeXBlSWNvbl09XCJtaW1lVHlwZUljb25cIlxuICAgICAgICAgICAgKHJvd0NsaWNrKT1cIm9uUm93Q2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChhdHRhY2hGaWxlQ2xpY2spPVwib25BdHRhY2hGaWxlQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkb3dubG9hZEZpbGUpPVwiZG93bmxvYWRDb250ZW50KCRldmVudClcIlxuICAgICAgICAgICAgKHVwbG9hZE5ld0ZpbGVWZXJzaW9uKT1cIm9uVXBsb2FkTmV3RmlsZVZlcnNpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoY29udGVudE1vZGVsRmlsZUhhbmRsZXIpPVwiY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgKHJlbW92ZUF0dGFjaEZpbGUpPVwib25SZW1vdmVBdHRhY2hGaWxlKCRldmVudClcIlxuICAgICAgICA+PC9hZGYtY2xvdWQtZmlsZS1wcm9wZXJ0aWVzLXRhYmxlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhhc0ZpbGUgJiYgZmllbGQucmVhZE9ubHlcIiBpZD1cInt7J2FkZi1hdHRhY2gtZW1wdHktbGlzdC0nK2ZpZWxkLmlkfX1cIj5cbiAgICAgICAgICAgIHt7ICdGT1JNLkZJRUxELk5PX0ZJTEVfQVRUQUNIRUQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZXJyb3Itd2lkZ2V0IFtlcnJvcl09XCJmaWVsZC52YWxpZGF0aW9uU3VtbWFyeVwiPjwvZXJyb3Itd2lkZ2V0PlxuICAgIDxlcnJvci13aWRnZXQgKm5nSWY9XCIhZmllbGQuaXNWYWxpZCAmJiBpc1RvdWNoZWQoKSAmJiAhaXNTZWxlY3RlZCgpXCIgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cIj48L2Vycm9yLXdpZGdldD5cbjwvZGl2PlxuIl19
|
|
@@ -7003,6 +7003,7 @@ class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
7003
7003
|
this.newVersionUploaderService = newVersionUploaderService;
|
|
7004
7004
|
this.typeId = 'AttachFileCloudWidgetComponent';
|
|
7005
7005
|
this.rootNodeId = ALIAS_USER_FOLDER;
|
|
7006
|
+
this.previewState = false;
|
|
7006
7007
|
this.displayedColumns = ['icon', 'fileName', 'action'];
|
|
7007
7008
|
}
|
|
7008
7009
|
get nodesApi() {
|
|
@@ -7019,6 +7020,7 @@ class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
7019
7020
|
}
|
|
7020
7021
|
this.field.params.displayableCMProperties = (_a = this.field.params.displayableCMProperties) !== null && _a !== void 0 ? _a : [];
|
|
7021
7022
|
this.displayedColumns.splice(2, 0, ...(((_b = this.field.params.displayableCMProperties) === null || _b === void 0 ? void 0 : _b.map(property => property === null || property === void 0 ? void 0 : property.name)) || []));
|
|
7023
|
+
this.setPreviewState();
|
|
7022
7024
|
}
|
|
7023
7025
|
isPathStaticType() {
|
|
7024
7026
|
var _a, _b, _c;
|
|
@@ -7048,22 +7050,27 @@ class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
7048
7050
|
}
|
|
7049
7051
|
openSelectDialog() {
|
|
7050
7052
|
return __awaiter(this, void 0, void 0, function* () {
|
|
7051
|
-
|
|
7052
|
-
|
|
7053
|
-
|
|
7054
|
-
|
|
7055
|
-
|
|
7056
|
-
|
|
7057
|
-
.
|
|
7058
|
-
|
|
7059
|
-
|
|
7060
|
-
|
|
7061
|
-
|
|
7062
|
-
|
|
7063
|
-
|
|
7064
|
-
|
|
7065
|
-
|
|
7066
|
-
|
|
7053
|
+
if (this.previewState) {
|
|
7054
|
+
this.notificationService.showWarning('FORM.PREVIEW.ATTACH_FILE_WIDGET.ON_ATTACH_FILE_CLICK');
|
|
7055
|
+
}
|
|
7056
|
+
else {
|
|
7057
|
+
const selectedMode = this.field.params.multiple ? 'multiple' : 'single';
|
|
7058
|
+
const nodeId = yield this.getDestinationFolderNodeId();
|
|
7059
|
+
this.rootNodeId = nodeId ? nodeId : ALIAS_USER_FOLDER;
|
|
7060
|
+
this.contentNodeSelectorPanelService.customModels = this.field.params.customModels;
|
|
7061
|
+
this.contentNodeSelectorService
|
|
7062
|
+
.openUploadFileDialog(this.rootNodeId, selectedMode, this.isAlfrescoAndLocal(), true)
|
|
7063
|
+
.subscribe((selections) => {
|
|
7064
|
+
var _a;
|
|
7065
|
+
selections.forEach(node => (node['isExternal'] = true));
|
|
7066
|
+
const selectionWithoutDuplication = this.removeExistingSelection(selections);
|
|
7067
|
+
const hadFilesAttached = ((_a = this.field.value) === null || _a === void 0 ? void 0 : _a.length) > 0;
|
|
7068
|
+
this.fixIncompatibilityFromPreviousAndNewForm(selectionWithoutDuplication);
|
|
7069
|
+
if (!hadFilesAttached) {
|
|
7070
|
+
this.contentModelFormFileHandler(this.field.value.length > 0 ? this.field.value[0] : null);
|
|
7071
|
+
}
|
|
7072
|
+
});
|
|
7073
|
+
}
|
|
7067
7074
|
});
|
|
7068
7075
|
}
|
|
7069
7076
|
getDestinationFolderNodeId() {
|
|
@@ -7190,6 +7197,9 @@ class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
|
|
|
7190
7197
|
ngOnDestroy() {
|
|
7191
7198
|
this.contentNodeSelectorPanelService.customModels = [];
|
|
7192
7199
|
}
|
|
7200
|
+
setPreviewState() {
|
|
7201
|
+
this.previewState = this.formService.getPreviewState();
|
|
7202
|
+
}
|
|
7193
7203
|
}
|
|
7194
7204
|
AttachFileCloudWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: AttachFileCloudWidgetComponent, deps: [{ token: i1$1.FormService }, { token: i1$1.LogService }, { token: i1$1.ThumbnailService }, { token: ProcessCloudContentService }, { token: i1$1.NotificationService }, { token: ContentCloudNodeSelectorService }, { token: i1$1.AppConfigService }, { token: i1$1.AlfrescoApiService }, { token: i2$3.ContentNodeSelectorPanelService }, { token: i2$3.NewVersionUploaderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7195
7205
|
AttachFileCloudWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: AttachFileCloudWidgetComponent, selector: "adf-cloud-attach-file-cloud-widget", host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [matTooltip]=\"field.tooltip\"\n matTooltipPosition=\"above\"\n matTooltipShowDelay=\"1000\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n ></adf-cloud-file-properties-table>\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\"></error-widget>\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"></error-widget>\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:32px;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:nowrap;margin-left:8px}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-files-row .adf-file{margin-bottom:0}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i1$1.ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "component", type: FilePropertiesTableCloudComponent, selector: "adf-cloud-file-properties-table", inputs: ["uploadedFiles", "hasFile", "selectedNode", "field", "displayedColumns", "mimeTypeIcon"], outputs: ["rowClick", "attachFileClick", "downloadFile", "uploadNewFileVersion", "contentModelFileHandler", "removeAttachFile"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|