@datorama/core 22.14.1 → 22.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/bundle.scss +9987 -6561
  2. package/bundles/datorama-core.umd.js +242 -95
  3. package/bundles/datorama-core.umd.js.map +1 -1
  4. package/bundles/datorama-core.umd.min.js +60 -60
  5. package/bundles/datorama-core.umd.min.js.map +1 -1
  6. package/datorama-core.metadata.json +1 -1
  7. package/esm2015/lib/button/button.component.js +1 -1
  8. package/esm2015/lib/grid/dato-grid.js +4 -3
  9. package/esm2015/lib/grid/grid/grid.component.js +5 -9
  10. package/esm2015/lib/grid/grid-sort.utils.js +28 -0
  11. package/esm2015/lib/grid-v2/grid/grid-v2.component.js +10 -3
  12. package/esm2015/lib/grid-v2/grid/grid-v2.config.js +45 -14
  13. package/esm2015/lib/grid-v2/grid-column-header/grid-column-header.component.js +4 -1
  14. package/esm2015/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.js +4 -1
  15. package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +60 -26
  16. package/esm2015/lib/grid-v2/grid-header/grid-header.component.js +3 -2
  17. package/esm2015/lib/grid-v2/grid-on-hover/grid-on-hover.component.js +17 -14
  18. package/esm2015/lib/grid-v2/grid-store/grid.query.js +11 -6
  19. package/esm2015/lib/grid-v2/grid-store/grid.service.js +19 -5
  20. package/esm2015/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +23 -17
  21. package/esm2015/lib/radio/radio.component.js +1 -1
  22. package/esm2015/lib/utils/string.js +9 -11
  23. package/esm2015/lib/version.js +2 -2
  24. package/esm5/lib/button/button.component.js +1 -1
  25. package/esm5/lib/grid/dato-grid.js +4 -3
  26. package/esm5/lib/grid/grid/grid.component.js +5 -9
  27. package/esm5/lib/grid/grid-sort.utils.js +35 -0
  28. package/esm5/lib/grid-v2/grid/grid-v2.component.js +14 -3
  29. package/esm5/lib/grid-v2/grid/grid-v2.config.js +47 -15
  30. package/esm5/lib/grid-v2/grid-column-header/grid-column-header.component.js +4 -1
  31. package/esm5/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.js +4 -1
  32. package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +64 -26
  33. package/esm5/lib/grid-v2/grid-header/grid-header.component.js +3 -2
  34. package/esm5/lib/grid-v2/grid-on-hover/grid-on-hover.component.js +17 -14
  35. package/esm5/lib/grid-v2/grid-store/grid.query.js +11 -6
  36. package/esm5/lib/grid-v2/grid-store/grid.service.js +19 -5
  37. package/esm5/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +23 -17
  38. package/esm5/lib/radio/radio.component.js +1 -1
  39. package/esm5/lib/utils/string.js +9 -11
  40. package/esm5/lib/version.js +2 -2
  41. package/fesm2015/datorama-core.js +226 -96
  42. package/fesm2015/datorama-core.js.map +1 -1
  43. package/fesm5/datorama-core.js +243 -97
  44. package/fesm5/datorama-core.js.map +1 -1
  45. package/lib/grid/grid-sort.utils.d.ts +15 -0
  46. package/lib/grid-v2/grid/grid-v2.component.d.ts +4 -0
  47. package/lib/grid-v2/grid/grid-v2.config.d.ts +1 -0
  48. package/lib/grid-v2/grid-column-header/grid-column-header.component.d.ts +2 -1
  49. package/lib/grid-v2/grid-column-header/grid-multi-select-header/grid-multi-select-header.component.d.ts +1 -0
  50. package/lib/grid-v2/grid-controller/grid-controller.component.d.ts +15 -0
  51. package/lib/grid-v2/grid-on-hover/grid-on-hover.component.d.ts +1 -3
  52. package/lib/grid-v2/grid-store/grid.service.d.ts +325 -281
  53. package/lib/grid-v2/grid-toolbar/grid-toolbar.component.d.ts +1 -0
  54. package/package.json +4 -1
  55. package/testing/src/grid/rows.ts +1 -1
@@ -9,10 +9,9 @@ import { __assign, __decorate, __metadata } from "tslib";
9
9
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, isDevMode, OnDestroy, OnInit, ViewChild } from '@angular/core';
10
10
  import { GridActionType } from './grid-toolbar.types';
11
11
  import { DatoGridControllerComponent } from '../grid-controller/grid-controller.component';
12
- import { untilDestroyed } from 'ngx-take-until-destroy';
13
- import { debounceTime, filter, take } from 'rxjs/operators';
12
+ import { debounceTime, filter, take, takeUntil } from 'rxjs/operators';
14
13
  import { isFunction } from '../../utils/validators';
15
- import { merge } from 'rxjs';
14
+ import { merge, Subject } from 'rxjs';
16
15
  import { DatoPopover } from '../../popover/popover.service';
17
16
  import { DatoGridGroupsMenuComponent } from '../grid-groups-menu/grid-groups-menu.component';
18
17
  import { GridQuery } from '../grid-store/grid.query';
@@ -33,6 +32,7 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
33
32
  this.gridService = gridService;
34
33
  this.MAX_VISIBLE_ROW_ACTIONS = 5;
35
34
  this.MAX_VISIBLE_GRID_ACTIONS = 2;
35
+ this.destroy$ = new Subject();
36
36
  this._maxRowActions = this.MAX_VISIBLE_ROW_ACTIONS;
37
37
  this.displayExport = true;
38
38
  this.rowActions = { mainList: [], moreMenu: [] };
@@ -70,21 +70,24 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
70
70
  });
71
71
  Object.defineProperty(DatoGridV2ToolbarComponent.prototype, "enableV2_1", {
72
72
  get: function () {
73
- return this.gridController.gridOptions.enableV2_1;
73
+ var gridOptions = this.gridController.gridOptions;
74
+ return gridOptions ? gridOptions.enableV2_1 : false;
74
75
  },
75
76
  enumerable: true,
76
77
  configurable: true
77
78
  });
78
79
  Object.defineProperty(DatoGridV2ToolbarComponent.prototype, "enableSearch", {
79
80
  get: function () {
80
- return this.gridController.gridOptions.enableSearch;
81
+ var gridOptions = this.gridController.gridOptions;
82
+ return gridOptions ? gridOptions.enableSearch : false;
81
83
  },
82
84
  enumerable: true,
83
85
  configurable: true
84
86
  });
85
87
  Object.defineProperty(DatoGridV2ToolbarComponent.prototype, "enableBackground", {
86
88
  get: function () {
87
- return this.gridController.gridOptions.enableBackground;
89
+ var gridOptions = this.gridController.gridOptions;
90
+ return gridOptions ? gridOptions.enableBackground : false;
88
91
  },
89
92
  enumerable: true,
90
93
  configurable: true
@@ -130,17 +133,17 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
130
133
  DatoGridV2ToolbarComponent.prototype.ngOnInit = function () {
131
134
  var _this = this;
132
135
  var dataChanges = this.gridController.gridQuery.waitForGrid(function () {
133
- return merge(_this.gridQuery.gridRef.cellValueChanged, _this.gridQuery.gridRef.rowDataUpdated, _this.gridQuery.rowActionVisibilityChanged$).pipe(debounceTime(100), untilDestroyed(_this));
136
+ return merge(_this.gridQuery.gridRef.cellValueChanged, _this.gridQuery.gridRef.rowDataUpdated, _this.gridQuery.rowActionVisibilityChanged$).pipe(debounceTime(100), takeUntil(_this.destroy$));
134
137
  });
135
138
  var gridInit = this.gridQuery.gridReady$.pipe(take(1));
136
- gridInit.pipe(untilDestroyed(this)).subscribe(function () {
139
+ gridInit.pipe(takeUntil(this.destroy$)).subscribe(function () {
137
140
  _this.groupsAllowed = !_this.hideGrouping && !_this.gridQuery.getValue().serverSidePagination.enabled;
138
141
  });
139
142
  this.initGridActions();
140
143
  var selectedRowsChanged$ = this.gridQuery.selectedRowsChange$;
141
144
  var isSelectAllRowsChanged$ = this.gridQuery.selectIsSelectAllRowsEnabled();
142
145
  merge(dataChanges, gridInit, selectedRowsChanged$, isSelectAllRowsChanged$)
143
- .pipe(filter(function () { return !!_this.api; }), untilDestroyed(this))
146
+ .pipe(filter(function () { return !!_this.api; }), takeUntil(this.destroy$))
144
147
  .subscribe(function () {
145
148
  _this.resolveVisibleActions();
146
149
  _this.cdr.detectChanges();
@@ -287,7 +290,7 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
287
290
  var column = _a.column, value = _a.value;
288
291
  var formatter = column.getColDef().valueFormatter;
289
292
  // TODO: followup: https://ag-grid.zendesk.com/hc/en-us/requests/10963?page=1
290
- return formatter ? formatter({ value: value }) : value;
293
+ return isFunction(formatter) ? formatter({ value: value }) : value;
291
294
  }
292
295
  });
293
296
  }
@@ -316,7 +319,7 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
316
319
  var waitForAnimation = this.hasGroups ? 0 : 200;
317
320
  /** When changing the tables grouping all the rows are automatically expanded, we need to update the icon state */
318
321
  var expandSubscription = this.gridQuery.gridRef.columnRowGroupChanged
319
- .pipe(take(1), untilDestroyed(this))
322
+ .pipe(take(1), takeUntil(this.destroy$))
320
323
  .subscribe(function () {
321
324
  _this.rowGroupsCollapsed = false;
322
325
  _this.cdr.detectChanges();
@@ -333,7 +336,7 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
333
336
  gridService: _this.gridService
334
337
  }
335
338
  })
336
- .pipe(untilDestroyed(_this))
339
+ .pipe(takeUntil(_this.destroy$))
337
340
  .subscribe(function () {
338
341
  expandSubscription.unsubscribe();
339
342
  _this.openMenus.group = false;
@@ -350,7 +353,10 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
350
353
  DatoGridV2ToolbarComponent.prototype.clearSelectedRows = function () {
351
354
  this.gridService.deselectAllRows();
352
355
  };
353
- DatoGridV2ToolbarComponent.prototype.ngOnDestroy = function () { };
356
+ DatoGridV2ToolbarComponent.prototype.ngOnDestroy = function () {
357
+ this.destroy$.next();
358
+ this.destroy$.complete();
359
+ };
354
360
  DatoGridV2ToolbarComponent.prototype.getCollapseState = function (_a) {
355
361
  var node = _a.node, api = _a.api;
356
362
  var collapsed = true;
@@ -369,7 +375,7 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
369
375
  /** Listen to adding or removing row groups from the columns and not the groups menu */
370
376
  this.gridQuery
371
377
  .waitForGrid(function () { return _this.gridQuery.gridRef.columnRowGroupChanged; })
372
- .pipe(filter(function () { return !_this.openMenus.group; }), untilDestroyed(this))
378
+ .pipe(filter(function () { return !_this.openMenus.group; }), takeUntil(this.destroy$))
373
379
  .subscribe(function () {
374
380
  _this.rowGroupsCollapsed = false;
375
381
  _this.cdr.detectChanges();
@@ -377,7 +383,7 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
377
383
  /** Listen to row collapse state to update the icon */
378
384
  this.gridQuery
379
385
  .waitForGrid(function () { return _this.gridQuery.gridRef.rowGroupOpened; })
380
- .pipe(untilDestroyed(this))
386
+ .pipe(takeUntil(this.destroy$))
381
387
  .subscribe(function (event) {
382
388
  var collapsed = _this.getCollapseState(event);
383
389
  if (collapsed !== _this.rowGroupsCollapsed) {
@@ -389,7 +395,7 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
389
395
  DatoGridV2ToolbarComponent.prototype.subscribeRowsSelectionData = function () {
390
396
  var _this = this;
391
397
  this.gridQuery.rowsSelectionData$
392
- .pipe(untilDestroyed(this))
398
+ .pipe(takeUntil(this.destroy$))
393
399
  .subscribe(function (_a) {
394
400
  var totalRowsCount = _a.totalRowsCount, selectedRowsCount = _a.selectedRowsCount, selectedPageRowsCount = _a.selectedPageRowsCount, isAllPageRowsSelected = _a.isAllPageRowsSelected;
395
401
  _this.totalRowsCount = totalRowsCount;
@@ -475,4 +481,4 @@ var DatoGridV2ToolbarComponent = /** @class */ (function () {
475
481
  return DatoGridV2ToolbarComponent;
476
482
  }());
477
483
  export { DatoGridV2ToolbarComponent };
478
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsY0FBYyxFQUdmLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFD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QUU7OzttRUFTUDtJQUVRO1FBQVIsS0FBSyxFQUFFOztvRUFBdUI7SUFDdEI7UUFBUixLQUFLLEVBQUU7O3lFQUE2RDtJQUM1RDtRQUFSLEtBQUssRUFBRTs7cUZBQXFFO0lBQ3BFO1FBQVIsS0FBSyxFQUFFOzt5RkFBMEM7SUEzQnZDLDBCQUEwQjtRQU50QyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLDRtV0FBNEM7WUFFNUMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2hELENBQUM7eUNBZ0V5QiwyQkFBMkI7WUFDckMsaUJBQWlCO1lBQ1gsb0JBQW9CO1lBQ3RCLFdBQVc7WUFDVCxTQUFTO1lBQ1AsV0FBVztPQXBFdkIsMEJBQTBCLENBa1p0QztJQUFELGlDQUFDO0NBQUEsQUFsWkQsSUFrWkM7U0FsWlksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IERhdG9yYW1hLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIEFwYWNoZSBMaWNlbnNlIDIuMCBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXRvcmFtYS9jbGllbnQtY29yZS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBpc0Rldk1vZGUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBCYXNlVG9vbGJhckFjdGlvbixcbiAgR3JpZEFjdGlvbixcbiAgR3JpZEFjdGlvblR5cGUsXG4gIEdyaWRSb3dBY3Rpb25zU2NyZWVuVGhyZXNob2xkLFxuICBSb3dBY3Rpb25cbn0gZnJvbSAnLi9ncmlkLXRvb2xiYXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRDb250cm9sbGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IFByb2Nlc3NDZWxsRm9yRXhwb3J0UGFyYW1zLCBSb3dHcm91cE9wZW5lZEV2ZW50LCBSb3dOb2RlIH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0b1BvcG92ZXIgfSBmcm9tICcuLi8uLi9wb3BvdmVyL3BvcG92ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRvR3JpZEdyb3Vwc01lbnVDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkLWdyb3Vwcy1tZW51L2dyaWQtZ3JvdXBzLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4uL2dyaWQtc3RvcmUvZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBnZXRWaXNpYmxlQWN0aW9ucyB9IGZyb20gJy4uL2dyaWQtdjIudXRpbCc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBERUZBVUxUX0ZPUk1BVCB9IGZyb20gJy4uLy4uL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLnR5cGVzJztcbmltcG9ydCB7IERhdG9HcmlkQ29sdW1uRGlzcGxheU1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkLWNvbHVtbnMtZGlzcGxheS1tZW51L2dyaWQtY29sdW1ucy1kaXNwbGF5LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29yZUV2ZW50VHlwZXMgfSBmcm9tICcuLi8uLi9ldmVudC1sb2dnZXInO1xuaW1wb3J0IHsgRGF0b1RyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBzaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sbGVjdGlvbic7XG5pbXBvcnQgeyBHcmlkUm93c1NlbGVjdGlvbkRhdGEgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuXG50eXBlIFRhYmxlQWN0aW9uID1cbiAgfCAnQXV0b2ZpdCB0byBDb250ZW50J1xuICB8ICdBdXRvZml0IHRvIFBhZ2UnXG4gIHwgJ1Nob3cgSGlkZSBDb2x1bW4nXG4gIHwgJ1Jlc2V0IFNldHRpbmdzJ1xuICB8ICdSZXNldCBGaWx0ZXJzJ1xuICB8ICdHcm91cCBmcm9tIFNldHRpbmdzJ1xuICB8ICdHcm91cCBmcm9tIFRvb2xiYXInXG4gIHwgJ0V4cG9ydCdcbiAgfCAnQ29sbGFwc2UgRXhwYW5kJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0by1ncmlkLXRvb2xiYXItdjInLFxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC10b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdG9HcmlkVjJUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9WSVNJQkxFX1JPV19BQ1RJT05TID0gNTtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfVklTSUJMRV9HUklEX0FDVElPTlMgPSAyO1xuICBwcml2YXRlIF9tYXhSb3dBY3Rpb25zID0gdGhpcy5NQVhfVklTSUJMRV9ST1dfQUNUSU9OUztcblxuICBAVmlld0NoaWxkKCdncm91cFRyaWdnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBUcmlnZ2VyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZXR0aW5nc1RyaWdnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgc2V0dGluZ3NUcmlnZ2VyOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGRpc3BsYXlFeHBvcnQgPSB0cnVlO1xuICBjcmVhdGVBY3Rpb246IEdyaWRBY3Rpb247XG4gIHJvd0FjdGlvbnM6IHsgbWFpbkxpc3Q6IFJvd0FjdGlvbltdOyBtb3JlTWVudTogUm93QWN0aW9uW10gfSA9IHsgbWFpbkxpc3Q6IFtdLCBtb3JlTWVudTogW10gfTtcbiAgZ3JpZEFjdGlvbnM6IHsgbWFpbkxpc3Q6IEdyaWRBY3Rpb25bXTsgbW9yZU1lbnU6IEdyaWRBY3Rpb25bXSB9ID0geyBtYWluTGlzdDogW10sIG1vcmVNZW51OiBbXSB9O1xuXG4gIEBJbnB1dCgpIHNldCBtYXhSb3dBY3Rpb25zKG1heFJvd0FjdGlvbnM6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmVuYWJsZVYyXzEpIHtcbiAgICAgIHRoaXMuX21heFJvd0FjdGlvbnMgPSBNYXRoLm1pbihtYXhSb3dBY3Rpb25zLCB0aGlzLk1BWF9WSVNJQkxFX1JPV19BQ1RJT05TKTtcbiAgICAgIGlmIChtYXhSb3dBY3Rpb25zID4gdGhpcy5NQVhfVklTSUJMRV9ST1dfQUNUSU9OUyAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERhdG9HcmlkIFYyLjEgLSBtYXhSb3dBY3Rpb25zIGNhbm5vdCBiZSBvdmVyICR7dGhpcy5NQVhfVklTSUJMRV9ST1dfQUNUSU9OU31gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWF4Um93QWN0aW9ucyA9IG1heFJvd0FjdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgaGlkZUdyb3VwaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlciA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5zZWFyY2gnKTtcbiAgQElucHV0KCkgcm93QWN0aW9uc1Nob3J0TGFiZWxUaHJlc2hvbGQ6IEdyaWRSb3dBY3Rpb25zU2NyZWVuVGhyZXNob2xkID0gMTUzOTtcbiAgQElucHV0KCkgZGlzcGxheUN1c3RvbUdyaWRBY3Rpb25zU2VwYXJhdG9yID0gdHJ1ZTtcblxuICBvcGVuTWVudXMgPSB7XG4gICAgZ3JvdXA6IGZhbHNlLFxuICAgIHNldHRpbmdzOiBmYWxzZVxuICB9O1xuICByb3dHcm91cHNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgZ3JvdXBzQWxsb3dlZCA9ICF0aGlzLmhpZGVHcm91cGluZztcbiAgaXNTZWxlY3RlZFJvdyA9IGZhbHNlO1xuICBpc1RyZWVNb2RlOiBib29sZWFuID0gdGhpcy5ncmlkU2VydmljZS50cmVlRGF0YTtcbiAgdG90YWxSb3dzQ291bnQgPSAwO1xuICBzZWxlY3RlZFJvd3NDb3VudCA9IDA7XG4gIGFsbFBhZ2VSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgd2lkdGhUb0hpZGVBY3Rpb25zTGFiZWxzOiBHcmlkUm93QWN0aW9uc1NjcmVlblRocmVzaG9sZCA9IDE0Mzk7XG5cbiAgZ2V0IGVuYWJsZVYyXzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMTtcbiAgfVxuXG4gIGdldCBlbmFibGVTZWFyY2goKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoO1xuICB9XG5cbiAgZ2V0IGVuYWJsZUJhY2tncm91bmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZE9wdGlvbnMuZW5hYmxlQmFja2dyb3VuZDtcbiAgfVxuXG4gIGdldCBpc1Jvd0FjdGlvbnNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5lbmFibGVWMl8xIHx8ICh0aGlzLmVuYWJsZVYyXzEgJiYgdGhpcy5pc1NlbGVjdGVkUm93KTtcbiAgfVxuXG4gIGdldCBoYXNSb3dBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzaXplKHRoaXMucm93QWN0aW9ucy5tYWluTGlzdCkgPiAwIHx8IHNpemUodGhpcy5yb3dBY3Rpb25zLm1vcmVNZW51KSA+IDA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZ3JpZENvbnRyb2xsZXI6IERhdG9HcmlkQ29udHJvbGxlckNvbXBvbmVudCxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9wb3ZlcjogRGF0b1BvcG92ZXIsXG4gICAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeSxcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZVxuICApIHt9XG5cbiAgZ2V0IGhpZGRlbkNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIGAoJHt0aGlzLmdyaWRRdWVyeS5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5zKCkubGVuZ3RofS8ke3RoaXMuZ3JpZFF1ZXJ5LmdldEFsbENvbHVtbnMoKS5sZW5ndGh9KWA7XG4gIH1cblxuICBnZXQgaGFzQWN0aXZlTW9yZUFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93QWN0aW9ucy5tb3JlTWVudS5zb21lKCh7IHZpc2libGUgfSkgPT4gdmlzaWJsZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZFF1ZXJ5LmFwaTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gdGhpcy5ncmlkQ29udHJvbGxlci5ncmlkUXVlcnkud2FpdEZvckdyaWQoKCkgPT5cbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLmdyaWRRdWVyeS5ncmlkUmVmLmNlbGxWYWx1ZUNoYW5nZWQsXG4gICAgICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWYucm93RGF0YVVwZGF0ZWQsXG4gICAgICAgIHRoaXMuZ3JpZFF1ZXJ5LnJvd0FjdGlvblZpc2liaWxpdHlDaGFuZ2VkJFxuICAgICAgKS5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICApO1xuICAgIGNvbnN0IGdyaWRJbml0ID0gdGhpcy5ncmlkUXVlcnkuZ3JpZFJlYWR5JC5waXBlKHRha2UoMSkpO1xuICAgIGdyaWRJbml0LnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmdyb3Vwc0FsbG93ZWQgPSAhdGhpcy5oaWRlR3JvdXBpbmcgJiYgIXRoaXMuZ3JpZFF1ZXJ5LmdldFZhbHVlKCkuc2VydmVyU2lkZVBhZ2luYXRpb24uZW5hYmxlZDtcbiAgICB9KTtcbiAgICB0aGlzLmluaXRHcmlkQWN0aW9ucygpO1xuICAgIGNvbnN0IHNlbGVjdGVkUm93c0NoYW5nZWQkID0gdGhpcy5ncmlkUXVlcnkuc2VsZWN0ZWRSb3dzQ2hhbmdlJDtcbiAgICBjb25zdCBpc1NlbGVjdEFsbFJvd3NDaGFuZ2VkJCA9IHRoaXMuZ3JpZFF1ZXJ5LnNlbGVjdElzU2VsZWN0QWxsUm93c0VuYWJsZWQoKTtcbiAgICBtZXJnZShkYXRhQ2hhbmdlcywgZ3JpZEluaXQsIHNlbGVjdGVkUm93c0NoYW5nZWQkLCBpc1NlbGVjdEFsbFJvd3NDaGFuZ2VkJClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLmFwaSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlVmlzaWJsZUFjdGlvbnMoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5yZWdpc3Rlckdyb3VwTGlzdGVuZXJzKCk7XG5cbiAgICB0aGlzLnN1YnNjcmliZVJvd3NTZWxlY3Rpb25EYXRhKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVSZWxvYWRHcmlkQWN0aW9ucygpO1xuICB9XG5cbiAgb25BY3Rpb25DbGljayhhY3Rpb246IEJhc2VUb29sYmFyQWN0aW9uKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oYWN0aW9uLm9uQ2xpY2spKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFJvd3NDb3VudCA9IHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93c0NvdW50KCk7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLl9sb2dFdmVudChDb3JlRXZlbnRUeXBlcy5HUklEX1RBQkxFX0FDVElPTiwge1xuICAgICAgICBhY3Rpb246IGFjdGlvbi5rZXksXG4gICAgICAgIG51bU9mSXRlbXM6IHNlbGVjdGVkUm93c0NvdW50LFxuICAgICAgICBmcm9tOiAnVG9vbGJhcidcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsRmlsdGVyID0gdGhpcy5ncmlkU2VydmljZS5nZXRGaWx0ZXJGb3JTZXJ2ZXJBY3Rpb25PblNlbGVjdEFsbCgpO1xuICAgICAgICBhY3Rpb24ub25DbGljayhudWxsLCB0cnVlLCBzZWxlY3RBbGxGaWx0ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdyaWRDb250cm9sbGVyLmdyaWRRdWVyeS5nZXRTZWxlY3RlZFJvd05vZGVzKCk7XG4gICAgICAgIGFjdGlvbi5vbkNsaWNrKHNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChhY3Rpb24gYXMgR3JpZEFjdGlvbikuYWN0aW9uVHlwZSA9PT0gR3JpZEFjdGlvblR5cGUuRVhQT1JUKSB7XG4gICAgICB0aGlzLmV4ZWN1dGVUYWJsZUFjdGlvbignRXhwb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZVZpc2libGVBY3Rpb25zKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5ncmlkUXVlcnkuZ2V0U2VsZWN0ZWRSb3dOb2RlcygpO1xuICAgIHRoaXMuaXNTZWxlY3RlZFJvdyA9IHNlbGVjdGVkLmxlbmd0aCA+IDAgfHwgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZDtcbiAgICBjb25zdCB2aXNpYmxlQWN0aW9ucyA9IGdldFZpc2libGVBY3Rpb25zKFxuICAgICAgdGhpcy5ncmlkQ29udHJvbGxlci5yb3dBY3Rpb25zLFxuICAgICAgdGhpcy5ncmlkUXVlcnkuZ2V0U2VsZWN0ZWRSb3dzQ291bnQoKSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZFxuICAgICkuZmlsdGVyKChhY3Rpb246IFJvd0FjdGlvbikgPT4gIXRoaXMuaXNSb3dBY3Rpb25IaWRkZW4oYWN0aW9uKSk7XG4gICAgdGhpcy5yb3dBY3Rpb25zID0ge1xuICAgICAgbWFpbkxpc3Q6IHZpc2libGVBY3Rpb25zLnNsaWNlKDAsIHRoaXMuX21heFJvd0FjdGlvbnMpLFxuICAgICAgbW9yZU1lbnU6IHZpc2libGVBY3Rpb25zLnNsaWNlKHRoaXMuX21heFJvd0FjdGlvbnMsIHZpc2libGVBY3Rpb25zLmxlbmd0aClcbiAgICB9O1xuICAgIHRoaXMuaW5pdFdpZHRoVG9IaWRlQWN0aW9uc0xhYmVscygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0V2lkdGhUb0hpZGVBY3Rpb25zTGFiZWxzKCkge1xuICAgIGNvbnN0IHZpc2libGVBY3Rpb25zQ291bnQgPVxuICAgICAgdGhpcy5yb3dBY3Rpb25zLm1haW5MaXN0Lmxlbmd0aCArXG4gICAgICAodGhpcy5yb3dBY3Rpb25zLm1vcmVNZW51Lmxlbmd0aCA+IDAgPyAxIDogMCkgK1xuICAgICAgKHRoaXMuZ3JpZEFjdGlvbnMubW9yZU1lbnUubGVuZ3RoID4gMCA/IDEgOiAwKSArXG4gICAgICAodGhpcy5jcmVhdGVBY3Rpb24gPyAxIDogMCk7XG5cbiAgICBjb25zdCB3aW5kb3dXaWR0aFRocmVzaG9sZHM6IEdyaWRSb3dBY3Rpb25zU2NyZWVuVGhyZXNob2xkW10gPSBbMTIzOSwgMTMzOSwgMTQzOSwgMTUzOV07XG4gICAgdGhpcy53aWR0aFRvSGlkZUFjdGlvbnNMYWJlbHMgPVxuICAgICAgd2luZG93V2lkdGhUaHJlc2hvbGRzW01hdGgubWluKE1hdGgubWF4KHZpc2libGVBY3Rpb25zQ291bnQgLSA1LCAwKSwgd2luZG93V2lkdGhUaHJlc2hvbGRzLmxlbmd0aCAtIDEpXTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEdyaWRBY3Rpb25zKCkge1xuICAgIGNvbnN0IGdyaWRBY3Rpb25zID0gdGhpcy5ncmlkQ29udHJvbGxlci5ncmlkQWN0aW9ucztcbiAgICB0aGlzLmluaXRDcmVhdGVBY3Rpb24oZ3JpZEFjdGlvbnMpO1xuICAgIHRoaXMuaW5pdEV4cG9ydEFjdGlvbihncmlkQWN0aW9ucyk7XG4gICAgbGV0IG1heFZpc2libGVBY3Rpb25zID0gdGhpcy5NQVhfVklTSUJMRV9HUklEX0FDVElPTlMgLSAodGhpcy5kaXNwbGF5RXhwb3J0ID8gMSA6IDApO1xuICAgIGlmIChzaXplKGdyaWRBY3Rpb25zKSA9PT0gbWF4VmlzaWJsZUFjdGlvbnMgKyAxKSB7XG4gICAgICBtYXhWaXNpYmxlQWN0aW9ucysrO1xuICAgIH1cbiAgICB0aGlzLmdyaWRBY3Rpb25zID0ge1xuICAgICAgbWFpbkxpc3Q6IGdyaWRBY3Rpb25zLnNsaWNlKDAsIG1heFZpc2libGVBY3Rpb25zKSxcbiAgICAgIG1vcmVNZW51OiBncmlkQWN0aW9ucy5zbGljZShtYXhWaXNpYmxlQWN0aW9ucywgZ3JpZEFjdGlvbnMubGVuZ3RoKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGluaXRDcmVhdGVBY3Rpb24oZ3JpZEFjdGlvbnM6IEdyaWRBY3Rpb25bXSkge1xuICAgIGNvbnN0IGNyZWF0ZUFjdGlvbkluZGV4ID0gZ3JpZEFjdGlvbnMuZmluZEluZGV4KCh7IGFjdGlvblR5cGUgfSkgPT4gYWN0aW9uVHlwZSA9PT0gR3JpZEFjdGlvblR5cGUuQ1JFQVRFKTtcbiAgICB0aGlzLmNyZWF0ZUFjdGlvbiA9IGNyZWF0ZUFjdGlvbkluZGV4ID49IDAgPyBncmlkQWN0aW9ucy5zcGxpY2UoY3JlYXRlQWN0aW9uSW5kZXgsIDEpWzBdIDogbnVsbDtcbiAgICBpZiAodGhpcy5jcmVhdGVBY3Rpb24pIHtcbiAgICAgIHRoaXMuY3JlYXRlQWN0aW9uLmxhYmVsID0gdGhpcy5jcmVhdGVBY3Rpb24ubGFiZWwgfHwgJ2NvcmUuY3JlYXRlLW5ldyc7XG4gICAgICB0aGlzLmNyZWF0ZUFjdGlvbi5rZXkgPSB0aGlzLmNyZWF0ZUFjdGlvbi5rZXkgfHwgJ2NyZWF0ZS1uZXcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEV4cG9ydEFjdGlvbihncmlkQWN0aW9uczogR3JpZEFjdGlvbltdKSB7XG4gICAgY29uc3QgZXhwb3J0QWN0aW9uID0gZ3JpZEFjdGlvbnMuZmluZCgoeyBhY3Rpb25UeXBlIH0pID0+IGFjdGlvblR5cGUgPT09IEdyaWRBY3Rpb25UeXBlLkVYUE9SVCk7XG4gICAgaWYgKGV4cG9ydEFjdGlvbikge1xuICAgICAgY29uc3QgeyBvbkNsaWNrLCBpY29uLCBsYWJlbCwgdG9vbHRpcCwga2V5IH0gPSBleHBvcnRBY3Rpb247XG4gICAgICBleHBvcnRBY3Rpb24ub25DbGljayA9IG9uQ2xpY2sgfHwgKCgpID0+IHRoaXMuZXhlY3V0ZVRhYmxlQWN0aW9uKCdFeHBvcnQnKSk7XG4gICAgICBleHBvcnRBY3Rpb24uaWNvbiA9IGljb24gfHwgJ2V4cG9ydCc7XG4gICAgICBleHBvcnRBY3Rpb24ubGFiZWwgPSBsYWJlbCB8fCAnY29yZS5leHBvcnQtdGFibGUnO1xuICAgICAgZXhwb3J0QWN0aW9uLnRvb2x0aXAgPSB0b29sdGlwIHx8ICdjb3JlLmV4cG9ydC10YWJsZSc7XG4gICAgICBleHBvcnRBY3Rpb24ua2V5ID0ga2V5IHx8ICdleHBvcnQnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGFjdGlvblxuICAgKi9cbiAgZXhlY3V0ZVRhYmxlQWN0aW9uKGFjdGlvbjogVGFibGVBY3Rpb24pIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLl9sb2dFdmVudChDb3JlRXZlbnRUeXBlcy5HUklEX0dFTkVSQUxfVEFCTEVfQUNUSU9OLCB7IGFjdGlvbiB9KTtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnQXV0b2ZpdCB0byBDb250ZW50JzpcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5maXRHcmlkKCdjb250ZW50Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXV0b2ZpdCB0byBQYWdlJzpcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5maXRHcmlkKCdjb250YWluZXInKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdDb2xsYXBzZSBFeHBhbmQnOlxuICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXhwb3J0JzpcbiAgICAgICAgdGhpcy5leHBvcnRUYWJsZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0dyb3VwIGZyb20gU2V0dGluZ3MnOlxuICAgICAgY2FzZSAnR3JvdXAgZnJvbSBUb29sYmFyJzpcbiAgICAgICAgdGhpcy5vcGVuR3JvdXBNZW51KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUmVzZXQgRmlsdGVycyc6XG4gICAgICAgIHRoaXMucmVzZXRGaWx0ZXJzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUmVzZXQgU2V0dGluZ3MnOlxuICAgICAgICB0aGlzLnJlc2V0U2V0dGluZ3MoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdTaG93IEhpZGUgQ29sdW1uJzpcbiAgICAgICAgdGhpcy5vcGVuQ29sdW1uTWVudSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0b2dnbGVFeHBhbmRlZCgpIHtcbiAgICB0aGlzLnJvd0dyb3Vwc0NvbGxhcHNlZCA/IHRoaXMuYXBpLmdyaWQuZXhwYW5kQWxsKCkgOiB0aGlzLmFwaS5ncmlkLmNvbGxhcHNlQWxsKCk7XG4gICAgdGhpcy5yb3dHcm91cHNDb2xsYXBzZWQgPSAhdGhpcy5yb3dHcm91cHNDb2xsYXBzZWQ7XG4gIH1cblxuICBnZXQgaGFzR3JvdXBzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5jb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBleHBvcnRUYWJsZSgpIHtcbiAgICBjb25zdCB7IGdyaWROYW1lLCBleHBvcnRHcmlkIH0gPSB0aGlzLmdyaWRDb250cm9sbGVyLmdyaWRPcHRpb25zO1xuICAgIGlmIChpc0Z1bmN0aW9uKGV4cG9ydEdyaWQpKSB7XG4gICAgICBleHBvcnRHcmlkKHsgLi4udGhpcy5hcGksIC4uLnRoaXMuZ3JpZFF1ZXJ5LmdldFZhbHVlKCkuc2V0dGluZ3MgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRvZGF5ID0gZm9ybWF0KG5ldyBEYXRlKCksIERFRkFVTFRfRk9STUFUKTtcbiAgICAgIHRoaXMuYXBpLmdyaWQuZXhwb3J0RGF0YUFzRXhjZWwoe1xuICAgICAgICBmaWxlTmFtZTogYCR7Z3JpZE5hbWV9IC0gJHt0b2RheX1gLFxuICAgICAgICBwcm9jZXNzQ2VsbENhbGxiYWNrOiAoeyBjb2x1bW4sIHZhbHVlIH06IFByb2Nlc3NDZWxsRm9yRXhwb3J0UGFyYW1zKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gY29sdW1uLmdldENvbERlZigpLnZhbHVlRm9ybWF0dGVyO1xuICAgICAgICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTA5NjM/cGFnZT0xXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlciA/IGZvcm1hdHRlcih7IHZhbHVlIH0gYXMgYW55KSA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNldFNldHRpbmdzKCkge1xuICAgIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZFNlcnZpY2UucmVzZXRUYWJsZVNldHRpbmdzKCk7XG4gIH1cblxuICBvcGVuQ29sdW1uTWVudSgpIHtcbiAgICB0aGlzLnBvcG92ZXIub3BlbihEYXRvR3JpZENvbHVtbkRpc3BsYXlNZW51Q29tcG9uZW50LCB0aGlzLnNldHRpbmdzVHJpZ2dlci5uYXRpdmVFbGVtZW50LCB7XG4gICAgICB3aWR0aDogMjIwLFxuICAgICAgY2xhc3NOYW1lOiAnZGF0by1ncmlkLWNvbHVtbnMtZGlzcGxheS1tZW51JyxcbiAgICAgIHBvcHBlcjogeyBwbGFjZW1lbnQ6ICdib3R0b20tZW5kJyB9LFxuICAgICAgZGF0YToge1xuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICBncmlkU2VydmljZTogdGhpcy5ncmlkU2VydmljZSxcbiAgICAgICAgZ3JpZFF1ZXJ5OiB0aGlzLmdyaWRRdWVyeVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZFNlcnZpY2UuY2xlYXJBbGxGaWx0ZXJzKCk7XG4gIH1cblxuICBvcGVuR3JvdXBNZW51KCkge1xuICAgIHRoaXMub3Blbk1lbnVzLmdyb3VwID0gdHJ1ZTtcbiAgICBjb25zdCB3YWl0Rm9yQW5pbWF0aW9uID0gdGhpcy5oYXNHcm91cHMgPyAwIDogMjAwO1xuICAgIC8qKiBXaGVuIGNoYW5naW5nIHRoZSB0YWJsZXMgZ3JvdXBpbmcgYWxsIHRoZSByb3dzIGFyZSBhdXRvbWF0aWNhbGx5IGV4cGFuZGVkLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaWNvbiBzdGF0ZSAqL1xuICAgIGNvbnN0IGV4cGFuZFN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWYuY29sdW1uUm93R3JvdXBDaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvd0dyb3Vwc0NvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucG9wb3ZlclxuICAgICAgICAub3BlbihEYXRvR3JpZEdyb3Vwc01lbnVDb21wb25lbnQsIHRoaXMuZ3JvdXBUcmlnZ2VyLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICBoZWlnaHQ6IDIwNixcbiAgICAgICAgICB3aWR0aDogMjUwLFxuICAgICAgICAgIGNsYXNzTmFtZTogJ2RhdG8tZ3JpZC1ncm91cHMtbWVudScsXG4gICAgICAgICAgcG9wcGVyOiB7IHBsYWNlbWVudDogJ2JvdHRvbS1lbmQnIH0sXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgICAgICAgIGdyaWRTZXJ2aWNlOiB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZXhwYW5kU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudXMuZ3JvdXAgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH0sIHdhaXRGb3JBbmltYXRpb24pO1xuICB9XG5cbiAgaXNBY3Rpb25EaXNhYmxlZChyb3dBY3Rpb246IFJvd0FjdGlvbikge1xuICAgIHJldHVybiAhcm93QWN0aW9uLnZpc2libGU7XG4gIH1cblxuICBpc1Jvd0FjdGlvbkhpZGRlbihyb3dBY3Rpb246IFJvd0FjdGlvbikge1xuICAgIHJldHVybiAhcm93QWN0aW9uLnZpc2libGUgJiYgdGhpcy5lbmFibGVWMl8xO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZFJvd3MoKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5kZXNlbGVjdEFsbFJvd3MoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge31cblxuICBwcml2YXRlIGdldENvbGxhcHNlU3RhdGUoeyBub2RlLCBhcGkgfTogUm93R3JvdXBPcGVuZWRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGxldCBjb2xsYXBzZWQgPSB0cnVlO1xuICAgIGlmIChub2RlLnJvd0dyb3VwSW5kZXggPT09IDApIHtcbiAgICAgIGFwaS5mb3JFYWNoTm9kZUFmdGVyRmlsdGVyQW5kU29ydCgoeyBleHBhbmRlZCwgcm93R3JvdXBJbmRleCB9OiBSb3dOb2RlKSA9PiB7XG4gICAgICAgIGlmIChyb3dHcm91cEluZGV4ID09PSAwICYmIGV4cGFuZGVkKSB7XG4gICAgICAgICAgY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY29sbGFwc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlckdyb3VwTGlzdGVuZXJzKCkge1xuICAgIC8qKiBMaXN0ZW4gdG8gYWRkaW5nIG9yIHJlbW92aW5nIHJvdyBncm91cHMgZnJvbSB0aGUgY29sdW1ucyBhbmQgbm90IHRoZSBncm91cHMgbWVudSAqL1xuICAgIHRoaXMuZ3JpZFF1ZXJ5XG4gICAgICAud2FpdEZvckdyaWQoKCkgPT4gdGhpcy5ncmlkUXVlcnkuZ3JpZFJlZi5jb2x1bW5Sb3dHcm91cENoYW5nZWQpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm9wZW5NZW51cy5ncm91cCksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3dHcm91cHNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgLyoqIExpc3RlbiB0byByb3cgY29sbGFwc2Ugc3RhdGUgdG8gdXBkYXRlIHRoZSBpY29uICovXG4gICAgdGhpcy5ncmlkUXVlcnlcbiAgICAgIC53YWl0Rm9yR3JpZCgoKSA9PiB0aGlzLmdyaWRRdWVyeS5ncmlkUmVmLnJvd0dyb3VwT3BlbmVkKVxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogUm93R3JvdXBPcGVuZWRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBjb2xsYXBzZWQgPSB0aGlzLmdldENvbGxhcHNlU3RhdGUoZXZlbnQpO1xuICAgICAgICBpZiAoY29sbGFwc2VkICE9PSB0aGlzLnJvd0dyb3Vwc0NvbGxhcHNlZCkge1xuICAgICAgICAgIHRoaXMucm93R3JvdXBzQ29sbGFwc2VkID0gY29sbGFwc2VkO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVJvd3NTZWxlY3Rpb25EYXRhKCkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5LnJvd3NTZWxlY3Rpb25EYXRhJFxuICAgICAgLnBpcGUodW50aWxEZXN0cm95ZWQodGhpcykpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoe1xuICAgICAgICAgIHRvdGFsUm93c0NvdW50LFxuICAgICAgICAgIHNlbGVjdGVkUm93c0NvdW50LFxuICAgICAgICAgIHNlbGVjdGVkUGFnZVJvd3NDb3VudCxcbiAgICAgICAgICBpc0FsbFBhZ2VSb3dzU2VsZWN0ZWRcbiAgICAgICAgfTogR3JpZFJvd3NTZWxlY3Rpb25EYXRhKSA9PiB7XG4gICAgICAgICAgdGhpcy50b3RhbFJvd3NDb3VudCA9IHRvdGFsUm93c0NvdW50O1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ291bnQgPSBzZWxlY3RlZFJvd3NDb3VudDtcbiAgICAgICAgICBjb25zdCB7IGVuYWJsZUFsbFBhZ2VzU2VsZWN0aW9uIH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgICAgICAgIHRoaXMuYWxsUGFnZVJvd3NTZWxlY3RlZCA9XG4gICAgICAgICAgICBlbmFibGVBbGxQYWdlc1NlbGVjdGlvbiAmJlxuICAgICAgICAgICAgaXNBbGxQYWdlUm93c1NlbGVjdGVkICYmXG4gICAgICAgICAgICBzZWxlY3RlZFJvd3NDb3VudCA9PT0gc2VsZWN0ZWRQYWdlUm93c0NvdW50ICYmXG4gICAgICAgICAgICBzZWxlY3RlZFJvd3NDb3VudCA8IHRvdGFsUm93c0NvdW50O1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlUmVsb2FkR3JpZEFjdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5vblJlbG9hZEdyaWRBY3Rpb25zKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuaW5pdEdyaWRBY3Rpb25zKCk7XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RBbGxQYWdlcygpIHtcbiAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTaWRlKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgc2VsZWN0QWxsUm93c0VuYWJsZWQ6IHRydWUsIGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbDogW10gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuYXBpLmdyaWQuc2VsZWN0QWxsRmlsdGVyZWQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOztBQUVILE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsY0FBYyxFQUdmLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFM0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDN0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxXQUFXLEVBQUUs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LDJCQUEyQjtnQkFDckMsaUJBQWlCO2dCQUNYLG9CQUFvQjtnQkFDdEIsV0FBVztnQkFDVCxTQUFTO2dCQUNQLFdBQVc7O0lBbEU4QjtRQUEvRCxTQUFTLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7a0NBQWUsVUFBVTtvRUFBQztJQUN0QjtRQUFsRSxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztrQ0FBa0IsVUFBVTt1RUFBQztJQUV0RjtRQUFSLEtBQUssRUFBRTs7cUVBQXNCO0lBS3JCO1FBQVIsS0FBSyxFQUFFOzs7bUVBU1A7SUFFUTtRQUFSLEtBQUssRUFBRTs7b0VBQXVCO0lBQ3RCO1FBQVIsS0FBSyxFQUFFOzt5RUFBNkQ7SUFDNUQ7UUFBUixLQUFLLEVBQUU7O3FGQUFxRTtJQUNwRTtRQUFSLEtBQUssRUFBRTs7eUZBQTBDO0lBNUJ2QywwQkFBMEI7UUFOdEMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLHNCQUFzQjtZQUNoQyw0bVdBQTRDO1lBRTVDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOztTQUNoRCxDQUFDO3lDQW9FeUIsMkJBQTJCO1lBQ3JDLGlCQUFpQjtZQUNYLG9CQUFvQjtZQUN0QixXQUFXO1lBQ1QsU0FBUztZQUNQLFdBQVc7T0F4RXZCLDBCQUEwQixDQXladEM7SUFBRCxpQ0FBQztDQUFBLEFBelpELElBeVpDO1NBelpZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBEYXRvcmFtYS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBBcGFjaGUgTGljZW5zZSAyLjAgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vZGF0b3JhbWEvY2xpZW50LWNvcmUvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgaXNEZXZNb2RlLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZVRvb2xiYXJBY3Rpb24sXG4gIEdyaWRBY3Rpb24sXG4gIEdyaWRBY3Rpb25UeXBlLFxuICBHcmlkUm93QWN0aW9uc1NjcmVlblRocmVzaG9sZCxcbiAgUm93QWN0aW9uXG59IGZyb20gJy4vZ3JpZC10b29sYmFyLnR5cGVzJztcbmltcG9ydCB7IERhdG9HcmlkQ29udHJvbGxlckNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY29udHJvbGxlci9ncmlkLWNvbnRyb2xsZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2Nlc3NDZWxsRm9yRXhwb3J0UGFyYW1zLCBSb3dHcm91cE9wZW5lZEV2ZW50LCBSb3dOb2RlIH0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRvUG9wb3ZlciB9IGZyb20gJy4uLy4uL3BvcG92ZXIvcG9wb3Zlci5zZXJ2aWNlJztcbmltcG9ydCB7IERhdG9HcmlkR3JvdXBzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtZ3JvdXBzLW1lbnUvZ3JpZC1ncm91cHMtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZFF1ZXJ5IH0gZnJvbSAnLi4vZ3JpZC1zdG9yZS9ncmlkLnF1ZXJ5JztcbmltcG9ydCB7IGdldFZpc2libGVBY3Rpb25zIH0gZnJvbSAnLi4vZ3JpZC12Mi51dGlsJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB7IERFRkFVTFRfRk9STUFUIH0gZnJvbSAnLi4vLi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRDb2x1bW5EaXNwbGF5TWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY29sdW1ucy1kaXNwbGF5LW1lbnUvZ3JpZC1jb2x1bW5zLWRpc3BsYXktbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZFNlcnZpY2UgfSBmcm9tICcuLi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZSc7XG5pbXBvcnQgeyBDb3JlRXZlbnRUeXBlcyB9IGZyb20gJy4uLy4uL2V2ZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IHNpemUgfSBmcm9tICcuLi8uLi91dGlscy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IEdyaWRSb3dzU2VsZWN0aW9uRGF0YSB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5cbnR5cGUgVGFibGVBY3Rpb24gPVxuICB8ICdBdXRvZml0IHRvIENvbnRlbnQnXG4gIHwgJ0F1dG9maXQgdG8gUGFnZSdcbiAgfCAnU2hvdyBIaWRlIENvbHVtbidcbiAgfCAnUmVzZXQgU2V0dGluZ3MnXG4gIHwgJ1Jlc2V0IEZpbHRlcnMnXG4gIHwgJ0dyb3VwIGZyb20gU2V0dGluZ3MnXG4gIHwgJ0dyb3VwIGZyb20gVG9vbGJhcidcbiAgfCAnRXhwb3J0J1xuICB8ICdDb2xsYXBzZSBFeHBhbmQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXRvLWdyaWQtdG9vbGJhci12MicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncmlkLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLXRvb2xiYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRGF0b0dyaWRWMlRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1ZJU0lCTEVfUk9XX0FDVElPTlMgPSA1O1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9WSVNJQkxFX0dSSURfQUNUSU9OUyA9IDI7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9tYXhSb3dBY3Rpb25zID0gdGhpcy5NQVhfVklTSUJMRV9ST1dfQUNUSU9OUztcblxuICBAVmlld0NoaWxkKCdncm91cFRyaWdnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgZ3JvdXBUcmlnZ2VyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZXR0aW5nc1RyaWdnZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgc2V0dGluZ3NUcmlnZ2VyOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGRpc3BsYXlFeHBvcnQgPSB0cnVlO1xuICBjcmVhdGVBY3Rpb246IEdyaWRBY3Rpb247XG4gIHJvd0FjdGlvbnM6IHsgbWFpbkxpc3Q6IFJvd0FjdGlvbltdOyBtb3JlTWVudTogUm93QWN0aW9uW10gfSA9IHsgbWFpbkxpc3Q6IFtdLCBtb3JlTWVudTogW10gfTtcbiAgZ3JpZEFjdGlvbnM6IHsgbWFpbkxpc3Q6IEdyaWRBY3Rpb25bXTsgbW9yZU1lbnU6IEdyaWRBY3Rpb25bXSB9ID0geyBtYWluTGlzdDogW10sIG1vcmVNZW51OiBbXSB9O1xuXG4gIEBJbnB1dCgpIHNldCBtYXhSb3dBY3Rpb25zKG1heFJvd0FjdGlvbnM6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmVuYWJsZVYyXzEpIHtcbiAgICAgIHRoaXMuX21heFJvd0FjdGlvbnMgPSBNYXRoLm1pbihtYXhSb3dBY3Rpb25zLCB0aGlzLk1BWF9WSVNJQkxFX1JPV19BQ1RJT05TKTtcbiAgICAgIGlmIChtYXhSb3dBY3Rpb25zID4gdGhpcy5NQVhfVklTSUJMRV9ST1dfQUNUSU9OUyAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERhdG9HcmlkIFYyLjEgLSBtYXhSb3dBY3Rpb25zIGNhbm5vdCBiZSBvdmVyICR7dGhpcy5NQVhfVklTSUJMRV9ST1dfQUNUSU9OU31gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWF4Um93QWN0aW9ucyA9IG1heFJvd0FjdGlvbnM7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgaGlkZUdyb3VwaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlciA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5zZWFyY2gnKTtcbiAgQElucHV0KCkgcm93QWN0aW9uc1Nob3J0TGFiZWxUaHJlc2hvbGQ6IEdyaWRSb3dBY3Rpb25zU2NyZWVuVGhyZXNob2xkID0gMTUzOTtcbiAgQElucHV0KCkgZGlzcGxheUN1c3RvbUdyaWRBY3Rpb25zU2VwYXJhdG9yID0gdHJ1ZTtcblxuICBvcGVuTWVudXMgPSB7XG4gICAgZ3JvdXA6IGZhbHNlLFxuICAgIHNldHRpbmdzOiBmYWxzZVxuICB9O1xuICByb3dHcm91cHNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgZ3JvdXBzQWxsb3dlZCA9ICF0aGlzLmhpZGVHcm91cGluZztcbiAgaXNTZWxlY3RlZFJvdyA9IGZhbHNlO1xuICBpc1RyZWVNb2RlOiBib29sZWFuID0gdGhpcy5ncmlkU2VydmljZS50cmVlRGF0YTtcbiAgdG90YWxSb3dzQ291bnQgPSAwO1xuICBzZWxlY3RlZFJvd3NDb3VudCA9IDA7XG4gIGFsbFBhZ2VSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgd2lkdGhUb0hpZGVBY3Rpb25zTGFiZWxzOiBHcmlkUm93QWN0aW9uc1NjcmVlblRocmVzaG9sZCA9IDE0Mzk7XG5cbiAgZ2V0IGVuYWJsZVYyXzEoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBncmlkT3B0aW9ucyB9ID0gdGhpcy5ncmlkQ29udHJvbGxlcjtcbiAgICByZXR1cm4gZ3JpZE9wdGlvbnMgPyBncmlkT3B0aW9ucy5lbmFibGVWMl8xIDogZmFsc2U7XG4gIH1cblxuICBnZXQgZW5hYmxlU2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZ3JpZE9wdGlvbnMgfSA9IHRoaXMuZ3JpZENvbnRyb2xsZXI7XG4gICAgcmV0dXJuIGdyaWRPcHRpb25zID8gZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoIDogZmFsc2U7XG4gIH1cblxuICBnZXQgZW5hYmxlQmFja2dyb3VuZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGdyaWRPcHRpb25zIH0gPSB0aGlzLmdyaWRDb250cm9sbGVyO1xuICAgIHJldHVybiBncmlkT3B0aW9ucyA/IGdyaWRPcHRpb25zLmVuYWJsZUJhY2tncm91bmQgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBpc1Jvd0FjdGlvbnNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5lbmFibGVWMl8xIHx8ICh0aGlzLmVuYWJsZVYyXzEgJiYgdGhpcy5pc1NlbGVjdGVkUm93KTtcbiAgfVxuXG4gIGdldCBoYXNSb3dBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzaXplKHRoaXMucm93QWN0aW9ucy5tYWluTGlzdCkgPiAwIHx8IHNpemUodGhpcy5yb3dBY3Rpb25zLm1vcmVNZW51KSA+IDA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZ3JpZENvbnRyb2xsZXI6IERhdG9HcmlkQ29udHJvbGxlckNvbXBvbmVudCxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IERhdG9UcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcG9wb3ZlcjogRGF0b1BvcG92ZXIsXG4gICAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeSxcbiAgICBwcml2YXRlIGdyaWRTZXJ2aWNlOiBHcmlkU2VydmljZVxuICApIHt9XG5cbiAgZ2V0IGhpZGRlbkNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIGAoJHt0aGlzLmdyaWRRdWVyeS5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5zKCkubGVuZ3RofS8ke3RoaXMuZ3JpZFF1ZXJ5LmdldEFsbENvbHVtbnMoKS5sZW5ndGh9KWA7XG4gIH1cblxuICBnZXQgaGFzQWN0aXZlTW9yZUFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93QWN0aW9ucy5tb3JlTWVudS5zb21lKCh7IHZpc2libGUgfSkgPT4gdmlzaWJsZSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZFF1ZXJ5LmFwaTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gdGhpcy5ncmlkQ29udHJvbGxlci5ncmlkUXVlcnkud2FpdEZvckdyaWQoKCkgPT5cbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLmdyaWRRdWVyeS5ncmlkUmVmLmNlbGxWYWx1ZUNoYW5nZWQsXG4gICAgICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWYucm93RGF0YVVwZGF0ZWQsXG4gICAgICAgIHRoaXMuZ3JpZFF1ZXJ5LnJvd0FjdGlvblZpc2liaWxpdHlDaGFuZ2VkJFxuICAgICAgKS5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCBncmlkSW5pdCA9IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSQucGlwZSh0YWtlKDEpKTtcbiAgICBncmlkSW5pdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBzQWxsb3dlZCA9ICF0aGlzLmhpZGVHcm91cGluZyAmJiAhdGhpcy5ncmlkUXVlcnkuZ2V0VmFsdWUoKS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbi5lbmFibGVkO1xuICAgIH0pO1xuICAgIHRoaXMuaW5pdEdyaWRBY3Rpb25zKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzQ2hhbmdlZCQgPSB0aGlzLmdyaWRRdWVyeS5zZWxlY3RlZFJvd3NDaGFuZ2UkO1xuICAgIGNvbnN0IGlzU2VsZWN0QWxsUm93c0NoYW5nZWQkID0gdGhpcy5ncmlkUXVlcnkuc2VsZWN0SXNTZWxlY3RBbGxSb3dzRW5hYmxlZCgpO1xuICAgIG1lcmdlKGRhdGFDaGFuZ2VzLCBncmlkSW5pdCwgc2VsZWN0ZWRSb3dzQ2hhbmdlZCQsIGlzU2VsZWN0QWxsUm93c0NoYW5nZWQkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMuYXBpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlVmlzaWJsZUFjdGlvbnMoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5yZWdpc3Rlckdyb3VwTGlzdGVuZXJzKCk7XG5cbiAgICB0aGlzLnN1YnNjcmliZVJvd3NTZWxlY3Rpb25EYXRhKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVSZWxvYWRHcmlkQWN0aW9ucygpO1xuICB9XG5cbiAgb25BY3Rpb25DbGljayhhY3Rpb246IEJhc2VUb29sYmFyQWN0aW9uKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oYWN0aW9uLm9uQ2xpY2spKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFJvd3NDb3VudCA9IHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93c0NvdW50KCk7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLl9sb2dFdmVudChDb3JlRXZlbnRUeXBlcy5HUklEX1RBQkxFX0FDVElPTiwge1xuICAgICAgICBhY3Rpb246IGFjdGlvbi5rZXksXG4gICAgICAgIG51bU9mSXRlbXM6IHNlbGVjdGVkUm93c0NvdW50LFxuICAgICAgICBmcm9tOiAnVG9vbGJhcidcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0QWxsRmlsdGVyID0gdGhpcy5ncmlkU2VydmljZS5nZXRGaWx0ZXJGb3JTZXJ2ZXJBY3Rpb25PblNlbGVjdEFsbCgpO1xuICAgICAgICBhY3Rpb24ub25DbGljayhudWxsLCB0cnVlLCBzZWxlY3RBbGxGaWx0ZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdyaWRDb250cm9sbGVyLmdyaWRRdWVyeS5nZXRTZWxlY3RlZFJvd05vZGVzKCk7XG4gICAgICAgIGFjdGlvbi5vbkNsaWNrKHNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChhY3Rpb24gYXMgR3JpZEFjdGlvbikuYWN0aW9uVHlwZSA9PT0gR3JpZEFjdGlvblR5cGUuRVhQT1JUKSB7XG4gICAgICB0aGlzLmV4ZWN1dGVUYWJsZUFjdGlvbignRXhwb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZVZpc2libGVBY3Rpb25zKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5ncmlkUXVlcnkuZ2V0U2VsZWN0ZWRSb3dOb2RlcygpO1xuICAgIHRoaXMuaXNTZWxlY3RlZFJvdyA9IHNlbGVjdGVkLmxlbmd0aCA+IDAgfHwgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZDtcbiAgICBjb25zdCB2aXNpYmxlQWN0aW9ucyA9IGdldFZpc2libGVBY3Rpb25zKFxuICAgICAgdGhpcy5ncmlkQ29udHJvbGxlci5yb3dBY3Rpb25zLFxuICAgICAgdGhpcy5ncmlkUXVlcnkuZ2V0U2VsZWN0ZWRSb3dzQ291bnQoKSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZFxuICAgICkuZmlsdGVyKChhY3Rpb246IFJvd0FjdGlvbikgPT4gIXRoaXMuaXNSb3dBY3Rpb25IaWRkZW4oYWN0aW9uKSk7XG4gICAgdGhpcy5yb3dBY3Rpb25zID0ge1xuICAgICAgbWFpbkxpc3Q6IHZpc2libGVBY3Rpb25zLnNsaWNlKDAsIHRoaXMuX21heFJvd0FjdGlvbnMpLFxuICAgICAgbW9yZU1lbnU6IHZpc2libGVBY3Rpb25zLnNsaWNlKHRoaXMuX21heFJvd0FjdGlvbnMsIHZpc2libGVBY3Rpb25zLmxlbmd0aClcbiAgICB9O1xuICAgIHRoaXMuaW5pdFdpZHRoVG9IaWRlQWN0aW9uc0xhYmVscygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0V2lkdGhUb0hpZGVBY3Rpb25zTGFiZWxzKCkge1xuICAgIGNvbnN0IHZpc2libGVBY3Rpb25zQ291bnQgPVxuICAgICAgdGhpcy5yb3dBY3Rpb25zLm1haW5MaXN0Lmxlbmd0aCArXG4gICAgICAodGhpcy5yb3dBY3Rpb25zLm1vcmVNZW51Lmxlbmd0aCA+IDAgPyAxIDogMCkgK1xuICAgICAgKHRoaXMuZ3JpZEFjdGlvbnMubW9yZU1lbnUubGVuZ3RoID4gMCA/IDEgOiAwKSArXG4gICAgICAodGhpcy5jcmVhdGVBY3Rpb24gPyAxIDogMCk7XG5cbiAgICBjb25zdCB3aW5kb3dXaWR0aFRocmVzaG9sZHM6IEdyaWRSb3dBY3Rpb25zU2NyZWVuVGhyZXNob2xkW10gPSBbMTIzOSwgMTMzOSwgMTQzOSwgMTUzOV07XG4gICAgdGhpcy53aWR0aFRvSGlkZUFjdGlvbnNMYWJlbHMgPVxuICAgICAgd2luZG93V2lkdGhUaHJlc2hvbGRzW01hdGgubWluKE1hdGgubWF4KHZpc2libGVBY3Rpb25zQ291bnQgLSA1LCAwKSwgd2luZG93V2lkdGhUaHJlc2hvbGRzLmxlbmd0aCAtIDEpXTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEdyaWRBY3Rpb25zKCkge1xuICAgIGNvbnN0IGdyaWRBY3Rpb25zID0gdGhpcy5ncmlkQ29udHJvbGxlci5ncmlkQWN0aW9ucztcbiAgICB0aGlzLmluaXRDcmVhdGVBY3Rpb24oZ3JpZEFjdGlvbnMpO1xuICAgIHRoaXMuaW5pdEV4cG9ydEFjdGlvbihncmlkQWN0aW9ucyk7XG4gICAgbGV0IG1heFZpc2libGVBY3Rpb25zID0gdGhpcy5NQVhfVklTSUJMRV9HUklEX0FDVElPTlMgLSAodGhpcy5kaXNwbGF5RXhwb3J0ID8gMSA6IDApO1xuICAgIGlmIChzaXplKGdyaWRBY3Rpb25zKSA9PT0gbWF4VmlzaWJsZUFjdGlvbnMgKyAxKSB7XG4gICAgICBtYXhWaXNpYmxlQWN0aW9ucysrO1xuICAgIH1cbiAgICB0aGlzLmdyaWRBY3Rpb25zID0ge1xuICAgICAgbWFpbkxpc3Q6IGdyaWRBY3Rpb25zLnNsaWNlKDAsIG1heFZpc2libGVBY3Rpb25zKSxcbiAgICAgIG1vcmVNZW51OiBncmlkQWN0aW9ucy5zbGljZShtYXhWaXNpYmxlQWN0aW9ucywgZ3JpZEFjdGlvbnMubGVuZ3RoKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGluaXRDcmVhdGVBY3Rpb24oZ3JpZEFjdGlvbnM6IEdyaWRBY3Rpb25bXSkge1xuICAgIGNvbnN0IGNyZWF0ZUFjdGlvbkluZGV4ID0gZ3JpZEFjdGlvbnMuZmluZEluZGV4KCh7IGFjdGlvblR5cGUgfSkgPT4gYWN0aW9uVHlwZSA9PT0gR3JpZEFjdGlvblR5cGUuQ1JFQVRFKTtcbiAgICB0aGlzLmNyZWF0ZUFjdGlvbiA9IGNyZWF0ZUFjdGlvbkluZGV4ID49IDAgPyBncmlkQWN0aW9ucy5zcGxpY2UoY3JlYXRlQWN0aW9uSW5kZXgsIDEpWzBdIDogbnVsbDtcbiAgICBpZiAodGhpcy5jcmVhdGVBY3Rpb24pIHtcbiAgICAgIHRoaXMuY3JlYXRlQWN0aW9uLmxhYmVsID0gdGhpcy5jcmVhdGVBY3Rpb24ubGFiZWwgfHwgJ2NvcmUuY3JlYXRlLW5ldyc7XG4gICAgICB0aGlzLmNyZWF0ZUFjdGlvbi5rZXkgPSB0aGlzLmNyZWF0ZUFjdGlvbi5rZXkgfHwgJ2NyZWF0ZS1uZXcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdEV4cG9ydEFjdGlvbihncmlkQWN0aW9uczogR3JpZEFjdGlvbltdKSB7XG4gICAgY29uc3QgZXhwb3J0QWN0aW9uID0gZ3JpZEFjdGlvbnMuZmluZCgoeyBhY3Rpb25UeXBlIH0pID0+IGFjdGlvblR5cGUgPT09IEdyaWRBY3Rpb25UeXBlLkVYUE9SVCk7XG4gICAgaWYgKGV4cG9ydEFjdGlvbikge1xuICAgICAgY29uc3QgeyBvbkNsaWNrLCBpY29uLCBsYWJlbCwgdG9vbHRpcCwga2V5IH0gPSBleHBvcnRBY3Rpb247XG4gICAgICBleHBvcnRBY3Rpb24ub25DbGljayA9IG9uQ2xpY2sgfHwgKCgpID0+IHRoaXMuZXhlY3V0ZVRhYmxlQWN0aW9uKCdFeHBvcnQnKSk7XG4gICAgICBleHBvcnRBY3Rpb24uaWNvbiA9IGljb24gfHwgJ2V4cG9ydCc7XG4gICAgICBleHBvcnRBY3Rpb24ubGFiZWwgPSBsYWJlbCB8fCAnY29yZS5leHBvcnQtdGFibGUnO1xuICAgICAgZXhwb3J0QWN0aW9uLnRvb2x0aXAgPSB0b29sdGlwIHx8ICdjb3JlLmV4cG9ydC10YWJsZSc7XG4gICAgICBleHBvcnRBY3Rpb24ua2V5ID0ga2V5IHx8ICdleHBvcnQnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIGFjdGlvblxuICAgKi9cbiAgZXhlY3V0ZVRhYmxlQWN0aW9uKGFjdGlvbjogVGFibGVBY3Rpb24pIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLl9sb2dFdmVudChDb3JlRXZlbnRUeXBlcy5HUklEX0dFTkVSQUxfVEFCTEVfQUNUSU9OLCB7IGFjdGlvbiB9KTtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnQXV0b2ZpdCB0byBDb250ZW50JzpcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5maXRHcmlkKCdjb250ZW50Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXV0b2ZpdCB0byBQYWdlJzpcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5maXRHcmlkKCdjb250YWluZXInKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdDb2xsYXBzZSBFeHBhbmQnOlxuICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRXhwb3J0JzpcbiAgICAgICAgdGhpcy5leHBvcnRUYWJsZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0dyb3VwIGZyb20gU2V0dGluZ3MnOlxuICAgICAgY2FzZSAnR3JvdXAgZnJvbSBUb29sYmFyJzpcbiAgICAgICAgdGhpcy5vcGVuR3JvdXBNZW51KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUmVzZXQgRmlsdGVycyc6XG4gICAgICAgIHRoaXMucmVzZXRGaWx0ZXJzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUmVzZXQgU2V0dGluZ3MnOlxuICAgICAgICB0aGlzLnJlc2V0U2V0dGluZ3MoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdTaG93IEhpZGUgQ29sdW1uJzpcbiAgICAgICAgdGhpcy5vcGVuQ29sdW1uTWVudSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB0b2dnbGVFeHBhbmRlZCgpIHtcbiAgICB0aGlzLnJvd0dyb3Vwc0NvbGxhcHNlZCA/IHRoaXMuYXBpLmdyaWQuZXhwYW5kQWxsKCkgOiB0aGlzLmFwaS5ncmlkLmNvbGxhcHNlQWxsKCk7XG4gICAgdGhpcy5yb3dHcm91cHNDb2xsYXBzZWQgPSAhdGhpcy5yb3dHcm91cHNDb2xsYXBzZWQ7XG4gIH1cblxuICBnZXQgaGFzR3JvdXBzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFwaS5jb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBleHBvcnRUYWJsZSgpIHtcbiAgICBjb25zdCB7IGdyaWROYW1lLCBleHBvcnRHcmlkIH0gPSB0aGlzLmdyaWRDb250cm9sbGVyLmdyaWRPcHRpb25zO1xuICAgIGlmIChpc0Z1bmN0aW9uKGV4cG9ydEdyaWQpKSB7XG4gICAgICBleHBvcnRHcmlkKHsgLi4udGhpcy5hcGksIC4uLnRoaXMuZ3JpZFF1ZXJ5LmdldFZhbHVlKCkuc2V0dGluZ3MgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRvZGF5ID0gZm9ybWF0KG5ldyBEYXRlKCksIERFRkFVTFRfRk9STUFUKTtcbiAgICAgIHRoaXMuYXBpLmdyaWQuZXhwb3J0RGF0YUFzRXhjZWwoe1xuICAgICAgICBmaWxlTmFtZTogYCR7Z3JpZE5hbWV9IC0gJHt0b2RheX1gLFxuICAgICAgICBwcm9jZXNzQ2VsbENhbGxiYWNrOiAoeyBjb2x1bW4sIHZhbHVlIH06IFByb2Nlc3NDZWxsRm9yRXhwb3J0UGFyYW1zKSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gY29sdW1uLmdldENvbERlZigpLnZhbHVlRm9ybWF0dGVyO1xuICAgICAgICAgIC8vIFRPRE86IGZvbGxvd3VwOiBodHRwczovL2FnLWdyaWQuemVuZGVzay5jb20vaGMvZW4tdXMvcmVxdWVzdHMvMTA5NjM/cGFnZT0xXG4gICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0dGVyKSA/IGZvcm1hdHRlcih7IHZhbHVlIH0gYXMgYW55KSA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNldFNldHRpbmdzKCkge1xuICAgIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZFNlcnZpY2UucmVzZXRUYWJsZVNldHRpbmdzKCk7XG4gIH1cblxuICBvcGVuQ29sdW1uTWVudSgpIHtcbiAgICB0aGlzLnBvcG92ZXIub3BlbihEYXRvR3JpZENvbHVtbkRpc3BsYXlNZW51Q29tcG9uZW50LCB0aGlzLnNldHRpbmdzVHJpZ2dlci5uYXRpdmVFbGVtZW50LCB7XG4gICAgICB3aWR0aDogMjIwLFxuICAgICAgY2xhc3NOYW1lOiAnZGF0by1ncmlkLWNvbHVtbnMtZGlzcGxheS1tZW51JyxcbiAgICAgIHBvcHBlcjogeyBwbGFjZW1lbnQ6ICdib3R0b20tZW5kJyB9LFxuICAgICAgZGF0YToge1xuICAgICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgICBncmlkU2VydmljZTogdGhpcy5ncmlkU2VydmljZSxcbiAgICAgICAgZ3JpZFF1ZXJ5OiB0aGlzLmdyaWRRdWVyeVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXJzKCkge1xuICAgIHRoaXMuZ3JpZENvbnRyb2xsZXIuZ3JpZFNlcnZpY2UuY2xlYXJBbGxGaWx0ZXJzKCk7XG4gIH1cblxuICBvcGVuR3JvdXBNZW51KCkge1xuICAgIHRoaXMub3Blbk1lbnVzLmdyb3VwID0gdHJ1ZTtcbiAgICBjb25zdCB3YWl0Rm9yQW5pbWF0aW9uID0gdGhpcy5oYXNHcm91cHMgPyAwIDogMjAwO1xuICAgIC8qKiBXaGVuIGNoYW5naW5nIHRoZSB0YWJsZXMgZ3JvdXBpbmcgYWxsIHRoZSByb3dzIGFyZSBhdXRvbWF0aWNhbGx5IGV4cGFuZGVkLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaWNvbiBzdGF0ZSAqL1xuICAgIGNvbnN0IGV4cGFuZFN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWYuY29sdW1uUm93R3JvdXBDaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3dHcm91cHNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnBvcG92ZXJcbiAgICAgICAgLm9wZW4oRGF0b0dyaWRHcm91cHNNZW51Q29tcG9uZW50LCB0aGlzLmdyb3VwVHJpZ2dlci5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAgICAgaGVpZ2h0OiAyMDYsXG4gICAgICAgICAgd2lkdGg6IDI1MCxcbiAgICAgICAgICBjbGFzc05hbWU6ICdkYXRvLWdyaWQtZ3JvdXBzLW1lbnUnLFxuICAgICAgICAgIHBvcHBlcjogeyBwbGFjZW1lbnQ6ICdib3R0b20tZW5kJyB9LFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICAgICAgICBncmlkU2VydmljZTogdGhpcy5ncmlkU2VydmljZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBleHBhbmRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51cy5ncm91cCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgfSwgd2FpdEZvckFuaW1hdGlvbik7XG4gIH1cblxuICBpc0FjdGlvbkRpc2FibGVkKHJvd0FjdGlvbjogUm93QWN0aW9uKSB7XG4gICAgcmV0dXJuICFyb3dBY3Rpb24udmlzaWJsZTtcbiAgfVxuXG4gIGlzUm93QWN0aW9uSGlkZGVuKHJvd0FjdGlvbjogUm93QWN0aW9uKSB7XG4gICAgcmV0dXJuICFyb3dBY3Rpb24udmlzaWJsZSAmJiB0aGlzLmVuYWJsZVYyXzE7XG4gIH1cblxuICBjbGVhclNlbGVjdGVkUm93cygpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmRlc2VsZWN0QWxsUm93cygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2xsYXBzZVN0YXRlKHsgbm9kZSwgYXBpIH06IFJvd0dyb3VwT3BlbmVkRXZlbnQpOiBib29sZWFuIHtcbiAgICBsZXQgY29sbGFwc2VkID0gdHJ1ZTtcbiAgICBpZiAobm9kZS5yb3dHcm91cEluZGV4ID09PSAwKSB7XG4gICAgICBhcGkuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQoKHsgZXhwYW5kZWQsIHJvd0dyb3VwSW5kZXggfTogUm93Tm9kZSkgPT4ge1xuICAgICAgICBpZiAocm93R3JvdXBJbmRleCA9PT0gMCAmJiBleHBhbmRlZCkge1xuICAgICAgICAgIGNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbGxhcHNlZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJHcm91cExpc3RlbmVycygpIHtcbiAgICAvKiogTGlzdGVuIHRvIGFkZGluZyBvciByZW1vdmluZyByb3cgZ3JvdXBzIGZyb20gdGhlIGNvbHVtbnMgYW5kIG5vdCB0aGUgZ3JvdXBzIG1lbnUgKi9cbiAgICB0aGlzLmdyaWRRdWVyeVxuICAgICAgLndhaXRGb3JHcmlkKCgpID0+IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWYuY29sdW1uUm93R3JvdXBDaGFuZ2VkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5vcGVuTWVudXMuZ3JvdXApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvd0dyb3Vwc0NvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICAvKiogTGlzdGVuIHRvIHJvdyBjb2xsYXBzZSBzdGF0ZSB0byB1cGRhdGUgdGhlIGljb24gKi9cbiAgICB0aGlzLmdyaWRRdWVyeVxuICAgICAgLndhaXRGb3JHcmlkKCgpID0+IHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWYucm93R3JvdXBPcGVuZWQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogUm93R3JvdXBPcGVuZWRFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBjb2xsYXBzZWQgPSB0aGlzLmdldENvbGxhcHNlU3RhdGUoZXZlbnQpO1xuICAgICAgICBpZiAoY29sbGFwc2VkICE9PSB0aGlzLnJvd0dyb3Vwc0NvbGxhcHNlZCkge1xuICAgICAgICAgIHRoaXMucm93R3JvdXBzQ29sbGFwc2VkID0gY29sbGFwc2VkO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVJvd3NTZWxlY3Rpb25EYXRhKCkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5LnJvd3NTZWxlY3Rpb25EYXRhJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHtcbiAgICAgICAgICB0b3RhbFJvd3NDb3VudCxcbiAgICAgICAgICBzZWxlY3RlZFJvd3NDb3VudCxcbiAgICAgICAgICBzZWxlY3RlZFBhZ2VSb3dzQ291bnQsXG4gICAgICAgICAgaXNBbGxQYWdlUm93c1NlbGVjdGVkXG4gICAgICAgIH06IEdyaWRSb3dzU2VsZWN0aW9uRGF0YSkgPT4ge1xuICAgICAgICAgIHRoaXMudG90YWxSb3dzQ291bnQgPSB0b3RhbFJvd3NDb3VudDtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NvdW50ID0gc2VsZWN0ZWRSb3dzQ291bnQ7XG4gICAgICAgICAgY29uc3QgeyBlbmFibGVBbGxQYWdlc1NlbGVjdGlvbiB9ID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICAgICAgICB0aGlzLmFsbFBhZ2VSb3dzU2VsZWN0ZWQgPVxuICAgICAgICAgICAgZW5hYmxlQWxsUGFnZXNTZWxlY3Rpb24gJiZcbiAgICAgICAgICAgIGlzQWxsUGFnZVJvd3NTZWxlY3RlZCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzQ291bnQgPT09IHNlbGVjdGVkUGFnZVJvd3NDb3VudCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzQ291bnQgPCB0b3RhbFJvd3NDb3VudDtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZVJlbG9hZEdyaWRBY3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uub25SZWxvYWRHcmlkQWN0aW9ucygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmluaXRHcmlkQWN0aW9ucygpO1xuICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0QWxsUGFnZXMoKSB7XG4gICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2lkZSkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IHNlbGVjdEFsbFJvd3NFbmFibGVkOiB0cnVlLCBleGNsdWRlZEZyb21TZWxlY3RBbGw6IFtdIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwaS5ncmlkLnNlbGVjdEFsbEZpbHRlcmVkKCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -88,7 +88,7 @@ var DatoRadioComponent = /** @class */ (function (_super) {
88
88
  changeDetection: ChangeDetectionStrategy.OnPush,
89
89
  exportAs: 'datoRadio',
90
90
  providers: [valueAccessor],
91
- styles: [":host{display:block}.dato-radio{margin:.5rem;display:inline-block}.dato-radio label{cursor:pointer}.dato-radio input[type=radio]{position:absolute;opacity:0;min-width:10px!important;max-width:10px!important}.dato-radio input[type=radio]+.radio-label:before{content:'';border-radius:100%;display:inline-block;box-sizing:border-box;min-width:16px;width:16px;height:16px;position:relative;top:1px;margin-right:10px;vertical-align:middle;cursor:pointer;text-align:center;transition:250ms}.dato-radio input[type=radio]:focus+.radio-label:before{outline:0}.dato-radio input[type=radio]+.radio-label:empty:before{margin-right:0}"]
91
+ styles: [":host{display:block}.dato-radio{margin:.5rem;display:inline-block}.dato-radio label{cursor:pointer}.dato-radio input[type=radio]{position:absolute;opacity:0;min-width:10px!important;max-width:10px!important}.dato-radio input[type=radio]+.radio-label:before{content:\"\";border-radius:100%;display:inline-block;box-sizing:border-box;min-width:16px;width:16px;height:16px;position:relative;top:1px;margin-right:10px;vertical-align:middle;cursor:pointer;text-align:center;transition:250ms}.dato-radio input[type=radio]:focus+.radio-label:before{outline:0}.dato-radio input[type=radio]+.radio-label:empty:before{margin-right:0}"]
92
92
  }),
93
93
  __metadata("design:paramtypes", [Renderer2, ChangeDetectorRef, ElementRef])
94
94
  ], DatoRadioComponent);
@@ -39,15 +39,12 @@ export function capitalize(str) {
39
39
  * @returns {string}
40
40
  */
41
41
  export function camelCase(str) {
42
- var camelCase = function (str) {
43
- var string = str
44
- .toLowerCase()
45
- .replace(/[^A-Za-z0-9]/g, ' ')
46
- .split(' ')
47
- .reduce(function (result, word) { return result + capitalize(word.toLowerCase()); });
48
- return string.charAt(0).toLowerCase() + string.slice(1);
49
- };
50
- return camelCase(str);
42
+ var string = str
43
+ .toLowerCase()
44
+ .replace(/[^A-Za-z0-9]/g, ' ')
45
+ .split(' ')
46
+ .reduce(function (result, word) { return result + capitalize(word.toLowerCase()); });
47
+ return string.charAt(0).toLowerCase() + string.slice(1);
51
48
  }
52
49
  /**
53
50
  *
@@ -65,7 +62,8 @@ export function kebabCase(str) {
65
62
  * @returns {string} - The GUID
66
63
  */
67
64
  export function createGUID() {
68
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
65
+ var template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
66
+ return template.replace(/[xy]/g, function (c) {
69
67
  var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;
70
68
  return v.toString(16);
71
69
  });
@@ -85,4 +83,4 @@ export function getInitials(text) {
85
83
  var regexMatch = text.match(/[A-Z,a-z,0-9]/g);
86
84
  return regexMatch ? regexMatch.join('').slice(0, 2) : null;
87
85
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvdXRpbHMvc3RyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUNwQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQUc7SUFDeEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBRztJQUMxQixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBRztJQUM5QixPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBRztJQUM1QixJQUFJLEdBQUcsRUFBRTtRQUNQLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ2pFO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQUc7SUFDM0IsSUFBTSxTQUFTLEdBQUcsVUFBQSxHQUFHO1FBQ25CLElBQUksTUFBTSxHQUFHLEdBQUc7YUFDYixXQUFXLEVBQUU7YUFDYixPQUFPLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQzthQUM3QixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsTUFBTSxDQUFDLFVBQUMsTUFBTSxFQUFFLElBQUksSUFBSyxPQUFBLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQXZDLENBQXVDLENBQUMsQ0FBQztRQUNyRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUM7SUFFRixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBRztJQUMzQixPQUFPLEdBQUc7U0FDUCxPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1NBQ25DLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1NBQ3BCLFdBQVcsRUFBRSxDQUFDO0FBQ25CLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsVUFBVTtJQUN4QixPQUFPLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBQSxDQUFDO1FBQzlELElBQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDaEMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVoRCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXNjYXBlIGZyb20gJ2xvZGFzaC5lc2NhcGUnO1xuaW1wb3J0IF91bmVzY2FwZSBmcm9tICdsb2Rhc2gudW5lc2NhcGUnO1xuaW1wb3J0IF9lc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoLmVzY2FwZXJlZ2V4cCc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdHJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZShzdHIpIHtcbiAgcmV0dXJuIF9lc2NhcGUoc3RyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGUoc3RyKSB7XG4gIHJldHVybiBfdW5lc2NhcGUoc3RyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHtcbiAgcmV0dXJuIF9lc2NhcGVSZWdFeHAoc3RyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyKSB7XG4gIGlmIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZShzdHIpOiBzdHJpbmcge1xuICBjb25zdCBjYW1lbENhc2UgPSBzdHIgPT4ge1xuICAgIGxldCBzdHJpbmcgPSBzdHJcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW15BLVphLXowLTldL2csICcgJylcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAucmVkdWNlKChyZXN1bHQsIHdvcmQpID0+IHJlc3VsdCArIGNhcGl0YWxpemUod29yZC50b0xvd2VyQ2FzZSgpKSk7XG4gICAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbiAgfTtcblxuICByZXR1cm4gY2FtZWxDYXNlKHN0cik7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZWJhYkNhc2Uoc3RyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEtJDInKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csICctJylcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBHVUlEXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBHVUlEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHVUlEKCkge1xuICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBjID0+IHtcbiAgICBjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLFxuICAgICAgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcbiAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIHN0cmluZyBpcyBlbXB0eSBvciBub3QgKG9ubHkgc3BhY2VzLyBubyBjaGFycylcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSB0aGUgc3RyaW5nIHRvIHRlc3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgdGhlIHN0cmluZyBpcyBhbiBlbXBydHkgb25lIChvbmx5IHNwYWNlcy8gbm8gY2hhcnMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5U3RyaW5nKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBzdHIudHJpbSgpLmxlbmd0aCA9PT0gMDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGluaXRpYWxzIGZvcm0gYSB0ZXh0IHN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbHModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnZXhNYXRjaCA9IHRleHQubWF0Y2goL1tBLVosYS16LDAtOV0vZyk7XG5cbiAgcmV0dXJuIHJlZ2V4TWF0Y2ggPyByZWdleE1hdGNoLmpvaW4oJycpLnNsaWNlKDAsIDIpIDogbnVsbDtcbn1cbiJdfQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvdXRpbHMvc3RyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUNwQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQUc7SUFDeEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBRztJQUMxQixPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBRztJQUM5QixPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsR0FBRztJQUM1QixJQUFJLEdBQUcsRUFBRTtRQUNQLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ2pFO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQUc7SUFDM0IsSUFBTSxNQUFNLEdBQUcsR0FBRztTQUNmLFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDO1NBQzdCLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixNQUFNLENBQUMsVUFBQyxNQUFNLEVBQUUsSUFBSSxJQUFLLE9BQUEsTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBdkMsQ0FBdUMsQ0FBQyxDQUFDO0lBQ3JFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFHO0lBQzNCLE9BQU8sR0FBRztTQUNQLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7U0FDbkMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7U0FDcEIsV0FBVyxFQUFFLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxVQUFVO0lBQ3hCLElBQU0sUUFBUSxHQUFHLHNDQUFzQyxDQUFDO0lBQ3hELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBQSxDQUFDO1FBQ2hDLElBQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFDaEMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3ZDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVoRCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZXNjYXBlIGZyb20gJ2xvZGFzaC5lc2NhcGUnO1xuaW1wb3J0IF91bmVzY2FwZSBmcm9tICdsb2Rhc2gudW5lc2NhcGUnO1xuaW1wb3J0IF9lc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoLmVzY2FwZXJlZ2V4cCc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdHJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZShzdHIpIHtcbiAgcmV0dXJuIF9lc2NhcGUoc3RyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGUoc3RyKSB7XG4gIHJldHVybiBfdW5lc2NhcGUoc3RyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHtcbiAgcmV0dXJuIF9lc2NhcGVSZWdFeHAoc3RyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICogQHJldHVybnMge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyKSB7XG4gIGlmIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0clxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZShzdHIpOiBzdHJpbmcge1xuICBjb25zdCBzdHJpbmcgPSBzdHJcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywgJyAnKVxuICAgIC5zcGxpdCgnICcpXG4gICAgLnJlZHVjZSgocmVzdWx0LCB3b3JkKSA9PiByZXN1bHQgKyBjYXBpdGFsaXplKHdvcmQudG9Mb3dlckNhc2UoKSkpO1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24ga2ViYWJDYXNlKHN0cik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxLSQyJylcbiAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgR1VJRFxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgR1VJRFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR1VJRCgpIHtcbiAgY29uc3QgdGVtcGxhdGUgPSAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4JztcbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1t4eV0vZywgYyA9PiB7XG4gICAgY29uc3QgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCxcbiAgICAgIHYgPSBjID09ICd4JyA/IHIgOiAociAmIDB4MykgfCAweDg7XG4gICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgaXMgZW1wdHkgb3Igbm90IChvbmx5IHNwYWNlcy8gbm8gY2hhcnMpXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gdGhlIHN0cmluZyB0byB0ZXN0XG4gKiBAcmV0dXJuIHtib29sZWFufSB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYW4gZW1wcnR5IG9uZSAob25seSBzcGFjZXMvIG5vIGNoYXJzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eVN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RyLnRyaW0oKS5sZW5ndGggPT09IDA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBpbml0aWFscyBmb3JtIGEgdGV4dCBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlZ2V4TWF0Y2ggPSB0ZXh0Lm1hdGNoKC9bQS1aLGEteiwwLTldL2cpO1xuXG4gIHJldHVybiByZWdleE1hdGNoID8gcmVnZXhNYXRjaC5qb2luKCcnKS5zbGljZSgwLCAyKSA6IG51bGw7XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
- window.coreVersion = '22.14.1';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUMsTUFBYyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIod2luZG93IGFzIGFueSkuY29yZVZlcnNpb24gPSAnMjIuMTQuMSc7XG4iXX0=
1
+ window.coreVersion = '22.15.2';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUMsTUFBYyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIod2luZG93IGFzIGFueSkuY29yZVZlcnNpb24gPSAnMjIuMTUuMic7Il19