mmhglobal-dynamicform 2.0.0-beta.62 → 2.0.0-beta.63

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/README.md CHANGED
@@ -3,6 +3,10 @@
3
3
  This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
4
4
 
5
5
  ## Changelog
6
+ `2.63beta`<br/>
7
+ [zudf] - enhancement for ChildFields feature which will be auto populate value related base on configuration. <br/>
8
+ [inputfieldbase zudf] - enhancement to support event triggering by async when onchange. <br/>
9
+
6
10
  `2.62beta`<br/>
7
11
  [zbuttons] - Allow binding group.xxx to button label and use setLabelText() to update at runtime.<br/>
8
12
  [zbuttons] - Fix buttons click-event in mobile mode.<br/>
@@ -1,6 +1,7 @@
1
1
  import { Component, EventEmitter, Output } from "@angular/core";
2
2
  import { ZComponentHelper } from "mmhglobal-zcore";
3
3
  import { FieldBase } from "./fieldbase.component";
4
+ import { of, switchMap, tap } from "rxjs";
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "../services/zcomponent.service";
6
7
  // For: zcheckbox, zchip, zdatetime, zimg, zinput-container, zlabel, znumeric, zpostselectinput, zselectmultiple, ztext, ztextarea, zupload
@@ -17,23 +18,64 @@ export class InputFieldBase extends FieldBase {
17
18
  this.triggerEvent("inputfield-onChangeCC", this.data.CCOnChange, event, fieldValue);
18
19
  }
19
20
  onChange(event, fieldValue) {
20
- if (this.data.SubType) {
21
- if (this.data.SubType === 'zudf') {
22
- const zudfFieldValue = this.getFieldValue(event, fieldValue);
23
- const zudfContainerScope = ZComponentHelper.getZudfContainerScope(this.group, this.data.Value);
24
- if (!zudfContainerScope) {
25
- console.log('zudf scope is null for field onchange.');
26
- }
27
- zudfContainerScope.zModel[this.data.Value] = zudfFieldValue;
28
- }
29
- else {
30
- ZComponentHelper.setComponentModelValue(this.data, this.getFieldValue(event, fieldValue), this.group);
21
+ if (this.data.SubType && this.data.SubType === 'zudf') {
22
+ const zudfFieldValue = this.getFieldValue(event, fieldValue);
23
+ const zudfContainerScope = ZComponentHelper.getZudfContainerScope(this.group, this.data.Value);
24
+ if (!zudfContainerScope) {
25
+ console.log('zudf scope is null for field onchange.');
31
26
  }
27
+ zudfContainerScope.zModel[this.data.Value] = zudfFieldValue;
28
+ of({}).pipe(switchMap(res => {
29
+ const eventName = 'TriggerDependentFiltering';
30
+ if (this.group) {
31
+ if (this.group[eventName]) {
32
+ return this.group[eventName](this.group);
33
+ }
34
+ }
35
+ return of({});
36
+ }), tap(res => {
37
+ if (this.data['AutoPopulateChildFieldValue']) {
38
+ // ZUDF. Auto Populate child field value
39
+ if (this.data['ChildFields']) {
40
+ // get the selected data full info
41
+ const dataOption = this.group.zData[this.data['ZDataOptionName']];
42
+ let selectedDataOption = null;
43
+ dataOption.forEach(option => {
44
+ if (option.Id === fieldValue) {
45
+ selectedDataOption = Object.assign({}, option);
46
+ return;
47
+ }
48
+ });
49
+ // set to all related zMode of the dropdown
50
+ let fg = zudfContainerScope.form;
51
+ if (selectedDataOption) {
52
+ this.data['ChildFields'].forEach(childField => {
53
+ // remove symbol.
54
+ let childFieldName = encodeURI(childField.replace(/[^a-z0-9]/gi, ""));
55
+ const fieldModelName = this.data.Name + childFieldName;
56
+ const zModels = zudfContainerScope.zModel;
57
+ zModels[fieldModelName] = selectedDataOption[childFieldName];
58
+ fg.patchValue(zModels);
59
+ });
60
+ }
61
+ }
62
+ }
63
+ }), switchMap(res => {
64
+ const eventName = 'triggerValidation';
65
+ if (this.group) {
66
+ if (this.group[eventName]) {
67
+ return this.group[eventName](this.group);
68
+ }
69
+ }
70
+ return of({});
71
+ })).subscribe(res => {
72
+ this.triggerEvent("inputfield-onChange", this.data.OnChange, event, fieldValue);
73
+ });
32
74
  }
33
75
  else {
34
76
  ZComponentHelper.setComponentModelValue(this.data, this.getFieldValue(event, fieldValue), this.group);
77
+ this.triggerEvent("inputfield-onChange", this.data.OnChange, event, fieldValue);
35
78
  }
36
- this.triggerEvent("inputfield-onChange", this.data.OnChange, event, fieldValue);
37
79
  }
38
80
  onItemClick(event, fieldValue) {
39
81
  this.triggerEvent("inputfield-onItemClick", this.data.OnItemClick, event, fieldValue);
@@ -91,4 +133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
91
133
  type: Output,
92
134
  args: ['triggerContainerEvent']
93
135
  }] } });
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQU9sRCwySUFBMkk7QUFDM0ksTUFBTSxPQUFPLGNBQWUsU0FBUSxTQUFTO0lBRTNDLFlBQVksV0FBOEI7UUFDeEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRlksMEJBQXFCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFHL0YsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFVLEVBQUUsVUFBZ0I7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBVSxFQUFFLFVBQWdCO1FBQzVDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RGLENB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QUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUFZO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBWSxFQUFFLE1BQVcsRUFBRSxLQUFVLEVBQUUsVUFBZ0I7UUFDNUUsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2dCQUNkLEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7YUFDNUQsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFVLEVBQUUsVUFBZ0I7UUFDaEQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxTQUFTLEVBQUU7WUFDakQsT0FBTyxLQUFLLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFBO1NBQzVDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQzs7NEdBeEZVLGNBQWM7Z0dBQWQsY0FBYyx3SUFKZixFQUFFOzRGQUlELGNBQWM7a0JBTDFCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2I7d0dBSWtDLHFCQUFxQjtzQkFBckQsTUFBTTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50IH0gZnJvbSBcIm1taGdsb2JhbC16Y29yZVwiO1xyXG5pbXBvcnQgeyBGaWVsZEJhc2UgfSBmcm9tIFwiLi9maWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGU6IGBgLFxyXG59KVxyXG5cclxuLy8gRm9yOiB6Y2hlY2tib3gsIHpjaGlwLCB6ZGF0ZXRpbWUsIHppbWcsIHppbnB1dC1jb250YWluZXIsIHpsYWJlbCwgem51bWVyaWMsIHpwb3N0c2VsZWN0aW5wdXQsIHpzZWxlY3RtdWx0aXBsZSwgenRleHQsIHp0ZXh0YXJlYSwgenVwbG9hZFxyXG5leHBvcnQgY2xhc3MgSW5wdXRGaWVsZEJhc2UgZXh0ZW5kcyBGaWVsZEJhc2Uge1xyXG4gIEBPdXRwdXQoJ3RyaWdnZXJDb250YWluZXJFdmVudCcpIHRyaWdnZXJDb250YWluZXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgY29uc3RydWN0b3IoY29tcFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihjb21wU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGljayhldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25DbGlja1wiLCB0aGlzLmRhdGEuT25DbGljaywgZXZlbnQsIGZpZWxkVmFsdWUgfHwgZXZlbnRbJ09uQ2xpY2snXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VDQyhldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCB0aGlzLmdyb3VwKTtcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkNoYW5nZUNDXCIsIHRoaXMuZGF0YS5DQ09uQ2hhbmdlLCBldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5TdWJUeXBlKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuU3ViVHlwZSA9PT0gJ3p1ZGYnKSB7XHJcbiAgICAgICAgY29uc3QgenVkZkZpZWxkVmFsdWUgPSB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHp1ZGZDb250YWluZXJTY29wZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0WnVkZkNvbnRhaW5lclNjb3BlKHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcblxyXG4gICAgICAgIGlmICghenVkZkNvbnRhaW5lclNjb3BlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnenVkZiBzY29wZSBpcyBudWxsIGZvciBmaWVsZCBvbmNoYW5nZS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgenVkZkNvbnRhaW5lclNjb3BlLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdID0genVkZkZpZWxkVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRNb2RlbFZhbHVlKHRoaXMuZGF0YSwgdGhpcy5nZXRGaWVsZFZhbHVlKGV2ZW50LCBmaWVsZFZhbHVlKSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25DaGFuZ2VcIiwgdGhpcy5kYXRhLk9uQ2hhbmdlLCBldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JdGVtQ2xpY2soZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uSXRlbUNsaWNrXCIsIHRoaXMuZGF0YS5Pbkl0ZW1DbGljaywgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSWNvbkNsaWNrKGNsaWNrQWN0aW9uRXhwcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25JY29uQ2xpY2tcIiwgY2xpY2tBY3Rpb25FeHByLCBudWxsLCB0aGlzLmdyb3VwLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZWFkT25seVZhbHVlKCkge1xyXG4gICAgY29uc3QgcmVhZE9ubHlWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuUmVhZE9ubHkpO1xyXG4gICAgaWYgKHR5cGVvZiByZWFkT25seVZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gcmVhZE9ubHlWYWx1ZS5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlYWRPbmx5VmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNSZXF1aXJlZFZhbHVlKCkge1xyXG4gICAgY29uc3QgSXNSZXF1aXJlZFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5Jc1JlcXVpcmVkKTtcclxuICAgIGlmICh0eXBlb2YgSXNSZXF1aXJlZFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gSXNSZXF1aXJlZFZhbHVlLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXR1cm4gY2FsbEZ1bmModGhpcy5ncm91cCk7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIElzUmVxdWlyZWRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB2YWx1ZSwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QWRkT25WYWx1ZShhZGRPbnM/OiBhbnkpIHtcclxuICAgIHRoaXMudHJpZ2dlckNvbnRhaW5lckV2ZW50LmVtaXQoeyB0eXBlOiAnc2V0QWRkT25WYWx1ZScsIGRhdGE6IGFkZE9ucyB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0cmlnZ2VyRXZlbnQodHlwZTogc3RyaW5nLCB0YXJnZXQ6IGFueSwgZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICBldmVudCxcclxuICAgICAgICBkYXRhOiB7IHZhbHVlOiB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCBmaWVsZDogdGhpcy5kYXRhLCBjb21wOiB0aGlzIH1cclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZFZhbHVlKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIGlmIChmaWVsZFZhbHVlID09IG51bGwgfHwgZmllbGRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGV2ZW50Py52YWx1ZSB8fCBldmVudD8udGFyZ2V0Py52YWx1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkVmFsdWU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFPMUMsMklBQTJJO0FBQzNJLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUUzQyxZQUFZLFdBQThCO1FBQ3hDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUZZLDBCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRy9GLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBVSxFQUFFLFVBQWdCO1FBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQVUsRUFBRSxVQUFnQjtRQUM1QyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsWUFBWSxDQUFDLHVCQUF1QixFQUFFLElB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RVMsWUFBWSxDQUFDLElBQVksRUFBRSxNQUFXLEVBQUUsS0FBVSxFQUFFLFVBQWdCO1FBQzVFLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN0QixJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsTUFBTTtnQkFDZCxLQUFLO2dCQUNMLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2FBQzVELENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsS0FBVSxFQUFFLFVBQWdCO1FBQ2hELElBQUksVUFBVSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksU0FBUyxFQUFFO1lBQ2pELE9BQU8sS0FBSyxFQUFFLEtBQUssSUFBSSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQTtTQUM1QztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7OzRHQXhJVSxjQUFjO2dHQUFkLGNBQWMsd0lBSmYsRUFBRTs0RkFJRCxjQUFjO2tCQUwxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxFQUFFO2lCQUNiO3dHQUlrQyxxQkFBcUI7c0JBQXJELE1BQU07dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRPdXRwdXRFdmVudCB9IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgRmllbGRCYXNlIH0gZnJvbSBcIi4vZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogYGAsXHJcbn0pXHJcblxyXG4vLyBGb3I6IHpjaGVja2JveCwgemNoaXAsIHpkYXRldGltZSwgemltZywgemlucHV0LWNvbnRhaW5lciwgemxhYmVsLCB6bnVtZXJpYywgenBvc3RzZWxlY3RpbnB1dCwgenNlbGVjdG11bHRpcGxlLCB6dGV4dCwgenRleHRhcmVhLCB6dXBsb2FkXHJcbmV4cG9ydCBjbGFzcyBJbnB1dEZpZWxkQmFzZSBleHRlbmRzIEZpZWxkQmFzZSB7XHJcbiAgQE91dHB1dCgndHJpZ2dlckNvbnRhaW5lckV2ZW50JykgdHJpZ2dlckNvbnRhaW5lckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjb25zdHJ1Y3Rvcihjb21wU2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGNvbXBTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNsaWNrKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KFwiaW5wdXRmaWVsZC1vbkNsaWNrXCIsIHRoaXMuZGF0YS5PbkNsaWNrLCBldmVudCwgZmllbGRWYWx1ZSB8fCBldmVudFsnT25DbGljayddKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZUNDKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50TW9kZWxWYWx1ZSh0aGlzLmRhdGEsIHRoaXMuZ2V0RmllbGRWYWx1ZShldmVudCwgZmllbGRWYWx1ZSksIHRoaXMuZ3JvdXApO1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2hhbmdlQ0NcIiwgdGhpcy5kYXRhLkNDT25DaGFuZ2UsIGV2ZW50LCBmaWVsZFZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZShldmVudDogYW55LCBmaWVsZFZhbHVlPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlN1YlR5cGUgJiYgdGhpcy5kYXRhLlN1YlR5cGUgPT09ICd6dWRmJykge1xyXG4gICAgICBjb25zdCB6dWRmRmllbGRWYWx1ZSA9IHRoaXMuZ2V0RmllbGRWYWx1ZShldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgICAgIGNvbnN0IHp1ZGZDb250YWluZXJTY29wZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0WnVkZkNvbnRhaW5lclNjb3BlKHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSk7XHJcblxyXG4gICAgICBpZiAoIXp1ZGZDb250YWluZXJTY29wZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd6dWRmIHNjb3BlIGlzIG51bGwgZm9yIGZpZWxkIG9uY2hhbmdlLicpO1xyXG4gICAgICB9XHJcbiAgICAgIHp1ZGZDb250YWluZXJTY29wZS56TW9kZWxbdGhpcy5kYXRhLlZhbHVlXSA9IHp1ZGZGaWVsZFZhbHVlO1xyXG4gICAgICBvZih7fSkucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAocmVzID0+IHtcclxuICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9ICdUcmlnZ2VyRGVwZW5kZW50RmlsdGVyaW5nJztcclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwW2V2ZW50TmFtZV0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cFtldmVudE5hbWVdKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRhcChyZXMgPT4geyBcclxuICAgICAgICAgIGlmICh0aGlzLmRhdGFbJ0F1dG9Qb3B1bGF0ZUNoaWxkRmllbGRWYWx1ZSddKSB7IFxyXG4gICAgICAgICAgICAvLyBaVURGLiBBdXRvIFBvcHVsYXRlIGNoaWxkIGZpZWxkIHZhbHVlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbJ0NoaWxkRmllbGRzJ10pIHtcclxuICAgICAgICAgICAgICAvLyBnZXQgdGhlIHNlbGVjdGVkIGRhdGEgZnVsbCBpbmZvIFxyXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGFPcHRpb24gPSB0aGlzLmdyb3VwLnpEYXRhW3RoaXMuZGF0YVsnWkRhdGFPcHRpb25OYW1lJ11dO1xyXG4gICAgICAgICAgICAgIGxldCBzZWxlY3RlZERhdGFPcHRpb24gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICBkYXRhT3B0aW9uLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb24uSWQgPT09IGZpZWxkVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRhT3B0aW9uID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAvLyBzZXQgdG8gYWxsIHJlbGF0ZWQgek1vZGUgb2YgdGhlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgbGV0IGZnOiBGb3JtR3JvdXAgPSB6dWRmQ29udGFpbmVyU2NvcGUuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0YU9wdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhWydDaGlsZEZpZWxkcyddLmZvckVhY2goY2hpbGRGaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBzeW1ib2wuIFxyXG4gICAgICAgICAgICAgICAgICBsZXQgY2hpbGRGaWVsZE5hbWUgPSBlbmNvZGVVUkkoY2hpbGRGaWVsZC5yZXBsYWNlKC9bXmEtejAtOV0vZ2ksIFwiXCIpKTsgXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTW9kZWxOYW1lID0gdGhpcy5kYXRhLk5hbWUgKyBjaGlsZEZpZWxkTmFtZTsgXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHpNb2RlbHMgPSB6dWRmQ29udGFpbmVyU2NvcGUuek1vZGVsO1xyXG4gICAgICAgICAgICAgICAgICB6TW9kZWxzW2ZpZWxkTW9kZWxOYW1lXSA9IHNlbGVjdGVkRGF0YU9wdGlvbltjaGlsZEZpZWxkTmFtZV07XHJcblxyXG4gICAgICAgICAgICAgICAgICBmZy5wYXRjaFZhbHVlKHpNb2RlbHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXZlbnROYW1lID0gJ3RyaWdnZXJWYWxpZGF0aW9uJztcclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwW2V2ZW50TmFtZV0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncm91cFtldmVudE5hbWVdKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gb2Yoe30pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uQ2hhbmdlXCIsIHRoaXMuZGF0YS5PbkNoYW5nZSwgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gIFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50TW9kZWxWYWx1ZSh0aGlzLmRhdGEsIHRoaXMuZ2V0RmllbGRWYWx1ZShldmVudCwgZmllbGRWYWx1ZSksIHRoaXMuZ3JvdXApO1xyXG4gICAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25DaGFuZ2VcIiwgdGhpcy5kYXRhLk9uQ2hhbmdlLCBldmVudCwgZmllbGRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JdGVtQ2xpY2soZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQoXCJpbnB1dGZpZWxkLW9uSXRlbUNsaWNrXCIsIHRoaXMuZGF0YS5Pbkl0ZW1DbGljaywgZXZlbnQsIGZpZWxkVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSWNvbkNsaWNrKGNsaWNrQWN0aW9uRXhwcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyaWdnZXJFdmVudChcImlucHV0ZmllbGQtb25JY29uQ2xpY2tcIiwgY2xpY2tBY3Rpb25FeHByLCBudWxsLCB0aGlzLmdyb3VwLnpNb2RlbFt0aGlzLmRhdGEuVmFsdWVdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZWFkT25seVZhbHVlKCkge1xyXG4gICAgY29uc3QgcmVhZE9ubHlWYWx1ZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuUmVhZE9ubHkpO1xyXG4gICAgaWYgKHR5cGVvZiByZWFkT25seVZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gcmVhZE9ubHlWYWx1ZS5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlYWRPbmx5VmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXNSZXF1aXJlZFZhbHVlKCkge1xyXG4gICAgY29uc3QgSXNSZXF1aXJlZFZhbHVlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5Jc1JlcXVpcmVkKTtcclxuICAgIGlmICh0eXBlb2YgSXNSZXF1aXJlZFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gSXNSZXF1aXJlZFZhbHVlLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICByZXR1cm4gY2FsbEZ1bmModGhpcy5ncm91cCk7XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIElzUmVxdWlyZWRWYWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudE1vZGVsVmFsdWUodGhpcy5kYXRhLCB2YWx1ZSwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QWRkT25WYWx1ZShhZGRPbnM/OiBhbnkpIHtcclxuICAgIHRoaXMudHJpZ2dlckNvbnRhaW5lckV2ZW50LmVtaXQoeyB0eXBlOiAnc2V0QWRkT25WYWx1ZScsIGRhdGE6IGFkZE9ucyB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0cmlnZ2VyRXZlbnQodHlwZTogc3RyaW5nLCB0YXJnZXQ6IGFueSwgZXZlbnQ6IGFueSwgZmllbGRWYWx1ZT86IGFueSkge1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICB0YXJnZXQ6IHRhcmdldCxcclxuICAgICAgICBldmVudCxcclxuICAgICAgICBkYXRhOiB7IHZhbHVlOiB0aGlzLmdldEZpZWxkVmFsdWUoZXZlbnQsIGZpZWxkVmFsdWUpLCBmaWVsZDogdGhpcy5kYXRhLCBjb21wOiB0aGlzIH1cclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZFZhbHVlKGV2ZW50OiBhbnksIGZpZWxkVmFsdWU/OiBhbnkpIHtcclxuICAgIGlmIChmaWVsZFZhbHVlID09IG51bGwgfHwgZmllbGRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGV2ZW50Py52YWx1ZSB8fCBldmVudD8udGFyZ2V0Py52YWx1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkVmFsdWU7XHJcbiAgfSBcclxufVxyXG4iXX0=
@@ -120,6 +120,7 @@ export class ZudfComponent {
120
120
  }
121
121
  updateDisplayModel(value, flatIndex) {
122
122
  ZComponentHelper.updateArrayObjectByFlatIndex(this.displayElementModel, flatIndex, value);
123
+ this.cdr.detectChanges();
123
124
  }
124
125
  appendToDisplayModel(value, flatIndex) {
125
126
  // append to display model mean it will base on flat index to insert the form control.
@@ -198,7 +199,13 @@ export class ZudfComponent {
198
199
  field.Name = this.generateFormControlName(field.Name, containerName);
199
200
  field.Value = this.generateFormControlName(field.Value, containerName);
200
201
  if (containerName) {
201
- this.group[this.componentScopeName][containerName].push(field.Value);
202
+ if (!this.group[this.componentScopeName][containerName].includes(field.Value)) {
203
+ this.group[this.componentScopeName][containerName].push(field.Value);
204
+ }
205
+ }
206
+ // keep a list of dropdown option variable name
207
+ if (this.isDropdownType(field.Type) && field.ZDataOptionName && field.DropdownOptions) {
208
+ this.group.zData[field.ZDataOptionName] = eval('this.' + field.DropdownOptions);
202
209
  }
203
210
  const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
204
211
  formControls[field.Value] = new FormControl(this.group[this.componentScopeName].zModel[field.Value], validators);
@@ -206,6 +213,7 @@ export class ZudfComponent {
206
213
  const ccValidators = ZComponentHelper.getCCValidators(field, isVisible, isRequired);
207
214
  formControls[field.CCValue] = new FormControl(this.group[this.componentScopeName].zModel[field.CCValue], ccValidators);
208
215
  }
216
+ // onchange handling?
209
217
  }
210
218
  }
211
219
  }
@@ -267,12 +275,18 @@ export class ZudfComponent {
267
275
  return this.form;
268
276
  }
269
277
  generateFormControlName(controlName, containerName) {
270
- const mainPrefix = [this.data.Type, this.data.Name].join('_');
278
+ const mainPrefix = [this.data.Type, this.data.Name, containerName ?? null].filter(Boolean).join('_');
271
279
  // check is name been prefixed
272
280
  if (controlName.includes(mainPrefix)) {
273
281
  return controlName;
274
282
  }
275
- return containerName ? [mainPrefix, containerName, controlName].join('_') : [mainPrefix, controlName].join('_');
283
+ else {
284
+ // we try to split the name and use the last segment.
285
+ // sometime the controlname can be without the container name, so we split and use the new mainPrefix
286
+ const controlNameSegment = controlName.split('_');
287
+ controlName = controlNameSegment[controlNameSegment.length - 1];
288
+ }
289
+ return [mainPrefix, controlName].join('_');
276
290
  }
277
291
  validateAndShowErrorMessage() {
278
292
  const fg = this.form;
@@ -390,6 +404,17 @@ export class ZudfComponent {
390
404
  // set datasource to grid
391
405
  this.group[gridValue].setData(this.group[gridDataSource]);
392
406
  }
407
+ //#endregion
408
+ //#region function for component event
409
+ //#endregrion
410
+ // TODO: to be consider to add to ZComponentHelper
411
+ isDropdownType(data) {
412
+ const componentDataType = typeof data === 'string' ? data : data.Type.toLowerCase();
413
+ if (componentDataType == ComponentType.dropdown || componentDataType == ComponentType.zuiselectmultiple || componentDataType == ComponentType.zselectmultiple) {
414
+ return true;
415
+ }
416
+ return false;
417
+ }
393
418
  }
394
419
  ZudfComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZudfComponent, deps: [{ token: i1.AlertService }, { token: i1.AuthService }, { token: i1.FieldService }, { token: i1.ResourceApiService }, { token: i1.ToastService }, { token: i1.WebApiService }, { token: i2.ComponentErrorHandlerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
395
420
  ZudfComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ZudfComponent, selector: "app-zudf", inputs: { data: "data", group: "group", form: "form" }, ngImport: i0, template: "<div style=\"padding: 15px\" *ngIf=\"data.Title && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" class=\"ion-row\">\r\n <kendo-card *ngIf=\"data.Title\" width=\"100%\">\r\n <kendo-card-header>\r\n <div>\r\n <ion-label class=\"card-header-title\">{{data.Title}}</ion-label>\r\n </div>\r\n </kendo-card-header>\r\n <kendo-card-body>\r\n <div class=\"ion-row\">\r\n <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass : ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of formFields | divzlayout: data.zlayout\"\r\n [field]=\"field\"\r\n [group]=\"group\"\r\n [form]=\"form\"\r\n id=\"{{field.Name}}\">\r\n </app-zformcontrol>\r\n </div>\r\n </kendo-card-body>\r\n </kendo-card>\r\n</div>\r\n\r\n<div *ngIf=\"!data.Title && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\" class=\"ion-row\">\r\n <form [formGroup]=\"form\" autocomplete=\"off\">\r\n <ion-grid>\r\n <ion-row id=\"dynamic-form-host\" class=\"ion-align-items-start\">\r\n <app-zformcontrol [ngClass]=\"group[field.isVisibleField] ? field.DivClass : ((field.Visible === true) ? field.DivClass : 'flex-hide')\"\r\n *ngFor=\"let field of formFields | divzlayout: data.zlayout\"\r\n [field]=\"field\"\r\n [group]=\"group\"\r\n [form]=\"form\"\r\n id=\"{{field.Name}}\">\r\n </app-zformcontrol>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n</div>\r\n", styles: [".card-header-title{color:#fff!important;font-weight:500;font-size:11pt}\n"], components: [{ type: i3.CardComponent, selector: "kendo-card", inputs: ["orientation", "width"] }, { type: i3.CardHeaderComponent, selector: "kendo-card-header" }, { type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i3.CardBodyComponent, selector: "kendo-card-body" }, { type: i5.ZformcontrolComponent, selector: "app-zformcontrol", inputs: ["field", "group", "form", "containerField"] }, { type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { type: i4.IonRow, selector: "ion-row" }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], pipes: { "divzlayout": i9.DivzLayout } });
@@ -403,4 +428,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
403
428
  }], form: [{
404
429
  type: Input
405
430
  }] } });
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVkZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVkZi96dWRmLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQXNDLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQWtCLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBR0wsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUMvQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8sYUFBYTtJQVl4QixZQUNVLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixhQUE0QixFQUM1QixxQkFBbUQsRUFDbkQsR0FBc0I7UUFQdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QiwwQkFBcUIsR0FBckIscUJBQXFCLENB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LEtBQWEsRUFBRSxTQUFjLEVBQUUsY0FBbUIsRUFBRSxhQUFxQjtRQUNqSCwwREFBMEQ7UUFDMUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUV2RSx5QkFBeUI7UUFDekIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFckQsOEJBQThCO1FBQzlCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLCtCQUErQixDQUFDLEtBQWEsRUFBRSxhQUFxQjtRQUMxRSx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLCtCQUErQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxhQUFhLENBQUMsU0FBYyxFQUFFLGNBQW1CLEVBQUUsUUFBYSxFQUFFLEtBQVU7UUFDbEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVDLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7MkdBN2RVLGFBQWE7K0ZBQWIsYUFBYSx3R0N4QjFCLG16REFvQ0E7NEZEWmEsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxVQUFVOzJUQUtYLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQXN5bmNTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkZpZWxkLFxyXG4gIEFsZXJ0U2VydmljZSwgQXV0aFNlcnZpY2UsIEZpZWxkU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsIFdlYkFwaVNlcnZpY2UsXHJcbiAgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcywgWkNvbXBvbmVudEhlbHBlclxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvY29tcG9uZW50LWVycm9yLWhhbmRsZXIuc2VydmljZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXp1ZGYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96dWRmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96dWRmLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBadWRmQ29tcG9uZW50IGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgZm9ybUZpZWxkczogYW55W107IC8vIHBvcHVsYXRlIHVzaW5nIGZpZWxkIGVsZW1lbnQuXHJcblxyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBpbml0aWFsRGF0YVZhbHVlOiBhbnk7XHJcbiAgY29tcG9uZW50UHJlZml4OiBzdHJpbmc7XHJcbiAgY29tcG9uZW50U2NvcGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheUVsZW1lbnRNb2RlbDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyOiBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIC8vIGtlZXAgZGF0YSBWYWx1ZVxyXG4gICAgdGhpcy5pbml0aWFsRGF0YVZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG5cclxuICAgIC8vIGRlY2xhcmF0aW9uXHJcbiAgICB0aGlzLmNvbXBvbmVudFNjb3BlTmFtZSA9ICdfenVkZl8nICsgdGhpcy5kYXRhLk5hbWU7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByZWZpeCA9ICd6dWRmXycgKyB0aGlzLmRhdGEuTmFtZTtcclxuXHJcbiAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5OYW1lICsgJ01vZGVsJ10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmxvYWRGb3JtKCk7XHJcblxyXG4gICAgLy9pZiAoWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eSh0aGlzLmRhdGEuVmFsdWUpIHx8IHRoaXMuZGF0YS5WYWx1ZS5sZW5ndGggPiAyKSB7XHJcbiAgICAvLyAgdGhpcy5sb2FkRW1wdHlGb3JtKCk7XHJcbiAgICAvL31cclxuICAgIC8vZWxzZSB7XHJcbiAgICAvLyAgdGhpcy5sb2FkWnVkZkZvcm0oKTtcclxuICAgIC8vfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRm9ybSgpIHtcclxuICAgIG9mKHRydWUpLnBpcGUoXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLlN1YlR5cGUgPSAnenVkZic7XHJcblxyXG4gICAgICAgIC8vIGNoYW5nZSB0aGUgdmFsdWUgdG8gdGhlIHJlc3VsdCBmaWVsZCBmb3JtXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGEuTmFtZSArICcgZGVmYXVsdCB2YWx1ZTogJyArIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgICAgLy90aGlzLmRhdGEuVmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gY2hhbmdlIHp1ZGYgdG8gemRpdlxyXG4gICAgICAgIC8vdGhpcy5kYXRhLlR5cGUgPSAnemRpdic7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgZ3JvdXAgZm9yIHp1ZGZcclxuICAgICAgICBpZiAoIXRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXSA9IG5ldyBaR3JvdXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWNsYXJlIHpNb2RlbCB0byB6dWRmIGdyb3VwXHJcbiAgICAgICAgY29uc3QgenVkZlNjb3BlR3JvdXAgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXTtcclxuICAgICAgICB6dWRmU2NvcGVHcm91cC56TW9kZWwgPSB7fTtcclxuXHJcbiAgICAgICAgLy8gcmVuZGVyIGZpZWxkIGVsZW1lbnRcclxuICAgICAgICB0aGlzLnJlbmRlckZpZWxkRWxlbWVudCh0aGlzLmRhdGEuVmFsdWUpO1xyXG5cclxuICAgICAgICAvLyBzZXQgdGhpcyBuZXcgY3JlYXRlIGZvcm0gdG8gekdyb3VwIHNjb3BlXHJcbiAgICAgICAgLy8gYmluZCBmb3JtIG9ubHkgd2hlbiBWYWx1ZSBpcyBub3QgbnVsbFxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuVmFsdWUpIHtcclxuICAgICAgICAgIHp1ZGZTY29wZUdyb3VwLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2w6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG4gICAgICAgICAgenVkZlNjb3BlR3JvdXAuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gc2V0IHRvIGZvcm1GaWVsZCBmb3IgZGlzcGxheVxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9ICdhZnRlcicgKyAodGhpcy5kYXRhLk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLmRhdGEuTmFtZS5zbGljZSgxKSkgKyAnTG9hZGVkJztcclxuICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICBpZiAodGhpcy5ncm91cFtmaWVsZE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW2ZpZWxkTmFtZV0odGhpcy5ncm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHNldCBGaWVsZCBkaXYgY2xhc3NcclxuICAgICAgLy8gUmVwbGFjZWQgd2l0aDogdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5zZXRGaWVsZHNEaXZDbGFzcyh0aGlzLmdyb3VwLl9wcm9qZWN0TmFtZSwgdGhpcy5ncm91cC5maWVsZE5hbWUsIHRoaXMuZGF0YSwgdGhpcy5hdXRoU2VydmljZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGb3JtQ29udHJvbFZhbGlkYXRpb24oZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbGlkYXRvcjogYW55KSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnRCeUpzb25TdHJpbmcoZ3JvdXA6IFpHcm91cCwganNvblN0cmluZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmaWVsZEVsZW1lbnRNYXN0ZXJDb2RlSnNvbkFycmF5ID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KGZpZWxkRWxlbWVudE1hc3RlckNvZGVKc29uQXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIERpc3BsYXkgbW9kZWxcclxuICBwdWJsaWMgc2V0RGlzcGxheU1vZGVsKHZhbHVlOiBhbnkpIHtcclxuICAgIC8vIHJlcGxhY2UgdGhlIHdob2xlIGRpc3BsYXkgbW9kZWxcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcblxyXG4gICAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHZhbHVlIHVzZWQgZm9yIHJlbmRlciB6dWRmICcgKyB0aGlzLmRhdGEuTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlRGlzcGxheU1vZGVsKHZhbHVlOiBhbnksIGZsYXRJbmRleDogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnVwZGF0ZUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBlbmRUb0Rpc3BsYXlNb2RlbCh2YWx1ZTogYW55LCBmbGF0SW5kZXg6IHN0cmluZykge1xyXG4gICAgLy8gYXBwZW5kIHRvIGRpc3BsYXkgbW9kZWwgbWVhbiBpdCB3aWxsIGJhc2Ugb24gZmxhdCBpbmRleCB0byBpbnNlcnQgdGhlIGZvcm0gY29udHJvbC5cclxuICAgIGlmIChmbGF0SW5kZXgubGVuZ3RoID49IDMpIHtcclxuICAgICAgZmxhdEluZGV4LnN1YnN0cmluZygwLCBmbGF0SW5kZXgubGVuZ3RoIC0gMik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmQgPSBaQ29tcG9uZW50SGVscGVyLmdldEZyb21BcnJheU9iamVjdEJ5RmxhdEluZGV4KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCwgZmxhdEluZGV4KTtcclxuICAgIHNlbGVjdGVkUmVjb3JkLlZhbHVlLnB1c2godmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERpc3BsYXlNb2RlbCgpIHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUFsbERpc3BsYXlNb2RlbCgpIHtcclxuICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA9IFtdO1xyXG4gICAgdGhpcy5jbGVhckZvcm1Db250cm9sKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRWxlbWVudEZyb21EaXNwbGF5TW9kZWwoZmxhdEluZGV4OiBzdHJpbmcpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVtb3ZlQXJyYXlPYmplY3RCeUZsYXRJbmRleCh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwsIGZsYXRJbmRleCk7XHJcblxyXG4gICAgLy8gVE9ETzogcmVtb3ZlIGZyb20gem1vZGVsXHJcbiAgICAvL2RlbGV0ZSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbJyddO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBmdW5jdGlvbiBmb3IgZm9ybSBjb250cm9sLlxyXG4gIHB1YmxpYyBhcHBlbmRGb3JtQ29udHJvbChmaWVsZERhdGE6IFpGaWVsZCkge1xyXG4gICAgLy8gYXBwZW5kIGZvcm0gY29udHJvbCBtZWFuIGl0IHdpbGwganVzdCBpbnNlcnQgdGhlIGZvcm0gY29udHJvbCBhdCB0aGUgbGFzdCAgXHJcbiAgICBmaWVsZERhdGEuTmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGREYXRhLk5hbWUsIGZpZWxkRGF0YVsnY29udGFpbmVyTmFtZSddKTtcclxuICAgIGNvbnN0IGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9ID0ge307XHJcblxyXG4gICAgZm9ybUNvbnRyb2xzW2ZpZWxkRGF0YS5OYW1lXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgdGhpcy5ncm91cFsnX3p1ZGZfZm9ybVByZXZpZXcnXS56TW9kZWxbZmllbGREYXRhLk5hbWVdXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkRGF0YS5OYW1lLCBmb3JtQ29udHJvbHNbZmllbGREYXRhLk5hbWVdKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZm9ybUZpZWxkcykge1xyXG4gICAgICBjb25zb2xlLmxvZygnZm9ybUZpZWxkICcgKyB0aGlzLmRhdGEuTmFtZSArICcgaXMgdW5kZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtRmllbGRzLnB1c2goZmllbGREYXRhKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnQoZmllbGRFbGVtZW50czogYW55KSB7XHJcbiAgICBpZiAoZmllbGRFbGVtZW50cykge1xyXG4gICAgICBjb25zdCBmb3JtQ29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG4gICAgICBmaWVsZEVsZW1lbnRzID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZEVsZW1lbnRzLCBmb3JtQ29udHJvbHMpO1xyXG5cclxuICAgICAgLy8gcmVuZGVyIGZvcm0gY29udHJvbCB0byBuZXcgZm9ybWdyb3VwXHJcbiAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUNvbnRyb2xzKTtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZmllbGRFbGVtZW50cztcclxuICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybSA9IHRoaXMuZm9ybTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVGb3JtQ29udHJvbHMoZmllbGRBcnJheTogYW55LCBmb3JtQ29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSwgY29udGFpbmVyTmFtZT86IHN0cmluZykge1xyXG4gICAgZmllbGRBcnJheS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgaWYgKHR5cGVvZiBmaWVsZC5WYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBmaWVsZC5WYWx1ZS5pbmRleE9mKFwiLlwiKSAhPT0gLTEpIHtcclxuICAgICAgICBpZiAoWyd6Z3JpZCcsICd6dHJlZScsICd6aW1nJywgJ3RleHRhcmVhanNvbiddLmluZGV4T2YoZmllbGQuVHlwZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJGb3JtQ29udHJvbCAtIGludmFsaWQgZmllbGQgdmFsdWVcIiwgZmllbGQuVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICAgIC8vIGluc2VydCBtdWx0aXZhbHVlZ3JvdXAgdG8gdGhlIGNhcmQgdmFsdWUgaWYgdHJ1ZVxyXG4gICAgICAgICAgaWYgKGZpZWxkLk11bHRpVmFsdWVkR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNdWx0aVZhbHVlR3JvdXAoZmllbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZC5WYWx1ZSwgZm9ybUNvbnRyb2xzLCBmaWVsZC5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBiZWZvcmUgZ2VuZXJhdGUgRm9ybUNvbnRyb2wsIHdlIG5lZWQgdG8gYWRkIDIgYXR0cmlidXRlIHRvIHRoZSBmaWVsZCB3aGVuIHJlbmRlci5cclxuICAgICAgICAgIC8vIHRoaXMgZm9yIGxhdGVyIG9uLCB3ZSBjYW4gZWFzaWx5IGtub3cgdGhpcyBmaWVsZCBiZWxvbmcgdG8gd2hpY2ggenVkZiBhbmQgdW5kZXIgd2hpY2ggY29udGFpbmVyLiBcclxuICAgICAgICAgIGlmIChjb250YWluZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIGZpZWxkWydjb250YWluZXJOYW1lJ10gPSBjb250YWluZXJOYW1lOztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXVtjb250YWluZXJOYW1lXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBpc0Zvcm1Db250cm9sID0gWkNvbXBvbmVudEhlbHBlci5pc0Zvcm1Db250cm9sKGZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuaXNWaXNpYmxlRm9ybUNvbnRyb2wodGhpcywgZmllbGQpO1xyXG4gICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuaXNSZXF1aXJlZEZvcm1Db250cm9sKHRoaXMsIGZpZWxkKTtcclxuXHJcbiAgICAgICAgICBpZiAoaXNGb3JtQ29udHJvbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBmaWVsZC5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZC5OYW1lLCBjb250YWluZXJOYW1lKTtcclxuICAgICAgICAgICAgZmllbGQuVmFsdWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkLlZhbHVlLCBjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV1bY29udGFpbmVyTmFtZV0ucHVzaChmaWVsZC5WYWx1ZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFtmaWVsZC5WYWx1ZV0sXHJcbiAgICAgICAgICAgICAgdmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoWkNvbXBvbmVudEhlbHBlci5oYXNDQ0ZpZWxkKGZpZWxkLlR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2NWYWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRDQ1ZhbGlkYXRvcnMoZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLkNDVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsW2ZpZWxkLkNDVmFsdWVdLFxyXG4gICAgICAgICAgICAgICAgY2NWYWxpZGF0b3JzXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJGb3JtQ29udHJvbCgpIHtcclxuICAgIHRoaXMuZm9ybUZpZWxkcy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChkYXRhLlZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0YS5WYWx1ZSA9IHRoaXMuaW5pdGlhbERhdGFWYWx1ZTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHMgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1GaWVsZHM7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGZ1bmN0aW9uIGZvciBfenVkZiBzY29wZSB6bW9kZWwuIFxyXG4gIHB1YmxpYyBzZXRGb3JtRmllbGR6TW9kZWwoZ3JvdXA6IFpHcm91cCwgbW9kZWxEYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGdycCA9IGdyb3VwID8gZ3JvdXAgOiB0aGlzLmdyb3VwO1xyXG4gICAgY29uc3Qgek1vZGVsID0gZ3JwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWw7XHJcbiAgICBjb25zdCBwYXRjaGVkTW9kZWxEYXRhID0ge307XHJcblxyXG4gICAgZm9yICh2YXIgcHJvcCBpbiBtb2RlbERhdGEpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2RlbERhdGEsIHByb3ApKSB7XHJcbiAgICAgICAgcGF0Y2hlZE1vZGVsRGF0YVt0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKHByb3AsIHByb3BbJ2NvbnRhaW5lck5hbWUnXSldID0gbW9kZWxEYXRhW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbih6TW9kZWwsIHBhdGNoZWRNb2RlbERhdGEpO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBzZXRNb2RlbFZhbHVlKG1vZGVsTmFtZTogc3RyaW5nLCBtb2RlbFZhbHVlOiBhbnksIHNraXBQcmVmaXg/OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCB6TW9kZWxzID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsO1xyXG4gICAgY29uc3Qgek1vZGVsTmFtZSA9IHNraXBQcmVmaXggPyBtb2RlbE5hbWUgOiB0aGlzLmNvbXBvbmVudFByZWZpeCArICdfJyArIG1vZGVsTmFtZTtcclxuICAgIHpNb2RlbHNbek1vZGVsTmFtZV0gPSBtb2RlbFZhbHVlO1xyXG5cclxuICAgIGxldCBmZzogRm9ybUdyb3VwID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBmZy5wYXRjaFZhbHVlKHpNb2RlbHMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZXRaTW9kZWwoc2tpcFJlbW92ZVByZWZpeD86IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHpNb2RlbCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbDtcclxuICAgIGNvbnN0IHBhdGNoZWRNb2RlbERhdGEgPSB7fTtcclxuXHJcbiAgICBpZiAoc2tpcFJlbW92ZVByZWZpeCkge1xyXG4gICAgICByZXR1cm4gek1vZGVsO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHByb3AgaW4gek1vZGVsKSB7XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoek1vZGVsLCBwcm9wKSkge1xyXG4gICAgICAgIHBhdGNoZWRNb2RlbERhdGFbcHJvcC5yZXBsYWNlKHRoaXMuY29tcG9uZW50UHJlZml4ICsgJ18nLCAnJyldID0gek1vZGVsW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdGNoZWRNb2RlbERhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Wk1vZGVsQXNTdHJpbmcoKSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRaTW9kZWwoKSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGNvbW1vbiBmdW5jdGlvbiBcclxuICBDb21wb25lbnRJc1Zpc2libGUoZmllbGQ6IFpGaWVsZCk6IGFueSB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5Db21wb25lbnRJc1Zpc2libGUoZmllbGQsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVuYWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5ID0gIXN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSA9IHN0YXR1cztcclxuICAgIHRoaXMuZGF0YS5WaXNpYmxlID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlcXVpcmUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCA9IHN0YXR1cztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGNvbnRyb2xOYW1lOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1haW5QcmVmaXggPSBbdGhpcy5kYXRhLlR5cGUsIHRoaXMuZGF0YS5OYW1lXS5qb2luKCdfJyk7XHJcblxyXG4gICAgLy8gY2hlY2sgaXMgbmFtZSBiZWVuIHByZWZpeGVkIFxyXG4gICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKG1haW5QcmVmaXgpKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29udGFpbmVyTmFtZSA/IFttYWluUHJlZml4LCBjb250YWluZXJOYW1lLCBjb250cm9sTmFtZV0uam9pbignXycpIDogW21haW5QcmVmaXgsIGNvbnRyb2xOYW1lXS5qb2luKCdfJyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlQW5kU2hvd0Vycm9yTWVzc2FnZSgpIHtcclxuICAgIGNvbnN0IGZnID0gdGhpcy5mb3JtIGFzIEZvcm1Hcm91cDtcclxuXHJcbiAgICBpZiAoIWZnLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50RXJyb3JIYW5kbGVyLnNob3dGb3JtR3JvdXBFcnJvck1lc3NhZ2UodGhpcy5ncm91cCwgZmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFByZWZpeChmaWVsZHM6IFpGaWVsZFtdLCBwcmVmaXg6IGFueSkge1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmFwcGVuZFByZWZpeChmaWVsZC5WYWx1ZSwgcHJlZml4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmaWVsZC5OYW1lID0gcHJlZml4ICsgJ18nICsgZmllbGQuTmFtZTtcclxuICAgICAgICBpZiAoZmllbGQuVHlwZSAhPSAnemJ1dHRvbnMnKSB7XHJcbiAgICAgICAgICBmaWVsZC5WYWx1ZSA9IHByZWZpeCArICdfJyArIGZpZWxkLlZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWVsZC5TdWJUeXBlID0gcHJlZml4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHB1YmxpYyBnZXRDb250YWluZXJNb2RlbFZhbHVlKGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdO1xyXG5cclxuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB7fTtcclxuICAgIGNvbnRhaW5lckVsZW1lbnQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgbW9kZWxWYWx1ZVtlbGVtZW50XSA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFtlbGVtZW50XTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtb2RlbFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyQ29udGFpbmVyRmllbGRFbGVtZW50VmFsdWUoY29udGFpbmVyTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV1bY29udGFpbmVyTmFtZV07XHJcbiAgICBjb250YWluZXJFbGVtZW50LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZShlbGVtZW50LCBudWxsLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIC0tLS0tLS0tLS09PT09PT09PT09PT09PT09PT09PSBNdWx0aSBWYWx1ZSBHcm91cCA9PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0qL1xyXG4gIHB1YmxpYyBzZXRNdWx0aVZhbHVlR3JvdXAoZGF0YTogYW55LCBkYXRhSW5kZXg/OiBhbnkpIHtcclxuICAgIC8vIG5lZWQgdG8gZGVjbGFyZSBuYW1lLCB2YWx1ZSwgZGF0YXNvdXJjZSwgY29sdW1uZmllbGRzIGF0dHJpYnV0ZSBmb3IgZ3JpZC4gXHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShkYXRhLk5hbWUpO1xyXG4gICAgY29uc3QgZ3JpZFZhbHVlID0gbmFtZSArICdfT3B0aW9ucyc7XHJcbiAgICBjb25zdCBncmlkRGF0YVNvdXJjZSA9IG5hbWUgKyAnX0RhdGFTb3VyY2UnO1xyXG4gICAgY29uc3QgZ3JpZENvbHVtbkZpZWxkcyA9IG5hbWUgKyAnX0NvbHVtbkZpZWxkcyc7XHJcblxyXG4gICAgLy8gYWRkIHRvIGdyaWQgZWxlbWVudCBhdHRyaWJ1dGVcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIFwiQWRkQ29tbWFuZEJ1dHRvbk5hbWVcIjogXCJBZGRcIixcclxuICAgICAgXCJBbGxvd0V4cG9ydFwiOiBmYWxzZSxcclxuICAgICAgXCJBbGxvd0dyaWREYXRhRXhwb3J0XCI6IGZhbHNlLFxyXG4gICAgICBcIkFsbG93TXVsdGlTZWxlY3RcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dSb3dTZWxlY3RcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dTYXZlU3RhdGVcIjogZmFsc2UsXHJcbiAgICAgIFwiQ29sdW1uRmllbGRzXCI6ICdncm91cC4nICsgZ3JpZENvbHVtbkZpZWxkcyxcclxuICAgICAgXCJEYXRhU291cmNlXCI6ICdncm91cC4nICsgZ3JpZERhdGFTb3VyY2UsXHJcbiAgICAgIFwiRGlzYWJsZUNlbGxDbGlja0hhbmRsZXJcIjogdHJ1ZSxcclxuICAgICAgXCJEaXNhYmxlR2VuZXJhdGVDb2x1bW5CeUZvcm1cIjogdHJ1ZSxcclxuICAgICAgXCJEaXZDbGFzc1wiOiAnY29sLXhzLTEyIGNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyJyxcclxuICAgICAgXCJFbmFibGVDdXN0b21BZGRDb21tYW5kXCI6IHRydWUsXHJcbiAgICAgIFwiRW5hYmxlQ3VzdG9tUmVtb3ZlQ29tbWFuZFwiOiB0cnVlLFxyXG4gICAgICBcIkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiOiB0cnVlLFxyXG4gICAgICBcIkVuYWJsZVNhdmVHcmlkU3RhdGVcIjogZmFsc2UsXHJcbiAgICAgIFwiRXh0ZXJuYWxQYWdpbmF0aW9uXCI6IGZhbHNlLFxyXG4gICAgICBcIkhlaWdodFJlZHVjZVwiOiAyNTAsXHJcbiAgICAgIFwiTGltaXRGaWVsZHNcIjogZmFsc2UsXHJcbiAgICAgIFwiTmFtZVwiOiBuYW1lLFxyXG4gICAgICBcIlBhZ2VTaXplXCI6IDIwLFxyXG4gICAgICBcIlBhZ2VTaXplc1wiOiBmYWxzZSxcclxuICAgICAgXCJSZXNvdXJjZVVSTFwiOiB0cnVlLFxyXG4gICAgICBcIlNlbGVjdE9wdGlvbnNcIjogZmFsc2UsXHJcbiAgICAgIFwiU2hvd0dyaWRFZGl0QnV0dG9uXCI6IGZhbHNlLFxyXG4gICAgICBcIlN1YlR5cGVcIjogXCJ6dWRmXCIsXHJcbiAgICAgIFwiVHlwZVwiOiBcInpncmlkXCIsXHJcbiAgICAgIFwiVmFsdWVcIjogJ2dyb3VwLicgKyBncmlkVmFsdWUsXHJcbiAgICAgIFwiVmlzaWJsZVwiOiB0cnVlLFxyXG4gICAgICBcIldpZHRoUmVkdWNlXCI6IDUwMFxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNyZWF0ZSBwcm9wZXJ0eSBpbiB0aGUgZ3JvdXAgYmFzZSBvbiBhYm92ZSBkZWNsYXJhdGlvbiBleGNlcHQgTmFtZSBhbmQgYWxzbyBpbnNlcnQgY29sdW1uIGZpZWxkLlxyXG4gICAgLy8gdXNlIGdyb3VwaW5nIHZhbHVlIGFzIGNvbHVtbi4gc2tpcCBpbnNlcnQgYW55IGNvbnRhaW5lciB0eXBlLlxyXG4gICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGRhdGEuTmFtZTtcclxuICAgIGNvbnN0IGdyb3VwRmllbGRFbGVtZW50cyA9IFtdO1xyXG5cclxuICAgIGRhdGEuVmFsdWUuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTW9kZWwgPSBPYmplY3QuYXNzaWduKHt9LCBmaWVsZCk7XHJcbiAgICAgIGZpZWxkTW9kZWxbJ0Rpc3BsYXlOYW1lJ10gPSBmaWVsZE1vZGVsLkxhYmVsO1xyXG4gICAgICBmaWVsZE1vZGVsLk5hbWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkTW9kZWxbJ05hbWUnXSwgY29udGFpbmVyTmFtZSk7XHJcbiAgICAgIGZpZWxkTW9kZWwuVmFsdWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkTW9kZWxbJ1ZhbHVlJ10sIGNvbnRhaW5lck5hbWUpO1xyXG5cclxuICAgICAgZ3JvdXBGaWVsZEVsZW1lbnRzLnB1c2goZmllbGRNb2RlbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZERhdGFTb3VyY2VdID0gW107XHJcbiAgICB0aGlzLmdyb3VwW2dyaWRDb2x1bW5GaWVsZHNdID0gZ3JvdXBGaWVsZEVsZW1lbnRzO1xyXG5cclxuICAgIC8vIGdyaWQgY29sdW1uIHRvIGJhc2Ugb24gZmllbGQgZWxlbWVudCBhbmQgaW5zZXJ0IHRvIGdyaWQgY29sdW1uLiBcclxuICAgIHRoaXMuZ3JvdXBbbmFtZSArICdfQ3VzdG9tQWRkQnV0dG9uT25DbGljayddID0gdGhpcy5jYXB0dXJlQ29udGFpbmVyRmllbGRWYWx1ZVRvTW9kZWwuYmluZCh0aGlzLCB0aGlzLmdyb3VwLCBncmlkVmFsdWUsIGdyaWREYXRhU291cmNlLCBjb250YWluZXJOYW1lKTsgLy9fenVkZl9mb3JtUHJldmlld1xyXG4gICAgdGhpcy5ncm91cFtuYW1lICsgJ19DdXN0b21SZXNldEJ1dHRvbk9uQ2xpY2snXSA9IHRoaXMuY2xlYXJDb250YWluZXJSZWxhdGVkRmllbGRWYWx1ZS5iaW5kKHRoaXMsIHRoaXMuZ3JvdXAsIGNvbnRhaW5lck5hbWUpOyAvL196dWRmX2Zvcm1QcmV2aWV3XHJcbiAgICB0aGlzLmdyb3VwW25hbWUgKyAnX0N1c3RvbVJlbW92ZUJ1dHRvbk9uQ2xpY2snXSA9IHRoaXMucmVtb3ZlR3JpZFJvdy5iaW5kKHRoaXMsIGdyaWRWYWx1ZSwgZ3JpZERhdGFTb3VyY2UpOyAvL196dWRmX2Zvcm1QcmV2aWV3XHJcblxyXG4gICAgaWYgKGRhdGFJbmRleCkge1xyXG4gICAgICB0aGlzLmFwcGVuZFRvRGlzcGxheU1vZGVsKGVsZW1lbnQsIGRhdGFJbmRleCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZGF0YS5WYWx1ZS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYXB0dXJlQ29udGFpbmVyRmllbGRWYWx1ZVRvTW9kZWwoZ3JvdXA6IFpHcm91cCwgZ3JpZFZhbHVlOiBhbnksIGdyaWREYXRhU291cmNlOiBhbnksIGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgLy8gZ2V0IGNvbnRhaW5lciBtb2RlbCB2YWx1ZSwgc2V0IHRvIGdyb3VwIGdyaWQgZGF0YXNvdXJjZVxyXG4gICAgZ3JvdXBbZ3JpZERhdGFTb3VyY2VdLnB1c2godGhpcy5nZXRDb250YWluZXJNb2RlbFZhbHVlKGNvbnRhaW5lck5hbWUpKTtcclxuXHJcbiAgICAvLyBzZXQgZGF0YXNvdXJjZSB0byBncmlkXHJcbiAgICBncm91cFtncmlkVmFsdWVdLnNldERhdGEodGhpcy5ncm91cFtncmlkRGF0YVNvdXJjZV0pO1xyXG5cclxuICAgIC8vIGNsZWFyIGNvbnRhaW5lciBmaWVsZCB2YWx1ZVxyXG4gICAgdGhpcy5jbGVhckNvbnRhaW5lclJlbGF0ZWRGaWVsZFZhbHVlKGdyb3VwLCBjb250YWluZXJOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJDb250YWluZXJSZWxhdGVkRmllbGRWYWx1ZShncm91cDogWkdyb3VwLCBjb250YWluZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgIC8vIGFmdGVyIHNldCB0byBncmlkLCBjbGVhciB0aGUgem1vZGVsLiBcclxuICAgIHRoaXMuY2xlYXJDb250YWluZXJGaWVsZEVsZW1lbnRWYWx1ZShjb250YWluZXJOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlR3JpZFJvdyhncmlkVmFsdWU6IGFueSwgZ3JpZERhdGFTb3VyY2U6IGFueSwgZGF0YUl0ZW06IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgdGhpcy5ncm91cFtncmlkRGF0YVNvdXJjZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAvLyBzZXQgZGF0YXNvdXJjZSB0byBncmlkXHJcbiAgICB0aGlzLmdyb3VwW2dyaWRWYWx1ZV0uc2V0RGF0YSh0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxNXB4XCIgKm5nSWY9XCJkYXRhLlRpdGxlICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiIGNsYXNzPVwiaW9uLXJvd1wiPlxyXG4gIDxrZW5kby1jYXJkICpuZ0lmPVwiZGF0YS5UaXRsZVwiIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgPGtlbmRvLWNhcmQtaGVhZGVyPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJjYXJkLWhlYWRlci10aXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9pb24tbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9rZW5kby1jYXJkLWhlYWRlcj5cclxuICAgIDxrZW5kby1jYXJkLWJvZHk+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpb24tcm93XCI+XHJcbiAgICAgICAgPGFwcC16Zm9ybWNvbnRyb2wgW25nQ2xhc3NdPVwiZ3JvdXBbZmllbGQuaXNWaXNpYmxlRmllbGRdID8gZmllbGQuRGl2Q2xhc3MgOiAoKGZpZWxkLlZpc2libGUgPT09IHRydWUpID8gIGZpZWxkLkRpdkNsYXNzIDogJ2ZsZXgtaGlkZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUZpZWxkcyB8IGRpdnpsYXlvdXQ6IGRhdGEuemxheW91dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tmaWVsZC5OYW1lfX1cIj5cclxuICAgICAgICA8L2FwcC16Zm9ybWNvbnRyb2w+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9rZW5kby1jYXJkLWJvZHk+XHJcbiAgPC9rZW5kby1jYXJkPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCIhZGF0YS5UaXRsZSAmJiAoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIiBjbGFzcz1cImlvbi1yb3dcIj5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgIDxpb24tZ3JpZD5cclxuICAgICAgPGlvbi1yb3cgaWQ9XCJkeW5hbWljLWZvcm0taG9zdFwiIGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgPGFwcC16Zm9ybWNvbnRyb2wgW25nQ2xhc3NdPVwiZ3JvdXBbZmllbGQuaXNWaXNpYmxlRmllbGRdID8gZmllbGQuRGl2Q2xhc3MgOiAoKGZpZWxkLlZpc2libGUgPT09IHRydWUpID8gIGZpZWxkLkRpdkNsYXNzIDogJ2ZsZXgtaGlkZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUZpZWxkcyB8IGRpdnpsYXlvdXQ6IGRhdGEuemxheW91dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tmaWVsZC5OYW1lfX1cIj5cclxuICAgICAgICA8L2FwcC16Zm9ybWNvbnRyb2w+XHJcbiAgICAgIDwvaW9uLXJvdz5cclxuICAgIDwvaW9uLWdyaWQ+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj5cclxuIl19
431
+ var ComponentType;
432
+ (function (ComponentType) {
433
+ ComponentType["text"] = "text";
434
+ ComponentType["textarea"] = "textarea";
435
+ ComponentType["checkbox"] = "checkbox";
436
+ ComponentType["label"] = "zlabel";
437
+ ComponentType["date"] = "date";
438
+ ComponentType["zdatetime"] = "zdatetime";
439
+ ComponentType["zuidatetime"] = "zuidatetime";
440
+ ComponentType["number"] = "number";
441
+ ComponentType["znumeric"] = "znumeric";
442
+ ComponentType["email"] = "email";
443
+ ComponentType["file"] = "file";
444
+ ComponentType["price"] = "price";
445
+ ComponentType["website"] = "website";
446
+ ComponentType["dropdown"] = "dropdown";
447
+ ComponentType["zuiselectmultiple"] = "zuiselectmultiple";
448
+ ComponentType["zselectmultiple"] = "zselectmultiple";
449
+ ComponentType["grouping"] = "kcard";
450
+ ComponentType["button"] = "zbuttons";
451
+ ComponentType["grid"] = "zgrid";
452
+ })(ComponentType || (ComponentType = {}));
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVkZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVkZi96dWRmLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQXNDLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQWtCLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBR0wsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUMvQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8sYUFBYTtJQVl4QixZQUNVLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixhQUE0QixFQUM1QixxQkFBbUQsRUFDbkQsR0FBc0I7UUFQdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QiwwQkFBcUIsR0FBckIscUJBQXFCLENB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LGtDQUFpQixDQUFBO0lBQ2pCLHNDQUFxQixDQUFBO0lBQ3JCLGdDQUFlLENBQUE7SUFDZiw4QkFBYSxDQUFBO0lBQ2IsZ0NBQWUsQ0FBQTtJQUNmLG9DQUFtQixDQUFBO0lBQ25CLHNDQUFxQixDQUFBO0lBQ3JCLHdEQUF1QyxDQUFBO0lBQ3ZDLG9EQUFtQyxDQUFBO0lBQ25DLG1DQUFrQixDQUFBO0lBQ2xCLG9DQUFtQixDQUFBO0lBQ25CLCtCQUFjLENBQUE7QUFDaEIsQ0FBQyxFQXBCSSxhQUFhLEtBQWIsYUFBYSxRQW9CakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBBc3luY1N1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGNvbmNhdE1hcCwgbWFwLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBaQ29tcG9uZW50LCBaRmllbGQsXHJcbiAgQWxlcnRTZXJ2aWNlLCBBdXRoU2VydmljZSwgRmllbGRTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2UsIFRvYXN0U2VydmljZSwgV2ViQXBpU2VydmljZSxcclxuICBaR3JvdXAsIFpDb21wb25lbnRQcm9wZXJ0aWVzLCBaQ29tcG9uZW50SGVscGVyXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9jb21wb25lbnQtZXJyb3ItaGFuZGxlci5zZXJ2aWNlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtenVkZicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3p1ZGYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3p1ZGYuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFp1ZGZDb21wb25lbnQgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuICBmb3JtRmllbGRzOiBhbnlbXTsgLy8gcG9wdWxhdGUgdXNpbmcgZmllbGQgZWxlbWVudC5cclxuXHJcbiAgY29tcG9uZW50UHJvcGVydGllcyA9IG5ldyBaQ29tcG9uZW50UHJvcGVydGllcygpO1xyXG4gIGluaXRpYWxEYXRhVmFsdWU6IGFueTtcclxuICBjb21wb25lbnRQcmVmaXg6IHN0cmluZztcclxuICBjb21wb25lbnRTY29wZU5hbWU6IHN0cmluZztcclxuICBkaXNwbGF5RWxlbWVudE1vZGVsOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRFcnJvckhhbmRsZXI6IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50UHJvcGVydGllcyh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcblxyXG4gICAgLy8ga2VlcCBkYXRhIFZhbHVlXHJcbiAgICB0aGlzLmluaXRpYWxEYXRhVmFsdWUgPSB0aGlzLmRhdGEuVmFsdWU7XHJcblxyXG4gICAgLy8gZGVjbGFyYXRpb25cclxuICAgIHRoaXMuY29tcG9uZW50U2NvcGVOYW1lID0gJ196dWRmXycgKyB0aGlzLmRhdGEuTmFtZTtcclxuICAgIHRoaXMuY29tcG9uZW50UHJlZml4ID0gJ3p1ZGZfJyArIHRoaXMuZGF0YS5OYW1lO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBbdGhpcy5kYXRhLk5hbWUgKyAnTW9kZWwnXSA9IFtdO1xyXG5cclxuICAgIHRoaXMubG9hZEZvcm0oKTtcclxuXHJcbiAgICAvL2lmIChaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHRoaXMuZGF0YS5WYWx1ZSkgfHwgdGhpcy5kYXRhLlZhbHVlLmxlbmd0aCA+IDIpIHtcclxuICAgIC8vICB0aGlzLmxvYWRFbXB0eUZvcm0oKTtcclxuICAgIC8vfVxyXG4gICAgLy9lbHNlIHtcclxuICAgIC8vICB0aGlzLmxvYWRadWRmRm9ybSgpO1xyXG4gICAgLy99XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRGb3JtKCkge1xyXG4gICAgb2YodHJ1ZSkucGlwZShcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEuU3ViVHlwZSA9ICd6dWRmJztcclxuXHJcbiAgICAgICAgLy8gY2hhbmdlIHRoZSB2YWx1ZSB0byB0aGUgcmVzdWx0IGZpZWxkIGZvcm1cclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZGF0YS5OYW1lICsgJyBkZWZhdWx0IHZhbHVlOiAnICsgdGhpcy5kYXRhLlZhbHVlKTtcclxuICAgICAgICAvL3RoaXMuZGF0YS5WYWx1ZSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBjaGFuZ2UgenVkZiB0byB6ZGl2XHJcbiAgICAgICAgLy90aGlzLmRhdGEuVHlwZSA9ICd6ZGl2JztcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gY3JlYXRlIG5ldyBncm91cCBmb3IgenVkZlxyXG4gICAgICAgIGlmICghdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0pIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdID0gbmV3IFpHcm91cDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGRlY2xhcmUgek1vZGVsIHRvIHp1ZGYgZ3JvdXBcclxuICAgICAgICBjb25zdCB6dWRmU2NvcGVHcm91cCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdO1xyXG4gICAgICAgIHp1ZGZTY29wZUdyb3VwLnpNb2RlbCA9IHt9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgLy8gcmVuZGVyIGZpZWxkIGVsZW1lbnRcclxuICAgICAgICB0aGlzLnJlbmRlckZpZWxkRWxlbWVudCh0aGlzLmRhdGEuVmFsdWUpO1xyXG5cclxuICAgICAgICAvLyBzZXQgdGhpcyBuZXcgY3JlYXRlIGZvcm0gdG8gekdyb3VwIHNjb3BlXHJcbiAgICAgICAgLy8gYmluZCBmb3JtIG9ubHkgd2hlbiBWYWx1ZSBpcyBub3QgbnVsbFxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuVmFsdWUpIHtcclxuICAgICAgICAgIHp1ZGZTY29wZUdyb3VwLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2w6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG4gICAgICAgICAgenVkZlNjb3BlR3JvdXAuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gc2V0IHRvIGZvcm1GaWVsZCBmb3IgZGlzcGxheVxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9ICdhZnRlcicgKyAodGhpcy5kYXRhLk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLmRhdGEuTmFtZS5zbGljZSgxKSkgKyAnTG9hZGVkJztcclxuICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICBpZiAodGhpcy5ncm91cFtmaWVsZE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW2ZpZWxkTmFtZV0odGhpcy5ncm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHNldCBGaWVsZCBkaXYgY2xhc3NcclxuICAgICAgLy8gUmVwbGFjZWQgd2l0aDogdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5zZXRGaWVsZHNEaXZDbGFzcyh0aGlzLmdyb3VwLl9wcm9qZWN0TmFtZSwgdGhpcy5ncm91cC5maWVsZE5hbWUsIHRoaXMuZGF0YSwgdGhpcy5hdXRoU2VydmljZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGb3JtQ29udHJvbFZhbGlkYXRpb24oZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbGlkYXRvcjogYW55KSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnRCeUpzb25TdHJpbmcoZ3JvdXA6IFpHcm91cCwganNvblN0cmluZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmaWVsZEVsZW1lbnRNYXN0ZXJDb2RlSnNvbkFycmF5ID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KGZpZWxkRWxlbWVudE1hc3RlckNvZGVKc29uQXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIERpc3BsYXkgbW9kZWxcclxuICBwdWJsaWMgc2V0RGlzcGxheU1vZGVsKHZhbHVlOiBhbnkpIHtcclxuICAgIC8vIHJlcGxhY2UgdGhlIHdob2xlIGRpc3BsYXkgbW9kZWxcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcbiAgICAgXHJcbiAgICAgIHRoaXMuY2xlYXJGb3JtQ29udHJvbCgpO1xyXG5cclxuICAgICAgdGhpcy5yZW5kZXJGaWVsZEVsZW1lbnQodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgdmFsdWUgdXNlZCBmb3IgcmVuZGVyIHp1ZGYgJyArIHRoaXMuZGF0YS5OYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVEaXNwbGF5TW9kZWwodmFsdWU6IGFueSwgZmxhdEluZGV4OiBzdHJpbmcpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIudXBkYXRlQXJyYXlPYmplY3RCeUZsYXRJbmRleCh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwsIGZsYXRJbmRleCwgdmFsdWUpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGVuZFRvRGlzcGxheU1vZGVsKHZhbHVlOiBhbnksIGZsYXRJbmRleDogc3RyaW5nKSB7XHJcbiAgICAvLyBhcHBlbmQgdG8gZGlzcGxheSBtb2RlbCBtZWFuIGl0IHdpbGwgYmFzZSBvbiBmbGF0IGluZGV4IHRvIGluc2VydCB0aGUgZm9ybSBjb250cm9sLlxyXG4gICAgaWYgKGZsYXRJbmRleC5sZW5ndGggPj0gMykge1xyXG4gICAgICBmbGF0SW5kZXguc3Vic3RyaW5nKDAsIGZsYXRJbmRleC5sZW5ndGggLSAyKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0RnJvbUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgpO1xyXG4gICAgc2VsZWN0ZWRSZWNvcmQuVmFsdWUucHVzaCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGlzcGxheU1vZGVsKCkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlQWxsRGlzcGxheU1vZGVsKCkge1xyXG4gICAgdGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsID0gW107XHJcbiAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVFbGVtZW50RnJvbURpc3BsYXlNb2RlbChmbGF0SW5kZXg6IHN0cmluZykge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZW1vdmVBcnJheU9iamVjdEJ5RmxhdEluZGV4KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCwgZmxhdEluZGV4KTtcclxuXHJcbiAgICAvLyBUT0RPOiByZW1vdmUgZnJvbSB6bW9kZWxcclxuICAgIC8vZGVsZXRlIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFsnJ107XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGZ1bmN0aW9uIGZvciBmb3JtIGNvbnRyb2wuXHJcbiAgcHVibGljIGFwcGVuZEZvcm1Db250cm9sKGZpZWxkRGF0YTogWkZpZWxkKSB7XHJcbiAgICAvLyBhcHBlbmQgZm9ybSBjb250cm9sIG1lYW4gaXQgd2lsbCBqdXN0IGluc2VydCB0aGUgZm9ybSBjb250cm9sIGF0IHRoZSBsYXN0ICBcclxuICAgIGZpZWxkRGF0YS5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZERhdGEuTmFtZSwgZmllbGREYXRhWydjb250YWluZXJOYW1lJ10pO1xyXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuXHJcbiAgICBmb3JtQ29udHJvbHNbZmllbGREYXRhLk5hbWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICB0aGlzLmdyb3VwWydfenVkZl9mb3JtUHJldmlldyddLnpNb2RlbFtmaWVsZERhdGEuTmFtZV1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woZmllbGREYXRhLk5hbWUsIGZvcm1Db250cm9sc1tmaWVsZERhdGEuTmFtZV0pO1xyXG5cclxuICAgIGlmICghdGhpcy5mb3JtRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdmb3JtRmllbGQgJyArIHRoaXMuZGF0YS5OYW1lICsgJyBpcyB1bmRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHMucHVzaChmaWVsZERhdGEpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlckZpZWxkRWxlbWVudChmaWVsZEVsZW1lbnRzOiBhbnkpIHtcclxuICAgIGlmIChmaWVsZEVsZW1lbnRzKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9ID0ge307XHJcbiAgICAgIGZpZWxkRWxlbWVudHMgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xzKGZpZWxkRWxlbWVudHMsIGZvcm1Db250cm9scyk7XHJcblxyXG4gICAgICAvLyByZW5kZXIgZm9ybSBjb250cm9sIHRvIG5ldyBmb3JtZ3JvdXBcclxuICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cChmb3JtQ29udHJvbHMpO1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmaWVsZEVsZW1lbnRzO1xyXG4gICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS5mb3JtID0gdGhpcy5mb3JtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZEFycmF5OiBhbnksIGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9LCBjb250YWluZXJOYW1lPzogc3RyaW5nKSB7XHJcbiAgICBmaWVsZEFycmF5LmZvckVhY2goZmllbGQgPT4geyBcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgaWYgKHR5cGVvZiBmaWVsZC5WYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBmaWVsZC5WYWx1ZS5pbmRleE9mKFwiLlwiKSAhPT0gLTEpIHtcclxuICAgICAgICBpZiAoWyd6Z3JpZCcsICd6dHJlZScsICd6aW1nJywgJ3RleHRhcmVhanNvbiddLmluZGV4T2YoZmllbGQuVHlwZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJGb3JtQ29udHJvbCAtIGludmFsaWQgZmllbGQgdmFsdWVcIiwgZmllbGQuVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICAgIC8vIGluc2VydCBtdWx0aXZhbHVlZ3JvdXAgdG8gdGhlIGNhcmQgdmFsdWUgaWYgdHJ1ZVxyXG4gICAgICAgICAgaWYgKGZpZWxkLk11bHRpVmFsdWVkR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNdWx0aVZhbHVlR3JvdXAoZmllbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZC5WYWx1ZSwgZm9ybUNvbnRyb2xzLCBmaWVsZC5OYW1lKTsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gYmVmb3JlIGdlbmVyYXRlIEZvcm1Db250cm9sLCB3ZSBuZWVkIHRvIGFkZCAyIGF0dHJpYnV0ZSB0byB0aGUgZmllbGQgd2hlbiByZW5kZXIuXHJcbiAgICAgICAgICAvLyB0aGlzIGZvciBsYXRlciBvbiwgd2UgY2FuIGVhc2lseSBrbm93IHRoaXMgZmllbGQgYmVsb25nIHRvIHdoaWNoIHp1ZGYgYW5kIHVuZGVyIHdoaWNoIGNvbnRhaW5lci4gXHJcbiAgICAgICAgICBpZiAoY29udGFpbmVyTmFtZSkge1xyXG4gICAgICAgICAgICBmaWVsZFsnY29udGFpbmVyTmFtZSddID0gY29udGFpbmVyTmFtZTs7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV1bY29udGFpbmVyTmFtZV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXVtjb250YWluZXJOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNGb3JtQ29udHJvbCA9IFpDb21wb25lbnRIZWxwZXIuaXNGb3JtQ29udHJvbChmaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmlzVmlzaWJsZUZvcm1Db250cm9sKHRoaXMsIGZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBaQ29tcG9uZW50SGVscGVyLmlzUmVxdWlyZWRGb3JtQ29udHJvbCh0aGlzLCBmaWVsZCk7XHJcblxyXG4gICAgICAgICAgaWYgKGlzRm9ybUNvbnRyb2wgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgZmllbGQuTmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGQuTmFtZSwgY29udGFpbmVyTmFtZSk7IFxyXG4gICAgICAgICAgICBmaWVsZC5WYWx1ZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGQuVmFsdWUsIGNvbnRhaW5lck5hbWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lck5hbWUpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdLmluY2x1ZGVzKGZpZWxkLlZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV1bY29udGFpbmVyTmFtZV0ucHVzaChmaWVsZC5WYWx1ZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGtlZXAgYSBsaXN0IG9mIGRyb3Bkb3duIG9wdGlvbiB2YXJpYWJsZSBuYW1lIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVHlwZShmaWVsZC5UeXBlKSAmJiBmaWVsZC5aRGF0YU9wdGlvbk5hbWUgJiYgZmllbGQuRHJvcGRvd25PcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cC56RGF0YVtmaWVsZC5aRGF0YU9wdGlvbk5hbWVdID0gZXZhbCgndGhpcy4nICsgZmllbGQuRHJvcGRvd25PcHRpb25zKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0VmFsaWRhdG9ycyhmaWVsZCwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkKTtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbZmllbGQuVmFsdWVdLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFpDb21wb25lbnRIZWxwZXIuaGFzQ0NGaWVsZChmaWVsZC5UeXBlKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNjVmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q0NWYWxpZGF0b3JzKGZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5DQ1ZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFtmaWVsZC5DQ1ZhbHVlXSxcclxuICAgICAgICAgICAgICAgIGNjVmFsaWRhdG9yc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gb25jaGFuZ2UgaGFuZGxpbmc/XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJGb3JtQ29udHJvbCgpIHtcclxuICAgIHRoaXMuZm9ybUZpZWxkcy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChkYXRhLlZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0YS5WYWx1ZSA9IHRoaXMuaW5pdGlhbERhdGFWYWx1ZTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHMgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1GaWVsZHM7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGZ1bmN0aW9uIGZvciBfenVkZiBzY29wZSB6bW9kZWwuIFxyXG4gIHB1YmxpYyBzZXRGb3JtRmllbGR6TW9kZWwoZ3JvdXA6IFpHcm91cCwgbW9kZWxEYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGdycCA9IGdyb3VwID8gZ3JvdXAgOiB0aGlzLmdyb3VwO1xyXG4gICAgY29uc3Qgek1vZGVsID0gZ3JwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWw7IFxyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHt9O1xyXG5cclxuICAgIGZvciAodmFyIHByb3AgaW4gbW9kZWxEYXRhKSB7XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kZWxEYXRhLCBwcm9wKSkge1xyXG4gICAgICAgIHBhdGNoZWRNb2RlbERhdGFbdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShwcm9wLCBwcm9wWydjb250YWluZXJOYW1lJ10pXSA9IG1vZGVsRGF0YVtwcm9wXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oek1vZGVsLCBwYXRjaGVkTW9kZWxEYXRhKTtcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc2V0TW9kZWxWYWx1ZShtb2RlbE5hbWU6IHN0cmluZywgbW9kZWxWYWx1ZTogYW55LCBza2lwUHJlZml4PzogYm9vbGVhbikge1xyXG4gICAgY29uc3Qgek1vZGVscyA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbDtcclxuICAgIGNvbnN0IHpNb2RlbE5hbWUgPSBza2lwUHJlZml4ID8gbW9kZWxOYW1lIDogdGhpcy5jb21wb25lbnRQcmVmaXggKyAnXycgKyBtb2RlbE5hbWU7XHJcbiAgICB6TW9kZWxzW3pNb2RlbE5hbWVdID0gbW9kZWxWYWx1ZTtcclxuICAgICBcclxuICAgIGxldCBmZzogRm9ybUdyb3VwID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBmZy5wYXRjaFZhbHVlKHpNb2RlbHMpOyBcclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgZ2V0Wk1vZGVsKHNraXBSZW1vdmVQcmVmaXg/OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCB6TW9kZWwgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWw7IFxyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHt9O1xyXG5cclxuICAgIGlmIChza2lwUmVtb3ZlUHJlZml4KSB7XHJcbiAgICAgIHJldHVybiB6TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgcHJvcCBpbiB6TW9kZWwpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6TW9kZWwsIHByb3ApKSB7XHJcbiAgICAgICAgcGF0Y2hlZE1vZGVsRGF0YVtwcm9wLnJlcGxhY2UodGhpcy5jb21wb25lbnRQcmVmaXggKyAnXycsICcnKV0gPSB6TW9kZWxbcHJvcF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGF0Y2hlZE1vZGVsRGF0YTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRaTW9kZWxBc1N0cmluZygpIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmdldFpNb2RlbCgpKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gY29tbW9uIGZ1bmN0aW9uIFxyXG4gIENvbXBvbmVudElzVmlzaWJsZShmaWVsZDogWkZpZWxkKTogYW55IHtcclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLkNvbXBvbmVudElzVmlzaWJsZShmaWVsZCwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RW5hYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkgPSAhc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpc2libGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlID0gc3RhdHVzO1xyXG4gICAgdGhpcy5kYXRhLlZpc2libGUgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UmVxdWlyZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkID0gc3RhdHVzO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5jaGFuZ2VWYWxpZGF0b3Ioc3RhdHVzLCB0aGlzLmdyb3VwLCB0aGlzLmRhdGEuVmFsdWUsIHRoaXMuY29tcG9uZW50UHJvcGVydGllcywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoY29udHJvbE5hbWU6IHN0cmluZywgY29udGFpbmVyTmFtZT86IHN0cmluZykge1xyXG4gICAgY29uc3QgbWFpblByZWZpeCA9IFt0aGlzLmRhdGEuVHlwZSwgdGhpcy5kYXRhLk5hbWUsIGNvbnRhaW5lck5hbWUgPz8gbnVsbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ18nKTtcclxuXHJcbiAgICAvLyBjaGVjayBpcyBuYW1lIGJlZW4gcHJlZml4ZWQgXHJcbiAgICBpZiAoY29udHJvbE5hbWUuaW5jbHVkZXMobWFpblByZWZpeCkpIHtcclxuICAgICAgcmV0dXJuIGNvbnRyb2xOYW1lO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIHdlIHRyeSB0byBzcGxpdCB0aGUgbmFtZSBhbmQgdXNlIHRoZSBsYXN0IHNlZ21lbnQuXHJcbiAgICAgIC8vIHNvbWV0aW1lIHRoZSBjb250cm9sbmFtZSBjYW4gYmUgd2l0aG91dCB0aGUgY29udGFpbmVyIG5hbWUsIHNvIHdlIHNwbGl0IGFuZCB1c2UgdGhlIG5ldyBtYWluUHJlZml4XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xOYW1lU2VnbWVudCA9IGNvbnRyb2xOYW1lLnNwbGl0KCdfJyk7XHJcbiAgICAgIGNvbnRyb2xOYW1lID0gY29udHJvbE5hbWVTZWdtZW50W2NvbnRyb2xOYW1lU2VnbWVudC5sZW5ndGggLSAxXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW21haW5QcmVmaXgsIGNvbnRyb2xOYW1lXS5qb2luKCdfJyk7XHJcbiAgfVxyXG4gICBcclxuXHJcbiAgcHVibGljIHZhbGlkYXRlQW5kU2hvd0Vycm9yTWVzc2FnZSgpIHtcclxuICAgIGNvbnN0IGZnID0gdGhpcy5mb3JtIGFzIEZvcm1Hcm91cDtcclxuXHJcbiAgICBpZiAoIWZnLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50RXJyb3JIYW5kbGVyLnNob3dGb3JtR3JvdXBFcnJvck1lc3NhZ2UodGhpcy5ncm91cCwgZmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFByZWZpeChmaWVsZHM6IFpGaWVsZFtdLCBwcmVmaXg6IGFueSkge1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmFwcGVuZFByZWZpeChmaWVsZC5WYWx1ZSwgcHJlZml4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmaWVsZC5OYW1lID0gcHJlZml4ICsgJ18nICsgZmllbGQuTmFtZTtcclxuICAgICAgICBpZiAoZmllbGQuVHlwZSAhPSAnemJ1dHRvbnMnKSB7XHJcbiAgICAgICAgICBmaWVsZC5WYWx1ZSA9IHByZWZpeCArICdfJyArIGZpZWxkLlZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWVsZC5TdWJUeXBlID0gcHJlZml4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHB1YmxpYyBnZXRDb250YWluZXJNb2RlbFZhbHVlKGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdO1xyXG5cclxuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB7fTtcclxuICAgIGNvbnRhaW5lckVsZW1lbnQuZm9yRWFjaChlbGVtZW50ID0+IHsgXHJcbiAgICAgIG1vZGVsVmFsdWVbZWxlbWVudF0gPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbZWxlbWVudF07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbW9kZWxWYWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckNvbnRhaW5lckZpZWxkRWxlbWVudFZhbHVlKGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdO1xyXG4gICAgY29udGFpbmVyRWxlbWVudC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICB0aGlzLnNldE1vZGVsVmFsdWUoZWxlbWVudCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiAtLS0tLS0tLS0tPT09PT09PT09PT09PT09PT09PT0gTXVsdGkgVmFsdWUgR3JvdXAgPT09PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tKi9cclxuICBwdWJsaWMgc2V0TXVsdGlWYWx1ZUdyb3VwKGRhdGE6IGFueSwgZGF0YUluZGV4PzogYW55KSB7XHJcbiAgICAvLyBuZWVkIHRvIGRlY2xhcmUgbmFtZSwgdmFsdWUsIGRhdGFzb3VyY2UsIGNvbHVtbmZpZWxkcyBhdHRyaWJ1dGUgZm9yIGdyaWQuIFxyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZGF0YS5OYW1lKTtcclxuICAgIGNvbnN0IGdyaWRWYWx1ZSA9IG5hbWUgKyAnX09wdGlvbnMnO1xyXG4gICAgY29uc3QgZ3JpZERhdGFTb3VyY2UgPSBuYW1lICsgJ19EYXRhU291cmNlJztcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5GaWVsZHMgPSBuYW1lICsgJ19Db2x1bW5GaWVsZHMnO1xyXG5cclxuICAgIC8vIGFkZCB0byBncmlkIGVsZW1lbnQgYXR0cmlidXRlXHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICBcIkFkZENvbW1hbmRCdXR0b25OYW1lXCI6IFwiQWRkXCIsXHJcbiAgICAgIFwiQWxsb3dFeHBvcnRcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dHcmlkRGF0YUV4cG9ydFwiOiBmYWxzZSxcclxuICAgICAgXCJBbGxvd011bHRpU2VsZWN0XCI6IGZhbHNlLFxyXG4gICAgICBcIkFsbG93Um93U2VsZWN0XCI6IGZhbHNlLFxyXG4gICAgICBcIkFsbG93U2F2ZVN0YXRlXCI6IGZhbHNlLFxyXG4gICAgICBcIkNvbHVtbkZpZWxkc1wiOiAnZ3JvdXAuJyArIGdyaWRDb2x1bW5GaWVsZHMsXHJcbiAgICAgIFwiRGF0YVNvdXJjZVwiOiAnZ3JvdXAuJyArIGdyaWREYXRhU291cmNlLFxyXG4gICAgICBcIkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyXCI6IHRydWUsXHJcbiAgICAgIFwiRGlzYWJsZUdlbmVyYXRlQ29sdW1uQnlGb3JtXCI6IHRydWUsXHJcbiAgICAgIFwiRGl2Q2xhc3NcIjogJ2NvbC14cy0xMiBjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMicsXHJcbiAgICAgIFwiRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZFwiOiB0cnVlLFxyXG4gICAgICBcIkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIjogdHJ1ZSxcclxuICAgICAgXCJFbmFibGVDdXN0b21SZXNldENvbW1hbmRcIjogdHJ1ZSxcclxuICAgICAgXCJFbmFibGVTYXZlR3JpZFN0YXRlXCI6IGZhbHNlLFxyXG4gICAgICBcIkV4dGVybmFsUGFnaW5hdGlvblwiOiBmYWxzZSxcclxuICAgICAgXCJIZWlnaHRSZWR1Y2VcIjogMjUwLFxyXG4gICAgICBcIkxpbWl0RmllbGRzXCI6IGZhbHNlLFxyXG4gICAgICBcIk5hbWVcIjogbmFtZSxcclxuICAgICAgXCJQYWdlU2l6ZVwiOiAyMCxcclxuICAgICAgXCJQYWdlU2l6ZXNcIjogZmFsc2UsXHJcbiAgICAgIFwiUmVzb3VyY2VVUkxcIjogdHJ1ZSxcclxuICAgICAgXCJTZWxlY3RPcHRpb25zXCI6IGZhbHNlLFxyXG4gICAgICBcIlNob3dHcmlkRWRpdEJ1dHRvblwiOiBmYWxzZSxcclxuICAgICAgXCJTdWJUeXBlXCI6IFwienVkZlwiLFxyXG4gICAgICBcIlR5cGVcIjogXCJ6Z3JpZFwiLFxyXG4gICAgICBcIlZhbHVlXCI6ICdncm91cC4nICsgZ3JpZFZhbHVlLFxyXG4gICAgICBcIlZpc2libGVcIjogdHJ1ZSxcclxuICAgICAgXCJXaWR0aFJlZHVjZVwiOiA1MDBcclxuICAgIH1cclxuXHJcbiAgICAvLyBjcmVhdGUgcHJvcGVydHkgaW4gdGhlIGdyb3VwIGJhc2Ugb24gYWJvdmUgZGVjbGFyYXRpb24gZXhjZXB0IE5hbWUgYW5kIGFsc28gaW5zZXJ0IGNvbHVtbiBmaWVsZC5cclxuICAgIC8vIHVzZSBncm91cGluZyB2YWx1ZSBhcyBjb2x1bW4uIHNraXAgaW5zZXJ0IGFueSBjb250YWluZXIgdHlwZS5cclxuICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBkYXRhLk5hbWU7XHJcbiAgICBjb25zdCBncm91cEZpZWxkRWxlbWVudHMgPSBbXTtcclxuXHJcbiAgICBkYXRhLlZhbHVlLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZE1vZGVsID0gT2JqZWN0LmFzc2lnbih7fSwgZmllbGQpO1xyXG4gICAgICBmaWVsZE1vZGVsWydEaXNwbGF5TmFtZSddID0gZmllbGRNb2RlbC5MYWJlbDtcclxuICAgICAgZmllbGRNb2RlbC5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZE1vZGVsWydOYW1lJ10sIGNvbnRhaW5lck5hbWUpO1xyXG4gICAgICBmaWVsZE1vZGVsLlZhbHVlID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZE1vZGVsWydWYWx1ZSddLCBjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgIGdyb3VwRmllbGRFbGVtZW50cy5wdXNoKGZpZWxkTW9kZWwpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXSA9IFtdO1xyXG4gICAgdGhpcy5ncm91cFtncmlkQ29sdW1uRmllbGRzXSA9IGdyb3VwRmllbGRFbGVtZW50cztcclxuXHJcbiAgICAvLyBncmlkIGNvbHVtbiB0byBiYXNlIG9uIGZpZWxkIGVsZW1lbnQgYW5kIGluc2VydCB0byBncmlkIGNvbHVtbi4gXHJcbiAgICB0aGlzLmdyb3VwW25hbWUgKyAnX0N1c3RvbUFkZEJ1dHRvbk9uQ2xpY2snXSA9IHRoaXMuY2FwdHVyZUNvbnRhaW5lckZpZWxkVmFsdWVUb01vZGVsLmJpbmQodGhpcywgdGhpcy5ncm91cCwgZ3JpZFZhbHVlLCBncmlkRGF0YVNvdXJjZSwgY29udGFpbmVyTmFtZSk7IC8vX3p1ZGZfZm9ybVByZXZpZXdcclxuICAgIHRoaXMuZ3JvdXBbbmFtZSArICdfQ3VzdG9tUmVzZXRCdXR0b25PbkNsaWNrJ10gPSB0aGlzLmNsZWFyQ29udGFpbmVyUmVsYXRlZEZpZWxkVmFsdWUuYmluZCh0aGlzLCB0aGlzLmdyb3VwLCBjb250YWluZXJOYW1lKTsgLy9fenVkZl9mb3JtUHJldmlld1xyXG4gICAgdGhpcy5ncm91cFtuYW1lICsgJ19DdXN0b21SZW1vdmVCdXR0b25PbkNsaWNrJ10gPSB0aGlzLnJlbW92ZUdyaWRSb3cuYmluZCh0aGlzLCBncmlkVmFsdWUsIGdyaWREYXRhU291cmNlKTsgLy9fenVkZl9mb3JtUHJldmlld1xyXG5cclxuICAgIGlmIChkYXRhSW5kZXgpIHtcclxuICAgICAgdGhpcy5hcHBlbmRUb0Rpc3BsYXlNb2RlbChlbGVtZW50LCBkYXRhSW5kZXgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRhdGEuVmFsdWUucHVzaChlbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FwdHVyZUNvbnRhaW5lckZpZWxkVmFsdWVUb01vZGVsKGdyb3VwOiBaR3JvdXAsIGdyaWRWYWx1ZTogYW55LCBncmlkRGF0YVNvdXJjZTogYW55LCBjb250YWluZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgIC8vIGdldCBjb250YWluZXIgbW9kZWwgdmFsdWUsIHNldCB0byBncm91cCBncmlkIGRhdGFzb3VyY2VcclxuICAgIGdyb3VwW2dyaWREYXRhU291cmNlXS5wdXNoKHRoaXMuZ2V0Q29udGFpbmVyTW9kZWxWYWx1ZShjb250YWluZXJOYW1lKSk7XHJcblxyXG4gICAgLy8gc2V0IGRhdGFzb3VyY2UgdG8gZ3JpZFxyXG4gICAgZ3JvdXBbZ3JpZFZhbHVlXS5zZXREYXRhKHRoaXMuZ3JvdXBbZ3JpZERhdGFTb3VyY2VdKTtcclxuXHJcbiAgICAvLyBjbGVhciBjb250YWluZXIgZmllbGQgdmFsdWVcclxuICAgIHRoaXMuY2xlYXJDb250YWluZXJSZWxhdGVkRmllbGRWYWx1ZShncm91cCwgY29udGFpbmVyTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyQ29udGFpbmVyUmVsYXRlZEZpZWxkVmFsdWUoZ3JvdXA6IFpHcm91cCwgY29udGFpbmVyTmFtZTogc3RyaW5nKSB7IFxyXG4gICAgLy8gYWZ0ZXIgc2V0IHRvIGdyaWQsIGNsZWFyIHRoZSB6bW9kZWwuIFxyXG4gICAgdGhpcy5jbGVhckNvbnRhaW5lckZpZWxkRWxlbWVudFZhbHVlKGNvbnRhaW5lck5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVHcmlkUm93KGdyaWRWYWx1ZTogYW55LCBncmlkRGF0YVNvdXJjZTogYW55LCBkYXRhSXRlbTogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICB0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIHNldCBkYXRhc291cmNlIHRvIGdyaWRcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZFZhbHVlXS5zZXREYXRhKHRoaXMuZ3JvdXBbZ3JpZERhdGFTb3VyY2VdKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBmdW5jdGlvbiBmb3IgY29tcG9uZW50IGV2ZW50XHJcbiAgLy8jZW5kcmVncmlvblxyXG5cclxuICAvLyBUT0RPOiB0byBiZSBjb25zaWRlciB0byBhZGQgdG8gWkNvbXBvbmVudEhlbHBlciBcclxuXHJcbiAgcHJpdmF0ZSBpc0Ryb3Bkb3duVHlwZShkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudERhdGFUeXBlID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gZGF0YSA6IGRhdGEuVHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIGlmIChjb21wb25lbnREYXRhVHlwZSA9PSBDb21wb25lbnRUeXBlLmRyb3Bkb3duIHx8IGNvbXBvbmVudERhdGFUeXBlID09IENvbXBvbmVudFR5cGUuenVpc2VsZWN0bXVsdGlwbGUgfHwgY29tcG9uZW50RGF0YVR5cGUgPT0gQ29tcG9uZW50VHlwZS56c2VsZWN0bXVsdGlwbGUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuZW51bSBDb21wb25lbnRUeXBlIHtcclxuICB0ZXh0ID0gJ3RleHQnLFxyXG4gIHRleHRhcmVhID0gJ3RleHRhcmVhJyxcclxuICBjaGVja2JveCA9ICdjaGVja2JveCcsXHJcbiAgbGFiZWwgPSAnemxhYmVsJyxcclxuICBkYXRlID0gJ2RhdGUnLFxyXG4gIHpkYXRldGltZSA9ICd6ZGF0ZXRpbWUnLFxyXG4gIHp1aWRhdGV0aW1lID0gJ3p1aWRhdGV0aW1lJyxcclxuICBudW1iZXIgPSAnbnVtYmVyJyxcclxuICB6bnVtZXJpYyA9ICd6bnVtZXJpYycsXHJcbiAgZW1haWwgPSAnZW1haWwnLFxyXG4gIGZpbGUgPSAnZmlsZScsXHJcbiAgcHJpY2UgPSAncHJpY2UnLFxyXG4gIHdlYnNpdGUgPSAnd2Vic2l0ZScsXHJcbiAgZHJvcGRvd24gPSAnZHJvcGRvd24nLFxyXG4gIHp1aXNlbGVjdG11bHRpcGxlID0gJ3p1aXNlbGVjdG11bHRpcGxlJyxcclxuICB6c2VsZWN0bXVsdGlwbGUgPSAnenNlbGVjdG11bHRpcGxlJyxcclxuICBncm91cGluZyA9ICdrY2FyZCcsXHJcbiAgYnV0dG9uID0gJ3pidXR0b25zJyxcclxuICBncmlkID0gJ3pncmlkJ1xyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJwYWRkaW5nOiAxNXB4XCIgKm5nSWY9XCJkYXRhLlRpdGxlICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiIGNsYXNzPVwiaW9uLXJvd1wiPlxyXG4gIDxrZW5kby1jYXJkICpuZ0lmPVwiZGF0YS5UaXRsZVwiIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgPGtlbmRvLWNhcmQtaGVhZGVyPlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJjYXJkLWhlYWRlci10aXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9pb24tbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9rZW5kby1jYXJkLWhlYWRlcj5cclxuICAgIDxrZW5kby1jYXJkLWJvZHk+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpb24tcm93XCI+XHJcbiAgICAgICAgPGFwcC16Zm9ybWNvbnRyb2wgW25nQ2xhc3NdPVwiZ3JvdXBbZmllbGQuaXNWaXNpYmxlRmllbGRdID8gZmllbGQuRGl2Q2xhc3MgOiAoKGZpZWxkLlZpc2libGUgPT09IHRydWUpID8gIGZpZWxkLkRpdkNsYXNzIDogJ2ZsZXgtaGlkZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUZpZWxkcyB8IGRpdnpsYXlvdXQ6IGRhdGEuemxheW91dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tmaWVsZC5OYW1lfX1cIj5cclxuICAgICAgICA8L2FwcC16Zm9ybWNvbnRyb2w+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9rZW5kby1jYXJkLWJvZHk+XHJcbiAgPC9rZW5kby1jYXJkPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCIhZGF0YS5UaXRsZSAmJiAoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIiBjbGFzcz1cImlvbi1yb3dcIj5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBhdXRvY29tcGxldGU9XCJvZmZcIj5cclxuICAgIDxpb24tZ3JpZD5cclxuICAgICAgPGlvbi1yb3cgaWQ9XCJkeW5hbWljLWZvcm0taG9zdFwiIGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLXN0YXJ0XCI+XHJcbiAgICAgICAgPGFwcC16Zm9ybWNvbnRyb2wgW25nQ2xhc3NdPVwiZ3JvdXBbZmllbGQuaXNWaXNpYmxlRmllbGRdID8gZmllbGQuRGl2Q2xhc3MgOiAoKGZpZWxkLlZpc2libGUgPT09IHRydWUpID8gIGZpZWxkLkRpdkNsYXNzIDogJ2ZsZXgtaGlkZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUZpZWxkcyB8IGRpdnpsYXlvdXQ6IGRhdGEuemxheW91dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tmaWVsZC5OYW1lfX1cIj5cclxuICAgICAgICA8L2FwcC16Zm9ybWNvbnRyb2w+XHJcbiAgICAgIDwvaW9uLXJvdz5cclxuICAgIDwvaW9uLWdyaWQ+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj5cclxuIl19