@cqa-lib/cqa-ui 1.1.499 → 1.1.501

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.
@@ -5,6 +5,7 @@ export class DynamicCellContainerDirective {
5
5
  this.viewContainerRef = viewContainerRef;
6
6
  this.cdr = cdr;
7
7
  this.initialized = false;
8
+ this.isApplyingInputChanges = false;
8
9
  }
9
10
  ngOnInit() {
10
11
  if (this.componentConfig && !this.initialized) {
@@ -16,16 +17,25 @@ export class DynamicCellContainerDirective {
16
17
  if (this.componentRef &&
17
18
  this.componentConfig &&
18
19
  (changes['componentConfig'] || changes['row'] || changes['column'] || changes['rowIndex'] || changes['colId'])) {
19
- // Refresh component inputs when config or row context changes.
20
- const inputs = this.getComponentInputs(this.componentConfig);
21
- Object.keys(inputs).forEach(inputKey => {
22
- if (this.componentRef?.instance && inputKey in this.componentRef.instance) {
23
- this.componentRef.instance[inputKey] = inputs[inputKey];
24
- }
25
- });
26
- // Use detectChanges to ensure styles are updated immediately
27
- this.componentRef.changeDetectorRef.detectChanges();
28
- this.cdr.detectChanges();
20
+ if (this.isApplyingInputChanges) {
21
+ return;
22
+ }
23
+ this.isApplyingInputChanges = true;
24
+ try {
25
+ // Refresh component inputs when config or row context changes.
26
+ const inputs = this.getComponentInputs(this.componentConfig);
27
+ Object.keys(inputs).forEach(inputKey => {
28
+ if (this.componentRef?.instance && inputKey in this.componentRef.instance) {
29
+ this.componentRef.instance[inputKey] = inputs[inputKey];
30
+ }
31
+ });
32
+ // Avoid synchronous detectChanges inside ngOnChanges to prevent re-entrant CD loops.
33
+ this.componentRef.changeDetectorRef.markForCheck();
34
+ this.cdr.markForCheck();
35
+ }
36
+ finally {
37
+ this.isApplyingInputChanges = false;
38
+ }
29
39
  }
30
40
  else if (changes['componentConfig'] && this.componentConfig && !this.initialized) {
31
41
  // Create component if it wasn't created yet
@@ -68,9 +78,9 @@ export class DynamicCellContainerDirective {
68
78
  }
69
79
  }
70
80
  });
71
- // Mark for change detection - use detectChanges to ensure styles are applied
72
- this.componentRef.changeDetectorRef.detectChanges();
73
- this.cdr.detectChanges();
81
+ // Schedule checks without forcing nested synchronous cycles.
82
+ this.componentRef.changeDetectorRef.markForCheck();
83
+ this.cdr.markForCheck();
74
84
  }
75
85
  catch (err) {
76
86
  console.error('Failed to create component in table cell:', err);
@@ -117,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
117
127
  }], colId: [{
118
128
  type: Input
119
129
  }] } });
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jZWxsLWNvbnRhaW5lci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy1jZWxsLWNvbnRhaW5lci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsS0FBSyxFQUFzRixNQUFNLGVBQWUsQ0FBQzs7QUFPdkosTUFBTSxPQUFPLDZCQUE2QjtJQVV4QyxZQUNTLGdCQUFrQyxFQUNqQyxHQUFzQjtRQUR2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBSnhCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBS3pCLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUM3QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQ0UsSUFBSSxDQUFDLFlBQVk7WUFDakIsSUFBSSxDQUFDLGVBQWU7WUFDcEIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFDOUc7WUFDQSwrREFBK0Q7WUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM3RCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFB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cnQgeyBEaXJlY3RpdmUsIFZpZXdDb250YWluZXJSZWYsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYsIFR5cGUsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJDb25maWcgfSBmcm9tICcuL2NvbXBvbmVudC1yZW5kZXItY29uZmlnLmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjcWFDZWxsQ29udGFpbmVyXScsXG4gIGV4cG9ydEFzOiAnY3FhQ2VsbENvbnRhaW5lcidcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY0NlbGxDb250YWluZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgY29tcG9uZW50Q29uZmlnPzogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnO1xuICBASW5wdXQoKSByb3c/OiBhbnk7XG4gIEBJbnB1dCgpIGNvbHVtbj86IGFueTtcbiAgQElucHV0KCkgcm93SW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGNvbElkPzogc3RyaW5nO1xuICBcbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8YW55PjtcbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50Q29uZmlnICYmICF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmICYmXG4gICAgICB0aGlzLmNvbXBvbmVudENvbmZpZyAmJlxuICAgICAgKGNoYW5nZXNbJ2NvbXBvbmVudENvbmZpZyddIHx8IGNoYW5nZXNbJ3JvdyddIHx8IGNoYW5nZXNbJ2NvbHVtbiddIHx8IGNoYW5nZXNbJ3Jvd0luZGV4J10gfHwgY2hhbmdlc1snY29sSWQnXSlcbiAgICApIHtcbiAgICAgIC8vIFJlZnJlc2ggY29tcG9uZW50IGlucHV0cyB3aGVuIGNvbmZpZyBvciByb3cgY29udGV4dCBjaGFuZ2VzLlxuICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXRDb21wb25lbnRJbnB1dHModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXRzKS5mb3JFYWNoKGlucHV0S2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBpbnB1dEtleSBpbiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSkge1xuICAgICAgICAgICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpW2lucHV0S2V5XSA9IGlucHV0c1tpbnB1dEtleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gVXNlIGRldGVjdENoYW5nZXMgdG8gZW5zdXJlIHN0eWxlcyBhcmUgdXBkYXRlZCBpbW1lZGlhdGVseVxuICAgICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snY29tcG9uZW50Q29uZmlnJ10gJiYgdGhpcy5jb21wb25lbnRDb25maWcgJiYgIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIC8vIENyZWF0ZSBjb21wb25lbnQgaWYgaXQgd2Fzbid0IGNyZWF0ZWQgeWV0XG4gICAgICB0aGlzLmNyZWF0ZUNvbXBvbmVudCgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50Q29uZmlnIHx8ICF0aGlzLnZpZXdDb250YWluZXJSZWYpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb21wb25lbnRDbGFzcyA9IHRoaXMuZ2V0Q29tcG9uZW50Q2xhc3ModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5nZXRDb21wb25lbnRJbnB1dHModGhpcy5jb21wb25lbnRDb25maWcpO1xuICAgICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMuZ2V0Q29tcG9uZW50T3V0cHV0cyh0aGlzLmNvbXBvbmVudENvbmZpZyk7XG5cbiAgICAgIC8vIENsZWFyIGFueSBleGlzdGluZyBjb250ZW50XG4gICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgICAgLy8gQ3JlYXRlIHRoZSBjb21wb25lbnRcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRDbGFzcyk7XG4gICAgICBcbiAgICAgIC8vIFNldCBpbnB1dHMgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpb24sIGJlZm9yZSBhbnkgY2hhbmdlIGRldGVjdGlvblxuICAgICAgLy8gVXNlIE9iamVjdC5hc3NpZ24gdG8gc2V0IGFsbCBpbnB1dHMgYXQgb25jZVxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBPYmplY3Qua2V5cyhpbnB1dHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSwgaW5wdXRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIG91dHB1dHNcbiAgICAgIE9iamVjdC5rZXlzKG91dHB1dHMpLmZvckVhY2gob3V0cHV0S2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZSAmJiBvdXRwdXRLZXkgaW4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KVtvdXRwdXRLZXldO1xuICAgICAgICAgIGlmIChvdXRwdXQgJiYgdHlwZW9mIG91dHB1dC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG91dHB1dC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IG91dHB1dHNbb3V0cHV0S2V5XTtcbiAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIGhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gTWFyayBmb3IgY2hhbmdlIGRldGVjdGlvbiAtIHVzZSBkZXRlY3RDaGFuZ2VzIHRvIGVuc3VyZSBzdHlsZXMgYXJlIGFwcGxpZWRcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgY29tcG9uZW50IGluIHRhYmxlIGNlbGw6JywgZXJyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudENsYXNzKHZhbHVlOiBUeXBlPGFueT4gfCBDb21wb25lbnRSZW5kZXJDb25maWcpOiBUeXBlPGFueT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdmFsdWUuY29tcG9uZW50O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29tcG9uZW50IHZhbHVlJyk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudElucHV0cyh2YWx1ZTogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuaW5wdXRzKSB7XG4gICAgICByZXR1cm4gdmFsdWUuaW5wdXRzO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBvbmVudE91dHB1dHModmFsdWU6IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZyk6IHsgW2tleTogc3RyaW5nXTogKGV2ZW50OiBhbnkpID0+IHZvaWQgfSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUub3V0cHV0cykge1xuICAgICAgcmV0dXJuIHZhbHVlLm91dHB1dHM7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1jZWxsLWNvbnRhaW5lci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy1jZWxsLWNvbnRhaW5lci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBb0IsS0FBSyxFQUFzRixNQUFNLGVBQWUsQ0FBQzs7QUFPdkosTUFBTSxPQUFPLDZCQUE2QjtJQVd4QyxZQUNTLGdCQUFrQyxFQUNqQyxHQUFzQjtRQUR2QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2pDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBTHhCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLDJCQUFzQixHQUFHLEtBQUssQ0FBQztJQUtwQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUNFLElBQUksQ0FBQyxZQUFZO1lBQ2pCLElBQUksQ0FBQyxlQUFlO1lBQ3BCLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQzlHO1lBQ0EsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQy9CLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7WUFDbkMsSUFBSTtnQkFDRiwrREFBK0Q7Z0JBQy9E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Q1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsUUFBUSxFQUFFLGtCQUFrQjtpQkFDN0I7dUlBRVUsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBWaWV3Q29udGFpbmVyUmVmLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ29tcG9uZW50UmVmLCBUeXBlLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVuZGVyQ29uZmlnIH0gZnJvbSAnLi9jb21wb25lbnQtcmVuZGVyLWNvbmZpZy5pbnRlcmZhY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY3FhQ2VsbENvbnRhaW5lcl0nLFxuICBleHBvcnRBczogJ2NxYUNlbGxDb250YWluZXInXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNDZWxsQ29udGFpbmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGNvbXBvbmVudENvbmZpZz86IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZztcbiAgQElucHV0KCkgcm93PzogYW55O1xuICBASW5wdXQoKSBjb2x1bW4/OiBhbnk7XG4gIEBJbnB1dCgpIHJvd0luZGV4PzogbnVtYmVyO1xuICBASW5wdXQoKSBjb2xJZD86IHN0cmluZztcbiAgXG4gIHByaXZhdGUgY29tcG9uZW50UmVmPzogQ29tcG9uZW50UmVmPGFueT47XG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0FwcGx5aW5nSW5wdXRDaGFuZ2VzID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRDb25maWcgJiYgIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgJiZcbiAgICAgIHRoaXMuY29tcG9uZW50Q29uZmlnICYmXG4gICAgICAoY2hhbmdlc1snY29tcG9uZW50Q29uZmlnJ10gfHwgY2hhbmdlc1sncm93J10gfHwgY2hhbmdlc1snY29sdW1uJ10gfHwgY2hhbmdlc1sncm93SW5kZXgnXSB8fCBjaGFuZ2VzWydjb2xJZCddKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuaXNBcHBseWluZ0lucHV0Q2hhbmdlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlzQXBwbHlpbmdJbnB1dENoYW5nZXMgPSB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gUmVmcmVzaCBjb21wb25lbnQgaW5wdXRzIHdoZW4gY29uZmlnIG9yIHJvdyBjb250ZXh0IGNoYW5nZXMuXG4gICAgICAgIGNvbnN0IGlucHV0cyA9IHRoaXMuZ2V0Q29tcG9uZW50SW5wdXRzKHRoaXMuY29tcG9uZW50Q29uZmlnKTtcbiAgICAgICAgT2JqZWN0LmtleXMoaW5wdXRzKS5mb3JFYWNoKGlucHV0S2V5ID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICYmIGlucHV0S2V5IGluIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KVtpbnB1dEtleV0gPSBpbnB1dHNbaW5wdXRLZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEF2b2lkIHN5bmNocm9ub3VzIGRldGVjdENoYW5nZXMgaW5zaWRlIG5nT25DaGFuZ2VzIHRvIHByZXZlbnQgcmUtZW50cmFudCBDRCBsb29wcy5cbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pc0FwcGx5aW5nSW5wdXRDaGFuZ2VzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzWydjb21wb25lbnRDb25maWcnXSAmJiB0aGlzLmNvbXBvbmVudENvbmZpZyAmJiAhdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgLy8gQ3JlYXRlIGNvbXBvbmVudCBpZiBpdCB3YXNuJ3QgY3JlYXRlZCB5ZXRcbiAgICAgIHRoaXMuY3JlYXRlQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29tcG9uZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRDb25maWcgfHwgIXRoaXMudmlld0NvbnRhaW5lclJlZikgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudENsYXNzID0gdGhpcy5nZXRDb21wb25lbnRDbGFzcyh0aGlzLmNvbXBvbmVudENvbmZpZyk7XG4gICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmdldENvbXBvbmVudElucHV0cyh0aGlzLmNvbXBvbmVudENvbmZpZyk7XG4gICAgICBjb25zdCBvdXRwdXRzID0gdGhpcy5nZXRDb21wb25lbnRPdXRwdXRzKHRoaXMuY29tcG9uZW50Q29uZmlnKTtcblxuICAgICAgLy8gQ2xlYXIgYW55IGV4aXN0aW5nIGNvbnRlbnRcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbXBvbmVudFxuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudENsYXNzKTtcbiAgICAgIFxuICAgICAgLy8gU2V0IGlucHV0cyBpbW1lZGlhdGVseSBhZnRlciBjcmVhdGlvbiwgYmVmb3JlIGFueSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAvLyBVc2UgT2JqZWN0LmFzc2lnbiB0byBzZXQgYWxsIGlucHV0cyBhdCBvbmNlXG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICYmIE9iamVjdC5rZXlzKGlucHV0cykubGVuZ3RoID4gMCkge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLCBpbnB1dHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gb3V0cHV0c1xuICAgICAgT2JqZWN0LmtleXMob3V0cHV0cykuZm9yRWFjaChvdXRwdXRLZXkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlICYmIG91dHB1dEtleSBpbiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSkge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9ICh0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnkpW291dHB1dEtleV07XG4gICAgICAgICAgaWYgKG91dHB1dCAmJiB0eXBlb2Ygb3V0cHV0LnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgb3V0cHV0LnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gb3V0cHV0c1tvdXRwdXRLZXldO1xuICAgICAgICAgICAgICBpZiAoaGFuZGxlcikgaGFuZGxlcihldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBTY2hlZHVsZSBjaGVja3Mgd2l0aG91dCBmb3JjaW5nIG5lc3RlZCBzeW5jaHJvbm91cyBjeWNsZXMuXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBjb21wb25lbnQgaW4gdGFibGUgY2VsbDonLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50Q2xhc3ModmFsdWU6IFR5cGU8YW55PiB8IENvbXBvbmVudFJlbmRlckNvbmZpZyk6IFR5cGU8YW55PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jb21wb25lbnQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21wb25lbnQgdmFsdWUnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50SW5wdXRzKHZhbHVlOiBUeXBlPGFueT4gfCBDb21wb25lbnRSZW5kZXJDb25maWcpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pbnB1dHMpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5pbnB1dHM7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50T3V0cHV0cyh2YWx1ZTogVHlwZTxhbnk+IHwgQ29tcG9uZW50UmVuZGVyQ29uZmlnKTogeyBba2V5OiBzdHJpbmddOiAoZXZlbnQ6IGFueSkgPT4gdm9pZCB9IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5vdXRwdXRzKSB7XG4gICAgICByZXR1cm4gdmFsdWUub3V0cHV0cztcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbiJdfQ==
@@ -19,8 +19,10 @@ export class ApiMockingCardComponent {
19
19
  constructor() {
20
20
  this.title = 'API Mocking';
21
21
  this.statusLabel = 'Not configured';
22
- this.captureLabel = 'Capture API responses';
23
- this.renewLabel = 'Renew API responses';
22
+ this.captureLabel = 'Use mock API responses';
23
+ this.captureHint = 'Uses stored responses on next run. Turn on after capture completes.';
24
+ this.renewLabel = 'Renew and store API responses';
25
+ this.renewHint = 'Re-captures fresh responses on next run. Turns off Use mock.';
24
26
  /**
25
27
  * Single source of truth for the card's dual-toggle state.
26
28
  * Defaults to `false` → Capture is ON, Renew is OFF.
@@ -29,7 +31,7 @@ export class ApiMockingCardComponent {
29
31
  this.mockedApisCount = 0;
30
32
  this.totalApisCount = 0;
31
33
  this.progressPercent = 0;
32
- this.configureButtonLabel = 'Configure';
34
+ this.configureButtonLabel = 'Configure Mock APIs';
33
35
  this.editing = false;
34
36
  /**
35
37
  * Controls whether the "Mocked X of Y / progress bar / percent" block is shown.
@@ -37,6 +39,8 @@ export class ApiMockingCardComponent {
37
39
  * edit mode regardless of this flag).
38
40
  */
39
41
  this.showProgress = false;
42
+ /** Hint shown in read-only mode when no mock data exists yet (`showProgress` is false). */
43
+ this.noDataHint = 'Run this test once to capture API responses first.';
40
44
  this.configure = new EventEmitter();
41
45
  /**
42
46
  * Emitted whenever the effective `restoreMock` value changes (either row's toggle was
@@ -91,18 +95,22 @@ export class ApiMockingCardComponent {
91
95
  }
92
96
  }
93
97
  ApiMockingCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ApiMockingCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
94
- ApiMockingCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ApiMockingCardComponent, selector: "cqa-api-mocking-card", inputs: { title: "title", statusLabel: "statusLabel", captureLabel: "captureLabel", renewLabel: "renewLabel", restoreMock: "restoreMock", mockedApisCount: "mockedApisCount", totalApisCount: "totalApisCount", progressPercent: "progressPercent", summaryText: "summaryText", percentText: "percentText", configureButtonLabel: "configureButtonLabel", editing: "editing", showProgress: "showProgress" }, outputs: { configure: "configure", restoreMockChange: "restoreMockChange" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-amc-card\">\n <div class=\"cqa-amc-header\">\n <span class=\"cqa-amc-title\">{{ title }}</span>\n <span class=\"cqa-amc-status\" *ngIf=\"statusLabel\">{{ statusLabel }}</span>\n </div>\n\n <!-- Read-only rows -->\n <ng-container *ngIf=\"!editing\">\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <span class=\"cqa-amc-value\">{{ captureValueText }}</span>\n </div>\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <span class=\"cqa-amc-value\">{{ renewValueText }}</span>\n </div>\n </ng-container>\n\n <!-- Edit rows: toggles -->\n <ng-container *ngIf=\"editing\">\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <cqa-custom-toggle\n [checked]=\"captureEnabled\"\n [ariaLabel]=\"captureLabel\"\n (checkedChange)=\"onCaptureToggle($event)\">\n </cqa-custom-toggle>\n </div>\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <cqa-custom-toggle\n [checked]=\"renewEnabled\"\n [ariaLabel]=\"renewLabel\"\n (checkedChange)=\"onRenewToggle($event)\">\n </cqa-custom-toggle>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showProgress && !editing\">\n <p class=\"cqa-amc-summary\">{{ computedSummaryText }}</p>\n <div class=\"cqa-amc-progress-track\">\n <div class=\"cqa-amc-progress-fill\" [style.width]=\"progressWidth\"></div>\n </div>\n <p class=\"cqa-amc-percent\">{{ computedPercentText }}</p>\n </ng-container>\n\n <button\n *ngIf=\"!editing\"\n type=\"button\"\n class=\"cqa-amc-configure-btn\"\n (click)=\"onConfigureClick()\">\n {{ configureButtonLabel }}\n </button>\n</div>\n", components: [{ type: i1.CustomToggleComponent, selector: "cqa-custom-toggle", inputs: ["checked", "disabled", "ariaLabel"], outputs: ["checkedChange", "change"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
98
+ ApiMockingCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ApiMockingCardComponent, selector: "cqa-api-mocking-card", inputs: { title: "title", statusLabel: "statusLabel", captureLabel: "captureLabel", captureHint: "captureHint", renewLabel: "renewLabel", renewHint: "renewHint", restoreMock: "restoreMock", mockedApisCount: "mockedApisCount", totalApisCount: "totalApisCount", progressPercent: "progressPercent", summaryText: "summaryText", percentText: "percentText", configureButtonLabel: "configureButtonLabel", editing: "editing", showProgress: "showProgress", noDataHint: "noDataHint" }, outputs: { configure: "configure", restoreMockChange: "restoreMockChange" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-amc-card\">\n <div class=\"cqa-amc-header\">\n <span class=\"cqa-amc-title\">{{ title }}</span>\n <span class=\"cqa-amc-status\" *ngIf=\"!showProgress &&statusLabel\">{{ statusLabel }}</span>\n </div>\n\n <!-- Read-only rows -->\n <ng-container *ngIf=\"!editing\">\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <span class=\"cqa-amc-value\">{{ captureValueText }}</span>\n </div>\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <span class=\"cqa-amc-value\">{{ renewValueText }}</span>\n </div>\n </ng-container>\n\n <!-- Edit rows: toggles with hint text -->\n <ng-container *ngIf=\"editing\">\n <div class=\"cqa-amc-edit-block\">\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <cqa-custom-toggle\n [checked]=\"captureEnabled\"\n [ariaLabel]=\"captureLabel\"\n (checkedChange)=\"onCaptureToggle($event)\">\n </cqa-custom-toggle>\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n </div>\n <p *ngIf=\"captureHint\" class=\"cqa-amc-edit-hint\">{{ captureHint }}</p>\n </div>\n <div class=\"cqa-amc-edit-block\">\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <cqa-custom-toggle\n [checked]=\"renewEnabled\"\n [ariaLabel]=\"renewLabel\"\n (checkedChange)=\"onRenewToggle($event)\">\n </cqa-custom-toggle>\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n </div>\n <p *ngIf=\"renewHint\" class=\"cqa-amc-edit-hint\">{{ renewHint }}</p>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showProgress && !editing\">\n <p class=\"cqa-amc-summary\">{{ computedSummaryText }}</p>\n <div class=\"cqa-amc-progress-track\">\n <div class=\"cqa-amc-progress-fill\" [style.width]=\"progressWidth\"></div>\n </div>\n <p class=\"cqa-amc-percent\">{{ computedPercentText }}</p>\n </ng-container>\n\n <!-- Hint: no mock data yet \u2014 nudge the user to run the test first -->\n <p *ngIf=\"!showProgress && !editing\" class=\"cqa-amc-no-data-hint\">{{ noDataHint }}</p>\n\n <button\n *ngIf=\"!editing\"\n [disabled]=\"!showProgress\"\n type=\"button\"\n class=\"cqa-amc-configure-btn\"\n (click)=\"onConfigureClick()\">\n {{ configureButtonLabel }}\n </button>\n</div>\n", components: [{ type: i1.CustomToggleComponent, selector: "cqa-custom-toggle", inputs: ["checked", "disabled", "ariaLabel"], outputs: ["checkedChange", "change"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
95
99
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ApiMockingCardComponent, decorators: [{
96
100
  type: Component,
97
- args: [{ selector: 'cqa-api-mocking-card', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-amc-card\">\n <div class=\"cqa-amc-header\">\n <span class=\"cqa-amc-title\">{{ title }}</span>\n <span class=\"cqa-amc-status\" *ngIf=\"statusLabel\">{{ statusLabel }}</span>\n </div>\n\n <!-- Read-only rows -->\n <ng-container *ngIf=\"!editing\">\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <span class=\"cqa-amc-value\">{{ captureValueText }}</span>\n </div>\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <span class=\"cqa-amc-value\">{{ renewValueText }}</span>\n </div>\n </ng-container>\n\n <!-- Edit rows: toggles -->\n <ng-container *ngIf=\"editing\">\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <cqa-custom-toggle\n [checked]=\"captureEnabled\"\n [ariaLabel]=\"captureLabel\"\n (checkedChange)=\"onCaptureToggle($event)\">\n </cqa-custom-toggle>\n </div>\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <cqa-custom-toggle\n [checked]=\"renewEnabled\"\n [ariaLabel]=\"renewLabel\"\n (checkedChange)=\"onRenewToggle($event)\">\n </cqa-custom-toggle>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showProgress && !editing\">\n <p class=\"cqa-amc-summary\">{{ computedSummaryText }}</p>\n <div class=\"cqa-amc-progress-track\">\n <div class=\"cqa-amc-progress-fill\" [style.width]=\"progressWidth\"></div>\n </div>\n <p class=\"cqa-amc-percent\">{{ computedPercentText }}</p>\n </ng-container>\n\n <button\n *ngIf=\"!editing\"\n type=\"button\"\n class=\"cqa-amc-configure-btn\"\n (click)=\"onConfigureClick()\">\n {{ configureButtonLabel }}\n </button>\n</div>\n", styles: [] }]
101
+ args: [{ selector: 'cqa-api-mocking-card', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-amc-card\">\n <div class=\"cqa-amc-header\">\n <span class=\"cqa-amc-title\">{{ title }}</span>\n <span class=\"cqa-amc-status\" *ngIf=\"!showProgress &&statusLabel\">{{ statusLabel }}</span>\n </div>\n\n <!-- Read-only rows -->\n <ng-container *ngIf=\"!editing\">\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n <span class=\"cqa-amc-value\">{{ captureValueText }}</span>\n </div>\n <div class=\"cqa-amc-row\">\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n <span class=\"cqa-amc-value\">{{ renewValueText }}</span>\n </div>\n </ng-container>\n\n <!-- Edit rows: toggles with hint text -->\n <ng-container *ngIf=\"editing\">\n <div class=\"cqa-amc-edit-block\">\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <cqa-custom-toggle\n [checked]=\"captureEnabled\"\n [ariaLabel]=\"captureLabel\"\n (checkedChange)=\"onCaptureToggle($event)\">\n </cqa-custom-toggle>\n <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n </div>\n <p *ngIf=\"captureHint\" class=\"cqa-amc-edit-hint\">{{ captureHint }}</p>\n </div>\n <div class=\"cqa-amc-edit-block\">\n <div class=\"cqa-amc-row cqa-amc-row--edit\">\n <cqa-custom-toggle\n [checked]=\"renewEnabled\"\n [ariaLabel]=\"renewLabel\"\n (checkedChange)=\"onRenewToggle($event)\">\n </cqa-custom-toggle>\n <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n </div>\n <p *ngIf=\"renewHint\" class=\"cqa-amc-edit-hint\">{{ renewHint }}</p>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"showProgress && !editing\">\n <p class=\"cqa-amc-summary\">{{ computedSummaryText }}</p>\n <div class=\"cqa-amc-progress-track\">\n <div class=\"cqa-amc-progress-fill\" [style.width]=\"progressWidth\"></div>\n </div>\n <p class=\"cqa-amc-percent\">{{ computedPercentText }}</p>\n </ng-container>\n\n <!-- Hint: no mock data yet \u2014 nudge the user to run the test first -->\n <p *ngIf=\"!showProgress && !editing\" class=\"cqa-amc-no-data-hint\">{{ noDataHint }}</p>\n\n <button\n *ngIf=\"!editing\"\n [disabled]=\"!showProgress\"\n type=\"button\"\n class=\"cqa-amc-configure-btn\"\n (click)=\"onConfigureClick()\">\n {{ configureButtonLabel }}\n </button>\n</div>\n", styles: [] }]
98
102
  }], propDecorators: { title: [{
99
103
  type: Input
100
104
  }], statusLabel: [{
101
105
  type: Input
102
106
  }], captureLabel: [{
103
107
  type: Input
108
+ }], captureHint: [{
109
+ type: Input
104
110
  }], renewLabel: [{
105
111
  type: Input
112
+ }], renewHint: [{
113
+ type: Input
106
114
  }], restoreMock: [{
107
115
  type: Input
108
116
  }], mockedApisCount: [{
@@ -121,9 +129,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
121
129
  type: Input
122
130
  }], showProgress: [{
123
131
  type: Input
132
+ }], noDataHint: [{
133
+ type: Input
124
134
  }], configure: [{
125
135
  type: Output
126
136
  }], restoreMockChange: [{
127
137
  type: Output
128
138
  }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1tb2NraW5nLWNhcmQvYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1tb2NraW5nLWNhcmQvYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBWWhHOzs7Ozs7Ozs7Ozs7R0FZRztBQVVILE1BQU0sT0FBTyx1QkFBdUI7SUFUcEM7UUFVVyxVQUFLLEdBQVcsYUFBYSxDQUFDO1FBQzlCLGdCQUFXLEdBQVcsZ0JBQWdCLENBQUM7UUFFdkMsaUJBQVksR0FBVyx1QkFBdUIsQ0FBQztRQUMvQyxlQUFVLEdBQVcscUJBQXFCLENBQUM7UUFFcEQ7OztXQUdHO1FBQ00sZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0Isb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFDNUIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0Isb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFLNUIseUJBQW9CLEdBQVcsV0FBVyxDQUFDO1FBQzNDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFbEM7Ozs7V0FJRztRQUNNLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTdCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQy9DOzs7O1dBSUc7UUFDTyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0tBa0QzRDtJQWhEQywyRkFBMkY7SUFDM0YsSUFBSSxZQUFZLEtBQWMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN4RCxJQUFJLGNBQWMsS0FBYyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsSUFBSSxjQUFjLEtBQWEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEUsSUFBSSxnQkFBZ0IsS0FBYSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUUxRSxJQUFJLG1CQUFtQjtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxPQUFPLElBQUksQ0FBQyxjQUFjLG1CQUFtQixDQUFDO0lBQzlFLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxvQ0FBb0MsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sR0FBRyxPQUFPLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxLQUFjO1FBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBYztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFhO1FBQ2xDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O29IQXJGVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qixna0JDbENwQyw4MERBc0RBOzJGRHBCYSx1QkFBdUI7a0JBVG5DLFNBQVM7K0JBQ0Usc0JBQXNCLFFBSzFCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxtQkFDYix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFPRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBTUcsaUJBQWlCO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogTGVnYWN5IHRvZ2dsZS1jaGFuZ2UgcGF5bG9hZCBrZXB0IGZvciBiYWNrLWNvbXBhdCB3aXRoIGNvbnN1bWVycyB0aGF0IGhhdmVuJ3QgbWlncmF0ZWRcbiAqIHRvIGByZXN0b3JlTW9ja0NoYW5nZWAgeWV0LiBga2V5YCBpZGVudGlmaWVzIHdoaWNoIHJvdyB3YXMgdG9nZ2xlZDsgYHZhbHVlYCBpcyB0aGUgbmV3XG4gKiBjaGVja2VkIHN0YXRlIG9mIHRoYXQgcm93LiBOZXcgY29kZSBzaG91bGQgbGlzdGVuIHRvIGByZXN0b3JlTW9ja0NoYW5nZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlNb2NraW5nQ2FyZFRvZ2dsZUNoYW5nZSB7XG4gIGtleTogJ2NhcHR1cmVBcGlSZXNwb25zZXMnIHwgJ3JlbmV3QXBpUmVzcG9uc2VzJztcbiAgdmFsdWU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRHVhbC1tb2RlIGNhcmQgc3VtbWFyaXNpbmcgdGhlIEFQSSBtb2NraW5nIGNvbmZpZ3VyYXRpb24gb2YgYSB0ZXN0IGNhc2UuXG4gKlxuICogVGhlIGNhcmQgc3VyZmFjZXMgKipvbmUgYm9vbGVhbiBjaG9pY2UqKiDigJQgYHJlc3RvcmVNb2NrYCDigJQgYXMgdHdvIG11dHVhbGx5LWV4Y2x1c2l2ZSByb3dzXG4gKiBsYWJlbGxlZCBcIkNhcHR1cmUgQVBJIHJlc3BvbnNlc1wiIGFuZCBcIlJlbmV3IEFQSSByZXNwb25zZXNcIjpcbiAqXG4gKiAgIHJlc3RvcmVNb2NrID09PSB0cnVlICAg4oaSICAgUmVuZXcgPSBPTiwgIENhcHR1cmUgPSBPRkZcbiAqICAgcmVzdG9yZU1vY2sgPT09IGZhbHNlICDihpIgICBSZW5ldyA9IE9GRiwgQ2FwdHVyZSA9IE9OXG4gKlxuICogSW4gcmVhZC1vbmx5IG1vZGUgYm90aCByb3dzIHNob3cgYSB2YWx1ZSB0ZXh0IChcIk9uXCIvXCJPZmZcIikgZGVyaXZlZCBmcm9tIGByZXN0b3JlTW9ja2AuXG4gKiBJbiBlZGl0IG1vZGUgYm90aCByb3dzIHJlbmRlciBhIHRvZ2dsZTsgaW50ZXJhY3Rpbmcgd2l0aCBlaXRoZXIgb25lIGZsaXBzIGByZXN0b3JlTW9ja2BcbiAqIGFuZCB0aGUgY2FyZCBlbWl0cyBgcmVzdG9yZU1vY2tDaGFuZ2VgIHNvIHRoZSBwYXJlbnQgY2FuIHBlcnNpc3QgdGhlIG5ldyB2YWx1ZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWFwaS1tb2NraW5nLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIC8vIFN0eWxlcyBsaXZlIGluIHNyYy9saWIvc3R5bGVzL3RhaWx3aW5kLmNzcyAodGhlIGxpYiBzaGlwcyBhIHNpbmdsZSBjb21waWxlZCBzdHlsZXNoZWV0KTtcbiAgLy8gcGVyLWNvbXBvbmVudCAuc2NzcyBmaWxlcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGUgbmctcGFja2FnciBidWlsZCBmb3IgdGhpcyBsaWIuXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwaU1vY2tpbmdDYXJkQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICdBUEkgTW9ja2luZyc7XG4gIEBJbnB1dCgpIHN0YXR1c0xhYmVsOiBzdHJpbmcgPSAnTm90IGNvbmZpZ3VyZWQnO1xuXG4gIEBJbnB1dCgpIGNhcHR1cmVMYWJlbDogc3RyaW5nID0gJ0NhcHR1cmUgQVBJIHJlc3BvbnNlcyc7XG4gIEBJbnB1dCgpIHJlbmV3TGFiZWw6IHN0cmluZyA9ICdSZW5ldyBBUEkgcmVzcG9uc2VzJztcblxuICAvKipcbiAgICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNhcmQncyBkdWFsLXRvZ2dsZSBzdGF0ZS5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYCDihpIgQ2FwdHVyZSBpcyBPTiwgUmVuZXcgaXMgT0ZGLlxuICAgKi9cbiAgQElucHV0KCkgcmVzdG9yZU1vY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBtb2NrZWRBcGlzQ291bnQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHRvdGFsQXBpc0NvdW50OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwcm9ncmVzc1BlcmNlbnQ6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgc3VtbWFyeVRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBlcmNlbnRUZXh0Pzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGNvbmZpZ3VyZUJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnQ29uZmlndXJlJztcbiAgQElucHV0KCkgZWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBcIk1vY2tlZCBYIG9mIFkgLyBwcm9ncmVzcyBiYXIgLyBwZXJjZW50XCIgYmxvY2sgaXMgc2hvd24uXG4gICAqIEhpZGRlbiB3aGVuIHRoZSB0ZXN0IGNhc2UgaGFzIG5vIGNhcHR1cmVkIG1vY2sgc3VtbWFyeSB5ZXQgKGFuZCBhbHdheXMgaGlkZGVuIGluXG4gICAqIGVkaXQgbW9kZSByZWdhcmRsZXNzIG9mIHRoaXMgZmxhZykuXG4gICAqL1xuICBASW5wdXQoKSBzaG93UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgY29uZmlndXJlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuZXZlciB0aGUgZWZmZWN0aXZlIGByZXN0b3JlTW9ja2AgdmFsdWUgY2hhbmdlcyAoZWl0aGVyIHJvdydzIHRvZ2dsZSB3YXNcbiAgICogaW50ZXJhY3RlZCB3aXRoIGluIGVkaXQgbW9kZSkuIFBhcmVudCBjb21wb25lbnRzIHNob3VsZCBwZXJzaXN0IHRoaXMgdmFsdWUg4oCUIGUuZy4gdW5kZXJcbiAgICogYHRlc3RDYXNlLm1vY2tBcGlTZXR0aW5ncy5yZXN0b3JlTW9ja2AuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVzdG9yZU1vY2tDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLy8gRGVyaXZlZCBwZXItcm93IHN0YXRlICh0ZW1wbGF0ZSBiaW5kcyB0aGVzZSBkaXJlY3RseSBzbyB0aGUgdHdvIHJvd3Mgc3RheSBpbiBsb2NrLXN0ZXApLlxuICBnZXQgcmVuZXdFbmFibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5yZXN0b3JlTW9jazsgfVxuICBnZXQgY2FwdHVyZUVuYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiAhdGhpcy5yZXN0b3JlTW9jazsgfVxuICBnZXQgcmVuZXdWYWx1ZVRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucmVzdG9yZU1vY2sgPyAnT24nIDogJ09mZic7IH1cbiAgZ2V0IGNhcHR1cmVWYWx1ZVRleHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMucmVzdG9yZU1vY2sgPyAnT2ZmJyA6ICdPbic7IH1cblxuICBnZXQgY29tcHV0ZWRTdW1tYXJ5VGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnN1bW1hcnlUZXh0KSByZXR1cm4gdGhpcy5zdW1tYXJ5VGV4dDtcbiAgICByZXR1cm4gYCR7dGhpcy5tb2NrZWRBcGlzQ291bnR9IG9mICR7dGhpcy50b3RhbEFwaXNDb3VudH0gQVBJcyBzZXQgdG8gbW9ja2A7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRQZXJjZW50VGV4dCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnBlcmNlbnRUZXh0KSByZXR1cm4gdGhpcy5wZXJjZW50VGV4dDtcbiAgICByZXR1cm4gYCR7dGhpcy5wcm9ncmVzc1BlcmNlbnR9JSBvZiBjYWxscyB3aWxsIHVzZSBtb2NrIHJlc3BvbnNlc2A7XG4gIH1cblxuICBnZXQgcHJvZ3Jlc3NXaWR0aCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIE51bWJlcih0aGlzLnByb2dyZXNzUGVyY2VudCkgfHwgMCkpO1xuICAgIHJldHVybiBgJHtjbGFtcGVkfSVgO1xuICB9XG5cbiAgb25Db25maWd1cmVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyZS5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlciBpbnRlcmFjdGVkIHdpdGggdGhlIFwiUmVuZXcgQVBJIHJlc3BvbnNlc1wiIHRvZ2dsZSBpbiBlZGl0IG1vZGUuXG4gICAqIFJlbmV3IE9OICDihpIgcmVzdG9yZU1vY2sgPSB0cnVlICAoQ2FwdHVyZSBPRkYpLlxuICAgKiBSZW5ldyBPRkYg4oaSIHJlc3RvcmVNb2NrID0gZmFsc2UgKENhcHR1cmUgT04g4oCUIG11dHVhbCBleGNsdXNpdml0eSkuXG4gICAqL1xuICBvblJlbmV3VG9nZ2xlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZXRSZXN0b3JlTW9jayh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlciBpbnRlcmFjdGVkIHdpdGggdGhlIFwiQ2FwdHVyZSBBUEkgcmVzcG9uc2VzXCIgdG9nZ2xlIGluIGVkaXQgbW9kZS5cbiAgICogQ2FwdHVyZSBPTiAg4oaSIHJlc3RvcmVNb2NrID0gZmFsc2UgKFJlbmV3IE9GRikuXG4gICAqIENhcHR1cmUgT0ZGIOKGkiByZXN0b3JlTW9jayA9IHRydWUgIChSZW5ldyBPTiDigJQgbXV0dWFsIGV4Y2x1c2l2aXR5KS5cbiAgICovXG4gIG9uQ2FwdHVyZVRvZ2dsZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2V0UmVzdG9yZU1vY2soIXZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVzdG9yZU1vY2sobmV4dDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc3RvcmVNb2NrID09PSBuZXh0KSByZXR1cm47XG4gICAgdGhpcy5yZXN0b3JlTW9jayA9IG5leHQ7XG4gICAgdGhpcy5yZXN0b3JlTW9ja0NoYW5nZS5lbWl0KG5leHQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWFtYy1jYXJkXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtYW1jLWhlYWRlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFtYy10aXRsZVwiPnt7IHRpdGxlIH19PC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFtYy1zdGF0dXNcIiAqbmdJZj1cInN0YXR1c0xhYmVsXCI+e3sgc3RhdHVzTGFiZWwgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmVhZC1vbmx5IHJvd3MgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLXJvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLWxhYmVsXCI+e3sgY2FwdHVyZUxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLXZhbHVlXCI+e3sgY2FwdHVyZVZhbHVlVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWFtYy1yb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFtYy1sYWJlbFwiPnt7IHJlbmV3TGFiZWwgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1hbWMtdmFsdWVcIj57eyByZW5ld1ZhbHVlVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBFZGl0IHJvd3M6IHRvZ2dsZXMgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1hbWMtcm93IGNxYS1hbWMtcm93LS1lZGl0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1hbWMtbGFiZWxcIj57eyBjYXB0dXJlTGFiZWwgfX08L3NwYW4+XG4gICAgICA8Y3FhLWN1c3RvbS10b2dnbGVcbiAgICAgICAgW2NoZWNrZWRdPVwiY2FwdHVyZUVuYWJsZWRcIlxuICAgICAgICBbYXJpYUxhYmVsXT1cImNhcHR1cmVMYWJlbFwiXG4gICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uQ2FwdHVyZVRvZ2dsZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20tdG9nZ2xlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLXJvdyBjcWEtYW1jLXJvdy0tZWRpdFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLWxhYmVsXCI+e3sgcmVuZXdMYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDxjcWEtY3VzdG9tLXRvZ2dsZVxuICAgICAgICBbY2hlY2tlZF09XCJyZW5ld0VuYWJsZWRcIlxuICAgICAgICBbYXJpYUxhYmVsXT1cInJlbmV3TGFiZWxcIlxuICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJvblJlbmV3VG9nZ2xlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UHJvZ3Jlc3MgJiYgIWVkaXRpbmdcIj5cbiAgICA8cCBjbGFzcz1cImNxYS1hbWMtc3VtbWFyeVwiPnt7IGNvbXB1dGVkU3VtbWFyeVRleHQgfX08L3A+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1hbWMtcHJvZ3Jlc3MtdHJhY2tcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLXByb2dyZXNzLWZpbGxcIiBbc3R5bGUud2lkdGhdPVwicHJvZ3Jlc3NXaWR0aFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxwIGNsYXNzPVwiY3FhLWFtYy1wZXJjZW50XCI+e3sgY29tcHV0ZWRQZXJjZW50VGV4dCB9fTwvcD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiIWVkaXRpbmdcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIGNsYXNzPVwiY3FhLWFtYy1jb25maWd1cmUtYnRuXCJcbiAgICAoY2xpY2spPVwib25Db25maWd1cmVDbGljaygpXCI+XG4gICAge3sgY29uZmlndXJlQnV0dG9uTGFiZWwgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1tb2NraW5nLWNhcmQvYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2FwaS1tb2NraW5nLWNhcmQvYXBpLW1vY2tpbmctY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBWWhHOzs7Ozs7Ozs7Ozs7R0FZRztBQVVILE1BQU0sT0FBTyx1QkFBdUI7SUFUcEM7UUFVVyxVQUFLLEdBQVcsYUFBYSxDQUFDO1FBQzlCLGdCQUFXLEdBQVcsZ0JBQWdCLENBQUM7UUFFdkMsaUJBQVksR0FBVyx3QkFBd0IsQ0FBQztRQUNoRCxnQkFBVyxHQUFXLHFFQUFxRSxDQUFDO1FBQzVGLGVBQVUsR0FBVywrQkFBK0IsQ0FBQztRQUNyRCxjQUFTLEdBQVcsOERBQThELENBQUM7UUFFNUY7OztXQUdHO1FBQ00sZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0Isb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFDNUIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0Isb0JBQWUsR0FBVyxDQUFDLENBQUM7UUFLNUIseUJBQW9CLEdBQVcscUJBQXFCLENBQUM7UUFDckQsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUVsQzs7OztXQUlHO1FBQ00saUJBQVksR0FBWSxLQUFLLENBQUM7UUFFdkMsMkZBQTJGO1FBQ2xGLGVBQVUsR0FBVyxvREFBb0QsQ0FBQztRQUV6RSxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUMvQzs7OztXQUlH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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIExlZ2FjeSB0b2dnbGUtY2hhbmdlIHBheWxvYWQga2VwdCBmb3IgYmFjay1jb21wYXQgd2l0aCBjb25zdW1lcnMgdGhhdCBoYXZlbid0IG1pZ3JhdGVkXG4gKiB0byBgcmVzdG9yZU1vY2tDaGFuZ2VgIHlldC4gYGtleWAgaWRlbnRpZmllcyB3aGljaCByb3cgd2FzIHRvZ2dsZWQ7IGB2YWx1ZWAgaXMgdGhlIG5ld1xuICogY2hlY2tlZCBzdGF0ZSBvZiB0aGF0IHJvdy4gTmV3IGNvZGUgc2hvdWxkIGxpc3RlbiB0byBgcmVzdG9yZU1vY2tDaGFuZ2VgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpTW9ja2luZ0NhcmRUb2dnbGVDaGFuZ2Uge1xuICBrZXk6ICdjYXB0dXJlQXBpUmVzcG9uc2VzJyB8ICdyZW5ld0FwaVJlc3BvbnNlcyc7XG4gIHZhbHVlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIER1YWwtbW9kZSBjYXJkIHN1bW1hcmlzaW5nIHRoZSBBUEkgbW9ja2luZyBjb25maWd1cmF0aW9uIG9mIGEgdGVzdCBjYXNlLlxuICpcbiAqIFRoZSBjYXJkIHN1cmZhY2VzICoqb25lIGJvb2xlYW4gY2hvaWNlKiog4oCUIGByZXN0b3JlTW9ja2Ag4oCUIGFzIHR3byBtdXR1YWxseS1leGNsdXNpdmUgcm93c1xuICogbGFiZWxsZWQgXCJDYXB0dXJlIEFQSSByZXNwb25zZXNcIiBhbmQgXCJSZW5ldyBBUEkgcmVzcG9uc2VzXCI6XG4gKlxuICogICByZXN0b3JlTW9jayA9PT0gdHJ1ZSAgIOKGkiAgIFJlbmV3ID0gT04sICBDYXB0dXJlID0gT0ZGXG4gKiAgIHJlc3RvcmVNb2NrID09PSBmYWxzZSAg4oaSICAgUmVuZXcgPSBPRkYsIENhcHR1cmUgPSBPTlxuICpcbiAqIEluIHJlYWQtb25seSBtb2RlIGJvdGggcm93cyBzaG93IGEgdmFsdWUgdGV4dCAoXCJPblwiL1wiT2ZmXCIpIGRlcml2ZWQgZnJvbSBgcmVzdG9yZU1vY2tgLlxuICogSW4gZWRpdCBtb2RlIGJvdGggcm93cyByZW5kZXIgYSB0b2dnbGU7IGludGVyYWN0aW5nIHdpdGggZWl0aGVyIG9uZSBmbGlwcyBgcmVzdG9yZU1vY2tgXG4gKiBhbmQgdGhlIGNhcmQgZW1pdHMgYHJlc3RvcmVNb2NrQ2hhbmdlYCBzbyB0aGUgcGFyZW50IGNhbiBwZXJzaXN0IHRoZSBuZXcgdmFsdWUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1hcGktbW9ja2luZy1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwaS1tb2NraW5nLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICAvLyBTdHlsZXMgbGl2ZSBpbiBzcmMvbGliL3N0eWxlcy90YWlsd2luZC5jc3MgKHRoZSBsaWIgc2hpcHMgYSBzaW5nbGUgY29tcGlsZWQgc3R5bGVzaGVldCk7XG4gIC8vIHBlci1jb21wb25lbnQgLnNjc3MgZmlsZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIG5nLXBhY2thZ3IgYnVpbGQgZm9yIHRoaXMgbGliLlxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcGlNb2NraW5nQ2FyZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnQVBJIE1vY2tpbmcnO1xuICBASW5wdXQoKSBzdGF0dXNMYWJlbDogc3RyaW5nID0gJ05vdCBjb25maWd1cmVkJztcblxuICBASW5wdXQoKSBjYXB0dXJlTGFiZWw6IHN0cmluZyA9ICdVc2UgbW9jayBBUEkgcmVzcG9uc2VzJztcbiAgQElucHV0KCkgY2FwdHVyZUhpbnQ6IHN0cmluZyA9ICdVc2VzIHN0b3JlZCByZXNwb25zZXMgb24gbmV4dCBydW4uIFR1cm4gb24gYWZ0ZXIgY2FwdHVyZSBjb21wbGV0ZXMuJztcbiAgQElucHV0KCkgcmVuZXdMYWJlbDogc3RyaW5nID0gJ1JlbmV3IGFuZCBzdG9yZSBBUEkgcmVzcG9uc2VzJztcbiAgQElucHV0KCkgcmVuZXdIaW50OiBzdHJpbmcgPSAnUmUtY2FwdHVyZXMgZnJlc2ggcmVzcG9uc2VzIG9uIG5leHQgcnVuLiBUdXJucyBvZmYgVXNlIG1vY2suJztcblxuICAvKipcbiAgICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNhcmQncyBkdWFsLXRvZ2dsZSBzdGF0ZS5cbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYCDihpIgQ2FwdHVyZSBpcyBPTiwgUmVuZXcgaXMgT0ZGLlxuICAgKi9cbiAgQElucHV0KCkgcmVzdG9yZU1vY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBtb2NrZWRBcGlzQ291bnQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHRvdGFsQXBpc0NvdW50OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwcm9ncmVzc1BlcmNlbnQ6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgc3VtbWFyeVRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBlcmNlbnRUZXh0Pzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGNvbmZpZ3VyZUJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnQ29uZmlndXJlIE1vY2sgQVBJcyc7XG4gIEBJbnB1dCgpIGVkaXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciB0aGUgXCJNb2NrZWQgWCBvZiBZIC8gcHJvZ3Jlc3MgYmFyIC8gcGVyY2VudFwiIGJsb2NrIGlzIHNob3duLlxuICAgKiBIaWRkZW4gd2hlbiB0aGUgdGVzdCBjYXNlIGhhcyBubyBjYXB0dXJlZCBtb2NrIHN1bW1hcnkgeWV0IChhbmQgYWx3YXlzIGhpZGRlbiBpblxuICAgKiBlZGl0IG1vZGUgcmVnYXJkbGVzcyBvZiB0aGlzIGZsYWcpLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1Byb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEhpbnQgc2hvd24gaW4gcmVhZC1vbmx5IG1vZGUgd2hlbiBubyBtb2NrIGRhdGEgZXhpc3RzIHlldCAoYHNob3dQcm9ncmVzc2AgaXMgZmFsc2UpLiAqL1xuICBASW5wdXQoKSBub0RhdGFIaW50OiBzdHJpbmcgPSAnUnVuIHRoaXMgdGVzdCBvbmNlIHRvIGNhcHR1cmUgQVBJIHJlc3BvbnNlcyBmaXJzdC4nO1xuXG4gIEBPdXRwdXQoKSBjb25maWd1cmUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW5ldmVyIHRoZSBlZmZlY3RpdmUgYHJlc3RvcmVNb2NrYCB2YWx1ZSBjaGFuZ2VzIChlaXRoZXIgcm93J3MgdG9nZ2xlIHdhc1xuICAgKiBpbnRlcmFjdGVkIHdpdGggaW4gZWRpdCBtb2RlKS4gUGFyZW50IGNvbXBvbmVudHMgc2hvdWxkIHBlcnNpc3QgdGhpcyB2YWx1ZSDigJQgZS5nLiB1bmRlclxuICAgKiBgdGVzdENhc2UubW9ja0FwaVNldHRpbmdzLnJlc3RvcmVNb2NrYC5cbiAgICovXG4gIEBPdXRwdXQoKSByZXN0b3JlTW9ja0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvLyBEZXJpdmVkIHBlci1yb3cgc3RhdGUgKHRlbXBsYXRlIGJpbmRzIHRoZXNlIGRpcmVjdGx5IHNvIHRoZSB0d28gcm93cyBzdGF5IGluIGxvY2stc3RlcCkuXG4gIGdldCByZW5ld0VuYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnJlc3RvcmVNb2NrOyB9XG4gIGdldCBjYXB0dXJlRW5hYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuICF0aGlzLnJlc3RvcmVNb2NrOyB9XG4gIGdldCByZW5ld1ZhbHVlVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5yZXN0b3JlTW9jayA/ICdPbicgOiAnT2ZmJzsgfVxuICBnZXQgY2FwdHVyZVZhbHVlVGV4dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5yZXN0b3JlTW9jayA/ICdPZmYnIDogJ09uJzsgfVxuXG4gIGdldCBjb21wdXRlZFN1bW1hcnlUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc3VtbWFyeVRleHQpIHJldHVybiB0aGlzLnN1bW1hcnlUZXh0O1xuICAgIHJldHVybiBgJHt0aGlzLm1vY2tlZEFwaXNDb3VudH0gb2YgJHt0aGlzLnRvdGFsQXBpc0NvdW50fSBBUElzIHNldCB0byBtb2NrYDtcbiAgfVxuXG4gIGdldCBjb21wdXRlZFBlcmNlbnRUZXh0KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucGVyY2VudFRleHQpIHJldHVybiB0aGlzLnBlcmNlbnRUZXh0O1xuICAgIHJldHVybiBgJHt0aGlzLnByb2dyZXNzUGVyY2VudH0lIG9mIGNhbGxzIHdpbGwgdXNlIG1vY2sgcmVzcG9uc2VzYDtcbiAgfVxuXG4gIGdldCBwcm9ncmVzc1dpZHRoKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgTnVtYmVyKHRoaXMucHJvZ3Jlc3NQZXJjZW50KSB8fCAwKSk7XG4gICAgcmV0dXJuIGAke2NsYW1wZWR9JWA7XG4gIH1cblxuICBvbkNvbmZpZ3VyZUNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJlLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VyIGludGVyYWN0ZWQgd2l0aCB0aGUgXCJSZW5ldyBBUEkgcmVzcG9uc2VzXCIgdG9nZ2xlIGluIGVkaXQgbW9kZS5cbiAgICogUmVuZXcgT04gIOKGkiByZXN0b3JlTW9jayA9IHRydWUgIChDYXB0dXJlIE9GRikuXG4gICAqIFJlbmV3IE9GRiDihpIgcmVzdG9yZU1vY2sgPSBmYWxzZSAoQ2FwdHVyZSBPTiDigJQgbXV0dWFsIGV4Y2x1c2l2aXR5KS5cbiAgICovXG4gIG9uUmVuZXdUb2dnbGUodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldFJlc3RvcmVNb2NrKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VyIGludGVyYWN0ZWQgd2l0aCB0aGUgXCJDYXB0dXJlIEFQSSByZXNwb25zZXNcIiB0b2dnbGUgaW4gZWRpdCBtb2RlLlxuICAgKiBDYXB0dXJlIE9OICDihpIgcmVzdG9yZU1vY2sgPSBmYWxzZSAoUmVuZXcgT0ZGKS5cbiAgICogQ2FwdHVyZSBPRkYg4oaSIHJlc3RvcmVNb2NrID0gdHJ1ZSAgKFJlbmV3IE9OIOKAlCBtdXR1YWwgZXhjbHVzaXZpdHkpLlxuICAgKi9cbiAgb25DYXB0dXJlVG9nZ2xlKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zZXRSZXN0b3JlTW9jayghdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZXN0b3JlTW9jayhuZXh0OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzdG9yZU1vY2sgPT09IG5leHQpIHJldHVybjtcbiAgICB0aGlzLnJlc3RvcmVNb2NrID0gbmV4dDtcbiAgICB0aGlzLnJlc3RvcmVNb2NrQ2hhbmdlLmVtaXQobmV4dCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtYW1jLWNhcmRcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS1hbWMtaGVhZGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLXRpdGxlXCI+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLXN0YXR1c1wiICpuZ0lmPVwiIXNob3dQcm9ncmVzcyAmJnN0YXR1c0xhYmVsXCI+e3sgc3RhdHVzTGFiZWwgfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmVhZC1vbmx5IHJvd3MgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLXJvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLWxhYmVsXCI+e3sgY2FwdHVyZUxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLXZhbHVlXCI+e3sgY2FwdHVyZVZhbHVlVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWFtYy1yb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFtYy1sYWJlbFwiPnt7IHJlbmV3TGFiZWwgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS1hbWMtdmFsdWVcIj57eyByZW5ld1ZhbHVlVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBFZGl0IHJvd3M6IHRvZ2dsZXMgd2l0aCBoaW50IHRleHQgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1hbWMtZWRpdC1ibG9ja1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1hbWMtcm93IGNxYS1hbWMtcm93LS1lZGl0XCI+XG4gICAgICAgIDxjcWEtY3VzdG9tLXRvZ2dsZVxuICAgICAgICAgIFtjaGVja2VkXT1cImNhcHR1cmVFbmFibGVkXCJcbiAgICAgICAgICBbYXJpYUxhYmVsXT1cImNhcHR1cmVMYWJlbFwiXG4gICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25DYXB0dXJlVG9nZ2xlKCRldmVudClcIj5cbiAgICAgICAgPC9jcWEtY3VzdG9tLXRvZ2dsZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYW1jLWxhYmVsXCI+e3sgY2FwdHVyZUxhYmVsIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8cCAqbmdJZj1cImNhcHR1cmVIaW50XCIgY2xhc3M9XCJjcWEtYW1jLWVkaXQtaGludFwiPnt7IGNhcHR1cmVIaW50IH19PC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLWVkaXQtYmxvY2tcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYW1jLXJvdyBjcWEtYW1jLXJvdy0tZWRpdFwiPlxuICAgICAgICA8Y3FhLWN1c3RvbS10b2dnbGVcbiAgICAgICAgICBbY2hlY2tlZF09XCJyZW5ld0VuYWJsZWRcIlxuICAgICAgICAgIFthcmlhTGFiZWxdPVwicmVuZXdMYWJlbFwiXG4gICAgICAgICAgKGNoZWNrZWRDaGFuZ2UpPVwib25SZW5ld1RvZ2dsZSgkZXZlbnQpXCI+XG4gICAgICAgIDwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFtYy1sYWJlbFwiPnt7IHJlbmV3TGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwICpuZ0lmPVwicmVuZXdIaW50XCIgY2xhc3M9XCJjcWEtYW1jLWVkaXQtaGludFwiPnt7IHJlbmV3SGludCB9fTwvcD5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQcm9ncmVzcyAmJiAhZWRpdGluZ1wiPlxuICAgIDxwIGNsYXNzPVwiY3FhLWFtYy1zdW1tYXJ5XCI+e3sgY29tcHV0ZWRTdW1tYXJ5VGV4dCB9fTwvcD5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWFtYy1wcm9ncmVzcy10cmFja1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1hbWMtcHJvZ3Jlc3MtZmlsbFwiIFtzdHlsZS53aWR0aF09XCJwcm9ncmVzc1dpZHRoXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHAgY2xhc3M9XCJjcWEtYW1jLXBlcmNlbnRcIj57eyBjb21wdXRlZFBlcmNlbnRUZXh0IH19PC9wPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8IS0tIEhpbnQ6IG5vIG1vY2sgZGF0YSB5ZXQg4oCUIG51ZGdlIHRoZSB1c2VyIHRvIHJ1biB0aGUgdGVzdCBmaXJzdCAtLT5cbiAgPHAgKm5nSWY9XCIhc2hvd1Byb2dyZXNzICYmICFlZGl0aW5nXCIgY2xhc3M9XCJjcWEtYW1jLW5vLWRhdGEtaGludFwiPnt7IG5vRGF0YUhpbnQgfX08L3A+XG5cbiAgPGJ1dHRvblxuICAgICpuZ0lmPVwiIWVkaXRpbmdcIlxuICAgIFtkaXNhYmxlZF09XCIhc2hvd1Byb2dyZXNzXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImNxYS1hbWMtY29uZmlndXJlLWJ0blwiXG4gICAgKGNsaWNrKT1cIm9uQ29uZmlndXJlQ2xpY2soKVwiPlxuICAgIHt7IGNvbmZpZ3VyZUJ1dHRvbkxhYmVsIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=