ets-fe-ng-sdk 18.0.2 → 18.0.4

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.
@@ -1,4 +1,4 @@
1
- import { ChangeDetectorRef, Component, DestroyRef, computed, inject, model, signal } from '@angular/core';
1
+ import { ChangeDetectorRef, Component, DestroyRef, computed, inject, model, signal, } from '@angular/core';
2
2
  import { UtilityService } from '../../../Services/utility.service';
3
3
  import { TableService } from '../table-plain/table-plain.service';
4
4
  import * as i0 from "@angular/core";
@@ -9,12 +9,12 @@ export class BaseFormGenerator {
9
9
  this.formSchemaMap = computed(() => this._formSchemaMap());
10
10
  this.formSchema = computed(() => {
11
11
  const res = Object.values(this.formSchemaMap()).filter((x) => x);
12
- return this.useCustomLabels()
12
+ return (this.useCustomLabels()
13
13
  ? res.map((f) => ({
14
14
  ...f,
15
15
  label: f.label ? this.tableService.customLabelMap[f.field] || f.label : f.label,
16
16
  }))
17
- : res;
17
+ : res).filter((x) => !!x);
18
18
  });
19
19
  this.subs = {};
20
20
  this.utilityService = inject(UtilityService);
@@ -38,7 +38,14 @@ export class BaseFormGenerator {
38
38
  this._formSchemaMap.update((formSchemaMap) => {
39
39
  const existing = formSchemaMap[field];
40
40
  // if (!existing) debugger;
41
- return { ...formSchemaMap, [field]: !existing ? scheme : { ...existing, ...scheme } };
41
+ return {
42
+ ...formSchemaMap,
43
+ [field]: {
44
+ ...(existing || {}),
45
+ ...scheme,
46
+ _id: existing._id || this.utilityService.generateUUID(),
47
+ },
48
+ };
42
49
  // return !sch ? { ...formSchemaMap, [field as any]: scheme } : { ...formSchemaMap, [field as any]: { ...sch, ...scheme } };
43
50
  });
44
51
  }
@@ -47,7 +54,10 @@ export class BaseFormGenerator {
47
54
  const newFormSchemaMap = {};
48
55
  for (const key in formSchemaMap)
49
56
  if (Object.prototype.hasOwnProperty.call(formSchemaMap, key))
50
- newFormSchemaMap[key] = map(formSchemaMap[key]);
57
+ newFormSchemaMap[key] = {
58
+ ...map(formSchemaMap[key]),
59
+ _id: newFormSchemaMap[key]?._id || this.utilityService.generateUUID(),
60
+ };
51
61
  return newFormSchemaMap;
52
62
  });
53
63
  return this.formSchema();
@@ -64,7 +74,7 @@ export class BaseFormGenerator {
64
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: BaseFormGenerator, decorators: [{
65
75
  type: Component,
66
76
  args: [{
67
- template: ''
77
+ template: '',
68
78
  }]
69
79
  }], ctorParameters: () => [] });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTFHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUduRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBS2xFLE1BQU0sT0FBZ0IsaUJBQWlCO0lBd0JyQztRQXBCZ0IsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsbUJBQWMsR0FBRyxNQUFNLENBQXVDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLGtCQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELGVBQVUsR0FBRyxRQUFRLENBQW9CLEdBQUcsRUFBRTtZQUNyRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakUsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDZCxHQUFHLENBQUM7b0JBQ0osS0FBSyxFQUFFLENBQUMsQ0FB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WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEZXN0cm95UmVmLCBjb21wdXRlZCwgaW5qZWN0LCBtb2RlbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPcHRpb25MYWJlbFR5cGUgfSBmcm9tICcuLi9pbnB1dC9pbnB1dC1iYXNpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBJT2JqZWN0TGl0ZXJhbCwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IEljb25UeXBlIH0gZnJvbSAnLi4vYnRuL2J0bi5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi90YWJsZS1wbGFpbi90YWJsZS1wbGFpbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlOicnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VGb3JtR2VuZXJhdG9yPFxuICBURm9ybUdyb3VwIGV4dGVuZHMgSU9iamVjdExpdGVyYWwsXG4gIFRCYXNlRm9ybVNjaGVtYSBleHRlbmRzIHsgZmllbGQ/OiBhbnk7IGxhYmVsPzogc3RyaW5nIH0gPSBhbnksXG4+IHtcbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlU2VydmljZSA9IGluamVjdChUYWJsZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgX2Zvcm1TY2hlbWFNYXAgPSBzaWduYWw8eyBbZmllbGQ6IHN0cmluZ106IFRCYXNlRm9ybVNjaGVtYSB9Pih7fSk7XG4gIHByb3RlY3RlZCBmb3JtU2NoZW1hTWFwID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZm9ybVNjaGVtYU1hcCgpKTtcbiAgcmVhZG9ubHkgZm9ybVNjaGVtYSA9IGNvbXB1dGVkPFRCYXNlRm9ybVNjaGVtYVtdPigoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1TY2hlbWFNYXAoKSkuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICByZXR1cm4gdGhpcy51c2VDdXN0b21MYWJlbHMoKVxuICAgICAgPyByZXMubWFwKChmKSA9PiAoe1xuICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgbGFiZWw6IGYubGFiZWwgPyB0aGlzLnRhYmxlU2VydmljZS5jdXN0b21MYWJlbE1hcFtmLmZpZWxkXSB8fCBmLmxhYmVsIDogZi5sYWJlbCxcbiAgICAgICAgfSkpXG4gICAgICA6IHJlcztcbiAgfSk7XG4gIHN1YnM6IHsgW2ZpZWxkTmFtZTogc3RyaW5nXTogU3Vic2NyaXB0aW9uIH0gPSB7fTtcblxuICBwdWJsaWMgdXRpbGl0eVNlcnZpY2UgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHVibGljIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcmVhZG9ubHkgdXNlQ3VzdG9tTGFiZWxzID0gbW9kZWwodHJ1ZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICB0aGlzLm9uRGVzdHJveSgpO1xuICAgIH0pO1xuICB9XG5cbiAgb25EZXN0cm95KCkge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5zdWJzKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBzPy51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VicyA9IHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zZXRGb3JtU2NoZW1hcyhzY2hlbWFzOiBUQmFzZUZvcm1TY2hlbWFbXSkge1xuICAgIHRoaXMuX2Zvcm1TY2hlbWFNYXAuc2V0KChzY2hlbWFzIHx8IFtdKS50b01hcCgnZmllbGQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUZvcm1TY2hlbWEoZmllbGQ6IHN0cmluZywgc2NoZW1lOiBQYXJ0aWFsPFRCYXNlRm9ybVNjaGVtYT4pIHtcbiAgICB0aGlzLl9mb3JtU2NoZW1hTWFwLnVwZGF0ZSgoZm9ybVNjaGVtYU1hcCkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBmb3JtU2NoZW1hTWFwW2ZpZWxkXTtcbiAgICAgIC8vIGlmICghZXhpc3RpbmcpIGRlYnVnZ2VyO1xuICAgICAgcmV0dXJuIHsgLi4uZm9ybVNjaGVtYU1hcCwgW2ZpZWxkIGFzIGFueV06ICFleGlzdGluZyA/IHNjaGVtZSA6IHsgLi4uZXhpc3RpbmcsIC4uLnNjaGVtZSB9IH07XG4gICAgICAvLyByZXR1cm4gIXNjaCA/IHsgLi4uZm9ybVNjaGVtYU1hcCwgW2ZpZWxkIGFzIGFueV06IHNjaGVtZSB9IDogeyAuLi5mb3JtU2NoZW1hTWFwLCBbZmllbGQgYXMgYW55XTogeyAuLi5zY2gsIC4uLnNjaGVtZSB9IH07XG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIF91cGRhdGVBbGxGb3JtU2NoZW1hKG1hcDogKGZvcm1GaWVsZDogVEJhc2VGb3JtU2NoZW1hKSA9PiBUQmFzZUZvcm1TY2hlbWEpIHtcbiAgICB0aGlzLl9mb3JtU2NoZW1hTWFwLnVwZGF0ZSgoZm9ybVNjaGVtYU1hcCkgPT4ge1xuICAgICAgY29uc3QgbmV3Rm9ybVNjaGVtYU1hcDogdHlwZW9mIGZvcm1TY2hlbWFNYXAgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIGZvcm1TY2hlbWFNYXApXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZm9ybVNjaGVtYU1hcCwga2V5KSlcbiAgICAgICAgICBuZXdGb3JtU2NoZW1hTWFwW2tleV0gPSBtYXAoZm9ybVNjaGVtYU1hcFtrZXldKTtcbiAgICAgIHJldHVybiBuZXdGb3JtU2NoZW1hTWFwO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmZvcm1TY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVtb3ZlRm9ybVNjaGVtYShmaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZm9ybVNjaGVtYU1hcC51cGRhdGUoKGZvcm1TY2hlbWFNYXApID0+IHtcbiAgICAgIGRlbGV0ZSBmb3JtU2NoZW1hTWFwW2ZpZWxkXTtcbiAgICAgIHJldHVybiBmb3JtU2NoZW1hTWFwO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VGb3JtU2NoZW1hPFxuICBULFxuICBDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUdlbmVyYXRvcjxUPixcbiAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfSA9IGFueSxcbj4ge1xuICBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW107XG4gIGF1dG9QaWNrVmFsdWVGaWVsZD86IGJvb2xlYW47XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBjbGVhck9uRGlzYWJsZT86IGJvb2xlYW47XG4gIGNscz86IHN0cmluZztcbiAgY291bnRyeUNvZGUzPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IElCYXNlRm9ybVNjaGVtYTxULCBDb21wb25lbnQsIFRGb3JtR3JvdXA+W107XG4gIGRlY2ltYWxQb2ludHM/OiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWRJZj86IChyb3c6IGFueSwgY2VsbEZpZWxkPzogc3RyaW5nKSA9PiBib29sZWFuO1xuICAvLyBoaWRlSWZGdW5jPzogKHJvdykgPT4gYm9vbGVhbjtcbiAgZmllbGQ6IGtleW9mIFRGb3JtR3JvdXA7XG4gIGZvcm0/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47XG4gIGdldENvdW50cnlDb2RlM0tleT86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgaGludD86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpc1NlYXJjaEZpZWxkPzogYm9vbGVhbjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIGxhYmVsRmllbGQ/OiBzdHJpbmc7XG4gIGxhYmVsVHlwZT86IE9wdGlvbkxhYmVsVHlwZTtcbiAgb3B0aW9uTGFiZWxGb3JtYXR0ZXI/OiAocm93KSA9PiBzdHJpbmc7XG4gIG1heD86IG51bWJlcjtcbiAgbWluPzogbnVtYmVyO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbm9Gb3JtYXQ/OiBib29sZWFuO1xuICBvcHRpb25Gb3JtYXR0ZXI/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBhbnlbXTtcbiAgb3B0aW9uc0FzeW5jPzogT2JzZXJ2YWJsZTxhbnlbXT4gfCBQcm9taXNlPGFueVtdPjtcbiAgb3B0aW9uc0luaXRGdW5jPzogT2JzZXJ2YWJsZTxhbnlbXT47XG4gIG9wdGlvbnNJbml0RnVuYzI/OiAoKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgb3B0aW9uc0tleT86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHNlYXJjaEZ1bmM/OiAoLi4uYXJncykgPT4gYW55O1xuICBzZXRBc0NvdW50cnlDb2RlMz86IGJvb2xlYW47XG4gIHNldENvbnRyb2xGb3JtYXR0ZWRWYWx1ZT86IGJvb2xlYW47XG4gIHNob3dWYWxpZGF0aW9uPzogYm9vbGVhbjtcbiAgc2hvd1ZhbGlkYXRpb25JY29uPzogYm9vbGVhbjtcbiAgdGVtcGxhdGVWYWx1ZT86IGFueTtcbiAgdHlwZT86IElucHV0VHlwZTtcbiAgdmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW107XG4gIHZhbHVlPzogYW55O1xuICB2YWx1ZUZpZWxkPzogc3RyaW5nO1xuICBvcHRpb25zRnVuYz86ICguLi52YWw6IGFueSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XG4gIHRyaWdnZXJPbkNoYW5nZU9uSW5pdD86IGJvb2xlYW47XG4gIGZvcm1hdHRlcj86IChyb3c6IHsgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF06IGFueSB9LCBmaWVsZE5hbWU6IGtleW9mIFRGb3JtR3JvdXApID0+IHN0cmluZztcbiAgZXh0cmE/OiBhbnk7XG4gIG9uQ2hhbmdlRnVuYz86IChcbiAgICByb3c6IHsgW0sgaW4ga2V5b2YgVEZvcm1Hcm91cF0/OiBURm9ybUdyb3VwW0tdWyd2YWx1ZSddIH0sXG4gICAgY2VsbFZhbHVlPzogYW55LFxuICAgIGNvbXBvbmVudD86IENvbXBvbmVudCxcbiAgKSA9PiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueTtcbiAgb25SZW1vdmVGdW5jPzogKFxuICAgIHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogVEZvcm1Hcm91cFtLXVsndmFsdWUnXSB9LFxuICAgIGNlbGw/OiBhbnksXG4gICAgY29tcG9uZW50PzogQ29tcG9uZW50LFxuICApID0+IGFueTtcbiAgc2VsZWN0ZWRPcHRpb25MYWJlbD86IHN0cmluZztcbiAgc3RhY2tlZD86IGJvb2xlYW47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgc2hvd1ZhbGlkYXRpb25Nc2c/OiBib29sZWFuO1xuICBkb250Rm9ybWF0QXNJbnB1dD86IGJvb2xlYW47XG4gIHNob3dSZXF1aXJlZFRhZz86IGJvb2xlYW47XG4gIHRhYmxlRm9ybWF0dGVyPzogKFxuICAgIHZhbDogYW55LFxuICApID0+IHN0cmluZyB8IHVuZGVmaW5lZCB8IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB8IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgaWNvbj86IEljb25UeXBlO1xuICB2ZXJib3NlPzogYm9vbGVhbjtcbn1cbiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1nZW5lcmF0b3IuYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvU2hhcmVkL2NvbXBvbmVudHMvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQUtsRSxNQUFNLE9BQWdCLGlCQUFpQjtJQTBCckM7UUF0QmdCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFDLG1CQUFjLEdBQUcsTUFBTSxDQUF1QyxFQUFFLENBQUMsQ0FBQztRQUNsRSxrQkFBYSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUN2RCxlQUFVLEdBQUcsUUFBUSxDQUFvQixHQUFHLEVBQUU7WUFDckQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sQ0FDTCxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNwQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDZCxHQUFHLENBQUM7b0JBQ0osS0FBSyxFQUFFLENB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LGFBQWEsRUFBRSxFQUFFO1lBQzNDLE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0E5RW1CLGlCQUFpQjtrR0FBakIsaUJBQWlCLDZRQUYzQixFQUFFOzsyRkFFUSxpQkFBaUI7a0JBSHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLEVBQUU7aUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBtb2RlbCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9wdGlvbkxhYmVsVHlwZSB9IGZyb20gJy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IElPYmplY3RMaXRlcmFsLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgSWNvblR5cGUgfSBmcm9tICcuLi9idG4vYnRuLm1vZGVsJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uL3RhYmxlLXBsYWluL3RhYmxlLXBsYWluLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRm9ybUdlbmVyYXRvcjxcbiAgVEZvcm1Hcm91cCBleHRlbmRzIElPYmplY3RMaXRlcmFsLFxuICBUQmFzZUZvcm1TY2hlbWEgZXh0ZW5kcyB7IGZpZWxkPzogYW55OyBsYWJlbD86IHN0cmluZzsgX2lkPzogc3RyaW5nIH0gPSBhbnksXG4+IHtcbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlU2VydmljZSA9IGluamVjdChUYWJsZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgX2Zvcm1TY2hlbWFNYXAgPSBzaWduYWw8eyBbZmllbGQ6IHN0cmluZ106IFRCYXNlRm9ybVNjaGVtYSB9Pih7fSk7XG4gIHByb3RlY3RlZCBmb3JtU2NoZW1hTWFwID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5fZm9ybVNjaGVtYU1hcCgpKTtcbiAgcmVhZG9ubHkgZm9ybVNjaGVtYSA9IGNvbXB1dGVkPFRCYXNlRm9ybVNjaGVtYVtdPigoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm1TY2hlbWFNYXAoKSkuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy51c2VDdXN0b21MYWJlbHMoKVxuICAgICAgICA/IHJlcy5tYXAoKGYpID0+ICh7XG4gICAgICAgICAgICAuLi5mLFxuICAgICAgICAgICAgbGFiZWw6IGYubGFiZWwgPyB0aGlzLnRhYmxlU2VydmljZS5jdXN0b21MYWJlbE1hcFtmLmZpZWxkXSB8fCBmLmxhYmVsIDogZi5sYWJlbCxcbiAgICAgICAgICB9KSlcbiAgICAgICAgOiByZXNcbiAgICApLmZpbHRlcigoeCkgPT4gISF4KTtcbiAgfSk7XG4gIHN1YnM6IHsgW2ZpZWxkTmFtZTogc3RyaW5nXTogU3Vic2NyaXB0aW9uIH0gPSB7fTtcblxuICBwdWJsaWMgdXRpbGl0eVNlcnZpY2UgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHVibGljIGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgcmVhZG9ubHkgdXNlQ3VzdG9tTGFiZWxzID0gbW9kZWwodHJ1ZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICB0aGlzLm9uRGVzdHJveSgpO1xuICAgIH0pO1xuICB9XG5cbiAgb25EZXN0cm95KCkge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5zdWJzKS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBzPy51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICAgIHRoaXMuc3VicyA9IHt9O1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zZXRGb3JtU2NoZW1hcyhzY2hlbWFzOiBUQmFzZUZvcm1TY2hlbWFbXSkge1xuICAgIHRoaXMuX2Zvcm1TY2hlbWFNYXAuc2V0KChzY2hlbWFzIHx8IFtdKS50b01hcCgnZmllbGQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3VwZGF0ZUZvcm1TY2hlbWEoZmllbGQ6IHN0cmluZywgc2NoZW1lOiBQYXJ0aWFsPFRCYXNlRm9ybVNjaGVtYT4pIHtcbiAgICB0aGlzLl9mb3JtU2NoZW1hTWFwLnVwZGF0ZSgoZm9ybVNjaGVtYU1hcCkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBmb3JtU2NoZW1hTWFwW2ZpZWxkXTtcbiAgICAgIC8vIGlmICghZXhpc3RpbmcpIGRlYnVnZ2VyO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5mb3JtU2NoZW1hTWFwLFxuICAgICAgICBbZmllbGQgYXMgYW55XToge1xuICAgICAgICAgIC4uLihleGlzdGluZyB8fCB7fSksXG4gICAgICAgICAgLi4uc2NoZW1lLFxuICAgICAgICAgIF9pZDogZXhpc3RpbmcuX2lkIHx8IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2VuZXJhdGVVVUlEKCksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgLy8gcmV0dXJuICFzY2ggPyB7IC4uLmZvcm1TY2hlbWFNYXAsIFtmaWVsZCBhcyBhbnldOiBzY2hlbWUgfSA6IHsgLi4uZm9ybVNjaGVtYU1hcCwgW2ZpZWxkIGFzIGFueV06IHsgLi4uc2NoLCAuLi5zY2hlbWUgfSB9O1xuICAgIH0pO1xuICB9XG4gIHByb3RlY3RlZCBfdXBkYXRlQWxsRm9ybVNjaGVtYShtYXA6IChmb3JtRmllbGQ6IFRCYXNlRm9ybVNjaGVtYSkgPT4gVEJhc2VGb3JtU2NoZW1hKSB7XG4gICAgdGhpcy5fZm9ybVNjaGVtYU1hcC51cGRhdGUoKGZvcm1TY2hlbWFNYXApID0+IHtcbiAgICAgIGNvbnN0IG5ld0Zvcm1TY2hlbWFNYXA6IHR5cGVvZiBmb3JtU2NoZW1hTWFwID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBmb3JtU2NoZW1hTWFwKVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1TY2hlbWFNYXAsIGtleSkpXG4gICAgICAgICAgbmV3Rm9ybVNjaGVtYU1hcFtrZXldID0ge1xuICAgICAgICAgICAgLi4ubWFwKGZvcm1TY2hlbWFNYXBba2V5XSksXG4gICAgICAgICAgICBfaWQ6IG5ld0Zvcm1TY2hlbWFNYXBba2V5XT8uX2lkIHx8IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2VuZXJhdGVVVUlEKCksXG4gICAgICAgICAgfTtcbiAgICAgIHJldHVybiBuZXdGb3JtU2NoZW1hTWFwO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmZvcm1TY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfcmVtb3ZlRm9ybVNjaGVtYShmaWVsZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZm9ybVNjaGVtYU1hcC51cGRhdGUoKGZvcm1TY2hlbWFNYXApID0+IHtcbiAgICAgIGRlbGV0ZSBmb3JtU2NoZW1hTWFwW2ZpZWxkXTtcbiAgICAgIHJldHVybiBmb3JtU2NoZW1hTWFwO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJhc2VGb3JtU2NoZW1hPFxuICBULFxuICBDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUdlbmVyYXRvcjxUPixcbiAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfSA9IGFueSxcbj4ge1xuICBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW107XG4gIGF1dG9QaWNrVmFsdWVGaWVsZD86IGJvb2xlYW47XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBjbGVhck9uRGlzYWJsZT86IGJvb2xlYW47XG4gIGNscz86IHN0cmluZztcbiAgY291bnRyeUNvZGUzPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IElCYXNlRm9ybVNjaGVtYTxULCBDb21wb25lbnQsIFRGb3JtR3JvdXA+W107XG4gIGRlY2ltYWxQb2ludHM/OiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWRJZj86IChyb3c6IGFueSwgY2VsbEZpZWxkPzogc3RyaW5nKSA9PiBib29sZWFuO1xuICAvLyBoaWRlSWZGdW5jPzogKHJvdykgPT4gYm9vbGVhbjtcbiAgZmllbGQ6IGtleW9mIFRGb3JtR3JvdXA7XG4gIGZvcm0/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47XG4gIGdldENvdW50cnlDb2RlM0tleT86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgaGludD86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIF9pZD86IHN0cmluZztcbiAgaXNSZXF1aXJlZD86IGJvb2xlYW47XG4gIGlzU2VhcmNoRmllbGQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgbGFiZWxGaWVsZD86IHN0cmluZztcbiAgbGFiZWxUeXBlPzogT3B0aW9uTGFiZWxUeXBlO1xuICBvcHRpb25MYWJlbEZvcm1hdHRlcj86IChyb3cpID0+IHN0cmluZztcbiAgbWF4PzogbnVtYmVyO1xuICBtaW4/OiBudW1iZXI7XG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBub0Zvcm1hdD86IGJvb2xlYW47XG4gIG9wdGlvbkZvcm1hdHRlcj86IChpdGVtOiBhbnkpID0+IHN0cmluZztcbiAgb3B0aW9ucz86IGFueVtdO1xuICBvcHRpb25zQXN5bmM/OiBPYnNlcnZhYmxlPGFueVtdPiB8IFByb21pc2U8YW55W10+O1xuICBvcHRpb25zSW5pdEZ1bmM/OiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgb3B0aW9uc0luaXRGdW5jMj86ICgpID0+IE9ic2VydmFibGU8YW55W10+O1xuICBvcHRpb25zS2V5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgc2VhcmNoRnVuYz86ICguLi5hcmdzKSA9PiBhbnk7XG4gIHNldEFzQ291bnRyeUNvZGUzPzogYm9vbGVhbjtcbiAgc2V0Q29udHJvbEZvcm1hdHRlZFZhbHVlPzogYm9vbGVhbjtcbiAgc2hvd1ZhbGlkYXRpb24/OiBib29sZWFuO1xuICBzaG93VmFsaWRhdGlvbkljb24/OiBib29sZWFuO1xuICB0ZW1wbGF0ZVZhbHVlPzogYW55O1xuICB0eXBlPzogSW5wdXRUeXBlO1xuICB2YWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXTtcbiAgdmFsdWU/OiBhbnk7XG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XG4gIG9wdGlvbnNGdW5jPzogKC4uLnZhbDogYW55KSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgdHJpZ2dlck9uQ2hhbmdlT25Jbml0PzogYm9vbGVhbjtcbiAgZm9ybWF0dGVyPzogKHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogYW55IH0sIGZpZWxkTmFtZToga2V5b2YgVEZvcm1Hcm91cCkgPT4gc3RyaW5nO1xuICBleHRyYT86IGFueTtcbiAgb25DaGFuZ2VGdW5jPzogKFxuICAgIHJvdzogeyBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXT86IFRGb3JtR3JvdXBbS11bJ3ZhbHVlJ10gfSxcbiAgICBjZWxsVmFsdWU/OiBhbnksXG4gICAgY29tcG9uZW50PzogQ29tcG9uZW50LFxuICApID0+IE9ic2VydmFibGU8YW55W10+IHwgYW55O1xuICBvblJlbW92ZUZ1bmM/OiAoXG4gICAgcm93OiB7IFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBURm9ybUdyb3VwW0tdWyd2YWx1ZSddIH0sXG4gICAgY2VsbD86IGFueSxcbiAgICBjb21wb25lbnQ/OiBDb21wb25lbnQsXG4gICkgPT4gYW55O1xuICBzZWxlY3RlZE9wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBzdGFja2VkPzogYm9vbGVhbjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBzaG93VmFsaWRhdGlvbk1zZz86IGJvb2xlYW47XG4gIGRvbnRGb3JtYXRBc0lucHV0PzogYm9vbGVhbjtcbiAgc2hvd1JlcXVpcmVkVGFnPzogYm9vbGVhbjtcbiAgdGFibGVGb3JtYXR0ZXI/OiAoXG4gICAgdmFsOiBhbnksXG4gICkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkIHwgUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHwgT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBpY29uPzogSWNvblR5cGU7XG4gIHZlcmJvc2U/OiBib29sZWFuO1xufVxuIl19
@@ -36,7 +36,7 @@ export class TableInputRowComponent extends FormGeneratorComponent {
36
36
  }, { allowSignalWrites: true });
37
37
  }
38
38
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableInputRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: TableInputRowComponent, isStandalone: true, selector: "tr[table-input-row]", inputs: { isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, hideAdd: { classPropertyName: "hideAdd", publicName: "hideAdd", isSignal: true, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, childrenFormSchemaMap: { classPropertyName: "childrenFormSchemaMap", publicName: "childrenFormSchemaMap", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDeleteRowFunc: "onDeleteRowFunc", onAddRowFunc: "onAddRowFunc", onActionButtonClick: "onActionButtonClick" }, usesInheritance: true, ngImport: i0, template: "@for (scheme of formSchema(); track scheme.field) {\n @switch (true) {\n @case (scheme.type == 'tel') {\n <td class=\"{{ scheme.cls }}\">\n <app-phone-number\n [form]=\"form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [noFormat]=\"scheme.noFormat\"\n [debug]=\"scheme.debug\"\n [showValidation]=\"scheme.showValidation\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [showValidationMsg]=\"true\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"\n #inputTag></app-phone-number>\n </td>\n }\n @case (scheme.type == 'autocomplete') {\n <td class=\"{{ scheme.cls }}\">\n <app-autocomplete\n [form]=\"form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [labelField]=\"scheme.labelField\"\n [noFormat]=\"scheme.noFormat\"\n [labelType]=\"scheme.labelType | toAny\"\n [showValidationMsg]=\"true\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field | toAny\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [debug]=\"scheme.debug\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [options]=\"scheme.options || optionsMap[scheme.field | toAny]\"\n [hint]=\"scheme.hint\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"\n #inputTag></app-autocomplete>\n </td>\n }\n @case (scheme.type == 'button') {\n <td class=\"{{ scheme.cls }} w-1\">\n <div class=\"d-flex\">\n <app-btn\n [text]=\"scheme.label\"\n [type]=\"\n (form() | hasFormValue: (childrenFormSchemaMap()[scheme.field].formSchemaStr | toAny) : (formValue()))\n ? 'primary'\n : 'secondary'\n \"\n onFormInvalid=\"warn\"\n [form]=\"form()\"\n [icon]=\"scheme.icon\"\n [formSchema]=\"childrenFormSchemaMap()[scheme.field].formSchema\"\n [matTooltip]=\"formValue() | formValue: childrenFormSchemaMap()[scheme.field].formSchema | toAny\"\n (mclick)=\"dModal.open()\" />\n </div>\n <modal-comp #dModal [showFooter]=\"false\" header=\"{{ scheme.label }} Form\" width=\"70%\">\n <ng-template modalBody>\n <form-generator\n [form]=\"form()\"\n [gridXXLStyle]=\"4\"\n [gridLGStyle]=\"4\"\n [showSubmitBtn]=\"false\"\n [formSchema]=\"childrenFormSchemaMap()[scheme.field].formSchema\"\n (onSubmit)=\"dModal.close()\"></form-generator>\n @if (!isShow()) {\n <div class=\"d-flex justify-content-end\">\n <app-btn (mclick)=\"dModal.close()\" text=\"Done\" />\n </div>\n }\n </ng-template>\n </modal-comp>\n </td>\n }\n @default {\n <td class=\"{{ scheme.cls }}\">\n <app-input-basic\n #formField\n [name]=\"scheme.field | toAny\"\n [form]=\"form()\"\n [dontFormatAsInput]=\"scheme.dontFormatAsInput\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [type]=\"scheme.type\"\n [valueField]=\"scheme.valueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [showValidationMsg]=\"true\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [noFormat]=\"scheme.noFormat\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [debug]=\"scheme.debug\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [options]=\"scheme.options || optionsMap[scheme.field | toAny]\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [placeholder]=\"scheme.placeholder\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"></app-input-basic>\n </td>\n }\n }\n}\n@if (!isShow()) {\n @if (onDeleteRowFunc) {\n <td class=\"w-1\">\n <app-btn group=\"delete\" [iconBtn]=\"true\" (mclick)=\"onDeleteRowFunc.emit({ btn: deleteBtn })\" #deleteBtn />\n </td>\n }\n @if (onAddRowFunc) {\n <td class=\"w-1\">\n <app-btn [iconBtn]=\"true\" group=\"add\" [disabled]=\"hideAdd()\" (mclick)=\"onAddRowFunc.emit({ btn: addBtn })\" #addBtn></app-btn>\n </td>\n }\n @for (actionBtn of actionBtns(); track actionBtn.icon) {\n <td class=\"w-1\">\n <app-btn\n [iconBtn]=\"true\"\n [group]=\"actionBtn.group\"\n [icon]=\"actionBtn.icon\"\n (mclick)=\"\n onActionButtonClick.emit({\n btn: actionBtnTemp,\n actionButton: actionBtn\n })\n \"\n #actionBtnTemp></app-btn>\n </td>\n }\n}\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "app-autocomplete,autocomplete", inputs: ["showRequiredTag", "validate", "options"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: FormValuePipe, name: "formValue" }, { kind: "pipe", type: FunctionCaller2, name: "functionCaller2" }, { kind: "pipe", type: HasFormValuePipe, name: "hasFormValue" }, { kind: "component", type: InputBasicComponent, selector: "app-input-basic,app-input", inputs: ["accept", "autocomplete", "input", "contextData", "decimalPoints", "files", "hide", "hint", "clearOnDisable", "labelLink", "lblCl", "light", "loading", "multiple", "optionsFunc", "theme", "vms", "xsmall", "setCurrentDate", "options"], outputs: ["mSelectedOptionLabel"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i2.ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["headerChange", "showHeaderChange", "loadingChange", "showFooterChange", "modalOpen", "modalClose"] }, { kind: "directive", type: i3.ModalBodyDirective, selector: "[modalBody]" }, { kind: "component", type: PhoneNumberComponent, selector: "app-phone-number", inputs: ["showLabel", "countryCode3", "config"], outputs: ["onCountrySelect"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }] }); }
39
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: TableInputRowComponent, isStandalone: true, selector: "tr[table-input-row]", inputs: { isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, hideAdd: { classPropertyName: "hideAdd", publicName: "hideAdd", isSignal: true, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, childrenFormSchemaMap: { classPropertyName: "childrenFormSchemaMap", publicName: "childrenFormSchemaMap", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onDeleteRowFunc: "onDeleteRowFunc", onAddRowFunc: "onAddRowFunc", onActionButtonClick: "onActionButtonClick" }, usesInheritance: true, ngImport: i0, template: "@for (scheme of formSchema(); track scheme._id) {\n @switch (true) {\n @case (scheme.type == 'tel') {\n <td class=\"{{ scheme.cls }}\">\n <app-phone-number\n [form]=\"form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [noFormat]=\"scheme.noFormat\"\n [debug]=\"scheme.debug\"\n [showValidation]=\"scheme.showValidation\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [showValidationMsg]=\"true\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"\n #inputTag></app-phone-number>\n </td>\n }\n @case (scheme.type == 'autocomplete') {\n <td class=\"{{ scheme.cls }}\">\n <app-autocomplete\n [form]=\"form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [labelField]=\"scheme.labelField\"\n [noFormat]=\"scheme.noFormat\"\n [labelType]=\"scheme.labelType | toAny\"\n [showValidationMsg]=\"true\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field | toAny\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [debug]=\"scheme.debug\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [options]=\"scheme.options || optionsMap[scheme.field | toAny]\"\n [hint]=\"scheme.hint\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"\n #inputTag></app-autocomplete>\n </td>\n }\n @case (scheme.type == 'button') {\n <td class=\"{{ scheme.cls }} w-1\">\n <div class=\"d-flex\">\n <app-btn\n [text]=\"scheme.label\"\n [type]=\"\n (form() | hasFormValue: (childrenFormSchemaMap()[scheme.field].formSchemaStr | toAny) : (formValue()))\n ? 'primary'\n : 'secondary'\n \"\n onFormInvalid=\"warn\"\n [form]=\"form()\"\n [icon]=\"scheme.icon\"\n [formSchema]=\"childrenFormSchemaMap()[scheme.field].formSchema\"\n [matTooltip]=\"formValue() | formValue: childrenFormSchemaMap()[scheme.field].formSchema | toAny\"\n (mclick)=\"dModal.open()\" />\n </div>\n <modal-comp #dModal [showFooter]=\"false\" header=\"{{ scheme.label }} Form\" width=\"70%\">\n <ng-template modalBody>\n <form-generator\n [form]=\"form()\"\n [gridXXLStyle]=\"4\"\n [gridLGStyle]=\"4\"\n [showSubmitBtn]=\"false\"\n [formSchema]=\"childrenFormSchemaMap()[scheme.field].formSchema\"\n (onSubmit)=\"dModal.close()\"></form-generator>\n @if (!isShow()) {\n <div class=\"d-flex justify-content-end\">\n <app-btn (mclick)=\"dModal.close()\" text=\"Done\" />\n </div>\n }\n </ng-template>\n </modal-comp>\n </td>\n }\n @default {\n <td class=\"{{ scheme.cls }}\">\n <app-input-basic\n #formField\n [name]=\"scheme.field | toAny\"\n [form]=\"form()\"\n [dontFormatAsInput]=\"scheme.dontFormatAsInput\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [type]=\"scheme.type\"\n [valueField]=\"scheme.valueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [showValidationMsg]=\"true\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [noFormat]=\"scheme.noFormat\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [debug]=\"scheme.debug\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [options]=\"scheme.options || optionsMap[scheme.field | toAny]\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [placeholder]=\"scheme.placeholder\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"></app-input-basic>\n </td>\n }\n }\n}\n@if (!isShow()) {\n @if (onDeleteRowFunc) {\n <td class=\"w-1\">\n <app-btn group=\"delete\" [iconBtn]=\"true\" (mclick)=\"onDeleteRowFunc.emit({ btn: deleteBtn })\" #deleteBtn />\n </td>\n }\n @if (onAddRowFunc) {\n <td class=\"w-1\">\n <app-btn [iconBtn]=\"true\" group=\"add\" [disabled]=\"hideAdd()\" (mclick)=\"onAddRowFunc.emit({ btn: addBtn })\" #addBtn></app-btn>\n </td>\n }\n @for (actionBtn of actionBtns(); track actionBtn.icon) {\n <td class=\"w-1\">\n <app-btn\n [iconBtn]=\"true\"\n [group]=\"actionBtn.group\"\n [icon]=\"actionBtn.icon\"\n (mclick)=\"\n onActionButtonClick.emit({\n btn: actionBtnTemp,\n actionButton: actionBtn\n })\n \"\n #actionBtnTemp></app-btn>\n </td>\n }\n}\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "app-autocomplete,autocomplete", inputs: ["showRequiredTag", "validate", "options"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: FormValuePipe, name: "formValue" }, { kind: "pipe", type: FunctionCaller2, name: "functionCaller2" }, { kind: "pipe", type: HasFormValuePipe, name: "hasFormValue" }, { kind: "component", type: InputBasicComponent, selector: "app-input-basic,app-input", inputs: ["accept", "autocomplete", "input", "contextData", "decimalPoints", "files", "hide", "hint", "clearOnDisable", "labelLink", "lblCl", "light", "loading", "multiple", "optionsFunc", "theme", "vms", "xsmall", "setCurrentDate", "options"], outputs: ["mSelectedOptionLabel"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i2.ModalComponent, selector: "modal-comp", inputs: ["header", "bodyTemplateRef", "footerTemplateRef", "showHeader", "loading", "isFullscreen", "showFooter", "width", "minWidth", "height", "maxHeight", "icon", "data", "disableClose", "hasBackdrop"], outputs: ["headerChange", "showHeaderChange", "loadingChange", "showFooterChange", "modalOpen", "modalClose"] }, { kind: "directive", type: i3.ModalBodyDirective, selector: "[modalBody]" }, { kind: "component", type: PhoneNumberComponent, selector: "app-phone-number", inputs: ["showLabel", "countryCode3", "config"], outputs: ["onCountrySelect"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }] }); }
40
40
  }
41
41
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableInputRowComponent, decorators: [{
42
42
  type: Component,
@@ -69,7 +69,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
69
69
  ToAnyPipe,
70
70
  SDKTranslatePipe,
71
71
  ValidationMessageComponent,
72
- ], template: "@for (scheme of formSchema(); track scheme.field) {\n @switch (true) {\n @case (scheme.type == 'tel') {\n <td class=\"{{ scheme.cls }}\">\n <app-phone-number\n [form]=\"form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [noFormat]=\"scheme.noFormat\"\n [debug]=\"scheme.debug\"\n [showValidation]=\"scheme.showValidation\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [showValidationMsg]=\"true\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"\n #inputTag></app-phone-number>\n </td>\n }\n @case (scheme.type == 'autocomplete') {\n <td class=\"{{ scheme.cls }}\">\n <app-autocomplete\n [form]=\"form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [labelField]=\"scheme.labelField\"\n [noFormat]=\"scheme.noFormat\"\n [labelType]=\"scheme.labelType | toAny\"\n [showValidationMsg]=\"true\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field | toAny\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [debug]=\"scheme.debug\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [options]=\"scheme.options || optionsMap[scheme.field | toAny]\"\n [hint]=\"scheme.hint\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"\n #inputTag></app-autocomplete>\n </td>\n }\n @case (scheme.type == 'button') {\n <td class=\"{{ scheme.cls }} w-1\">\n <div class=\"d-flex\">\n <app-btn\n [text]=\"scheme.label\"\n [type]=\"\n (form() | hasFormValue: (childrenFormSchemaMap()[scheme.field].formSchemaStr | toAny) : (formValue()))\n ? 'primary'\n : 'secondary'\n \"\n onFormInvalid=\"warn\"\n [form]=\"form()\"\n [icon]=\"scheme.icon\"\n [formSchema]=\"childrenFormSchemaMap()[scheme.field].formSchema\"\n [matTooltip]=\"formValue() | formValue: childrenFormSchemaMap()[scheme.field].formSchema | toAny\"\n (mclick)=\"dModal.open()\" />\n </div>\n <modal-comp #dModal [showFooter]=\"false\" header=\"{{ scheme.label }} Form\" width=\"70%\">\n <ng-template modalBody>\n <form-generator\n [form]=\"form()\"\n [gridXXLStyle]=\"4\"\n [gridLGStyle]=\"4\"\n [showSubmitBtn]=\"false\"\n [formSchema]=\"childrenFormSchemaMap()[scheme.field].formSchema\"\n (onSubmit)=\"dModal.close()\"></form-generator>\n @if (!isShow()) {\n <div class=\"d-flex justify-content-end\">\n <app-btn (mclick)=\"dModal.close()\" text=\"Done\" />\n </div>\n }\n </ng-template>\n </modal-comp>\n </td>\n }\n @default {\n <td class=\"{{ scheme.cls }}\">\n <app-input-basic\n #formField\n [name]=\"scheme.field | toAny\"\n [form]=\"form()\"\n [dontFormatAsInput]=\"scheme.dontFormatAsInput\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [type]=\"scheme.type\"\n [valueField]=\"scheme.valueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [showValidationMsg]=\"true\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [noFormat]=\"scheme.noFormat\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [debug]=\"scheme.debug\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [options]=\"scheme.options || optionsMap[scheme.field | toAny]\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [placeholder]=\"scheme.placeholder\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"></app-input-basic>\n </td>\n }\n }\n}\n@if (!isShow()) {\n @if (onDeleteRowFunc) {\n <td class=\"w-1\">\n <app-btn group=\"delete\" [iconBtn]=\"true\" (mclick)=\"onDeleteRowFunc.emit({ btn: deleteBtn })\" #deleteBtn />\n </td>\n }\n @if (onAddRowFunc) {\n <td class=\"w-1\">\n <app-btn [iconBtn]=\"true\" group=\"add\" [disabled]=\"hideAdd()\" (mclick)=\"onAddRowFunc.emit({ btn: addBtn })\" #addBtn></app-btn>\n </td>\n }\n @for (actionBtn of actionBtns(); track actionBtn.icon) {\n <td class=\"w-1\">\n <app-btn\n [iconBtn]=\"true\"\n [group]=\"actionBtn.group\"\n [icon]=\"actionBtn.icon\"\n (mclick)=\"\n onActionButtonClick.emit({\n btn: actionBtnTemp,\n actionButton: actionBtn\n })\n \"\n #actionBtnTemp></app-btn>\n </td>\n }\n}\n" }]
72
+ ], template: "@for (scheme of formSchema(); track scheme._id) {\n @switch (true) {\n @case (scheme.type == 'tel') {\n <td class=\"{{ scheme.cls }}\">\n <app-phone-number\n [form]=\"form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [noFormat]=\"scheme.noFormat\"\n [debug]=\"scheme.debug\"\n [showValidation]=\"scheme.showValidation\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [showValidationMsg]=\"true\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"\n #inputTag></app-phone-number>\n </td>\n }\n @case (scheme.type == 'autocomplete') {\n <td class=\"{{ scheme.cls }}\">\n <app-autocomplete\n [form]=\"form()\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [labelField]=\"scheme.labelField\"\n [noFormat]=\"scheme.noFormat\"\n [labelType]=\"scheme.labelType | toAny\"\n [showValidationMsg]=\"true\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [name]=\"scheme.field | toAny\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [debug]=\"scheme.debug\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [options]=\"scheme.options || optionsMap[scheme.field | toAny]\"\n [hint]=\"scheme.hint\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"\n #inputTag></app-autocomplete>\n </td>\n }\n @case (scheme.type == 'button') {\n <td class=\"{{ scheme.cls }} w-1\">\n <div class=\"d-flex\">\n <app-btn\n [text]=\"scheme.label\"\n [type]=\"\n (form() | hasFormValue: (childrenFormSchemaMap()[scheme.field].formSchemaStr | toAny) : (formValue()))\n ? 'primary'\n : 'secondary'\n \"\n onFormInvalid=\"warn\"\n [form]=\"form()\"\n [icon]=\"scheme.icon\"\n [formSchema]=\"childrenFormSchemaMap()[scheme.field].formSchema\"\n [matTooltip]=\"formValue() | formValue: childrenFormSchemaMap()[scheme.field].formSchema | toAny\"\n (mclick)=\"dModal.open()\" />\n </div>\n <modal-comp #dModal [showFooter]=\"false\" header=\"{{ scheme.label }} Form\" width=\"70%\">\n <ng-template modalBody>\n <form-generator\n [form]=\"form()\"\n [gridXXLStyle]=\"4\"\n [gridLGStyle]=\"4\"\n [showSubmitBtn]=\"false\"\n [formSchema]=\"childrenFormSchemaMap()[scheme.field].formSchema\"\n (onSubmit)=\"dModal.close()\"></form-generator>\n @if (!isShow()) {\n <div class=\"d-flex justify-content-end\">\n <app-btn (mclick)=\"dModal.close()\" text=\"Done\" />\n </div>\n }\n </ng-template>\n </modal-comp>\n </td>\n }\n @default {\n <td class=\"{{ scheme.cls }}\">\n <app-input-basic\n #formField\n [name]=\"scheme.field | toAny\"\n [form]=\"form()\"\n [dontFormatAsInput]=\"scheme.dontFormatAsInput\"\n [clearOnDisable]=\"scheme.clearOnDisable\"\n [type]=\"scheme.type\"\n [valueField]=\"scheme.valueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [showValidationMsg]=\"true\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [noFormat]=\"scheme.noFormat\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [debug]=\"scheme.debug\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n (mSelectedOptionLabel)=\"setOptionLabel($event, scheme)\"\n [options]=\"scheme.options || optionsMap[scheme.field | toAny]\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [placeholder]=\"scheme.placeholder\"\n [disabled]=\"scheme.disabled || (scheme.disabledIf | functionCaller2: formValue() : (scheme.field | toAny))\"></app-input-basic>\n </td>\n }\n }\n}\n@if (!isShow()) {\n @if (onDeleteRowFunc) {\n <td class=\"w-1\">\n <app-btn group=\"delete\" [iconBtn]=\"true\" (mclick)=\"onDeleteRowFunc.emit({ btn: deleteBtn })\" #deleteBtn />\n </td>\n }\n @if (onAddRowFunc) {\n <td class=\"w-1\">\n <app-btn [iconBtn]=\"true\" group=\"add\" [disabled]=\"hideAdd()\" (mclick)=\"onAddRowFunc.emit({ btn: addBtn })\" #addBtn></app-btn>\n </td>\n }\n @for (actionBtn of actionBtns(); track actionBtn.icon) {\n <td class=\"w-1\">\n <app-btn\n [iconBtn]=\"true\"\n [group]=\"actionBtn.group\"\n [icon]=\"actionBtn.icon\"\n (mclick)=\"\n onActionButtonClick.emit({\n btn: actionBtnTemp,\n actionButton: actionBtn\n })\n \"\n #actionBtnTemp></app-btn>\n </td>\n }\n}\n" }]
73
73
  }], propDecorators: { onDeleteRowFunc: [{
74
74
  type: Output
75
75
  }], onAddRowFunc: [{
@@ -77,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
77
77
  }], onActionButtonClick: [{
78
78
  type: Output
79
79
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC1yb3cvdGFibGUtaW5wdXQtcm93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC1yb3cvdGFibGUtaW5wdXQtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFFBQVEsRUFDUixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFlLE1BQU0sK0NBQStDLENBQUM7QUFDcEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7O0FBdUM5RCxNQUFNLE9BQU8sc0JBSVgsU0FBUSxzQkFBa0M7SUF4QzVDOztRQXlDWSxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBQzdELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFDMUQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBRzVDLENBQUM7UUFDSSxXQUFNLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFDMUIsWUFBTyxHQUFHLEtBQUssRUFBVyxDQUFDO1FBQzNCLGVBQVUsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUFFdkMsMEJBQXFCLEdBQUcsS0FBSyxDQUtuQyxFQUFFLENBQUMsQ0FBQztRQUVFLGlCQUFZLEdBQUcsTUFBTSxDQUM1QixHQUFHLEVBQUU7WUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztLQUNIOzhHQTdCWSxzQkFBc0I7a0dBQXRCLHNCQUFzQixxeEJDdkVuQyx3eUtBc0lBLDBERDlGSSxxQkFBcUIsOEhBQ3JCLFlBQVksbWdCQUVaLHNCQUFzQix5YkFDdEIsV0FBVywwQkFDWCxhQUFhLDZDQUNiLGVBQWUsbURBQ2YsZ0JBQWdCLHFEQUNoQixtQkFBbUIsNFZBR25CLGtCQUFrQiw4QkFDbEIsZ0JBQWdCLCt3QkFVaEIsb0JBQW9CLDJJQUNwQixtQkFBbUIsMEJBQ25CLFNBQVM7OzJGQU9BLHNCQUFzQjtrQkFwQ2xDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULHFCQUFxQjt3QkFDckIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixPQUFPO3dCQUNQLEtBQUs7d0JBQ0wsSUFBSTt3QkFDSixRQUFRO3dCQUNSLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQiwwQkFBMEI7cUJBQzNCOzhCQVNTLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBc3luY1BpcGUsXG4gIEpzb25QaXBlLFxuICBOZ0NsYXNzLFxuICBOZ0ZvcixcbiAgTmdJZixcbiAgTmdTd2l0Y2gsXG4gIE5nU3dpdGNoQ2FzZSxcbiAgTmdTd2l0Y2hEZWZhdWx0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgZWZmZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSxcbiAgRm9ybVZhbHVlUGlwZSxcbiAgRnVuY3Rpb25DYWxsZXIyLFxuICBIYXNGb3JtVmFsdWVQaXBlLFxuICBUb0FueVBpcGUsXG59IGZyb20gJy4uLy4uLy4uL3BpcGVzL3V0aWxpdHkucGlwZSc7XG5pbXBvcnQgeyBTREtUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgQXV0b2NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvckNvbXBvbmVudCwgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi8uLi9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRCYXNpY0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2lucHV0L3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBob25lTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxDb21wb25lbnRzIH0gZnJvbSAnLi4vLi4vbW9kYWwtY29tcG9uZW50cy9tb2RhbC5jb21wb25lbnRzJztcbmltcG9ydCB7IFBhZ2luYXRvclBpcGUgfSBmcm9tICcuLi8uLi8uLi9waXBlcy9wYWdpbmF0b3IucGlwZSc7XG5pbXBvcnQgeyBJVGFibGVJbnB1dEJ0biB9IGZyb20gJy4uL3RhYmxlLWlucHV0LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RyW3RhYmxlLWlucHV0LXJvd10nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICAgIEZvcm1HZW5lcmF0b3JDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRm9ybVZhbHVlUGlwZSxcbiAgICBGdW5jdGlvbkNhbGxlcjIsXG4gICAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIEpzb25QaXBlLFxuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNb2RhbENvbXBvbmVudHMsXG4gICAgTmdDbGFzcyxcbiAgICBOZ0ZvcixcbiAgICBOZ0lmLFxuICAgIE5nU3dpdGNoLFxuICAgIE5nU3dpdGNoQ2FzZSxcbiAgICBOZ1N3aXRjaERlZmF1bHQsXG4gICAgUGFnaW5hdG9yQ29tcG9uZW50LFxuICAgIFBhZ2luYXRvclBpcGUsXG4gICAgUGhvbmVOdW1iZXJDb21wb25lbnQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBUb0FueVBpcGUsXG4gICAgU0RLVHJhbnNsYXRlUGlwZSxcbiAgICBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWlucHV0LXJvdy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWlucHV0LXJvdy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUlucHV0Um93Q29tcG9uZW50PFxuICBURm9ybUdyb3VwIGV4dGVuZHMge1xuICAgIFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICB9ID0gYW55LFxuPiBleHRlbmRzIEZvcm1HZW5lcmF0b3JDb21wb25lbnQ8VEZvcm1Hcm91cD4ge1xuICBAT3V0cHV0KCkgb25EZWxldGVSb3dGdW5jID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJ0bj86IEJ0bkNvbXBvbmVudCB9PigpO1xuICBAT3V0cHV0KCkgb25BZGRSb3dGdW5jID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJ0bj86IEJ0bkNvbXBvbmVudCB9PigpO1xuICBAT3V0cHV0KCkgb25BY3Rpb25CdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGJ0bj86IEJ0bkNvbXBvbmVudDtcbiAgICBhY3Rpb25CdXR0b246IElUYWJsZUlucHV0QnRuO1xuICB9PigpO1xuICByZWFkb25seSBpc1Nob3cgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBoaWRlQWRkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgYWN0aW9uQnRucyA9IGlucHV0PElUYWJsZUlucHV0QnRuW10+KCk7XG5cbiAgcmVhZG9ubHkgY2hpbGRyZW5Gb3JtU2NoZW1hTWFwID0gaW5wdXQ8e1xuICAgIFtrIGluIGtleW9mIFRGb3JtR3JvdXBdPzoge1xuICAgICAgZm9ybVNjaGVtYTogSUZvcm1TY2hlbWFbXTtcbiAgICAgIGZvcm1TY2hlbWFTdHI6IHN0cmluZ1tdO1xuICAgIH07XG4gIH0+KHt9KTtcblxuICByZWFkb25seSBpc1Nob3dFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybSgpO1xuICAgICAgaWYgKHRoaXMuaXNTaG93KCkpIGZvcm0uZGlzYWJsZSgpO1xuICAgIH0sXG4gICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICApO1xufVxuIiwiQGZvciAoc2NoZW1lIG9mIGZvcm1TY2hlbWEoKTsgdHJhY2sgc2NoZW1lLmZpZWxkKSB7XG4gIEBzd2l0Y2ggKHRydWUpIHtcbiAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3RlbCcpIHtcbiAgICAgIDx0ZCBjbGFzcz1cInt7IHNjaGVtZS5jbHMgfX1cIj5cbiAgICAgICAgPGFwcC1waG9uZS1udW1iZXJcbiAgICAgICAgICBbZm9ybV09XCJmb3JtKClcIlxuICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgW3Nob3dMYWJlbF09XCJmYWxzZVwiXG4gICAgICAgICAgW25vRm9ybWF0XT1cInNjaGVtZS5ub0Zvcm1hdFwiXG4gICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1Z1wiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvblwiXG4gICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25JY29uXCJcbiAgICAgICAgICBbY291bnRyeUNvZGUzXT1cInNjaGVtZS5jb3VudHJ5Q29kZTNcIlxuICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJ0cnVlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2NoZW1lLmRpc2FibGVkIHx8IChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVwiXG4gICAgICAgICAgI2lucHV0VGFnPjwvYXBwLXBob25lLW51bWJlcj5cbiAgICAgIDwvdGQ+XG4gICAgfVxuICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgPHRkIGNsYXNzPVwie3sgc2NoZW1lLmNscyB9fVwiPlxuICAgICAgICA8YXBwLWF1dG9jb21wbGV0ZVxuICAgICAgICAgIFtmb3JtXT1cImZvcm0oKVwiXG4gICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25Nc2ddPVwidHJ1ZVwiXG4gICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkIHwgdG9BbnlcIlxuICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkIHwgdG9BbnldXCJcbiAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZCB8fCAoc2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm1WYWx1ZSgpIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KSlcIlxuICAgICAgICAgICNpbnB1dFRhZz48L2FwcC1hdXRvY29tcGxldGU+XG4gICAgICA8L3RkPlxuICAgIH1cbiAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ2J1dHRvbicpIHtcbiAgICAgIDx0ZCBjbGFzcz1cInt7IHNjaGVtZS5jbHMgfX0gdy0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgW3RleHRdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIlxuICAgICAgICAgICAgICAoZm9ybSgpIHwgaGFzRm9ybVZhbHVlOiAoY2hpbGRyZW5Gb3JtU2NoZW1hTWFwKClbc2NoZW1lLmZpZWxkXS5mb3JtU2NoZW1hU3RyIHwgdG9BbnkpIDogKGZvcm1WYWx1ZSgpKSlcbiAgICAgICAgICAgICAgICA/ICdwcmltYXJ5J1xuICAgICAgICAgICAgICAgIDogJ3NlY29uZGFyeSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBvbkZvcm1JbnZhbGlkPVwid2FyblwiXG4gICAgICAgICAgICBbZm9ybV09XCJmb3JtKClcIlxuICAgICAgICAgICAgW2ljb25dPVwic2NoZW1lLmljb25cIlxuICAgICAgICAgICAgW2Zvcm1TY2hlbWFdPVwiY2hpbGRyZW5Gb3JtU2NoZW1hTWFwKClbc2NoZW1lLmZpZWxkXS5mb3JtU2NoZW1hXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImZvcm1WYWx1ZSgpIHwgZm9ybVZhbHVlOiBjaGlsZHJlbkZvcm1TY2hlbWFNYXAoKVtzY2hlbWUuZmllbGRdLmZvcm1TY2hlbWEgfCB0b0FueVwiXG4gICAgICAgICAgICAobWNsaWNrKT1cImRNb2RhbC5vcGVuKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1vZGFsLWNvbXAgI2RNb2RhbCBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiIGhlYWRlcj1cInt7IHNjaGVtZS5sYWJlbCB9fSBGb3JtXCIgd2lkdGg9XCI3MCVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbW9kYWxCb2R5PlxuICAgICAgICAgICAgPGZvcm0tZ2VuZXJhdG9yXG4gICAgICAgICAgICAgIFtmb3JtXT1cImZvcm0oKVwiXG4gICAgICAgICAgICAgIFtncmlkWFhMU3R5bGVdPVwiNFwiXG4gICAgICAgICAgICAgIFtncmlkTEdTdHlsZV09XCI0XCJcbiAgICAgICAgICAgICAgW3Nob3dTdWJtaXRCdG5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZm9ybVNjaGVtYV09XCJjaGlsZHJlbkZvcm1TY2hlbWFNYXAoKVtzY2hlbWUuZmllbGRdLmZvcm1TY2hlbWFcIlxuICAgICAgICAgICAgICAob25TdWJtaXQpPVwiZE1vZGFsLmNsb3NlKClcIj48L2Zvcm0tZ2VuZXJhdG9yPlxuICAgICAgICAgICAgQGlmICghaXNTaG93KCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1idG4gKG1jbGljayk9XCJkTW9kYWwuY2xvc2UoKVwiIHRleHQ9XCJEb25lXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tb2RhbC1jb21wPlxuICAgICAgPC90ZD5cbiAgICB9XG4gICAgQGRlZmF1bHQge1xuICAgICAgPHRkIGNsYXNzPVwie3sgc2NoZW1lLmNscyB9fVwiPlxuICAgICAgICA8YXBwLWlucHV0LWJhc2ljXG4gICAgICAgICAgI2Zvcm1GaWVsZFxuICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZCB8IHRvQW55XCJcbiAgICAgICAgICBbZm9ybV09XCJmb3JtKClcIlxuICAgICAgICAgIFtkb250Rm9ybWF0QXNJbnB1dF09XCJzY2hlbWUuZG9udEZvcm1hdEFzSW5wdXRcIlxuICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgIFt0eXBlXT1cInNjaGVtZS50eXBlXCJcbiAgICAgICAgICBbdmFsdWVGaWVsZF09XCJzY2hlbWUudmFsdWVGaWVsZFwiXG4gICAgICAgICAgW2xhYmVsVHlwZV09XCJzY2hlbWUubGFiZWxUeXBlIHwgdG9BbnlcIlxuICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJ0cnVlXCJcbiAgICAgICAgICBbY2hlY2tlZFNpZ25hbF09XCJzY2hlbWUuY2hlY2tlZFwiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cIiEhc2NoZW1lLmFzeW5jVmFsaWRhdG9yc1wiXG4gICAgICAgICAgW25vRm9ybWF0XT1cInNjaGVtZS5ub0Zvcm1hdFwiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXJcIlxuICAgICAgICAgIChtU2VsZWN0ZWRPcHRpb25MYWJlbCk9XCJzZXRPcHRpb25MYWJlbCgkZXZlbnQsIHNjaGVtZSlcIlxuICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkIHwgdG9BbnldXCJcbiAgICAgICAgICBbZGVjaW1hbFBvaW50c109XCJzY2hlbWUuZGVjaW1hbFBvaW50c1wiXG4gICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnRcIlxuICAgICAgICAgIFttYXhdPVwic2NoZW1lLm1heFwiXG4gICAgICAgICAgW21pbl09XCJzY2hlbWUubWluXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2NoZW1lLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2NoZW1lLmRpc2FibGVkIHx8IChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVwiPjwvYXBwLWlucHV0LWJhc2ljPlxuICAgICAgPC90ZD5cbiAgICB9XG4gIH1cbn1cbkBpZiAoIWlzU2hvdygpKSB7XG4gIEBpZiAob25EZWxldGVSb3dGdW5jKSB7XG4gICAgPHRkIGNsYXNzPVwidy0xXCI+XG4gICAgICA8YXBwLWJ0biBncm91cD1cImRlbGV0ZVwiIFtpY29uQnRuXT1cInRydWVcIiAobWNsaWNrKT1cIm9uRGVsZXRlUm93RnVuYy5lbWl0KHsgYnRuOiBkZWxldGVCdG4gfSlcIiAjZGVsZXRlQnRuIC8+XG4gICAgPC90ZD5cbiAgfVxuICBAaWYgKG9uQWRkUm93RnVuYykge1xuICAgIDx0ZCBjbGFzcz1cInctMVwiPlxuICAgICAgPGFwcC1idG4gW2ljb25CdG5dPVwidHJ1ZVwiIGdyb3VwPVwiYWRkXCIgW2Rpc2FibGVkXT1cImhpZGVBZGQoKVwiIChtY2xpY2spPVwib25BZGRSb3dGdW5jLmVtaXQoeyBidG46IGFkZEJ0biB9KVwiICNhZGRCdG4+PC9hcHAtYnRuPlxuICAgIDwvdGQ+XG4gIH1cbiAgQGZvciAoYWN0aW9uQnRuIG9mIGFjdGlvbkJ0bnMoKTsgdHJhY2sgYWN0aW9uQnRuLmljb24pIHtcbiAgICA8dGQgY2xhc3M9XCJ3LTFcIj5cbiAgICAgIDxhcHAtYnRuXG4gICAgICAgIFtpY29uQnRuXT1cInRydWVcIlxuICAgICAgICBbZ3JvdXBdPVwiYWN0aW9uQnRuLmdyb3VwXCJcbiAgICAgICAgW2ljb25dPVwiYWN0aW9uQnRuLmljb25cIlxuICAgICAgICAobWNsaWNrKT1cIlxuICAgICAgICAgIG9uQWN0aW9uQnV0dG9uQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBidG46IGFjdGlvbkJ0blRlbXAsXG4gICAgICAgICAgICBhY3Rpb25CdXR0b246IGFjdGlvbkJ0blxuICAgICAgICAgIH0pXG4gICAgICAgIFwiXG4gICAgICAgICNhY3Rpb25CdG5UZW1wPjwvYXBwLWJ0bj5cbiAgICA8L3RkPlxuICB9XG59XG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC1yb3cvdGFibGUtaW5wdXQtcm93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC1yb3cvdGFibGUtaW5wdXQtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxFQUNKLFFBQVEsRUFDUixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBWSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBbUIsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFlLE1BQU0sK0NBQStDLENBQUM7QUFDcEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDekcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7O0FBdUM5RCxNQUFNLE9BQU8sc0JBSVgsU0FBUSxzQkFBa0M7SUF4QzVDOztRQXlDWSxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO1FBQzdELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFDMUQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBRzVDLENBQUM7UUFDSSxXQUFNLEdBQUcsS0FBSyxFQUFXLENBQUM7UUFDMUIsWUFBTyxHQUFHLEtBQUssRUFBVyxDQUFDO1FBQzNCLGVBQVUsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUFFdkMsMEJBQXFCLEdBQUcsS0FBSyxDQUtuQyxFQUFFLENBQUMsQ0FBQztRQUVFLGlCQUFZLEdBQUcsTUFBTSxDQUM1QixHQUFHLEVBQUU7WUFDSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDNUIsQ0FBQztLQUNIOzhHQTdCWSxzQkFBc0I7a0dBQXRCLHNCQUFzQixxeEJDdkVuQyxzeUtBc0lBLDBERDlGSSxxQkFBcUIsOEhBQ3JCLFlBQVksbWdCQUVaLHNCQUFzQix5YkFDdEIsV0FBVywwQkFDWCxhQUFhLDZDQUNiLGVBQWUsbURBQ2YsZ0JBQWdCLHFEQUNoQixtQkFBbUIsNFZBR25CLGtCQUFrQiw4QkFDbEIsZ0JBQWdCLCt3QkFVaEIsb0JBQW9CLDJJQUNwQixtQkFBbUIsMEJBQ25CLFNBQVM7OzJGQU9BLHNCQUFzQjtrQkFwQ2xDLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULHFCQUFxQjt3QkFDckIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixPQUFPO3dCQUNQLEtBQUs7d0JBQ0wsSUFBSTt3QkFDSixRQUFRO3dCQUNSLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQiwwQkFBMEI7cUJBQzNCOzhCQVNTLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBc3luY1BpcGUsXG4gIEpzb25QaXBlLFxuICBOZ0NsYXNzLFxuICBOZ0ZvcixcbiAgTmdJZixcbiAgTmdTd2l0Y2gsXG4gIE5nU3dpdGNoQ2FzZSxcbiAgTmdTd2l0Y2hEZWZhdWx0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gIEZvcm1WYWx1ZVBpcGUsXG4gIEZ1bmN0aW9uQ2FsbGVyMixcbiAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgVG9BbnlQaXBlLFxufSBmcm9tICcuLi8uLi8uLi9waXBlcy91dGlsaXR5LnBpcGUnO1xuaW1wb3J0IHsgU0RLVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJ0bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2J0bi9idG4uY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JDb21wb25lbnQsIElGb3JtU2NoZW1hIH0gZnJvbSAnLi4vLi4vZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IElucHV0QmFzaWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC9pbnB1dC1iYXNpYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC92YWxpZGF0aW9uLW1lc3NhZ2UvdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9sb2FkZXIvbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaG9uZU51bWJlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Bob25lLW51bWJlci9waG9uZS1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50cyB9IGZyb20gJy4uLy4uL21vZGFsLWNvbXBvbmVudHMvbW9kYWwuY29tcG9uZW50cyc7XG5pbXBvcnQgeyBQYWdpbmF0b3JQaXBlIH0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvcGFnaW5hdG9yLnBpcGUnO1xuaW1wb3J0IHsgSVRhYmxlSW5wdXRCdG4gfSBmcm9tICcuLi90YWJsZS1pbnB1dC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0clt0YWJsZS1pbnB1dC1yb3ddJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQnRuQ29tcG9uZW50LFxuICAgIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSxcbiAgICBGb3JtR2VuZXJhdG9yQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZvcm1WYWx1ZVBpcGUsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gICAgSW5wdXRCYXNpY0NvbXBvbmVudCxcbiAgICBKc29uUGlwZSxcbiAgICBMb2FkZXJDb21wb25lbnQsXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTW9kYWxDb21wb25lbnRzLFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3IsXG4gICAgTmdJZixcbiAgICBOZ1N3aXRjaCxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JQaXBlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVG9BbnlQaXBlLFxuICAgIFNES1RyYW5zbGF0ZVBpcGUsXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1pbnB1dC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1pbnB1dC1yb3cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVJbnB1dFJvd0NvbXBvbmVudDxcbiAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgfSA9IGFueSxcbj4gZXh0ZW5kcyBGb3JtR2VuZXJhdG9yQ29tcG9uZW50PFRGb3JtR3JvdXA+IHtcbiAgQE91dHB1dCgpIG9uRGVsZXRlUm93RnVuYyA9IG5ldyBFdmVudEVtaXR0ZXI8eyBidG4/OiBCdG5Db21wb25lbnQgfT4oKTtcbiAgQE91dHB1dCgpIG9uQWRkUm93RnVuYyA9IG5ldyBFdmVudEVtaXR0ZXI8eyBidG4/OiBCdG5Db21wb25lbnQgfT4oKTtcbiAgQE91dHB1dCgpIG9uQWN0aW9uQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBidG4/OiBCdG5Db21wb25lbnQ7XG4gICAgYWN0aW9uQnV0dG9uOiBJVGFibGVJbnB1dEJ0bjtcbiAgfT4oKTtcbiAgcmVhZG9ubHkgaXNTaG93ID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaGlkZUFkZCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGFjdGlvbkJ0bnMgPSBpbnB1dDxJVGFibGVJbnB1dEJ0bltdPigpOyBcblxuICByZWFkb25seSBjaGlsZHJlbkZvcm1TY2hlbWFNYXAgPSBpbnB1dDx7XG4gICAgW2sgaW4ga2V5b2YgVEZvcm1Hcm91cF0/OiB7XG4gICAgICBmb3JtU2NoZW1hOiBJRm9ybVNjaGVtYVtdO1xuICAgICAgZm9ybVNjaGVtYVN0cjogc3RyaW5nW107XG4gICAgfTtcbiAgfT4oe30pO1xuXG4gIHJlYWRvbmx5IGlzU2hvd0VmZmVjdCA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtKCk7XG4gICAgICBpZiAodGhpcy5pc1Nob3coKSkgZm9ybS5kaXNhYmxlKCk7XG4gICAgfSxcbiAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICk7XG59XG4iLCJAZm9yIChzY2hlbWUgb2YgZm9ybVNjaGVtYSgpOyB0cmFjayBzY2hlbWUuX2lkKSB7XG4gIEBzd2l0Y2ggKHRydWUpIHtcbiAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3RlbCcpIHtcbiAgICAgIDx0ZCBjbGFzcz1cInt7IHNjaGVtZS5jbHMgfX1cIj5cbiAgICAgICAgPGFwcC1waG9uZS1udW1iZXJcbiAgICAgICAgICBbZm9ybV09XCJmb3JtKClcIlxuICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgW3Nob3dMYWJlbF09XCJmYWxzZVwiXG4gICAgICAgICAgW25vRm9ybWF0XT1cInNjaGVtZS5ub0Zvcm1hdFwiXG4gICAgICAgICAgW2RlYnVnXT1cInNjaGVtZS5kZWJ1Z1wiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvblwiXG4gICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25JY29uXCJcbiAgICAgICAgICBbY291bnRyeUNvZGUzXT1cInNjaGVtZS5jb3VudHJ5Q29kZTNcIlxuICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJ0cnVlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2NoZW1lLmRpc2FibGVkIHx8IChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVwiXG4gICAgICAgICAgI2lucHV0VGFnPjwvYXBwLXBob25lLW51bWJlcj5cbiAgICAgIDwvdGQ+XG4gICAgfVxuICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgPHRkIGNsYXNzPVwie3sgc2NoZW1lLmNscyB9fVwiPlxuICAgICAgICA8YXBwLWF1dG9jb21wbGV0ZVxuICAgICAgICAgIFtmb3JtXT1cImZvcm0oKVwiXG4gICAgICAgICAgW2NsZWFyT25EaXNhYmxlXT1cInNjaGVtZS5jbGVhck9uRGlzYWJsZVwiXG4gICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgIFtub0Zvcm1hdF09XCJzY2hlbWUubm9Gb3JtYXRcIlxuICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25Nc2ddPVwidHJ1ZVwiXG4gICAgICAgICAgKG1TZWxlY3RlZE9wdGlvbkxhYmVsKT1cInNldE9wdGlvbkxhYmVsKCRldmVudCwgc2NoZW1lKVwiXG4gICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkIHwgdG9BbnlcIlxuICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkIHwgdG9BbnldXCJcbiAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZCB8fCAoc2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IGZvcm1WYWx1ZSgpIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KSlcIlxuICAgICAgICAgICNpbnB1dFRhZz48L2FwcC1hdXRvY29tcGxldGU+XG4gICAgICA8L3RkPlxuICAgIH1cbiAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ2J1dHRvbicpIHtcbiAgICAgIDx0ZCBjbGFzcz1cInt7IHNjaGVtZS5jbHMgfX0gdy0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgW3RleHRdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIlxuICAgICAgICAgICAgICAoZm9ybSgpIHwgaGFzRm9ybVZhbHVlOiAoY2hpbGRyZW5Gb3JtU2NoZW1hTWFwKClbc2NoZW1lLmZpZWxkXS5mb3JtU2NoZW1hU3RyIHwgdG9BbnkpIDogKGZvcm1WYWx1ZSgpKSlcbiAgICAgICAgICAgICAgICA/ICdwcmltYXJ5J1xuICAgICAgICAgICAgICAgIDogJ3NlY29uZGFyeSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBvbkZvcm1JbnZhbGlkPVwid2FyblwiXG4gICAgICAgICAgICBbZm9ybV09XCJmb3JtKClcIlxuICAgICAgICAgICAgW2ljb25dPVwic2NoZW1lLmljb25cIlxuICAgICAgICAgICAgW2Zvcm1TY2hlbWFdPVwiY2hpbGRyZW5Gb3JtU2NoZW1hTWFwKClbc2NoZW1lLmZpZWxkXS5mb3JtU2NoZW1hXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImZvcm1WYWx1ZSgpIHwgZm9ybVZhbHVlOiBjaGlsZHJlbkZvcm1TY2hlbWFNYXAoKVtzY2hlbWUuZmllbGRdLmZvcm1TY2hlbWEgfCB0b0FueVwiXG4gICAgICAgICAgICAobWNsaWNrKT1cImRNb2RhbC5vcGVuKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1vZGFsLWNvbXAgI2RNb2RhbCBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiIGhlYWRlcj1cInt7IHNjaGVtZS5sYWJlbCB9fSBGb3JtXCIgd2lkdGg9XCI3MCVcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbW9kYWxCb2R5PlxuICAgICAgICAgICAgPGZvcm0tZ2VuZXJhdG9yXG4gICAgICAgICAgICAgIFtmb3JtXT1cImZvcm0oKVwiXG4gICAgICAgICAgICAgIFtncmlkWFhMU3R5bGVdPVwiNFwiXG4gICAgICAgICAgICAgIFtncmlkTEdTdHlsZV09XCI0XCJcbiAgICAgICAgICAgICAgW3Nob3dTdWJtaXRCdG5dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZm9ybVNjaGVtYV09XCJjaGlsZHJlbkZvcm1TY2hlbWFNYXAoKVtzY2hlbWUuZmllbGRdLmZvcm1TY2hlbWFcIlxuICAgICAgICAgICAgICAob25TdWJtaXQpPVwiZE1vZGFsLmNsb3NlKClcIj48L2Zvcm0tZ2VuZXJhdG9yPlxuICAgICAgICAgICAgQGlmICghaXNTaG93KCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1idG4gKG1jbGljayk9XCJkTW9kYWwuY2xvc2UoKVwiIHRleHQ9XCJEb25lXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tb2RhbC1jb21wPlxuICAgICAgPC90ZD5cbiAgICB9XG4gICAgQGRlZmF1bHQge1xuICAgICAgPHRkIGNsYXNzPVwie3sgc2NoZW1lLmNscyB9fVwiPlxuICAgICAgICA8YXBwLWlucHV0LWJhc2ljXG4gICAgICAgICAgI2Zvcm1GaWVsZFxuICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZCB8IHRvQW55XCJcbiAgICAgICAgICBbZm9ybV09XCJmb3JtKClcIlxuICAgICAgICAgIFtkb250Rm9ybWF0QXNJbnB1dF09XCJzY2hlbWUuZG9udEZvcm1hdEFzSW5wdXRcIlxuICAgICAgICAgIFtjbGVhck9uRGlzYWJsZV09XCJzY2hlbWUuY2xlYXJPbkRpc2FibGVcIlxuICAgICAgICAgIFt0eXBlXT1cInNjaGVtZS50eXBlXCJcbiAgICAgICAgICBbdmFsdWVGaWVsZF09XCJzY2hlbWUudmFsdWVGaWVsZFwiXG4gICAgICAgICAgW2xhYmVsVHlwZV09XCJzY2hlbWUubGFiZWxUeXBlIHwgdG9BbnlcIlxuICAgICAgICAgIFtzaG93VmFsaWRhdGlvbk1zZ109XCJ0cnVlXCJcbiAgICAgICAgICBbY2hlY2tlZFNpZ25hbF09XCJzY2hlbWUuY2hlY2tlZFwiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cIiEhc2NoZW1lLmFzeW5jVmFsaWRhdG9yc1wiXG4gICAgICAgICAgW25vRm9ybWF0XT1cInNjaGVtZS5ub0Zvcm1hdFwiXG4gICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgIFtkZWJ1Z109XCJzY2hlbWUuZGVidWdcIlxuICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXJcIlxuICAgICAgICAgIChtU2VsZWN0ZWRPcHRpb25MYWJlbCk9XCJzZXRPcHRpb25MYWJlbCgkZXZlbnQsIHNjaGVtZSlcIlxuICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zIHx8IG9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkIHwgdG9BbnldXCJcbiAgICAgICAgICBbZGVjaW1hbFBvaW50c109XCJzY2hlbWUuZGVjaW1hbFBvaW50c1wiXG4gICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnRcIlxuICAgICAgICAgIFttYXhdPVwic2NoZW1lLm1heFwiXG4gICAgICAgICAgW21pbl09XCJzY2hlbWUubWluXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2NoZW1lLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2NoZW1lLmRpc2FibGVkIHx8IChzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogZm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpKVwiPjwvYXBwLWlucHV0LWJhc2ljPlxuICAgICAgPC90ZD5cbiAgICB9XG4gIH1cbn1cbkBpZiAoIWlzU2hvdygpKSB7XG4gIEBpZiAob25EZWxldGVSb3dGdW5jKSB7XG4gICAgPHRkIGNsYXNzPVwidy0xXCI+XG4gICAgICA8YXBwLWJ0biBncm91cD1cImRlbGV0ZVwiIFtpY29uQnRuXT1cInRydWVcIiAobWNsaWNrKT1cIm9uRGVsZXRlUm93RnVuYy5lbWl0KHsgYnRuOiBkZWxldGVCdG4gfSlcIiAjZGVsZXRlQnRuIC8+XG4gICAgPC90ZD5cbiAgfVxuICBAaWYgKG9uQWRkUm93RnVuYykge1xuICAgIDx0ZCBjbGFzcz1cInctMVwiPlxuICAgICAgPGFwcC1idG4gW2ljb25CdG5dPVwidHJ1ZVwiIGdyb3VwPVwiYWRkXCIgW2Rpc2FibGVkXT1cImhpZGVBZGQoKVwiIChtY2xpY2spPVwib25BZGRSb3dGdW5jLmVtaXQoeyBidG46IGFkZEJ0biB9KVwiICNhZGRCdG4+PC9hcHAtYnRuPlxuICAgIDwvdGQ+XG4gIH1cbiAgQGZvciAoYWN0aW9uQnRuIG9mIGFjdGlvbkJ0bnMoKTsgdHJhY2sgYWN0aW9uQnRuLmljb24pIHtcbiAgICA8dGQgY2xhc3M9XCJ3LTFcIj5cbiAgICAgIDxhcHAtYnRuXG4gICAgICAgIFtpY29uQnRuXT1cInRydWVcIlxuICAgICAgICBbZ3JvdXBdPVwiYWN0aW9uQnRuLmdyb3VwXCJcbiAgICAgICAgW2ljb25dPVwiYWN0aW9uQnRuLmljb25cIlxuICAgICAgICAobWNsaWNrKT1cIlxuICAgICAgICAgIG9uQWN0aW9uQnV0dG9uQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICBidG46IGFjdGlvbkJ0blRlbXAsXG4gICAgICAgICAgICBhY3Rpb25CdXR0b246IGFjdGlvbkJ0blxuICAgICAgICAgIH0pXG4gICAgICAgIFwiXG4gICAgICAgICNhY3Rpb25CdG5UZW1wPjwvYXBwLWJ0bj5cbiAgICA8L3RkPlxuICB9XG59XG4iXX0=
@@ -15,10 +15,11 @@ import { MatTooltipModule } from '@angular/material/tooltip';
15
15
  import { MatExpansionModule } from '@angular/material/expansion';
16
16
  import { MatTabsModule } from '@angular/material/tabs';
17
17
  import { TableInputRowComponent } from './table-input-row/table-input-row.component';
18
+ import { map, switchMap } from 'rxjs';
18
19
  import { UtilityService } from '../../../Services/utility.service';
19
20
  import { SDKTranslatePipe } from '../../pipes/translate.pipe';
20
21
  import { PaginatorPipe } from '../../pipes/paginator.pipe';
21
- import { toSignal } from '@angular/core/rxjs-interop';
22
+ import { toObservable, toSignal } from '@angular/core/rxjs-interop';
22
23
  import * as i0 from "@angular/core";
23
24
  /**
24
25
  * Table Input Component
@@ -26,6 +27,7 @@ import * as i0 from "@angular/core";
26
27
  export class TableInputComponent extends FormGeneratorComponent {
27
28
  constructor() {
28
29
  super(...arguments);
30
+ this.formArray = input();
29
31
  this.filterContainerClass = input();
30
32
  this.border = input(true);
31
33
  this.isShow = input();
@@ -38,11 +40,15 @@ export class TableInputComponent extends FormGeneratorComponent {
38
40
  this.usePaginator = signal(true);
39
41
  this.childrenFormSchemaMap = {};
40
42
  this.filterFormValueSignal = toSignal(this.filterForm.valueChanges);
41
- this.formArrayLengthSignal = signal(undefined);
43
+ this.formArrayLengthSignal = toSignal(toObservable(this.formArray).pipe(switchMap((form) => form?.valueChanges.pipe(map(() => form?.length)))));
42
44
  this.filteredFormArray = computed(() => {
43
45
  this.formArrayLengthSignal();
44
- const formArray = this.formArray, filterFormValue = this.filterFormValueSignal();
45
- const formGroups = formArray?.controls?.map((c, index) => ({ index, form: c }));
46
+ const formArray = this.formArray(), filterFormValue = this.filterFormValueSignal();
47
+ const formGroups = formArray?.controls?.map((c, index) => ({
48
+ index,
49
+ form: c,
50
+ id: this.utilityService.generateUUID(),
51
+ }));
46
52
  const filterObject = this.filterFormArrayGroupPipe.queryMapper(filterFormValue);
47
53
  return filterObject
48
54
  ? formGroups.filter(({ form }) => this.filterFormArrayGroupPipe.filterFunc(filterObject)(form))
@@ -50,7 +56,6 @@ export class TableInputComponent extends FormGeneratorComponent {
50
56
  });
51
57
  this.paginatedAndFilteredFormArray = computed(() => {
52
58
  const formArray = this.filteredFormArray(), pageState = this.pageState();
53
- // debugger;
54
59
  return this.usePaginator()
55
60
  ? this.paginatorPipe.transform(formArray, pageState?.pageSize || this.pageSize(), pageState?.pageIndex || 0)
56
61
  : formArray;
@@ -80,14 +85,6 @@ export class TableInputComponent extends FormGeneratorComponent {
80
85
  console.log(this.singleFormStructure);
81
86
  };
82
87
  }
83
- // @Input() pageType
84
- set _formArray(v) {
85
- this.formArray = v;
86
- if (v)
87
- v.valueChanges.subscribe((r) => {
88
- this.formArrayLengthSignal.set(v?.length);
89
- });
90
- }
91
88
  set _pageSize(v) {
92
89
  this.pageSize.set(v);
93
90
  }
@@ -174,7 +171,7 @@ export class TableInputComponent extends FormGeneratorComponent {
174
171
  this.singleFormStructure?.controls[scheme.field]?.hasValidator(Validators.required);
175
172
  }
176
173
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
177
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { _formArray: { classPropertyName: "_formArray", publicName: "formArray", isSignal: false, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
174
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: TableInputComponent, isStandalone: true, selector: "table-input", inputs: { formArray: { classPropertyName: "formArray", publicName: "formArray", isSignal: true, isRequired: false, transformFunction: null }, filterContainerClass: { classPropertyName: "filterContainerClass", publicName: "filterContainerClass", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, isShow: { classPropertyName: "isShow", publicName: "isShow", isSignal: true, isRequired: false, transformFunction: null }, _pageSize: { classPropertyName: "_pageSize", publicName: "pageSize", isSignal: false, isRequired: false, transformFunction: null }, actionBtns: { classPropertyName: "actionBtns", publicName: "actionBtns", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: true, transformFunction: null }, singleFormStructure: { classPropertyName: "singleFormStructure", publicName: "singleFormStructure", isSignal: false, isRequired: true, transformFunction: null }, deleteRowFunc: { classPropertyName: "deleteRowFunc", publicName: "deleteRowFunc", isSignal: false, isRequired: false, transformFunction: null }, addRowFunc: { classPropertyName: "addRowFunc", publicName: "addRowFunc", isSignal: false, isRequired: false, transformFunction: null }, _usePaginator: { classPropertyName: "_usePaginator", publicName: "usePaginator", isSignal: false, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [FilterFormArrayGroupPipe, PaginatorPipe], viewQueries: [{ propertyName: "paginatorComponent", first: true, predicate: PaginatorComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "verbose", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: FormGeneratorComponent, selector: "form-generator", inputs: ["keyField", "presetValueForSingleOption", "isCreate", "submitOnEnterKey", "submitFunc", "submitBtnText", "submitBtnTemplate", "submitSuccessText", "showSubmitBtn", "gridStyle", "gridMDStyle", "gridLGStyle", "gridXXLStyle", "formGridClass", "useLoader", "loading", "form", "formSchema", "formSchemaNoForm", "isShow"], outputs: ["onSubmit", "mchange", "saved", "formChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: PaginatorComponent, selector: "paginator", inputs: ["pageSize", "pageIndex", "arrayLength", "resetIndexFunc", "pageSizeOptions"], outputs: ["pageChanged"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: TableInputRowComponent, selector: "tr[table-input-row]", inputs: ["isShow", "hideAdd", "actionBtns", "childrenFormSchemaMap"], outputs: ["onDeleteRowFunc", "onAddRowFunc", "onActionButtonClick"] }, { kind: "pipe", type: SDKTranslatePipe, name: "appTranslate" }] }); }
178
175
  }
179
176
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TableInputComponent, decorators: [{
180
177
  type: Component,
@@ -210,11 +207,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
210
207
  SDKTranslatePipe,
211
208
  FilterFormArrayGroupPipe,
212
209
  ValidationMessageComponent,
213
- ], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
214
- }], propDecorators: { _formArray: [{
215
- type: Input,
216
- args: ['formArray']
217
- }], _pageSize: [{
210
+ ], providers: [FilterFormArrayGroupPipe, PaginatorPipe], template: "<div class=\"table-input\">\n @if (filterForms()?.length) {\n <div class=\"mb-3 {{ filterContainerClass() }}\">\n <div class=\"d-flex\">\n <app-btn\n text=\"{{ filterSection.hidden ? 'Show Filter' : 'Hide Filter' }}\"\n [icon]=\"filterSection.hidden ? 'search' : 'close'\"\n (mclick)=\"filterSection.hidden = !filterSection.hidden\" />\n </div>\n <div class=\"border p-3 mt-3 rounded-10\" #filterSection [hidden]=\"true\">\n <form-generator [form]=\"filterForm\" [formSchema]=\"filterForms()\" [gridLGStyle]=\"3\" [showSubmitBtn]=\"false\" (mchange)=\"resetPaginator()\" />\n <div class=\"d-flex justify-content-end\">\n <app-btn type=\"danger-outline\" text=\"Clear\" (mclick)=\"filterForm.reset()\" />\n </div>\n </div>\n </div>\n }\n\n <div class=\"bg-white\" [ngClass]=\"{ 'border rounded-10': border() }\">\n <div class=\" \">\n <table class=\" {{ tableClass() }} \" [ngClass]=\"{ 'is-show-form': isShow() }\">\n <thead (click)=\"utilityService.logForm(filteredFormArray())\">\n <tr class=\"text-center\">\n @for (item of formSchema(); track item.label) {\n <th class=\"{{ item.cls }}\">\n {{ item.label | appTranslate | async }}\n {{ item.isRequired ? '*' : '' }}\n </th>\n }\n @if (!isShow()) {\n <th></th>\n <th></th>\n @for (actionBtn of actionBtns(); track actionBtn) {\n <th></th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (subForm of paginatedAndFilteredFormArray(); track subForm.id; let i = $index) {\n <tr\n table-input-row\n (onAddRowFunc)=\"addRowClicked(subForm.index)\"\n [isShow]=\"isShow()\"\n [form]=\"subForm.form\"\n [actionBtns]=\"actionBtns()\"\n [formSchema]=\"formSchema()\"\n [childrenFormSchemaMap]=\"childrenFormSchemaMap\"\n (onDeleteRowFunc)=\"\n deleteRowClicked(subForm.index, subForm.form, {\n btn: $event?.btn\n })\n \"\n (onActionButtonClick)=\"handleActionButtonClick(subForm.index, subForm.form, $event)\"></tr>\n } @empty {\n <tr>\n <td class=\"text-center\" [colSpan]=\"formSchema()?.length\">\n {{ 'There are no items' | appTranslate | async }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"\" [hidden]=\"!usePaginator() || !filteredFormArrayLength() || filteredFormArrayLength() < pageSize()\">\n <paginator\n #paginatorTag\n [arrayLength]=\"filteredFormArrayLength()\"\n (pageChanged)=\"pageChanged($event)\"\n [pageSize]=\"pageSize()\"\n [resetIndexFunc]=\"filterForm.valueChanges\" />\n </div>\n </div>\n</div>\n", styles: ["tr{vertical-align:top}:host ::ng-deep .text-center input{text-align:center}\n"] }]
211
+ }], propDecorators: { _pageSize: [{
218
212
  type: Input,
219
213
  args: ['pageSize']
220
214
  }], _formSchema: [{
@@ -234,4 +228,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
234
228
  type: ViewChild,
235
229
  args: [PaginatorComponent]
236
230
  }] } });
237
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLWlucHV0L3RhYmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFD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QkF4Qy9CLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUDt3QkFDUCxTQUFTO3dCQUNULHFCQUFxQjt3QkFDckIsWUFBWTt3QkFDWix3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLE9BQU87d0JBQ1AsS0FBSzt3QkFDTCxJQUFJO3dCQUNKLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixvQkFBb0I7d0JBQ3BCLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0QixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsd0JBQXdCO3dCQUN4QiwwQkFBMEI7cUJBQzNCLGFBR1UsQ0FBQyx3QkFBd0IsRUFBRSxhQUFhLENBQUM7OEJBWTVCLFVBQVU7c0JBQWpDLEtBQUs7dUJBQUMsV0FBVztnQkFVSyxTQUFTO3NCQUEvQixLQUFLO3VCQUFDLFVBQVU7Z0JBTTRDLFdBQVc7c0JBQXZFLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7Z0JBTzlDLG1CQUFtQjtzQkFEbEIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBS2hCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBUUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDcUIsYUFBYTtzQkFBdkMsS0FBSzt1QkFBQyxjQUFjO2dCQXVCVSxrQkFBa0I7c0JBQWhELFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQXJyYXksXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJRm9ybVNjaGVtYSB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLXNjaGVtYS5tb2RlbCc7XG5pbXBvcnQge1xuICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gIEZvcm1WYWx1ZVBpcGUsXG4gIEZ1bmN0aW9uQ2FsbGVyMixcbiAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgVG9BbnlQaXBlLFxufSBmcm9tICcuLi8uLi9waXBlcy91dGlsaXR5LnBpcGUnO1xuXG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBBc3luY1BpcGUsXG4gIEpzb25QaXBlLFxuICBOZ0NsYXNzLFxuICBOZ0ZvcixcbiAgTmdJZixcbiAgTmdTd2l0Y2gsXG4gIE5nU3dpdGNoQ2FzZSxcbiAgTmdTd2l0Y2hEZWZhdWx0LFxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBUYWJsZUlucHV0Um93Q29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1pbnB1dC1yb3cvdGFibGUtaW5wdXQtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZpbHRlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUJ0biB9IGZyb20gJy4uL2J0bi9idG4ubW9kZWwnO1xuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9TZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU0RLVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFBhZ2luYXRvclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9wYWdpbmF0b3IucGlwZSc7XG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuLyoqXG4gKiBUYWJsZSBJbnB1dCBDb21wb25lbnRcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFibGUtaW5wdXQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQXN5bmNQaXBlLFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICAgIEZvcm1HZW5lcmF0b3JDb21wb25lbnQsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgRm9ybVZhbHVlUGlwZSxcbiAgICBGdW5jdGlvbkNhbGxlcjIsXG4gICAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIEpzb25QaXBlLFxuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgTWF0VGFic01vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1vZGFsQ29tcG9uZW50LFxuICAgIE5nQ2xhc3MsXG4gICAgTmdGb3IsXG4gICAgTmdJZixcbiAgICBOZ1N3aXRjaCxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIFBhZ2luYXRvckNvbXBvbmVudCxcbiAgICBQYWdpbmF0b3JQaXBlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVGFibGVJbnB1dFJvd0NvbXBvbmVudCxcbiAgICBUb0FueVBpcGUsXG4gICAgU0RLVHJhbnNsYXRlUGlwZSxcbiAgICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gICAgVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0ZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSwgUGFnaW5hdG9yUGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlSW5wdXRDb21wb25lbnQ8XG4gICAgVEZvcm1Hcm91cCBleHRlbmRzIHtcbiAgICAgIFtLIGluIGtleW9mIFRGb3JtR3JvdXBdOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICAgIH0gPSBhbnksXG4gID5cbiAgZXh0ZW5kcyBGb3JtR2VuZXJhdG9yQ29tcG9uZW50PFRGb3JtR3JvdXA+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIGZvcm1BcnJheTogRm9ybUFycmF5PEZvcm1Hcm91cDxURm9ybUdyb3VwPj47XG4gIC8vIEBJbnB1dCgpIHBhZ2VUeXBlXG4gIEBJbnB1dCgnZm9ybUFycmF5Jykgc2V0IF9mb3JtQXJyYXkodjogRm9ybUFycmF5PEZvcm1Hcm91cDxURm9ybUdyb3VwPj4pIHtcbiAgICB0aGlzLmZvcm1BcnJheSA9IHY7XG4gICAgaWYgKHYpXG4gICAgICB2LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgdGhpcy5mb3JtQXJyYXlMZW5ndGhTaWduYWwuc2V0KHY/Lmxlbmd0aCk7XG4gICAgICB9KTtcbiAgfVxuICByZWFkb25seSBmaWx0ZXJDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYm9yZGVyID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGlzU2hvdyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIEBJbnB1dCgncGFnZVNpemUnKSBzZXQgX3BhZ2VTaXplKHY6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gc2lnbmFsPG51bWJlcj4oMTApO1xuICByZWFkb25seSBwYWdlU3RhdGUgPSBzaWduYWw8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PihudWxsKTtcbiAgcmVhZG9ubHkgYWN0aW9uQnRucyA9IGlucHV0PElUYWJsZUlucHV0QnRuW10+KCk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIG92ZXJyaWRlIHNldCBfZm9ybVNjaGVtYShcbiAgICB2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdLFxuICApIHtcbiAgICB0aGlzLnByZUZvcm1hdEZvcm1TY2hlbWEodik7XG4gICAgc3VwZXIuX2Zvcm1TY2hlbWEgPSB2O1xuICB9XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNpbmdsZUZvcm1TdHJ1Y3R1cmU6IEZvcm1Hcm91cDxURm9ybUdyb3VwPjtcbiAgLyoqXG4gICAqIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRoZSBkZWxldGUgYnV0dG9uIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIGRlbGV0ZVJvd0Z1bmM6IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRhdGE/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD5bJ3ZhbHVlJ10sXG4gICAgY29uZmlnPzogeyBidG46IEJ0bkNvbXBvbmVudCB9LFxuICApID0+IGFueTtcbiAgLyoqXG4gICAqIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRoZSBhZGQgYnV0dG9uIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIGFkZFJvd0Z1bmM6IChpbmRleDogbnVtYmVyLCBkYXRhPzogRm9ybUdyb3VwPFRGb3JtR3JvdXA+Wyd2YWx1ZSddKSA9PiBhbnk7XG4gIEBJbnB1dCgndXNlUGFnaW5hdG9yJykgc2V0IF91c2VQYWdpbmF0b3IodjogYm9vbGVhbikge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLnVzZVBhZ2luYXRvci5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnBhZ2VTaXplLnVwZGF0ZSgocGFnZVNpemUpID0+IHBhZ2VTaXplIHx8IDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VQYWdpbmF0b3Iuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMucGFnZVNpemUuc2V0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgdGFibGVDbGFzcyA9IGlucHV0PCd0YWJsZSB0YWJsZS1yZXNwb25zaXZlIHRhYmxlLXJlc3BvbnNpdmUgdGFibGUtYm9yZGVybGVzcyc+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJGb3JtcyA9IHNpZ25hbDxJRm9ybVNjaGVtYVtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB1c2VQYWdpbmF0b3IgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCBjaGlsZHJlbkZvcm1TY2hlbWFNYXA6IHtcbiAgICBbayBpbiBrZXlvZiBURm9ybUdyb3VwXT86IHtcbiAgICAgIGZvcm1TY2hlbWE6IElGb3JtU2NoZW1hW107XG4gICAgICBmb3JtU2NoZW1hU3RyOiBzdHJpbmdbXTtcbiAgICB9O1xuICB9ID0ge307XG4gIHJlZnJlc2hlcjogbnVtYmVyO1xuICBmb3JtQXJyYXlQYWdpbmF0aW9uU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgQFZpZXdDaGlsZChQYWdpbmF0b3JDb21wb25lbnQpIHBhZ2luYXRvckNvbXBvbmVudDogUGFnaW5hdG9yQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IGZpbHRlckZvcm1WYWx1ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXMpO1xuICByZWFkb25seSBmb3JtQXJyYXlMZW5ndGhTaWduYWwgPSBzaWduYWw8bnVtYmVyPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQ8eyBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD47IGluZGV4OiBudW1iZXIgfVtdPigoKSA9PiB7XG4gICAgdGhpcy5mb3JtQXJyYXlMZW5ndGhTaWduYWwoKTtcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmZvcm1BcnJheSxcbiAgICAgIGZpbHRlckZvcm1WYWx1ZSA9IHRoaXMuZmlsdGVyRm9ybVZhbHVlU2lnbmFsKCk7XG4gICAgY29uc3QgZm9ybUdyb3VwcyA9IGZvcm1BcnJheT8uY29udHJvbHM/Lm1hcCgoYywgaW5kZXgpID0+ICh7IGluZGV4LCBmb3JtOiBjIH0pKTtcbiAgICBjb25zdCBmaWx0ZXJPYmplY3QgPSB0aGlzLmZpbHRlckZvcm1BcnJheUdyb3VwUGlwZS5xdWVyeU1hcHBlcihmaWx0ZXJGb3JtVmFsdWUpO1xuICAgIHJldHVybiBmaWx0ZXJPYmplY3RcbiAgICAgID8gZm9ybUdyb3Vwcy5maWx0ZXIoKHsgZm9ybSB9KSA9PlxuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLmZpbHRlckZ1bmMoZmlsdGVyT2JqZWN0KShmb3JtKSxcbiAgICAgICAgKVxuICAgICAgOiBmb3JtR3JvdXBzO1xuICB9KTtcbiAgcmVhZG9ubHkgcGFnaW5hdGVkQW5kRmlsdGVyZWRGb3JtQXJyYXkgPSBjb21wdXRlZDxcbiAgICB7IGZvcm06IEZvcm1Hcm91cDxURm9ybUdyb3VwPjsgaW5kZXg6IG51bWJlciB9W11cbiAgPigoKSA9PiB7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5maWx0ZXJlZEZvcm1BcnJheSgpLFxuICAgICAgcGFnZVN0YXRlID0gdGhpcy5wYWdlU3RhdGUoKTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gdGhpcy51c2VQYWdpbmF0b3IoKVxuICAgICAgPyB0aGlzLnBhZ2luYXRvclBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgIGZvcm1BcnJheSxcbiAgICAgICAgICBwYWdlU3RhdGU/LnBhZ2VTaXplIHx8IHRoaXMucGFnZVNpemUoKSxcbiAgICAgICAgICBwYWdlU3RhdGU/LnBhZ2VJbmRleCB8fCAwLFxuICAgICAgICApXG4gICAgICA6IGZvcm1BcnJheTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZpbHRlcmVkRm9ybUFycmF5KCkubGVuZ3RoKTtcblxuICBwdWJsaWMgb3ZlcnJpZGUgdXRpbGl0eVNlcnZpY2UgPSBpbmplY3QoVXRpbGl0eVNlcnZpY2UpO1xuICBwdWJsaWMgZmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlID0gaW5qZWN0KEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSk7XG4gIHB1YmxpYyBwYWdpbmF0b3JQaXBlID0gaW5qZWN0KFBhZ2luYXRvclBpcGUpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVzZVBhZ2luYXRvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3VzZVBhZ2luYXRvciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVmcmVzaGVyID0gTWF0aC5yYW5kb20oKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLmZvcm1BcnJheVBhZ2luYXRpb25TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIHN1cGVyLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgcGFnZUNoYW5nZWQoJGV2ZW50OiB7IHBhZ2VJbmRleDogbnVtYmVyOyBwYWdlU2l6ZTogbnVtYmVyIH0pIHtcbiAgICB0aGlzLnBhZ2VTdGF0ZS5zZXQoJGV2ZW50KTtcbiAgfVxuXG4gIHJlc2V0UGFnaW5hdG9yKCkge1xuICAgIHRoaXMucGFnaW5hdG9yQ29tcG9uZW50Py5yZXNldCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByZUZvcm1hdEZvcm1TY2hlbWEgPSAoaXRlbXM6IElGb3JtU2NoZW1hPFRGb3JtR3JvdXA+W10pID0+IHtcbiAgICBpdGVtcy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICBpZiAoeC5vbkNoYW5nZUZ1bmMpIHgudHJpZ2dlck9uQ2hhbmdlT25Jbml0ID0gdHJ1ZTtcbiAgICAgIGVsc2UgaWYgKHgudHlwZSA9PSAnYnV0dG9uJykgdGhpcy5wcmVGb3JtYXRGb3JtU2NoZW1hKHguY2hpbGRyZW4pO1xuICAgIH0pO1xuICB9O1xuXG4gIG92ZXJyaWRlIGluaXQoc2NoZW1hOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJGb3Jtcy5zZXQoW10pO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZmlsdGVyRm9ybS5jb250cm9scykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZpbHRlckZvcm0uY29udHJvbHMsIGtleSkpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtLnJlbW92ZUNvbnRyb2woa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZGVidWdnZXI7XG4gICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICBpZiAoc2NoZW1hKVxuICAgICAgZm9yIChjb25zdCBzY2hlbWUgb2Ygc2NoZW1hKSB7XG4gICAgICAgIC8vIHNjaGVtZS5mb3JtID0gdGhpcy5mb3JtIHx8IHNjaGVtZS5mb3JtO1xuICAgICAgICB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lKTtcbiAgICAgIH1cbiAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICB9XG5cbiAgaGFuZGxlQWN0aW9uQnV0dG9uQ2xpY2soXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBmb3JtOiBGb3JtR3JvdXA8VEZvcm1Hcm91cD4sXG4gICAgZTogeyBidG4/OiBCdG5Db21wb25lbnQ7IGFjdGlvbkJ1dHRvbjogSVRhYmxlSW5wdXRCdG4gfSxcbiAgKSB7XG4gICAgZS5hY3Rpb25CdXR0b24uYWN0aW9uKHsgaW5kZXgsIGZvcm0sIGJ0bjogZS5idG4gfSk7XG4gICAgLy8gdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICBkZWxldGVSb3dDbGlja2VkID0gKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgcm93Rm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+LFxuICAgIGNvbmZpZz86IHsgYnRuOiBCdG5Db21wb25lbnQgfSxcbiAgKSA9PiB7XG4gICAgdGhpcy5kZWxldGVSb3dGdW5jKGluZGV4LCByb3dGb3JtPy5nZXRSYXdWYWx1ZSgpLCBjb25maWcpO1xuICAgIC8vIHRoaXMucmVmcmVzaCgpO1xuICB9O1xuXG4gIGFkZFJvd0NsaWNrZWQgPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuYWRkUm93RnVuYyhpbmRleCArIDEsIHRoaXMuZmlsdGVyRm9ybVZhbHVlU2lnbmFsKCkpO1xuICAgIC8vIHRoaXMucmVmcmVzaCgpO1xuICAgIC8vIHRoaXMuZmlsdGVyRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH07XG5cbiAgY2hlY2tSZXF1aXJlZEZpZWxkcyA9ICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNpbmdsZUZvcm1TdHJ1Y3R1cmUpO1xuICB9O1xuXG4gIG92ZXJyaWRlIGhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lOiBJRm9ybVNjaGVtYSkge1xuICAgIHNjaGVtZS5pZCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2VuZXJhdGVVVUlEKCk7XG4gICAgaWYgKHNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGQgPT0gbnVsbCAmJiAoIXNjaGVtZS52YWx1ZUZpZWxkIHx8ICFzY2hlbWUubGFiZWxGaWVsZCkpXG4gICAgICBzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkID0gdHJ1ZTtcblxuICAgIGlmIChzY2hlbWUub3B0aW9uc0luaXRGdW5jKSB7XG4gICAgICBzY2hlbWUub3B0aW9uc0luaXRGdW5jLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICBzY2hlbWUub3B0aW9ucyA9IHI7XG4gICAgICAgIC8vIHRoaXMub3B0aW9uc01hcFtzY2hlbWUuZmllbGRdID0gcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc2NoZW1lLmlzU2VhcmNoRmllbGQpIHtcbiAgICAgIHRoaXMuZmlsdGVyRm9ybXMudXBkYXRlKChmaWx0ZXJGb3JtcykgPT4gZmlsdGVyRm9ybXMuY29uY2F0KFtzY2hlbWVdKSk7XG4gICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChzY2hlbWUuZmllbGQ/LnRvU3RyaW5nKCksIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICB9IGVsc2UgaWYgKHNjaGVtZS50eXBlID09ICdidXR0b24nKSB7XG4gICAgICBpZiAoc2NoZW1lLmNoaWxkcmVuPy5sZW5ndGgpXG4gICAgICAgIHRoaXMuY2hpbGRyZW5Gb3JtU2NoZW1hTWFwW3NjaGVtZS5maWVsZCBhcyBzdHJpbmddID0ge1xuICAgICAgICAgIGZvcm1TY2hlbWE6IHNjaGVtZS5jaGlsZHJlbixcbiAgICAgICAgICBmb3JtU2NoZW1hU3RyOiBzY2hlbWUuY2hpbGRyZW4ubWFwKCh4KSA9PiB4LmZpZWxkIGFzIHN0cmluZyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNjaGVtZS5pc1JlcXVpcmVkID1cbiAgICAgIHNjaGVtZS5pc1JlcXVpcmVkIHx8XG4gICAgICAoPEZvcm1Hcm91cD50aGlzLnNpbmdsZUZvcm1TdHJ1Y3R1cmU/LmNvbnRyb2xzW3NjaGVtZS5maWVsZF0pPy5oYXNWYWxpZGF0b3IoXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlSW5wdXRCdG4gZXh0ZW5kcyBJQnRuIHtcbiAgYWN0aW9uPzogKGFyZz86IHsgaW5kZXg6IG51bWJlcjsgZm9ybTogRm9ybUdyb3VwOyBidG46IEJ0bkNvbXBvbmVudCB9KSA9PiB2b2lkO1xufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWlucHV0XCI+XG4gIEBpZiAoZmlsdGVyRm9ybXMoKT8ubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cIm1iLTMge3sgZmlsdGVyQ29udGFpbmVyQ2xhc3MoKSB9fVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgIHRleHQ9XCJ7eyBmaWx0ZXJTZWN0aW9uLmhpZGRlbiA/ICdTaG93IEZpbHRlcicgOiAnSGlkZSBGaWx0ZXInIH19XCJcbiAgICAgICAgICBbaWNvbl09XCJmaWx0ZXJTZWN0aW9uLmhpZGRlbiA/ICdzZWFyY2gnIDogJ2Nsb3NlJ1wiXG4gICAgICAgICAgKG1jbGljayk9XCJmaWx0ZXJTZWN0aW9uLmhpZGRlbiA9ICFmaWx0ZXJTZWN0aW9uLmhpZGRlblwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcC0zIG10LTMgcm91bmRlZC0xMFwiICNmaWx0ZXJTZWN0aW9uIFtoaWRkZW5dPVwidHJ1ZVwiPlxuICAgICAgICA8Zm9ybS1nZW5lcmF0b3IgW2Zvcm1dPVwiZmlsdGVyRm9ybVwiIFtmb3JtU2NoZW1hXT1cImZpbHRlckZvcm1zKClcIiBbZ3JpZExHU3R5bGVdPVwiM1wiIFtzaG93U3VibWl0QnRuXT1cImZhbHNlXCIgKG1jaGFuZ2UpPVwicmVzZXRQYWdpbmF0b3IoKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgIDxhcHAtYnRuIHR5cGU9XCJkYW5nZXItb3V0bGluZVwiIHRleHQ9XCJDbGVhclwiIChtY2xpY2spPVwiZmlsdGVyRm9ybS5yZXNldCgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJiZy13aGl0ZVwiIFtuZ0NsYXNzXT1cInsgJ2JvcmRlciByb3VuZGVkLTEwJzogYm9yZGVyKCkgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCIgXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCIge3sgdGFibGVDbGFzcygpIH19IFwiIFtuZ0NsYXNzXT1cInsgJ2lzLXNob3ctZm9ybSc6IGlzU2hvdygpIH1cIj5cbiAgICAgICAgPHRoZWFkIChjbGljayk9XCJ1dGlsaXR5U2VydmljZS5sb2dGb3JtKGZpbHRlcmVkRm9ybUFycmF5KCkpXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZm9ybVNjaGVtYSgpOyB0cmFjayBpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInt7IGl0ZW0uY2xzIH19XCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgICAge3sgaXRlbS5pc1JlcXVpcmVkID8gJyonIDogJycgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoIWlzU2hvdygpKSB7XG4gICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgQGZvciAoYWN0aW9uQnRuIG9mIGFjdGlvbkJ0bnMoKTsgdHJhY2sgYWN0aW9uQnRuKSB7XG4gICAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgQGZvciAoc3ViRm9ybSBvZiBwYWdpbmF0ZWRBbmRGaWx0ZXJlZEZvcm1BcnJheSgpOyB0cmFjayBzdWJGb3JtOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgIHRhYmxlLWlucHV0LXJvd1xuICAgICAgICAgICAgICAob25BZGRSb3dGdW5jKT1cImFkZFJvd0NsaWNrZWQoc3ViRm9ybS5pbmRleClcIlxuICAgICAgICAgICAgICBbaXNTaG93XT1cImlzU2hvdygpXCJcbiAgICAgICAgICAgICAgW2Zvcm1dPVwic3ViRm9ybS5mb3JtXCJcbiAgICAgICAgICAgICAgW2FjdGlvbkJ0bnNdPVwiYWN0aW9uQnRucygpXCJcbiAgICAgICAgICAgICAgW2Zvcm1TY2hlbWFdPVwiZm9ybVNjaGVtYSgpXCJcbiAgICAgICAgICAgICAgW2NoaWxkcmVuRm9ybVNjaGVtYU1hcF09XCJjaGlsZHJlbkZvcm1TY2hlbWFNYXBcIlxuICAgICAgICAgICAgICAob25EZWxldGVSb3dGdW5jKT1cIlxuICAgICAgICAgICAgICAgIGRlbGV0ZVJvd0NsaWNrZWQoc3ViRm9ybS5pbmRleCwgc3ViRm9ybS5mb3JtLCB7XG4gICAgICAgICAgICAgICAgICBidG46ICRldmVudD8uYnRuXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKG9uQWN0aW9uQnV0dG9uQ2xpY2spPVwiaGFuZGxlQWN0aW9uQnV0dG9uQ2xpY2soc3ViRm9ybS5pbmRleCwgc3ViRm9ybS5mb3JtLCAkZXZlbnQpXCI+PC90cj5cbiAgICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCIgW2NvbFNwYW5dPVwiZm9ybVNjaGVtYSgpPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICB7eyAnVGhlcmUgYXJlIG5vIGl0ZW1zJyB8IGFwcFRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiXCIgW2hpZGRlbl09XCIhdXNlUGFnaW5hdG9yKCkgfHwgIWZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoKCkgfHwgZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGgoKSA8IHBhZ2VTaXplKClcIj5cbiAgICAgIDxwYWdpbmF0b3JcbiAgICAgICAgI3BhZ2luYXRvclRhZ1xuICAgICAgICBbYXJyYXlMZW5ndGhdPVwiZmlsdGVyZWRGb3JtQXJyYXlMZW5ndGgoKVwiXG4gICAgICAgIChwYWdlQ2hhbmdlZCk9XCJwYWdlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplKClcIlxuICAgICAgICBbcmVzZXRJbmRleEZ1bmNdPVwiZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXNcIiAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLWlucHV0L3RhYmxlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1pbnB1dC90YWJsZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsU0FBUyxFQUNULFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixTQUFTLEdBQ1YsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsT0FBTyxFQUNQLEtBQUssRUFDTCxJQUFJLEVBQ0osUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEdBQ2hCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUF3QixHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFcEU7O0dBRUc7QUF5Q0gsTUFBTSxPQUFPLG1CQUtYLFNBQVEsc0JBQWtDO0lBN0M1Qzs7UUFnRFcsY0FBUyxHQUFHLEtBQUssRUFBb0MsQ0FBQztRQUV0RCx5QkFBb0IsR0FBRyxLQUFLLEVBQVUsQ0FBQztRQUN2QyxXQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLFdBQU0sR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUkxQixhQUFRLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQTBDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLGVBQVUsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUErQnZDLGVBQVUsR0FBRyxLQUFLLEVBQThELENBQUM7UUFDdkUsZUFBVSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLGdCQUFXLEdBQUcsTUFBTSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUN4QyxpQkFBWSxHQUFHLE1BQU0sQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUM5QywwQkFBcUIsR0FLM0IsRUFBRSxDQUFDO1FBTUUsMEJBQXFCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0QsMEJBQXFCLEdBQUcsUUFBUSxDQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FDL0IsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDdEUsQ0FDRixDQUFDO1FBRU8sc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN6QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQ2hDLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFVBQVUsR0FBRyxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pELEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFO2FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1lBQ0osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRixPQUFPLFlBQVk7Z0JBQ2pCLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQzdCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQzdEO2dCQUNILENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTSxrQ0FBNkIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUN4QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDeEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUMxQixTQUFTLEVBQ1QsU0FBUyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ3RDLFNBQVMsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUMxQjtnQkFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRU0sNEJBQXVCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5FLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELDZCQUF3QixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzVELGtCQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBK0JuQyx3QkFBbUIsR0FBRyxDQUFDLEtBQWdDLEVBQUUsRUFBRTtZQUNuRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxDQUFDLFlBQVk7b0JBQUUsQ0FBQyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztxQkFDOUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVE7b0JBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQTRCRixxQkFBZ0IsR0FBRyxDQUNqQixLQUFhLEVBQ2IsT0FBOEIsRUFDOUIsTUFBOEIsRUFDOUIsRUFBRTtZQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxRCxrQkFBa0I7UUFDcEIsQ0FBQyxDQUFDO1FBRUYsa0JBQWEsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELGtCQUFrQjtZQUNsQiw0Q0FBNEM7UUFDOUMsQ0FBQyxDQUFDO1FBRUYsd0JBQW1CLEdBQUcsR0FBRyxFQUFFO1lBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDO0tBNkJIO0lBeE1DLElBQXVCLFNBQVMsQ0FBQyxDQUFTO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFJRCxJQUE2RCxXQUFXLENBQ3RFLENBQTRCO1FBRTVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBZUQsSUFBMkIsYUFBYSxDQUFDLENBQVU7UUFDakQsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQTBERCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRVEsU0FBUztRQUNoQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDM0MsT0FBTyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUErQztRQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBU1EsSUFBSSxDQUFDLE1BQWlDO1FBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUNELFlBQVk7UUFDWixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxNQUFNO1lBQ1IsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsMENBQTBDO2dCQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELHVCQUF1QixDQUNyQixLQUFhLEVBQ2IsSUFBMkIsRUFDM0IsQ0FBdUQ7UUFFdkQsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuRCxrQkFBa0I7SUFDcEIsQ0FBQztJQXFCUSxnQkFBZ0IsQ0FBQyxNQUFtQjtRQUMzQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0MsSUFBSSxNQUFNLENBQUMsa0JBQWtCLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNqRixNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRW5DLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQixxQ0FBcUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTTtnQkFDekIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxLQUFlLENBQUMsR0FBRztvQkFDbkQsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRO29CQUMzQixhQUFhLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFlLENBQUM7aUJBQzdELENBQUM7UUFDTixDQUFDO1FBQ0QsTUFBTSxDQUFDLFVBQVU7WUFDZixNQUFNLENBQUMsVUFBVTtnQkFDTCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUUsRUFBRSxZQUFZLENBQ3pFLFVBQVUsQ0FBQyxRQUFRLENBQ3BCLENBQUM7SUFDTixDQUFDOzhHQXBOVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiwyc0RBRm5CLENBQUMsd0JBQXdCLEVBQUUsYUFBYSxDQUFDLDhFQWdFekMsa0JBQWtCLHVFQ3BLL0IsdzlGQTJFQSxrSURUSSxTQUFTLDhDQUVULFlBQVksbWdCQUVaLHNCQUFzQix5YkFDdEIsV0FBVyw4QkFPWCxrQkFBa0IsOEJBQ2xCLGFBQWEsOEJBQ2IsZ0JBQWdCLCtCQUVoQixPQUFPLG9GQU1QLGtCQUFrQixzS0FHbEIsbUJBQW1CLCtCQUNuQixzQkFBc0Isc01BRXRCLGdCQUFnQjs7MkZBUVAsbUJBQW1CO2tCQXhDL0IsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLFNBQVM7d0JBQ1QscUJBQXFCO3dCQUNyQixZQUFZO3dCQUNaLHdCQUF3Qjt3QkFDeEIsc0JBQXNCO3dCQUN0QixXQUFXO3dCQUNYLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsUUFBUTt3QkFDUixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsT0FBTzt3QkFDUCxLQUFLO3dCQUNMLElBQUk7d0JBQ0osUUFBUTt3QkFDUixZQUFZO3dCQUNaLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQix3QkFBd0I7d0JBQ3hCLDBCQUEwQjtxQkFDM0IsYUFHVSxDQUFDLHdCQUF3QixFQUFFLGFBQWEsQ0FBQzs4QkFlN0IsU0FBUztzQkFBL0IsS0FBSzt1QkFBQyxVQUFVO2dCQU00QyxXQUFXO3NCQUF2RSxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQU85QyxtQkFBbUI7c0JBRGxCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUtoQixhQUFhO3NCQUFyQixLQUFLO2dCQVFHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ3FCLGFBQWE7c0JBQXZDLEtBQUs7dUJBQUMsY0FBYztnQkF1QlUsa0JBQWtCO3NCQUFoRCxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZvcm1TY2hlbWEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZm9ybS1zY2hlbWEubW9kZWwnO1xuaW1wb3J0IHtcbiAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICBGb3JtVmFsdWVQaXBlLFxuICBGdW5jdGlvbkNhbGxlcjIsXG4gIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gIFRvQW55UGlwZSxcbn0gZnJvbSAnLi4vLi4vcGlwZXMvdXRpbGl0eS5waXBlJztcblxuaW1wb3J0IHsgQnRuQ29tcG9uZW50IH0gZnJvbSAnLi4vYnRuL2J0bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW5wdXRCYXNpY0NvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0L2lucHV0LWJhc2ljLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRvY29tcGxldGVDb21wb25lbnQgfSBmcm9tICcuLi9hdXRvY29tcGxldGUvYXV0b2NvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0L3ZhbGlkYXRpb24tbWVzc2FnZS92YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBob25lTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQXN5bmNQaXBlLFxuICBKc29uUGlwZSxcbiAgTmdDbGFzcyxcbiAgTmdGb3IsXG4gIE5nSWYsXG4gIE5nU3dpdGNoLFxuICBOZ1N3aXRjaENhc2UsXG4gIE5nU3dpdGNoRGVmYXVsdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2xvYWRlci9sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1HZW5lcmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWdlbmVyYXRvci9mb3JtLWdlbmVyYXRvci5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgVGFibGVJbnB1dFJvd0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtaW5wdXQtcm93L3RhYmxlLWlucHV0LXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQnRuIH0gZnJvbSAnLi4vYnRuL2J0bi5tb2RlbCc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBTREtUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgUGFnaW5hdG9yUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3BhZ2luYXRvci5waXBlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8qKlxuICogVGFibGUgSW5wdXQgQ29tcG9uZW50XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RhYmxlLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgQnRuQ29tcG9uZW50LFxuICAgIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSxcbiAgICBGb3JtR2VuZXJhdG9yQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZvcm1WYWx1ZVBpcGUsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gICAgSW5wdXRCYXNpY0NvbXBvbmVudCxcbiAgICBKc29uUGlwZSxcbiAgICBMb2FkZXJDb21wb25lbnQsXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBNb2RhbENvbXBvbmVudCxcbiAgICBOZ0NsYXNzLFxuICAgIE5nRm9yLFxuICAgIE5nSWYsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBQYWdpbmF0b3JDb21wb25lbnQsXG4gICAgUGFnaW5hdG9yUGlwZSxcbiAgICBQaG9uZU51bWJlckNvbXBvbmVudCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRhYmxlSW5wdXRSb3dDb21wb25lbnQsXG4gICAgVG9BbnlQaXBlLFxuICAgIFNES1RyYW5zbGF0ZVBpcGUsXG4gICAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICAgIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsIFBhZ2luYXRvclBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUlucHV0Q29tcG9uZW50PFxuICAgIFRGb3JtR3JvdXAgZXh0ZW5kcyB7XG4gICAgICBbSyBpbiBrZXlvZiBURm9ybUdyb3VwXTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PjtcbiAgICB9ID0gYW55LFxuICA+XG4gIGV4dGVuZHMgRm9ybUdlbmVyYXRvckNvbXBvbmVudDxURm9ybUdyb3VwPlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICByZWFkb25seSBmb3JtQXJyYXkgPSBpbnB1dDxGb3JtQXJyYXk8Rm9ybUdyb3VwPFRGb3JtR3JvdXA+Pj4oKTtcblxuICByZWFkb25seSBmaWx0ZXJDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYm9yZGVyID0gaW5wdXQodHJ1ZSk7XG4gIHJlYWRvbmx5IGlzU2hvdyA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIEBJbnB1dCgncGFnZVNpemUnKSBzZXQgX3BhZ2VTaXplKHY6IG51bWJlcikge1xuICAgIHRoaXMucGFnZVNpemUuc2V0KHYpO1xuICB9XG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gc2lnbmFsPG51bWJlcj4oMTApO1xuICByZWFkb25seSBwYWdlU3RhdGUgPSBzaWduYWw8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PihudWxsKTtcbiAgcmVhZG9ubHkgYWN0aW9uQnRucyA9IGlucHV0PElUYWJsZUlucHV0QnRuW10+KCk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogJ2Zvcm1TY2hlbWEnIH0pIG92ZXJyaWRlIHNldCBfZm9ybVNjaGVtYShcbiAgICB2OiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdLFxuICApIHtcbiAgICB0aGlzLnByZUZvcm1hdEZvcm1TY2hlbWEodik7XG4gICAgc3VwZXIuX2Zvcm1TY2hlbWEgPSB2O1xuICB9XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIHNpbmdsZUZvcm1TdHJ1Y3R1cmU6IEZvcm1Hcm91cDxURm9ybUdyb3VwPjtcbiAgLyoqXG4gICAqIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRoZSBkZWxldGUgYnV0dG9uIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIGRlbGV0ZVJvd0Z1bmM6IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRhdGE/OiBGb3JtR3JvdXA8VEZvcm1Hcm91cD5bJ3ZhbHVlJ10sXG4gICAgY29uZmlnPzogeyBidG46IEJ0bkNvbXBvbmVudCB9LFxuICApID0+IGFueTtcbiAgLyoqXG4gICAqIExlYXZlIGVtcHR5IGlmIHlvdSBkb24ndCB3YW50IHRoZSBhZGQgYnV0dG9uIHRvIHNob3dcbiAgICovXG4gIEBJbnB1dCgpIGFkZFJvd0Z1bmM6IChpbmRleDogbnVtYmVyLCBkYXRhPzogRm9ybUdyb3VwPFRGb3JtR3JvdXA+Wyd2YWx1ZSddKSA9PiBhbnk7XG4gIEBJbnB1dCgndXNlUGFnaW5hdG9yJykgc2V0IF91c2VQYWdpbmF0b3IodjogYm9vbGVhbikge1xuICAgIGlmICh2KSB7XG4gICAgICB0aGlzLnVzZVBhZ2luYXRvci5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnBhZ2VTaXplLnVwZGF0ZSgocGFnZVNpemUpID0+IHBhZ2VTaXplIHx8IDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VQYWdpbmF0b3Iuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMucGFnZVNpemUuc2V0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgdGFibGVDbGFzcyA9IGlucHV0PCd0YWJsZSB0YWJsZS1yZXNwb25zaXZlIHRhYmxlLXJlc3BvbnNpdmUgdGFibGUtYm9yZGVybGVzcyc+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBmaWx0ZXJGb3JtcyA9IHNpZ25hbDxJRm9ybVNjaGVtYVtdPihbXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSB1c2VQYWdpbmF0b3IgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCBjaGlsZHJlbkZvcm1TY2hlbWFNYXA6IHtcbiAgICBbayBpbiBrZXlvZiBURm9ybUdyb3VwXT86IHtcbiAgICAgIGZvcm1TY2hlbWE6IElGb3JtU2NoZW1hW107XG4gICAgICBmb3JtU2NoZW1hU3RyOiBzdHJpbmdbXTtcbiAgICB9O1xuICB9ID0ge307XG4gIHJlZnJlc2hlcjogbnVtYmVyO1xuICBmb3JtQXJyYXlQYWdpbmF0aW9uU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgQFZpZXdDaGlsZChQYWdpbmF0b3JDb21wb25lbnQpIHBhZ2luYXRvckNvbXBvbmVudDogUGFnaW5hdG9yQ29tcG9uZW50O1xuXG4gIHJlYWRvbmx5IGZpbHRlckZvcm1WYWx1ZVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuZmlsdGVyRm9ybS52YWx1ZUNoYW5nZXMpO1xuICByZWFkb25seSBmb3JtQXJyYXlMZW5ndGhTaWduYWwgPSB0b1NpZ25hbDxudW1iZXI+KFxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmZvcm1BcnJheSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZm9ybSkgPT4gZm9ybT8udmFsdWVDaGFuZ2VzLnBpcGUobWFwKCgpID0+IGZvcm0/Lmxlbmd0aCkpKSxcbiAgICApLFxuICApO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuZm9ybUFycmF5TGVuZ3RoU2lnbmFsKCk7XG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5mb3JtQXJyYXkoKSxcbiAgICAgIGZpbHRlckZvcm1WYWx1ZSA9IHRoaXMuZmlsdGVyRm9ybVZhbHVlU2lnbmFsKCk7XG4gICAgY29uc3QgZm9ybUdyb3VwcyA9IGZvcm1BcnJheT8uY29udHJvbHM/Lm1hcCgoYywgaW5kZXgpID0+ICh7XG4gICAgICBpbmRleCxcbiAgICAgIGZvcm06IGMsXG4gICAgICBpZDogdGhpcy51dGlsaXR5U2VydmljZS5nZW5lcmF0ZVVVSUQoKSxcbiAgICB9KSk7XG4gICAgY29uc3QgZmlsdGVyT2JqZWN0ID0gdGhpcy5maWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUucXVlcnlNYXBwZXIoZmlsdGVyRm9ybVZhbHVlKTtcbiAgICByZXR1cm4gZmlsdGVyT2JqZWN0XG4gICAgICA/IGZvcm1Hcm91cHMuZmlsdGVyKCh7IGZvcm0gfSkgPT5cbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm1BcnJheUdyb3VwUGlwZS5maWx0ZXJGdW5jKGZpbHRlck9iamVjdCkoZm9ybSksXG4gICAgICAgIClcbiAgICAgIDogZm9ybUdyb3VwcztcbiAgfSk7XG4gIHJlYWRvbmx5IHBhZ2luYXRlZEFuZEZpbHRlcmVkRm9ybUFycmF5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmlsdGVyZWRGb3JtQXJyYXkoKSxcbiAgICAgIHBhZ2VTdGF0ZSA9IHRoaXMucGFnZVN0YXRlKCk7XG4gICAgcmV0dXJuIHRoaXMudXNlUGFnaW5hdG9yKClcbiAgICAgID8gdGhpcy5wYWdpbmF0b3JQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICBmb3JtQXJyYXksXG4gICAgICAgICAgcGFnZVN0YXRlPy5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VTaXplKCksXG4gICAgICAgICAgcGFnZVN0YXRlPy5wYWdlSW5kZXggfHwgMCxcbiAgICAgICAgKVxuICAgICAgOiBmb3JtQXJyYXk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5maWx0ZXJlZEZvcm1BcnJheSgpLmxlbmd0aCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIHV0aWxpdHlTZXJ2aWNlID0gaW5qZWN0KFV0aWxpdHlTZXJ2aWNlKTtcbiAgcHVibGljIGZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSA9IGluamVjdChGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUpO1xuICBwdWJsaWMgcGFnaW5hdG9yUGlwZSA9IGluamVjdChQYWdpbmF0b3JQaXBlKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51c2VQYWdpbmF0b3IgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl91c2VQYWdpbmF0b3IgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlZnJlc2hlciA9IE1hdGgucmFuZG9tKCk7XG4gIH1cblxuICBvdmVycmlkZSBvbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb3JtQXJyYXlQYWdpbmF0aW9uU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHJldHVybiBzdXBlci5vbkRlc3Ryb3koKTtcbiAgfVxuXG4gIHBhZ2VDaGFuZ2VkKCRldmVudDogeyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9KSB7XG4gICAgdGhpcy5wYWdlU3RhdGUuc2V0KCRldmVudCk7XG4gIH1cblxuICByZXNldFBhZ2luYXRvcigpIHtcbiAgICB0aGlzLnBhZ2luYXRvckNvbXBvbmVudD8ucmVzZXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVGb3JtYXRGb3JtU2NoZW1hID0gKGl0ZW1zOiBJRm9ybVNjaGVtYTxURm9ybUdyb3VwPltdKSA9PiB7XG4gICAgaXRlbXMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgaWYgKHgub25DaGFuZ2VGdW5jKSB4LnRyaWdnZXJPbkNoYW5nZU9uSW5pdCA9IHRydWU7XG4gICAgICBlbHNlIGlmICh4LnR5cGUgPT0gJ2J1dHRvbicpIHRoaXMucHJlRm9ybWF0Rm9ybVNjaGVtYSh4LmNoaWxkcmVuKTtcbiAgICB9KTtcbiAgfTtcblxuICBvdmVycmlkZSBpbml0KHNjaGVtYTogSUZvcm1TY2hlbWE8VEZvcm1Hcm91cD5bXSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybXMuc2V0KFtdKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLCBrZXkpKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybS5yZW1vdmVDb250cm9sKGtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMub25EZXN0cm95KCk7XG4gICAgaWYgKHNjaGVtYSlcbiAgICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIHNjaGVtYSkge1xuICAgICAgICAvLyBzY2hlbWUuZm9ybSA9IHRoaXMuZm9ybSB8fCBzY2hlbWUuZm9ybTtcbiAgICAgICAgdGhpcy5oYW5kbGVGb3JtU2NoZW1lKHNjaGVtZSk7XG4gICAgICB9XG4gICAgdGhpcy5fc2V0Rm9ybVNjaGVtYXMoc2NoZW1hKTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbkJ1dHRvbkNsaWNrKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZm9ybTogRm9ybUdyb3VwPFRGb3JtR3JvdXA+LFxuICAgIGU6IHsgYnRuPzogQnRuQ29tcG9uZW50OyBhY3Rpb25CdXR0b246IElUYWJsZUlucHV0QnRuIH0sXG4gICkge1xuICAgIGUuYWN0aW9uQnV0dG9uLmFjdGlvbih7IGluZGV4LCBmb3JtLCBidG46IGUuYnRuIH0pO1xuICAgIC8vIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgZGVsZXRlUm93Q2xpY2tlZCA9IChcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIHJvd0Zvcm06IEZvcm1Hcm91cDxURm9ybUdyb3VwPixcbiAgICBjb25maWc/OiB7IGJ0bjogQnRuQ29tcG9uZW50IH0sXG4gICkgPT4ge1xuICAgIHRoaXMuZGVsZXRlUm93RnVuYyhpbmRleCwgcm93Rm9ybT8uZ2V0UmF3VmFsdWUoKSwgY29uZmlnKTtcbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgfTtcblxuICBhZGRSb3dDbGlja2VkID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmFkZFJvd0Z1bmMoaW5kZXggKyAxLCB0aGlzLmZpbHRlckZvcm1WYWx1ZVNpZ25hbCgpKTtcbiAgICAvLyB0aGlzLnJlZnJlc2goKTtcbiAgICAvLyB0aGlzLmZpbHRlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9O1xuXG4gIGNoZWNrUmVxdWlyZWRGaWVsZHMgPSAoKSA9PiB7XG4gICAgY29uc29sZS5sb2codGhpcy5zaW5nbGVGb3JtU3RydWN0dXJlKTtcbiAgfTtcblxuICBvdmVycmlkZSBoYW5kbGVGb3JtU2NoZW1lKHNjaGVtZTogSUZvcm1TY2hlbWEpIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIGlmIChzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkID09IG51bGwgJiYgKCFzY2hlbWUudmFsdWVGaWVsZCB8fCAhc2NoZW1lLmxhYmVsRmllbGQpKVxuICAgICAgc2NoZW1lLmF1dG9QaWNrVmFsdWVGaWVsZCA9IHRydWU7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYykge1xuICAgICAgc2NoZW1lLm9wdGlvbnNJbml0RnVuYy5zdWJzY3JpYmUoKHIpID0+IHtcbiAgICAgICAgc2NoZW1lLm9wdGlvbnMgPSByO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHNjaGVtZS5pc1NlYXJjaEZpZWxkKSB7XG4gICAgICB0aGlzLmZpbHRlckZvcm1zLnVwZGF0ZSgoZmlsdGVyRm9ybXMpID0+IGZpbHRlckZvcm1zLmNvbmNhdChbc2NoZW1lXSkpO1xuICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woc2NoZW1lLmZpZWxkPy50b1N0cmluZygpLCBuZXcgRm9ybUNvbnRyb2woKSk7XG4gICAgfSBlbHNlIGlmIChzY2hlbWUudHlwZSA9PSAnYnV0dG9uJykge1xuICAgICAgaWYgKHNjaGVtZS5jaGlsZHJlbj8ubGVuZ3RoKVxuICAgICAgICB0aGlzLmNoaWxkcmVuRm9ybVNjaGVtYU1hcFtzY2hlbWUuZmllbGQgYXMgc3RyaW5nXSA9IHtcbiAgICAgICAgICBmb3JtU2NoZW1hOiBzY2hlbWUuY2hpbGRyZW4sXG4gICAgICAgICAgZm9ybVNjaGVtYVN0cjogc2NoZW1lLmNoaWxkcmVuLm1hcCgoeCkgPT4geC5maWVsZCBhcyBzdHJpbmcpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzY2hlbWUuaXNSZXF1aXJlZCA9XG4gICAgICBzY2hlbWUuaXNSZXF1aXJlZCB8fFxuICAgICAgKDxGb3JtR3JvdXA+dGhpcy5zaW5nbGVGb3JtU3RydWN0dXJlPy5jb250cm9sc1tzY2hlbWUuZmllbGRdKT8uaGFzVmFsaWRhdG9yKFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZUlucHV0QnRuIGV4dGVuZHMgSUJ0biB7XG4gIGFjdGlvbj86IChhcmc/OiB7IGluZGV4OiBudW1iZXI7IGZvcm06IEZvcm1Hcm91cDsgYnRuOiBCdG5Db21wb25lbnQgfSkgPT4gdm9pZDtcbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1pbnB1dFwiPlxuICBAaWYgKGZpbHRlckZvcm1zKCk/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJtYi0zIHt7IGZpbHRlckNvbnRhaW5lckNsYXNzKCkgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICB0ZXh0PVwie3sgZmlsdGVyU2VjdGlvbi5oaWRkZW4gPyAnU2hvdyBGaWx0ZXInIDogJ0hpZGUgRmlsdGVyJyB9fVwiXG4gICAgICAgICAgW2ljb25dPVwiZmlsdGVyU2VjdGlvbi5oaWRkZW4gPyAnc2VhcmNoJyA6ICdjbG9zZSdcIlxuICAgICAgICAgIChtY2xpY2spPVwiZmlsdGVyU2VjdGlvbi5oaWRkZW4gPSAhZmlsdGVyU2VjdGlvbi5oaWRkZW5cIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHAtMyBtdC0zIHJvdW5kZWQtMTBcIiAjZmlsdGVyU2VjdGlvbiBbaGlkZGVuXT1cInRydWVcIj5cbiAgICAgICAgPGZvcm0tZ2VuZXJhdG9yIFtmb3JtXT1cImZpbHRlckZvcm1cIiBbZm9ybVNjaGVtYV09XCJmaWx0ZXJGb3JtcygpXCIgW2dyaWRMR1N0eWxlXT1cIjNcIiBbc2hvd1N1Ym1pdEJ0bl09XCJmYWxzZVwiIChtY2hhbmdlKT1cInJlc2V0UGFnaW5hdG9yKClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwiZGFuZ2VyLW91dGxpbmVcIiB0ZXh0PVwiQ2xlYXJcIiAobWNsaWNrKT1cImZpbHRlckZvcm0ucmVzZXQoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8ZGl2IGNsYXNzPVwiYmctd2hpdGVcIiBbbmdDbGFzc109XCJ7ICdib3JkZXIgcm91bmRlZC0xMCc6IGJvcmRlcigpIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiIFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwiIHt7IHRhYmxlQ2xhc3MoKSB9fSBcIiBbbmdDbGFzc109XCJ7ICdpcy1zaG93LWZvcm0nOiBpc1Nob3coKSB9XCI+XG4gICAgICAgIDx0aGVhZCAoY2xpY2spPVwidXRpbGl0eVNlcnZpY2UubG9nRm9ybShmaWx0ZXJlZEZvcm1BcnJheSgpKVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZvcm1TY2hlbWEoKTsgdHJhY2sgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ7eyBpdGVtLmNscyB9fVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaXNSZXF1aXJlZCA/ICcqJyA6ICcnIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpc1Nob3coKSkge1xuICAgICAgICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgICAgICAgPHRoPjwvdGg+XG4gICAgICAgICAgICAgIEBmb3IgKGFjdGlvbkJ0biBvZiBhY3Rpb25CdG5zKCk7IHRyYWNrIGFjdGlvbkJ0bikge1xuICAgICAgICAgICAgICAgIDx0aD48L3RoPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIEBmb3IgKHN1YkZvcm0gb2YgcGFnaW5hdGVkQW5kRmlsdGVyZWRGb3JtQXJyYXkoKTsgdHJhY2sgc3ViRm9ybS5pZDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICB0YWJsZS1pbnB1dC1yb3dcbiAgICAgICAgICAgICAgKG9uQWRkUm93RnVuYyk9XCJhZGRSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgpXCJcbiAgICAgICAgICAgICAgW2lzU2hvd109XCJpc1Nob3coKVwiXG4gICAgICAgICAgICAgIFtmb3JtXT1cInN1YkZvcm0uZm9ybVwiXG4gICAgICAgICAgICAgIFthY3Rpb25CdG5zXT1cImFjdGlvbkJ0bnMoKVwiXG4gICAgICAgICAgICAgIFtmb3JtU2NoZW1hXT1cImZvcm1TY2hlbWEoKVwiXG4gICAgICAgICAgICAgIFtjaGlsZHJlbkZvcm1TY2hlbWFNYXBdPVwiY2hpbGRyZW5Gb3JtU2NoZW1hTWFwXCJcbiAgICAgICAgICAgICAgKG9uRGVsZXRlUm93RnVuYyk9XCJcbiAgICAgICAgICAgICAgICBkZWxldGVSb3dDbGlja2VkKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwge1xuICAgICAgICAgICAgICAgICAgYnRuOiAkZXZlbnQ/LmJ0blxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChvbkFjdGlvbkJ1dHRvbkNsaWNrKT1cImhhbmRsZUFjdGlvbkJ1dHRvbkNsaWNrKHN1YkZvcm0uaW5kZXgsIHN1YkZvcm0uZm9ybSwgJGV2ZW50KVwiPjwvdHI+XG4gICAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiIFtjb2xTcGFuXT1cImZvcm1TY2hlbWEoKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAge3sgJ1RoZXJlIGFyZSBubyBpdGVtcycgfCBhcHBUcmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIlwiIFtoaWRkZW5dPVwiIXVzZVBhZ2luYXRvcigpIHx8ICFmaWx0ZXJlZEZvcm1BcnJheUxlbmd0aCgpIHx8IGZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoKCkgPCBwYWdlU2l6ZSgpXCI+XG4gICAgICA8cGFnaW5hdG9yXG4gICAgICAgICNwYWdpbmF0b3JUYWdcbiAgICAgICAgW2FycmF5TGVuZ3RoXT1cImZpbHRlcmVkRm9ybUFycmF5TGVuZ3RoKClcIlxuICAgICAgICAocGFnZUNoYW5nZWQpPVwicGFnZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgW3Jlc2V0SW5kZXhGdW5jXT1cImZpbHRlckZvcm0udmFsdWVDaGFuZ2VzXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==