@sumaris-net/ngx-components 0.11.3-beta1 → 0.11.3

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.
@@ -70,6 +70,7 @@ export class MatAutocompleteField {
70
70
  this.readonly = false;
71
71
  this.clearable = false;
72
72
  this.debounceTime = null;
73
+ this.highlightAccent = false;
73
74
  this.i18nPrefix = 'REFERENTIAL.';
74
75
  this.noResultMessage = 'COMMON.NO_RESULT';
75
76
  this.matAutocompletePosition = 'auto';
@@ -549,7 +550,7 @@ MatAutocompleteField.decorators = [
549
550
  { type: Component, args: [{
550
551
  // eslint-disable-next-line @angular-eslint/component-selector
551
552
  selector: 'mat-autocomplete-field',
552
- template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <!-- readonly -->\n <ng-container *ngIf=\"readonly; else writable\">\n <input matInput hidden type=\"text\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n readonly>\n <ion-label>{{ displayWith(value) }}&nbsp;</ion-label>\n </ng-container>\n\n <ng-template #writable>\n\n <!-- Basic select -->\n <mat-select #matSelect\n *ngIf=\"!searchable; else searchableTemplate\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n [compareWith]=\"compareWith\"\n [multiple]=\"multiple\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- header -->\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as isLast\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <!-- options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text>{{item | propertyGet: path }}</ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <a class=\"ion-padding mat-option \"\n *ngIf=\"_moreItemsCount\"\n (click)=\"_fetchMore$.emit($event)\" >\n <ion-label color=\"primary\" style=\"width: 100%;\">\n <span translate>COMMON.BTN_SHOW_MORE</span>\n <mat-icon class=\"ion-color-primary\">expand_more</mat-icon>\n </ion-label>\n </a>\n </ng-container>\n </mat-select>\n </ng-template>\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #searchableTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autoComplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"appAutofocus\"\n [tabindex]=\"_tabindex\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (click)=\"onClick.emit($event)\"\n (blur)=\"onBlur.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (keyup.arrowdown)=\"!autoComplete.showPanel && onDropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autoComplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [class.cdk-visually-hidden]=\"!searchable\"\n [panelWidth]=\"panelWidth\">\n\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as last\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n <ion-text color=\"light\" *ngIf=\"last && itemCount; let count \" class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n <ng-container *ngIf=\"$filteredItems | async; else loadingTemplate; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\" >\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: formControl.value\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(matInputText.value | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n </ng-template>\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"searchable\"\n (click)=\"onDropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\"\n *ngIf=\"enabled && mobile && !searchable && !multiple\"\n [title]=\"'COMMON.BTN_SEARCH'|translate\"\n (click)=\"toggleSearch($event)\">\n <mat-icon>search</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content matSuffix select=\"[matSuffix]\"></ng-content>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n",
553
+ template: "<ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\">\n <mat-form-field [floatLabel]=\"floatLabel\"\n [class.mat-form-field-disabled]=\"disabled\"\n [title]=\"displayValue\">\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <!-- readonly -->\n <ng-container *ngIf=\"readonly; else writable\">\n <input matInput hidden type=\"text\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n readonly>\n <ion-label>{{ displayWith(value) }}&nbsp;</ion-label>\n </ng-container>\n\n <ng-template #writable>\n\n <!-- Basic select -->\n <mat-select #matSelect\n *ngIf=\"!searchable; else searchableTemplate\"\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\"\n [tabindex]=\"_tabindex\"\n [panelClass]=\"classList\"\n [style.width]=\"panelWidth\"\n (focus)=\"filterMatSelectFocusEvent($event)\"\n (blur)=\"filterMatSelectBlurEvent($event)\"\n [compareWith]=\"compareWith\"\n [multiple]=\"multiple\">\n <mat-select-trigger>{{ displayWith(value) }}</mat-select-trigger>\n\n <!-- header -->\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as isLast\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n </ion-col>\n </ion-row>\n\n <!-- None option -->\n <mat-option *ngIf=\"!required\" class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <ng-container *ngIf=\"$filteredItems | async; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <!-- options -->\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\">\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text>{{item | propertyGet: path }}</ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <a class=\"ion-padding mat-option \"\n *ngIf=\"_moreItemsCount\"\n (click)=\"_fetchMore$.emit($event)\" >\n <ion-label color=\"primary\" style=\"width: 100%;\">\n <span translate>COMMON.BTN_SHOW_MORE</span>\n <mat-icon class=\"ion-color-primary\">expand_more</mat-icon>\n </ion-label>\n </a>\n </ng-container>\n </mat-select>\n </ng-template>\n\n <!--\n NOTE :\n - \"selectInputContent($event) || onFocus.emit($event)\" : call onFocus only when to the input is empty (nothing to select)\n -->\n <ng-template #searchableTemplate>\n <input matInput #matInputText type=\"text\"\n [matAutocomplete]=\"autoComplete\"\n [matAutocompletePosition]=\"matAutocompletePosition\"\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [appAutofocus]=\"appAutofocus\"\n [tabindex]=\"_tabindex\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n (click)=\"onClick.emit($event)\"\n (blur)=\"onBlur.emit($event)\"\n (focus)=\"filterInputTextFocusEvent($event)\"\n (keyup.arrowdown)=\"!autoComplete.showPanel && onDropButtonClick.emit($event)\">\n\n <!-- autocomplete -->\n <mat-autocomplete #autoComplete=\"matAutocomplete\"\n autoActiveFirstOption\n [displayWith]=\"displayWith\"\n [class]=\"classList\"\n [class.cdk-visually-hidden]=\"!searchable\"\n [panelWidth]=\"panelWidth\">\n\n <ion-row class=\"mat-autocomplete-header ion-no-padding\">\n <ion-col *ngFor=\"let attr of displayAttributes; index as i; last as last\" [size]=\"displayColumnSizes[i]\" >\n <ion-label [innerHTML]=\"displayColumnNames[i] | translate\"></ion-label>\n <ion-text color=\"light\" *ngIf=\"last && itemCount; let count \" class=\"ion-float-end ion-padding-end\"><i>{{'COMMON.RESULT_COUNT'|translate: {count: count} }}</i></ion-text>\n </ion-col>\n </ion-row>\n\n <ng-container *ngIf=\"$filteredItems | async; else loadingTemplate; let items\">\n <!-- No item option -->\n <mat-option *ngIf=\"items | isEmptyArray\" class=\"ion-padding text-italic\" disabled>\n <ion-label>{{noResultMessage | translate}}</ion-label>\n </mat-option>\n\n <mat-option *ngFor=\"let item of items\" [value]=\"item\" class=\"ion-no-padding\" >\n <ion-row [classList]=\"item.classList\">\n <ion-col *ngFor=\"let path of displayAttributes; index as i;\"\n [size]=\"displayColumnSizes[i]\">\n <ion-text [innerHTML]=\"item | propertyGet: path | highlight: { search: formControl.value, withAccent: highlightAccent }\"></ion-text>\n </ion-col>\n </ion-row>\n </mat-option>\n\n <!-- More item -->\n <mat-option *ngIf=\"_moreItemsCount\" (ngInit)=\"_initInfiniteScroll()\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-container>\n\n <!-- Loading spinner -->\n <ng-template #loadingTemplate>\n <mat-option *ngIf=\"(matInputText.value | strLength) >= suggestLengthThreshold; else waitMoreCharacterTemplate\"\n class=\"ion-padding\" disabled>\n <ion-skeleton-text [animated]=\"true\" style=\"width: 100%\"></ion-skeleton-text>\n </mat-option>\n </ng-template>\n\n <!-- Need more characters -->\n <ng-template #waitMoreCharacterTemplate>\n <mat-option class=\"ion-padding text-italic\" disabled>\n <ion-label>\n {{'INFO.PLEASE_TYPE_MORE_CHARACTERS'|translate:{minLength: suggestLengthThreshold} }}\n </ion-label>\n </mat-option>\n </ng-template>\n </mat-autocomplete>\n\n </ng-template>\n\n\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"searchable\"\n (click)=\"onDropButtonClick.emit($event)\"\n [hidden]=\"disabled\">\n <mat-icon class=\"large select-arrow\">arrow_drop_down</mat-icon>\n </button>\n <button matSuffix type=\"button\" mat-icon-button tabindex=\"-1\"\n *ngIf=\"enabled && mobile && !searchable && !multiple\"\n [title]=\"'COMMON.BTN_SEARCH'|translate\"\n (click)=\"toggleSearch($event)\">\n <mat-icon>search</mat-icon>\n </button>\n <button matSuffix mat-icon-button tabindex=\"-1\"\n type=\"button\"\n *ngIf=\"clearable\"\n (click)=\"clearValue($event)\"\n [hidden]=\"disabled || !formControl.value\">\n <mat-icon>close</mat-icon>\n </button>\n\n <ng-content matSuffix select=\"[matSuffix]\"></ng-content>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <mat-error *ngIf=\"formControl.hasError('entity')\" translate>ERROR.FIELD_INVALID</mat-error>\n <ng-content select=\"[matError]\"></ng-content>\n\n </mat-form-field>\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-self-center\">\n <ng-content select=\"[matAfter]\"></ng-content>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n",
553
554
  providers: [DEFAULT_VALUE_ACCESSOR],
554
555
  changeDetection: ChangeDetectionStrategy.OnPush,
555
556
  styles: [":host{display:inline-block;position:relative}:host.ion-text-wrap ion-label{white-space:normal!important}button[hidden]{display:none}mat-icon.select-arrow{color:rgba(0,0,0,.47);font-size:150%}.fact-scroll-viewport{height:100%;width:100%}.fact-item{height:54px;display:flex}.fact-item .fact-date{min-width:100px;text-align:center;font-size:24pt}.fact-item .fact-date,.fact-item .fact-text{height:100%;align-items:center;justify-content:center;display:flex}.fact-item .fact-text{border-radius:10px}cdk-virtual-scroll-viewport{border:1px solid #000}cdk-virtual-scroll-viewport li{list-style:none}"]
@@ -576,6 +577,7 @@ MatAutocompleteField.propDecorators = {
576
577
  displayAttributes: [{ type: Input }],
577
578
  displayColumnSizes: [{ type: Input }],
578
579
  displayColumnNames: [{ type: Input }],
580
+ highlightAccent: [{ type: Input }],
579
581
  showAllOnFocus: [{ type: Input }],
580
582
  showPanelOnFocus: [{ type: Input }],
581
583
  appAutofocus: [{ type: Input }],
@@ -603,4 +605,4 @@ MatAutocompleteField.propDecorators = {
603
605
  matAutoComplete: [{ type: ViewChild, args: ['autoComplete',] }]
604
606
  };
605
607
  export { ɵ0 };
606
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1SSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEwsT0FBTyxFQUFFLFVBQVUsRUFBZ0Isa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBd0Js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LEtBQUs7d0JBQ0wsS0FBSzswQkFDTCxLQUFLOzhCQUNMLEtBQUs7eUJBQ0wsS0FBSzswQkFDTCxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLOzBCQUNMLEtBQUs7Z0NBQ0wsS0FBSztpQ0FDTCxLQUFLO2lDQUNMLEtBQUs7NkJBQ0wsS0FBSzsrQkFDTCxLQUFLOzJCQUNMLEtBQUs7cUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzhCQUNMLEtBQUs7d0JBQ0wsS0FBSyxTQUFDLE9BQU87eUJBQ2IsS0FBSztzQ0FDTCxLQUFLO3VCQUNMLEtBQUs7dUJBRUwsS0FBSztpQ0FDTCxLQUFLO3FDQUNMLEtBQUs7aUNBQ0wsS0FBSztpQ0FFTCxXQUFXLFNBQUMsWUFBWTtxQkFHeEIsS0FBSzt1QkFZTCxLQUFLO29CQVNMLEtBQUs7c0JBMkJMLE1BQU0sU0FBQyxPQUFPO3FCQUNkLE1BQU0sU0FBQyxNQUFNO3NCQUNiLE1BQU0sU0FBQyxPQUFPO2dDQUVkLE1BQU0sU0FBQyxpQkFBaUI7d0JBRXhCLFNBQVMsU0FBQyxXQUFXOzJCQUNyQixTQUFTLFNBQUMsY0FBYzs4QkFDeEIsU0FBUyxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBQcm92aWRlcixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBpc09ic2VydmFibGUsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YWtlV2hpbGUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZldGNoTW9yZUZuLCBMb2FkUmVzdWx0LCBTdWdnZXN0Rm4sIFN1Z2dlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgaXNOb3ROaWxTdHJpbmcsIGpvaW5Qcm9wZXJ0aWVzUGF0aCwgc3VnZ2VzdEZyb21BcnJheSwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBmb2N1c0lucHV0LCBJbnB1dEVsZW1lbnQsIHNlbGVjdElucHV0Q29udGVudCB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBDb21wYXJlV2l0aEZuLCBEaXNwbGF5Rm4gfSBmcm9tICcuLi8uLi9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IGZyb21TY3JvbGxFbmRFdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cyc7XG5cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPFQgPSBhbnksIEYgPSBhbnk+IHtcbiAgYXR0cmlidXRlczogc3RyaW5nW107XG4gIHN1Z2dlc3RGbj86ICh2YWx1ZTogYW55LCBvcHRpb25zPzogYW55KSA9PiBQcm9taXNlPFRbXSB8IExvYWRSZXN1bHQ8VD4+O1xuICBmaWx0ZXI/OiBQYXJ0aWFsPEY+O1xuICBpdGVtcz86IE9ic2VydmFibGU8VFtdPiB8IFRbXTtcbiAgY29sdW1uU2l6ZXM/OiAobnVtYmVyfCdhdXRvJ3x1bmRlZmluZWQpW107XG4gIGNvbHVtbk5hbWVzPzogKHN0cmluZ3x1bmRlZmluZWQpW107XG4gIGRpc3BsYXlXaXRoPzogRGlzcGxheUZuO1xuICBjb21wYXJlV2l0aD86IENvbXBhcmVXaXRoRm47XG4gIHNob3dBbGxPbkZvY3VzPzogYm9vbGVhbjtcbiAgc2hvd1BhbmVsT25Gb2N1cz86IGJvb2xlYW47XG4gIGNsYXNzPzogc3RyaW5nO1xuICBtb2JpbGU/OiBib29sZWFuO1xuICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gIHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnM8VCA9IGFueSwgRiA9IGFueT4gZXh0ZW5kcyBQYXJ0aWFsPE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnPFQsIEY+PiB7XG4gIHNlcnZpY2U/OiBTdWdnZXN0U2VydmljZTxULCBGPjtcbn1cblxuZXhwb3J0IGNsYXNzIE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlciB7XG4gIGZpZWxkczoge1xuICAgIFtrZXk6IHN0cmluZ106IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnO1xuICB9ID0ge307XG5cbiAgZ2V0VXNlckF0dHJpYnV0ZXM6IChmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSkgPT4gc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zPzoge1xuICAgIGdldFVzZXJBdHRyaWJ1dGVzOiAoZmllbGROYW1lOiBzdHJpbmcsIGRlZmF1bHRBdHRyaWJ1dGVzPzogc3RyaW5nW10pID0+IHN0cmluZ1tdO1xuICB9KSB7XG4gICAgLy8gU3RvcmUgdGhlIGZ1bmN0aW9uIGZyb20gb3B0aW9ucyAoZS5nLiBnZXQgZnJvbSB1c2VyIHNldHRpbmdzKVxuICAgIC8vIG9yIGNyZWF0ZSBhIGRlZmF1bHQgZnVuY3Rpb25cbiAgICB0aGlzLmdldFVzZXJBdHRyaWJ1dGVzID0gb3B0aW9ucz8uZ2V0VXNlckF0dHJpYnV0ZXMgfHxcbiAgICAgICgoZmllbGROYW1lLCBkZWZhdWx0QXR0cmlidXRlcykgPT4gZGVmYXVsdEF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ10pO1xuICB9XG5cbiAgYWRkPFQgPSBhbnksIEYgPSBhbnk+KGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25zPzogTWF0QXV0b2NvbXBsZXRlRmllbGRBZGRPcHRpb25zPFQsIEY+KTogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8VCwgRj4ge1xuICAgIGlmICghZmllbGROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBhZGQgY29uZmlnLCB3aXRoIG5hbWU6ICcgKyAoZmllbGROYW1lIHx8ICd1bmRlZmluZWQnKSk7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IDxNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnM+e307XG4gICAgY29uc3Qgc3VnZ2VzdEZuOiBTdWdnZXN0Rm48VCwgRj4gPSBvcHRpb25zLnN1Z2dlc3RGblxuICAgICAgfHwgKG9wdGlvbnMuc2VydmljZSAmJiAoKHYsIGYpID0+IG9wdGlvbnMuc2VydmljZS5zdWdnZXN0KHYsIGYpKSlcbiAgICAgIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gKHRoaXMuZ2V0VXNlckF0dHJpYnV0ZXMoZmllbGROYW1lLCBvcHRpb25zLmF0dHJpYnV0ZXMpIHx8IFsnbGFiZWwnLCAnbmFtZSddKTtcbiAgICAvLyBLZWVwIG9yaWdpbmFsIHRoZSBmdW5jdGlvbiBmcm9tIG9wdGlvbnMsIHdoZW4gZXhpc3RzXG4gICAgY29uc3QgYXR0cmlidXRlc09yRm4gPSBhdHRyaWJ1dGVzLm1hcCgoYSwgaW5kZXgpID0+IHR5cGVvZiBhID09PSAnZnVuY3Rpb24nICYmIG9wdGlvbnMuYXR0cmlidXRlc1tpbmRleF0gfHwgYSk7XG4gICAgY29uc3QgZmlsdGVyOiBQYXJ0aWFsPEY+ID0ge1xuICAgICAgc2VhcmNoQXR0cmlidXRlOiBhdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSA/IGF0dHJpYnV0ZXNbMF0gOiB1bmRlZmluZWQsXG4gICAgICBzZWFyY2hBdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLmxlbmd0aCA+IDEgPyBhdHRyaWJ1dGVzIDogdW5kZWZpbmVkLFxuICAgICAgLi4ub3B0aW9ucy5maWx0ZXJcbiAgICB9O1xuICAgIGNvbnN0IGRpc3BsYXlXaXRoID0gb3B0aW9ucy5kaXNwbGF5V2l0aCB8fCAoKG9iaikgPT4gb2JqICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIGF0dHJpYnV0ZXMpKTtcbiAgICBjb25zdCBjb21wYXJlV2l0aCA9IG9wdGlvbnMuY29tcGFyZVdpdGggfHwgKChvMTogYW55LCBvMjogYW55KSA9PiBvMSAmJiBvMiAmJiBvMS5pZCA9PT0gbzIuaWQpO1xuXG4gICAgY29uc3QgY29uZmlnOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzT3JGbixcbiAgICAgIHN1Z2dlc3RGbixcbiAgICAgIGZpbHRlcixcbiAgICAgIGRpc3BsYXlXaXRoLFxuICAgICAgY29tcGFyZVdpdGhcbiAgICB9O1xuXG4gICAgdGhpcy5maWVsZHNbZmllbGROYW1lXSA9IGNvbmZpZztcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgZ2V0PFQgPSBhbnk+KGZpZWxkTmFtZTogc3RyaW5nKTogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8VD4ge1xuICAgIGlmICghZmllbGROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBhZGQgY29uZmlnLCB3aXRoIG5hbWU6ICcgKyAoZmllbGROYW1lIHx8ICd1bmRlZmluZWQnKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpZWxkc1tmaWVsZE5hbWVdIHx8IHRoaXMuYWRkKGZpZWxkTmFtZSkgYXMgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8VD47XG4gIH1cbn1cblxuY29uc3QgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRBdXRvY29tcGxldGVGaWVsZCksXG4gIG11bHRpOiB0cnVlXG59O1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdtYXQtYXV0b2NvbXBsZXRlLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5odG1sJyxcbiAgcHJvdmlkZXJzOiBbREVGQVVMVF9WQUxVRV9BQ0NFU1NPUl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1hdEF1dG9jb21wbGV0ZUZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBJbnB1dEVsZW1lbnQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IgIHtcblxuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vbkZldGNoTW9yZUNhbGxiYWNrOiBGZXRjaE1vcmVGbjxMb2FkUmVzdWx0PGFueT4+O1xuICBwcml2YXRlIF9pbXBsaWNpdFZhbHVlOiBhbnk7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfaXRlbXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfb3BlbmVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2ZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgX3JlbG9hZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgX3RhYmluZGV4OiBudW1iZXI7XG4gIG1hdFNlbGVjdEl0ZW1zJDogT2JzZXJ2YWJsZTxhbnlbXT47XG4gICRpbnB1dEl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgJGZpbHRlcmVkSXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPih1bmRlZmluZWQpO1xuICBzZWFyY2hhYmxlOiBib29sZWFuO1xuICBkaXNwbGF5VmFsdWUgPSAnJztcblxuICBfbW9yZUl0ZW1zQ291bnQ6IG51bWJlcjtcbiAgX2ZldGNoTW9yZSQgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG5cbiAgZ2V0IGl0ZW1Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtQ291bnQ7XG4gIH1cblxuICBnZXQgY2FuRmV0Y2hNb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrICYmIHRoaXMuX21vcmVJdGVtc0NvdW50ID4gMDtcbiAgfVxuXG4gIEBJbnB1dCgpIGNvbXBhcmVXaXRoOiAobzE6IGFueSwgbzI6IGFueSkgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgbG9nUHJlZml4ID0gJ1ttYXQtYXV0b2NvbXBsZXRlXSAnO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGU7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PjtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgZGVib3VuY2VUaW1lOiBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5V2l0aDogRGlzcGxheUZuIHwgbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheUF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sdW1uU2l6ZXM6IChudW1iZXJ8J2F1dG8nfHVuZGVmaW5lZClbXTtcbiAgQElucHV0KCkgZGlzcGxheUNvbHVtbk5hbWVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgc2hvd0FsbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dQYW5lbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFwcEF1dG9mb2N1czogYm9vbGVhbjtcbiAgQElucHV0KCkgY29uZmlnOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZztcbiAgQElucHV0KCkgaTE4blByZWZpeCA9ICdSRUZFUkVOVElBTC4nO1xuICBASW5wdXQoKSBub1Jlc3VsdE1lc3NhZ2UgPSAnQ09NTU9OLk5PX1JFU1VMVCc7XG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgcGFuZWxXaWR0aDogc3RyaW5nO1xuICBASW5wdXQoKSBtYXRBdXRvY29tcGxldGVQb3NpdGlvbjogJ2F1dG8nIHwgJ2Fib3ZlJyB8ICdiZWxvdycgPSAnYXV0byc7XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaXRlbVNpemUgPSAnNDhweCc7XG4gIEBJbnB1dCgpIGZldGNoTW9yZVRocmVzaG9sZDogc3RyaW5nID0gJzE1JSc7XG4gIEBJbnB1dCgpIHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dMb2FkaW5nU3Bpbm5lciA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdALmRpc2FibGVkJylcbiAgYW5pbWF0aW9uc0Rpc2FibGVkID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2ZpbHRlciQudmFsdWUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBTZXR0aW5nIGZpbHRlcjpcIiwgdmFsdWUpO1xuICAgICAgdGhpcy5fZmlsdGVyJC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlciQudmFsdWU7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSkge1xuICAgIC8vIFJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gaXRlbXMsIChpZiBleGl0cylcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgSXRlbXMgcmVjZWl2ZWQgdHdpY2UgIScpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbik7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChpc09ic2VydmFibGU8YW55W10+KHZhbHVlKSkge1xuICAgICAgdGhpcy5faXRlbXNTdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICB2YWx1ZS5zdWJzY3JpYmUodiA9PiB7XG4gICAgICAgICAgLy9jb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCBpdGVtczogXCIsIHYpO1xuICAgICAgICAgIHRoaXMuJGlucHV0SXRlbXMubmV4dCh2KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLiRpbnB1dEl0ZW1zLmdldFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy4kaW5wdXRJdGVtcy5uZXh0KHZhbHVlIGFzIGFueVtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaXRlbXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuJGlucHV0SXRlbXM7XG4gIH1cblxuICBAT3V0cHV0KCdjbGljaycpIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoJ2JsdXInKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoJ2ZvY3VzJykgb25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBAT3V0cHV0KCdkcm9wQnV0dG9uQ2xpY2snKSBvbkRyb3BCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VUlFdmVudD4odHJ1ZSk7XG5cbiAgQFZpZXdDaGlsZCgnbWF0U2VsZWN0JykgbWF0U2VsZWN0OiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoJ21hdElucHV0VGV4dCcpIG1hdElucHV0VGV4dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYXV0b0NvbXBsZXRlJykgbWF0QXV0b0NvbXBsZXRlOiBNYXRBdXRvY29tcGxldGU7XG5cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiAhdGhpcy5yZWFkb25seSAmJiB0aGlzLmZvcm1Db250cm9sLmVuYWJsZWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbCB8fCB0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiB0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSBcXCdmb3JtQ29udHJvbFxcJyBvciBcXCdmb3JtQ29udHJvbE5hbWVcXCcgaW4gPG1hdC1hdXRvY29tcGxldGUtZmllbGQ+LicpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbiBmcm9tIGNvbmZpZyBvYmplY3RcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdEZuID0gdGhpcy5zdWdnZXN0Rm4gfHwgdGhpcy5jb25maWcuc3VnZ2VzdEZuO1xuICAgICAgaWYgKCF0aGlzLnN1Z2dlc3RGbiAmJiB0aGlzLmNvbmZpZy5pdGVtcykge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5jb25maWcuaXRlbXM7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyIHx8IHRoaXMuY29uZmlnLmZpbHRlcjtcbiAgICAgIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzIHx8IHRoaXMuY29uZmlnLmF0dHJpYnV0ZXM7XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9IHRoaXMuZGlzcGxheUNvbHVtblNpemVzIHx8IHRoaXMuY29uZmlnLmNvbHVtblNpemVzO1xuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyB8fCB0aGlzLmNvbmZpZy5jb2x1bW5OYW1lcztcbiAgICAgIHRoaXMuZGlzcGxheVdpdGggPSB0aGlzLmRpc3BsYXlXaXRoIHx8IHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoO1xuICAgICAgdGhpcy5tb2JpbGUgPSB0b0Jvb2xlYW4odGhpcy5tb2JpbGUsIHRoaXMuY29uZmlnLm1vYmlsZSk7XG4gICAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPSB0b051bWJlcih0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQsIHRoaXMuY29uZmlnLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfHwgMCk7XG4gICAgICB0aGlzLnNob3dBbGxPbkZvY3VzID0gdG9Cb29sZWFuKHRoaXMuc2hvd0FsbE9uRm9jdXMsIHRvQm9vbGVhbih0aGlzLmNvbmZpZy5zaG93QWxsT25Gb2N1cywgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkID09PSAwKSk7XG4gICAgICB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPSB0b0Jvb2xlYW4odGhpcy5zaG93UGFuZWxPbkZvY3VzLCB0b0Jvb2xlYW4odGhpcy5jb25maWcuc2hvd1BhbmVsT25Gb2N1cywgdHJ1ZSkpO1xuICAgICAgdGhpcy5jbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdCB8fCB0aGlzLmNvbmZpZy5jbGFzcztcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lID0gdG9OdW1iZXIodGhpcy5kZWJvdW5jZVRpbWUsIHRoaXMuY29uZmlnLmRlYm91bmNlVGltZSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcyB8fCB0aGlzLmZpbHRlcj8uYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCB8fCAoKG9iaikgPT4gb2JqICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMpKTtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9IHRoaXMuZGlzcGxheUNvbHVtblNpemVzXG4gICAgICAvLyBpZiBvbmx5IGNvbHVtbjogYXV0byBzaXplXG4gICAgICB8fCAodGhpcy5kaXNwbGF5QXR0cmlidXRlcy5sZW5ndGggPT09IDEgJiYgW3VuZGVmaW5lZF0pXG4gICAgICB8fCB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcChhdHRyID0+XG4gICAgICAgIC8vIElmIGxhYmVsLCBzZXQgY29sIHNpemUgPSAyXG4gICAgICAgIChhdHRyICYmIGF0dHIuZW5kc1dpdGgoJ2xhYmVsJykpID8gMiA6XG4gICAgICAgICAgLy8gSWYgcmFua09yZGVyID0+IGNvbCBzaXplID0gMVxuICAgICAgICAgICgoYXR0ciAmJiBhdHRyLmVuZHNXaXRoKCdyYW5rT3JkZXInKSkgPyAxXG4gICAgICAgICAgICAvLyBFbHNlID0+IGF1dG8gc2l6ZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQpKTtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMubWFwKChhdHRyLCBpbmRleCkgPT4gdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgJiYgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXNbaW5kZXhdIHx8XG4gICAgICAgICh0aGlzLmkxOG5QcmVmaXggKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGF0dHIpLnRvVXBwZXJDYXNlKCkpKTtcbiAgICB0aGlzLm1vYmlsZSA9IHRvQm9vbGVhbih0aGlzLm1vYmlsZSwgZmFsc2UpO1xuICAgIHRoaXMuc2VhcmNoYWJsZSA9ICF0aGlzLm1vYmlsZSAmJiAhdGhpcy5tdWx0aXBsZTtcbiAgICAvLyBEZWZhdWx0IGNvbXBhcmF0b3IgKG9ubHkgbmVlZCB3aGVuIHVzaW5nIG1hdC1zZWxlY3QpXG4gICAgaWYgKCF0aGlzLnNlYXJjaGFibGUgJiYgIXRoaXMuY29tcGFyZVdpdGgpIHRoaXMuY29tcGFyZVdpdGggPSAobzE6IGFueSwgbzI6IGFueSkgPT4gbzEgJiYgbzIgJiYgbzEuaWQgPT09IG8yLmlkO1xuICAgIHRoaXMucGFuZWxXaWR0aCA9IHRoaXMucGFuZWxXaWR0aCB8fCAodGhpcy5jbGFzc0xpc3RcbiAgICAgICYmICh0aGlzLmNsYXNzTGlzdCA9PT0gJ21pbi13aWR0aC1tZWRpdW0nICYmICczMDBweCcpXG4gICAgICB8fCAodGhpcy5jbGFzc0xpc3QgPT09ICdtaW4td2lkdGgtbGFyZ2UnICYmICc0MDBweCcpXG4gICAgICB8fCAodGhpcy5jbGFzc0xpc3QgPT09ICdtaW4td2lkdGgteGxhcmdlJyAmJiAnNDUwcHgnKVxuICAgICAgfHwgKHRoaXMuY2xhc3NMaXN0ID09PSAnbWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1mdWxsLXNpemUnICYmICcxMDB2dycpKTtcbiAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRvTnVtYmVyKHRoaXMuZGVib3VuY2VUaW1lLCAyNTApO1xuICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA9IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCB8fCAwO1xuXG4gICAgLy8gTm8gc3VnZ2VzdEZuOiBmaWx0ZXIgb24gdGhlIGdpdmVuIGl0ZW1zXG4gICAgaWYgKCF0aGlzLnN1Z2dlc3RGbikge1xuICAgICAgY29uc3Qgc3VnZ2VzdEZyb21BcnJheUZuOiBTdWdnZXN0Rm48YW55LCBhbnk+ID0gYXN5bmMgKHZhbHVlLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FsbGluZyBzdWdnZXN0RnJvbUFycmF5IHdpdGggdmFsdWU9XCIsIHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gc3VnZ2VzdEZyb21BcnJheSh0aGlzLiRpbnB1dEl0ZW1zLnZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMsXG4gICAgICAgICAgLi4uZmlsdGVyXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIC8vIFdhaXQgKG9uY2UpIHRoYXQgaXRlbXMgYXJlIGxvYWRlZCwgdGhlbiBjYWxsIHN1Z2dlc3QgZnJvbSBhcnJheSBmblxuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoaXNOaWwodGhpcy4kaW5wdXRJdGVtcy52YWx1ZSkpIHtcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFdhaXRpbmcgaXRlbXMgdG8gYmUgc2V0Li4uXCIpO1xuXG4gICAgICAgICAgYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuJGlucHV0SXRlbXMpO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCBpdGVtczpcIiwgdGhpcy5pbnB1dEl0ZW1zJC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBzdWdnZXN0RnJvbUFycmF5Rm47XG4gICAgICAgIHJldHVybiB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTsgLy8gTG9vcFxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXRoaXMuc2VhcmNoYWJsZSkge1xuICAgICAgLy8gTWFudWFsbHkgZmlsbCBpbnB1dCBpdGVtcywgZnJvbSB0aGUgZ2l2ZW4gc3VnZ2VzdCBmdW5jdGlvblxuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5fZmlsdGVyJC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnksIGFueT4odGhpcy5maWx0ZXIpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgyNTApLFxuICAgICAgICAgIHRha2VXaGlsZSgoXykgPT4gIXRoaXMuc2VhcmNoYWJsZSksIC8vIENsb3NlIHN1YnNjcmlwdGlvbiwgd2hlbiBlbmFibGluZyBzZWFyY2ggKG5vIG1vcmUgbWF0LXNlbGVjdClcbiAgICAgICAgICBzd2l0Y2hNYXAoKGZpbHRlcikgPT4gdGhpcy5zdWdnZXN0KCcqJywgZmlsdGVyKSApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShpdGVtcyA9PiB0aGlzLiRpbnB1dEl0ZW1zLm5leHQoaXRlbXMpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zQ2hhbmdlcyA9IG1lcmdlKFxuXG4gICAgICAvLyBSZWxvYWQgZXZlbnQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSwgdG8gZm9yY2UgcmVsb2FkIGV2ZW4gaWYgc2FtZSB2YWx1ZSlcbiAgICAgIHRoaXMuX3JlbG9hZCQsXG5cbiAgICAgIC8vIFNlYXJjaCB0ZXh0IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIGJlY2F1c2Ugb2YgdGhlIGRlYm91bmNlVGltZSgpIHBpcGUpXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdGhpcy5zZWFyY2hhYmxlICYmIGlzTm90TmlsU3RyaW5nKHZhbHVlKSksXG4gICAgICAgICAgLy8gTWFyayBhcyBsb2FkaW5nICh0byBzaG93IGxvYWRpbmcgc3Bpbm5lcikgLSBlYXJsaWVyIGFzIHBvc3NpYmxlLCBzbyBiZWZvcmUgdGhlIGRlYm91bmNlIHRpbWVcbiAgICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyKSB7XG4gICAgICAgICAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIEZpbHRlciBpZiBub3QgZW5vdWdoIGNoYXJhY3RlclxuICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPj0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkKSxcbiAgICAgICAgICAvLyBXYWl0IGEgZGVib3VuY2UgdGltZVxuICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSksXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL3RhcCgodmFsdWUpID0+IGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIHNlYXJjaCB0ZXh0IGNoYW5nZXM6JywgdmFsdWUpKSxcbiAgICAgICAgKSxcblxuICAgICAgLy8gT2JqZWN0IHNldDogdXNlIGl0IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIHBpcGUgbmVlZClcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnksIGFueT4odGhpcy5mb3JtQ29udHJvbC52YWx1ZSksXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHRoaXMuc2VhcmNoYWJsZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykpLFxuICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBvYmplY3QgY2hhbmdlczonLCB2YWx1ZSlcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBkaXNwbGF5IHZhbHVlIChpZiBuZWVkKVxuICAgICAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5kaXNwbGF5V2l0aCh2YWx1ZSkgfHwgJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWUgIT09IGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZTtcblxuICAgICAgICAgICAgICAvLyBBcHBseSB0byB0aGUgaW5wdXRbdHlwZT10ZXh0XSBmaWVsZFxuICAgICAgICAgICAgICBpZiAodGhpcy5tYXRJbnB1dFRleHQgJiYgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0SW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICksXG5cbiAgICAgIC8vIE1lcmdlIHNvbWUgb2JzZXJ2YWJsZXMsIHdpdGggYSBjb21tb24gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gRm9jdXMgb3IgY2xpY2sgPT4gTG9hZCBhbGxcbiAgICAgICAgbWVyZ2UodGhpcy5vbkZvY3VzLCB0aGlzLm9uQ2xpY2spXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoXyA9PiB0aGlzLnNlYXJjaGFibGUgJiYgdGhpcy5lbmFibGVkKSxcbiAgICAgICAgICAgIG1hcChfID0+IHRoaXMuc2hvd0FsbE9uRm9jdXMgPyAnKicgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKVxuICAgICAgICAgICksXG4gICAgICAgIC8vIE9uIGRyb3Bkb3duIGJ1dHRvbiBjbGlja1xuICAgICAgICB0aGlzLm9uRHJvcEJ1dHRvbkNsaWNrXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gdGhpcy5zZWFyY2hhYmxlICYmICghZXZlbnQgfHwgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpICYmIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlZCksXG4gICAgICAgICAgICBtYXAoXyA9PiAgdGhpcy5zaG93QWxsT25Gb2N1cyA/ICcqJyA6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgKSxcbiAgICAgICAgbWVyZ2UodGhpcy4kaW5wdXRJdGVtcywgdGhpcy5fZmlsdGVyJClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcChfID0+IHRoaXMuc2VhcmNoYWJsZSAmJiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSxcbiAgICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgIClcbiAgICAucGlwZShcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL3RhcCh2YWx1ZSA9PiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCB1cGRhdGUgZXZlbnQ6ICcsIHZhbHVlKSksXG5cbiAgICAgIC8vIFN1Z2dlc3QgdmFsdWVzXG4gICAgICBtZXJnZU1hcCh2YWx1ZSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIHRoaXMuZmlsdGVyKSksXG4gICAgICAvLyBERUJVR1xuICAgICAgLy90YXAoaXRlbXMgPT4gY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZnJvbSBzdWdnZXN0OiAnLCBpdGVtcykpLFxuXG4gICAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICAgIHRhcChpdGVtcyA9PiB0aGlzLnVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgIGNvbnN0IGZldGNoTW9yZUl0ZW1zQ2hhbmdlcyA9IHRoaXMuX2ZldGNoTW9yZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoZXZlbnQgPT4gZXZlbnQ/LnByZXZlbnREZWZhdWx0KCkpLCAvLyBBdm9pZCB0byBjbG9zZSB0aGUgbWF0LXNlbGVjdFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5jYW5GZXRjaE1vcmUpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmZldGNoTW9yZSgpKSxcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy90YXAobW9yZUl0ZW1zID0+IGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGZyb20gZmV0Y2ggTW9yZTogJywgbW9yZUl0ZW1zKSksXG4gICAgICAgIC8vIENvbmNhdCB0byBleGlzdGluZyBpdGVtc1xuICAgICAgICBtYXAobW9yZUl0ZW1zID0+ICh0aGlzLiRmaWx0ZXJlZEl0ZW1zLnZhbHVlIHx8IFtdKS5jb25jYXQobW9yZUl0ZW1zKSlcbiAgICAgICk7XG5cbiAgICAvLyBVcGRhdGUgZmlsdGVyZWQgaXRlbXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuJGlucHV0SXRlbXMsXG5cbiAgICAgICAgLy8gVXBkYXRlIGl0ZW1zIGV2ZW50c1xuICAgICAgICBmaWx0ZXJlZEl0ZW1zQ2hhbmdlcyxcblxuICAgICAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgICAgICBmZXRjaE1vcmVJdGVtc0NoYW5nZXNcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgICAvLyBNYWtlIHN1cmUgY29udHJvbCB2YWx1ZSBpcyBpbnNpZGUgKG1hdC1zZWxlY3QpXG4gICAgICAgIGlmIChpdGVtcyAmJiAhdGhpcy5zZWFyY2hhYmxlKXtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IHRoaXMuY29tcGFyZVdpdGgoaXRlbSwgdmFsdWUpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIElmIGZvcm0gdmFsdWUgaXMgbWlzc2luZzogYWRkIGl0IHRvIHRoZSBsaXN0XG4gICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEVtaXQgaXRlbXNcbiAgICAgICAgdGhpcy4kZmlsdGVyZWRJdGVtcy5uZXh0KGl0ZW1zKTtcbiAgICAgIH0pKTtcblxuICAgIC8vIEFwcGx5aW5nIGltcGxpY2l0IHZhbHVlLCBvbiBibHVyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMub25CbHVyXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIFNraXAgaWYgbm90IHNlYXJjaGFibGVcbiAgICAgICAgICBmaWx0ZXIoXyA9PiB0aGlzLnNlYXJjaGFibGUpLFxuICAgICAgICAgIG1hcChfID0+IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSggdmFsdWUgPT4ge1xuICAgICAgICAgIC8vIFdoZW4gbGVhdmUgY29tcG9uZW50IHdpdGhvdXQgb2JqZWN0LCB1c2UgaW1wbGljaXQgdmFsdWUgaWYgOlxuICAgICAgICAgIC8vIC0gYW4gZXhwbGljaXQgdmFsdWVcbiAgICAgICAgICAvLyAtIGZpZWxkIGlzIG5vdCBlbXB0eSAodXNlciBmaWxsIHNvbWV0aGluZylcbiAgICAgICAgICAvLyAtIE9SIGZpZWxkIGVtcHR5IGJ1dCBpcyByZXF1aXJlZFxuICAgICAgICAgIGlmICh0aGlzLl9pbXBsaWNpdFZhbHVlICYmICgodGhpcy5yZXF1aXJlZCAmJiBpc05pbE9yQmxhbmsodmFsdWUpKSB8fCAoaXNOb3ROaWxPckJsYW5rKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSkpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9pbXBsaWNpdFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZyh7ZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQZW5kaW5nKHtlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gbnVsbDsgLy8gcmVzZXQgdGhlIGltcGxpY2l0IHZhbHVlXG4gICAgICAgIH0pKTtcblxuICAgIC8vIExpc3RlbiBmb3JtIGNvbnRyb2wgc3RhdHVzIGNoYW5nZVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBzdGF0ZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hlY2tJZlRvdWNoZWQoKSlcbiAgICApXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuJGlucHV0SXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLiRmaWx0ZXJlZEl0ZW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcmVsb2FkJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2ZpbHRlciQuY29tcGxldGUoKTtcblxuICAgIHRoaXMub25Ecm9wQnV0dG9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLm9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLm9uQmx1ci5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25Gb2N1cy5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gbnVsbDtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gbnVsbDtcbiAgICB0aGlzLmNvbXBhcmVXaXRoID0gbnVsbDtcbiAgICB0aGlzLnN1Z2dlc3RGbiA9IG51bGw7XG4gICAgdGhpcy4kZmlsdGVyZWRJdGVtcyA9IG51bGw7XG4gICAgdGhpcy5tYXRTZWxlY3RJdGVtcyQgPSBudWxsO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICB0aGlzLmNsYXNzTGlzdCA9IG51bGw7XG5cbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IG51bGxcblxuICAgIC8vIERlc3Ryb3kgdGhlICdhdXRvY29tcGxldGUnIGluc3RhbmNlLCB0byBhdm9pZCBtZW1vcnkgbGVha1xuICAgIHRoaXMubWF0QXV0b0NvbXBsZXRlPy5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIHJlbG9hZCBjb250ZW50LiBVc2VmdWwgd2hlbiBmaWx0ZXIgaGFzIGJlZW4gY2hhbmdlZCBidXQgbm90IGRldGVjdGVkXG4gICAqL1xuICByZWxvYWRJdGVtcyh2YWx1ZT86IGFueSkge1xuICAgIC8vIEZvcmNlIGEgcmVmcmVzaFxuICAgIHRoaXMuX3JlbG9hZCQubmV4dCh2YWx1ZSB8fCAnKicpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgV3JpdGluZyB2YWx1ZTogXCIsIHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuXG4gIGZvY3VzKCkge1xuICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHtcbiAgICAgIGZvY3VzSW5wdXQodGhpcy5tYXRJbnB1dFRleHQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Py5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgLy9ERUJVRyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FuY2VsbGluZyBmb2N1cyBldmVudFwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50KGV2ZW50KTtcbiAgICBpZiAoIWhhc0NvbnRlbnQgfHwgKHRoaXMuc2hvd1BhbmVsT25Gb2N1cyAmJiB0aGlzLnNob3dBbGxPbkZvY3VzKSApIHtcbiAgICAgIC8vREVCVUcgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIEVtaXQgZm9jdXMgZXZlbnRcIik7XG4gICAgICB0aGlzLm9uRm9jdXMuZW1pdChldmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZmlsdGVyTWF0U2VsZWN0Rm9jdXNFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIC8vIERFQlVHXG4gICAgLy8gY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFJlY2VpdmVkIDxtYXQtc2VsZWN0PiBmb2N1cyBldmVudFwiLCBldmVudCk7XG4gICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZmlsdGVyTWF0U2VsZWN0Qmx1ckV2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAvLyBERUJVR1xuICAgIC8vIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCA8bWF0LXNlbGVjdD4gYmx1ciBldmVudFwiLCBldmVudCk7XG5cbiAgICAvLyBJZ25vcmUgZXZlbnQgZnJvbSBtYXQtb3B0aW9uXG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdNQVQtT1BUSU9OJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvLyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FuY2VsbGluZyA8bWF0LXNlbGVjdD4gYmx1ciBldmVudFwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQmx1ci5lbWl0KGV2ZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRvZ2dsZVNlYXJjaChldmVudDogVUlFdmVudCkge1xuICAgIGNvbnN0IHNlYXJjaGFibGUgPSAhdGhpcy5zZWFyY2hhYmxlO1xuICAgIGlmIChzZWFyY2hhYmxlICYmIHRoaXMuc2VhcmNoYWJsZSAmJiB0aGlzLm1hdElucHV0VGV4dCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoYWJsZSA9IHNlYXJjaGFibGU7XG4gICAgICBpZiAoc2VhcmNoYWJsZSkge1xuICAgICAgICB0aGlzLmFwcEF1dG9mb2N1cyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd1BhbmVsT25Gb2N1cyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclZhbHVlKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgX2luaXRJbmZpbml0ZVNjcm9sbCh0aHJlc2hvbGQ/OiBzdHJpbmcpIHtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBJbml0IGF1dG9jb21wbGV0ZSBzY3JvbGwgbGlzdGVuZXInKTtcblxuICAgIGlmICghdGhpcy5tYXRBdXRvQ29tcGxldGUpIHJldHVybiBvZigpO1xuXG4gICAgaWYgKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbmVkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tYXRBdXRvQ29tcGxldGUuX2lzT3BlblxuICAgICAgPyB0aW1lcigwKVxuICAgICAgOiB0aGlzLm1hdEF1dG9Db21wbGV0ZS5vcGVuZWQucGlwZShkZWJvdW5jZVRpbWUoMjAwKSk7XG4gICAgY29uc3Qgc2Nyb2xsRW5kJCA9IG9wZW5lZCRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKF8pID0+IHRoaXMuZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKSksXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICAgIHN3aXRjaE1hcCgocGFuZWwpID0+IGZyb21TY3JvbGxFbmRFdmVudChwYW5lbCwgdGhyZXNob2xkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubWF0QXV0b0NvbXBsZXRlLmNsb3NlZClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAvLyBUcmlnZ2VyIGZldGNoIG1vcmUsIGVuZCBlbmQgc2Nyb2xsIHJlYWNoZWRcbiAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24gPSBzY3JvbGxFbmQkXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ZldGNoTW9yZSQuZW1pdCgpKVxuXG4gICAgLy8gUmVnaXN0ZXIgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIHN1Z2dlc3QodmFsdWU6IGFueSwgZmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBGaWx0ZXJlZCBpdGVtcyBieSBzdWdnZXN0Rm46JywgdmFsdWUsIHJlcyk7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IDA7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IChyZXMgYXMgYW55W10pLmxlbmd0aCB8fCAwO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB7ZGF0YSwgdG90YWwsIGZldGNoTW9yZX0gPSByZXMgYXMgTG9hZFJlc3VsdDxhbnk+O1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gdG9OdW1iZXIodG90YWwsIGRhdGEgJiYgZGF0YS5sZW5ndGggfHwgMCk7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gZmV0Y2hNb3JlO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSBmZXRjaE1vcmUgJiYgKHRoaXMuX2l0ZW1Db3VudCAtIGRhdGEubGVuZ3RoKSB8fCAwO1xuICAgICAgcmVzID0gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcyBhcyBhbnlbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hNb3JlKCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoIXRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2spIHJldHVybiBbXTtcblxuICAgIC8vIFNhdmUgdGhlbiByZW1vdmUgZmV0Y2ggZnVuY3Rpb24gKHRvIGF2b2lkIG11bHRpLWNhbGwpXG4gICAgY29uc3QgZmV0Y2hNb3JlRm4gPSB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7ZGF0YSwgdG90YWwsIGZldGNoTW9yZX0gPSBhd2FpdCBmZXRjaE1vcmVGbigpO1xuICAgIHRoaXMuX2l0ZW1Db3VudCA9IHRvdGFsIHx8IHRoaXMuX2l0ZW1Db3VudDtcbiAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gZmV0Y2hNb3JlO1xuICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gTWF0aC5tYXgoMCwgdGhpcy5fbW9yZUl0ZW1zQ291bnQgLSBkYXRhLmxlbmd0aCk7IC8vIEJvcm5lIG1pbiA9IDBcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW1wbGljaXRWYWx1ZShpdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy5zZWFyY2hhYmxlKSB7XG4gICAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IGl0ZW1zWzBdO1xuICAgICAgICAvL3RoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGVsZSA9IHRoaXMubWF0QXV0b0NvbXBsZXRlPy5vcHRpb25zLmxhc3Q/Ll9nZXRIb3N0RWxlbWVudCgpLnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFlbGUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyAnIFVuYWJsZSB0byBmaW5kIHRoZSBhdXRvY29tcGxldGUgZGl2Li4uJyk7XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLiRmaWx0ZXJlZEl0ZW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLiRmaWx0ZXJlZEl0ZW1zLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxufVxuIl19
608
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1SSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEwsT0FBTyxFQUFFLFVBQVUsRUFBZ0Isa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBd0Js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QkFBa0IsdUJBdVB6RCxRQUFROzs7MEJBN0dWLEtBQUs7d0JBQ0wsS0FBSzswQkFDTCxLQUFLOzhCQUNMLEtBQUs7eUJBQ0wsS0FBSzswQkFDTCxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO3VCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLOzBCQUNMLEtBQUs7Z0NBQ0wsS0FBSztpQ0FDTCxLQUFLO2lDQUNMLEtBQUs7OEJBQ0wsS0FBSzs2QkFDTCxLQUFLOytCQUNMLEtBQUs7MkJBQ0wsS0FBSztxQkFDTCxLQUFLO3lCQUNMLEtBQUs7OEJBQ0wsS0FBSzt3QkFDTCxLQUFLLFNBQUMsT0FBTzt5QkFDYixLQUFLO3NDQUNMLEtBQUs7dUJBQ0wsS0FBSzt1QkFFTCxLQUFLO2lDQUNMLEtBQUs7cUNBQ0wsS0FBSztpQ0FDTCxLQUFLO2lDQUVMLFdBQVcsU0FBQyxZQUFZO3FCQUd4QixLQUFLO3VCQVlMLEtBQUs7b0JBU0wsS0FBSztzQkEyQkwsTUFBTSxTQUFDLE9BQU87cUJBQ2QsTUFBTSxTQUFDLE1BQU07c0JBQ2IsTUFBTSxTQUFDLE9BQU87Z0NBRWQsTUFBTSxTQUFDLGlCQUFpQjt3QkFFeEIsU0FBUyxTQUFDLFdBQVc7MkJBQ3JCLFNBQVMsU0FBQyxjQUFjOzhCQUN4QixTQUFTLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFByb3ZpZGVyLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRha2VXaGlsZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRmV0Y2hNb3JlRm4sIExvYWRSZXN1bHQsIFN1Z2dlc3RGbiwgU3VnZ2VzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCBpc05vdE5pbFN0cmluZywgam9pblByb3BlcnRpZXNQYXRoLCBzdWdnZXN0RnJvbUFycmF5LCB0b0Jvb2xlYW4sIHRvTnVtYmVyIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGZvY3VzSW5wdXQsIElucHV0RWxlbWVudCwgc2VsZWN0SW5wdXRDb250ZW50IH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uL29ic2VydmFibGVzJztcbmltcG9ydCB7IENvbXBhcmVXaXRoRm4sIERpc3BsYXlGbiB9IGZyb20gJy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgZnJvbVNjcm9sbEVuZEV2ZW50IH0gZnJvbSAnLi4vLi4vZXZlbnRzJztcblxuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8VCA9IGFueSwgRiA9IGFueT4ge1xuICBhdHRyaWJ1dGVzOiBzdHJpbmdbXTtcbiAgc3VnZ2VzdEZuPzogKHZhbHVlOiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IFByb21pc2U8VFtdIHwgTG9hZFJlc3VsdDxUPj47XG4gIGZpbHRlcj86IFBhcnRpYWw8Rj47XG4gIGl0ZW1zPzogT2JzZXJ2YWJsZTxUW10+IHwgVFtdO1xuICBjb2x1bW5TaXplcz86IChudW1iZXJ8J2F1dG8nfHVuZGVmaW5lZClbXTtcbiAgY29sdW1uTmFtZXM/OiAoc3RyaW5nfHVuZGVmaW5lZClbXTtcbiAgZGlzcGxheVdpdGg/OiBEaXNwbGF5Rm47XG4gIGNvbXBhcmVXaXRoPzogQ29tcGFyZVdpdGhGbjtcbiAgc2hvd0FsbE9uRm9jdXM/OiBib29sZWFuO1xuICBzaG93UGFuZWxPbkZvY3VzPzogYm9vbGVhbjtcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIG1vYmlsZT86IGJvb2xlYW47XG4gIGRlYm91bmNlVGltZT86IG51bWJlcjtcbiAgc3VnZ2VzdExlbmd0aFRocmVzaG9sZD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9uczxUID0gYW55LCBGID0gYW55PiBleHRlbmRzIFBhcnRpYWw8TWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc8VCwgRj4+IHtcbiAgc2VydmljZT86IFN1Z2dlc3RTZXJ2aWNlPFQsIEY+O1xufVxuXG5leHBvcnQgY2xhc3MgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyIHtcbiAgZmllbGRzOiB7XG4gICAgW2tleTogc3RyaW5nXTogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIH0gPSB7fTtcblxuICBnZXRVc2VyQXR0cmlidXRlczogKGZpZWxkTmFtZTogc3RyaW5nLCBkZWZhdWx0QXR0cmlidXRlcz86IHN0cmluZ1tdKSA9PiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM/OiB7XG4gICAgZ2V0VXNlckF0dHJpYnV0ZXM6IChmaWVsZE5hbWU6IHN0cmluZywgZGVmYXVsdEF0dHJpYnV0ZXM/OiBzdHJpbmdbXSkgPT4gc3RyaW5nW107XG4gIH0pIHtcbiAgICAvLyBTdG9yZSB0aGUgZnVuY3Rpb24gZnJvbSBvcHRpb25zIChlLmcuIGdldCBmcm9tIHVzZXIgc2V0dGluZ3MpXG4gICAgLy8gb3IgY3JlYXRlIGEgZGVmYXVsdCBmdW5jdGlvblxuICAgIHRoaXMuZ2V0VXNlckF0dHJpYnV0ZXMgPSBvcHRpb25zPy5nZXRVc2VyQXR0cmlidXRlcyB8fFxuICAgICAgKChmaWVsZE5hbWUsIGRlZmF1bHRBdHRyaWJ1dGVzKSA9PiBkZWZhdWx0QXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXSk7XG4gIH1cblxuICBhZGQ8VCA9IGFueSwgRiA9IGFueT4oZmllbGROYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBNYXRBdXRvY29tcGxldGVGaWVsZEFkZE9wdGlvbnM8VCwgRj4pOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZzxULCBGPiB7XG4gICAgaWYgKCFmaWVsZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGFkZCBjb25maWcsIHdpdGggbmFtZTogJyArIChmaWVsZE5hbWUgfHwgJ3VuZGVmaW5lZCcpKTtcbiAgICB9XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwgPE1hdEF1dG9jb21wbGV0ZUZpZWxkQWRkT3B0aW9ucz57fTtcbiAgICBjb25zdCBzdWdnZXN0Rm46IFN1Z2dlc3RGbjxULCBGPiA9IG9wdGlvbnMuc3VnZ2VzdEZuXG4gICAgICB8fCAob3B0aW9ucy5zZXJ2aWNlICYmICgodiwgZikgPT4gb3B0aW9ucy5zZXJ2aWNlLnN1Z2dlc3QodiwgZikpKVxuICAgICAgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSAodGhpcy5nZXRVc2VyQXR0cmlidXRlcyhmaWVsZE5hbWUsIG9wdGlvbnMuYXR0cmlidXRlcykgfHwgWydsYWJlbCcsICduYW1lJ10pO1xuICAgIC8vIEtlZXAgb3JpZ2luYWwgdGhlIGZ1bmN0aW9uIGZyb20gb3B0aW9ucywgd2hlbiBleGlzdHNcbiAgICBjb25zdCBhdHRyaWJ1dGVzT3JGbiA9IGF0dHJpYnV0ZXMubWFwKChhLCBpbmRleCkgPT4gdHlwZW9mIGEgPT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucy5hdHRyaWJ1dGVzW2luZGV4XSB8fCBhKTtcbiAgICBjb25zdCBmaWx0ZXI6IFBhcnRpYWw8Rj4gPSB7XG4gICAgICBzZWFyY2hBdHRyaWJ1dGU6IGF0dHJpYnV0ZXMubGVuZ3RoID09PSAxID8gYXR0cmlidXRlc1swXSA6IHVuZGVmaW5lZCxcbiAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMubGVuZ3RoID4gMSA/IGF0dHJpYnV0ZXMgOiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLmZpbHRlclxuICAgIH07XG4gICAgY29uc3QgZGlzcGxheVdpdGggPSBvcHRpb25zLmRpc3BsYXlXaXRoIHx8ICgob2JqKSA9PiBvYmogJiYgam9pblByb3BlcnRpZXNQYXRoKG9iaiwgYXR0cmlidXRlcykpO1xuICAgIGNvbnN0IGNvbXBhcmVXaXRoID0gb3B0aW9ucy5jb21wYXJlV2l0aCB8fCAoKG8xOiBhbnksIG8yOiBhbnkpID0+IG8xICYmIG8yICYmIG8xLmlkID09PSBvMi5pZCk7XG5cbiAgICBjb25zdCBjb25maWc6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXNPckZuLFxuICAgICAgc3VnZ2VzdEZuLFxuICAgICAgZmlsdGVyLFxuICAgICAgZGlzcGxheVdpdGgsXG4gICAgICBjb21wYXJlV2l0aFxuICAgIH07XG5cbiAgICB0aGlzLmZpZWxkc1tmaWVsZE5hbWVdID0gY29uZmlnO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBnZXQ8VCA9IGFueT4oZmllbGROYW1lOiBzdHJpbmcpOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZzxUPiB7XG4gICAgaWYgKCFmaWVsZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGFkZCBjb25maWcsIHdpdGggbmFtZTogJyArIChmaWVsZE5hbWUgfHwgJ3VuZGVmaW5lZCcpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzW2ZpZWxkTmFtZV0gfHwgdGhpcy5hZGQoZmllbGROYW1lKSBhcyBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZzxUPjtcbiAgfVxufVxuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdEF1dG9jb21wbGV0ZUZpZWxkKSxcbiAgbXVsdGk6IHRydWVcbn07XG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ21hdC1hdXRvY29tcGxldGUtZmllbGQnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5hdXRvY29tcGxldGUuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmh0bWwnLFxuICBwcm92aWRlcnM6IFtERUZBVUxUX1ZBTFVFX0FDQ0VTU09SXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWF0QXV0b2NvbXBsZXRlRmllbGQgaW1wbGVtZW50cyBPbkluaXQsIElucHV0RWxlbWVudCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciAge1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uRmV0Y2hNb3JlQ2FsbGJhY2s6IEZldGNoTW9yZUZuPExvYWRSZXN1bHQ8YW55Pj47XG4gIHByaXZhdGUgX2ltcGxpY2l0VmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9pdGVtc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9vcGVuZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfZmlsdGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9pdGVtQ291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmVsb2FkJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBfdGFiaW5kZXg6IG51bWJlcjtcbiAgbWF0U2VsZWN0SXRlbXMkOiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgJGlucHV0SXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPih1bmRlZmluZWQpO1xuICAkZmlsdGVyZWRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHVuZGVmaW5lZCk7XG4gIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gIGRpc3BsYXlWYWx1ZSA9ICcnO1xuXG4gIF9tb3JlSXRlbXNDb3VudDogbnVtYmVyO1xuICBfZmV0Y2hNb3JlJCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cblxuICBnZXQgaXRlbUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1Db3VudDtcbiAgfVxuXG4gIGdldCBjYW5GZXRjaE1vcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgJiYgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPiAwO1xuICB9XG5cbiAgQElucHV0KCkgY29tcGFyZVdpdGg6IChvMTogYW55LCBvMjogYW55KSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBsb2dQcmVmaXggPSAnW21hdC1hdXRvY29tcGxldGVdICc7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgc3VnZ2VzdEZuOiBTdWdnZXN0Rm48YW55LCBhbnk+O1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkZWJvdW5jZVRpbWU6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlXaXRoOiBEaXNwbGF5Rm4gfCBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5QXR0cmlidXRlczogc3RyaW5nW107XG4gIEBJbnB1dCgpIGRpc3BsYXlDb2x1bW5TaXplczogKG51bWJlcnwnYXV0byd8dW5kZWZpbmVkKVtdO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sdW1uTmFtZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBoaWdobGlnaHRBY2NlbnQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0FsbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dQYW5lbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFwcEF1dG9mb2N1czogYm9vbGVhbjtcbiAgQElucHV0KCkgY29uZmlnOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZztcbiAgQElucHV0KCkgaTE4blByZWZpeCA9ICdSRUZFUkVOVElBTC4nO1xuICBASW5wdXQoKSBub1Jlc3VsdE1lc3NhZ2UgPSAnQ09NTU9OLk5PX1JFU1VMVCc7XG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgcGFuZWxXaWR0aDogc3RyaW5nO1xuICBASW5wdXQoKSBtYXRBdXRvY29tcGxldGVQb3NpdGlvbjogJ2F1dG8nIHwgJ2Fib3ZlJyB8ICdiZWxvdycgPSAnYXV0byc7XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgaXRlbVNpemUgPSAnNDhweCc7XG4gIEBJbnB1dCgpIGZldGNoTW9yZVRocmVzaG9sZDogc3RyaW5nID0gJzE1JSc7XG4gIEBJbnB1dCgpIHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dMb2FkaW5nU3Bpbm5lciA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdALmRpc2FibGVkJylcbiAgYW5pbWF0aW9uc0Rpc2FibGVkID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX2ZpbHRlciQudmFsdWUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBTZXR0aW5nIGZpbHRlcjpcIiwgdmFsdWUpO1xuICAgICAgdGhpcy5fZmlsdGVyJC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlciQudmFsdWU7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSkge1xuICAgIC8vIFJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gaXRlbXMsIChpZiBleGl0cylcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgSXRlbXMgcmVjZWl2ZWQgdHdpY2UgIScpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbik7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChpc09ic2VydmFibGU8YW55W10+KHZhbHVlKSkge1xuICAgICAgdGhpcy5faXRlbXNTdWJzY3JpcHRpb24gPSB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICB2YWx1ZS5zdWJzY3JpYmUodiA9PiB7XG4gICAgICAgICAgLy9jb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCBpdGVtczogXCIsIHYpO1xuICAgICAgICAgIHRoaXMuJGlucHV0SXRlbXMubmV4dCh2KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLiRpbnB1dEl0ZW1zLmdldFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy4kaW5wdXRJdGVtcy5uZXh0KHZhbHVlIGFzIGFueVtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaXRlbXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuJGlucHV0SXRlbXM7XG4gIH1cblxuICBAT3V0cHV0KCdjbGljaycpIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoJ2JsdXInKSBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoJ2ZvY3VzJykgb25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBAT3V0cHV0KCdkcm9wQnV0dG9uQ2xpY2snKSBvbkRyb3BCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VUlFdmVudD4odHJ1ZSk7XG5cbiAgQFZpZXdDaGlsZCgnbWF0U2VsZWN0JykgbWF0U2VsZWN0OiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoJ21hdElucHV0VGV4dCcpIG1hdElucHV0VGV4dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYXV0b0NvbXBsZXRlJykgbWF0QXV0b0NvbXBsZXRlOiBNYXRBdXRvY29tcGxldGU7XG5cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiAhdGhpcy5yZWFkb25seSAmJiB0aGlzLmZvcm1Db250cm9sLmVuYWJsZWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbCB8fCB0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiB0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSBcXCdmb3JtQ29udHJvbFxcJyBvciBcXCdmb3JtQ29udHJvbE5hbWVcXCcgaW4gPG1hdC1hdXRvY29tcGxldGUtZmllbGQ+LicpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbiBmcm9tIGNvbmZpZyBvYmplY3RcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdEZuID0gdGhpcy5zdWdnZXN0Rm4gfHwgdGhpcy5jb25maWcuc3VnZ2VzdEZuO1xuICAgICAgaWYgKCF0aGlzLnN1Z2dlc3RGbiAmJiB0aGlzLmNvbmZpZy5pdGVtcykge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5jb25maWcuaXRlbXM7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyIHx8IHRoaXMuY29uZmlnLmZpbHRlcjtcbiAgICAgIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzIHx8IHRoaXMuY29uZmlnLmF0dHJpYnV0ZXM7XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9IHRoaXMuZGlzcGxheUNvbHVtblNpemVzIHx8IHRoaXMuY29uZmlnLmNvbHVtblNpemVzO1xuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyB8fCB0aGlzLmNvbmZpZy5jb2x1bW5OYW1lcztcbiAgICAgIHRoaXMuZGlzcGxheVdpdGggPSB0aGlzLmRpc3BsYXlXaXRoIHx8IHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoO1xuICAgICAgdGhpcy5tb2JpbGUgPSB0b0Jvb2xlYW4odGhpcy5tb2JpbGUsIHRoaXMuY29uZmlnLm1vYmlsZSk7XG4gICAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPSB0b051bWJlcih0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQsIHRoaXMuY29uZmlnLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfHwgMCk7XG4gICAgICB0aGlzLnNob3dBbGxPbkZvY3VzID0gdG9Cb29sZWFuKHRoaXMuc2hvd0FsbE9uRm9jdXMsIHRvQm9vbGVhbih0aGlzLmNvbmZpZy5zaG93QWxsT25Gb2N1cywgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkID09PSAwKSk7XG4gICAgICB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPSB0b0Jvb2xlYW4odGhpcy5zaG93UGFuZWxPbkZvY3VzLCB0b0Jvb2xlYW4odGhpcy5jb25maWcuc2hvd1BhbmVsT25Gb2N1cywgdHJ1ZSkpO1xuICAgICAgdGhpcy5jbGFzc0xpc3QgPSB0aGlzLmNsYXNzTGlzdCB8fCB0aGlzLmNvbmZpZy5jbGFzcztcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lID0gdG9OdW1iZXIodGhpcy5kZWJvdW5jZVRpbWUsIHRoaXMuY29uZmlnLmRlYm91bmNlVGltZSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcyB8fCB0aGlzLmZpbHRlcj8uYXR0cmlidXRlcyB8fCBbJ2xhYmVsJywgJ25hbWUnXTtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCB8fCAoKG9iaikgPT4gb2JqICYmIGpvaW5Qcm9wZXJ0aWVzUGF0aChvYmosIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMpKTtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9IHRoaXMuZGlzcGxheUNvbHVtblNpemVzXG4gICAgICAvLyBpZiBvbmx5IGNvbHVtbjogYXV0byBzaXplXG4gICAgICB8fCAodGhpcy5kaXNwbGF5QXR0cmlidXRlcy5sZW5ndGggPT09IDEgJiYgW3VuZGVmaW5lZF0pXG4gICAgICB8fCB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcChhdHRyID0+XG4gICAgICAgIC8vIElmIGxhYmVsLCBzZXQgY29sIHNpemUgPSAyXG4gICAgICAgIChhdHRyICYmIGF0dHIuZW5kc1dpdGgoJ2xhYmVsJykpID8gMiA6XG4gICAgICAgICAgLy8gSWYgcmFua09yZGVyID0+IGNvbCBzaXplID0gMVxuICAgICAgICAgICgoYXR0ciAmJiBhdHRyLmVuZHNXaXRoKCdyYW5rT3JkZXInKSkgPyAxXG4gICAgICAgICAgICAvLyBFbHNlID0+IGF1dG8gc2l6ZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQpKTtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMubWFwKChhdHRyLCBpbmRleCkgPT4gdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgJiYgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXNbaW5kZXhdIHx8XG4gICAgICAgICh0aGlzLmkxOG5QcmVmaXggKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGF0dHIpLnRvVXBwZXJDYXNlKCkpKTtcbiAgICB0aGlzLm1vYmlsZSA9IHRvQm9vbGVhbih0aGlzLm1vYmlsZSwgZmFsc2UpO1xuICAgIHRoaXMuc2VhcmNoYWJsZSA9ICF0aGlzLm1vYmlsZSAmJiAhdGhpcy5tdWx0aXBsZTtcbiAgICAvLyBEZWZhdWx0IGNvbXBhcmF0b3IgKG9ubHkgbmVlZCB3aGVuIHVzaW5nIG1hdC1zZWxlY3QpXG4gICAgaWYgKCF0aGlzLnNlYXJjaGFibGUgJiYgIXRoaXMuY29tcGFyZVdpdGgpIHRoaXMuY29tcGFyZVdpdGggPSAobzE6IGFueSwgbzI6IGFueSkgPT4gbzEgJiYgbzIgJiYgbzEuaWQgPT09IG8yLmlkO1xuICAgIHRoaXMucGFuZWxXaWR0aCA9IHRoaXMucGFuZWxXaWR0aCB8fCAodGhpcy5jbGFzc0xpc3RcbiAgICAgICYmICh0aGlzLmNsYXNzTGlzdCA9PT0gJ21pbi13aWR0aC1tZWRpdW0nICYmICczMDBweCcpXG4gICAgICB8fCAodGhpcy5jbGFzc0xpc3QgPT09ICdtaW4td2lkdGgtbGFyZ2UnICYmICc0MDBweCcpXG4gICAgICB8fCAodGhpcy5jbGFzc0xpc3QgPT09ICdtaW4td2lkdGgteGxhcmdlJyAmJiAnNDUwcHgnKVxuICAgICAgfHwgKHRoaXMuY2xhc3NMaXN0ID09PSAnbWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1mdWxsLXNpemUnICYmICcxMDB2dycpKTtcbiAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRvTnVtYmVyKHRoaXMuZGVib3VuY2VUaW1lLCAyNTApO1xuICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA9IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCB8fCAwO1xuXG4gICAgLy8gTm8gc3VnZ2VzdEZuOiBmaWx0ZXIgb24gdGhlIGdpdmVuIGl0ZW1zXG4gICAgaWYgKCF0aGlzLnN1Z2dlc3RGbikge1xuICAgICAgY29uc3Qgc3VnZ2VzdEZyb21BcnJheUZuOiBTdWdnZXN0Rm48YW55LCBhbnk+ID0gYXN5bmMgKHZhbHVlLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FsbGluZyBzdWdnZXN0RnJvbUFycmF5IHdpdGggdmFsdWU9XCIsIHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gc3VnZ2VzdEZyb21BcnJheSh0aGlzLiRpbnB1dEl0ZW1zLnZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMsXG4gICAgICAgICAgLi4uZmlsdGVyXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIC8vIFdhaXQgKG9uY2UpIHRoYXQgaXRlbXMgYXJlIGxvYWRlZCwgdGhlbiBjYWxsIHN1Z2dlc3QgZnJvbSBhcnJheSBmblxuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoaXNOaWwodGhpcy4kaW5wdXRJdGVtcy52YWx1ZSkpIHtcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFdhaXRpbmcgaXRlbXMgdG8gYmUgc2V0Li4uXCIpO1xuXG4gICAgICAgICAgYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuJGlucHV0SXRlbXMpO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCBpdGVtczpcIiwgdGhpcy5pbnB1dEl0ZW1zJC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBzdWdnZXN0RnJvbUFycmF5Rm47XG4gICAgICAgIHJldHVybiB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTsgLy8gTG9vcFxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIXRoaXMuc2VhcmNoYWJsZSkge1xuICAgICAgLy8gTWFudWFsbHkgZmlsbCBpbnB1dCBpdGVtcywgZnJvbSB0aGUgZ2l2ZW4gc3VnZ2VzdCBmdW5jdGlvblxuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5fZmlsdGVyJC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnksIGFueT4odGhpcy5maWx0ZXIpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgyNTApLFxuICAgICAgICAgIHRha2VXaGlsZSgoXykgPT4gIXRoaXMuc2VhcmNoYWJsZSksIC8vIENsb3NlIHN1YnNjcmlwdGlvbiwgd2hlbiBlbmFibGluZyBzZWFyY2ggKG5vIG1vcmUgbWF0LXNlbGVjdClcbiAgICAgICAgICBzd2l0Y2hNYXAoKGZpbHRlcikgPT4gdGhpcy5zdWdnZXN0KCcqJywgZmlsdGVyKSApXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShpdGVtcyA9PiB0aGlzLiRpbnB1dEl0ZW1zLm5leHQoaXRlbXMpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zQ2hhbmdlcyA9IG1lcmdlKFxuXG4gICAgICAvLyBSZWxvYWQgZXZlbnQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSwgdG8gZm9yY2UgcmVsb2FkIGV2ZW4gaWYgc2FtZSB2YWx1ZSlcbiAgICAgIHRoaXMuX3JlbG9hZCQsXG5cbiAgICAgIC8vIFNlYXJjaCB0ZXh0IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIGJlY2F1c2Ugb2YgdGhlIGRlYm91bmNlVGltZSgpIHBpcGUpXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdGhpcy5zZWFyY2hhYmxlICYmIGlzTm90TmlsU3RyaW5nKHZhbHVlKSksXG4gICAgICAgICAgLy8gTWFyayBhcyBsb2FkaW5nICh0byBzaG93IGxvYWRpbmcgc3Bpbm5lcikgLSBlYXJsaWVyIGFzIHBvc3NpYmxlLCBzbyBiZWZvcmUgdGhlIGRlYm91bmNlIHRpbWVcbiAgICAgICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyKSB7XG4gICAgICAgICAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIEZpbHRlciBpZiBub3QgZW5vdWdoIGNoYXJhY3RlclxuICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAmJiB2YWx1ZS5sZW5ndGggPj0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkKSxcbiAgICAgICAgICAvLyBXYWl0IGEgZGVib3VuY2UgdGltZVxuICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSksXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL3RhcCgodmFsdWUpID0+IGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIHNlYXJjaCB0ZXh0IGNoYW5nZXM6JywgdmFsdWUpKSxcbiAgICAgICAgKSxcblxuICAgICAgLy8gT2JqZWN0IHNldDogdXNlIGl0IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIHBpcGUgbmVlZClcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnksIGFueT4odGhpcy5mb3JtQ29udHJvbC52YWx1ZSksXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHRoaXMuc2VhcmNoYWJsZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykpLFxuICAgICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBvYmplY3QgY2hhbmdlczonLCB2YWx1ZSlcblxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBkaXNwbGF5IHZhbHVlIChpZiBuZWVkKVxuICAgICAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5kaXNwbGF5V2l0aCh2YWx1ZSkgfHwgJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWUgIT09IGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZTtcblxuICAgICAgICAgICAgICAvLyBBcHBseSB0byB0aGUgaW5wdXRbdHlwZT10ZXh0XSBmaWVsZFxuICAgICAgICAgICAgICBpZiAodGhpcy5tYXRJbnB1dFRleHQgJiYgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWF0SW5wdXRUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICksXG5cbiAgICAgIC8vIE1lcmdlIHNvbWUgb2JzZXJ2YWJsZXMsIHdpdGggYSBjb21tb24gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlXG4gICAgICBtZXJnZShcbiAgICAgICAgLy8gRm9jdXMgb3IgY2xpY2sgPT4gTG9hZCBhbGxcbiAgICAgICAgbWVyZ2UodGhpcy5vbkZvY3VzLCB0aGlzLm9uQ2xpY2spXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoXyA9PiB0aGlzLnNlYXJjaGFibGUgJiYgdGhpcy5lbmFibGVkKSxcbiAgICAgICAgICAgIG1hcChfID0+IHRoaXMuc2hvd0FsbE9uRm9jdXMgPyAnKicgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKVxuICAgICAgICAgICksXG4gICAgICAgIC8vIE9uIGRyb3Bkb3duIGJ1dHRvbiBjbGlja1xuICAgICAgICB0aGlzLm9uRHJvcEJ1dHRvbkNsaWNrXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gdGhpcy5zZWFyY2hhYmxlICYmICghZXZlbnQgfHwgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpICYmIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlZCksXG4gICAgICAgICAgICBtYXAoXyA9PiAgdGhpcy5zaG93QWxsT25Gb2N1cyA/ICcqJyA6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgICAgKSxcbiAgICAgICAgbWVyZ2UodGhpcy4kaW5wdXRJdGVtcywgdGhpcy5fZmlsdGVyJClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcChfID0+IHRoaXMuc2VhcmNoYWJsZSAmJiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSxcbiAgICAgICAgICApXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgIClcbiAgICAucGlwZShcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL3RhcCh2YWx1ZSA9PiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCB1cGRhdGUgZXZlbnQ6ICcsIHZhbHVlKSksXG5cbiAgICAgIC8vIFN1Z2dlc3QgdmFsdWVzXG4gICAgICBtZXJnZU1hcCh2YWx1ZSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIHRoaXMuZmlsdGVyKSksXG4gICAgICAvLyBERUJVR1xuICAgICAgLy90YXAoaXRlbXMgPT4gY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZnJvbSBzdWdnZXN0OiAnLCBpdGVtcykpLFxuXG4gICAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICAgIHRhcChpdGVtcyA9PiB0aGlzLnVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgIGNvbnN0IGZldGNoTW9yZUl0ZW1zQ2hhbmdlcyA9IHRoaXMuX2ZldGNoTW9yZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoZXZlbnQgPT4gZXZlbnQ/LnByZXZlbnREZWZhdWx0KCkpLCAvLyBBdm9pZCB0byBjbG9zZSB0aGUgbWF0LXNlbGVjdFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5jYW5GZXRjaE1vcmUpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmZldGNoTW9yZSgpKSxcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy90YXAobW9yZUl0ZW1zID0+IGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGZyb20gZmV0Y2ggTW9yZTogJywgbW9yZUl0ZW1zKSksXG4gICAgICAgIC8vIENvbmNhdCB0byBleGlzdGluZyBpdGVtc1xuICAgICAgICBtYXAobW9yZUl0ZW1zID0+ICh0aGlzLiRmaWx0ZXJlZEl0ZW1zLnZhbHVlIHx8IFtdKS5jb25jYXQobW9yZUl0ZW1zKSlcbiAgICAgICk7XG5cbiAgICAvLyBVcGRhdGUgZmlsdGVyZWQgaXRlbXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuJGlucHV0SXRlbXMsXG5cbiAgICAgICAgLy8gVXBkYXRlIGl0ZW1zIGV2ZW50c1xuICAgICAgICBmaWx0ZXJlZEl0ZW1zQ2hhbmdlcyxcblxuICAgICAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgICAgICBmZXRjaE1vcmVJdGVtc0NoYW5nZXNcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoaXRlbXMgPT4ge1xuICAgICAgICAvLyBNYWtlIHN1cmUgY29udHJvbCB2YWx1ZSBpcyBpbnNpZGUgKG1hdC1zZWxlY3QpXG4gICAgICAgIGlmIChpdGVtcyAmJiAhdGhpcy5zZWFyY2hhYmxlKXtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IHRoaXMuY29tcGFyZVdpdGgoaXRlbSwgdmFsdWUpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIElmIGZvcm0gdmFsdWUgaXMgbWlzc2luZzogYWRkIGl0IHRvIHRoZSBsaXN0XG4gICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEVtaXQgaXRlbXNcbiAgICAgICAgdGhpcy4kZmlsdGVyZWRJdGVtcy5uZXh0KGl0ZW1zKTtcbiAgICAgIH0pKTtcblxuICAgIC8vIEFwcGx5aW5nIGltcGxpY2l0IHZhbHVlLCBvbiBibHVyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMub25CbHVyXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIFNraXAgaWYgbm90IHNlYXJjaGFibGVcbiAgICAgICAgICBmaWx0ZXIoXyA9PiB0aGlzLnNlYXJjaGFibGUpLFxuICAgICAgICAgIG1hcChfID0+IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSggdmFsdWUgPT4ge1xuICAgICAgICAgIC8vIFdoZW4gbGVhdmUgY29tcG9uZW50IHdpdGhvdXQgb2JqZWN0LCB1c2UgaW1wbGljaXQgdmFsdWUgaWYgOlxuICAgICAgICAgIC8vIC0gYW4gZXhwbGljaXQgdmFsdWVcbiAgICAgICAgICAvLyAtIGZpZWxkIGlzIG5vdCBlbXB0eSAodXNlciBmaWxsIHNvbWV0aGluZylcbiAgICAgICAgICAvLyAtIE9SIGZpZWxkIGVtcHR5IGJ1dCBpcyByZXF1aXJlZFxuICAgICAgICAgIGlmICh0aGlzLl9pbXBsaWNpdFZhbHVlICYmICgodGhpcy5yZXF1aXJlZCAmJiBpc05pbE9yQmxhbmsodmFsdWUpKSB8fCAoaXNOb3ROaWxPckJsYW5rKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSkpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9pbXBsaWNpdFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZyh7ZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQZW5kaW5nKHtlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gbnVsbDsgLy8gcmVzZXQgdGhlIGltcGxpY2l0IHZhbHVlXG4gICAgICAgIH0pKTtcblxuICAgIC8vIExpc3RlbiBmb3JtIGNvbnRyb2wgc3RhdHVzIGNoYW5nZVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBzdGF0ZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hlY2tJZlRvdWNoZWQoKSlcbiAgICApXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuJGlucHV0SXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLiRmaWx0ZXJlZEl0ZW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcmVsb2FkJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2ZpbHRlciQuY29tcGxldGUoKTtcblxuICAgIHRoaXMub25Ecm9wQnV0dG9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLm9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLm9uQmx1ci5jb21wbGV0ZSgpO1xuICAgIHRoaXMub25Gb2N1cy5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gbnVsbDtcbiAgICB0aGlzLmRpc3BsYXlXaXRoID0gbnVsbDtcbiAgICB0aGlzLmNvbXBhcmVXaXRoID0gbnVsbDtcbiAgICB0aGlzLnN1Z2dlc3RGbiA9IG51bGw7XG4gICAgdGhpcy4kZmlsdGVyZWRJdGVtcyA9IG51bGw7XG4gICAgdGhpcy5tYXRTZWxlY3RJdGVtcyQgPSBudWxsO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICB0aGlzLmNsYXNzTGlzdCA9IG51bGw7XG5cbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IG51bGxcblxuICAgIC8vIERlc3Ryb3kgdGhlICdhdXRvY29tcGxldGUnIGluc3RhbmNlLCB0byBhdm9pZCBtZW1vcnkgbGVha1xuICAgIHRoaXMubWF0QXV0b0NvbXBsZXRlPy5uZ09uRGVzdHJveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIHJlbG9hZCBjb250ZW50LiBVc2VmdWwgd2hlbiBmaWx0ZXIgaGFzIGJlZW4gY2hhbmdlZCBidXQgbm90IGRldGVjdGVkXG4gICAqL1xuICByZWxvYWRJdGVtcyh2YWx1ZT86IGFueSkge1xuICAgIC8vIEZvcmNlIGEgcmVmcmVzaFxuICAgIHRoaXMuX3JlbG9hZCQubmV4dCh2YWx1ZSB8fCAnKicpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgV3JpdGluZyB2YWx1ZTogXCIsIHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2VsZWN0SW5wdXRDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50O1xuXG4gIGZvY3VzKCkge1xuICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHtcbiAgICAgIGZvY3VzSW5wdXQodGhpcy5tYXRJbnB1dFRleHQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Py5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgLy9ERUJVRyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FuY2VsbGluZyBmb2N1cyBldmVudFwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNDb250ZW50ID0gc2VsZWN0SW5wdXRDb250ZW50KGV2ZW50KTtcbiAgICBpZiAoIWhhc0NvbnRlbnQgfHwgKHRoaXMuc2hvd1BhbmVsT25Gb2N1cyAmJiB0aGlzLnNob3dBbGxPbkZvY3VzKSApIHtcbiAgICAgIC8vREVCVUcgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIEVtaXQgZm9jdXMgZXZlbnRcIik7XG4gICAgICB0aGlzLm9uRm9jdXMuZW1pdChldmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZmlsdGVyTWF0U2VsZWN0Rm9jdXNFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIC8vIERFQlVHXG4gICAgLy8gY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFJlY2VpdmVkIDxtYXQtc2VsZWN0PiBmb2N1cyBldmVudFwiLCBldmVudCk7XG4gICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZmlsdGVyTWF0U2VsZWN0Qmx1ckV2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAvLyBERUJVR1xuICAgIC8vIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCA8bWF0LXNlbGVjdD4gYmx1ciBldmVudFwiLCBldmVudCk7XG5cbiAgICAvLyBJZ25vcmUgZXZlbnQgZnJvbSBtYXQtb3B0aW9uXG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdNQVQtT1BUSU9OJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvLyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FuY2VsbGluZyA8bWF0LXNlbGVjdD4gYmx1ciBldmVudFwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLm9uQmx1ci5lbWl0KGV2ZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRvZ2dsZVNlYXJjaChldmVudDogVUlFdmVudCkge1xuICAgIGNvbnN0IHNlYXJjaGFibGUgPSAhdGhpcy5zZWFyY2hhYmxlO1xuICAgIGlmIChzZWFyY2hhYmxlICYmIHRoaXMuc2VhcmNoYWJsZSAmJiB0aGlzLm1hdElucHV0VGV4dCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoYWJsZSA9IHNlYXJjaGFibGU7XG4gICAgICBpZiAoc2VhcmNoYWJsZSkge1xuICAgICAgICB0aGlzLmFwcEF1dG9mb2N1cyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvd1BhbmVsT25Gb2N1cyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclZhbHVlKGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgX2luaXRJbmZpbml0ZVNjcm9sbCh0aHJlc2hvbGQ/OiBzdHJpbmcpIHtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBJbml0IGF1dG9jb21wbGV0ZSBzY3JvbGwgbGlzdGVuZXInKTtcblxuICAgIGlmICghdGhpcy5tYXRBdXRvQ29tcGxldGUpIHJldHVybiBvZigpO1xuXG4gICAgaWYgKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbmVkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tYXRBdXRvQ29tcGxldGUuX2lzT3BlblxuICAgICAgPyB0aW1lcigwKVxuICAgICAgOiB0aGlzLm1hdEF1dG9Db21wbGV0ZS5vcGVuZWQucGlwZShkZWJvdW5jZVRpbWUoMjAwKSk7XG4gICAgY29uc3Qgc2Nyb2xsRW5kJCA9IG9wZW5lZCRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKF8pID0+IHRoaXMuZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKSksXG4gICAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICAgIHN3aXRjaE1hcCgocGFuZWwpID0+IGZyb21TY3JvbGxFbmRFdmVudChwYW5lbCwgdGhyZXNob2xkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubWF0QXV0b0NvbXBsZXRlLmNsb3NlZClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAvLyBUcmlnZ2VyIGZldGNoIG1vcmUsIGVuZCBlbmQgc2Nyb2xsIHJlYWNoZWRcbiAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24gPSBzY3JvbGxFbmQkXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ZldGNoTW9yZSQuZW1pdCgpKVxuXG4gICAgLy8gUmVnaXN0ZXIgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIHN1Z2dlc3QodmFsdWU6IGFueSwgZmlsdGVyPzogYW55KTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGxldCByZXMgPSBhd2FpdCB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBGaWx0ZXJlZCBpdGVtcyBieSBzdWdnZXN0Rm46JywgdmFsdWUsIHJlcyk7XG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IDA7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IChyZXMgYXMgYW55W10pLmxlbmd0aCB8fCAwO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCB7ZGF0YSwgdG90YWwsIGZldGNoTW9yZX0gPSByZXMgYXMgTG9hZFJlc3VsdDxhbnk+O1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gdG9OdW1iZXIodG90YWwsIGRhdGEgJiYgZGF0YS5sZW5ndGggfHwgMCk7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gZmV0Y2hNb3JlO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSBmZXRjaE1vcmUgJiYgKHRoaXMuX2l0ZW1Db3VudCAtIGRhdGEubGVuZ3RoKSB8fCAwO1xuICAgICAgcmVzID0gZGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcyBhcyBhbnlbXTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hNb3JlKCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoIXRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2spIHJldHVybiBbXTtcblxuICAgIC8vIFNhdmUgdGhlbiByZW1vdmUgZmV0Y2ggZnVuY3Rpb24gKHRvIGF2b2lkIG11bHRpLWNhbGwpXG4gICAgY29uc3QgZmV0Y2hNb3JlRm4gPSB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7ZGF0YSwgdG90YWwsIGZldGNoTW9yZX0gPSBhd2FpdCBmZXRjaE1vcmVGbigpO1xuICAgIHRoaXMuX2l0ZW1Db3VudCA9IHRvdGFsIHx8IHRoaXMuX2l0ZW1Db3VudDtcbiAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gZmV0Y2hNb3JlO1xuICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gTWF0aC5tYXgoMCwgdGhpcy5fbW9yZUl0ZW1zQ291bnQgLSBkYXRhLmxlbmd0aCk7IC8vIEJvcm5lIG1pbiA9IDBcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW1wbGljaXRWYWx1ZShpdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy5zZWFyY2hhYmxlKSB7XG4gICAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IGl0ZW1zWzBdO1xuICAgICAgICAvL3RoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGVsZSA9IHRoaXMubWF0QXV0b0NvbXBsZXRlPy5vcHRpb25zLmxhc3Q/Ll9nZXRIb3N0RWxlbWVudCgpLnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFlbGUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyAnIFVuYWJsZSB0byBmaW5kIHRoZSBhdXRvY29tcGxldGUgZGl2Li4uJyk7XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLiRmaWx0ZXJlZEl0ZW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLiRmaWx0ZXJlZEl0ZW1zLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxufVxuIl19
@@ -5,7 +5,7 @@ import { SharedValidators } from '../../../validator/validators';
5
5
  import { MatAutocompleteConfigHolder } from '../material.autocomplete';
6
6
  import { isNil, isNotNil, suggestFromArray } from '../../../functions';
7
7
  import { BehaviorSubject } from 'rxjs';
8
- export class Entity {
8
+ class EntityTestClass {
9
9
  }
10
10
  const FAKE_ENTITIES = [
11
11
  { id: 1, label: 'AAA', name: 'Item A', description: 'Very long description A', comments: 'Very very long comments... again for A' },
@@ -161,4 +161,4 @@ AutocompleteTestPage.decorators = [
161
161
  AutocompleteTestPage.ctorParameters = () => [
162
162
  { type: FormBuilder }
163
163
  ];
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvdGVzdGluZy9hdXRvY29tcGxldGUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDckUsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSXJDLE1BQU0sT0FBTyxNQUFNO0NBSWxCO0FBRUQsTUFBTSxhQUFhLEdBQUc7SUFDcEIsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLHdDQUF3QyxFQUFDO0lBQ2pJLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSx3Q0FBd0MsRUFBQztJQUNqSSxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsd0NBQXdDLEVBQUM7Q0FDbEksQ0FBQztBQUVGLFNBQVMsUUFBUSxDQUFDLE1BQWlCLEVBQUUs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QUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzdGLENBQUM7SUFFRCw2QkFBNkI7SUFFN0IsU0FBUyxDQUFDLEtBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7OztZQWpLRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsMmxvQkFBdUM7YUFDeEM7OztZQXZDTyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7U2hhcmVkVmFsaWRhdG9yc30gZnJvbSAnLi4vLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXJ9IGZyb20gJy4uL21hdGVyaWFsLmF1dG9jb21wbGV0ZSc7XG5pbXBvcnQge2lzTmlsLCBpc05vdE5pbCwgc3VnZ2VzdEZyb21BcnJheX0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IFRpbWVyID0gTm9kZUpTLlRpbWVyO1xuXG5leHBvcnQgY2xhc3MgRW50aXR5IHtcbiAgaWQ6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBGQUtFX0VOVElUSUVTID0gW1xuICB7aWQ6IDEsIGxhYmVsOiAnQUFBJywgbmFtZTogJ0l0ZW0gQScsIGRlc2NyaXB0aW9uOiAnVmVyeSBsb25nIGRlc2NyaXB0aW9uIEEnLCBjb21tZW50czogJ1ZlcnkgdmVyeSBsb25nIGNvbW1lbnRzLi4uIGFnYWluIGZvciBBJ30sXG4gIHtpZDogMiwgbGFiZWw6ICdCQkInLCBuYW1lOiAnSXRlbSBCJywgZGVzY3JpcHRpb246ICdWZXJ5IGxvbmcgZGVzY3JpcHRpb24gQicsIGNvbW1lbnRzOiAnVmVyeSB2ZXJ5IGxvbmcgY29tbWVudHMuLi4gYWdhaW4gZm9yIEInfSxcbiAge2lkOiAzLCBsYWJlbDogJ0NDQycsIG5hbWU6ICdJdGVtIEMnLCBkZXNjcmlwdGlvbjogJ1ZlcnkgbG9uZyBkZXNjcmlwdGlvbiBDJywgY29tbWVudHM6ICdWZXJ5IHZlcnkgbG9uZyBjb21tZW50cy4uLiBhZ2FpbiBmb3IgQyd9XG5dO1xuXG5mdW5jdGlvbiBkZWVwQ29weSh2YWx1ZXM/OiBFbnRpdHlbXSwgc2l6ZT86IG51bWJlcik6IEVudGl0eVtdIHtcbiAgaWYgKGlzTmlsKHNpemUpKSB7XG4gICAgcmV0dXJuICh2YWx1ZXMgfHwgRkFLRV9FTlRJVElFUykubWFwKGVudGl0eSA9PiBPYmplY3QuYXNzaWduKHt9LCBlbnRpdHkpKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBbXTtcbiAgbGV0IGkgPSAxO1xuICB3aGlsZSAocmVzdWx0Lmxlbmd0aCA8IHNpemUpIHtcbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KCh2YWx1ZXMgfHwgRkFLRV9FTlRJVElFUykubWFwKGVudGl0eSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gZW50aXR5Lm5hbWUgKyAnICMnICsgaTtcbiAgICAgIHJldHVybiB7Li4uZW50aXR5LCBpZDogaSsrLCBuYW1lfTtcbiAgICB9KSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCBzaXplKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWF1dG9jb21wbGV0ZS10ZXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS50ZXN0Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZVRlc3RQYWdlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBfaXRlbXMgPSBkZWVwQ29weShGQUtFX0VOVElUSUVTLCAxMDApO1xuICAkaXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudGl0eVtdPih1bmRlZmluZWQpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgYXV0b2NvbXBsZXRlRmllbGRzID0gbmV3IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcigpO1xuICBtZW1vcnlIaWRlID0gZmFsc2U7XG4gIG1lbW9yeU1vYmlsZSA9IHRydWU7XG4gIG1lbW9yeUF1dG9jb21wbGV0ZUZpZWxkTmFtZSA9ICdlbnRpdHktJGl0ZW1zJztcbiAgbWVtb3J5VGltZXI6IFRpbWVyO1xuXG4gIG1vZGU6ICdtb2JpbGUnfCdkZXNrdG9wJ3wnbWVtb3J5J3wndGVtcCcgPSAnbW9iaWxlJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGVudGl0eTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMuZW50aXR5XSxcbiAgICAgIG1pc3NpbmdFbnRpdHk6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmVudGl0eV0sXG4gICAgICBkaXNhYmxlRW50aXR5OiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5lbnRpdHldLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLmdldCgnZGlzYWJsZUVudGl0eScpLmRpc2FibGUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgLy8gRnJvbSBzdWdnZXN0XG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuYWRkKCdlbnRpdHktc3VnZ2VzdEZuJywge1xuICAgICAgc3VnZ2VzdEZuOiAodmFsdWUsIGZpbHRlcikgPT4gdGhpcy5zdWdnZXN0KHZhbHVlLCBmaWx0ZXIpLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZyxcbiAgICAgIHNob3dBbGxPbkZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgLy8gRnJvbSBpdGVtcyBhcnJheVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LWl0ZW1zJywge1xuICAgICAgaXRlbXM6IHRoaXMuX2l0ZW1zLnNsaWNlKCksXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nXG4gICAgfSk7XG5cbiAgICAvLyBGcm9tICRpdGVtcyBvYnNlcnZhYmxlXG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuYWRkKCdlbnRpdHktJGl0ZW1zJywge1xuICAgICAgaXRlbXM6IHRoaXMuJGl0ZW1zLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZ1xuICAgIH0pO1xuXG4gICAgLy8gRnJvbSAkaXRlbXMgd2l0aCBmaWx0ZXJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1pdGVtcy1maWx0ZXInLCB7XG4gICAgICBzZXJ2aWNlOiB7XG4gICAgICAgIHN1Z2dlc3Q6ICh2YWx1ZSwgZmlsdGVyKSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIGZpbHRlcilcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nXG4gICAgfSk7XG5cbiAgICAvLyBGcm9tIGl0ZW1zXG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuYWRkKCdlbnRpdHktaXRlbXMtbGFyZ2UnLCB7XG4gICAgICBpdGVtczogRkFLRV9FTlRJVElFUy5zbGljZSgpLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2NvbW1lbnRzJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZ1xuICAgIH0pO1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuXG4gIH1cblxuICAvLyBMb2FkIHRoZSBmb3JtIHdpdGggZGF0YVxuICBhc3luYyBsb2FkRGF0YSgpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgZW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVsxXSwgLy8gU2VsZWN0IHRoZSBzZWNvbmRcblxuICAgICAgLy8gVGhpcyBpdGVtIGlzIE5PVCBpbiB0aGUgaXRlbXMgbGlzdCA9PiBpIHNob3VsZCBiZSBkaXNwbGF5ZWQgYW55d2F5XG4gICAgICBtaXNzaW5nRW50aXR5OiB7XG4gICAgICAgIGlkOiAtMSwgbGFiZWw6ICc/PycsIG5hbWU6ICdNaXNzaW5nIGl0ZW0nXG4gICAgICB9LFxuXG4gICAgICBkaXNhYmxlRW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVsyXVxuICAgIH07XG5cbiAgICB0aGlzLmZvcm0uc2V0VmFsdWUoZGF0YSk7XG5cbiAgICAvLyBMb2FkIG9ic2VydmFibGVzXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWRJdGVtcygpLCAxMDAwKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRJdGVtcygpIHtcbiAgICB0aGlzLiRpdGVtcy5uZXh0KHRoaXMuX2l0ZW1zLnNsaWNlKCkpO1xuICB9XG5cbiAgZW50aXR5VG9TdHJpbmcoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIFtpdGVtICYmIGl0ZW0ubGFiZWwgfHwgdW5kZWZpbmVkLCBpdGVtICYmIGl0ZW0ubmFtZSB8fCB1bmRlZmluZWRdLmZpbHRlcihpc05vdE5pbCkuam9pbignIC0gJyk7XG4gIH1cblxuICBhc3luYyBzdWdnZXN0KHZhbHVlOiBhbnksIGZpbHRlcj86IGFueSk6IFByb21pc2U8TG9hZFJlc3VsdDxhbnk+PiB7XG4gICAgZmlsdGVyID0ge29mZnNldDogMCwgc2l6ZTogMzAsIC4uLmZpbHRlcn07XG4gICAgY29uc3QgcmVzID0gc3VnZ2VzdEZyb21BcnJheSh0aGlzLl9pdGVtcywgdmFsdWUsIHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddXG4gICAgfSk7XG4gICAgLy8gU2ltdWxhdGUgYSBzaXplID0gMzBcblxuICAgIGNvbnN0IHRvdGFsID0gcmVzLnRvdGFsIHx8IHJlcy5kYXRhLmxlbmd0aDtcblxuICAgIGNvbnN0IG5leHRPZmZzZXQgPSBmaWx0ZXIub2Zmc2V0ICsgcmVzLmRhdGEubGVuZ3RoXG4gICAgaWYgKG5leHRPZmZzZXQgPCB0b3RhbCkge1xuICAgICAgZmlsdGVyID0gey4uLmZpbHRlciwgb2Zmc2V0OiBuZXh0T2Zmc2V0fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvdGFsLFxuICAgICAgICBkYXRhOiByZXMuZGF0YSxcbiAgICAgICAgZmV0Y2hNb3JlOiAodmFyaWFibGVzKSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIHsuLi5maWx0ZXIsIC4uLnZhcmlhYmxlc30pXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBkb1N1Ym1pdChldmVudCkge1xuXG4gICAgY29uc29sZS5kZWJ1ZygnVmFsaWRhdGUgZm9ybTogJywgdGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIGNvbXBhcmVXaXRoRm4obzE6IEVudGl0eSwgbzI6IEVudGl0eSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvMSAmJiBvMiAmJiBvMS5pZCA9PT0gbzIuaWQ7XG4gIH1cblxuICB0b2dnbGVNb2RlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMubW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zdG9wTWVtb3J5VGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBzdGFydE1lbW9yeVRpbWVyKCkge1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLm1lbW9yeUhpZGUgPSAhdGhpcy5tZW1vcnlIaWRlO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIHN0b3BNZW1vcnlUaW1lcigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMubWVtb3J5VGltZXIpO1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSBudWxsO1xuICAgIHRoaXMubWVtb3J5SGlkZSA9IGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyKGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyOiB7IHNlYXJjaEF0dHJpYnV0ZT86IHN0cmluZyB9ID0gdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuZ2V0KGZpZWxkTmFtZSkuZmlsdGVyIHx8IHt9O1xuICAgIGZpbHRlci5zZWFyY2hBdHRyaWJ1dGUgPSAoIWZpbHRlciB8fCBmaWx0ZXIuc2VhcmNoQXR0cmlidXRlICE9PSAnbmFtZScpID8gJ25hbWUnIDogJ2xhYmVsJztcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgc3RyaW5naWZ5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG59XG5cbiJdfQ==
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvdGVzdGluZy9hdXRvY29tcGxldGUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDckUsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBSXJDLE1BQU0sZUFBZTtDQUlwQjtBQUVELE1BQU0sYUFBYSxHQUFHO0lBQ3BCLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSx3Q0FBd0MsRUFBQztJQUNqSSxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsd0NBQXdDLEVBQUM7SUFDakksRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLHdDQUF3QyxFQUFDO0NBQ2xJLENBQUM7QUFFRixTQUFTLFFBQVEsQ0FBQyxNQUEwQixFQUFFLElBQWE7SUFDekQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDZixPQUFPLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDM0U7SUFFRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRTtRQUMzQixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLHVDQUFXLE1BQU0sS0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFFO1FBQ3BDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDTDtJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQU1ELE1BQU0sT0FBTyxvQkFBb0I7SUFjL0IsWUFDWSxXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWJwQyxXQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQW9CLFNBQVMsQ0FBQyxDQUFDO1FBRzNELHVCQUFrQixHQUFHLElBQUksMkJBQTJCLEVBQUUsQ0FBQztRQUN2RCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGdDQUEyQixHQUFHLGVBQWUsQ0FBQztRQUc5QyxTQUFJLEdBQXVDLFFBQVEsQ0FBQztRQUtsRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUN2QyxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzlDLGFBQWEsRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7U0FDL0MsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVE7UUFFTixlQUFlO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRTtZQUM5QyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7WUFDekQsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDaEMsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFO1lBQzFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUMxQixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYztTQUNqQyxDQUFDLENBQUM7UUFFSCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUU7WUFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7WUFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ2pDLENBQUMsQ0FBQztRQUVILDBCQUEwQjtRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFO1lBQ2pELE9BQU8sRUFBRTtnQkFDUCxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7YUFDeEQ7WUFDRCxVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYztTQUNqQyxDQUFDLENBQUM7UUFFSCxhQUFhO1FBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRTtZQUNoRCxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUM1QixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUM7WUFDeEQsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ2pDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUVsQixDQUFDO0lBRUQsMEJBQTBCO0lBQ3BCLFFBQVE7O1lBQ1osTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsTUFBTSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWxDLHFFQUFxRTtnQkFDckUsYUFBYSxFQUFFO29CQUNiLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFjO2lCQUMxQztnQkFFRCxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxQyxDQUFDO1lBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFekIsbUJBQW1CO1lBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztLQUFBO0lBRUssU0FBUzs7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQztLQUFBO0lBRUQsY0FBYyxDQUFDLElBQVM7UUFDdEIsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFSyxPQUFPLENBQUMsS0FBVSxFQUFFLE1BQVk7O1lBQ3BDLE1BQU0sbUJBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQzFDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxrQ0FDMUMsTUFBTSxLQUNULGdCQUFnQixFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUNuQyxDQUFDO1lBQ0gsdUJBQXVCO1lBRXZCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFFM0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQTtZQUNsRCxJQUFJLFVBQVUsR0FBRyxLQUFLLEVBQUU7Z0JBQ3RCLE1BQU0sbUNBQU8sTUFBTSxLQUFFLE1BQU0sRUFBRSxVQUFVLEdBQUMsQ0FBQztnQkFDekMsT0FBTztvQkFDTCxLQUFLO29CQUNMLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDZCxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxrQ0FBTSxNQUFNLEdBQUssU0FBUyxFQUFFO2lCQUN6RSxDQUFDO2FBQ0g7WUFFRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7S0FBQTtJQUVELFFBQVEsQ0FBQyxLQUFLO1FBRVosT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxhQUFhLENBQUMsRUFBbUIsRUFBRSxFQUFtQjtRQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBSztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsZUFBZTtRQUNiLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFpQjtRQUM1QixNQUFNLE1BQU0sR0FBaUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2pHLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUM3RixDQUFDO0lBRUQsNkJBQTZCO0lBRTdCLFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDOzs7WUFqS0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx1QkFBdUI7Z0JBQ2pDLDJsb0JBQXVDO2FBQ3hDOzs7WUF2Q08sV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtQnVpbGRlciwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1NoYXJlZFZhbGlkYXRvcnN9IGZyb20gJy4uLy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyfSBmcm9tICcuLi9tYXRlcmlhbC5hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtpc05pbCwgaXNOb3ROaWwsIHN1Z2dlc3RGcm9tQXJyYXl9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvYWRSZXN1bHR9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCBUaW1lciA9IE5vZGVKUy5UaW1lcjtcblxuY2xhc3MgRW50aXR5VGVzdENsYXNzIHtcbiAgaWQ6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBGQUtFX0VOVElUSUVTID0gW1xuICB7aWQ6IDEsIGxhYmVsOiAnQUFBJywgbmFtZTogJ0l0ZW0gQScsIGRlc2NyaXB0aW9uOiAnVmVyeSBsb25nIGRlc2NyaXB0aW9uIEEnLCBjb21tZW50czogJ1ZlcnkgdmVyeSBsb25nIGNvbW1lbnRzLi4uIGFnYWluIGZvciBBJ30sXG4gIHtpZDogMiwgbGFiZWw6ICdCQkInLCBuYW1lOiAnSXRlbSBCJywgZGVzY3JpcHRpb246ICdWZXJ5IGxvbmcgZGVzY3JpcHRpb24gQicsIGNvbW1lbnRzOiAnVmVyeSB2ZXJ5IGxvbmcgY29tbWVudHMuLi4gYWdhaW4gZm9yIEInfSxcbiAge2lkOiAzLCBsYWJlbDogJ0NDQycsIG5hbWU6ICdJdGVtIEMnLCBkZXNjcmlwdGlvbjogJ1ZlcnkgbG9uZyBkZXNjcmlwdGlvbiBDJywgY29tbWVudHM6ICdWZXJ5IHZlcnkgbG9uZyBjb21tZW50cy4uLiBhZ2FpbiBmb3IgQyd9XG5dO1xuXG5mdW5jdGlvbiBkZWVwQ29weSh2YWx1ZXM/OiBFbnRpdHlUZXN0Q2xhc3NbXSwgc2l6ZT86IG51bWJlcik6IEVudGl0eVRlc3RDbGFzc1tdIHtcbiAgaWYgKGlzTmlsKHNpemUpKSB7XG4gICAgcmV0dXJuICh2YWx1ZXMgfHwgRkFLRV9FTlRJVElFUykubWFwKGVudGl0eSA9PiBPYmplY3QuYXNzaWduKHt9LCBlbnRpdHkpKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBbXTtcbiAgbGV0IGkgPSAxO1xuICB3aGlsZSAocmVzdWx0Lmxlbmd0aCA8IHNpemUpIHtcbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KCh2YWx1ZXMgfHwgRkFLRV9FTlRJVElFUykubWFwKGVudGl0eSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gZW50aXR5Lm5hbWUgKyAnICMnICsgaTtcbiAgICAgIHJldHVybiB7Li4uZW50aXR5LCBpZDogaSsrLCBuYW1lfTtcbiAgICB9KSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCBzaXplKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWF1dG9jb21wbGV0ZS10ZXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS50ZXN0Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEF1dG9jb21wbGV0ZVRlc3RQYWdlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBfaXRlbXMgPSBkZWVwQ29weShGQUtFX0VOVElUSUVTLCAxMDApO1xuICAkaXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudGl0eVRlc3RDbGFzc1tdPih1bmRlZmluZWQpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgYXV0b2NvbXBsZXRlRmllbGRzID0gbmV3IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcigpO1xuICBtZW1vcnlIaWRlID0gZmFsc2U7XG4gIG1lbW9yeU1vYmlsZSA9IHRydWU7XG4gIG1lbW9yeUF1dG9jb21wbGV0ZUZpZWxkTmFtZSA9ICdlbnRpdHktJGl0ZW1zJztcbiAgbWVtb3J5VGltZXI6IFRpbWVyO1xuXG4gIG1vZGU6ICdtb2JpbGUnfCdkZXNrdG9wJ3wnbWVtb3J5J3wndGVtcCcgPSAnbW9iaWxlJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXG4gICkge1xuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGVudGl0eTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMuZW50aXR5XSxcbiAgICAgIG1pc3NpbmdFbnRpdHk6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmVudGl0eV0sXG4gICAgICBkaXNhYmxlRW50aXR5OiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5lbnRpdHldLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLmdldCgnZGlzYWJsZUVudGl0eScpLmRpc2FibGUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgLy8gRnJvbSBzdWdnZXN0XG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuYWRkKCdlbnRpdHktc3VnZ2VzdEZuJywge1xuICAgICAgc3VnZ2VzdEZuOiAodmFsdWUsIGZpbHRlcikgPT4gdGhpcy5zdWdnZXN0KHZhbHVlLCBmaWx0ZXIpLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZyxcbiAgICAgIHNob3dBbGxPbkZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgLy8gRnJvbSBpdGVtcyBhcnJheVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LWl0ZW1zJywge1xuICAgICAgaXRlbXM6IHRoaXMuX2l0ZW1zLnNsaWNlKCksXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nXG4gICAgfSk7XG5cbiAgICAvLyBGcm9tICRpdGVtcyBvYnNlcnZhYmxlXG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuYWRkKCdlbnRpdHktJGl0ZW1zJywge1xuICAgICAgaXRlbXM6IHRoaXMuJGl0ZW1zLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZ1xuICAgIH0pO1xuXG4gICAgLy8gRnJvbSAkaXRlbXMgd2l0aCBmaWx0ZXJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1pdGVtcy1maWx0ZXInLCB7XG4gICAgICBzZXJ2aWNlOiB7XG4gICAgICAgIHN1Z2dlc3Q6ICh2YWx1ZSwgZmlsdGVyKSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIGZpbHRlcilcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nXG4gICAgfSk7XG5cbiAgICAvLyBGcm9tIGl0ZW1zXG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuYWRkKCdlbnRpdHktaXRlbXMtbGFyZ2UnLCB7XG4gICAgICBpdGVtczogRkFLRV9FTlRJVElFUy5zbGljZSgpLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2NvbW1lbnRzJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZ1xuICAgIH0pO1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuXG4gIH1cblxuICAvLyBMb2FkIHRoZSBmb3JtIHdpdGggZGF0YVxuICBhc3luYyBsb2FkRGF0YSgpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgZW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVsxXSwgLy8gU2VsZWN0IHRoZSBzZWNvbmRcblxuICAgICAgLy8gVGhpcyBpdGVtIGlzIE5PVCBpbiB0aGUgaXRlbXMgbGlzdCA9PiBpIHNob3VsZCBiZSBkaXNwbGF5ZWQgYW55d2F5XG4gICAgICBtaXNzaW5nRW50aXR5OiB7XG4gICAgICAgIGlkOiAtMSwgbGFiZWw6ICc/PycsIG5hbWU6ICdNaXNzaW5nIGl0ZW0nXG4gICAgICB9LFxuXG4gICAgICBkaXNhYmxlRW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVsyXVxuICAgIH07XG5cbiAgICB0aGlzLmZvcm0uc2V0VmFsdWUoZGF0YSk7XG5cbiAgICAvLyBMb2FkIG9ic2VydmFibGVzXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWRJdGVtcygpLCAxMDAwKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRJdGVtcygpIHtcbiAgICB0aGlzLiRpdGVtcy5uZXh0KHRoaXMuX2l0ZW1zLnNsaWNlKCkpO1xuICB9XG5cbiAgZW50aXR5VG9TdHJpbmcoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIFtpdGVtICYmIGl0ZW0ubGFiZWwgfHwgdW5kZWZpbmVkLCBpdGVtICYmIGl0ZW0ubmFtZSB8fCB1bmRlZmluZWRdLmZpbHRlcihpc05vdE5pbCkuam9pbignIC0gJyk7XG4gIH1cblxuICBhc3luYyBzdWdnZXN0KHZhbHVlOiBhbnksIGZpbHRlcj86IGFueSk6IFByb21pc2U8TG9hZFJlc3VsdDxhbnk+PiB7XG4gICAgZmlsdGVyID0ge29mZnNldDogMCwgc2l6ZTogMzAsIC4uLmZpbHRlcn07XG4gICAgY29uc3QgcmVzID0gc3VnZ2VzdEZyb21BcnJheSh0aGlzLl9pdGVtcywgdmFsdWUsIHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddXG4gICAgfSk7XG4gICAgLy8gU2ltdWxhdGUgYSBzaXplID0gMzBcblxuICAgIGNvbnN0IHRvdGFsID0gcmVzLnRvdGFsIHx8IHJlcy5kYXRhLmxlbmd0aDtcblxuICAgIGNvbnN0IG5leHRPZmZzZXQgPSBmaWx0ZXIub2Zmc2V0ICsgcmVzLmRhdGEubGVuZ3RoXG4gICAgaWYgKG5leHRPZmZzZXQgPCB0b3RhbCkge1xuICAgICAgZmlsdGVyID0gey4uLmZpbHRlciwgb2Zmc2V0OiBuZXh0T2Zmc2V0fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvdGFsLFxuICAgICAgICBkYXRhOiByZXMuZGF0YSxcbiAgICAgICAgZmV0Y2hNb3JlOiAodmFyaWFibGVzKSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIHsuLi5maWx0ZXIsIC4uLnZhcmlhYmxlc30pXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBkb1N1Ym1pdChldmVudCkge1xuXG4gICAgY29uc29sZS5kZWJ1ZygnVmFsaWRhdGUgZm9ybTogJywgdGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIGNvbXBhcmVXaXRoRm4obzE6IEVudGl0eVRlc3RDbGFzcywgbzI6IEVudGl0eVRlc3RDbGFzcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvMSAmJiBvMiAmJiBvMS5pZCA9PT0gbzIuaWQ7XG4gIH1cblxuICB0b2dnbGVNb2RlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMubW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zdG9wTWVtb3J5VGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBzdGFydE1lbW9yeVRpbWVyKCkge1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLm1lbW9yeUhpZGUgPSAhdGhpcy5tZW1vcnlIaWRlO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIHN0b3BNZW1vcnlUaW1lcigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMubWVtb3J5VGltZXIpO1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSBudWxsO1xuICAgIHRoaXMubWVtb3J5SGlkZSA9IGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyKGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyOiB7IHNlYXJjaEF0dHJpYnV0ZT86IHN0cmluZyB9ID0gdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuZ2V0KGZpZWxkTmFtZSkuZmlsdGVyIHx8IHt9O1xuICAgIGZpbHRlci5zZWFyY2hBdHRyaWJ1dGUgPSAoIWZpbHRlciB8fCBmaWx0ZXIuc2VhcmNoQXR0cmlidXRlICE9PSAnbmFtZScpID8gJ25hbWUnIDogJ2xhYmVsJztcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgc3RyaW5naWZ5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG59XG5cbiJdfQ==