@alfresco/adf-process-services 8.1.0-16320806191 → 9.1.0-16312921641
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/fesm2022/adf-process-services.mjs +297 -301
- package/fesm2022/adf-process-services.mjs.map +1 -1
- package/package.json +4 -6
- package/esm2022/adf-process-services.mjs +0 -5
- package/esm2022/lib/app-list/apps-list.component.mjs +0 -195
- package/esm2022/lib/app-list/icon.model.mjs +0 -166
- package/esm2022/lib/app-list/index.mjs +0 -18
- package/esm2022/lib/app-list/public-api.mjs +0 -23
- package/esm2022/lib/app-list/select-apps-dialog/select-apps-dialog.component.mjs +0 -53
- package/esm2022/lib/attachment/create-process-attachment/create-process-attachment.component.mjs +0 -73
- package/esm2022/lib/attachment/create-task-attachment/create-task-attachment.component.mjs +0 -73
- package/esm2022/lib/attachment/index.mjs +0 -18
- package/esm2022/lib/attachment/process-attachment-list/process-attachment-list.component.mjs +0 -197
- package/esm2022/lib/attachment/public-api.mjs +0 -31
- package/esm2022/lib/attachment/task-attachment-list/task-attachment-list.component.mjs +0 -196
- package/esm2022/lib/compat/types.mjs +0 -18
- package/esm2022/lib/form/events/validate-dynamic-table-row.event.mjs +0 -26
- package/esm2022/lib/form/form-custom-outcomes.component.mjs +0 -31
- package/esm2022/lib/form/form-list/form-list.component.mjs +0 -50
- package/esm2022/lib/form/form.component.mjs +0 -346
- package/esm2022/lib/form/index.mjs +0 -18
- package/esm2022/lib/form/model/form-definition.model.mjs +0 -92
- package/esm2022/lib/form/process-form-rendering.service.mjs +0 -55
- package/esm2022/lib/form/public-api.mjs +0 -32
- package/esm2022/lib/form/services/activiti-alfresco.service.mjs +0 -113
- package/esm2022/lib/form/services/ecm-model.service.mjs +0 -156
- package/esm2022/lib/form/services/editor.service.mjs +0 -87
- package/esm2022/lib/form/services/external-alfresco-api.service.mjs +0 -57
- package/esm2022/lib/form/services/index.mjs +0 -26
- package/esm2022/lib/form/services/model.service.mjs +0 -130
- package/esm2022/lib/form/services/process-content.service.mjs +0 -223
- package/esm2022/lib/form/services/process-definition.service.mjs +0 -93
- package/esm2022/lib/form/services/task-form.service.mjs +0 -127
- package/esm2022/lib/form/services/task.service.mjs +0 -77
- package/esm2022/lib/form/start-form/start-form.component.mjs +0 -141
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog-component.interface.mjs +0 -18
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.component.mjs +0 -115
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.service.mjs +0 -100
- package/esm2022/lib/form/widgets/content-widget/attach-file-widget.component.mjs +0 -254
- package/esm2022/lib/form/widgets/content-widget/attach-folder-widget.component.mjs +0 -93
- package/esm2022/lib/form/widgets/content-widget/index.mjs +0 -18
- package/esm2022/lib/form/widgets/content-widget/public-api.mjs +0 -22
- package/esm2022/lib/form/widgets/document/content.widget.mjs +0 -125
- package/esm2022/lib/form/widgets/document/document.widget.mjs +0 -61
- package/esm2022/lib/form/widgets/dropdown/dropdown.widget.mjs +0 -182
- package/esm2022/lib/form/widgets/dynamic-table/dynamic-table.widget.mjs +0 -192
- package/esm2022/lib/form/widgets/dynamic-table/editors/amount/amount.editor.mjs +0 -47
- package/esm2022/lib/form/widgets/dynamic-table/editors/boolean/boolean.editor.mjs +0 -42
- package/esm2022/lib/form/widgets/dynamic-table/editors/date/date.editor.mjs +0 -84
- package/esm2022/lib/form/widgets/dynamic-table/editors/datetime/datetime.editor.mjs +0 -84
- package/esm2022/lib/form/widgets/dynamic-table/editors/dropdown/dropdown.editor.mjs +0 -95
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/cell-validator.model.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/date-cell-validator-model.mjs +0 -47
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-row-validation-summary.model.mjs +0 -24
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column-option.model.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column.model.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-row.model.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table.widget.model.mjs +0 -159
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/number-cell-validator.model.mjs +0 -45
- package/esm2022/lib/form/widgets/dynamic-table/editors/models/required-cell-validator.model.mjs +0 -40
- package/esm2022/lib/form/widgets/dynamic-table/editors/row-editor/row.editor.mjs +0 -89
- package/esm2022/lib/form/widgets/dynamic-table/editors/text/text.editor.mjs +0 -47
- package/esm2022/lib/form/widgets/dynamic-table/index.mjs +0 -18
- package/esm2022/lib/form/widgets/dynamic-table/public-api.mjs +0 -44
- package/esm2022/lib/form/widgets/file-viewer/file-viewer.widget.mjs +0 -46
- package/esm2022/lib/form/widgets/functional-group/functional-group.widget.mjs +0 -167
- package/esm2022/lib/form/widgets/index.mjs +0 -18
- package/esm2022/lib/form/widgets/people/people.widget.mjs +0 -169
- package/esm2022/lib/form/widgets/public-api.mjs +0 -54
- package/esm2022/lib/form/widgets/radio-buttons/radio-buttons.widget.mjs +0 -97
- package/esm2022/lib/form/widgets/typeahead/typeahead.widget.mjs +0 -152
- package/esm2022/lib/form/widgets/upload/upload.widget.mjs +0 -128
- package/esm2022/lib/people/components/people/people.component.mjs +0 -124
- package/esm2022/lib/people/components/people-list/people-list.component.mjs +0 -74
- package/esm2022/lib/people/components/people-search/people-search.component.mjs +0 -83
- package/esm2022/lib/people/components/people-search-field/people-search-field.component.mjs +0 -90
- package/esm2022/lib/people/components/people-selector/people-selector.component.mjs +0 -76
- package/esm2022/lib/people/helpers/get-display-user.mjs +0 -22
- package/esm2022/lib/people/index.mjs +0 -18
- package/esm2022/lib/people/interfaces/perform-search-callback.interface.mjs +0 -18
- package/esm2022/lib/people/public-api.mjs +0 -35
- package/esm2022/lib/process-comments/index.mjs +0 -21
- package/esm2022/lib/process-comments/process-comments.component.mjs +0 -45
- package/esm2022/lib/process-comments/services/comment-process.service.mjs +0 -77
- package/esm2022/lib/process-list/components/process-audit/process-audit.directive.mjs +0 -105
- package/esm2022/lib/process-list/components/process-filters/process-filters.component.mjs +0 -211
- package/esm2022/lib/process-list/components/process-instance-details/process-instance-details.component.mjs +0 -142
- package/esm2022/lib/process-list/components/process-instance-header/process-instance-header.component.mjs +0 -123
- package/esm2022/lib/process-list/components/process-instance-tasks/process-instance-tasks.component.mjs +0 -163
- package/esm2022/lib/process-list/components/process-list/process-list.component.mjs +0 -327
- package/esm2022/lib/process-list/components/start-process/start-process.component.mjs +0 -423
- package/esm2022/lib/process-list/index.mjs +0 -18
- package/esm2022/lib/process-list/public-api.mjs +0 -44
- package/esm2022/lib/process-list/services/process-filter.service.mjs +0 -182
- package/esm2022/lib/process-list/services/process.service.mjs +0 -259
- package/esm2022/lib/process.module.mjs +0 -132
- package/esm2022/lib/services/apps-process.service.mjs +0 -58
- package/esm2022/lib/services/people-process.service.mjs +0 -124
- package/esm2022/lib/services/task-comments.service.mjs +0 -65
- package/esm2022/lib/task-comments/index.mjs +0 -21
- package/esm2022/lib/task-comments/task-comments.component.mjs +0 -44
- package/esm2022/lib/task-list/components/attach-form/attach-form.component.mjs +0 -127
- package/esm2022/lib/task-list/components/checklist/checklist.component.mjs +0 -140
- package/esm2022/lib/task-list/components/start-task/start-task.component.mjs +0 -221
- package/esm2022/lib/task-list/components/task-details/task-details.component.mjs +0 -360
- package/esm2022/lib/task-list/components/task-filters/task-filters.component.mjs +0 -261
- package/esm2022/lib/task-list/components/task-form/claim-task.directive.mjs +0 -77
- package/esm2022/lib/task-list/components/task-form/task-form.component.mjs +0 -313
- package/esm2022/lib/task-list/components/task-form/unclaim-task.directive.mjs +0 -77
- package/esm2022/lib/task-list/components/task-header/task-header.component.mjs +0 -361
- package/esm2022/lib/task-list/components/task-list/task-list.component.mjs +0 -359
- package/esm2022/lib/task-list/components/task-standalone/task-standalone.component.mjs +0 -82
- package/esm2022/lib/task-list/index.mjs +0 -18
- package/esm2022/lib/task-list/models/form.model.mjs +0 -26
- package/esm2022/lib/task-list/models/task-details.event.mjs +0 -32
- package/esm2022/lib/task-list/models/task-preset.model.mjs +0 -41
- package/esm2022/lib/task-list/models/user-event.model.mjs +0 -18
- package/esm2022/lib/task-list/models/user-group.model.mjs +0 -18
- package/esm2022/lib/task-list/public-api.mjs +0 -60
- package/esm2022/lib/task-list/services/process-upload.service.mjs +0 -42
- package/esm2022/lib/task-list/services/task-filter.service.mjs +0 -249
- package/esm2022/lib/task-list/services/task-upload.service.mjs +0 -42
- package/esm2022/lib/task-list/services/tasklist.service.mjs +0 -251
- package/esm2022/lib/task-list/validators/task-description.validator.mjs +0 -26
- package/esm2022/public-api.mjs +0 -30
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
import { CommonModule, DatePipe } from '@angular/common';
|
|
18
|
-
import { Component, DestroyRef, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';
|
|
19
|
-
import { MatDialog, MatDialogModule } from '@angular/material/dialog';
|
|
20
|
-
import { Observable } from 'rxjs';
|
|
21
|
-
import { TaskDetailsEvent } from '../../../task-list';
|
|
22
|
-
import { ProcessService } from '../../services/process.service';
|
|
23
|
-
import { share } from 'rxjs/operators';
|
|
24
|
-
import { ProcessInstanceRepresentation } from '@alfresco/js-api';
|
|
25
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
26
|
-
import { TranslatePipe } from '@ngx-translate/core';
|
|
27
|
-
import { MatChipsModule } from '@angular/material/chips';
|
|
28
|
-
import { MatListModule } from '@angular/material/list';
|
|
29
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
30
|
-
import { StartFormComponent } from '../../../form';
|
|
31
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
32
|
-
import * as i0 from "@angular/core";
|
|
33
|
-
import * as i1 from "../../services/process.service";
|
|
34
|
-
import * as i2 from "@angular/material/dialog";
|
|
35
|
-
import * as i3 from "@angular/common";
|
|
36
|
-
import * as i4 from "@angular/material/button";
|
|
37
|
-
import * as i5 from "@angular/material/chips";
|
|
38
|
-
import * as i6 from "@angular/material/list";
|
|
39
|
-
import * as i7 from "@angular/material/icon";
|
|
40
|
-
export class ProcessInstanceTasksComponent {
|
|
41
|
-
constructor(processService, dialog) {
|
|
42
|
-
this.processService = processService;
|
|
43
|
-
this.dialog = dialog;
|
|
44
|
-
/**
|
|
45
|
-
* Toggles whether to show a refresh button next to the list of tasks to allow
|
|
46
|
-
* it to be updated from the server.
|
|
47
|
-
*/
|
|
48
|
-
this.showRefreshButton = true;
|
|
49
|
-
/** Emitted when an error occurs. */
|
|
50
|
-
this.error = new EventEmitter();
|
|
51
|
-
/** Emitted when a task is clicked. */
|
|
52
|
-
this.taskClick = new EventEmitter();
|
|
53
|
-
this.activeTasks = [];
|
|
54
|
-
this.completedTasks = [];
|
|
55
|
-
this.destroyRef = inject(DestroyRef);
|
|
56
|
-
this.task$ = new Observable((observer) => (this.taskObserver = observer)).pipe(share());
|
|
57
|
-
this.completedTask$ = new Observable((observer) => (this.completedTaskObserver = observer)).pipe(share());
|
|
58
|
-
}
|
|
59
|
-
ngOnInit() {
|
|
60
|
-
this.task$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((task) => this.activeTasks.push(task));
|
|
61
|
-
this.completedTask$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((task) => this.completedTasks.push(task));
|
|
62
|
-
}
|
|
63
|
-
ngOnChanges(changes) {
|
|
64
|
-
const processInstanceDetails = changes['processInstanceDetails'];
|
|
65
|
-
if (processInstanceDetails?.currentValue) {
|
|
66
|
-
this.load(processInstanceDetails.currentValue.id);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
load(processInstanceId) {
|
|
70
|
-
this.loadActive(processInstanceId);
|
|
71
|
-
this.loadCompleted(processInstanceId);
|
|
72
|
-
}
|
|
73
|
-
loadActive(processInstanceId) {
|
|
74
|
-
this.activeTasks = [];
|
|
75
|
-
if (processInstanceId) {
|
|
76
|
-
this.processService.getProcessTasks(processInstanceId, null).subscribe((res) => {
|
|
77
|
-
res.forEach((task) => {
|
|
78
|
-
this.taskObserver.next(task);
|
|
79
|
-
});
|
|
80
|
-
}, (err) => {
|
|
81
|
-
this.error.emit(err);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
this.activeTasks = [];
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
loadCompleted(processInstanceId) {
|
|
89
|
-
this.completedTasks = [];
|
|
90
|
-
if (processInstanceId) {
|
|
91
|
-
this.processService.getProcessTasks(processInstanceId, 'completed').subscribe((res) => {
|
|
92
|
-
res.forEach((task) => {
|
|
93
|
-
this.completedTaskObserver.next(task);
|
|
94
|
-
});
|
|
95
|
-
}, (err) => {
|
|
96
|
-
this.error.emit(err);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
this.completedTasks = [];
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
hasStartFormDefined() {
|
|
104
|
-
return this.processInstanceDetails?.startFormDefined === true;
|
|
105
|
-
}
|
|
106
|
-
getUserFullName(user) {
|
|
107
|
-
if (user) {
|
|
108
|
-
return (user.firstName && user.firstName !== 'null' ? user.firstName + ' ' : '') + user.lastName;
|
|
109
|
-
}
|
|
110
|
-
return 'Nobody';
|
|
111
|
-
}
|
|
112
|
-
getFormatDate(value, format) {
|
|
113
|
-
const datePipe = new DatePipe('en-US');
|
|
114
|
-
try {
|
|
115
|
-
return datePipe.transform(value, format);
|
|
116
|
-
}
|
|
117
|
-
catch {
|
|
118
|
-
return value;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
clickTask(task) {
|
|
122
|
-
const args = new TaskDetailsEvent(task);
|
|
123
|
-
this.taskClick.emit(args);
|
|
124
|
-
}
|
|
125
|
-
clickStartTask() {
|
|
126
|
-
this.processId = this.processInstanceDetails.id;
|
|
127
|
-
this.showStartDialog();
|
|
128
|
-
}
|
|
129
|
-
showStartDialog() {
|
|
130
|
-
this.dialog.open(this.startDialog, { height: '500px', width: '700px' });
|
|
131
|
-
}
|
|
132
|
-
closeStartDialog() {
|
|
133
|
-
this.dialog.closeAll();
|
|
134
|
-
}
|
|
135
|
-
onRefreshClicked() {
|
|
136
|
-
this.load(this.processInstanceDetails.id);
|
|
137
|
-
}
|
|
138
|
-
onFormContentClick() {
|
|
139
|
-
this.closeStartDialog();
|
|
140
|
-
}
|
|
141
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProcessInstanceTasksComponent, deps: [{ token: i1.ProcessService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
142
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ProcessInstanceTasksComponent, isStandalone: true, selector: "adf-process-instance-tasks", inputs: { processInstanceDetails: "processInstanceDetails", showRefreshButton: "showRefreshButton" }, outputs: { error: "error", taskClick: "taskClick" }, viewQueries: [{ propertyName: "startDialog", first: true, predicate: ["startDialog"], descendants: true }, { propertyName: "taskDetails", first: true, predicate: ["taskDetails"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"showRefreshButton\" class=\"process-tasks-refresh\" >\n <button mat-icon-button (click)=\"onRefreshClicked()\">\n <mat-icon class=\"md-24\" [attr.aria-label]=\"'ADF_PROCESS_LIST.DETAILS.LABELS.REFRESH' | translate\">refresh</mat-icon>\n </button>\n</div>\n\n<!-- ACTIVE FORM -->\n\n<mat-chip-listbox>\n <span class=\"adf-chip-label\">{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASKS_ACTIVE'|translate }}</span>\n <mat-chip-option class=\"adf-process-badge\" color=\"accent\" selected=\"true\">{{activeTasks?.length}}</mat-chip-option>\n</mat-chip-listbox>\n\n<div class=\"menu-container\" *ngIf=\"activeTasks?.length > 0\" data-automation-id=\"active-tasks\">\n <mat-list>\n <mat-list-item class=\"process-tasks__task-item\" *ngFor=\"let task of activeTasks\" (click)=\"clickTask(task)\">\n <mat-icon matListItemLine>assignment</mat-icon>\n <h3 matLine>{{task.name || 'Nameless task'}}</h3>\n <span matLine>\n {{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASK_SUBTITLE' | translate:{user: getUserFullName(task.assignee), created: getFormatDate(task.created, 'mediumDate') } }}\n </span>\n </mat-list-item>\n </mat-list>\n</div>\n\n<!-- START FORM -->\n\n<div *ngIf=\"activeTasks?.length === 0\" data-automation-id=\"active-tasks-none\" class=\"no-results\">\n {{ 'ADF_PROCESS_LIST.DETAILS.TASKS.NO_ACTIVE' | translate }}\n</div>\n\n<div *ngIf=\"hasStartFormDefined()\">\n <span class=\"adf-activiti-label\">{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.START_FORM'|translate }}</span>\n\n <!--IF START TASK COMPLETED -->\n <div class=\"menu-container\" data-automation-id=\"start-form\">\n <mat-list>\n <mat-list-item class=\"process-tasks__task-item\" (click)=\"clickStartTask()\">\n <mat-icon matListItemLine>assignment</mat-icon>\n <h3 matLine>{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.START_FORM'|translate }}</h3>\n <span matLine>\n {{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASK_SUBTITLE' | translate:{user:getUserFullName(processInstanceDetails.startedBy), created: getFormatDate(processInstanceDetails.started, 'mediumDate') } }}\n </span>\n </mat-list-item>\n </mat-list>\n </div>\n\n</div>\n\n<!-- COMPLETED FORM -->\n<mat-chip-listbox>\n <span class=\"adf-chip-label\">{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASKS_COMPLETED'|translate }}</span>\n <mat-chip-option class=\"adf-process-badge\" color=\"accent\" selected=\"true\">{{completedTasks?.length}}</mat-chip-option>\n</mat-chip-listbox>\n\n<div class=\"menu-container\" *ngIf=\"completedTasks?.length > 0\" data-automation-id=\"completed-tasks\">\n <mat-list>\n <mat-list-item class=\"process-tasks__task-item\" *ngFor=\"let task of completedTasks\" (click)=\"clickTask(task)\">\n <mat-icon matListItemLine>assignment</mat-icon>\n <h3 matLine>{{task.name || 'Nameless task'}}</h3>\n <span matLine>\n {{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASK_SUBTITLE' | translate:{user:getUserFullName(task.assignee), created: getFormatDate(task.created, 'mediumDate') } }}\n </span>\n </mat-list-item>\n </mat-list>\n</div>\n\n<div *ngIf=\"completedTasks?.length === 0\" data-automation-id=\"completed-tasks-none\" class=\"no-results\">\n {{ 'ADF_PROCESS_LIST.DETAILS.TASKS.NO_COMPLETED' | translate }}\n</div>\n\n<ng-template *ngIf=\"hasStartFormDefined()\" #startDialog>\n <div id=\"adf-start-process-dialog\" class=\"adf-start-process-dialog\">\n <h4 matDialogTitle>{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.START_FORM'|translate }}</h4>\n <div mat-dialog-content class=\"adf-start-process-dialog-content\">\n <adf-start-form [processId]=\"processId\"\n [showRefreshButton]=\"false\" [readOnlyForm]=\"true\"\n (formContentClicked)='onFormContentClick()' />\n </div>\n <div mat-dialog-actions class=\"adf-start-process-dialog-actions\">\n <button mat-button type=\"button\" (click)=\"closeStartDialog()\">{{ 'ADF_PROCESS_LIST.DETAILS.TASKS.TASK_CLOSE' | translate }}</button>\n </div>\n </div>\n</ng-template>\n", styles: [":host{width:100%}.activiti-label{font-weight:bolder;vertical-align:top}.adf-process-badge{pointer-events:none;outline:none}.adf-chip-label{position:relative;top:5px;margin-right:8px;font-weight:700}.menu-container{margin-bottom:32px}.activiti-label+.icon{position:relative;top:-2px}.task-details-dialog{position:fixed;top:50%;transform:translateY(-50%);width:40%}.process-tasks-refresh{float:right}.adf-start-process-dialog{width:100%;height:100%;display:flex;flex-direction:column}.adf-start-process-dialog-content{flex-grow:1}.adf-start-process-dialog-actions{display:flex;justify-content:flex-end}.no-results{margin-left:9px;font-size:var(--theme-body-1-font-size);font-weight:400;letter-spacing:0;line-height:18px;color:#0000008a;display:block;padding:12px}.process-tasks__task-item{cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i5.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i6.MatList, selector: "mat-list", exportAs: ["matList"] }, { kind: "component", type: i6.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i6.MatListItemLine, selector: "[matListItemLine]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: StartFormComponent, selector: "adf-start-form", inputs: ["processDefinitionId", "processId", "showOutcomeButtons", "showRefreshButton", "readOnlyForm"], outputs: ["outcomeClick", "formContentClicked"] }] }); }
|
|
143
|
-
}
|
|
144
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProcessInstanceTasksComponent, decorators: [{
|
|
145
|
-
type: Component,
|
|
146
|
-
args: [{ selector: 'adf-process-instance-tasks', standalone: true, imports: [CommonModule, MatButtonModule, TranslatePipe, MatChipsModule, MatListModule, MatIconModule, MatDialogModule, StartFormComponent], template: "<div *ngIf=\"showRefreshButton\" class=\"process-tasks-refresh\" >\n <button mat-icon-button (click)=\"onRefreshClicked()\">\n <mat-icon class=\"md-24\" [attr.aria-label]=\"'ADF_PROCESS_LIST.DETAILS.LABELS.REFRESH' | translate\">refresh</mat-icon>\n </button>\n</div>\n\n<!-- ACTIVE FORM -->\n\n<mat-chip-listbox>\n <span class=\"adf-chip-label\">{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASKS_ACTIVE'|translate }}</span>\n <mat-chip-option class=\"adf-process-badge\" color=\"accent\" selected=\"true\">{{activeTasks?.length}}</mat-chip-option>\n</mat-chip-listbox>\n\n<div class=\"menu-container\" *ngIf=\"activeTasks?.length > 0\" data-automation-id=\"active-tasks\">\n <mat-list>\n <mat-list-item class=\"process-tasks__task-item\" *ngFor=\"let task of activeTasks\" (click)=\"clickTask(task)\">\n <mat-icon matListItemLine>assignment</mat-icon>\n <h3 matLine>{{task.name || 'Nameless task'}}</h3>\n <span matLine>\n {{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASK_SUBTITLE' | translate:{user: getUserFullName(task.assignee), created: getFormatDate(task.created, 'mediumDate') } }}\n </span>\n </mat-list-item>\n </mat-list>\n</div>\n\n<!-- START FORM -->\n\n<div *ngIf=\"activeTasks?.length === 0\" data-automation-id=\"active-tasks-none\" class=\"no-results\">\n {{ 'ADF_PROCESS_LIST.DETAILS.TASKS.NO_ACTIVE' | translate }}\n</div>\n\n<div *ngIf=\"hasStartFormDefined()\">\n <span class=\"adf-activiti-label\">{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.START_FORM'|translate }}</span>\n\n <!--IF START TASK COMPLETED -->\n <div class=\"menu-container\" data-automation-id=\"start-form\">\n <mat-list>\n <mat-list-item class=\"process-tasks__task-item\" (click)=\"clickStartTask()\">\n <mat-icon matListItemLine>assignment</mat-icon>\n <h3 matLine>{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.START_FORM'|translate }}</h3>\n <span matLine>\n {{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASK_SUBTITLE' | translate:{user:getUserFullName(processInstanceDetails.startedBy), created: getFormatDate(processInstanceDetails.started, 'mediumDate') } }}\n </span>\n </mat-list-item>\n </mat-list>\n </div>\n\n</div>\n\n<!-- COMPLETED FORM -->\n<mat-chip-listbox>\n <span class=\"adf-chip-label\">{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASKS_COMPLETED'|translate }}</span>\n <mat-chip-option class=\"adf-process-badge\" color=\"accent\" selected=\"true\">{{completedTasks?.length}}</mat-chip-option>\n</mat-chip-listbox>\n\n<div class=\"menu-container\" *ngIf=\"completedTasks?.length > 0\" data-automation-id=\"completed-tasks\">\n <mat-list>\n <mat-list-item class=\"process-tasks__task-item\" *ngFor=\"let task of completedTasks\" (click)=\"clickTask(task)\">\n <mat-icon matListItemLine>assignment</mat-icon>\n <h3 matLine>{{task.name || 'Nameless task'}}</h3>\n <span matLine>\n {{ 'ADF_PROCESS_LIST.DETAILS.LABELS.TASK_SUBTITLE' | translate:{user:getUserFullName(task.assignee), created: getFormatDate(task.created, 'mediumDate') } }}\n </span>\n </mat-list-item>\n </mat-list>\n</div>\n\n<div *ngIf=\"completedTasks?.length === 0\" data-automation-id=\"completed-tasks-none\" class=\"no-results\">\n {{ 'ADF_PROCESS_LIST.DETAILS.TASKS.NO_COMPLETED' | translate }}\n</div>\n\n<ng-template *ngIf=\"hasStartFormDefined()\" #startDialog>\n <div id=\"adf-start-process-dialog\" class=\"adf-start-process-dialog\">\n <h4 matDialogTitle>{{ 'ADF_PROCESS_LIST.DETAILS.LABELS.START_FORM'|translate }}</h4>\n <div mat-dialog-content class=\"adf-start-process-dialog-content\">\n <adf-start-form [processId]=\"processId\"\n [showRefreshButton]=\"false\" [readOnlyForm]=\"true\"\n (formContentClicked)='onFormContentClick()' />\n </div>\n <div mat-dialog-actions class=\"adf-start-process-dialog-actions\">\n <button mat-button type=\"button\" (click)=\"closeStartDialog()\">{{ 'ADF_PROCESS_LIST.DETAILS.TASKS.TASK_CLOSE' | translate }}</button>\n </div>\n </div>\n</ng-template>\n", styles: [":host{width:100%}.activiti-label{font-weight:bolder;vertical-align:top}.adf-process-badge{pointer-events:none;outline:none}.adf-chip-label{position:relative;top:5px;margin-right:8px;font-weight:700}.menu-container{margin-bottom:32px}.activiti-label+.icon{position:relative;top:-2px}.task-details-dialog{position:fixed;top:50%;transform:translateY(-50%);width:40%}.process-tasks-refresh{float:right}.adf-start-process-dialog{width:100%;height:100%;display:flex;flex-direction:column}.adf-start-process-dialog-content{flex-grow:1}.adf-start-process-dialog-actions{display:flex;justify-content:flex-end}.no-results{margin-left:9px;font-size:var(--theme-body-1-font-size);font-weight:400;letter-spacing:0;line-height:18px;color:#0000008a;display:block;padding:12px}.process-tasks__task-item{cursor:pointer}\n"] }]
|
|
147
|
-
}], ctorParameters: () => [{ type: i1.ProcessService }, { type: i2.MatDialog }], propDecorators: { processInstanceDetails: [{
|
|
148
|
-
type: Input,
|
|
149
|
-
args: [{ required: true }]
|
|
150
|
-
}], showRefreshButton: [{
|
|
151
|
-
type: Input
|
|
152
|
-
}], error: [{
|
|
153
|
-
type: Output
|
|
154
|
-
}], startDialog: [{
|
|
155
|
-
type: ViewChild,
|
|
156
|
-
args: ['startDialog']
|
|
157
|
-
}], taskDetails: [{
|
|
158
|
-
type: ViewChild,
|
|
159
|
-
args: ['taskDetails']
|
|
160
|
-
}], taskClick: [{
|
|
161
|
-
type: Output
|
|
162
|
-
}] } });
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1pbnN0YW5jZS10YXNrcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3Byb2Nlc3MtaW5zdGFuY2UtdGFza3MvcHJvY2Vzcy1pbnN0YW5jZS10YXNrcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3Byb2Nlc3MtaW5zdGFuY2UtdGFza3MvcHJvY2Vzcy1pbnN0YW5jZS10YXNrcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsNkJBQTZCLEVBQXNCLE1BQU0sa0JBQWtCLENBQUM7QUFDckYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFh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QkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7K0dBN0lRLDZCQUE2QjttR0FBN0IsNkJBQTZCLCtjQ3hDMUMsZ3RJQW9GQSw2MUJEaERjLFlBQVksK1BBQUUsZUFBZSxvVUFBRSxhQUFhLGlEQUFFLGNBQWMsOGNBQUUsYUFBYSx1V0FBRSxhQUFhLG1MQUFFLGVBQWUsMGJBQUUsa0JBQWtCOzs0RkFJaEksNkJBQTZCO2tCQVB6QyxTQUFTOytCQUNJLDRCQUE0QixjQUMxQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLENBQUM7MkdBTzFJLHNCQUFzQjtzQkFEckIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBUXpCLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixLQUFLO3NCQURKLE1BQU07Z0JBSVAsV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWE7Z0JBSXhCLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhO2dCQUt4QixTQUFTO3NCQURSLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhc2tEZXRhaWxzRXZlbnQgfSBmcm9tICcuLi8uLi8uLi90YXNrLWxpc3QnO1xuaW1wb3J0IHsgUHJvY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgc2hhcmUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbiwgVGFza1JlcHJlc2VudGF0aW9uIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2hpcHNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQgeyBNYXRMaXN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBTdGFydEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9mb3JtJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtcHJvY2Vzcy1pbnN0YW5jZS10YXNrcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIFRyYW5zbGF0ZVBpcGUsIE1hdENoaXBzTW9kdWxlLCBNYXRMaXN0TW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXREaWFsb2dNb2R1bGUsIFN0YXJ0Rm9ybUNvbXBvbmVudF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2Nlc3MtaW5zdGFuY2UtdGFza3MuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2Nlc3MtaW5zdGFuY2UtdGFza3MuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NJbnN0YW5jZVRhc2tzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiBUaGUgSUQgb2YgdGhlIHByb2Nlc3MgaW5zdGFuY2UgdG8gZGlzcGxheSB0YXNrcyBmb3IuICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwcm9jZXNzSW5zdGFuY2VEZXRhaWxzOiBQcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbjtcblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgd2hldGhlciB0byBzaG93IGEgcmVmcmVzaCBidXR0b24gbmV4dCB0byB0aGUgbGlzdCBvZiB0YXNrcyB0byBhbGxvd1xuICAgICAqIGl0IHRvIGJlIHVwZGF0ZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1JlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3N0YXJ0RGlhbG9nJylcbiAgICBzdGFydERpYWxvZzogYW55O1xuXG4gICAgQFZpZXdDaGlsZCgndGFza0RldGFpbHMnKVxuICAgIHRhc2tEZXRhaWxzOiBhbnk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgdGFzayBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHRhc2tDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VGFza0RldGFpbHNFdmVudD4oKTtcblxuICAgIGFjdGl2ZVRhc2tzOiBUYXNrUmVwcmVzZW50YXRpb25bXSA9IFtdO1xuICAgIGNvbXBsZXRlZFRhc2tzOiBUYXNrUmVwcmVzZW50YXRpb25bXSA9IFtdO1xuICAgIHRhc2skOiBPYnNlcnZhYmxlPFRhc2tSZXByZXNlbnRhdGlvbj47XG4gICAgY29tcGxldGVkVGFzayQ6IE9ic2VydmFibGU8VGFza1JlcHJlc2VudGF0aW9uPjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgcHJvY2Vzc0lkOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIHRhc2tPYnNlcnZlcjogT2JzZXJ2ZXI8VGFza1JlcHJlc2VudGF0aW9uPjtcbiAgICBwcml2YXRlIGNvbXBsZXRlZFRhc2tPYnNlcnZlcjogT2JzZXJ2ZXI8VGFza1JlcHJlc2VudGF0aW9uPjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvY2Vzc1NlcnZpY2U6IFByb2Nlc3NTZXJ2aWNlLCBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nKSB7XG4gICAgICAgIHRoaXMudGFzayQgPSBuZXcgT2JzZXJ2YWJsZTxUYXNrUmVwcmVzZW50YXRpb24+KChvYnNlcnZlcikgPT4gKHRoaXMudGFza09ic2VydmVyID0gb2JzZXJ2ZXIpKS5waXBlKHNoYXJlKCkpO1xuICAgICAgICB0aGlzLmNvbXBsZXRlZFRhc2skID0gbmV3IE9ic2VydmFibGU8VGFza1JlcHJlc2VudGF0aW9uPigob2JzZXJ2ZXIpID0+ICh0aGlzLmNvbXBsZXRlZFRhc2tPYnNlcnZlciA9IG9ic2VydmVyKSkucGlwZShzaGFyZSgpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy50YXNrJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHRhc2spID0+IHRoaXMuYWN0aXZlVGFza3MucHVzaCh0YXNrKSk7XG5cbiAgICAgICAgdGhpcy5jb21wbGV0ZWRUYXNrJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHRhc2spID0+IHRoaXMuY29tcGxldGVkVGFza3MucHVzaCh0YXNrKSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBwcm9jZXNzSW5zdGFuY2VEZXRhaWxzID0gY2hhbmdlc1sncHJvY2Vzc0luc3RhbmNlRGV0YWlscyddO1xuICAgICAgICBpZiAocHJvY2Vzc0luc3RhbmNlRGV0YWlscz8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWQocHJvY2Vzc0luc3RhbmNlRGV0YWlscy5jdXJyZW50VmFsdWUuaWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZChwcm9jZXNzSW5zdGFuY2VJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubG9hZEFjdGl2ZShwcm9jZXNzSW5zdGFuY2VJZCk7XG4gICAgICAgIHRoaXMubG9hZENvbXBsZXRlZChwcm9jZXNzSW5zdGFuY2VJZCk7XG4gICAgfVxuXG4gICAgbG9hZEFjdGl2ZShwcm9jZXNzSW5zdGFuY2VJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFza3MgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3NJbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTZXJ2aWNlLmdldFByb2Nlc3NUYXNrcyhwcm9jZXNzSW5zdGFuY2VJZCwgbnVsbCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmZvckVhY2goKHRhc2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFza09ic2VydmVyLm5leHQodGFzayk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYXNrcyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZENvbXBsZXRlZChwcm9jZXNzSW5zdGFuY2VJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGVkVGFza3MgPSBbXTtcbiAgICAgICAgaWYgKHByb2Nlc3NJbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTZXJ2aWNlLmdldFByb2Nlc3NUYXNrcyhwcm9jZXNzSW5zdGFuY2VJZCwgJ2NvbXBsZXRlZCcpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5mb3JFYWNoKCh0YXNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlZFRhc2tPYnNlcnZlci5uZXh0KHRhc2spO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGxldGVkVGFza3MgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1N0YXJ0Rm9ybURlZmluZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NJbnN0YW5jZURldGFpbHM/LnN0YXJ0Rm9ybURlZmluZWQgPT09IHRydWU7XG4gICAgfVxuXG4gICAgZ2V0VXNlckZ1bGxOYW1lKHVzZXI6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICByZXR1cm4gKHVzZXIuZmlyc3ROYW1lICYmIHVzZXIuZmlyc3ROYW1lICE9PSAnbnVsbCcgPyB1c2VyLmZpcnN0TmFtZSArICcgJyA6ICcnKSArIHVzZXIubGFzdE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdOb2JvZHknO1xuICAgIH1cblxuICAgIGdldEZvcm1hdERhdGUodmFsdWU6IGFueSwgZm9ybWF0OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSgnZW4tVVMnKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsIGZvcm1hdCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xpY2tUYXNrKHRhc2s6IFRhc2tSZXByZXNlbnRhdGlvbikge1xuICAgICAgICBjb25zdCBhcmdzID0gbmV3IFRhc2tEZXRhaWxzRXZlbnQodGFzayk7XG4gICAgICAgIHRoaXMudGFza0NsaWNrLmVtaXQoYXJncyk7XG4gICAgfVxuXG4gICAgY2xpY2tTdGFydFRhc2soKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0lkID0gdGhpcy5wcm9jZXNzSW5zdGFuY2VEZXRhaWxzLmlkO1xuICAgICAgICB0aGlzLnNob3dTdGFydERpYWxvZygpO1xuICAgIH1cblxuICAgIHNob3dTdGFydERpYWxvZygpIHtcbiAgICAgICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLnN0YXJ0RGlhbG9nLCB7IGhlaWdodDogJzUwMHB4Jywgd2lkdGg6ICc3MDBweCcgfSk7XG4gICAgfVxuXG4gICAgY2xvc2VTdGFydERpYWxvZygpIHtcbiAgICAgICAgdGhpcy5kaWFsb2cuY2xvc2VBbGwoKTtcbiAgICB9XG5cbiAgICBvblJlZnJlc2hDbGlja2VkKCkge1xuICAgICAgICB0aGlzLmxvYWQodGhpcy5wcm9jZXNzSW5zdGFuY2VEZXRhaWxzLmlkKTtcbiAgICB9XG5cbiAgICBvbkZvcm1Db250ZW50Q2xpY2soKSB7XG4gICAgICAgIHRoaXMuY2xvc2VTdGFydERpYWxvZygpO1xuICAgIH1cbn1cbiIsIjxkaXYgICpuZ0lmPVwic2hvd1JlZnJlc2hCdXR0b25cIiBjbGFzcz1cInByb2Nlc3MtdGFza3MtcmVmcmVzaFwiID5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib25SZWZyZXNoQ2xpY2tlZCgpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1kLTI0XCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGX1BST0NFU1NfTElTVC5ERVRBSUxTLkxBQkVMUy5SRUZSRVNIJyB8IHRyYW5zbGF0ZVwiPnJlZnJlc2g8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjwhLS0gQUNUSVZFIEZPUk0gLS0+XG5cbjxtYXQtY2hpcC1saXN0Ym94PlxuICAgIDxzcGFuIGNsYXNzPVwiYWRmLWNoaXAtbGFiZWxcIj57eyAnQURGX1BST0NFU1NfTElTVC5ERVRBSUxTLkxBQkVMUy5UQVNLU19BQ1RJVkUnfHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8bWF0LWNoaXAtb3B0aW9uIGNsYXNzPVwiYWRmLXByb2Nlc3MtYmFkZ2VcIiBjb2xvcj1cImFjY2VudFwiIHNlbGVjdGVkPVwidHJ1ZVwiPnt7YWN0aXZlVGFza3M/Lmxlbmd0aH19PC9tYXQtY2hpcC1vcHRpb24+XG48L21hdC1jaGlwLWxpc3Rib3g+XG5cbjxkaXYgY2xhc3M9XCJtZW51LWNvbnRhaW5lclwiICpuZ0lmPVwiYWN0aXZlVGFza3M/Lmxlbmd0aCA+IDBcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJhY3RpdmUtdGFza3NcIj5cbiAgICA8bWF0LWxpc3Q+XG4gICAgICAgIDxtYXQtbGlzdC1pdGVtIGNsYXNzPVwicHJvY2Vzcy10YXNrc19fdGFzay1pdGVtXCIgKm5nRm9yPVwibGV0IHRhc2sgb2YgYWN0aXZlVGFza3NcIiAoY2xpY2spPVwiY2xpY2tUYXNrKHRhc2spXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdExpc3RJdGVtTGluZT5hc3NpZ25tZW50PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8aDMgbWF0TGluZT57e3Rhc2submFtZSB8fCAnTmFtZWxlc3MgdGFzayd9fTwvaDM+XG4gICAgICAgICAgICAgICAgPHNwYW4gbWF0TGluZT5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0FERl9QUk9DRVNTX0xJU1QuREVUQUlMUy5MQUJFTFMuVEFTS19TVUJUSVRMRScgfCB0cmFuc2xhdGU6e3VzZXI6IGdldFVzZXJGdWxsTmFtZSh0YXNrLmFzc2lnbmVlKSwgY3JlYXRlZDogZ2V0Rm9ybWF0RGF0ZSh0YXNrLmNyZWF0ZWQsICdtZWRpdW1EYXRlJykgfSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgIDwvbWF0LWxpc3Q+XG48L2Rpdj5cblxuPCEtLSBTVEFSVCBGT1JNIC0tPlxuXG48ZGl2ICpuZ0lmPVwiYWN0aXZlVGFza3M/Lmxlbmd0aCA9PT0gMFwiIGRhdGEtYXV0b21hdGlvbi1pZD1cImFjdGl2ZS10YXNrcy1ub25lXCIgY2xhc3M9XCJuby1yZXN1bHRzXCI+XG4gICAge3sgJ0FERl9QUk9DRVNTX0xJU1QuREVUQUlMUy5UQVNLUy5OT19BQ1RJVkUnIHwgdHJhbnNsYXRlIH19XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cImhhc1N0YXJ0Rm9ybURlZmluZWQoKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiYWRmLWFjdGl2aXRpLWxhYmVsXCI+e3sgJ0FERl9QUk9DRVNTX0xJU1QuREVUQUlMUy5MQUJFTFMuU1RBUlRfRk9STSd8dHJhbnNsYXRlIH19PC9zcGFuPlxuXG4gICAgPCEtLUlGIFNUQVJUIFRBU0sgQ09NUExFVEVEIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtZW51LWNvbnRhaW5lclwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInN0YXJ0LWZvcm1cIj5cbiAgICAgICAgPG1hdC1saXN0PlxuICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gY2xhc3M9XCJwcm9jZXNzLXRhc2tzX190YXNrLWl0ZW1cIiAoY2xpY2spPVwiY2xpY2tTdGFydFRhc2soKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUxpbmU+YXNzaWdubWVudDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGgzIG1hdExpbmU+e3sgJ0FERl9QUk9DRVNTX0xJU1QuREVUQUlMUy5MQUJFTFMuU1RBUlRfRk9STSd8dHJhbnNsYXRlIH19PC9oMz5cbiAgICAgICAgICAgICAgICA8c3BhbiBtYXRMaW5lPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQURGX1BST0NFU1NfTElTVC5ERVRBSUxTLkxBQkVMUy5UQVNLX1NVQlRJVExFJyB8IHRyYW5zbGF0ZTp7dXNlcjpnZXRVc2VyRnVsbE5hbWUocHJvY2Vzc0luc3RhbmNlRGV0YWlscy5zdGFydGVkQnkpLCBjcmVhdGVkOiBnZXRGb3JtYXREYXRlKHByb2Nlc3NJbnN0YW5jZURldGFpbHMuc3RhcnRlZCwgJ21lZGl1bURhdGUnKSB9IH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgICAgICA8L21hdC1saXN0PlxuICAgIDwvZGl2PlxuXG48L2Rpdj5cblxuPCEtLSBDT01QTEVURUQgRk9STSAtLT5cbjxtYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1jaGlwLWxhYmVsXCI+e3sgJ0FERl9QUk9DRVNTX0xJU1QuREVUQUlMUy5MQUJFTFMuVEFTS1NfQ09NUExFVEVEJ3x0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDxtYXQtY2hpcC1vcHRpb24gY2xhc3M9XCJhZGYtcHJvY2Vzcy1iYWRnZVwiIGNvbG9yPVwiYWNjZW50XCIgc2VsZWN0ZWQ9XCJ0cnVlXCI+e3tjb21wbGV0ZWRUYXNrcz8ubGVuZ3RofX08L21hdC1jaGlwLW9wdGlvbj5cbjwvbWF0LWNoaXAtbGlzdGJveD5cblxuPGRpdiBjbGFzcz1cIm1lbnUtY29udGFpbmVyXCIgKm5nSWY9XCJjb21wbGV0ZWRUYXNrcz8ubGVuZ3RoID4gMFwiIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbXBsZXRlZC10YXNrc1wiPlxuICAgIDxtYXQtbGlzdD5cbiAgICAgICAgPG1hdC1saXN0LWl0ZW0gY2xhc3M9XCJwcm9jZXNzLXRhc2tzX190YXNrLWl0ZW1cIiAqbmdGb3I9XCJsZXQgdGFzayBvZiBjb21wbGV0ZWRUYXNrc1wiIChjbGljayk9XCJjbGlja1Rhc2sodGFzaylcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRMaXN0SXRlbUxpbmU+YXNzaWdubWVudDwvbWF0LWljb24+XG4gICAgICAgICAgICA8aDMgbWF0TGluZT57e3Rhc2submFtZSB8fCAnTmFtZWxlc3MgdGFzayd9fTwvaDM+XG4gICAgICAgICAgICA8c3BhbiBtYXRMaW5lPlxuICAgICAgICAgICAgICAgIHt7ICdBREZfUFJPQ0VTU19MSVNULkRFVEFJTFMuTEFCRUxTLlRBU0tfU1VCVElUTEUnIHwgdHJhbnNsYXRlOnt1c2VyOmdldFVzZXJGdWxsTmFtZSh0YXNrLmFzc2lnbmVlKSwgY3JlYXRlZDogZ2V0Rm9ybWF0RGF0ZSh0YXNrLmNyZWF0ZWQsICdtZWRpdW1EYXRlJykgfSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgPC9tYXQtbGlzdD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiY29tcGxldGVkVGFza3M/Lmxlbmd0aCA9PT0gMFwiIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbXBsZXRlZC10YXNrcy1ub25lXCIgY2xhc3M9XCJuby1yZXN1bHRzXCI+XG4gICAge3sgJ0FERl9QUk9DRVNTX0xJU1QuREVUQUlMUy5UQVNLUy5OT19DT01QTEVURUQnIHwgdHJhbnNsYXRlIH19XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICpuZ0lmPVwiaGFzU3RhcnRGb3JtRGVmaW5lZCgpXCIgI3N0YXJ0RGlhbG9nPlxuICAgIDxkaXYgaWQ9XCJhZGYtc3RhcnQtcHJvY2Vzcy1kaWFsb2dcIiBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWRpYWxvZ1wiPlxuICAgICAgICA8aDQgbWF0RGlhbG9nVGl0bGU+e3sgJ0FERl9QUk9DRVNTX0xJU1QuREVUQUlMUy5MQUJFTFMuU1RBUlRfRk9STSd8dHJhbnNsYXRlIH19PC9oND5cbiAgICAgICAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJhZGYtc3RhcnQtcHJvY2Vzcy1kaWFsb2ctY29udGVudFwiPlxuICAgICAgICAgICAgPGFkZi1zdGFydC1mb3JtIFtwcm9jZXNzSWRdPVwicHJvY2Vzc0lkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93UmVmcmVzaEJ1dHRvbl09XCJmYWxzZVwiIFtyZWFkT25seUZvcm1dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybUNvbnRlbnRDbGlja2VkKT0nb25Gb3JtQ29udGVudENsaWNrKCknIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBjbGFzcz1cImFkZi1zdGFydC1wcm9jZXNzLWRpYWxvZy1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZVN0YXJ0RGlhbG9nKClcIj57eyAnQURGX1BST0NFU1NfTElTVC5ERVRBSUxTLlRBU0tTLlRBU0tfQ0xPU0UnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
* you may not use this file except in compliance with the License.
|
|
7
|
-
* You may obtain a copy of the License at
|
|
8
|
-
*
|
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
*
|
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
-
* See the License for the specific language governing permissions and
|
|
15
|
-
* limitations under the License.
|
|
16
|
-
*/
|
|
17
|
-
import { DataTableSchema, CustomEmptyContentTemplateDirective, CustomLoadingContentTemplateDirective, AppConfigService, UserPreferencesService, DEFAULT_PAGINATION, EmptyContentComponent, DataTableComponent, LoadingContentTemplateDirective, NoContentTemplateDirective } from '@alfresco/adf-core';
|
|
18
|
-
import { Component, ContentChild, EventEmitter, Input, Output } from '@angular/core';
|
|
19
|
-
import { ProcessService } from '../../services/process.service';
|
|
20
|
-
import { BehaviorSubject } from 'rxjs';
|
|
21
|
-
import { finalize } from 'rxjs/operators';
|
|
22
|
-
import { CommonModule } from '@angular/common';
|
|
23
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
24
|
-
import { TranslatePipe } from '@ngx-translate/core';
|
|
25
|
-
import * as i0 from "@angular/core";
|
|
26
|
-
import * as i1 from "../../services/process.service";
|
|
27
|
-
import * as i2 from "@alfresco/adf-core";
|
|
28
|
-
import * as i3 from "@angular/common";
|
|
29
|
-
import * as i4 from "@angular/material/progress-spinner";
|
|
30
|
-
const PRESET_KEY = 'adf-process-list.presets';
|
|
31
|
-
export const processPresetsDefaultModel = {
|
|
32
|
-
default: [
|
|
33
|
-
{
|
|
34
|
-
key: 'name',
|
|
35
|
-
type: 'text',
|
|
36
|
-
title: 'ADF_PROCESS_LIST.PROPERTIES.NAME',
|
|
37
|
-
sortable: true
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
key: 'created',
|
|
41
|
-
type: 'text',
|
|
42
|
-
title: 'ADF_PROCESS_LIST.PROPERTIES.CREATED',
|
|
43
|
-
cssClass: 'hidden',
|
|
44
|
-
sortable: true
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
};
|
|
48
|
-
export class ProcessInstanceListComponent extends DataTableSchema {
|
|
49
|
-
constructor(processService, userPreferences, appConfig) {
|
|
50
|
-
super(appConfig, PRESET_KEY, processPresetsDefaultModel);
|
|
51
|
-
this.processService = processService;
|
|
52
|
-
this.userPreferences = userPreferences;
|
|
53
|
-
/** The page number of the processes to fetch. */
|
|
54
|
-
this.page = 0;
|
|
55
|
-
/** The number of processes to fetch in each page. */
|
|
56
|
-
this.size = DEFAULT_PAGINATION.maxItems;
|
|
57
|
-
/** Toggles multiple row selection, which renders checkboxes at the beginning of each row */
|
|
58
|
-
this.multiselect = false;
|
|
59
|
-
/**
|
|
60
|
-
* Row selection mode. Can be none, `single` or `multiple`. For `multiple` mode,
|
|
61
|
-
* you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for
|
|
62
|
-
* multiple rows.
|
|
63
|
-
*/
|
|
64
|
-
this.selectionMode = 'single'; // none|single|multiple
|
|
65
|
-
/** Toggles default selection of the first row */
|
|
66
|
-
this.selectFirstRow = true;
|
|
67
|
-
/** Toggles the sticky header mode. */
|
|
68
|
-
this.stickyHeader = false;
|
|
69
|
-
/** Toggles custom context menu for the component. */
|
|
70
|
-
this.showContextMenu = false;
|
|
71
|
-
/** Enables column resizing for datatable */
|
|
72
|
-
this.isResizingEnabled = false;
|
|
73
|
-
/** Enables blur when resizing datatable columns */
|
|
74
|
-
this.blurOnResize = true;
|
|
75
|
-
/** Emitted before the context menu is displayed for a row. */
|
|
76
|
-
this.showRowContextMenu = new EventEmitter();
|
|
77
|
-
/**
|
|
78
|
-
* Resolver function is used to show dynamic complex column objects
|
|
79
|
-
* see the docs to learn how to configure a resolverFn.
|
|
80
|
-
*/
|
|
81
|
-
this.resolverFn = null;
|
|
82
|
-
/** Emitted when a row in the process list is clicked. */
|
|
83
|
-
this.rowClick = new EventEmitter();
|
|
84
|
-
/** Emitted when the list of process instances has been loaded successfully from the server. */
|
|
85
|
-
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
86
|
-
this.success = new EventEmitter();
|
|
87
|
-
/** Emitted when an error occurs while loading the list of process instances from the server. */
|
|
88
|
-
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
89
|
-
this.error = new EventEmitter();
|
|
90
|
-
/** Emitted when rows are selected/unselected */
|
|
91
|
-
this.rowsSelected = new EventEmitter();
|
|
92
|
-
this.isLoading = true;
|
|
93
|
-
this.rows = [];
|
|
94
|
-
this.sorting = ['created', 'desc'];
|
|
95
|
-
this.size = this.userPreferences.paginationSize;
|
|
96
|
-
this.pagination = new BehaviorSubject({
|
|
97
|
-
maxItems: this.size,
|
|
98
|
-
skipCount: 0,
|
|
99
|
-
totalItems: 0
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
ngAfterContentInit() {
|
|
103
|
-
this.createDatatableSchema();
|
|
104
|
-
if (this.data?.getColumns().length === 0) {
|
|
105
|
-
this.data.setColumns(this.columns);
|
|
106
|
-
}
|
|
107
|
-
if (this.appId != null) {
|
|
108
|
-
this.reload();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
ngOnChanges(changes) {
|
|
112
|
-
if (this.isPropertyChanged(changes)) {
|
|
113
|
-
if (this.isSortChanged(changes)) {
|
|
114
|
-
this.sorting = this.sort ? this.sort.split('-') : this.sorting;
|
|
115
|
-
}
|
|
116
|
-
this.reload();
|
|
117
|
-
}
|
|
118
|
-
const presetColumnChanges = changes['presetColumn'];
|
|
119
|
-
if (presetColumnChanges && !presetColumnChanges.firstChange) {
|
|
120
|
-
this.columns = this.mergeJsonAndHtmlSchema();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
reload() {
|
|
124
|
-
this.requestNode = this.createRequestNode();
|
|
125
|
-
this.load(this.requestNode);
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Select the first instance of a list if present
|
|
129
|
-
*/
|
|
130
|
-
selectFirst() {
|
|
131
|
-
if (this.selectFirstRow) {
|
|
132
|
-
if (!this.isListEmpty()) {
|
|
133
|
-
const dataRow = this.rows[0];
|
|
134
|
-
dataRow.isSelected = true;
|
|
135
|
-
this.currentInstanceId = dataRow['id'];
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
this.currentInstanceId = null;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Get the id of the current instance
|
|
144
|
-
*
|
|
145
|
-
* @returns instance id
|
|
146
|
-
*/
|
|
147
|
-
getCurrentId() {
|
|
148
|
-
return this.currentInstanceId;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Check if the list is empty
|
|
152
|
-
*
|
|
153
|
-
* @returns `true` if list is empty, otherwise `false`
|
|
154
|
-
*/
|
|
155
|
-
isListEmpty() {
|
|
156
|
-
return !this.rows || this.rows.length === 0;
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Emit the event rowClick passing the current task id when the row is clicked
|
|
160
|
-
*
|
|
161
|
-
* @param event input event
|
|
162
|
-
*/
|
|
163
|
-
onRowClick(event) {
|
|
164
|
-
const item = event;
|
|
165
|
-
this.currentInstanceId = item.value.getValue('id');
|
|
166
|
-
this.rowClick.emit(this.currentInstanceId);
|
|
167
|
-
}
|
|
168
|
-
onRowCheckboxToggle(event) {
|
|
169
|
-
this.rowsSelected.emit([...event.detail.selection]);
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Emit the event rowClick passing the current task id when pressed the Enter key on the selected row
|
|
173
|
-
*
|
|
174
|
-
* @param event keyboard event
|
|
175
|
-
*/
|
|
176
|
-
onRowKeyUp(event) {
|
|
177
|
-
if (event.detail.keyboardEvent.key === 'Enter') {
|
|
178
|
-
event.preventDefault();
|
|
179
|
-
this.currentInstanceId = event.detail.row.getValue('id');
|
|
180
|
-
this.rowClick.emit(this.currentInstanceId);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
onShowRowContextMenu(event) {
|
|
184
|
-
this.showRowContextMenu.emit(event);
|
|
185
|
-
}
|
|
186
|
-
updatePagination(params) {
|
|
187
|
-
const needsReload = params.maxItems || params.skipCount;
|
|
188
|
-
this.size = params.maxItems;
|
|
189
|
-
this.page = this.currentPage(params.skipCount, params.maxItems);
|
|
190
|
-
if (needsReload) {
|
|
191
|
-
this.reload();
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
currentPage(skipCount, maxItems) {
|
|
195
|
-
return skipCount && maxItems ? Math.floor(skipCount / maxItems) : 0;
|
|
196
|
-
}
|
|
197
|
-
createRequestNode() {
|
|
198
|
-
return {
|
|
199
|
-
appDefinitionId: this.appId,
|
|
200
|
-
processDefinitionId: this.processDefinitionId,
|
|
201
|
-
processInstanceId: this.processInstanceId,
|
|
202
|
-
state: this.state,
|
|
203
|
-
sort: this.sort,
|
|
204
|
-
page: this.page,
|
|
205
|
-
size: this.size,
|
|
206
|
-
start: 0
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
isSortChanged(changes) {
|
|
210
|
-
const actualSort = changes['sort'];
|
|
211
|
-
return actualSort?.currentValue && actualSort.currentValue !== actualSort.previousValue;
|
|
212
|
-
}
|
|
213
|
-
isPropertyChanged(changes) {
|
|
214
|
-
let changed = false;
|
|
215
|
-
const appId = changes['appId'];
|
|
216
|
-
const processDefinitionId = changes['processDefinitionId'];
|
|
217
|
-
const processInstanceId = changes['processInstanceId'];
|
|
218
|
-
const state = changes['state'];
|
|
219
|
-
const sort = changes['sort'];
|
|
220
|
-
const page = changes['page'];
|
|
221
|
-
const size = changes['size'];
|
|
222
|
-
if (appId?.currentValue) {
|
|
223
|
-
changed = true;
|
|
224
|
-
}
|
|
225
|
-
else if (processDefinitionId) {
|
|
226
|
-
changed = true;
|
|
227
|
-
}
|
|
228
|
-
else if (processInstanceId) {
|
|
229
|
-
changed = true;
|
|
230
|
-
}
|
|
231
|
-
else if (state?.currentValue) {
|
|
232
|
-
changed = true;
|
|
233
|
-
}
|
|
234
|
-
else if (sort?.currentValue) {
|
|
235
|
-
changed = true;
|
|
236
|
-
}
|
|
237
|
-
else if (page && page?.currentValue !== page.previousValue) {
|
|
238
|
-
changed = true;
|
|
239
|
-
}
|
|
240
|
-
else if (size && size.currentValue !== size.previousValue) {
|
|
241
|
-
changed = true;
|
|
242
|
-
}
|
|
243
|
-
return changed;
|
|
244
|
-
}
|
|
245
|
-
load(requestNode) {
|
|
246
|
-
this.isLoading = true;
|
|
247
|
-
this.processService
|
|
248
|
-
.getProcesses(requestNode)
|
|
249
|
-
.pipe(finalize(() => (this.isLoading = false)))
|
|
250
|
-
.subscribe((response) => {
|
|
251
|
-
this.rows = response.data;
|
|
252
|
-
this.selectFirst();
|
|
253
|
-
this.success.emit(response);
|
|
254
|
-
this.pagination.next({
|
|
255
|
-
count: (response.data || []).length,
|
|
256
|
-
maxItems: this.size,
|
|
257
|
-
skipCount: this.page * this.size,
|
|
258
|
-
totalItems: response.total
|
|
259
|
-
});
|
|
260
|
-
}, (error) => {
|
|
261
|
-
this.error.emit(error);
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProcessInstanceListComponent, deps: [{ token: i1.ProcessService }, { token: i2.UserPreferencesService }, { token: i2.AppConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
265
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ProcessInstanceListComponent, isStandalone: true, selector: "adf-process-instance-list", inputs: { appId: "appId", processDefinitionId: "processDefinitionId", processInstanceId: "processInstanceId", state: "state", sort: "sort", page: "page", size: "size", data: "data", multiselect: "multiselect", selectionMode: "selectionMode", selectFirstRow: "selectFirstRow", stickyHeader: "stickyHeader", showContextMenu: "showContextMenu", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize", resolverFn: "resolverFn" }, outputs: { showRowContextMenu: "showRowContextMenu", rowClick: "rowClick", success: "success", error: "error", rowsSelected: "rowsSelected" }, queries: [{ propertyName: "customEmptyContent", first: true, predicate: CustomEmptyContentTemplateDirective, descendants: true }, { propertyName: "customLoadingContent", first: true, predicate: CustomLoadingContentTemplateDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<adf-datatable\n [data]=\"data\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [sorting]=\"sorting\"\n [loading]=\"isLoading\"\n [isResizingEnabled]=\"isResizingEnabled\"\n [blurOnResize]=\"blurOnResize\"\n [stickyHeader]=\"stickyHeader\"\n [selectionMode]=\"selectionMode\"\n [multiselect]=\"multiselect\"\n [resolverFn]=\"resolverFn\"\n [contextMenu]=\"showContextMenu\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (rowClick)=\"onRowClick($event)\"\n (row-keyup)=\"onRowKeyUp($any($event))\"\n (row-select)=\"onRowCheckboxToggle($any($event))\"\n (row-unselect)=\"onRowCheckboxToggle($any($event))\"\n>\n <adf-loading-content-template>\n <ng-template>\n <mat-progress-spinner\n *ngIf=\"!customLoadingContent\"\n class=\"adf-process-list-loading-margin\"\n color=\"primary\"\n mode=\"indeterminate\" />\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n <adf-no-content-template>\n <ng-template>\n <adf-empty-content *ngIf=\"!customEmptyContent\"\n icon=\"assessment\"\n [title]=\"(requestNode ? 'ADF_PROCESS_LIST.LIST.TITLE' : 'ADF_PROCESS_LIST.FILTERS.MESSAGES.NONE') | translate\"\n [subtitle]=\"'ADF_PROCESS_LIST.LIST.SUBTITLE'| translate\" />\n <ng-content select=\"adf-custom-empty-content-template\" />\n </ng-template>\n </adf-no-content-template>\n</adf-datatable>\n", styles: [".adf-process-list-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}.no-content-message{font-size:var(--theme-subheading-2-font-size);font-weight:700;text-align:center;opacity:.54;color:#000}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: DataTableComponent, selector: "adf-datatable", inputs: ["data", "rows", "sorting", "columns", "selectionMode", "multiselect", "mainTableAction", "actions", "showMainDatatableActions", "showProvidedActions", "actionsPosition", "actionsVisibleOnHover", "fallbackThumbnail", "contextMenu", "rowStyle", "rowStyleClass", "showHeader", "stickyHeader", "loading", "noPermission", "rowMenuCacheEnabled", "resolverFn", "allowFiltering", "isResizingEnabled", "blurOnResize", "displayCheckboxesOnHover", "enableDragRows"], outputs: ["rowClick", "rowDblClick", "showRowContextMenu", "showRowActionsMenu", "executeRowAction", "columnOrderChanged", "columnsWidthChanged", "selectedItemsCountChanged", "dragDropped"] }, { kind: "directive", type: LoadingContentTemplateDirective, selector: "adf-loading-content-template, loading-content-template" }, { kind: "directive", type: NoContentTemplateDirective, selector: "adf-no-content-template, no-content-template" }] }); }
|
|
266
|
-
}
|
|
267
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProcessInstanceListComponent, decorators: [{
|
|
268
|
-
type: Component,
|
|
269
|
-
args: [{ selector: 'adf-process-instance-list', standalone: true, imports: [
|
|
270
|
-
CommonModule,
|
|
271
|
-
MatProgressSpinnerModule,
|
|
272
|
-
EmptyContentComponent,
|
|
273
|
-
TranslatePipe,
|
|
274
|
-
DataTableComponent,
|
|
275
|
-
LoadingContentTemplateDirective,
|
|
276
|
-
NoContentTemplateDirective
|
|
277
|
-
], template: "<adf-datatable\n [data]=\"data\"\n [rows]=\"rows\"\n [columns]=\"columns\"\n [sorting]=\"sorting\"\n [loading]=\"isLoading\"\n [isResizingEnabled]=\"isResizingEnabled\"\n [blurOnResize]=\"blurOnResize\"\n [stickyHeader]=\"stickyHeader\"\n [selectionMode]=\"selectionMode\"\n [multiselect]=\"multiselect\"\n [resolverFn]=\"resolverFn\"\n [contextMenu]=\"showContextMenu\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (rowClick)=\"onRowClick($event)\"\n (row-keyup)=\"onRowKeyUp($any($event))\"\n (row-select)=\"onRowCheckboxToggle($any($event))\"\n (row-unselect)=\"onRowCheckboxToggle($any($event))\"\n>\n <adf-loading-content-template>\n <ng-template>\n <mat-progress-spinner\n *ngIf=\"!customLoadingContent\"\n class=\"adf-process-list-loading-margin\"\n color=\"primary\"\n mode=\"indeterminate\" />\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n <adf-no-content-template>\n <ng-template>\n <adf-empty-content *ngIf=\"!customEmptyContent\"\n icon=\"assessment\"\n [title]=\"(requestNode ? 'ADF_PROCESS_LIST.LIST.TITLE' : 'ADF_PROCESS_LIST.FILTERS.MESSAGES.NONE') | translate\"\n [subtitle]=\"'ADF_PROCESS_LIST.LIST.SUBTITLE'| translate\" />\n <ng-content select=\"adf-custom-empty-content-template\" />\n </ng-template>\n </adf-no-content-template>\n</adf-datatable>\n", styles: [".adf-process-list-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}.no-content-message{font-size:var(--theme-subheading-2-font-size);font-weight:700;text-align:center;opacity:.54;color:#000}\n"] }]
|
|
278
|
-
}], ctorParameters: () => [{ type: i1.ProcessService }, { type: i2.UserPreferencesService }, { type: i2.AppConfigService }], propDecorators: { customEmptyContent: [{
|
|
279
|
-
type: ContentChild,
|
|
280
|
-
args: [CustomEmptyContentTemplateDirective]
|
|
281
|
-
}], customLoadingContent: [{
|
|
282
|
-
type: ContentChild,
|
|
283
|
-
args: [CustomLoadingContentTemplateDirective]
|
|
284
|
-
}], appId: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], processDefinitionId: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}], processInstanceId: [{
|
|
289
|
-
type: Input
|
|
290
|
-
}], state: [{
|
|
291
|
-
type: Input
|
|
292
|
-
}], sort: [{
|
|
293
|
-
type: Input
|
|
294
|
-
}], page: [{
|
|
295
|
-
type: Input
|
|
296
|
-
}], size: [{
|
|
297
|
-
type: Input
|
|
298
|
-
}], data: [{
|
|
299
|
-
type: Input
|
|
300
|
-
}], multiselect: [{
|
|
301
|
-
type: Input
|
|
302
|
-
}], selectionMode: [{
|
|
303
|
-
type: Input
|
|
304
|
-
}], selectFirstRow: [{
|
|
305
|
-
type: Input
|
|
306
|
-
}], stickyHeader: [{
|
|
307
|
-
type: Input
|
|
308
|
-
}], showContextMenu: [{
|
|
309
|
-
type: Input
|
|
310
|
-
}], isResizingEnabled: [{
|
|
311
|
-
type: Input
|
|
312
|
-
}], blurOnResize: [{
|
|
313
|
-
type: Input
|
|
314
|
-
}], showRowContextMenu: [{
|
|
315
|
-
type: Output
|
|
316
|
-
}], resolverFn: [{
|
|
317
|
-
type: Input
|
|
318
|
-
}], rowClick: [{
|
|
319
|
-
type: Output
|
|
320
|
-
}], success: [{
|
|
321
|
-
type: Output
|
|
322
|
-
}], error: [{
|
|
323
|
-
type: Output
|
|
324
|
-
}], rowsSelected: [{
|
|
325
|
-
type: Output
|
|
326
|
-
}] } });
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzL3NyYy9saWIvcHJvY2Vzcy1saXN0L2NvbXBvbmVudHMvcHJvY2Vzcy1saXN0L3Byb2Nlc3MtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3Byb2Nlc3MtbGlzdC9wcm9jZXNzLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUNILGVBQWUsRUFHZixtQ0FBbUMsRUFDbkMscUNBQXFDLEVBR3JDLGdCQUFnQixFQUdoQixzQkFBc0IsRUFFdEIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsK0JBQStCLEVBQy9CLDBCQUEwQixFQUU3QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBb0IsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7OztBQUVwRCxNQUFNLFVBQVUsR0FBRywwQkFBMEIsQ0FBQztBQUU5QyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRztJQUN0QyxPQUFPLEVBQUU7UUFDTDtZQUNJLEdBQUcsRUFBRSxNQUFNO1lBQ1gsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsa0NBQWtDO1lBQ3pDLFFBQVEsRUFBRSxJQUFJO1NBQ2pCO1FBQ0Q7WUFDSSxHQUFHLEVBQUUsU0FBUztZQUNkLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLHFDQUFxQztZQUM1QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsSUFBSTtTQUNqQjtLQUNKO0NBQ0osQ0FBQztBQWlCRixNQUFNLE9BQU8sNEJBQTZCLFNBQVEsZUFBZTtJQTZHN0QsWUFBb0IsY0FBOEIsRUFBVSxlQUF1QyxFQUFFLFNBQTJCO1FBQzVILEtBQUssQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFEekMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBaEZuRyxpREFBaUQ7UUFFakQsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUVqQixxREFBcUQ7UUFFckQsU0FBSSxHQUFXLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztRQU0zQyw0RkFBNEY7UUFFNUYsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0I7Ozs7V0FJRztRQUVILGtCQUFhLEdBQVcsUUFBUSxDQUFDLENBQUMsdUJBQXVCO1FBRXpELGlEQUFpRDtRQUVqRCxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUUvQixzQ0FBc0M7UUFFdEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFOUIscURBQXFEO1FBRXJELG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLDRDQUE0QztRQUU1QyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFMUIsbURBQW1EO1FBRW5ELGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLDhEQUE4RDtRQUU5RCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUV2RDs7O1dBR0c7UUFFSCxlQUFVLEdBQTJDLElBQUksQ0FBQztRQUUxRCx5REFBeUQ7UUFFekQsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFdEMsK0ZBQStGO1FBQy9GLDREQUE0RDtRQUU1RCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQTZELENBQUM7UUFFeEYsZ0dBQWdHO1FBQ2hHLDREQUE0RDtRQUU1RCxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVoQyxnREFBZ0Q7UUFFaEQsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUluRCxjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLFNBQUksR0FBVSxFQUFFLENBQUM7UUFDakIsWUFBTyxHQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBS2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUM7UUFFaEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBa0I7WUFDbkQsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ25CLFNBQVMsRUFBRSxDQUFDO1lBQ1osVUFBVSxFQUFFLENBQUM7U0FDaEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRTdCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDbkUsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDakQsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUNsQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVztRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxLQUFtQjtRQUMxQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFrQjtRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEtBQXVCO1FBQzlCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUV2QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBb0I7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBdUI7UUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRXhELElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFpQixFQUFFLFFBQWdCO1FBQzNDLE9BQU8sU0FBUyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE9BQU87WUFDSCxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDM0IsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUM3QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3pDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixLQUFLLEVBQUUsQ0FBQztTQUNYLENBQUM7SUFDTixDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQXNCO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxPQUFPLFVBQVUsRUFBRSxZQUFZLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQzVGLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxPQUFzQjtRQUM1QyxJQUFJLE9BQU8sR0FBWSxLQUFLLENBQUM7UUFFN0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDM0QsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0IsSUFBSSxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO2FBQU0sSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDbkIsQ0FBQzthQUFNLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUFJLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUM3QixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUFJLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUM1QixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsWUFBWSxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzRCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU8sSUFBSSxDQUFDLFdBQStDO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjO2FBQ2QsWUFBWSxDQUFDLFdBQVcsQ0FBQzthQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzlDLFNBQVMsQ0FDTixDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDakIsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO2dCQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJO2dCQUNoQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEtBQUs7YUFDN0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDTixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQ0osQ0FBQztJQUNWLENBQUM7K0dBN1NRLDRCQUE0QjttR0FBNUIsNEJBQTRCLDRzQkFDdkIsbUNBQW1DLHVGQUduQyxxQ0FBcUMsNEZDMUZ2RCw0a0RBdUNBLDhSRG9DUSxZQUFZLGtJQUNaLHdCQUF3QixtT0FDeEIscUJBQXFCLGdHQUNyQixhQUFhLGtEQUNiLGtCQUFrQiwwc0JBQ2xCLCtCQUErQixtR0FDL0IsMEJBQTBCOzs0RkFLckIsNEJBQTRCO2tCQWZ4QyxTQUFTOytCQUNJLDJCQUEyQixjQUN6QixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLHFCQUFxQjt3QkFDckIsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLCtCQUErQjt3QkFDL0IsMEJBQTBCO3FCQUM3Qjt1SkFNRCxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsbUNBQW1DO2dCQUlqRCxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMscUNBQXFDO2dCQUtuRCxLQUFLO3NCQURKLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBT04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLElBQUk7c0JBREgsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFTTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLE1BQU07Z0JBUVAsVUFBVTtzQkFEVCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsTUFBTTtnQkFNUCxPQUFPO3NCQUROLE1BQU07Z0JBTVAsS0FBSztzQkFESixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBEYXRhVGFibGVTY2hlbWEsXG4gICAgRGF0YVJvd0V2ZW50LFxuICAgIERhdGFUYWJsZUFkYXB0ZXIsXG4gICAgQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQ3VzdG9tTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEYXRhUm93LFxuICAgIERhdGFDb2x1bW4sXG4gICAgQXBwQ29uZmlnU2VydmljZSxcbiAgICBQYWdpbmF0ZWRDb21wb25lbnQsXG4gICAgUGFnaW5hdGlvbk1vZGVsLFxuICAgIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgRGF0YUNlbGxFdmVudCxcbiAgICBERUZBVUxUX1BBR0lOQVRJT04sXG4gICAgRW1wdHlDb250ZW50Q29tcG9uZW50LFxuICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICBMb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE5vQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE9iamVjdERhdGFSb3dcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUHJvY2Vzc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgUHJvY2Vzc0luc3RhbmNlUXVlcnlSZXByZXNlbnRhdGlvbixcbiAgICBQcm9jZXNzSW5zdGFuY2VRdWVyeVJlcHJlc2VudGF0aW9uU29ydCxcbiAgICBQcm9jZXNzSW5zdGFuY2VRdWVyeVJlcHJlc2VudGF0aW9uU3RhdGUsXG4gICAgUmVzdWx0TGlzdERhdGFSZXByZXNlbnRhdGlvblByb2Nlc3NJbnN0YW5jZVJlcHJlc2VudGF0aW9uXG59IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5jb25zdCBQUkVTRVRfS0VZID0gJ2FkZi1wcm9jZXNzLWxpc3QucHJlc2V0cyc7XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzUHJlc2V0c0RlZmF1bHRNb2RlbCA9IHtcbiAgICBkZWZhdWx0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogJ25hbWUnLFxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgdGl0bGU6ICdBREZfUFJPQ0VTU19MSVNULlBST1BFUlRJRVMuTkFNRScsXG4gICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdjcmVhdGVkJyxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHRpdGxlOiAnQURGX1BST0NFU1NfTElTVC5QUk9QRVJUSUVTLkNSRUFURUQnLFxuICAgICAgICAgICAgY3NzQ2xhc3M6ICdoaWRkZW4nLFxuICAgICAgICAgICAgc29ydGFibGU6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLXByb2Nlc3MtaW5zdGFuY2UtbGlzdCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBFbXB0eUNvbnRlbnRDb21wb25lbnQsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTm9Db250ZW50VGVtcGxhdGVEaXJlY3RpdmVcbiAgICBdLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2Nlc3MtbGlzdC5jb21wb25lbnQuY3NzJ10sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2Nlc3MtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUHJvY2Vzc0luc3RhbmNlTGlzdENvbXBvbmVudCBleHRlbmRzIERhdGFUYWJsZVNjaGVtYSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgUGFnaW5hdGVkQ29tcG9uZW50IHtcbiAgICBAQ29udGVudENoaWxkKEN1c3RvbUVtcHR5Q29udGVudFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGN1c3RvbUVtcHR5Q29udGVudDogQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tTG9hZGluZ0NvbnRlbnQ6IEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKiogVGhlIGlkIG9mIHRoZSBhcHAuICovXG4gICAgQElucHV0KClcbiAgICBhcHBJZDogbnVtYmVyO1xuXG4gICAgLyoqIFRoZSBEZWZpbml0aW9uIElkIG9mIHRoZSBwcm9jZXNzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJvY2Vzc0RlZmluaXRpb25JZDogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBpZCBvZiB0aGUgcHJvY2VzcyBpbnN0YW5jZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NJbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgICAvKiogRGVmaW5lcyB0aGUgc3RhdGUgb2YgdGhlIHByb2Nlc3Nlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlOiBQcm9jZXNzSW5zdGFuY2VRdWVyeVJlcHJlc2VudGF0aW9uU3RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzb3J0IG9yZGVyaW5nIG9mIHRoZSBsaXN0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc29ydDogUHJvY2Vzc0luc3RhbmNlUXVlcnlSZXByZXNlbnRhdGlvblNvcnQ7XG5cbiAgICAvKiogVGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBwcm9jZXNzZXMgdG8gZmV0Y2guICovXG4gICAgQElucHV0KClcbiAgICBwYWdlOiBudW1iZXIgPSAwO1xuXG4gICAgLyoqIFRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIHRvIGZldGNoIGluIGVhY2ggcGFnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNpemU6IG51bWJlciA9IERFRkFVTFRfUEFHSU5BVElPTi5tYXhJdGVtcztcblxuICAgIC8qKiBEYXRhIHNvdXJjZSB0byBkZWZpbmUgdGhlIGRhdGF0YWJsZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGE6IERhdGFUYWJsZUFkYXB0ZXI7XG5cbiAgICAvKiogVG9nZ2xlcyBtdWx0aXBsZSByb3cgc2VsZWN0aW9uLCB3aGljaCByZW5kZXJzIGNoZWNrYm94ZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJvdyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFJvdyBzZWxlY3Rpb24gbW9kZS4gQ2FuIGJlIG5vbmUsIGBzaW5nbGVgIG9yIGBtdWx0aXBsZWAuIEZvciBgbXVsdGlwbGVgIG1vZGUsXG4gICAgICogeW91IGNhbiB1c2UgQ21kIChtYWNPUykgb3IgQ3RybCAoV2luKSBtb2RpZmllciBrZXkgdG8gdG9nZ2xlIHNlbGVjdGlvbiBmb3JcbiAgICAgKiBtdWx0aXBsZSByb3dzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogc3RyaW5nID0gJ3NpbmdsZSc7IC8vIG5vbmV8c2luZ2xlfG11bHRpcGxlXG5cbiAgICAvKiogVG9nZ2xlcyBkZWZhdWx0IHNlbGVjdGlvbiBvZiB0aGUgZmlyc3Qgcm93ICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RGaXJzdFJvdzogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgc3RpY2t5IGhlYWRlciBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyBjdXN0b20gY29udGV4dCBtZW51IGZvciB0aGUgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NvbnRleHRNZW51OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRW5hYmxlcyBjb2x1bW4gcmVzaXppbmcgZm9yIGRhdGF0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNSZXNpemluZ0VuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBFbmFibGVzIGJsdXIgd2hlbiByZXNpemluZyBkYXRhdGFibGUgY29sdW1ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgYmx1ck9uUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0dGVkIGJlZm9yZSB0aGUgY29udGV4dCBtZW51IGlzIGRpc3BsYXllZCBmb3IgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2hvd1Jvd0NvbnRleHRNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ2VsbEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXIgZnVuY3Rpb24gaXMgdXNlZCB0byBzaG93IGR5bmFtaWMgY29tcGxleCBjb2x1bW4gb2JqZWN0c1xuICAgICAqIHNlZSB0aGUgZG9jcyB0byBsZWFybiBob3cgdG8gY29uZmlndXJlIGEgcmVzb2x2ZXJGbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlc29sdmVyRm46IChyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbikgPT4gYW55ID0gbnVsbDtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSByb3cgaW4gdGhlIHByb2Nlc3MgbGlzdCBpcyBjbGlja2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBsaXN0IG9mIHByb2Nlc3MgaW5zdGFuY2VzIGhhcyBiZWVuIGxvYWRlZCBzdWNjZXNzZnVsbHkgZnJvbSB0aGUgc2VydmVyLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKVxuICAgIHN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPFJlc3VsdExpc3REYXRhUmVwcmVzZW50YXRpb25Qcm9jZXNzSW5zdGFuY2VSZXByZXNlbnRhdGlvbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGxvYWRpbmcgdGhlIGxpc3Qgb2YgcHJvY2VzcyBpbnN0YW5jZXMgZnJvbSB0aGUgc2VydmVyLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHJvd3MgYXJlIHNlbGVjdGVkL3Vuc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByb3dzU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE9iamVjdERhdGFSb3dbXT4oKTtcblxuICAgIHJlcXVlc3ROb2RlOiBQcm9jZXNzSW5zdGFuY2VRdWVyeVJlcHJlc2VudGF0aW9uO1xuICAgIGN1cnJlbnRJbnN0YW5jZUlkOiBzdHJpbmc7XG4gICAgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgICByb3dzOiBhbnlbXSA9IFtdO1xuICAgIHNvcnRpbmc6IGFueVtdID0gWydjcmVhdGVkJywgJ2Rlc2MnXTtcbiAgICBwYWdpbmF0aW9uOiBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbk1vZGVsPjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvY2Vzc1NlcnZpY2U6IFByb2Nlc3NTZXJ2aWNlLCBwcml2YXRlIHVzZXJQcmVmZXJlbmNlczogVXNlclByZWZlcmVuY2VzU2VydmljZSwgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGFwcENvbmZpZywgUFJFU0VUX0tFWSwgcHJvY2Vzc1ByZXNldHNEZWZhdWx0TW9kZWwpO1xuICAgICAgICB0aGlzLnNpemUgPSB0aGlzLnVzZXJQcmVmZXJlbmNlcy5wYWdpbmF0aW9uU2l6ZTtcblxuICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhZ2luYXRpb25Nb2RlbD4oe1xuICAgICAgICAgICAgbWF4SXRlbXM6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIHNraXBDb3VudDogMCxcbiAgICAgICAgICAgIHRvdGFsSXRlbXM6IDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLmNyZWF0ZURhdGF0YWJsZVNjaGVtYSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGE/LmdldENvbHVtbnMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hcHBJZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAodGhpcy5pc1Byb3BlcnR5Q2hhbmdlZChjaGFuZ2VzKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTb3J0Q2hhbmdlZChjaGFuZ2VzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydGluZyA9IHRoaXMuc29ydCA/IHRoaXMuc29ydC5zcGxpdCgnLScpIDogdGhpcy5zb3J0aW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXNldENvbHVtbkNoYW5nZXMgPSBjaGFuZ2VzWydwcmVzZXRDb2x1bW4nXTtcbiAgICAgICAgaWYgKHByZXNldENvbHVtbkNoYW5nZXMgJiYgIXByZXNldENvbHVtbkNoYW5nZXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMubWVyZ2VKc29uQW5kSHRtbFNjaGVtYSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVsb2FkKCkge1xuICAgICAgICB0aGlzLnJlcXVlc3ROb2RlID0gdGhpcy5jcmVhdGVSZXF1ZXN0Tm9kZSgpO1xuICAgICAgICB0aGlzLmxvYWQodGhpcy5yZXF1ZXN0Tm9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBhIGxpc3QgaWYgcHJlc2VudFxuICAgICAqL1xuICAgIHNlbGVjdEZpcnN0KCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RGaXJzdFJvdykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGlzdEVtcHR5KCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhUm93ID0gdGhpcy5yb3dzWzBdO1xuICAgICAgICAgICAgICAgIGRhdGFSb3cuaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5zdGFuY2VJZCA9IGRhdGFSb3dbJ2lkJ107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEluc3RhbmNlSWQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudCBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQHJldHVybnMgaW5zdGFuY2UgaWRcbiAgICAgKi9cbiAgICBnZXRDdXJyZW50SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEluc3RhbmNlSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGxpc3QgaXMgZW1wdHlcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBsaXN0IGlzIGVtcHR5LCBvdGhlcndpc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIGlzTGlzdEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMucm93cyB8fCB0aGlzLnJvd3MubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXQgdGhlIGV2ZW50IHJvd0NsaWNrIHBhc3NpbmcgdGhlIGN1cnJlbnQgdGFzayBpZCB3aGVuIHRoZSByb3cgaXMgY2xpY2tlZFxuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IGlucHV0IGV2ZW50XG4gICAgICovXG4gICAgb25Sb3dDbGljayhldmVudDogRGF0YVJvd0V2ZW50KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBldmVudDtcblxuICAgICAgICB0aGlzLmN1cnJlbnRJbnN0YW5jZUlkID0gaXRlbS52YWx1ZS5nZXRWYWx1ZSgnaWQnKTtcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHRoaXMuY3VycmVudEluc3RhbmNlSWQpO1xuICAgIH1cblxuICAgIG9uUm93Q2hlY2tib3hUb2dnbGUoZXZlbnQ6IEN1c3RvbUV2ZW50KSB7XG4gICAgICAgIHRoaXMucm93c1NlbGVjdGVkLmVtaXQoWy4uLmV2ZW50LmRldGFpbC5zZWxlY3Rpb25dKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbWl0IHRoZSBldmVudCByb3dDbGljayBwYXNzaW5nIHRoZSBjdXJyZW50IHRhc2sgaWQgd2hlbiBwcmVzc2VkIHRoZSBFbnRlciBrZXkgb24gdGhlIHNlbGVjdGVkIHJvd1xuICAgICAqXG4gICAgICogQHBhcmFtIGV2ZW50IGtleWJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgb25Sb3dLZXlVcChldmVudDogQ3VzdG9tRXZlbnQ8YW55Pikge1xuICAgICAgICBpZiAoZXZlbnQuZGV0YWlsLmtleWJvYXJkRXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbnN0YW5jZUlkID0gZXZlbnQuZGV0YWlsLnJvdy5nZXRWYWx1ZSgnaWQnKTtcbiAgICAgICAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh0aGlzLmN1cnJlbnRJbnN0YW5jZUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd1Jvd0NvbnRleHRNZW51KGV2ZW50OiBEYXRhQ2VsbEV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2hvd1Jvd0NvbnRleHRNZW51LmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhZ2luYXRpb24ocGFyYW1zOiBQYWdpbmF0aW9uTW9kZWwpIHtcbiAgICAgICAgY29uc3QgbmVlZHNSZWxvYWQgPSBwYXJhbXMubWF4SXRlbXMgfHwgcGFyYW1zLnNraXBDb3VudDtcblxuICAgICAgICB0aGlzLnNpemUgPSBwYXJhbXMubWF4SXRlbXM7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMuY3VycmVudFBhZ2UocGFyYW1zLnNraXBDb3VudCwgcGFyYW1zLm1heEl0ZW1zKTtcblxuICAgICAgICBpZiAobmVlZHNSZWxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50UGFnZShza2lwQ291bnQ6IG51bWJlciwgbWF4SXRlbXM6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBza2lwQ291bnQgJiYgbWF4SXRlbXMgPyBNYXRoLmZsb29yKHNraXBDb3VudCAvIG1heEl0ZW1zKSA6IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVSZXF1ZXN0Tm9kZSgpOiBQcm9jZXNzSW5zdGFuY2VRdWVyeVJlcHJlc2VudGF0aW9uIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFwcERlZmluaXRpb25JZDogdGhpcy5hcHBJZCxcbiAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9uSWQ6IHRoaXMucHJvY2Vzc0RlZmluaXRpb25JZCxcbiAgICAgICAgICAgIHByb2Nlc3NJbnN0YW5jZUlkOiB0aGlzLnByb2Nlc3NJbnN0YW5jZUlkLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBzb3J0OiB0aGlzLnNvcnQsXG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBzaXplOiB0aGlzLnNpemUsXG4gICAgICAgICAgICBzdGFydDogMFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTb3J0Q2hhbmdlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGFjdHVhbFNvcnQgPSBjaGFuZ2VzWydzb3J0J107XG4gICAgICAgIHJldHVybiBhY3R1YWxTb3J0Py5jdXJyZW50VmFsdWUgJiYgYWN0dWFsU29ydC5jdXJyZW50VmFsdWUgIT09IGFjdHVhbFNvcnQucHJldmlvdXNWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUHJvcGVydHlDaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBhcHBJZCA9IGNoYW5nZXNbJ2FwcElkJ107XG4gICAgICAgIGNvbnN0IHByb2Nlc3NEZWZpbml0aW9uSWQgPSBjaGFuZ2VzWydwcm9jZXNzRGVmaW5pdGlvbklkJ107XG4gICAgICAgIGNvbnN0IHByb2Nlc3NJbnN0YW5jZUlkID0gY2hhbmdlc1sncHJvY2Vzc0luc3RhbmNlSWQnXTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBjaGFuZ2VzWydzdGF0ZSddO1xuICAgICAgICBjb25zdCBzb3J0ID0gY2hhbmdlc1snc29ydCddO1xuICAgICAgICBjb25zdCBwYWdlID0gY2hhbmdlc1sncGFnZSddO1xuICAgICAgICBjb25zdCBzaXplID0gY2hhbmdlc1snc2l6ZSddO1xuXG4gICAgICAgIGlmIChhcHBJZD8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzRGVmaW5pdGlvbklkKSB7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzSW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc29ydD8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWdlICYmIHBhZ2U/LmN1cnJlbnRWYWx1ZSAhPT0gcGFnZS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChzaXplICYmIHNpemUuY3VycmVudFZhbHVlICE9PSBzaXplLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGFuZ2VkO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZChyZXF1ZXN0Tm9kZTogUHJvY2Vzc0luc3RhbmNlUXVlcnlSZXByZXNlbnRhdGlvbikge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvY2Vzc1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQcm9jZXNzZXMocmVxdWVzdE5vZGUpXG4gICAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RGaXJzdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MuZW1pdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbi5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiAocmVzcG9uc2UuZGF0YSB8fCBbXSkubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4SXRlbXM6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBDb3VudDogdGhpcy5wYWdlICogdGhpcy5zaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxJdGVtczogcmVzcG9uc2UudG90YWxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxhZGYtZGF0YXRhYmxlXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW3Jvd3NdPVwicm93c1wiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW3NvcnRpbmddPVwic29ydGluZ1wiXG4gICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcbiAgICBbaXNSZXNpemluZ0VuYWJsZWRdPVwiaXNSZXNpemluZ0VuYWJsZWRcIlxuICAgIFtibHVyT25SZXNpemVdPVwiYmx1ck9uUmVzaXplXCJcbiAgICBbc3RpY2t5SGVhZGVyXT1cInN0aWNreUhlYWRlclwiXG4gICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgW211bHRpc2VsZWN0XT1cIm11bHRpc2VsZWN0XCJcbiAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICBbY29udGV4dE1lbnVdPVwic2hvd0NvbnRleHRNZW51XCJcbiAgICAoc2hvd1Jvd0NvbnRleHRNZW51KT1cIm9uU2hvd1Jvd0NvbnRleHRNZW51KCRldmVudClcIlxuICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICAgIChyb3cta2V5dXApPVwib25Sb3dLZXlVcCgkYW55KCRldmVudCkpXCJcbiAgICAocm93LXNlbGVjdCk9XCJvblJvd0NoZWNrYm94VG9nZ2xlKCRhbnkoJGV2ZW50KSlcIlxuICAgIChyb3ctdW5zZWxlY3QpPVwib25Sb3dDaGVja2JveFRvZ2dsZSgkYW55KCRldmVudCkpXCJcbj5cbiAgICA8YWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY3VzdG9tTG9hZGluZ0NvbnRlbnRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXByb2Nlc3MtbGlzdC1sb2FkaW5nLW1hcmdpblwiXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIC8+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtY3VzdG9tLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZVwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9hZGYtbG9hZGluZy1jb250ZW50LXRlbXBsYXRlPlxuICAgIDxhZGYtbm8tY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxhZGYtZW1wdHktY29udGVudCAqbmdJZj1cIiFjdXN0b21FbXB0eUNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiYXNzZXNzbWVudFwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIocmVxdWVzdE5vZGUgPyAnQURGX1BST0NFU1NfTElTVC5MSVNULlRJVExFJyA6ICdBREZfUFJPQ0VTU19MSVNULkZJTFRFUlMuTUVTU0FHRVMuTk9ORScpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cIidBREZfUFJPQ0VTU19MSVNULkxJU1QuU1VCVElUTEUnfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2FkZi1uby1jb250ZW50LXRlbXBsYXRlPlxuPC9hZGYtZGF0YXRhYmxlPlxuIl19
|