igniteui-angular 14.0.10 → 14.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/core/utils.mjs +3 -3
- package/esm2020/lib/directives/drag-drop/drag-drop.directive.mjs +8 -6
- package/esm2020/lib/directives/radio/radio-group.directive.mjs +11 -5
- package/esm2020/lib/grids/cell.component.mjs +3 -3
- package/esm2020/lib/grids/grid/expandable-cell.component.mjs +3 -3
- package/esm2020/lib/grids/grid/grid.component.mjs +2 -2
- package/esm2020/lib/grids/grid-navigation.service.mjs +8 -3
- package/esm2020/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +3 -3
- package/esm2020/lib/grids/selection/selection.service.mjs +9 -4
- package/esm2020/lib/grids/tree-grid/tree-cell.component.mjs +3 -3
- package/esm2020/lib/paginator/paginator.component.mjs +3 -3
- package/esm2020/lib/radio/radio.component.mjs +15 -2
- package/esm2020/lib/tree/tree-node/tree-node.component.mjs +7 -1
- package/fesm2015/igniteui-angular.mjs +64 -27
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +64 -27
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/core/utils.d.ts +1 -1
- package/lib/directives/drag-drop/drag-drop.directive.d.ts +1 -1
- package/lib/directives/radio/radio-group.directive.d.ts +5 -0
- package/lib/grids/selection/selection.service.d.ts +2 -1
- package/lib/radio/radio.component.d.ts +13 -2
- package/package.json +1 -1
|
@@ -79,10 +79,10 @@ export class IgxGridExpandableCellComponent extends IgxGridCellComponent {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
IgxGridExpandableCellComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: IgxGridExpandableCellComponent, deps: [{ token: i1.IgxGridSelectionService }, { token: IGX_GRID_BASE }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i2.HammerGesturesManager }, { token: DOCUMENT }, { token: i3.PlatformUtil }], target: i0.ɵɵFactoryTarget.Component });
|
|
82
|
-
IgxGridExpandableCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: IgxGridExpandableCellComponent, selector: "igx-expandable-grid-cell", inputs: { expanded: "expanded" }, providers: [HammerGesturesManager], viewQueries: [{ propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, read: ElementRef }, { propertyName: "indentationDiv", first: true, predicate: ["indentationDiv"], descendants: true, read: ElementRef }, { propertyName: "defaultExpandedTemplate", first: true, predicate: ["defaultExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultCollapsedTemplate", first: true, predicate: ["defaultCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultPinnedIndicator>\n <igx-chip *ngIf=\"displayPinnedChip\" class=\"igx-grid__td--pinned-chip\" [disabled]=\"true\" [displayDensity]=\"'compact'\">{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n</ng-template>\n<ng-template #defaultCell>\n <div *ngIf=\"column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)\"\n igxTextHighlight class=\"igx-grid__td-text\" style=\"pointer-events: none\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData)\n : column.dataType === 'number'\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{ formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === \"number\"\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value}}</div>\n\n <igx-icon\n *ngIf=\"column.dataType === 'boolean' && !this.formatter\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\"\n >{{ value ? \"check\" : \"close\" }}</igx-icon\n >\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n <div *ngIf=\"column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)\"\n igxTextHighlight class=\"igx-grid__td-text\" style=\"pointer-events: none\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{\n value ? value : (column.header || column.field)\n }}</div>\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n <ng-container *ngIf=\"column.dataType === 'string'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [igxFocus]=\"true\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'number'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [igxFocus]=\"true\" [step]=\"step\" type=\"number\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'boolean'\">\n <igx-checkbox (change)=\"editValue = $event.checked\" [value]=\"editValue\" [checked]=\"editValue\" [disableRipple]=\"true\"></igx-checkbox>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'date'\">\n <igx-date-picker [style.width.%]=\"100\" [outlet]=\"grid.outlet\" mode=\"dropdown\"\n [locale]=\"grid.locale\" [weekStart]=\"column.pipeArgs.weekStart\" [(value)]=\"editValue\" [igxFocus]=\"true\">\n </igx-date-picker>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'time'\">\n <igx-time-picker [style.width.%]=\"100\" [outlet]=\"grid.outlet\"\n mode=\"dropdown\" [inputFormat]=\"column.defaultTimeFormat\" [(ngModel)]=\"editValue\" [igxFocus]=\"true\">\n </igx-time-picker>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'dateTime'\">\n <igx-input-group>\n <input type=\"text\" igxInput [igxDateTimeEditor]=\"column.defaultDateTimeFormat\" [(ngModel)]=\"editValue\" [igxFocus]=\"true\"/>\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'currency'\">\n <igx-input-group displayDensity=\"compact\">\n <igx-prefix *ngIf=\"grid.currencyPositionLeft\">{{ currencyCodeSymbol }}</igx-prefix>\n <input igxInput [(ngModel)]=\"editValue\"\n [igxFocus]=\"true\" [step]=\"step\" type=\"number\"/>\n <igx-suffix *ngIf=\"!grid.currencyPositionLeft\" >{{ currencyCodeSymbol }}</igx-suffix>\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'percent'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [step]=\"step\"\n [igxFocus]=\"true\" type=\"number\"/>\n <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n </igx-input-group>\n </ng-container>\n</ng-template>\n<ng-container *ngIf=\"showExpanderIndicator\">\n <div #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n (click)=\"toggle($event)\" (focus)=\"onIndicatorFocus()\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n<ng-template #defaultExpandedTemplate>\n <igx-icon>expand_more</igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon>chevron_right</igx-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.IgxDatePickerComponent, selector: "igx-date-picker", inputs: ["hideOutsideDays", "displayMonthsCount", "showWeekNumbers", "formatter", "headerOrientation", "todayButtonLabel", "cancelButtonLabel", "spinLoop", "spinDelta", "outlet", "id", "formatViews", "disabledDates", "specialDates", "calendarFormat", "value", "minValue", "maxValue", "resourceStrings", "readOnly"], outputs: ["valueChange", "validationFailed"] }, { kind: "component", type: i7.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: i8.IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: i9.IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: i10.IgxPrefixDirective, selector: "igx-prefix,[igxPrefix]" }, { kind: "directive", type: i11.IgxSuffixDirective, selector: "igx-suffix,[igxSuffix]" }, { kind: "directive", type: i12.IgxFocusDirective, selector: "[igxFocus]", inputs: ["igxFocus"], exportAs: ["igxFocus"] }, { kind: "directive", type: i13.IgxTextHighlightDirective, selector: "[igxTextHighlight]", inputs: ["cssClass", "activeCssClass", "containerClass", "groupName", "value", "row", "column", "metadata"] }, { kind: "component", type: i14.IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }, { kind: "component", type: i15.IgxChipComponent, selector: "igx-chip", inputs: ["id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: i16.IgxTimePickerComponent, selector: "igx-time-picker", inputs: ["id", "displayFormat", "inputFormat", "mode", "minValue", "maxValue", "spinLoop", "formatter", "headerOrientation", "readOnly", "value", "resourceStrings", "okButtonLabel", "cancelButtonLabel", "itemsDelta"], outputs: ["selected", "valueChange", "validationFailed"] }, { kind: "directive", type: i17.IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "pipe", type: i18.IgxColumnFormatterPipe, name: "columnFormatter" }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.PercentPipe, name: "percent" }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i4.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
82
|
+
IgxGridExpandableCellComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: IgxGridExpandableCellComponent, selector: "igx-expandable-grid-cell", inputs: { expanded: "expanded" }, providers: [HammerGesturesManager], viewQueries: [{ propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, read: ElementRef }, { propertyName: "indentationDiv", first: true, predicate: ["indentationDiv"], descendants: true, read: ElementRef }, { propertyName: "defaultExpandedTemplate", first: true, predicate: ["defaultExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultCollapsedTemplate", first: true, predicate: ["defaultCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #defaultPinnedIndicator>\n <igx-chip *ngIf=\"displayPinnedChip\" class=\"igx-grid__td--pinned-chip\" [disabled]=\"true\" [displayDensity]=\"'compact'\">{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n</ng-template>\n<ng-template #defaultCell>\n <div *ngIf=\"column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)\"\n igxTextHighlight class=\"igx-grid__td-text\" style=\"pointer-events: none\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData)\n : column.dataType === 'number'\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{ formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === \"number\"\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value}}</div>\n\n <igx-icon\n *ngIf=\"column.dataType === 'boolean' && !this.formatter\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\"\n >{{ value ? \"check\" : \"close\" }}</igx-icon\n >\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n <div *ngIf=\"column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)\"\n igxTextHighlight class=\"igx-grid__td-text\" style=\"pointer-events: none\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{\n value ? value : (column.header || column.field)\n }}</div>\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n <ng-container *ngIf=\"column.dataType === 'string'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [igxFocus]=\"true\"\n (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n >\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'number'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [igxFocus]=\"true\" [step]=\"step\" type=\"number\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'boolean'\">\n <igx-checkbox (change)=\"editValue = $event.checked\" [value]=\"editValue\" [checked]=\"editValue\" [disableRipple]=\"true\"></igx-checkbox>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'date'\">\n <igx-date-picker [style.width.%]=\"100\" [outlet]=\"grid.outlet\" mode=\"dropdown\"\n [locale]=\"grid.locale\" [weekStart]=\"column.pipeArgs.weekStart\" [(value)]=\"editValue\" [igxFocus]=\"true\">\n </igx-date-picker>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'time'\">\n <igx-time-picker [style.width.%]=\"100\" [outlet]=\"grid.outlet\"\n mode=\"dropdown\" [inputFormat]=\"column.defaultTimeFormat\" [(ngModel)]=\"editValue\" [igxFocus]=\"true\">\n </igx-time-picker>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'dateTime'\">\n <igx-input-group>\n <input type=\"text\" igxInput [igxDateTimeEditor]=\"column.defaultDateTimeFormat\" [(ngModel)]=\"editValue\" [igxFocus]=\"true\"/>\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'currency'\">\n <igx-input-group displayDensity=\"compact\">\n <igx-prefix *ngIf=\"grid.currencyPositionLeft\">{{ currencyCodeSymbol }}</igx-prefix>\n <input igxInput [(ngModel)]=\"editValue\"\n [igxFocus]=\"true\" [step]=\"step\" type=\"number\"/>\n <igx-suffix *ngIf=\"!grid.currencyPositionLeft\" >{{ currencyCodeSymbol }}</igx-suffix>\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'percent'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [step]=\"step\"\n [igxFocus]=\"true\" type=\"number\"/>\n <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n </igx-input-group>\n </ng-container>\n</ng-template>\n<ng-container *ngIf=\"showExpanderIndicator\">\n <div #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n (click)=\"toggle($event)\" (focus)=\"onIndicatorFocus()\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n<ng-template #defaultExpandedTemplate>\n <igx-icon>expand_more</igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon>chevron_right</igx-icon>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.IgxDatePickerComponent, selector: "igx-date-picker", inputs: ["hideOutsideDays", "displayMonthsCount", "showWeekNumbers", "formatter", "headerOrientation", "todayButtonLabel", "cancelButtonLabel", "spinLoop", "spinDelta", "outlet", "id", "formatViews", "disabledDates", "specialDates", "calendarFormat", "value", "minValue", "maxValue", "resourceStrings", "readOnly"], outputs: ["valueChange", "validationFailed"] }, { kind: "component", type: i7.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { kind: "component", type: i8.IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: i9.IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: i10.IgxPrefixDirective, selector: "igx-prefix,[igxPrefix]" }, { kind: "directive", type: i11.IgxSuffixDirective, selector: "igx-suffix,[igxSuffix]" }, { kind: "directive", type: i12.IgxFocusDirective, selector: "[igxFocus]", inputs: ["igxFocus"], exportAs: ["igxFocus"] }, { kind: "directive", type: i13.IgxTextHighlightDirective, selector: "[igxTextHighlight]", inputs: ["cssClass", "activeCssClass", "containerClass", "groupName", "value", "row", "column", "metadata"] }, { kind: "component", type: i14.IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }, { kind: "component", type: i15.IgxChipComponent, selector: "igx-chip", inputs: ["id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "component", type: i16.IgxTimePickerComponent, selector: "igx-time-picker", inputs: ["id", "displayFormat", "inputFormat", "mode", "minValue", "maxValue", "spinLoop", "formatter", "headerOrientation", "readOnly", "value", "resourceStrings", "okButtonLabel", "cancelButtonLabel", "itemsDelta"], outputs: ["selected", "valueChange", "validationFailed"] }, { kind: "directive", type: i17.IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "pipe", type: i18.IgxColumnFormatterPipe, name: "columnFormatter" }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.PercentPipe, name: "percent" }, { kind: "pipe", type: i4.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i4.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
83
83
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: IgxGridExpandableCellComponent, decorators: [{
|
|
84
84
|
type: Component,
|
|
85
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-expandable-grid-cell', providers: [HammerGesturesManager], template: "<ng-template #defaultPinnedIndicator>\n <igx-chip *ngIf=\"displayPinnedChip\" class=\"igx-grid__td--pinned-chip\" [disabled]=\"true\" [displayDensity]=\"'compact'\">{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n</ng-template>\n<ng-template #defaultCell>\n <div *ngIf=\"column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)\"\n igxTextHighlight class=\"igx-grid__td-text\" style=\"pointer-events: none\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData)\n : column.dataType === 'number'\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{ formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === \"number\"\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value}}</div>\n\n <igx-icon\n *ngIf=\"column.dataType === 'boolean' && !this.formatter\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\"\n >{{ value ? \"check\" : \"close\" }}</igx-icon\n >\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n <div *ngIf=\"column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)\"\n igxTextHighlight class=\"igx-grid__td-text\" style=\"pointer-events: none\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{\n value ? value : (column.header || column.field)\n }}</div>\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n <ng-container *ngIf=\"column.dataType === 'string'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [igxFocus]=\"true\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'number'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [igxFocus]=\"true\" [step]=\"step\" type=\"number\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'boolean'\">\n <igx-checkbox (change)=\"editValue = $event.checked\" [value]=\"editValue\" [checked]=\"editValue\" [disableRipple]=\"true\"></igx-checkbox>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'date'\">\n <igx-date-picker [style.width.%]=\"100\" [outlet]=\"grid.outlet\" mode=\"dropdown\"\n [locale]=\"grid.locale\" [weekStart]=\"column.pipeArgs.weekStart\" [(value)]=\"editValue\" [igxFocus]=\"true\">\n </igx-date-picker>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'time'\">\n <igx-time-picker [style.width.%]=\"100\" [outlet]=\"grid.outlet\"\n mode=\"dropdown\" [inputFormat]=\"column.defaultTimeFormat\" [(ngModel)]=\"editValue\" [igxFocus]=\"true\">\n </igx-time-picker>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'dateTime'\">\n <igx-input-group>\n <input type=\"text\" igxInput [igxDateTimeEditor]=\"column.defaultDateTimeFormat\" [(ngModel)]=\"editValue\" [igxFocus]=\"true\"/>\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'currency'\">\n <igx-input-group displayDensity=\"compact\">\n <igx-prefix *ngIf=\"grid.currencyPositionLeft\">{{ currencyCodeSymbol }}</igx-prefix>\n <input igxInput [(ngModel)]=\"editValue\"\n [igxFocus]=\"true\" [step]=\"step\" type=\"number\"/>\n <igx-suffix *ngIf=\"!grid.currencyPositionLeft\" >{{ currencyCodeSymbol }}</igx-suffix>\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'percent'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [step]=\"step\"\n [igxFocus]=\"true\" type=\"number\"/>\n <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n </igx-input-group>\n </ng-container>\n</ng-template>\n<ng-container *ngIf=\"showExpanderIndicator\">\n <div #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n (click)=\"toggle($event)\" (focus)=\"onIndicatorFocus()\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n<ng-template #defaultExpandedTemplate>\n <igx-icon>expand_more</igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon>chevron_right</igx-icon>\n</ng-template>\n" }]
|
|
85
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-expandable-grid-cell', providers: [HammerGesturesManager], template: "<ng-template #defaultPinnedIndicator>\n <igx-chip *ngIf=\"displayPinnedChip\" class=\"igx-grid__td--pinned-chip\" [disabled]=\"true\" [displayDensity]=\"'compact'\">{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n</ng-template>\n<ng-template #defaultCell>\n <div *ngIf=\"column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)\"\n igxTextHighlight class=\"igx-grid__td-text\" style=\"pointer-events: none\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData)\n : column.dataType === 'number'\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{ formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === \"number\"\n ? (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'\n ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent'\n ? (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value}}</div>\n\n <igx-icon\n *ngIf=\"column.dataType === 'boolean' && !this.formatter\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\"\n >{{ value ? \"check\" : \"close\" }}</igx-icon\n >\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n <div *ngIf=\"column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)\"\n igxTextHighlight class=\"igx-grid__td-text\" style=\"pointer-events: none\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n [row]=\"rowData\"\n [column]=\"this.column.field\"\n [containerClass]=\"'igx-grid__td-text'\"\n [metadata]=\"searchMetadata\">{{\n value ? value : (column.header || column.field)\n }}</div>\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n <ng-container *ngIf=\"column.dataType === 'string'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [igxFocus]=\"true\"\n (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n >\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'number'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [igxFocus]=\"true\" [step]=\"step\" type=\"number\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'boolean'\">\n <igx-checkbox (change)=\"editValue = $event.checked\" [value]=\"editValue\" [checked]=\"editValue\" [disableRipple]=\"true\"></igx-checkbox>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'date'\">\n <igx-date-picker [style.width.%]=\"100\" [outlet]=\"grid.outlet\" mode=\"dropdown\"\n [locale]=\"grid.locale\" [weekStart]=\"column.pipeArgs.weekStart\" [(value)]=\"editValue\" [igxFocus]=\"true\">\n </igx-date-picker>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'time'\">\n <igx-time-picker [style.width.%]=\"100\" [outlet]=\"grid.outlet\"\n mode=\"dropdown\" [inputFormat]=\"column.defaultTimeFormat\" [(ngModel)]=\"editValue\" [igxFocus]=\"true\">\n </igx-time-picker>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'dateTime'\">\n <igx-input-group>\n <input type=\"text\" igxInput [igxDateTimeEditor]=\"column.defaultDateTimeFormat\" [(ngModel)]=\"editValue\" [igxFocus]=\"true\"/>\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'currency'\">\n <igx-input-group displayDensity=\"compact\">\n <igx-prefix *ngIf=\"grid.currencyPositionLeft\">{{ currencyCodeSymbol }}</igx-prefix>\n <input igxInput [(ngModel)]=\"editValue\"\n [igxFocus]=\"true\" [step]=\"step\" type=\"number\"/>\n <igx-suffix *ngIf=\"!grid.currencyPositionLeft\" >{{ currencyCodeSymbol }}</igx-suffix>\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'percent'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [(ngModel)]=\"editValue\" [step]=\"step\"\n [igxFocus]=\"true\" type=\"number\"/>\n <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n </igx-input-group>\n </ng-container>\n</ng-template>\n<ng-container *ngIf=\"showExpanderIndicator\">\n <div #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n (click)=\"toggle($event)\" (focus)=\"onIndicatorFocus()\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n<ng-template #defaultExpandedTemplate>\n <igx-icon>expand_more</igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon>chevron_right</igx-icon>\n</ng-template>\n" }]
|
|
86
86
|
}], ctorParameters: function () { return [{ type: i1.IgxGridSelectionService }, { type: undefined, decorators: [{
|
|
87
87
|
type: Inject,
|
|
88
88
|
args: [IGX_GRID_BASE]
|
|
@@ -104,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
|
|
|
104
104
|
type: ViewChild,
|
|
105
105
|
args: ['defaultCollapsedTemplate', { read: TemplateRef, static: true }]
|
|
106
106
|
}] } });
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kYWJsZS1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9ncmlkL2V4cGFuZGFibGUtY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC9leHBhbmRhYmxlLWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFuRSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsb0JBQW9CO0lBeUJwRSxZQUFZLGdCQUF5QyxFQUNsQixJQUFjLEVBQ3JDLEdBQXNCLEVBQ3RCLE9BQW1CLEVBQ1QsSUFBWSxFQUN0QixZQUFtQyxFQUNWLFFBQVEsRUFDdkIsWUFBMEI7UUFDNUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFKNUQsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUVHLGFBQVEsR0FBUixRQUFRLENBQUE7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQWM7UUEvQmhE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LDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2NlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFtbWVyR2VzdHVyZXNNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vY29yZS90b3VjaCc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWV4cGFuZGFibGUtZ3JpZC1jZWxsJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2V4cGFuZGFibGUtY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbSGFtbWVyR2VzdHVyZXNNYW5hZ2VyXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRXhwYW5kYWJsZUNlbGxDb21wb25lbnQgZXh0ZW5kcyBJZ3hHcmlkQ2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKCdpbmRpY2F0b3InLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgaW5kaWNhdG9yOiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnaW5kZW50YXRpb25EaXYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgaW5kZW50YXRpb25EaXY6IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgICAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXG4gICAgICAgICAgICAgICAgdG91Y2hNYW5hZ2VyOiBIYW1tZXJHZXN0dXJlc01hbmFnZXIsXG4gICAgICAgICAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHVibGljIGRvY3VtZW50LFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCkge1xuICAgICAgICBzdXBlcihzZWxlY3Rpb25TZXJ2aWNlLCBncmlkLCBjZHIsIGVsZW1lbnQsIHpvbmUsIHRvdWNoTWFuYWdlciwgcGxhdGZvcm1VdGlsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5pbnRSb3cuZGF0YSk7XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuaW50Um93LmtleSwgIWV4cGFuc2lvblN0YXRlLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvbkluZGljYXRvckZvY3VzKCkge1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBjYWxjdWxhdGVTaXplVG9GaXQocmFuZ2U6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGxldCBsZWZ0UGFkZGluZyA9IDA7XG4gICAgICAgIGlmICh0aGlzLmluZGVudGF0aW9uRGl2KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRlbnRhdGlvblN0eWxlID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaW5kZW50YXRpb25EaXYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBsZWZ0UGFkZGluZyA9IHBhcnNlRmxvYXQoaW5kZW50YXRpb25TdHlsZS5wYWRkaW5nTGVmdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudFdpZHRoID0gdGhpcy5wbGF0Zm9ybVV0aWwuZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZSwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRXaWR0aCArIGxlZnRQYWRkaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25UZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93RXhwYW5kZWRJbmRpY2F0b3JUZW1wbGF0ZSB8fCB0aGlzLmRlZmF1bHRFeHBhbmRlZFRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dDb2xsYXBzZWRJbmRpY2F0b3JUZW1wbGF0ZSB8fCB0aGlzLmRlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dFeHBhbmRlckluZGljYXRvcigpIHtcbiAgICAgICAgY29uc3QgaXNHaG9zdCA9IHRoaXMuaW50Um93LnBpbm5lZCAmJiB0aGlzLmludFJvdy5kaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuICF0aGlzLmVkaXRNb2RlICYmICghdGhpcy5pbnRSb3cucGlubmVkIHx8IGlzR2hvc3QpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBpbm5lZEluZGljYXRvcj5cbiAgICA8aWd4LWNoaXAgKm5nSWY9XCJkaXNwbGF5UGlubmVkQ2hpcFwiIGNsYXNzPVwiaWd4LWdyaWRfX3RkLS1waW5uZWQtY2hpcFwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgW2Rpc3BsYXlEZW5zaXR5XT1cIidjb21wYWN0J1wiPnt7IGdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpbm5lZF9yb3dfaW5kaWNhdG9yIH19PC9pZ3gtY2hpcD5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsPlxuICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgIT09ICdib29sZWFuJyB8fCAoY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy5mb3JtYXR0ZXIpXCJcbiAgICAgICAgaWd4VGV4dEhpZ2hsaWdodCBjbGFzcz1cImlneC1ncmlkX190ZC10ZXh0XCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiXG4gICAgICAgIFtjc3NDbGFzc109XCJoaWdobGlnaHRDbGFzc1wiXG4gICAgICAgIFthY3RpdmVDc3NDbGFzc109XCJhY3RpdmVIaWdobGlnaHRDbGFzc1wiXG4gICAgICAgIFtncm91cE5hbWVdPVwiZ3JpZElEXCJcbiAgICAgICAgW3ZhbHVlXT1cImZvcm1hdHRlciA/ICh2YWx1ZSB8IGNvbHVtbkZvcm1hdHRlcjpmb3JtYXR0ZXI6cm93RGF0YSlcbiAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICA6IChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICd0aW1lJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpXG4gICAgICAgICAgICA/ICh2YWx1ZSB8IGRhdGU6Y29sdW1uLnBpcGVBcmdzLmZvcm1hdDpjb2x1bW4ucGlwZUFyZ3MudGltZXpvbmU6Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgPyAodmFsdWUgfCBjdXJyZW5jeTpjdXJyZW5jeUNvZGU6Y29sdW1uLnBpcGVBcmdzLmRpc3BsYXk6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXG4gICAgICAgICAgICA/ICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICA6IHZhbHVlXCJcbiAgICAgICAgW3Jvd109XCJyb3dEYXRhXCJcbiAgICAgICAgW2NvbHVtbl09XCJ0aGlzLmNvbHVtbi5maWVsZFwiXG4gICAgICAgIFtjb250YWluZXJDbGFzc109XCInaWd4LWdyaWRfX3RkLXRleHQnXCJcbiAgICAgICAgW21ldGFkYXRhXT1cInNlYXJjaE1ldGFkYXRhXCI+e3sgZm9ybWF0dGVyID8gKHZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpyb3dEYXRhKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgPyAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpIDogKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3RpbWUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJylcbiAgICAgICAgICAgID8gKHZhbHVlIHwgZGF0ZTpjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0OmNvbHVtbi5waXBlQXJncy50aW1lem9uZTpncmlkLmxvY2FsZSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgID8gKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXG4gICAgICAgICAgICA/ICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpIDogdmFsdWV9fTwvZGl2PlxuXG4gICAgPGlneC1pY29uXG4gICAgICAgICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgIXRoaXMuZm9ybWF0dGVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaWd4LWljb24tLXN1Y2Nlc3MnOiB2YWx1ZSwgJ2lneC1pY29uLS1lcnJvcic6ICF2YWx1ZSB9XCJcbiAgICA+e3sgdmFsdWUgPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX08L2lneC1pY29uXG4gICAgPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjYWRkUm93Q2VsbCBsZXQtY2VsbD1cImNlbGxcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlICE9PSAnYm9vbGVhbicgfHwgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nICYmIHRoaXMuZm9ybWF0dGVyKVwiXG4gICAgICAgIGlneFRleHRIaWdobGlnaHQgY2xhc3M9XCJpZ3gtZ3JpZF9fdGQtdGV4dFwiIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmVcIlxuICAgIFtjc3NDbGFzc109XCJoaWdobGlnaHRDbGFzc1wiXG4gICAgW2FjdGl2ZUNzc0NsYXNzXT1cImFjdGl2ZUhpZ2hsaWdodENsYXNzXCJcbiAgICBbZ3JvdXBOYW1lXT1cImdyaWRJRFwiXG4gICAgW3ZhbHVlXT1cImZvcm1hdHRlciA/ICh2YWx1ZSB8IGNvbHVtbkZvcm1hdHRlcjpmb3JtYXR0ZXI6cm93RGF0YSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInID9cbiAgICAgICAgKHZhbHVlIHwgbnVtYmVyOmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKSA6IChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICd0aW1lJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpID9cbiAgICAgICAgKHZhbHVlIHwgZGF0ZTpjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0OmNvbHVtbi5waXBlQXJncy50aW1lem9uZTpncmlkLmxvY2FsZSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSc/XG4gICAgICAgICh2YWx1ZSB8IGN1cnJlbmN5OmN1cnJlbmN5Q29kZTpjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheTpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdwZXJjZW50JyA/XG4gICAgICAgICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpIDogdmFsdWVcIlxuICAgIFtyb3ddPVwicm93RGF0YVwiXG4gICAgW2NvbHVtbl09XCJ0aGlzLmNvbHVtbi5maWVsZFwiXG4gICAgW2NvbnRhaW5lckNsYXNzXT1cIidpZ3gtZ3JpZF9fdGQtdGV4dCdcIlxuICAgIFttZXRhZGF0YV09XCJzZWFyY2hNZXRhZGF0YVwiPnt7XG4gICAgICAgIHZhbHVlID8gdmFsdWUgOiAoY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGQpXG4gICAgfX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2lubGluZUVkaXRvciAgbGV0LWNlbGw9XCJjZWxsXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ3N0cmluZydcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZ3hJbnB1dCBbKG5nTW9kZWwpXT1cImVkaXRWYWx1ZVwiIFtpZ3hGb2N1c109XCJ0cnVlXCI+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXAgZGlzcGxheURlbnNpdHk9XCJjb21wYWN0XCI+XG4gICAgICAgICAgICA8aW5wdXQgaWd4SW5wdXQgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIiBbaWd4Rm9jdXNdPVwidHJ1ZVwiIFtzdGVwXT1cInN0ZXBcIiAgdHlwZT1cIm51bWJlclwiPlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbidcIj5cbiAgICAgICAgPGlneC1jaGVja2JveCAoY2hhbmdlKT1cImVkaXRWYWx1ZSA9ICRldmVudC5jaGVja2VkXCIgW3ZhbHVlXT1cImVkaXRWYWx1ZVwiIFtjaGVja2VkXT1cImVkaXRWYWx1ZVwiIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIj48L2lneC1jaGVja2JveD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZSdcIj5cbiAgICAgICAgPGlneC1kYXRlLXBpY2tlciBbc3R5bGUud2lkdGguJV09XCIxMDBcIiBbb3V0bGV0XT1cImdyaWQub3V0bGV0XCIgbW9kZT1cImRyb3Bkb3duXCJcbiAgICAgICAgW2xvY2FsZV09XCJncmlkLmxvY2FsZVwiIFt3ZWVrU3RhcnRdPVwiY29sdW1uLnBpcGVBcmdzLndlZWtTdGFydFwiIFsodmFsdWUpXT1cImVkaXRWYWx1ZVwiIFtpZ3hGb2N1c109XCJ0cnVlXCI+XG4gICAgPC9pZ3gtZGF0ZS1waWNrZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ3RpbWUnXCI+XG4gICAgICAgIDxpZ3gtdGltZS1waWNrZXIgW3N0eWxlLndpZHRoLiVdPVwiMTAwXCIgW291dGxldF09XCJncmlkLm91dGxldFwiXG4gICAgICAgICAgICBtb2RlPVwiZHJvcGRvd25cIiBbaW5wdXRGb3JtYXRdPVwiY29sdW1uLmRlZmF1bHRUaW1lRm9ybWF0XCIgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIiBbaWd4Rm9jdXNdPVwidHJ1ZVwiPlxuICAgICAgICA8L2lneC10aW1lLXBpY2tlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnZGF0ZVRpbWUnXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXA+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZ3hJbnB1dCBbaWd4RGF0ZVRpbWVFZGl0b3JdPVwiY29sdW1uLmRlZmF1bHREYXRlVGltZUZvcm1hdFwiIFsobmdNb2RlbCldPVwiZWRpdFZhbHVlXCIgW2lneEZvY3VzXT1cInRydWVcIi8+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpZ3gtcHJlZml4ICpuZ0lmPVwiZ3JpZC5jdXJyZW5jeVBvc2l0aW9uTGVmdFwiPnt7IGN1cnJlbmN5Q29kZVN5bWJvbCB9fTwvaWd4LXByZWZpeD5cbiAgICAgICAgICAgIDxpbnB1dCAgaWd4SW5wdXQgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIlxuICAgICAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCIgW3N0ZXBdPVwic3RlcFwiIHR5cGU9XCJudW1iZXJcIi8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cIiFncmlkLmN1cnJlbmN5UG9zaXRpb25MZWZ0XCIgPnt7IGN1cnJlbmN5Q29kZVN5bWJvbCB9fTwvaWd4LXN1ZmZpeD5cbiAgICAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXCI+XG4gICAgICAgIDxpZ3gtaW5wdXQtZ3JvdXAgZGlzcGxheURlbnNpdHk9XCJjb21wYWN0XCI+XG4gICAgICAgICAgICA8aW5wdXQgaWd4SW5wdXQgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIiBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgICAgICBbaWd4Rm9jdXNdPVwidHJ1ZVwiIHR5cGU9XCJudW1iZXJcIi8+XG4gICAgICAgICAgICA8aWd4LXN1ZmZpeD4ge3sgZWRpdFZhbHVlIHwgcGVyY2VudDpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSB9fSA8L2lneC1zdWZmaXg+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RXhwYW5kZXJJbmRpY2F0b3JcIj5cbiAgICA8ZGl2ICNpbmRpY2F0b3JcbiAgICAgICAgIGNsYXNzPVwiaWd4LWdyaWRfX3RyZWUtZ3JvdXBpbmctaW5kaWNhdG9yXCJcbiAgICAgICAgIChjbGljayk9XCJ0b2dnbGUoJGV2ZW50KVwiIChmb2N1cyk9XCJvbkluZGljYXRvckZvY3VzKClcIj5cbiAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpY29uVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiAgdGhpcyB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGlubmVkSW5kaWNhdG9yVGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiBjb250ZXh0XCI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGU+XG4gICAgICAgIDxpZ3gtaWNvbj5leHBhbmRfbW9yZTwvaWd4LWljb24+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29sbGFwc2VkVGVtcGxhdGU+XG4gICAgICAgIDxpZ3gtaWNvbj5jaGV2cm9uX3JpZ2h0PC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kYWJsZS1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9ncmlkL2V4cGFuZGFibGUtY2VsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC9leHBhbmRhYmxlLWNlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekQsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFuRSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsb0JBQW9CO0lBeUJwRSxZQUFZLGdCQUF5QyxFQUNsQixJQUFjLEVBQ3JDLEdBQXNCLEVBQ3RCLE9BQW1CLEVBQ1QsSUFBWSxFQUN0QixZQUFtQyxFQUNWLFFBQVEsRUFDdkIsWUFBMEI7UUFDNUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFKNUQsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUVHLGFBQVEsR0FBUixRQUFRLENBQUE7UUFDdkIsaUJBQVksR0FBWixZQUFZLENBQWM7UUEvQmhE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LDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uSW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2NlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGFtbWVyR2VzdHVyZXNNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vY29yZS90b3VjaCc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LWV4cGFuZGFibGUtZ3JpZC1jZWxsJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2V4cGFuZGFibGUtY2VsbC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbSGFtbWVyR2VzdHVyZXNNYW5hZ2VyXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkRXhwYW5kYWJsZUNlbGxDb21wb25lbnQgZXh0ZW5kcyBJZ3hHcmlkQ2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKCdpbmRpY2F0b3InLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgaW5kaWNhdG9yOiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnaW5kZW50YXRpb25EaXYnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgaW5kZW50YXRpb25EaXY6IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZGVmYXVsdENvbGxhcHNlZFRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJvdGVjdGVkIGRlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgICAgICAgICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXG4gICAgICAgICAgICAgICAgdG91Y2hNYW5hZ2VyOiBIYW1tZXJHZXN0dXJlc01hbmFnZXIsXG4gICAgICAgICAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHVibGljIGRvY3VtZW50LFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCkge1xuICAgICAgICBzdXBlcihzZWxlY3Rpb25TZXJ2aWNlLCBncmlkLCBjZHIsIGVsZW1lbnQsIHpvbmUsIHRvdWNoTWFuYWdlciwgcGxhdGZvcm1VdGlsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZShldmVudDogRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5pbnRSb3cuZGF0YSk7XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHRoaXMuaW50Um93LmtleSwgIWV4cGFuc2lvblN0YXRlLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvbkluZGljYXRvckZvY3VzKCkge1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS51cGRhdGVfY2VsbCh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBjYWxjdWxhdGVTaXplVG9GaXQocmFuZ2U6IGFueSk6IG51bWJlciB7XG4gICAgICAgIGxldCBsZWZ0UGFkZGluZyA9IDA7XG4gICAgICAgIGlmICh0aGlzLmluZGVudGF0aW9uRGl2KSB7XG4gICAgICAgICAgICBjb25zdCBpbmRlbnRhdGlvblN0eWxlID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaW5kZW50YXRpb25EaXYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBsZWZ0UGFkZGluZyA9IHBhcnNlRmxvYXQoaW5kZW50YXRpb25TdHlsZS5wYWRkaW5nTGVmdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGVudFdpZHRoID0gdGhpcy5wbGF0Zm9ybVV0aWwuZ2V0Tm9kZVNpemVWaWFSYW5nZShyYW5nZSwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRXaWR0aCArIGxlZnRQYWRkaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGljb25UZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93RXhwYW5kZWRJbmRpY2F0b3JUZW1wbGF0ZSB8fCB0aGlzLmRlZmF1bHRFeHBhbmRlZFRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dDb2xsYXBzZWRJbmRpY2F0b3JUZW1wbGF0ZSB8fCB0aGlzLmRlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dFeHBhbmRlckluZGljYXRvcigpIHtcbiAgICAgICAgY29uc3QgaXNHaG9zdCA9IHRoaXMuaW50Um93LnBpbm5lZCAmJiB0aGlzLmludFJvdy5kaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuICF0aGlzLmVkaXRNb2RlICYmICghdGhpcy5pbnRSb3cucGlubmVkIHx8IGlzR2hvc3QpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBpbm5lZEluZGljYXRvcj5cbiAgICA8aWd4LWNoaXAgKm5nSWY9XCJkaXNwbGF5UGlubmVkQ2hpcFwiIGNsYXNzPVwiaWd4LWdyaWRfX3RkLS1waW5uZWQtY2hpcFwiIFtkaXNhYmxlZF09XCJ0cnVlXCIgW2Rpc3BsYXlEZW5zaXR5XT1cIidjb21wYWN0J1wiPnt7IGdyaWQucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Bpbm5lZF9yb3dfaW5kaWNhdG9yIH19PC9pZ3gtY2hpcD5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsPlxuICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgIT09ICdib29sZWFuJyB8fCAoY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgdGhpcy5mb3JtYXR0ZXIpXCJcbiAgICAgICAgaWd4VGV4dEhpZ2hsaWdodCBjbGFzcz1cImlneC1ncmlkX190ZC10ZXh0XCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZVwiXG4gICAgICAgIFtjc3NDbGFzc109XCJoaWdobGlnaHRDbGFzc1wiXG4gICAgICAgIFthY3RpdmVDc3NDbGFzc109XCJhY3RpdmVIaWdobGlnaHRDbGFzc1wiXG4gICAgICAgIFtncm91cE5hbWVdPVwiZ3JpZElEXCJcbiAgICAgICAgW3ZhbHVlXT1cImZvcm1hdHRlciA/ICh2YWx1ZSB8IGNvbHVtbkZvcm1hdHRlcjpmb3JtYXR0ZXI6cm93RGF0YSlcbiAgICAgICAgICAgIDogY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICA6IChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICd0aW1lJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpXG4gICAgICAgICAgICA/ICh2YWx1ZSB8IGRhdGU6Y29sdW1uLnBpcGVBcmdzLmZvcm1hdDpjb2x1bW4ucGlwZUFyZ3MudGltZXpvbmU6Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgPyAodmFsdWUgfCBjdXJyZW5jeTpjdXJyZW5jeUNvZGU6Y29sdW1uLnBpcGVBcmdzLmRpc3BsYXk6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXG4gICAgICAgICAgICA/ICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpXG4gICAgICAgICAgICA6IHZhbHVlXCJcbiAgICAgICAgW3Jvd109XCJyb3dEYXRhXCJcbiAgICAgICAgW2NvbHVtbl09XCJ0aGlzLmNvbHVtbi5maWVsZFwiXG4gICAgICAgIFtjb250YWluZXJDbGFzc109XCInaWd4LWdyaWRfX3RkLXRleHQnXCJcbiAgICAgICAgW21ldGFkYXRhXT1cInNlYXJjaE1ldGFkYXRhXCI+e3sgZm9ybWF0dGVyID8gKHZhbHVlIHwgY29sdW1uRm9ybWF0dGVyOmZvcm1hdHRlcjpyb3dEYXRhKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgPyAodmFsdWUgfCBudW1iZXI6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpIDogKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3RpbWUnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJylcbiAgICAgICAgICAgID8gKHZhbHVlIHwgZGF0ZTpjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0OmNvbHVtbi5waXBlQXJncy50aW1lem9uZTpncmlkLmxvY2FsZSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgID8gKHZhbHVlIHwgY3VycmVuY3k6Y3VycmVuY3lDb2RlOmNvbHVtbi5waXBlQXJncy5kaXNwbGF5OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKSA6IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnXG4gICAgICAgICAgICA/ICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpIDogdmFsdWV9fTwvZGl2PlxuXG4gICAgPGlneC1pY29uXG4gICAgICAgICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbGVhbicgJiYgIXRoaXMuZm9ybWF0dGVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaWd4LWljb24tLXN1Y2Nlc3MnOiB2YWx1ZSwgJ2lneC1pY29uLS1lcnJvcic6ICF2YWx1ZSB9XCJcbiAgICA+e3sgdmFsdWUgPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX08L2lneC1pY29uXG4gICAgPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjYWRkUm93Q2VsbCBsZXQtY2VsbD1cImNlbGxcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlICE9PSAnYm9vbGVhbicgfHwgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2xlYW4nICYmIHRoaXMuZm9ybWF0dGVyKVwiXG4gICAgICAgIGlneFRleHRIaWdobGlnaHQgY2xhc3M9XCJpZ3gtZ3JpZF9fdGQtdGV4dFwiIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmVcIlxuICAgIFtjc3NDbGFzc109XCJoaWdobGlnaHRDbGFzc1wiXG4gICAgW2FjdGl2ZUNzc0NsYXNzXT1cImFjdGl2ZUhpZ2hsaWdodENsYXNzXCJcbiAgICBbZ3JvdXBOYW1lXT1cImdyaWRJRFwiXG4gICAgW3ZhbHVlXT1cImZvcm1hdHRlciA/ICh2YWx1ZSB8IGNvbHVtbkZvcm1hdHRlcjpmb3JtYXR0ZXI6cm93RGF0YSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInID9cbiAgICAgICAgKHZhbHVlIHwgbnVtYmVyOmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlKSA6IChjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICd0aW1lJyB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZScpID9cbiAgICAgICAgKHZhbHVlIHwgZGF0ZTpjb2x1bW4ucGlwZUFyZ3MuZm9ybWF0OmNvbHVtbi5waXBlQXJncy50aW1lem9uZTpncmlkLmxvY2FsZSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdjdXJyZW5jeSc/XG4gICAgICAgICh2YWx1ZSB8IGN1cnJlbmN5OmN1cnJlbmN5Q29kZTpjb2x1bW4ucGlwZUFyZ3MuZGlzcGxheTpjb2x1bW4ucGlwZUFyZ3MuZGlnaXRzSW5mbzpncmlkLmxvY2FsZSkgOiBjb2x1bW4uZGF0YVR5cGUgPT09ICdwZXJjZW50JyA/XG4gICAgICAgICh2YWx1ZSB8IHBlcmNlbnQ6Y29sdW1uLnBpcGVBcmdzLmRpZ2l0c0luZm86Z3JpZC5sb2NhbGUpIDogdmFsdWVcIlxuICAgIFtyb3ddPVwicm93RGF0YVwiXG4gICAgW2NvbHVtbl09XCJ0aGlzLmNvbHVtbi5maWVsZFwiXG4gICAgW2NvbnRhaW5lckNsYXNzXT1cIidpZ3gtZ3JpZF9fdGQtdGV4dCdcIlxuICAgIFttZXRhZGF0YV09XCJzZWFyY2hNZXRhZGF0YVwiPnt7XG4gICAgICAgIHZhbHVlID8gdmFsdWUgOiAoY29sdW1uLmhlYWRlciB8fCBjb2x1bW4uZmllbGQpXG4gICAgfX08L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2lubGluZUVkaXRvciAgbGV0LWNlbGw9XCJjZWxsXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ3N0cmluZydcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZ3hJbnB1dCBbKG5nTW9kZWwpXT1cImVkaXRWYWx1ZVwiIFtpZ3hGb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgIChjb21wb3NpdGlvbnN0YXJ0KT1cImdyaWQuY3J1ZFNlcnZpY2UuaXNJbkNvbXBvc2l0aW9uTW9kZSA9IHRydWVcIlxuICAgICAgICAgICAgKGNvbXBvc2l0aW9uZW5kKT1cImdyaWQuY3J1ZFNlcnZpY2UuaXNJbkNvbXBvc2l0aW9uTW9kZSA9IGZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ251bWJlcidcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZ3hJbnB1dCBbKG5nTW9kZWwpXT1cImVkaXRWYWx1ZVwiIFtpZ3hGb2N1c109XCJ0cnVlXCIgW3N0ZXBdPVwic3RlcFwiICB0eXBlPVwibnVtYmVyXCI+XG4gICAgICAgIDwvaWd4LWlucHV0LWdyb3VwPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgICAgICA8aWd4LWNoZWNrYm94IChjaGFuZ2UpPVwiZWRpdFZhbHVlID0gJGV2ZW50LmNoZWNrZWRcIiBbdmFsdWVdPVwiZWRpdFZhbHVlXCIgW2NoZWNrZWRdPVwiZWRpdFZhbHVlXCIgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiPjwvaWd4LWNoZWNrYm94PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJ1wiPlxuICAgICAgICA8aWd4LWRhdGUtcGlja2VyIFtzdHlsZS53aWR0aC4lXT1cIjEwMFwiIFtvdXRsZXRdPVwiZ3JpZC5vdXRsZXRcIiBtb2RlPVwiZHJvcGRvd25cIlxuICAgICAgICBbbG9jYWxlXT1cImdyaWQubG9jYWxlXCIgW3dlZWtTdGFydF09XCJjb2x1bW4ucGlwZUFyZ3Mud2Vla1N0YXJ0XCIgWyh2YWx1ZSldPVwiZWRpdFZhbHVlXCIgW2lneEZvY3VzXT1cInRydWVcIj5cbiAgICA8L2lneC1kYXRlLXBpY2tlcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAndGltZSdcIj5cbiAgICAgICAgPGlneC10aW1lLXBpY2tlciBbc3R5bGUud2lkdGguJV09XCIxMDBcIiBbb3V0bGV0XT1cImdyaWQub3V0bGV0XCJcbiAgICAgICAgICAgIG1vZGU9XCJkcm9wZG93blwiIFtpbnB1dEZvcm1hdF09XCJjb2x1bW4uZGVmYXVsdFRpbWVGb3JtYXRcIiBbKG5nTW9kZWwpXT1cImVkaXRWYWx1ZVwiIFtpZ3hGb2N1c109XCJ0cnVlXCI+XG4gICAgICAgIDwvaWd4LXRpbWUtcGlja2VyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlVGltZSdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlneElucHV0IFtpZ3hEYXRlVGltZUVkaXRvcl09XCJjb2x1bW4uZGVmYXVsdERhdGVUaW1lRm9ybWF0XCIgWyhuZ01vZGVsKV09XCJlZGl0VmFsdWVcIiBbaWd4Rm9jdXNdPVwidHJ1ZVwiLz5cbiAgICAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1wiPlxuICAgICAgICA8aWd4LWlucHV0LWdyb3VwIGRpc3BsYXlEZW5zaXR5PVwiY29tcGFjdFwiPlxuICAgICAgICAgICAgPGlneC1wcmVmaXggKm5nSWY9XCJncmlkLmN1cnJlbmN5UG9zaXRpb25MZWZ0XCI+e3sgY3VycmVuY3lDb2RlU3ltYm9sIH19PC9pZ3gtcHJlZml4PlxuICAgICAgICAgICAgPGlucHV0ICBpZ3hJbnB1dCBbKG5nTW9kZWwpXT1cImVkaXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW2lneEZvY3VzXT1cInRydWVcIiBbc3RlcF09XCJzdGVwXCIgdHlwZT1cIm51bWJlclwiLz5cbiAgICAgICAgICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwiIWdyaWQuY3VycmVuY3lQb3NpdGlvbkxlZnRcIiA+e3sgY3VycmVuY3lDb2RlU3ltYm9sIH19PC9pZ3gtc3VmZml4PlxuICAgICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAncGVyY2VudCdcIj5cbiAgICAgICAgPGlneC1pbnB1dC1ncm91cCBkaXNwbGF5RGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgIDxpbnB1dCBpZ3hJbnB1dCBbKG5nTW9kZWwpXT1cImVkaXRWYWx1ZVwiIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgICAgIFtpZ3hGb2N1c109XCJ0cnVlXCIgdHlwZT1cIm51bWJlclwiLz5cbiAgICAgICAgICAgIDxpZ3gtc3VmZml4PiB7eyBlZGl0VmFsdWUgfCBwZXJjZW50OmNvbHVtbi5waXBlQXJncy5kaWdpdHNJbmZvOmdyaWQubG9jYWxlIH19IDwvaWd4LXN1ZmZpeD5cbiAgICAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dFeHBhbmRlckluZGljYXRvclwiPlxuICAgIDxkaXYgI2luZGljYXRvclxuICAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fdHJlZS1ncm91cGluZy1pbmRpY2F0b3JcIlxuICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uSW5kaWNhdG9yRm9jdXMoKVwiPlxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImljb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6ICB0aGlzIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwaW5uZWRJbmRpY2F0b3JUZW1wbGF0ZTsgY29udGV4dDogY29udGV4dFwiPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IGNvbnRleHRcIj5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RXhwYW5kZWRUZW1wbGF0ZT5cbiAgICAgICAgPGlneC1pY29uPmV4cGFuZF9tb3JlPC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZT5cbiAgICAgICAgPGlneC1pY29uPmNoZXZyb25fcmlnaHQ8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|