@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.
Files changed (125) hide show
  1. package/fesm2022/adf-process-services.mjs +297 -301
  2. package/fesm2022/adf-process-services.mjs.map +1 -1
  3. package/package.json +4 -6
  4. package/esm2022/adf-process-services.mjs +0 -5
  5. package/esm2022/lib/app-list/apps-list.component.mjs +0 -195
  6. package/esm2022/lib/app-list/icon.model.mjs +0 -166
  7. package/esm2022/lib/app-list/index.mjs +0 -18
  8. package/esm2022/lib/app-list/public-api.mjs +0 -23
  9. package/esm2022/lib/app-list/select-apps-dialog/select-apps-dialog.component.mjs +0 -53
  10. package/esm2022/lib/attachment/create-process-attachment/create-process-attachment.component.mjs +0 -73
  11. package/esm2022/lib/attachment/create-task-attachment/create-task-attachment.component.mjs +0 -73
  12. package/esm2022/lib/attachment/index.mjs +0 -18
  13. package/esm2022/lib/attachment/process-attachment-list/process-attachment-list.component.mjs +0 -197
  14. package/esm2022/lib/attachment/public-api.mjs +0 -31
  15. package/esm2022/lib/attachment/task-attachment-list/task-attachment-list.component.mjs +0 -196
  16. package/esm2022/lib/compat/types.mjs +0 -18
  17. package/esm2022/lib/form/events/validate-dynamic-table-row.event.mjs +0 -26
  18. package/esm2022/lib/form/form-custom-outcomes.component.mjs +0 -31
  19. package/esm2022/lib/form/form-list/form-list.component.mjs +0 -50
  20. package/esm2022/lib/form/form.component.mjs +0 -346
  21. package/esm2022/lib/form/index.mjs +0 -18
  22. package/esm2022/lib/form/model/form-definition.model.mjs +0 -92
  23. package/esm2022/lib/form/process-form-rendering.service.mjs +0 -55
  24. package/esm2022/lib/form/public-api.mjs +0 -32
  25. package/esm2022/lib/form/services/activiti-alfresco.service.mjs +0 -113
  26. package/esm2022/lib/form/services/ecm-model.service.mjs +0 -156
  27. package/esm2022/lib/form/services/editor.service.mjs +0 -87
  28. package/esm2022/lib/form/services/external-alfresco-api.service.mjs +0 -57
  29. package/esm2022/lib/form/services/index.mjs +0 -26
  30. package/esm2022/lib/form/services/model.service.mjs +0 -130
  31. package/esm2022/lib/form/services/process-content.service.mjs +0 -223
  32. package/esm2022/lib/form/services/process-definition.service.mjs +0 -93
  33. package/esm2022/lib/form/services/task-form.service.mjs +0 -127
  34. package/esm2022/lib/form/services/task.service.mjs +0 -77
  35. package/esm2022/lib/form/start-form/start-form.component.mjs +0 -141
  36. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog-component.interface.mjs +0 -18
  37. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.component.mjs +0 -115
  38. package/esm2022/lib/form/widgets/content-widget/attach-file-widget-dialog.service.mjs +0 -100
  39. package/esm2022/lib/form/widgets/content-widget/attach-file-widget.component.mjs +0 -254
  40. package/esm2022/lib/form/widgets/content-widget/attach-folder-widget.component.mjs +0 -93
  41. package/esm2022/lib/form/widgets/content-widget/index.mjs +0 -18
  42. package/esm2022/lib/form/widgets/content-widget/public-api.mjs +0 -22
  43. package/esm2022/lib/form/widgets/document/content.widget.mjs +0 -125
  44. package/esm2022/lib/form/widgets/document/document.widget.mjs +0 -61
  45. package/esm2022/lib/form/widgets/dropdown/dropdown.widget.mjs +0 -182
  46. package/esm2022/lib/form/widgets/dynamic-table/dynamic-table.widget.mjs +0 -192
  47. package/esm2022/lib/form/widgets/dynamic-table/editors/amount/amount.editor.mjs +0 -47
  48. package/esm2022/lib/form/widgets/dynamic-table/editors/boolean/boolean.editor.mjs +0 -42
  49. package/esm2022/lib/form/widgets/dynamic-table/editors/date/date.editor.mjs +0 -84
  50. package/esm2022/lib/form/widgets/dynamic-table/editors/datetime/datetime.editor.mjs +0 -84
  51. package/esm2022/lib/form/widgets/dynamic-table/editors/dropdown/dropdown.editor.mjs +0 -95
  52. package/esm2022/lib/form/widgets/dynamic-table/editors/models/cell-validator.model.mjs +0 -18
  53. package/esm2022/lib/form/widgets/dynamic-table/editors/models/date-cell-validator-model.mjs +0 -47
  54. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-row-validation-summary.model.mjs +0 -24
  55. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column-option.model.mjs +0 -18
  56. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-column.model.mjs +0 -18
  57. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table-row.model.mjs +0 -18
  58. package/esm2022/lib/form/widgets/dynamic-table/editors/models/dynamic-table.widget.model.mjs +0 -159
  59. package/esm2022/lib/form/widgets/dynamic-table/editors/models/number-cell-validator.model.mjs +0 -45
  60. package/esm2022/lib/form/widgets/dynamic-table/editors/models/required-cell-validator.model.mjs +0 -40
  61. package/esm2022/lib/form/widgets/dynamic-table/editors/row-editor/row.editor.mjs +0 -89
  62. package/esm2022/lib/form/widgets/dynamic-table/editors/text/text.editor.mjs +0 -47
  63. package/esm2022/lib/form/widgets/dynamic-table/index.mjs +0 -18
  64. package/esm2022/lib/form/widgets/dynamic-table/public-api.mjs +0 -44
  65. package/esm2022/lib/form/widgets/file-viewer/file-viewer.widget.mjs +0 -46
  66. package/esm2022/lib/form/widgets/functional-group/functional-group.widget.mjs +0 -167
  67. package/esm2022/lib/form/widgets/index.mjs +0 -18
  68. package/esm2022/lib/form/widgets/people/people.widget.mjs +0 -169
  69. package/esm2022/lib/form/widgets/public-api.mjs +0 -54
  70. package/esm2022/lib/form/widgets/radio-buttons/radio-buttons.widget.mjs +0 -97
  71. package/esm2022/lib/form/widgets/typeahead/typeahead.widget.mjs +0 -152
  72. package/esm2022/lib/form/widgets/upload/upload.widget.mjs +0 -128
  73. package/esm2022/lib/people/components/people/people.component.mjs +0 -124
  74. package/esm2022/lib/people/components/people-list/people-list.component.mjs +0 -74
  75. package/esm2022/lib/people/components/people-search/people-search.component.mjs +0 -83
  76. package/esm2022/lib/people/components/people-search-field/people-search-field.component.mjs +0 -90
  77. package/esm2022/lib/people/components/people-selector/people-selector.component.mjs +0 -76
  78. package/esm2022/lib/people/helpers/get-display-user.mjs +0 -22
  79. package/esm2022/lib/people/index.mjs +0 -18
  80. package/esm2022/lib/people/interfaces/perform-search-callback.interface.mjs +0 -18
  81. package/esm2022/lib/people/public-api.mjs +0 -35
  82. package/esm2022/lib/process-comments/index.mjs +0 -21
  83. package/esm2022/lib/process-comments/process-comments.component.mjs +0 -45
  84. package/esm2022/lib/process-comments/services/comment-process.service.mjs +0 -77
  85. package/esm2022/lib/process-list/components/process-audit/process-audit.directive.mjs +0 -105
  86. package/esm2022/lib/process-list/components/process-filters/process-filters.component.mjs +0 -211
  87. package/esm2022/lib/process-list/components/process-instance-details/process-instance-details.component.mjs +0 -142
  88. package/esm2022/lib/process-list/components/process-instance-header/process-instance-header.component.mjs +0 -123
  89. package/esm2022/lib/process-list/components/process-instance-tasks/process-instance-tasks.component.mjs +0 -163
  90. package/esm2022/lib/process-list/components/process-list/process-list.component.mjs +0 -327
  91. package/esm2022/lib/process-list/components/start-process/start-process.component.mjs +0 -423
  92. package/esm2022/lib/process-list/index.mjs +0 -18
  93. package/esm2022/lib/process-list/public-api.mjs +0 -44
  94. package/esm2022/lib/process-list/services/process-filter.service.mjs +0 -182
  95. package/esm2022/lib/process-list/services/process.service.mjs +0 -259
  96. package/esm2022/lib/process.module.mjs +0 -132
  97. package/esm2022/lib/services/apps-process.service.mjs +0 -58
  98. package/esm2022/lib/services/people-process.service.mjs +0 -124
  99. package/esm2022/lib/services/task-comments.service.mjs +0 -65
  100. package/esm2022/lib/task-comments/index.mjs +0 -21
  101. package/esm2022/lib/task-comments/task-comments.component.mjs +0 -44
  102. package/esm2022/lib/task-list/components/attach-form/attach-form.component.mjs +0 -127
  103. package/esm2022/lib/task-list/components/checklist/checklist.component.mjs +0 -140
  104. package/esm2022/lib/task-list/components/start-task/start-task.component.mjs +0 -221
  105. package/esm2022/lib/task-list/components/task-details/task-details.component.mjs +0 -360
  106. package/esm2022/lib/task-list/components/task-filters/task-filters.component.mjs +0 -261
  107. package/esm2022/lib/task-list/components/task-form/claim-task.directive.mjs +0 -77
  108. package/esm2022/lib/task-list/components/task-form/task-form.component.mjs +0 -313
  109. package/esm2022/lib/task-list/components/task-form/unclaim-task.directive.mjs +0 -77
  110. package/esm2022/lib/task-list/components/task-header/task-header.component.mjs +0 -361
  111. package/esm2022/lib/task-list/components/task-list/task-list.component.mjs +0 -359
  112. package/esm2022/lib/task-list/components/task-standalone/task-standalone.component.mjs +0 -82
  113. package/esm2022/lib/task-list/index.mjs +0 -18
  114. package/esm2022/lib/task-list/models/form.model.mjs +0 -26
  115. package/esm2022/lib/task-list/models/task-details.event.mjs +0 -32
  116. package/esm2022/lib/task-list/models/task-preset.model.mjs +0 -41
  117. package/esm2022/lib/task-list/models/user-event.model.mjs +0 -18
  118. package/esm2022/lib/task-list/models/user-group.model.mjs +0 -18
  119. package/esm2022/lib/task-list/public-api.mjs +0 -60
  120. package/esm2022/lib/task-list/services/process-upload.service.mjs +0 -42
  121. package/esm2022/lib/task-list/services/task-filter.service.mjs +0 -249
  122. package/esm2022/lib/task-list/services/task-upload.service.mjs +0 -42
  123. package/esm2022/lib/task-list/services/tasklist.service.mjs +0 -251
  124. package/esm2022/lib/task-list/validators/task-description.validator.mjs +0 -26
  125. package/esm2022/public-api.mjs +0 -30
@@ -1,221 +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 { ADF_DATE_FORMATS, AdfDateFnsAdapter, DateFnsUtils, FormFieldModel, FormModel } from '@alfresco/adf-core';
18
- import { Component, DestroyRef, EventEmitter, inject, Input, Output, ViewEncapsulation } from '@angular/core';
19
- import { DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
20
- import { EMPTY } from 'rxjs';
21
- import { TaskListService } from '../../services/tasklist.service';
22
- import { defaultIfEmpty, switchMap } from 'rxjs/operators';
23
- import { ReactiveFormsModule, UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms';
24
- import { isValid } from 'date-fns';
25
- import { TaskRepresentation } from '@alfresco/js-api';
26
- import { CommonModule } from '@angular/common';
27
- import { TranslatePipe } from '@ngx-translate/core';
28
- import { MatCardModule } from '@angular/material/card';
29
- import { MatFormFieldModule } from '@angular/material/form-field';
30
- import { MatInputModule } from '@angular/material/input';
31
- import { MatDatepickerModule } from '@angular/material/datepicker';
32
- import { MatIconModule } from '@angular/material/icon';
33
- import { MatSelectModule } from '@angular/material/select';
34
- import { MatButtonModule } from '@angular/material/button';
35
- import { PeopleWidgetComponent } from '../../../form';
36
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
37
- import * as i0 from "@angular/core";
38
- import * as i1 from "../../services/tasklist.service";
39
- import * as i2 from "@angular/forms";
40
- import * as i3 from "@angular/common";
41
- import * as i4 from "@angular/material/card";
42
- import * as i5 from "@angular/material/form-field";
43
- import * as i6 from "@angular/material/input";
44
- import * as i7 from "@angular/material/datepicker";
45
- import * as i8 from "@angular/material/icon";
46
- import * as i9 from "@angular/material/select";
47
- import * as i10 from "@angular/material/core";
48
- import * as i11 from "@angular/material/button";
49
- const FORMAT_DATE = 'DD/MM/YYYY';
50
- const MAX_LENGTH = 255;
51
- export class StartTaskComponent {
52
- constructor(taskService, formBuilder) {
53
- this.taskService = taskService;
54
- this.formBuilder = formBuilder;
55
- /** Default Task Name. */
56
- this.name = '';
57
- /** Emitted when the task is successfully created. */
58
- this.success = new EventEmitter();
59
- /** Emitted when the cancel button is clicked by the user. */
60
- this.cancel = new EventEmitter();
61
- /** Emitted when an error occurs. */
62
- this.error = new EventEmitter();
63
- this.taskDetailsModel = new TaskRepresentation();
64
- this.dateError = false;
65
- this.maxTaskNameLength = MAX_LENGTH;
66
- this.loading = false;
67
- this.destroyRef = inject(DestroyRef);
68
- }
69
- ngOnInit() {
70
- if (this.name) {
71
- this.taskDetailsModel.name = this.name;
72
- }
73
- this.validateMaxTaskNameLength();
74
- this.field = new FormFieldModel(new FormModel(), { id: this.assigneeId, value: this.assigneeId, placeholder: 'Assignee' });
75
- this.loadFormsTask();
76
- this.buildForm();
77
- }
78
- buildForm() {
79
- this.taskForm = this.formBuilder.group({
80
- name: new UntypedFormControl(this.taskDetailsModel.name, [
81
- Validators.required,
82
- Validators.maxLength(this.maxTaskNameLength),
83
- this.whitespaceValidator
84
- ]),
85
- description: new UntypedFormControl('', [this.whitespaceValidator]),
86
- formKey: new UntypedFormControl('')
87
- });
88
- this.taskForm.valueChanges.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((taskFormValues) => this.setTaskDetails(taskFormValues));
89
- }
90
- whitespaceValidator(control) {
91
- if (control.value) {
92
- const isWhitespace = (control.value || '').trim().length === 0;
93
- const isControlValid = control.value.length === 0 || !isWhitespace;
94
- return isControlValid ? null : { whitespace: true };
95
- }
96
- return null;
97
- }
98
- setTaskDetails(form) {
99
- this.taskDetailsModel.name = form.name;
100
- this.taskDetailsModel.description = form.description;
101
- this.taskDetailsModel.formKey = form.formKey ? form.formKey.toString() : null;
102
- }
103
- isFormValid() {
104
- return this.taskForm.valid && !this.dateError && !this.loading;
105
- }
106
- saveTask() {
107
- this.loading = true;
108
- if (this.appId) {
109
- this.taskDetailsModel.category = this.appId.toString();
110
- }
111
- this.taskService
112
- .createNewTask(this.taskDetailsModel)
113
- .pipe(switchMap((createRes) => this.attachForm(createRes.id, this.taskDetailsModel.formKey).pipe(defaultIfEmpty(createRes), switchMap((attachRes) => {
114
- const assigneeId = this.assigneeId ? this.assigneeId.toString() : null;
115
- return this.assignTaskByUserId(createRes.id, assigneeId).pipe(defaultIfEmpty(attachRes ? attachRes : createRes));
116
- }))))
117
- .subscribe((res) => {
118
- this.loading = false;
119
- this.success.emit(res);
120
- }, (err) => {
121
- this.loading = false;
122
- this.error.emit(err);
123
- });
124
- }
125
- setAssigneeId(userId) {
126
- this.assigneeId = userId;
127
- }
128
- onCancel() {
129
- this.cancel.emit();
130
- }
131
- getDisplayUser(firstName, lastName, delimiter = '-') {
132
- firstName = firstName !== null ? firstName : '';
133
- lastName = lastName !== null ? lastName : '';
134
- return firstName + delimiter + lastName;
135
- }
136
- onDateChanged(newDateValue) {
137
- this.dateError = false;
138
- if (newDateValue) {
139
- let date;
140
- if (typeof newDateValue === 'string') {
141
- date = DateFnsUtils.parseDate(newDateValue, FORMAT_DATE);
142
- }
143
- else {
144
- date = newDateValue;
145
- }
146
- if (isValid(date)) {
147
- this.taskDetailsModel.dueDate = date;
148
- }
149
- else {
150
- this.dateError = true;
151
- this.taskDetailsModel.dueDate = null;
152
- }
153
- }
154
- else {
155
- this.taskDetailsModel.dueDate = null;
156
- }
157
- }
158
- validateMaxTaskNameLength() {
159
- if (this.maxTaskNameLength > MAX_LENGTH) {
160
- this.maxTaskNameLength = MAX_LENGTH;
161
- }
162
- }
163
- get nameController() {
164
- return this.taskForm.get('name');
165
- }
166
- get descriptionController() {
167
- return this.taskForm.get('description');
168
- }
169
- attachForm(taskId, formKey) {
170
- let response = EMPTY;
171
- if (taskId && formKey) {
172
- response = this.taskService.attachFormToATask(taskId, parseInt(formKey, 10));
173
- }
174
- return response;
175
- }
176
- assignTaskByUserId(taskId, userId) {
177
- if (taskId && userId) {
178
- return this.taskService.assignTaskByUserId(taskId, userId);
179
- }
180
- return EMPTY;
181
- }
182
- loadFormsTask() {
183
- this.forms$ = this.taskService.getFormList();
184
- }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StartTaskComponent, deps: [{ token: i1.TaskListService }, { token: i2.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StartTaskComponent, isStandalone: true, selector: "adf-start-task", inputs: { appId: "appId", name: "name" }, outputs: { success: "success", cancel: "cancel", error: "error" }, providers: [
187
- { provide: DateAdapter, useClass: AdfDateFnsAdapter },
188
- { provide: MAT_DATE_FORMATS, useValue: ADF_DATE_FORMATS }
189
- ], ngImport: i0, template: "<mat-card appearance=\"outlined\" class=\"adf-new-task-layout-card\">\n <mat-card-header class=\"adf-new-task-heading\">\n <mat-card-title>{{'ADF_TASK_LIST.START_TASK.FORM.TITLE' | translate}}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <form [formGroup]=\"taskForm\" class=\"adf-new-task-form\">\n <div class=\"adf-task-name\">\n <mat-form-field>\n <mat-label>{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n id=\"name_id\"\n formControlName=\"name\">\n <mat-error *ngIf=\"nameController.hasError('required') || nameController.hasError('whitespace')\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ERROR.REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxTaskNameLength } }}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"adf-task-description\">\n <mat-form-field>\n <mat-label>{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.DESCRIPTION' | translate}}</mat-label>\n <textarea\n matInput\n rows=\"1\"\n id=\"description_id\"\n formControlName=\"description\">\n </textarea>\n <mat-error *ngIf=\"descriptionController.hasError('whitespace')\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ERROR.MESSAGE' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"adf-input-row\">\n <mat-form-field>\n <input\n matInput\n (keyup)=\"onDateChanged($any($event).srcElement.value)\"\n (dateInput)=\"onDateChanged($any($event).value)\"\n [matDatepicker]=\"taskDatePicker\"\n placeholder=\"{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.DATE'|translate}}\"\n id=\"date_id\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"taskDatePicker\" />\n <mat-datepicker\n #taskDatePicker\n [touchUi]=\"true\" />\n <div class=\"adf-error-text-container\">\n <div *ngIf=\"dateError\">\n <div class=\"adf-error-text\">{{'ADF_TASK_LIST.START_TASK.FORM.ERROR.DATE'|translate}}</div>\n <mat-icon class=\"adf-error-icon\">warning</mat-icon>\n </div>\n </div>\n </mat-form-field>\n <people-widget\n (peopleSelected)=\"setAssigneeId($event)\"\n [field]=\"field\"\n class=\"adf-people-widget-content\" />\n </div>\n <mat-form-field class=\"adf-task-form\">\n <mat-label id=\"form_label\">{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.FORM'|translate}}</mat-label>\n <mat-select\n id=\"form_id\"\n class=\"form-control\"\n formControlName=\"formKey\">\n <mat-option>{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.NONE'|translate}}</mat-option>\n <mat-option *ngFor=\"let form of forms$ | async\" [value]=\"form.id\">{{ form.name }}</mat-option>\n </mat-select>\n </mat-form-field>\n </form>\n </mat-card-content>\n <mat-card-actions>\n <div class=\"adf-new-task-footer\">\n <button\n mat-button\n class=\"adf-uppercase\"\n (click)=\"onCancel()\"\n id=\"button-cancel\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ACTION.CANCEL' | translate }}\n </button>\n <button\n color=\"primary\"\n mat-button\n class=\"adf-uppercase\"\n [disabled]=\"!isFormValid()\"\n (click)=\"saveTask()\"\n id=\"button-start\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ACTION.START' | translate }}\n </button>\n </div>\n </mat-card-actions>\n</mat-card>\n", styles: [".adf-new-task-heading{padding-top:12px;border-bottom:1px solid var(--adf-theme-foreground-divider-color)}.adf-new-task-heading .mat-mdc-card-title{font-weight:700;font-size:var(--theme-adf-task-title-font-size)}.adf-new-task-layout-card{margin:10px auto;flex:1 1 100%;max-width:70%}.adf-new-task-layout-card .adf-new-task-form{flex-direction:column;display:flex}.adf-new-task-layout-card .adf-new-task-form .adf-task-name,.adf-new-task-layout-card .adf-new-task-form .adf-task-description{display:flex;margin-bottom:10px}.adf-new-task-layout-card .adf-new-task-form .adf-task-name mat-form-field,.adf-new-task-layout-card .adf-new-task-form .adf-task-description mat-form-field{flex:1}@media (max-width: 959.9px){.adf-new-task-layout-card .adf-new-task-form .adf-input-row{flex-direction:column}}@media (max-width: 959.9px){.adf-new-task-layout-card .adf-new-task-form .adf-input-row mat-form-field{margin-right:20px}}.adf-new-task-layout-card .adf-new-task-form .adf-task-form{flex:1 1 100%;box-sizing:border-box;max-width:48%}@media (max-width: 599.9px){.adf-new-task-layout-card .adf-new-task-form .adf-task-form{max-width:100%}}.adf-new-task-footer{padding:4px;font-size:var(--theme-adf-task-footer-font-size);border-top:1px solid #eee;display:flex;place-content:flex-end;align-items:flex-end}.adf-mat-select{padding-top:0}adf-start-task .mat-mdc-button.adf-uppercase{text-transform:uppercase}adf-start-task people-widget.adf-people-widget-content{width:100%}adf-start-task people-widget.adf-people-widget-content .mat-mdc-floating-label{top:-14px}adf-start-task .adf-people-widget-content .mat-mdc-form-field{width:100%}adf-start-task .adf-people-widget-content .adf-label{line-height:0}adf-start-task .adf-people-widget-content .adf-error-container{margin-top:-10px}adf-start-task .adf-start-task-input-container .mat-mdc-text-field-wrapper{padding-top:8px}adf-start-task .adf-error-text-container{position:absolute;height:20px;margin-top:12px;width:100%}adf-start-task .adf-error-text-container>div{display:flex;flex-flow:row;justify-content:flex-start}adf-start-task .adf-error-text{padding-right:8px;height:16px;font-size:var(--theme-caption-font-size);line-height:1.33;color:var(--theme-warn-color);width:auto}adf-start-task .adf-error-icon{font-size:var(--theme-adf-icon-1-font-size);color:var(--theme-warn-color)}adf-start-task .adf-label{color:#bababa}adf-start-task .adf-invalid .adf-file{border-color:var(--theme-warn-color)}adf-start-task .adf-invalid .mat-mdc-form-field-text-prefix{color:var(--theme-warn-color)}adf-start-task .adf-invalid .adf-input{border-color:var(--theme-warn-color)}adf-start-task .adf-invalid .adf-label{color:var(--theme-warn-color)}adf-start-task .adf-invalid .adf-label:after{background-color:var(--theme-warn-color)}\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: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i7.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: PeopleWidgetComponent, selector: "people-widget", outputs: ["peopleSelected"] }], encapsulation: i0.ViewEncapsulation.None }); }
190
- }
191
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StartTaskComponent, decorators: [{
192
- type: Component,
193
- args: [{ selector: 'adf-start-task', standalone: true, imports: [
194
- CommonModule,
195
- TranslatePipe,
196
- MatCardModule,
197
- ReactiveFormsModule,
198
- MatFormFieldModule,
199
- MatInputModule,
200
- MatDatepickerModule,
201
- MatIconModule,
202
- MatSelectModule,
203
- MatButtonModule,
204
- PeopleWidgetComponent
205
- ], providers: [
206
- { provide: DateAdapter, useClass: AdfDateFnsAdapter },
207
- { provide: MAT_DATE_FORMATS, useValue: ADF_DATE_FORMATS }
208
- ], encapsulation: ViewEncapsulation.None, template: "<mat-card appearance=\"outlined\" class=\"adf-new-task-layout-card\">\n <mat-card-header class=\"adf-new-task-heading\">\n <mat-card-title>{{'ADF_TASK_LIST.START_TASK.FORM.TITLE' | translate}}</mat-card-title>\n </mat-card-header>\n <mat-card-content>\n <form [formGroup]=\"taskForm\" class=\"adf-new-task-form\">\n <div class=\"adf-task-name\">\n <mat-form-field>\n <mat-label>{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.NAME' | translate}}</mat-label>\n <input\n matInput\n id=\"name_id\"\n formControlName=\"name\">\n <mat-error *ngIf=\"nameController.hasError('required') || nameController.hasError('whitespace')\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ERROR.REQUIRED' | translate }}\n </mat-error>\n <mat-error *ngIf=\"nameController.hasError('maxlength')\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ERROR.MAXIMUM_LENGTH' | translate : { characters : maxTaskNameLength } }}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"adf-task-description\">\n <mat-form-field>\n <mat-label>{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.DESCRIPTION' | translate}}</mat-label>\n <textarea\n matInput\n rows=\"1\"\n id=\"description_id\"\n formControlName=\"description\">\n </textarea>\n <mat-error *ngIf=\"descriptionController.hasError('whitespace')\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ERROR.MESSAGE' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n <div class=\"adf-input-row\">\n <mat-form-field>\n <input\n matInput\n (keyup)=\"onDateChanged($any($event).srcElement.value)\"\n (dateInput)=\"onDateChanged($any($event).value)\"\n [matDatepicker]=\"taskDatePicker\"\n placeholder=\"{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.DATE'|translate}}\"\n id=\"date_id\">\n <mat-datepicker-toggle\n matSuffix\n [for]=\"taskDatePicker\" />\n <mat-datepicker\n #taskDatePicker\n [touchUi]=\"true\" />\n <div class=\"adf-error-text-container\">\n <div *ngIf=\"dateError\">\n <div class=\"adf-error-text\">{{'ADF_TASK_LIST.START_TASK.FORM.ERROR.DATE'|translate}}</div>\n <mat-icon class=\"adf-error-icon\">warning</mat-icon>\n </div>\n </div>\n </mat-form-field>\n <people-widget\n (peopleSelected)=\"setAssigneeId($event)\"\n [field]=\"field\"\n class=\"adf-people-widget-content\" />\n </div>\n <mat-form-field class=\"adf-task-form\">\n <mat-label id=\"form_label\">{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.FORM'|translate}}</mat-label>\n <mat-select\n id=\"form_id\"\n class=\"form-control\"\n formControlName=\"formKey\">\n <mat-option>{{'ADF_TASK_LIST.START_TASK.FORM.LABEL.NONE'|translate}}</mat-option>\n <mat-option *ngFor=\"let form of forms$ | async\" [value]=\"form.id\">{{ form.name }}</mat-option>\n </mat-select>\n </mat-form-field>\n </form>\n </mat-card-content>\n <mat-card-actions>\n <div class=\"adf-new-task-footer\">\n <button\n mat-button\n class=\"adf-uppercase\"\n (click)=\"onCancel()\"\n id=\"button-cancel\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ACTION.CANCEL' | translate }}\n </button>\n <button\n color=\"primary\"\n mat-button\n class=\"adf-uppercase\"\n [disabled]=\"!isFormValid()\"\n (click)=\"saveTask()\"\n id=\"button-start\">\n {{ 'ADF_TASK_LIST.START_TASK.FORM.ACTION.START' | translate }}\n </button>\n </div>\n </mat-card-actions>\n</mat-card>\n", styles: [".adf-new-task-heading{padding-top:12px;border-bottom:1px solid var(--adf-theme-foreground-divider-color)}.adf-new-task-heading .mat-mdc-card-title{font-weight:700;font-size:var(--theme-adf-task-title-font-size)}.adf-new-task-layout-card{margin:10px auto;flex:1 1 100%;max-width:70%}.adf-new-task-layout-card .adf-new-task-form{flex-direction:column;display:flex}.adf-new-task-layout-card .adf-new-task-form .adf-task-name,.adf-new-task-layout-card .adf-new-task-form .adf-task-description{display:flex;margin-bottom:10px}.adf-new-task-layout-card .adf-new-task-form .adf-task-name mat-form-field,.adf-new-task-layout-card .adf-new-task-form .adf-task-description mat-form-field{flex:1}@media (max-width: 959.9px){.adf-new-task-layout-card .adf-new-task-form .adf-input-row{flex-direction:column}}@media (max-width: 959.9px){.adf-new-task-layout-card .adf-new-task-form .adf-input-row mat-form-field{margin-right:20px}}.adf-new-task-layout-card .adf-new-task-form .adf-task-form{flex:1 1 100%;box-sizing:border-box;max-width:48%}@media (max-width: 599.9px){.adf-new-task-layout-card .adf-new-task-form .adf-task-form{max-width:100%}}.adf-new-task-footer{padding:4px;font-size:var(--theme-adf-task-footer-font-size);border-top:1px solid #eee;display:flex;place-content:flex-end;align-items:flex-end}.adf-mat-select{padding-top:0}adf-start-task .mat-mdc-button.adf-uppercase{text-transform:uppercase}adf-start-task people-widget.adf-people-widget-content{width:100%}adf-start-task people-widget.adf-people-widget-content .mat-mdc-floating-label{top:-14px}adf-start-task .adf-people-widget-content .mat-mdc-form-field{width:100%}adf-start-task .adf-people-widget-content .adf-label{line-height:0}adf-start-task .adf-people-widget-content .adf-error-container{margin-top:-10px}adf-start-task .adf-start-task-input-container .mat-mdc-text-field-wrapper{padding-top:8px}adf-start-task .adf-error-text-container{position:absolute;height:20px;margin-top:12px;width:100%}adf-start-task .adf-error-text-container>div{display:flex;flex-flow:row;justify-content:flex-start}adf-start-task .adf-error-text{padding-right:8px;height:16px;font-size:var(--theme-caption-font-size);line-height:1.33;color:var(--theme-warn-color);width:auto}adf-start-task .adf-error-icon{font-size:var(--theme-adf-icon-1-font-size);color:var(--theme-warn-color)}adf-start-task .adf-label{color:#bababa}adf-start-task .adf-invalid .adf-file{border-color:var(--theme-warn-color)}adf-start-task .adf-invalid .mat-mdc-form-field-text-prefix{color:var(--theme-warn-color)}adf-start-task .adf-invalid .adf-input{border-color:var(--theme-warn-color)}adf-start-task .adf-invalid .adf-label{color:var(--theme-warn-color)}adf-start-task .adf-invalid .adf-label:after{background-color:var(--theme-warn-color)}\n"] }]
209
- }], ctorParameters: () => [{ type: i1.TaskListService }, { type: i2.UntypedFormBuilder }], propDecorators: { appId: [{
210
- type: Input,
211
- args: [{ required: true }]
212
- }], name: [{
213
- type: Input
214
- }], success: [{
215
- type: Output
216
- }], cancel: [{
217
- type: Output
218
- }], error: [{
219
- type: Output
220
- }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnQtdGFzay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Rhc2stbGlzdC9jb21wb25lbnRzL3N0YXJ0LXRhc2svc3RhcnQtdGFzay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy9zcmMvbGliL3Rhc2stbGlzdC9jb21wb25lbnRzL3N0YXJ0LXRhc2svc3RhcnQtdGFzay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFtQixtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBb0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUksT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxP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LEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7WUFDckQsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFO1NBQzVELDBCQy9ETCw4bUpBK0ZBLG93RkRqRFEsWUFBWSxnVEFDWixhQUFhLGlEQUNiLGFBQWEsaWhCQUNiLG1CQUFtQiw0OEJBQ25CLGtCQUFrQix3Z0JBQ2xCLGNBQWMsMFdBQ2QsbUJBQW1CLGlnQkFDbkIsYUFBYSxtTEFDYixlQUFlLG9yQkFDZixlQUFlLDZOQUNmLHFCQUFxQjs7NEZBVWhCLGtCQUFrQjtrQkF4QjlCLFNBQVM7K0JBQ0ksZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YscUJBQXFCO3FCQUN4QixhQUdVO3dCQUNQLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7d0JBQ3JELEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRTtxQkFDNUQsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTtxSEFLckMsS0FBSztzQkFESixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFLekIsSUFBSTtzQkFESCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sTUFBTTtnQkFLUCxNQUFNO3NCQURMLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBBREZfREFURV9GT1JNQVRTLCBBZGZEYXRlRm5zQWRhcHRlciwgRGF0ZUZuc1V0aWxzLCBGb3JtRmllbGRNb2RlbCwgRm9ybU1vZGVsIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBNQVRfREFURV9GT1JNQVRTIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IFRhc2tMaXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rhc2tsaXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1ZhbGlkIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgVGFza1JlcHJlc2VudGF0aW9uIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgUGVvcGxlV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZm9ybSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmNvbnN0IEZPUk1BVF9EQVRFID0gJ0REL01NL1lZWVknO1xuY29uc3QgTUFYX0xFTkdUSCA9IDI1NTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtc3RhcnQtdGFzaycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTWF0Q2FyZE1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIFBlb3BsZVdpZGdldENvbXBvbmVudFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N0YXJ0LXRhc2suY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0YXJ0LXRhc2suY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBEYXRlQWRhcHRlciwgdXNlQ2xhc3M6IEFkZkRhdGVGbnNBZGFwdGVyIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTUFUX0RBVEVfRk9STUFUUywgdXNlVmFsdWU6IEFERl9EQVRFX0ZPUk1BVFMgfVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTdGFydFRhc2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKiAocmVxdWlyZWQpIFRoZSBpZCBvZiB0aGUgYXBwLiAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgYXBwSWQ6IG51bWJlcjtcblxuICAgIC8qKiBEZWZhdWx0IFRhc2sgTmFtZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdGFzayBpcyBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBjYW5jZWwgYnV0dG9uIGlzIGNsaWNrZWQgYnkgdGhlIHVzZXIuICovXG4gICAgQE91dHB1dCgpXG4gICAgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHRhc2tEZXRhaWxzTW9kZWwgPSBuZXcgVGFza1JlcHJlc2VudGF0aW9uKCk7XG4gICAgZm9ybXMkOiBPYnNlcnZhYmxlPEZvcm1bXT47XG4gICAgYXNzaWduZWVJZDogbnVtYmVyO1xuICAgIGZpZWxkOiBGb3JtRmllbGRNb2RlbDtcbiAgICB0YXNrRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgICBkYXRlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBtYXhUYXNrTmFtZUxlbmd0aDogbnVtYmVyID0gTUFYX0xFTkdUSDtcbiAgICBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhc2tTZXJ2aWNlOiBUYXNrTGlzdFNlcnZpY2UsIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcikge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzTW9kZWwubmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsaWRhdGVNYXhUYXNrTmFtZUxlbmd0aCgpO1xuXG4gICAgICAgIHRoaXMuZmllbGQgPSBuZXcgRm9ybUZpZWxkTW9kZWwobmV3IEZvcm1Nb2RlbCgpLCB7IGlkOiB0aGlzLmFzc2lnbmVlSWQsIHZhbHVlOiB0aGlzLmFzc2lnbmVlSWQsIHBsYWNlaG9sZGVyOiAnQXNzaWduZWUnIH0pO1xuXG4gICAgICAgIHRoaXMubG9hZEZvcm1zVGFzaygpO1xuICAgICAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICAgIH1cblxuICAgIGJ1aWxkRm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YXNrRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgbmFtZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLnRhc2tEZXRhaWxzTW9kZWwubmFtZSwgW1xuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXhUYXNrTmFtZUxlbmd0aCksXG4gICAgICAgICAgICAgICAgdGhpcy53aGl0ZXNwYWNlVmFsaWRhdG9yXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBbdGhpcy53aGl0ZXNwYWNlVmFsaWRhdG9yXSksXG4gICAgICAgICAgICBmb3JtS2V5OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRhc2tGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHRhc2tGb3JtVmFsdWVzKSA9PiB0aGlzLnNldFRhc2tEZXRhaWxzKHRhc2tGb3JtVmFsdWVzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3aGl0ZXNwYWNlVmFsaWRhdG9yKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IGFueSB7XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBpc1doaXRlc3BhY2UgPSAoY29udHJvbC52YWx1ZSB8fCAnJykudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgIGNvbnN0IGlzQ29udHJvbFZhbGlkID0gY29udHJvbC52YWx1ZS5sZW5ndGggPT09IDAgfHwgIWlzV2hpdGVzcGFjZTtcbiAgICAgICAgICAgIHJldHVybiBpc0NvbnRyb2xWYWxpZCA/IG51bGwgOiB7IHdoaXRlc3BhY2U6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzZXRUYXNrRGV0YWlscyhmb3JtOiBhbnkpIHtcbiAgICAgICAgdGhpcy50YXNrRGV0YWlsc01vZGVsLm5hbWUgPSBmb3JtLm5hbWU7XG4gICAgICAgIHRoaXMudGFza0RldGFpbHNNb2RlbC5kZXNjcmlwdGlvbiA9IGZvcm0uZGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMudGFza0RldGFpbHNNb2RlbC5mb3JtS2V5ID0gZm9ybS5mb3JtS2V5ID8gZm9ybS5mb3JtS2V5LnRvU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGlzRm9ybVZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrRm9ybS52YWxpZCAmJiAhdGhpcy5kYXRlRXJyb3IgJiYgIXRoaXMubG9hZGluZztcbiAgICB9XG5cbiAgICBzYXZlVGFzaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuYXBwSWQpIHtcbiAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHNNb2RlbC5jYXRlZ29yeSA9IHRoaXMuYXBwSWQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhc2tTZXJ2aWNlXG4gICAgICAgICAgICAuY3JlYXRlTmV3VGFzayh0aGlzLnRhc2tEZXRhaWxzTW9kZWwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGNyZWF0ZVJlcykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hGb3JtKGNyZWF0ZVJlcy5pZCwgdGhpcy50YXNrRGV0YWlsc01vZGVsLmZvcm1LZXkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0SWZFbXB0eShjcmVhdGVSZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChhdHRhY2hSZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhc3NpZ25lZUlkID0gdGhpcy5hc3NpZ25lZUlkID8gdGhpcy5hc3NpZ25lZUlkLnRvU3RyaW5nKCkgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFzc2lnblRhc2tCeVVzZXJJZChjcmVhdGVSZXMuaWQsIGFzc2lnbmVlSWQpLnBpcGUoZGVmYXVsdElmRW1wdHkoYXR0YWNoUmVzID8gYXR0YWNoUmVzIDogY3JlYXRlUmVzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzcy5lbWl0KHJlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHNldEFzc2lnbmVlSWQodXNlcklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hc3NpZ25lZUlkID0gdXNlcklkO1xuICAgIH1cblxuICAgIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheVVzZXIoZmlyc3ROYW1lOiBzdHJpbmcsIGxhc3ROYW1lOiBzdHJpbmcsIGRlbGltaXRlcjogc3RyaW5nID0gJy0nKTogc3RyaW5nIHtcbiAgICAgICAgZmlyc3ROYW1lID0gZmlyc3ROYW1lICE9PSBudWxsID8gZmlyc3ROYW1lIDogJyc7XG4gICAgICAgIGxhc3ROYW1lID0gbGFzdE5hbWUgIT09IG51bGwgPyBsYXN0TmFtZSA6ICcnO1xuICAgICAgICByZXR1cm4gZmlyc3ROYW1lICsgZGVsaW1pdGVyICsgbGFzdE5hbWU7XG4gICAgfVxuXG4gICAgb25EYXRlQ2hhbmdlZChuZXdEYXRlVmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kYXRlRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICBpZiAobmV3RGF0ZVZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgZGF0ZTogRGF0ZTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuZXdEYXRlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZGF0ZSA9IERhdGVGbnNVdGlscy5wYXJzZURhdGUobmV3RGF0ZVZhbHVlLCBGT1JNQVRfREFURSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBuZXdEYXRlVmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlsc01vZGVsLmR1ZURhdGUgPSBkYXRlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlsc01vZGVsLmR1ZURhdGUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlsc01vZGVsLmR1ZURhdGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZU1heFRhc2tOYW1lTGVuZ3RoKCkge1xuICAgICAgICBpZiAodGhpcy5tYXhUYXNrTmFtZUxlbmd0aCA+IE1BWF9MRU5HVEgpIHtcbiAgICAgICAgICAgIHRoaXMubWF4VGFza05hbWVMZW5ndGggPSBNQVhfTEVOR1RIO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG5hbWVDb250cm9sbGVyKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhc2tGb3JtLmdldCgnbmFtZScpO1xuICAgIH1cblxuICAgIGdldCBkZXNjcmlwdGlvbkNvbnRyb2xsZXIoKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza0Zvcm0uZ2V0KCdkZXNjcmlwdGlvbicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoRm9ybSh0YXNrSWQ6IHN0cmluZywgZm9ybUtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlOiBhbnkgPSBFTVBUWTtcbiAgICAgICAgaWYgKHRhc2tJZCAmJiBmb3JtS2V5KSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IHRoaXMudGFza1NlcnZpY2UuYXR0YWNoRm9ybVRvQVRhc2sodGFza0lkLCBwYXJzZUludChmb3JtS2V5LCAxMCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzc2lnblRhc2tCeVVzZXJJZCh0YXNrSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRhc2tSZXByZXNlbnRhdGlvbj4ge1xuICAgICAgICBpZiAodGFza0lkICYmIHVzZXJJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFza1NlcnZpY2UuYXNzaWduVGFza0J5VXNlcklkKHRhc2tJZCwgdXNlcklkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRm9ybXNUYXNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1zJCA9IHRoaXMudGFza1NlcnZpY2UuZ2V0Rm9ybUxpc3QoKTtcbiAgICB9XG59XG4iLCI8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgY2xhc3M9XCJhZGYtbmV3LXRhc2stbGF5b3V0LWNhcmRcIj5cbiAgICA8bWF0LWNhcmQtaGVhZGVyIGNsYXNzPVwiYWRmLW5ldy10YXNrLWhlYWRpbmdcIj5cbiAgICAgICAgPG1hdC1jYXJkLXRpdGxlPnt7J0FERl9UQVNLX0xJU1QuU1RBUlRfVEFTSy5GT1JNLlRJVExFJyB8IHRyYW5zbGF0ZX19PC9tYXQtY2FyZC10aXRsZT5cbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ0YXNrRm9ybVwiIGNsYXNzPVwiYWRmLW5ldy10YXNrLWZvcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFzay1uYW1lXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7J0FERl9UQVNLX0xJU1QuU1RBUlRfVEFTSy5GT1JNLkxBQkVMLk5BTUUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJuYW1lX2lkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJuYW1lQ29udHJvbGxlci5oYXNFcnJvcigncmVxdWlyZWQnKSB8fCBuYW1lQ29udHJvbGxlci5oYXNFcnJvcignd2hpdGVzcGFjZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERl9UQVNLX0xJU1QuU1RBUlRfVEFTSy5GT1JNLkVSUk9SLlJFUVVJUkVEJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwibmFtZUNvbnRyb2xsZXIuaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERl9UQVNLX0xJU1QuU1RBUlRfVEFTSy5GT1JNLkVSUk9SLk1BWElNVU1fTEVOR1RIJyB8IHRyYW5zbGF0ZSA6IHsgY2hhcmFjdGVycyA6IG1heFRhc2tOYW1lTGVuZ3RoIH0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtdGFzay1kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eydBREZfVEFTS19MSVNULlNUQVJUX1RBU0suRk9STS5MQUJFTC5ERVNDUklQVElPTicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dzPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRlc2NyaXB0aW9uX2lkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJkZXNjcmlwdGlvbkNvbnRyb2xsZXIuaGFzRXJyb3IoJ3doaXRlc3BhY2UnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERl9UQVNLX0xJU1QuU1RBUlRfVEFTSy5GT1JNLkVSUk9SLk1FU1NBR0UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtaW5wdXQtcm93XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25EYXRlQ2hhbmdlZCgkYW55KCRldmVudCkuc3JjRWxlbWVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVJbnB1dCk9XCJvbkRhdGVDaGFuZ2VkKCRhbnkoJGV2ZW50KS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwidGFza0RhdGVQaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydBREZfVEFTS19MSVNULlNUQVJUX1RBU0suRk9STS5MQUJFTC5EQVRFJ3x0cmFuc2xhdGV9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGVfaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9yXT1cInRhc2tEYXRlUGlja2VyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAjdGFza0RhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b3VjaFVpXT1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVycm9yLXRleHQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0ZUVycm9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lcnJvci10ZXh0XCI+e3snQURGX1RBU0tfTElTVC5TVEFSVF9UQVNLLkZPUk0uRVJST1IuREFURSd8dHJhbnNsYXRlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtZXJyb3ItaWNvblwiPndhcm5pbmc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPHBlb3BsZS13aWRnZXRcbiAgICAgICAgICAgICAgICAgICAgKHBlb3BsZVNlbGVjdGVkKT1cInNldEFzc2lnbmVlSWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXBlb3BsZS13aWRnZXQtY29udGVudFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFkZi10YXNrLWZvcm1cIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGlkPVwiZm9ybV9sYWJlbFwiPnt7J0FERl9UQVNLX0xJU1QuU1RBUlRfVEFTSy5GT1JNLkxBQkVMLkZPUk0nfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJmb3JtX2lkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb3JtS2V5XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+e3snQURGX1RBU0tfTElTVC5TVEFSVF9UQVNLLkZPUk0uTEFCRUwuTk9ORSd8dHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGZvcm0gb2YgZm9ybXMkIHwgYXN5bmNcIiBbdmFsdWVdPVwiZm9ybS5pZFwiPnt7IGZvcm0ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDxtYXQtY2FyZC1hY3Rpb25zPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5ldy10YXNrLWZvb3RlclwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi11cHBlcmNhc2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNhbmNlbCgpXCJcbiAgICAgICAgICAgICAgICBpZD1cImJ1dHRvbi1jYW5jZWxcIj5cbiAgICAgICAgICAgICAgICB7eyAnQURGX1RBU0tfTElTVC5TVEFSVF9UQVNLLkZPUk0uQUNUSU9OLkNBTkNFTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLXVwcGVyY2FzZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZVRhc2soKVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJidXR0b24tc3RhcnRcIj5cbiAgICAgICAgICAgICAgICB7eyAnQURGX1RBU0tfTElTVC5TVEFSVF9UQVNLLkZPUk0uQUNUSU9OLlNUQVJUJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbjwvbWF0LWNhcmQ+XG4iXX0=