@fundamental-ngx/core 0.45.1-rc.1 → 0.45.1-rc.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit } from '@angular/core';
1
+ import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
2
2
  import { ControlValueAccessor, Validator } from '@angular/forms';
3
3
  import { Placement, SpecialDayRule } from '@fundamental-ngx/core/shared';
4
4
  import { CalendarComponent, CalendarType, CalendarYearGrid, DateRange, DaysOfWeek, FdCalendarView, NavigationButtonDisableFunction } from '@fundamental-ngx/core/calendar';
@@ -119,7 +119,10 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
119
119
  */
120
120
  showWeekNumbers: boolean;
121
121
  /** Whether the date picker is open. Can be used through two-way binding. */
122
- isOpen: boolean;
122
+ set isOpen(value: boolean);
123
+ get isOpen(): boolean;
124
+ /** @hidden */
125
+ private _isOpen;
123
126
  /** Should date picker be inlined. */
124
127
  inline: boolean;
125
128
  /** aria-labelledby for element describing date-picker. */
@@ -145,6 +148,8 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
145
148
  readonly selectedRangeDateChange: EventEmitter<DateRange<D>>;
146
149
  /** Event thrown every time calendar active view is changed */
147
150
  readonly activeViewChange: EventEmitter<FdCalendarView>;
151
+ /** @hideen */
152
+ private readonly _calendars;
148
153
  /** @hidden */
149
154
  _calendarComponent: CalendarComponent<D>;
150
155
  /** @hidden */
@@ -156,8 +161,12 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
156
161
  /** @hidden Whether the date input is invalid */
157
162
  _isInvalidDateInput: boolean;
158
163
  /** @hidden */
164
+ _showPopoverContents: boolean;
165
+ /** @hidden */
159
166
  readonly _formValueStateMessageId: string;
160
167
  /** @hidden */
168
+ private _calendarPendingDate;
169
+ /** @hidden */
161
170
  private readonly _onDestroy$;
162
171
  /** @hidden */
163
172
  private _subscriptions;
@@ -194,6 +203,8 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
194
203
  /** @hidden */
195
204
  ngOnInit(): void;
196
205
  /** @hidden */
206
+ ngOnChanges(changes: SimpleChanges): void;
207
+ /** @hidden */
197
208
  ngAfterViewInit(): void;
198
209
  /** @hidden */
199
210
  ngOnDestroy(): void;
@@ -288,6 +299,8 @@ export declare class DatePickerComponent<D> implements OnInit, OnDestroy, AfterV
288
299
  private _formatDateRange;
289
300
  /** @hidden */
290
301
  private _InitialiseVariablesInMessageService;
302
+ /** @hidden */
303
+ private _setOpenState;
291
304
  static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent<any>, [null, { optional: true; }, { optional: true; }, null]>;
292
305
  static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent<any>, "fd-date-picker", never, { "type": { "alias": "type"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "required": { "alias": "required"; "required": false; }; "message": { "alias": "message"; "required": false; }; "messageTriggers": { "alias": "messageTriggers"; "required": false; }; "selectedDate": { "alias": "selectedDate"; "required": false; }; "selectedRangeDate": { "alias": "selectedRangeDate"; "required": false; }; "startingDayOfWeek": { "alias": "startingDayOfWeek"; "required": false; }; "rangeHoverEffect": { "alias": "rangeHoverEffect"; "required": false; }; "useValidation": { "alias": "useValidation"; "required": false; }; "allowNull": { "alias": "allowNull"; "required": false; }; "activeView": { "alias": "activeView"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "closeOnDateChoose": { "alias": "closeOnDateChoose"; "required": false; }; "showTodayButton": { "alias": "showTodayButton"; "required": false; }; "todayButtonLabel": { "alias": "todayButtonLabel"; "required": false; }; "previousButtonDisableFunction": { "alias": "previousButtonDisableFunction"; "required": false; }; "nextButtonDisableFunction": { "alias": "nextButtonDisableFunction"; "required": false; }; "state": { "alias": "state"; "required": false; }; "buttonFocusable": { "alias": "buttonFocusable"; "required": false; }; "specialDaysRules": { "alias": "specialDaysRules"; "required": false; }; "yearGrid": { "alias": "yearGrid"; "required": false; }; "aggregatedYearGrid": { "alias": "aggregatedYearGrid"; "required": false; }; "markWeekends": { "alias": "markWeekends"; "required": false; }; "showWeekNumbers": { "alias": "showWeekNumbers"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "processInputOnBlur": { "alias": "processInputOnBlur"; "required": false; }; "preventScrollOnFocus": { "alias": "preventScrollOnFocus"; "required": false; }; "disableFunction": { "alias": "disableFunction"; "required": false; }; "disableRangeStartFunction": { "alias": "disableRangeStartFunction"; "required": false; }; "disableRangeEndFunction": { "alias": "disableRangeEndFunction"; "required": false; }; }, { "isOpenChange": "isOpenChange"; "selectedDateChange": "selectedDateChange"; "selectedRangeDateChange": "selectedRangeDateChange"; "activeViewChange": "activeViewChange"; }, never, ["*"], false, never, false>;
293
306
  }
@@ -156,6 +156,8 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
156
156
  /** Indicates when datetime input is in invalid state. */
157
157
  get isInvalidDateInput(): boolean;
158
158
  /** @hidden Reference to the inner calendar component. */
159
+ private set _calendarCmp(value);
160
+ /** @hidden */
159
161
  _calendarComponent: CalendarComponent<D>;
160
162
  /** @hidden */
161
163
  _inputGroupElement: ElementRef;
@@ -186,8 +188,12 @@ export declare class DatetimePickerComponent<D> implements OnInit, OnDestroy, On
186
188
  /** @hidden whether to display date or time in mobile mode */
187
189
  _displayType: 'date' | 'time';
188
190
  /** @hidden */
191
+ _showPopoverContents: boolean;
192
+ /** @hidden */
189
193
  private _state;
190
194
  /** @hidden */
195
+ private _calendarPendingDate;
196
+ /** @hidden */
191
197
  private readonly _onDestroy$;
192
198
  /** @hidden */
193
199
  private _subscriptions;
@@ -43,7 +43,7 @@ export class BarComponent {
43
43
  buildComponentCssClass() {
44
44
  return [
45
45
  'fd-bar',
46
- this._contentDensityObserver.isCozy ? 'fd-bar--cozy' : '',
46
+ this._contentDensityObserver.isCompact || this._contentDensityObserver.isCondensed ? '' : 'fd-bar--cozy',
47
47
  this.barDesign ? `fd-bar--${this.barDesign}` : '',
48
48
  this.inPage && !this.size ? 'fd-bar--page' : '',
49
49
  this.inPage && this.size ? `fd-bar--page-${this.size}` : '',
@@ -83,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
83
83
  }], size: [{
84
84
  type: Input
85
85
  }], buildComponentCssClass: [] } });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2Jhci9iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvYmFyL2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFJTCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsK0JBQStCLEVBQy9CLGtCQUFrQixFQUNyQixNQUFNLHVDQUF1QyxDQUFDOzs7QUFLL0M7Ozs7R0FJRztBQWNILE1BQU0sT0FBTyxZQUFZO0lBNEJyQixjQUFjO0lBQ2QsWUFBNEIsVUFBc0IsRUFBVSx1QkFBK0M7UUFBL0UsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFWM0c7O1dBRUc7UUFFSCxTQUFJLEdBQWEsRUFBRSxDQUFDO1FBRXBCLGNBQWM7UUFDTixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJeEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFFSCxzQkFBc0I7UUFDbEIsT0FBTztZQUNILFFBQVE7WUFDUixJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDM0QsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMscUJBQXFCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwRSxJQUFJLENBQUMsS0FBSztTQUNiLENBQUM7SUFDTixDQUFDOzhHQWpFUSxZQUFZO2tHQUFaLFlBQVksaUpBTlY7WUFDUCwrQkFBK0IsQ0FBQztnQkFDNUIscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsT0FBTzthQUNwRCxDQUFDO1NBQ0wsK0NDckNMLDRMQUlBOztBRHlGSTtJQURDLGFBQWE7Ozs7MERBWWI7MkZBakVRLFlBQVk7a0JBYnhCLFNBQVM7K0JBRUksVUFBVSxpQkFHTCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQLCtCQUErQixDQUFDOzRCQUM1QixxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPO3lCQUNwRCxDQUFDO3FCQUNMO3NJQUtELEtBQUs7c0JBREosS0FBSztnQkFPTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFPTixJQUFJO3NCQURILEtBQUs7Z0JBZ0NOLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGFwcGx5Q3NzQ2xhc3MsIENzc0NsYXNzQnVpbGRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzLFxuICAgIENvbnRlbnREZW5zaXR5TW9kZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcblxuZXhwb3J0IHR5cGUgU2l6ZVR5cGUgPSAnJyB8ICdzJyB8ICdtX2wnIHwgJ3hsJztcbmV4cG9ydCB0eXBlIEJhckRlc2lnblR5cGUgPSAnaGVhZGVyJyB8ICdzdWJoZWFkZXInIHwgJ2hlYWRlci13aXRoLXN1YmhlYWRlcicgfCAnZm9vdGVyJyB8ICdmbG9hdGluZy1mb290ZXInO1xuXG4vKipcbiAqIFRoZSBCYXIgY29tcG9uZW50IGlzIGEgY29udGFpbmVyIHRoYXQgaG9sZHMgdGl0bGVzLCBidXR0b25zIGFuZCBpbnB1dCBjb250cm9scy5cbiAqIEl0cyBjb250ZW50IGlzIGRpc3RyaWJ1dGVkIGluIHRocmVlIGFyZWFzIC0gbGVmdCwgbWlkZGxlIGFuZCByaWdodC5cbiAqIFRoZSBCYXIgaGFzIDIgbW9kZXMgLSBEZXNrdG9wIChkZWZhdWx0KSBhbmQgVGFibGV0L01vYmlsZSAoY296eSkuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbZmQtYmFyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Jhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyh7XG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNUXG4gICAgICAgIH0pXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQ3NzQ2xhc3NCdWlsZGVyLCBPbkRlc3Ryb3kge1xuICAgIC8qKiB1c2VyJ3MgY3VzdG9tIGNsYXNzZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgQmFyIGNvbXBvbmVudCBpcyB1c2VkIGFzIGEgaGVhZGVyLCBzdWJoZWFkZXIsIGhlYWRlci13aXRoLXN1YmhlYWRlcixcbiAgICAgKiBmb290ZXIgb3IgZmxvYXRpbmctZm9vdGVyLlxuICAgICAqIFR5cGVzIGF2YWlsYWJsZTogJ2hlYWRlcicgfCAnc3ViaGVhZGVyJyB8ICdoZWFkZXItd2l0aC1zdWJoZWFkZXInIHwgJ2Zvb3RlcicgfCAnZmxvYXRpbmctZm9vdGVyJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgYmFyRGVzaWduOiBCYXJEZXNpZ25UeXBlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIEJhciBjb21wb25lbnQgaXMgdXNlZCBpbiBQYWdlIExheW91dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGluUGFnZTogYm9vbGVhbjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBCYXIgY29tcG9uZW50IGlzIHVzZWQgaW4gSG9tZSBQYWdlIExheW91dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGluSG9tZVBhZ2U6IGJvb2xlYW47XG5cbiAgICAvKiogVGhlIHNpemUgb2YgdGhlIFBhZ2UgaW4gUGFnZSByZXNwb25zaXZlIGRlc2lnbi5cbiAgICAgKiBBdmFpbGFibGUgc2l6ZXM6ICdzJyB8ICdtX2wnIHwgJ3hsJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2l6ZTogU2l6ZVR5cGUgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIpIHtcbiAgICAgICAgdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBDc3NDbGFzc0J1aWxkZXIgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gICAgICogZnVuY3Rpb24gbXVzdCByZXR1cm4gc2luZ2xlIHN0cmluZ1xuICAgICAqIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBvcmRlciB3aGljaCBjc3MgY2xhc3NlcyBhcmUgYXBwbGllZFxuICAgICAqL1xuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZmQtYmFyJyxcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb3p5ID8gJ2ZkLWJhci0tY296eScgOiAnJywgLy8gVE9ETzogZml4IGluIHN0eWxlc1xuICAgICAgICAgICAgdGhpcy5iYXJEZXNpZ24gPyBgZmQtYmFyLS0ke3RoaXMuYmFyRGVzaWdufWAgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaW5QYWdlICYmICF0aGlzLnNpemUgPyAnZmQtYmFyLS1wYWdlJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pblBhZ2UgJiYgdGhpcy5zaXplID8gYGZkLWJhci0tcGFnZS0ke3RoaXMuc2l6ZX1gIDogJycsXG4gICAgICAgICAgICB0aGlzLmluSG9tZVBhZ2UgJiYgIXRoaXMuc2l6ZSA/ICdmZC1iYXItLWhvbWUtcGFnZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaW5Ib21lUGFnZSAmJiB0aGlzLnNpemUgPyBgZmQtYmFyLS1ob21lLXBhZ2UtJHt0aGlzLnNpemV9YCA6ICcnLFxuICAgICAgICAgICAgdGhpcy5jbGFzc1xuICAgICAgICBdO1xuICAgIH1cbn1cbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIltmZC1iYXItbGVmdF1cIj48L25nLWNvbnRlbnQ+XG48bmctY29udGVudCBzZWxlY3Q9XCJbZmQtYmFyLW1pZGRsZV1cIj48L25nLWNvbnRlbnQ+XG48bmctY29udGVudCBzZWxlY3Q9XCJbZmQtYmFyLXJpZ2h0XVwiPjwvbmctY29udGVudD5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2Jhci9iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvYmFyL2Jhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFJTCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFtQixNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsK0JBQStCLEVBQy9CLGtCQUFrQixFQUNyQixNQUFNLHVDQUF1QyxDQUFDOzs7QUFLL0M7Ozs7R0FJRztBQWNILE1BQU0sT0FBTyxZQUFZO0lBNEJyQixjQUFjO0lBQ2QsWUFBNEIsVUFBc0IsRUFBVSx1QkFBK0M7UUFBL0UsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFVLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFWM0c7O1dBRUc7UUFFSCxTQUFJLEdBQWEsRUFBRSxDQUFDO1FBRXBCLGNBQWM7UUFDTixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJeEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFFSCxzQkFBc0I7UUFDbEIsT0FBTztZQUNILFFBQVE7WUFDUixJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYztZQUN4RyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BFLElBQUksQ0FBQyxLQUFLO1NBQ2IsQ0FBQztJQUNOLENBQUM7OEdBakVRLFlBQVk7a0dBQVosWUFBWSxpSkFOVjtZQUNQLCtCQUErQixDQUFDO2dCQUM1QixxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxPQUFPO2FBQ3BELENBQUM7U0FDTCwrQ0NyQ0wsNExBSUE7O0FEeUZJO0lBREMsYUFBYTs7OzswREFZYjsyRkFqRVEsWUFBWTtrQkFieEIsU0FBUzsrQkFFSSxVQUFVLGlCQUdMLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1AsK0JBQStCLENBQUM7NEJBQzVCLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLE9BQU87eUJBQ3BELENBQUM7cUJBQ0w7c0lBS0QsS0FBSztzQkFESixLQUFLO2dCQU9OLFNBQVM7c0JBRFIsS0FBSztnQkFLTixNQUFNO3NCQURMLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLElBQUk7c0JBREgsS0FBSztnQkFnQ04sc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXBwbHlDc3NDbGFzcywgQ3NzQ2xhc3NCdWlsZGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU9ic2VydmVyLFxuICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMsXG4gICAgQ29udGVudERlbnNpdHlNb2RlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5leHBvcnQgdHlwZSBTaXplVHlwZSA9ICcnIHwgJ3MnIHwgJ21fbCcgfCAneGwnO1xuZXhwb3J0IHR5cGUgQmFyRGVzaWduVHlwZSA9ICdoZWFkZXInIHwgJ3N1YmhlYWRlcicgfCAnaGVhZGVyLXdpdGgtc3ViaGVhZGVyJyB8ICdmb290ZXInIHwgJ2Zsb2F0aW5nLWZvb3Rlcic7XG5cbi8qKlxuICogVGhlIEJhciBjb21wb25lbnQgaXMgYSBjb250YWluZXIgdGhhdCBob2xkcyB0aXRsZXMsIGJ1dHRvbnMgYW5kIGlucHV0IGNvbnRyb2xzLlxuICogSXRzIGNvbnRlbnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhyZWUgYXJlYXMgLSBsZWZ0LCBtaWRkbGUgYW5kIHJpZ2h0LlxuICogVGhlIEJhciBoYXMgMiBtb2RlcyAtIERlc2t0b3AgKGRlZmF1bHQpIGFuZCBUYWJsZXQvTW9iaWxlIChjb3p5KS5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tmZC1iYXJdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKHtcbiAgICAgICAgICAgIGRlZmF1bHRDb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1RcbiAgICAgICAgfSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBDc3NDbGFzc0J1aWxkZXIsIE9uRGVzdHJveSB7XG4gICAgLyoqIHVzZXIncyBjdXN0b20gY2xhc3NlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBCYXIgY29tcG9uZW50IGlzIHVzZWQgYXMgYSBoZWFkZXIsIHN1YmhlYWRlciwgaGVhZGVyLXdpdGgtc3ViaGVhZGVyLFxuICAgICAqIGZvb3RlciBvciBmbG9hdGluZy1mb290ZXIuXG4gICAgICogVHlwZXMgYXZhaWxhYmxlOiAnaGVhZGVyJyB8ICdzdWJoZWFkZXInIHwgJ2hlYWRlci13aXRoLXN1YmhlYWRlcicgfCAnZm9vdGVyJyB8ICdmbG9hdGluZy1mb290ZXInICovXG4gICAgQElucHV0KClcbiAgICBiYXJEZXNpZ246IEJhckRlc2lnblR5cGU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgQmFyIGNvbXBvbmVudCBpcyB1c2VkIGluIFBhZ2UgTGF5b3V0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5QYWdlOiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIEJhciBjb21wb25lbnQgaXMgdXNlZCBpbiBIb21lIFBhZ2UgTGF5b3V0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5Ib21lUGFnZTogYm9vbGVhbjtcblxuICAgIC8qKiBUaGUgc2l6ZSBvZiB0aGUgUGFnZSBpbiBQYWdlIHJlc3BvbnNpdmUgZGVzaWduLlxuICAgICAqIEF2YWlsYWJsZSBzaXplczogJ3MnIHwgJ21fbCcgfCAneGwnXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaXplOiBTaXplVHlwZSA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcikge1xuICAgICAgICB0aGlzLl9jb250ZW50RGVuc2l0eU9ic2VydmVyLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIENzc0NsYXNzQnVpbGRlciBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cbiAgICAgKiBmdW5jdGlvbiBtdXN0IHJldHVybiBzaW5nbGUgc3RyaW5nXG4gICAgICogZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIG9yZGVyIHdoaWNoIGNzcyBjbGFzc2VzIGFyZSBhcHBsaWVkXG4gICAgICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmZC1iYXInLFxuICAgICAgICAgICAgdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbXBhY3QgfHwgdGhpcy5fY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvbmRlbnNlZCA/ICcnIDogJ2ZkLWJhci0tY296eScsIC8vIFRPRE86IGZpeCBpbiBzdHlsZXNcbiAgICAgICAgICAgIHRoaXMuYmFyRGVzaWduID8gYGZkLWJhci0tJHt0aGlzLmJhckRlc2lnbn1gIDogJycsXG4gICAgICAgICAgICB0aGlzLmluUGFnZSAmJiAhdGhpcy5zaXplID8gJ2ZkLWJhci0tcGFnZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaW5QYWdlICYmIHRoaXMuc2l6ZSA/IGBmZC1iYXItLXBhZ2UtJHt0aGlzLnNpemV9YCA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pbkhvbWVQYWdlICYmICF0aGlzLnNpemUgPyAnZmQtYmFyLS1ob21lLXBhZ2UnIDogJycsXG4gICAgICAgICAgICB0aGlzLmluSG9tZVBhZ2UgJiYgdGhpcy5zaXplID8gYGZkLWJhci0taG9tZS1wYWdlLSR7dGhpcy5zaXplfWAgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuY2xhc3NcbiAgICAgICAgXTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJbZmQtYmFyLWxlZnRdXCI+PC9uZy1jb250ZW50PlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZkLWJhci1taWRkbGVdXCI+PC9uZy1jb250ZW50PlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZkLWJhci1yaWdodF1cIj48L25nLWNvbnRlbnQ+XG48bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
@@ -112,6 +112,10 @@ export class CarouselService {
112
112
  }
113
113
  /** @hidden */
114
114
  _centerActive(index) {
115
+ const size = this._getSize(this.items.first);
116
+ if (isNaN(size)) {
117
+ return;
118
+ }
115
119
  const middleIndex = Math.ceil(this.items.length / 2);
116
120
  const offset = Math.ceil(this.elementsAtOnce / 2);
117
121
  const missingItems = index + offset - middleIndex;
@@ -330,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
330
334
  type: Inject,
331
335
  args: [DOCUMENT]
332
336
  }] }]; } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQXdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHM0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsT0FBTyxDQUFDO0FBMEJuRCxlQUFlO0FBSWYsTUFBTSxPQUFPLGVBQWU7SUFtQnhCLHFDQUFxQztJQUNyQyxJQUFJLG1CQUFtQixDQUFDLG1CQUEyQjtRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBWSxjQUFjO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUE0QkQsY0FBYztJQUNkLFlBQStDLFNBQTBCO1FBQTFCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBNUR6RSxzR0FBc0c7UUFDN0YscUJBQWdCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0UsbURBQW1EO1FBQzFDLGtCQUFhLEdBQStCLElBQUksWUFBWSxF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Q0FBQyxvQkFBb0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYztJQUNOLGtCQUFrQixDQUFDLEtBQThCO1FBQ3JELElBQUksV0FBK0IsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RDthQUFNO1lBQ0gsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDeEUsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhLENBQUMsS0FBOEI7UUFDaEQsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLEtBQUssWUFBWSxVQUFVLENBQUM7SUFDNUQsQ0FBQzs4R0E5WlEsZUFBZSxrQkE2REosUUFBUTtrSEE3RG5CLGVBQWUsY0FGWixNQUFNOzsyRkFFVCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBOERnQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT25EZXN0cm95LCBRdWVyeUxpc3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gJzE1MG1zJztcblxuZXhwb3J0IGludGVyZmFjZSBDYXJvdXNlbEl0ZW1JbnRlcmZhY2Uge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGdldEhlaWdodCgpOiBudW1iZXI7XG4gICAgZ2V0V2lkdGgoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcm91c2VsQ29uZmlnIHtcbiAgICAvKiogRGVmaW5lcyBpZiBjYXJvdXNlbCBpdGVtcyBhcmUgcGxhY2VkIHZlcnRpY2FsbHkgKi9cbiAgICB2ZXJ0aWNhbD86IGJvb2xlYW47XG4gICAgLyoqIEFtb3VudCBvZiB2aXNpYmxlIGVsZW1lbnRzIGluIGNhcm91c2VsICovXG4gICAgZWxlbWVudHNBdE9uY2U/OiBudW1iZXI7XG4gICAgLyoqIERlZmluZXMgaWYgc3VwcG9ydCBmb3IgZ2VzdHVyZXMsIGxpa2UgdG91Y2ggc3dpcGUgb3IgbW91c2UgZHJhZyBzaG91bGQgYmUgZW5hYmxlZCAqL1xuICAgIGdlc3R1cmVTdXBwb3J0PzogYm9vbGVhbjtcbiAgICAvKiogRGVmaW5lcyBpZiBjYXJvdXNlbCBzaG91bGQgbW92ZSBlbGVtZW50cyB0byBzaWRlcy4gSXQgYWxsb3dzIHRvIHNsaWRlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvbiAqL1xuICAgIGluZmluaXRlPzogYm9vbGVhbjtcbiAgICAvKiogVHJhbnNpdGlvbiB0aW1lIG9mIENTUyB0cmFuc2xhdGUsIGAxNTBtc2AgYnkgZGVmYXVsdCAqL1xuICAgIHRyYW5zaXRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFuRW5kT3V0cHV0IHtcbiAgICBpdGVtOiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2U7XG4gICAgYWZ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKiBAZHluYW1pYyAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKiBFdmVudCB0aHJvd24gd2hlbiBlbGVtZW50IGlzIGRyYWdnZWQuIEVtaXRzIFwidHJ1ZVwiIHdoZW4gZHJhZyBzdGFydHMgYW5kIFwiZmFsc2VcIiB3aGVuIGRyYWcgZW5kcy4gKi9cbiAgICByZWFkb25seSBkcmFnU3RhdGVDaGFuZ2UkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIGFjdGl2ZSBlbGVtZW50IGlzIGNoYW5nZWQgKi9cbiAgICByZWFkb25seSBhY3RpdmVDaGFuZ2UkOiBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PigpO1xuXG4gICAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIGNhcm91c2VsICovXG4gICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZztcblxuICAgIC8qKiBJbml0aWFsIGFjdGl2ZSBpdGVtIG9mIGNhcm91c2VsLCBwb3NpdGlvbiBmaXJzdCArIG9mZnNldCAqL1xuICAgIGFjdGl2ZTogTnVsbGFibGU8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPjtcblxuICAgIC8qKiBTZXQgdG8gdHJ1ZSBmb3IgcnRsIG1vZGUgKi9cbiAgICBpc1J0bCA9IGZhbHNlO1xuXG4gICAgLyoqIGNhcm91c2VsIGl0ZW1zIHF1ZXJ5IGxpc3QgKi9cbiAgICBpdGVtczogUXVlcnlMaXN0PENhcm91c2VsSXRlbUludGVyZmFjZT47XG5cbiAgICAvKiogQ3VycmVudCB0cmFuc2l0aW9uIHZhbHVlIGluIHB4ICovXG4gICAgc2V0IGN1cnJlbnRUcmFuc2l0aW9uUHgoY3VycmVudFRyYW5zaXRpb25QeDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPSBjdXJyZW50VHJhbnNpdGlvblB4O1xuICAgIH1cbiAgICBnZXQgY3VycmVudFRyYW5zaXRpb25QeCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRyYW5zaXRpb25QeDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IGVsZW1lbnRzQXRPbmNlKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG51bSA9IHRoaXMuY29uZmlnPy5lbGVtZW50c0F0T25jZSA/PyAxO1xuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgxLCBudW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdERpc3RhbmNlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFRyYW5zaXRpb25QeCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsRHJhZ1Bvc2l0aW9uID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdERyYWdQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTW91c2VNb3ZlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQ6IERvY3VtZW50IHwgbnVsbCkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBzZXJ2aWNlICovXG4gICAgaW5pdGlhbGlzZShcbiAgICAgICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZyxcbiAgICAgICAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1JbnRlcmZhY2U+LFxuICAgICAgICBsaXN0RWxlbWVudFJlZmVyZW5jZTogRWxlbWVudFJlZlxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGxpc3RFbGVtZW50UmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtcyhpdGVtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdlc3R1cmVTdXBwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR1cEdlc3R1cmVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogdXBkYXRlIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIHNlcnZpY2UgKi9cbiAgICB1cGRhdGVDb25maWcoY29uZmlnOiBDYXJvdXNlbENvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICAvKiogc2V0IGVsZW1lbnQgcmVmICovXG4gICAgc2V0RWxlbWVudChlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIHNldCBpdGVtcyBhbmQgYXNzaWduIGFjdGl2ZSBpdGVtLCBpZiBub3QgYWxyZWFkeSB0aGVyZSAqL1xuICAgIHNldEl0ZW1zKGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPik6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENoYW5nZSBhY3RpdmUgZWxlbWVudCAqL1xuICAgIGdvVG9JdGVtKGl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbShpdGVtKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmluZmluaXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9jZW50ZXJBY3RpdmUoaW5kZXgpO1xuXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRvSW5kZXgoaW5kZXgsIHNtb290aCk7XG4gICAgfVxuXG4gICAgLyoqIHBpY2sgbmV4dCBlbGVtZW50IGFuZCBzZXQgaXQgYWN0aXZlICovXG4gICAgcGlja05leHQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1JbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKHRoaXMuYWN0aXZlKTtcbiAgICAgICAgY29uc3QgaXRlbVRvQWN0aXZhdGUgPSB0aGlzLml0ZW1zLmdldChhY3RpdmVJdGVtSW5kZXggKyAxKSA/PyB0aGlzLml0ZW1zLmZpcnN0O1xuXG4gICAgICAgIHRoaXMuZ29Ub0l0ZW0oaXRlbVRvQWN0aXZhdGUsIHRydWUpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGl0ZW1Ub0FjdGl2YXRlO1xuICAgIH1cblxuICAgIC8qKiBwaWNrIHByZXZpb3VzIGVsZW1lbnQgYW5kIHNldCBpdCBhY3RpdmUgKi9cbiAgICBwaWNrUHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5nZXQoMik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbSh0aGlzLmFjdGl2ZSk7XG4gICAgICAgIGxldCBpdGVtVG9BY3RpdmF0ZSA9IHRoaXMuaXRlbXMuZ2V0KGFjdGl2ZUl0ZW1JbmRleCAtIDEpO1xuXG4gICAgICAgIC8vIGNhc2Ugd2hlcmUgc2xpZGVzIGNhbiBtb3ZlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvblxuICAgICAgICAvLyBoYW5kbGUgY2FzZSB3aGVyZSBvbi1sb2FkIGFjdGl2ZUl0ZW1JbmRleCA9IDAgYW5kIGFjdGl2ZUl0ZW1JbmRleCAtIDEgcmV0dXJucyB1bmRlZmluZWQgaXRlbSBmcm9tIGl0ZW0gYXJyYXkuXG4gICAgICAgIGlmICghaXRlbVRvQWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGl0ZW1Ub0FjdGl2YXRlID0gdGhpcy5pdGVtcy5sYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nb1RvSXRlbShpdGVtVG9BY3RpdmF0ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gaXRlbVRvQWN0aXZhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jZW50ZXJBY3RpdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBtaWRkbGVJbmRleCA9IE1hdGguY2VpbCh0aGlzLml0ZW1zLmxlbmd0aCAvIDIpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBNYXRoLmNlaWwodGhpcy5lbGVtZW50c0F0T25jZSAvIDIpO1xuICAgICAgICBjb25zdCBtaXNzaW5nSXRlbXMgPSBpbmRleCArIG9mZnNldCAtIG1pZGRsZUluZGV4O1xuICAgICAgICBjb25zdCBhcnJheSA9IHRoaXMuaXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIGlmIChtaXNzaW5nSXRlbXMgPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pc3NpbmdJdGVtczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGFycmF5LnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgaXRlbSAmJiBhcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmFicyhtaXNzaW5nSXRlbXMpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gYXJyYXkucG9wKCk7XG4gICAgICAgICAgICAgICAgaXRlbSAmJiBhcnJheS51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqIENoYW5naW5nIG9yZGVyIG9mIGVsZW1lbnRzIGluIFF1ZXJ5TGlzdCBhbmQgTmF0aXZlIEhUTUwgKi9cbiAgICAgICAgdGhpcy5pdGVtcy5yZXNldChhcnJheSk7XG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5lbGVtZW50LnBhcmVudE5vZGU/LmFwcGVuZENoaWxkKGl0ZW0uZWxlbWVudCkpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGb3IgcHJvcGVyIGFuaW1hdGlvbiBpdCdzIG5lZWRlZCB0byB0cmFuc2Zvcm0gZWxlbWVudHMsXG4gICAgICAgICAqIGJ5IGNoYW5naW5nIHRyYW5zaXRpb24gYnkgYW1vdW50IG9mIGVsZW1lbnRzIHBsYWNlZCBhdCB0b3AvYm90dG9tXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25DYXJvdXNlbCh0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ICsgdGhpcy5fZ2V0U2l6ZSh0aGlzLml0ZW1zLmZpcnN0KSAqIG1pc3NpbmdJdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmFuc2l0aW9uVG9JbmRleChpbmRleDogbnVtYmVyLCBzbW9vdGg/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGxldCB0cmFuc2l0aW9uUHg6IG51bWJlciA9IHRoaXMuX2dldFNpemUodGhpcy5pdGVtcy5maXJzdCkgKiBpbmRleDtcblxuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IHNtb290aCA/IHRoaXMuX2dldFRyYW5zaXRpb24oKSA6ICcwcyc7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzUnRsIHx8ICh0aGlzLmNvbmZpZy52ZXJ0aWNhbCAmJiB0aGlzLmlzUnRsKSkge1xuICAgICAgICAgICAgdHJhbnNpdGlvblB4ID0gLXRyYW5zaXRpb25QeDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25DYXJvdXNlbCh0cmFuc2l0aW9uUHgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldCBjbG9zZXMgZWxlbWVudCwgYmFzZWQgb24gY3VycmVudCB0cmFuc2l0aW9uICovXG4gICAgcHJpdmF0ZSBfZ2V0Q2xvc2VzdCgpOiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2Uge1xuICAgICAgICAvKiogSWYgdHJhbnNpdGlvbiBpcyBwb3NpdGl2ZSwgaXQgc2hvdWxkIGdvIHRvIGZpcnN0IGVsZW1lbnQgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuY29uZmlnLmluZmluaXRlICYmXG4gICAgICAgICAgICAoKCF0aGlzLmNvbmZpZy52ZXJ0aWNhbCAmJlxuICAgICAgICAgICAgICAgICgoIXRoaXMuaXNSdGwgJiYgdGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCA+IDApIHx8ICh0aGlzLmlzUnRsICYmIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPCAwKSkpIHx8XG4gICAgICAgICAgICAgICAgKHRoaXMuY29uZmlnLnZlcnRpY2FsICYmIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPiAwKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLl9nZXRTaXplKHRoaXMuaXRlbXMuZmlyc3QpO1xuXG4gICAgICAgIC8qKiBXaGVuIHNjcm9sbCBpcyBhZnRlciBoYWxmIG9mIGVsZW1lbnQsIHRoZW4gZXh0IG9uZSBzaG91bGQgYmUgYWN0aXZlICovXG4gICAgICAgIGNvbnN0IGhhbGZBcHByb2FjaGVkOiBib29sZWFuID0gTWF0aC5hYnModGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCAlIHNpemUpID4gc2l6ZSAvIDI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRleCBiYXNlZCBvbiB0cmFuc2l0aW9uIHB4IGRpdmlkZWQgYnkgc2l6ZSBvZiBlbGVtZW50cyxcbiAgICAgICAgICogZXZlcnkgZWxlbWVudCBzaG91bGQgaGF2ZSBzYW1lIHdpZHRoLCBvdGhlcndpc2UgaXQgc2hvdWxkIGJlIGxvb3BlZCB0aHJvdWdoIGFsbCBlbGVtZW50cyxcbiAgICAgICAgICogd2hpY2ggaXMgbm90IGdvb2QgZm9yIHBlcmZvcm1hbmNlXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgaW5kZXggPSBNYXRoLmNlaWwoTWF0aC5hYnModGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCAvIHNpemUpKTtcblxuICAgICAgICAvLyBXaGVuIGVsZW1lbnRzQXRPbmNlID4gMSwgc3dpcGluZyBzaG91bGQgc3RvcCBhdCBsYXN0IGluZGV4IC0gZWxlbWVudHNBdE9uY2VcbiAgICAgICAgY29uc3QgZWxlbWVudHNBdE9uY2UgPSB0aGlzLmVsZW1lbnRzQXRPbmNlO1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmluZmluaXRlICYmIGVsZW1lbnRzQXRPbmNlID4gMSkge1xuICAgICAgICAgICAgLy8gV2hlbiB0aGVyZSdyZSBsZXNzIGl0ZW1zIGluIHRoZSBjYXJvdXNlbCB0aGFuIHRoZSBhcmVhIG1pZ2h0IGRpc3BsYXksIGl0IHNob3VsZCBzdG9wIHRvIGZpcnN0XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPCBlbGVtZW50c0F0T25jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaW5kZXggKyBlbGVtZW50c0F0T25jZSA+PSB0aGlzLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmdldCh0aGlzLml0ZW1zLmxlbmd0aCAtIGVsZW1lbnRzQXRPbmNlKSA/PyB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXggPSBpbmRleCArIChoYWxmQXBwcm9hY2hlZCA/IDAgOiAtMSk7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmdldChpbmRleCk7XG5cbiAgICAgICAgLyoqIENoZWNraW5nIGlmIHRyYW5zaXRpb24gd2VudCBvdXQgb2Ygc2NvcGUgb2YgYXJyYXkgKi9cbiAgICAgICAgcmV0dXJuIGl0ZW0gfHwgdGhpcy5pdGVtcy5sYXN0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0SW5kZXhPZkl0ZW0oaXRlbT86IENhcm91c2VsSXRlbUludGVyZmFjZSk6IG51bWJlciB7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gR2V0dGluZyBzaXplIG9mIGNhcm91c2VsLCB3aWR0aCBmb3IgaG9yaXpvbnRhbCwgaGVpZ2h0IGZvciB2ZXJ0aWNhbCAqL1xuICAgIHByaXZhdGUgX2dldFNpemUoaXRlbTogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRIZWlnaHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtLmdldFdpZHRoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9oYW5kbGVQYW4oZGVsdGE6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRlbHRhIC0gdGhpcy5fbGFzdERpc3RhbmNlO1xuXG4gICAgICAgIHRoaXMuX2xhc3REaXN0YW5jZSA9IGRlbHRhO1xuXG4gICAgICAgIHRoaXMuX3RyYW5zaXRpb25DYXJvdXNlbCh0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ICsgZGlzdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUGFuRW5kKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGFuZGxlUGFuKGRlbHRhKTtcblxuICAgICAgICBjb25zdCBjbG9zZXN0SXRlbTogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlID0gdGhpcy5fZ2V0Q2xvc2VzdCgpO1xuXG4gICAgICAgIHRoaXMuZ29Ub0l0ZW0oY2xvc2VzdEl0ZW0sIHRydWUpO1xuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gY2xvc2VzdEl0ZW07XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUNoYW5nZSQuZW1pdCh7XG4gICAgICAgICAgICAgICAgaXRlbTogY2xvc2VzdEl0ZW0sXG4gICAgICAgICAgICAgICAgYWZ0ZXI6IGRlbHRhIDwgMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3RpdmUgIT09IGNsb3Nlc3RJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGNsb3Nlc3RJdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmVtaXQoe1xuICAgICAgICAgICAgICAgIGl0ZW06IGNsb3Nlc3RJdGVtLFxuICAgICAgICAgICAgICAgIGFmdGVyOiBkZWx0YSA8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kcmFnU3RhdGVDaGFuZ2UkLmVtaXQoZmFsc2UpO1xuICAgICAgICB0aGlzLl9sYXN0RGlzdGFuY2UgPSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQW5pbWF0ZXMgdGhlIGNhcm91c2VsIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc2xpZGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdHJhbnNpdGlvbkNhcm91c2VsKHRyYW5zaXRpb25QeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPSB0cmFuc2l0aW9uUHg7XG4gICAgICAgIGNvbnN0IGF4aXMgPSB0aGlzLmNvbmZpZy52ZXJ0aWNhbCA/ICdZJyA6ICdYJztcblxuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUke2F4aXN9KCR7dGhpcy5fY3VycmVudFRyYW5zaXRpb25QeH1weClgO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFBhbSBTdGFydCBoYW5kbGVyLCByZW1vdmVzIHRyYW5zaXRpb24gZHVyYXRpb24sICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUGFuU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBzJztcbiAgICAgICAgdGhpcy5kcmFnU3RhdGVDaGFuZ2UkLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cEdlc3R1cmVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXR1cERyYWdTdGFydCgpO1xuICAgICAgICB0aGlzLl9zZXR1cERyYWcoKTtcbiAgICAgICAgdGhpcy5fc2V0dXBEcmFnRW5kKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb0V2ZW50cyhcbiAgICAgICAgZXZlbnRzOiBzdHJpbmdbXSxcbiAgICAgICAgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBEb2N1bWVudCxcbiAgICAgICAgY2FsbGJhY2s6IChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWRcbiAgICApOiB2b2lkIHtcbiAgICAgICAgbWVyZ2UoZXZlbnRzLm1hcCgoZSkgPT4gZnJvbUV2ZW50PE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50PihlbGVtZW50LCBlLCB7IHBhc3NpdmU6IHRydWUgfSkpKS5mb3JFYWNoKFxuICAgICAgICAgICAgKGV2dDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50IHwgVG91Y2hFdmVudD4pID0+IHtcbiAgICAgICAgICAgICAgICBldnQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBEcmFnU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFsnbW91c2Vkb3duJywgJ3RvdWNoc3RhcnQnXTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0V2ZW50cyhldmVudHMsIHRoaXMuX2VsZW1lbnQsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fbGFzdERyYWdQb3NpdGlvbiA9IHRoaXMuX2luaXRpYWxEcmFnUG9zaXRpb24gPSB0aGlzLl9nZXREcmFnQ29vcmRpbmF0ZShldmVudCk7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVQYW5TdGFydCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldHVwRHJhZygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gWydtb3VzZW1vdmUnLCAndG91Y2htb3ZlJ107XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kb2N1bWVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBDb3VsZCBub3Qgc2V0dXAgZHJhZyBldmVudCBzdWJzY3JpcHRpb24uIEV4cGVjdGVkIHRvIGdldCBkb2N1bWVudCByZWYsIGdvdCAke3RoaXMuX2RvY3VtZW50fSBpbnN0ZWFkYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvRXZlbnRzKGV2ZW50cywgdGhpcy5fZG9jdW1lbnQsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29vcmRpbmF0ZSA9IHRoaXMuX2dldERyYWdDb29yZGluYXRlKGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9saXN0ZW5Ub01vdXNlTW92ZSB8fCBjb29yZGluYXRlID09PSB0aGlzLl9sYXN0RHJhZ1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kcmFnU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVQYW4odGhpcy5fZ2V0RHJhZ2dlZERlbHRhKGNvb3JkaW5hdGUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cERyYWdFbmQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFsnbW91c2V1cCcsICd0b3VjaGVuZCddO1xuXG4gICAgICAgIGlmICghdGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ291bGQgbm90IHNldHVwIGRyYWcgZXZlbnQgc3Vic2NyaXB0aW9uLiBFeHBlY3RlZCB0byBnZXQgZG9jdW1lbnQgcmVmLCBnb3QgJHt0aGlzLl9kb2N1bWVudH0gaW5zdGVhZGBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0V2ZW50cyhldmVudHMsIHRoaXMuX2RvY3VtZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kcmFnU3RhcnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhbmRsZVBhbkVuZCh0aGlzLl9nZXREcmFnZ2VkRGVsdGEodGhpcy5fZ2V0RHJhZ0Nvb3JkaW5hdGUoZXZlbnQpKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdTdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VHJhbnNpdGlvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWc/LnRyYW5zaXRpb24gPz8gREVGQVVMVF9UUkFOU0lUSU9OX0RVUkFUSU9OO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RHJhZ2dlZERlbHRhKG9mZnNldDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgdGhpcy5fbGFzdERyYWdQb3NpdGlvbiA9IG9mZnNldDtcblxuICAgICAgICByZXR1cm4gb2Zmc2V0IC0gdGhpcy5faW5pdGlhbERyYWdQb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERyYWdDb29yZGluYXRlKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IG51bWJlciB7XG4gICAgICAgIGxldCBjb29yZGluYXRlczogVG91Y2ggfCBNb3VzZUV2ZW50O1xuXG4gICAgICAgIGlmICh0aGlzLl9pc1RvdWNoRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICBjb29yZGluYXRlcyA9IGV2ZW50LnRvdWNoZXNbMF0gfHwgZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb29yZGluYXRlcyA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnZlcnRpY2FsID8gY29vcmRpbmF0ZXMucGFnZVkgOiBjb29yZGluYXRlcy5wYWdlWDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzVG91Y2hFdmVudChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiBldmVudCBpcyBUb3VjaEV2ZW50IHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5Ub3VjaEV2ZW50ICYmIGV2ZW50IGluc3RhbmNlb2YgVG91Y2hFdmVudDtcbiAgICB9XG59XG4iXX0=
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2Nhcm91c2VsL2Nhcm91c2VsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQXdCLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHM0MsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsT0FBTyxDQUFDO0FBMEJuRCxlQUFlO0FBSWYsTUFBTSxPQUFPLGVBQWU7SUFtQnhCLHFDQUFxQztJQUNyQyxJQUFJLG1CQUFtQixDQUFDLG1CQUEyQjtRQUMvQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsSUFBWSxjQUFjO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUU3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUE0QkQsY0FBYztJQUNkLFlBQStDLFNBQTBCO1FBQTFCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBNUR6RSxzR0FBc0c7UUFDN0YscUJBQWdCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFFL0UsbURBQW1EO1FBQzFDLGtCQUFhLEdBQStCLElBQUksWUFBWSxF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VSxJQUFJLDJCQUEyQixDQUFDO0lBQ2xFLENBQUM7SUFFRCxjQUFjO0lBQ04sZ0JBQWdCLENBQUMsTUFBYztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO1FBRWhDLE9BQU8sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYztJQUNOLGtCQUFrQixDQUFDLEtBQThCO1FBQ3JELElBQUksV0FBK0IsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3RDthQUFNO1lBQ0gsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDeEUsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhLENBQUMsS0FBOEI7UUFDaEQsT0FBTyxNQUFNLENBQUMsVUFBVSxJQUFJLEtBQUssWUFBWSxVQUFVLENBQUM7SUFDNUQsQ0FBQzs4R0FsYVEsZUFBZSxrQkE2REosUUFBUTtrSEE3RG5CLGVBQWUsY0FGWixNQUFNOzsyRkFFVCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBOERnQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT25EZXN0cm95LCBRdWVyeUxpc3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gJzE1MG1zJztcblxuZXhwb3J0IGludGVyZmFjZSBDYXJvdXNlbEl0ZW1JbnRlcmZhY2Uge1xuICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIGdldEhlaWdodCgpOiBudW1iZXI7XG4gICAgZ2V0V2lkdGgoKTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcm91c2VsQ29uZmlnIHtcbiAgICAvKiogRGVmaW5lcyBpZiBjYXJvdXNlbCBpdGVtcyBhcmUgcGxhY2VkIHZlcnRpY2FsbHkgKi9cbiAgICB2ZXJ0aWNhbD86IGJvb2xlYW47XG4gICAgLyoqIEFtb3VudCBvZiB2aXNpYmxlIGVsZW1lbnRzIGluIGNhcm91c2VsICovXG4gICAgZWxlbWVudHNBdE9uY2U/OiBudW1iZXI7XG4gICAgLyoqIERlZmluZXMgaWYgc3VwcG9ydCBmb3IgZ2VzdHVyZXMsIGxpa2UgdG91Y2ggc3dpcGUgb3IgbW91c2UgZHJhZyBzaG91bGQgYmUgZW5hYmxlZCAqL1xuICAgIGdlc3R1cmVTdXBwb3J0PzogYm9vbGVhbjtcbiAgICAvKiogRGVmaW5lcyBpZiBjYXJvdXNlbCBzaG91bGQgbW92ZSBlbGVtZW50cyB0byBzaWRlcy4gSXQgYWxsb3dzIHRvIHNsaWRlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvbiAqL1xuICAgIGluZmluaXRlPzogYm9vbGVhbjtcbiAgICAvKiogVHJhbnNpdGlvbiB0aW1lIG9mIENTUyB0cmFuc2xhdGUsIGAxNTBtc2AgYnkgZGVmYXVsdCAqL1xuICAgIHRyYW5zaXRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFuRW5kT3V0cHV0IHtcbiAgICBpdGVtOiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2U7XG4gICAgYWZ0ZXI6IGJvb2xlYW47XG59XG5cbi8qKiBAZHluYW1pYyAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYXJvdXNlbFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKiBFdmVudCB0aHJvd24gd2hlbiBlbGVtZW50IGlzIGRyYWdnZWQuIEVtaXRzIFwidHJ1ZVwiIHdoZW4gZHJhZyBzdGFydHMgYW5kIFwiZmFsc2VcIiB3aGVuIGRyYWcgZW5kcy4gKi9cbiAgICByZWFkb25seSBkcmFnU3RhdGVDaGFuZ2UkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIGFjdGl2ZSBlbGVtZW50IGlzIGNoYW5nZWQgKi9cbiAgICByZWFkb25seSBhY3RpdmVDaGFuZ2UkOiBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFuRW5kT3V0cHV0PigpO1xuXG4gICAgLyoqIENvbmZpZ3VyYXRpb24gZm9yIGNhcm91c2VsICovXG4gICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZztcblxuICAgIC8qKiBJbml0aWFsIGFjdGl2ZSBpdGVtIG9mIGNhcm91c2VsLCBwb3NpdGlvbiBmaXJzdCArIG9mZnNldCAqL1xuICAgIGFjdGl2ZTogTnVsbGFibGU8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPjtcblxuICAgIC8qKiBTZXQgdG8gdHJ1ZSBmb3IgcnRsIG1vZGUgKi9cbiAgICBpc1J0bCA9IGZhbHNlO1xuXG4gICAgLyoqIGNhcm91c2VsIGl0ZW1zIHF1ZXJ5IGxpc3QgKi9cbiAgICBpdGVtczogUXVlcnlMaXN0PENhcm91c2VsSXRlbUludGVyZmFjZT47XG5cbiAgICAvKiogQ3VycmVudCB0cmFuc2l0aW9uIHZhbHVlIGluIHB4ICovXG4gICAgc2V0IGN1cnJlbnRUcmFuc2l0aW9uUHgoY3VycmVudFRyYW5zaXRpb25QeDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPSBjdXJyZW50VHJhbnNpdGlvblB4O1xuICAgIH1cbiAgICBnZXQgY3VycmVudFRyYW5zaXRpb25QeCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFRyYW5zaXRpb25QeDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IGVsZW1lbnRzQXRPbmNlKCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IG51bSA9IHRoaXMuY29uZmlnPy5lbGVtZW50c0F0T25jZSA/PyAxO1xuXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgxLCBudW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdERpc3RhbmNlID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudFRyYW5zaXRpb25QeCA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsRHJhZ1Bvc2l0aW9uID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdERyYWdQb3NpdGlvbiA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3RlblRvTW91c2VNb3ZlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kcmFnU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZylcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQ6IERvY3VtZW50IHwgbnVsbCkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHRoZSBzZXJ2aWNlICovXG4gICAgaW5pdGlhbGlzZShcbiAgICAgICAgY29uZmlnOiBDYXJvdXNlbENvbmZpZyxcbiAgICAgICAgaXRlbXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1JbnRlcmZhY2U+LFxuICAgICAgICBsaXN0RWxlbWVudFJlZmVyZW5jZTogRWxlbWVudFJlZlxuICAgICk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50KGxpc3RFbGVtZW50UmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtcyhpdGVtcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmdlc3R1cmVTdXBwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR1cEdlc3R1cmVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogdXBkYXRlIGNvbmZpZyB2YWx1ZSBmb3IgdGhlIHNlcnZpY2UgKi9cbiAgICB1cGRhdGVDb25maWcoY29uZmlnOiBDYXJvdXNlbENvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICAvKiogc2V0IGVsZW1lbnQgcmVmICovXG4gICAgc2V0RWxlbWVudChlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIHNldCBpdGVtcyBhbmQgYXNzaWduIGFjdGl2ZSBpdGVtLCBpZiBub3QgYWxyZWFkeSB0aGVyZSAqL1xuICAgIHNldEl0ZW1zKGl0ZW1zOiBRdWVyeUxpc3Q8Q2Fyb3VzZWxJdGVtSW50ZXJmYWNlPik6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1zID0gaXRlbXM7XG5cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLml0ZW1zLmZpcnN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENoYW5nZSBhY3RpdmUgZWxlbWVudCAqL1xuICAgIGdvVG9JdGVtKGl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbShpdGVtKTtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmluZmluaXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9jZW50ZXJBY3RpdmUoaW5kZXgpO1xuXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdHJhbnNpdGlvblRvSW5kZXgoaW5kZXgsIHNtb290aCk7XG4gICAgfVxuXG4gICAgLyoqIHBpY2sgbmV4dCBlbGVtZW50IGFuZCBzZXQgaXQgYWN0aXZlICovXG4gICAgcGlja05leHQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1JbmRleCA9IHRoaXMuX2dldEluZGV4T2ZJdGVtKHRoaXMuYWN0aXZlKTtcbiAgICAgICAgY29uc3QgaXRlbVRvQWN0aXZhdGUgPSB0aGlzLml0ZW1zLmdldChhY3RpdmVJdGVtSW5kZXggKyAxKSA/PyB0aGlzLml0ZW1zLmZpcnN0O1xuXG4gICAgICAgIHRoaXMuZ29Ub0l0ZW0oaXRlbVRvQWN0aXZhdGUsIHRydWUpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGl0ZW1Ub0FjdGl2YXRlO1xuICAgIH1cblxuICAgIC8qKiBwaWNrIHByZXZpb3VzIGVsZW1lbnQgYW5kIHNldCBpdCBhY3RpdmUgKi9cbiAgICBwaWNrUHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5pdGVtcy5nZXQoMik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVJdGVtSW5kZXggPSB0aGlzLl9nZXRJbmRleE9mSXRlbSh0aGlzLmFjdGl2ZSk7XG4gICAgICAgIGxldCBpdGVtVG9BY3RpdmF0ZSA9IHRoaXMuaXRlbXMuZ2V0KGFjdGl2ZUl0ZW1JbmRleCAtIDEpO1xuXG4gICAgICAgIC8vIGNhc2Ugd2hlcmUgc2xpZGVzIGNhbiBtb3ZlIGluZmluaXRlbHkgaW4gb25lIGRpcmVjdGlvblxuICAgICAgICAvLyBoYW5kbGUgY2FzZSB3aGVyZSBvbi1sb2FkIGFjdGl2ZUl0ZW1JbmRleCA9IDAgYW5kIGFjdGl2ZUl0ZW1JbmRleCAtIDEgcmV0dXJucyB1bmRlZmluZWQgaXRlbSBmcm9tIGl0ZW0gYXJyYXkuXG4gICAgICAgIGlmICghaXRlbVRvQWN0aXZhdGUpIHtcbiAgICAgICAgICAgIGl0ZW1Ub0FjdGl2YXRlID0gdGhpcy5pdGVtcy5sYXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nb1RvSXRlbShpdGVtVG9BY3RpdmF0ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gaXRlbVRvQWN0aXZhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jZW50ZXJBY3RpdmUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fZ2V0U2l6ZSh0aGlzLml0ZW1zLmZpcnN0KTtcbiAgICAgICAgaWYgKGlzTmFOKHNpemUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlkZGxlSW5kZXggPSBNYXRoLmNlaWwodGhpcy5pdGVtcy5sZW5ndGggLyAyKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5jZWlsKHRoaXMuZWxlbWVudHNBdE9uY2UgLyAyKTtcbiAgICAgICAgY29uc3QgbWlzc2luZ0l0ZW1zID0gaW5kZXggKyBvZmZzZXQgLSBtaWRkbGVJbmRleDtcbiAgICAgICAgY29uc3QgYXJyYXkgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcblxuICAgICAgICBpZiAobWlzc2luZ0l0ZW1zID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW5nSXRlbXM7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhcnJheS5zaGlmdCgpO1xuICAgICAgICAgICAgICAgIGl0ZW0gJiYgYXJyYXkucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5hYnMobWlzc2luZ0l0ZW1zKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgIGl0ZW0gJiYgYXJyYXkudW5zaGlmdChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBDaGFuZ2luZyBvcmRlciBvZiBlbGVtZW50cyBpbiBRdWVyeUxpc3QgYW5kIE5hdGl2ZSBIVE1MICovXG4gICAgICAgIHRoaXMuaXRlbXMucmVzZXQoYXJyYXkpO1xuICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0uZWxlbWVudC5wYXJlbnROb2RlPy5hcHBlbmRDaGlsZChpdGVtLmVsZW1lbnQpKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogRm9yIHByb3BlciBhbmltYXRpb24gaXQncyBuZWVkZWQgdG8gdHJhbnNmb3JtIGVsZW1lbnRzLFxuICAgICAgICAgKiBieSBjaGFuZ2luZyB0cmFuc2l0aW9uIGJ5IGFtb3VudCBvZiBlbGVtZW50cyBwbGFjZWQgYXQgdG9wL2JvdHRvbVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnMHMnO1xuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCArIHRoaXMuX2dldFNpemUodGhpcy5pdGVtcy5maXJzdCkgKiBtaXNzaW5nSXRlbXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJhbnNpdGlvblRvSW5kZXgoaW5kZXg6IG51bWJlciwgc21vb3RoPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgdHJhbnNpdGlvblB4OiBudW1iZXIgPSB0aGlzLl9nZXRTaXplKHRoaXMuaXRlbXMuZmlyc3QpICogaW5kZXg7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBzbW9vdGggPyB0aGlzLl9nZXRUcmFuc2l0aW9uKCkgOiAnMHMnO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1J0bCB8fCAodGhpcy5jb25maWcudmVydGljYWwgJiYgdGhpcy5pc1J0bCkpIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb25QeCA9IC10cmFuc2l0aW9uUHg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodHJhbnNpdGlvblB4KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBHZXQgY2xvc2VzIGVsZW1lbnQsIGJhc2VkIG9uIGN1cnJlbnQgdHJhbnNpdGlvbiAqL1xuICAgIHByaXZhdGUgX2dldENsb3Nlc3QoKTogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlIHtcbiAgICAgICAgLyoqIElmIHRyYW5zaXRpb24gaXMgcG9zaXRpdmUsIGl0IHNob3VsZCBnbyB0byBmaXJzdCBlbGVtZW50ICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5pbmZpbml0ZSAmJlxuICAgICAgICAgICAgKCghdGhpcy5jb25maWcudmVydGljYWwgJiZcbiAgICAgICAgICAgICAgICAoKCF0aGlzLmlzUnRsICYmIHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggPiAwKSB8fCAodGhpcy5pc1J0bCAmJiB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4IDwgMCkpKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLmNvbmZpZy52ZXJ0aWNhbCAmJiB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ID4gMCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlyc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5fZ2V0U2l6ZSh0aGlzLml0ZW1zLmZpcnN0KTtcblxuICAgICAgICAvKiogV2hlbiBzY3JvbGwgaXMgYWZ0ZXIgaGFsZiBvZiBlbGVtZW50LCB0aGVuIGV4dCBvbmUgc2hvdWxkIGJlIGFjdGl2ZSAqL1xuICAgICAgICBjb25zdCBoYWxmQXBwcm9hY2hlZDogYm9vbGVhbiA9IE1hdGguYWJzKHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggJSBzaXplKSA+IHNpemUgLyAyO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kZXggYmFzZWQgb24gdHJhbnNpdGlvbiBweCBkaXZpZGVkIGJ5IHNpemUgb2YgZWxlbWVudHMsXG4gICAgICAgICAqIGV2ZXJ5IGVsZW1lbnQgc2hvdWxkIGhhdmUgc2FtZSB3aWR0aCwgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBsb29wZWQgdGhyb3VnaCBhbGwgZWxlbWVudHMsXG4gICAgICAgICAqIHdoaWNoIGlzIG5vdCBnb29kIGZvciBwZXJmb3JtYW5jZVxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5jZWlsKE1hdGguYWJzKHRoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHggLyBzaXplKSk7XG5cbiAgICAgICAgLy8gV2hlbiBlbGVtZW50c0F0T25jZSA+IDEsIHN3aXBpbmcgc2hvdWxkIHN0b3AgYXQgbGFzdCBpbmRleCAtIGVsZW1lbnRzQXRPbmNlXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzQXRPbmNlID0gdGhpcy5lbGVtZW50c0F0T25jZTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5pbmZpbml0ZSAmJiBlbGVtZW50c0F0T25jZSA+IDEpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gdGhlcmUncmUgbGVzcyBpdGVtcyBpbiB0aGUgY2Fyb3VzZWwgdGhhbiB0aGUgYXJlYSBtaWdodCBkaXNwbGF5LCBpdCBzaG91bGQgc3RvcCB0byBmaXJzdFxuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoIDwgZWxlbWVudHNBdE9uY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGluZGV4ICsgZWxlbWVudHNBdE9uY2UgPj0gdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5nZXQodGhpcy5pdGVtcy5sZW5ndGggLSBlbGVtZW50c0F0T25jZSkgPz8gdGhpcy5pdGVtcy5maXJzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluZGV4ID0gaW5kZXggKyAoaGFsZkFwcHJvYWNoZWQgPyAwIDogLTEpO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcy5nZXQoaW5kZXgpO1xuXG4gICAgICAgIC8qKiBDaGVja2luZyBpZiB0cmFuc2l0aW9uIHdlbnQgb3V0IG9mIHNjb3BlIG9mIGFycmF5ICovXG4gICAgICAgIHJldHVybiBpdGVtIHx8IHRoaXMuaXRlbXMubGFzdDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEluZGV4T2ZJdGVtKGl0ZW0/OiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UpOiBudW1iZXIge1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy50b0FycmF5KCkuZmluZEluZGV4KChfaXRlbSkgPT4gX2l0ZW0gPT09IGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldHRpbmcgc2l6ZSBvZiBjYXJvdXNlbCwgd2lkdGggZm9yIGhvcml6b250YWwsIGhlaWdodCBmb3IgdmVydGljYWwgKi9cbiAgICBwcml2YXRlIF9nZXRTaXplKGl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0SGVpZ2h0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbS5nZXRXaWR0aCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUGFuKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkZWx0YSAtIHRoaXMuX2xhc3REaXN0YW5jZTtcblxuICAgICAgICB0aGlzLl9sYXN0RGlzdGFuY2UgPSBkZWx0YTtcblxuICAgICAgICB0aGlzLl90cmFuc2l0aW9uQ2Fyb3VzZWwodGhpcy5fY3VycmVudFRyYW5zaXRpb25QeCArIGRpc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVBhbkVuZChkZWx0YTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hhbmRsZVBhbihkZWx0YSk7XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdEl0ZW06IENhcm91c2VsSXRlbUludGVyZmFjZSA9IHRoaXMuX2dldENsb3Nlc3QoKTtcblxuICAgICAgICB0aGlzLmdvVG9JdGVtKGNsb3Nlc3RJdGVtLCB0cnVlKTtcblxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGNsb3Nlc3RJdGVtO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UkLmVtaXQoe1xuICAgICAgICAgICAgICAgIGl0ZW06IGNsb3Nlc3RJdGVtLFxuICAgICAgICAgICAgICAgIGFmdGVyOiBkZWx0YSA8IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlICE9PSBjbG9zZXN0SXRlbSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBjbG9zZXN0SXRlbTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlJC5lbWl0KHtcbiAgICAgICAgICAgICAgICBpdGVtOiBjbG9zZXN0SXRlbSxcbiAgICAgICAgICAgICAgICBhZnRlcjogZGVsdGEgPCAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5fbGFzdERpc3RhbmNlID0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEFuaW1hdGVzIHRoZSBjYXJvdXNlbCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHNsaWRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX3RyYW5zaXRpb25DYXJvdXNlbCh0cmFuc2l0aW9uUHg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50VHJhbnNpdGlvblB4ID0gdHJhbnNpdGlvblB4O1xuICAgICAgICBjb25zdCBheGlzID0gdGhpcy5jb25maWcudmVydGljYWwgPyAnWScgOiAnWCc7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlJHtheGlzfSgke3RoaXMuX2N1cnJlbnRUcmFuc2l0aW9uUHh9cHgpYDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBQYW0gU3RhcnQgaGFuZGxlciwgcmVtb3ZlcyB0cmFuc2l0aW9uIGR1cmF0aW9uLCAqL1xuICAgIHByaXZhdGUgX2hhbmRsZVBhblN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlQ2hhbmdlJC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBHZXN0dXJlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0dXBEcmFnU3RhcnQoKTtcbiAgICAgICAgdGhpcy5fc2V0dXBEcmFnKCk7XG4gICAgICAgIHRoaXMuX3NldHVwRHJhZ0VuZCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9FdmVudHMoXG4gICAgICAgIGV2ZW50czogc3RyaW5nW10sXG4gICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQsXG4gICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB2b2lkXG4gICAgKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKGV2ZW50cy5tYXAoKGUpID0+IGZyb21FdmVudDxNb3VzZUV2ZW50IHwgVG91Y2hFdmVudD4oZWxlbWVudCwgZSwgeyBwYXNzaXZlOiB0cnVlIH0pKSkuZm9yRWFjaChcbiAgICAgICAgICAgIChldnQ6IE9ic2VydmFibGU8TW91c2VFdmVudCB8IFRvdWNoRXZlbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgZXZ0LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldHVwRHJhZ1N0YXJ0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSBbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0J107XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9FdmVudHMoZXZlbnRzLCB0aGlzLl9lbGVtZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvTW91c2VNb3ZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2xhc3REcmFnUG9zaXRpb24gPSB0aGlzLl9pbml0aWFsRHJhZ1Bvc2l0aW9uID0gdGhpcy5fZ2V0RHJhZ0Nvb3JkaW5hdGUoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUGFuU3RhcnQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXR1cERyYWcoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFsnbW91c2Vtb3ZlJywgJ3RvdWNobW92ZSddO1xuXG4gICAgICAgIGlmICghdGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ291bGQgbm90IHNldHVwIGRyYWcgZXZlbnQgc3Vic2NyaXB0aW9uLiBFeHBlY3RlZCB0byBnZXQgZG9jdW1lbnQgcmVmLCBnb3QgJHt0aGlzLl9kb2N1bWVudH0gaW5zdGVhZGBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb0V2ZW50cyhldmVudHMsIHRoaXMuX2RvY3VtZW50LCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGUgPSB0aGlzLl9nZXREcmFnQ29vcmRpbmF0ZShldmVudCk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fbGlzdGVuVG9Nb3VzZU1vdmUgfHwgY29vcmRpbmF0ZSA9PT0gdGhpcy5fbGFzdERyYWdQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlUGFuKHRoaXMuX2dldERyYWdnZWREZWx0YShjb29yZGluYXRlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBEcmFnRW5kKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudHMgPSBbJ21vdXNldXAnLCAndG91Y2hlbmQnXTtcblxuICAgICAgICBpZiAoIXRoaXMuX2RvY3VtZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYENvdWxkIG5vdCBzZXR1cCBkcmFnIGV2ZW50IHN1YnNjcmlwdGlvbi4gRXhwZWN0ZWQgdG8gZ2V0IGRvY3VtZW50IHJlZiwgZ290ICR7dGhpcy5fZG9jdW1lbnR9IGluc3RlYWRgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9FdmVudHMoZXZlbnRzLCB0aGlzLl9kb2N1bWVudCwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2xpc3RlblRvTW91c2VNb3ZlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fZHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVQYW5FbmQodGhpcy5fZ2V0RHJhZ2dlZERlbHRhKHRoaXMuX2dldERyYWdDb29yZGluYXRlKGV2ZW50KSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGF0ZUNoYW5nZSQuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvTW91c2VNb3ZlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9kcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFRyYW5zaXRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnPy50cmFuc2l0aW9uID8/IERFRkFVTFRfVFJBTlNJVElPTl9EVVJBVElPTjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERyYWdnZWREZWx0YShvZmZzZXQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHRoaXMuX2xhc3REcmFnUG9zaXRpb24gPSBvZmZzZXQ7XG5cbiAgICAgICAgcmV0dXJuIG9mZnNldCAtIHRoaXMuX2luaXRpYWxEcmFnUG9zaXRpb247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXREcmFnQ29vcmRpbmF0ZShldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiBudW1iZXIge1xuICAgICAgICBsZXQgY29vcmRpbmF0ZXM6IFRvdWNoIHwgTW91c2VFdmVudDtcblxuICAgICAgICBpZiAodGhpcy5faXNUb3VjaEV2ZW50KGV2ZW50KSkge1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMgPSBldmVudC50b3VjaGVzWzBdIHx8IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29vcmRpbmF0ZXMgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy52ZXJ0aWNhbCA/IGNvb3JkaW5hdGVzLnBhZ2VZIDogY29vcmRpbmF0ZXMucGFnZVg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc1RvdWNoRXZlbnQoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogZXZlbnQgaXMgVG91Y2hFdmVudCB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuVG91Y2hFdmVudCAmJiBldmVudCBpbnN0YW5jZW9mIFRvdWNoRXZlbnQ7XG4gICAgfVxufVxuIl19