@norwegian/core-components 6.54.2 → 6.54.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.
@@ -255,11 +255,11 @@ export class AutocompleteNewComponent extends NasComponentBase {
255
255
  return this.model ? 'remove--secondary' : 'remove';
256
256
  }
257
257
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: AutocompleteNewComponent, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
258
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: AutocompleteNewComponent, selector: "nas-autocomplete-new", inputs: { label: "label", placeholder: "placeholder", icon: "icon", items: "items", open: "open", model: "model", disableBackdrop: "disableBackdrop", nasFormControlName: "nasFormControlName", nasFormGroup: "nasFormGroup", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelClear: "ariaLabelClear" }, outputs: { focusOnNext: "focusOnNext", selectedChange: "selectedChange", openChange: "openChange", modelChange: "modelChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "span", first: true, predicate: ["span"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }, { propertyName: "labelElement", first: true, predicate: ["labelDOM"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\"\n [attr.aria-label]=\"label\"\n [nasClass]=\"getClass('wrapper')\" #labelElement>\n <span [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input\n type=\"text\"\n role=\"combobox\"\n aria-haspopup=\"true\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\"\n [nasClass]=\"getClass('input')\"\n [(ngModel)]=\"model\"\n [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"model; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"getLabelId()\"\n [attr.aria-label]=\"label\"\n [nasClass]=\"getClass('wrapper')\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\">{{label}}</span>\n <input #input\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\"\n [formControlName]=\"nasFormControlName\"\n [nasClass]=\"getClass('input')\"\n [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"model; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [id]=\"getResultsId()\"\n [nasClass]=\"getClass('results-wrapper')\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results\n role=\"listbox\"\n *ngIf=\"open\"\n [attr.aria-labelledby]=\"getLabelId()\"\n [nasClass]=\"getClass('results')\">\n <li role=\"option\"\n *ngFor=\"let item of filteredItems\"\n [id]=\"item.id\"\n [nasClass]=\"getClass('list-item', item.id === focused?.id && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', item.id === focused?.id && 'focus')\"\n (click)=\"select(item)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('title')\">{{item.title}}</span>\n <span [nasClass]=\"getClass('preamble')\">{{item.preamble}}</span>\n </button>\n </li>\n </ul>\n</div>\n\n<nas-backdrop *ngIf=\"!exists(disableBackdrop)\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"showBackdrop\"></nas-backdrop>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-autocomplete-new__wrapper{position:relative;display:block;z-index:3}.nas-autocomplete-new__label{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;font-size:14px;line-height:20px;display:block;position:relative;z-index:3;padding:9px 16px 0;background-color:#fff;margin-bottom:none;border:2px solid #6f6f6f;border-bottom:none}.nas-autocomplete-new__input{height:35px;position:relative;z-index:3;line-height:1;margin:0;border:2px solid #6f6f6f;border-top:none;padding:12px 16px}.nas-autocomplete-new__icon{position:absolute;z-index:4;right:24px;bottom:21px}.nas-autocomplete-new__results-wrapper{position:relative;z-index:4;perspective:1000px}.nas-autocomplete-new__results{margin-top:-8px;position:absolute;z-index:3;width:100%;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;border:2px solid #15273f;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:results .65s ease both;scrollbar-width:none;-ms-overflow-style:none}.nas-autocomplete-new__results::-webkit-scrollbar{display:none}.nas-autocomplete-new__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:backdrop .7s ease-out both}.nas-autocomplete-new__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:12px 16px;margin-top:-1px;outline:0;border-bottom:2px solid #E9E7E4}.nas-autocomplete-new__item--focus,.nas-autocomplete-new__item:focus{background-color:#ebf4ff;border-bottom-color:#15273f;border-top:2px solid #15273f}.nas-autocomplete-new__item--focus,.nas-autocomplete-new__item--focus .nas-autocomplete-new__title,.nas-autocomplete-new__item--focus .nas-autocomplete-new__preamble,.nas-autocomplete-new__item:focus,.nas-autocomplete-new__item:focus .nas-autocomplete-new__title,.nas-autocomplete-new__item:focus .nas-autocomplete-new__preamble{color:#15273f}.nas-autocomplete-new__item:hover{background-color:#f8f8f8}.nas-autocomplete-new__title{display:inline-block;font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-autocomplete-new__preamble{display:block;font-size:14px}@keyframes results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}@keyframes backdrop{0%{opacity:0}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "component", type: i5.BackdropComponent, selector: "nas-backdrop", inputs: ["showBackdrop", "ariaLabelBackdrop"], outputs: ["showBackdropChange"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
258
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: AutocompleteNewComponent, selector: "nas-autocomplete-new", inputs: { label: "label", placeholder: "placeholder", icon: "icon", items: "items", open: "open", model: "model", disableBackdrop: "disableBackdrop", nasFormControlName: "nasFormControlName", nasFormGroup: "nasFormGroup", ariaLabelBackdrop: "ariaLabelBackdrop", ariaLabelClear: "ariaLabelClear" }, outputs: { focusOnNext: "focusOnNext", selectedChange: "selectedChange", openChange: "openChange", modelChange: "modelChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }, { propertyName: "span", first: true, predicate: ["span"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }, { propertyName: "labelElement", first: true, predicate: ["labelDOM"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\"\n [attr.aria-label]=\"label\"\n [nasClass]=\"getClass('wrapper')\" #labelElement>\n <span [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input\n type=\"text\"\n role=\"combobox\"\n aria-haspopup=\"true\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\"\n [nasClass]=\"getClass('input')\"\n [(ngModel)]=\"model\"\n [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"model; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"getLabelId()\"\n [attr.aria-label]=\"label\"\n [nasClass]=\"getClass('wrapper')\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\">{{label}}</span>\n <input #input\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\"\n [formControlName]=\"nasFormControlName\"\n [nasClass]=\"getClass('input')\"\n [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"model; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [id]=\"getResultsId()\"\n [nasClass]=\"getClass('results-wrapper')\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results\n role=\"listbox\"\n *ngIf=\"open\"\n [attr.aria-labelledby]=\"getLabelId()\"\n [nasClass]=\"getClass('results')\">\n <li role=\"option\"\n *ngFor=\"let item of filteredItems\"\n [id]=\"item.id\"\n [nasClass]=\"getClass('list-item', item.id === focused?.id && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', item.id === focused?.id && 'focus')\"\n (click)=\"select(item)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('title')\">{{item.title}}</span>\n <span [nasClass]=\"getClass('preamble')\">{{item.preamble}}</span>\n </button>\n </li>\n </ul>\n</div>\n\n<nas-backdrop *ngIf=\"!exists(disableBackdrop)\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"showBackdrop\"></nas-backdrop>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-autocomplete-new__wrapper{position:relative;display:block;z-index:3}.nas-autocomplete-new__label{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;font-size:14px;line-height:20px;display:block;position:relative;z-index:3;padding:9px 16px 0;background-color:#fff;margin-bottom:0;border:2px solid #6f6f6f;border-bottom:0}.nas-autocomplete-new__input{height:35px;position:relative;z-index:3;line-height:1;margin:0;border:2px solid #6f6f6f;border-top:none;padding:12px 16px}.nas-autocomplete-new__icon{position:absolute;z-index:4;right:24px;bottom:21px}.nas-autocomplete-new__results-wrapper{position:relative;z-index:4;perspective:1000px}.nas-autocomplete-new__results{margin-top:-8px;position:absolute;z-index:3;width:100%;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;border:2px solid #15273f;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:results .65s ease both;scrollbar-width:none;-ms-overflow-style:none}.nas-autocomplete-new__results::-webkit-scrollbar{display:none}.nas-autocomplete-new__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:backdrop .7s ease-out both}.nas-autocomplete-new__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:12px 16px;margin-top:-1px;outline:0;border-bottom:2px solid #E9E7E4}.nas-autocomplete-new__item--focus,.nas-autocomplete-new__item:focus{background-color:#ebf4ff;border-bottom-color:#15273f;border-top:2px solid #15273f}.nas-autocomplete-new__item--focus,.nas-autocomplete-new__item--focus .nas-autocomplete-new__title,.nas-autocomplete-new__item--focus .nas-autocomplete-new__preamble,.nas-autocomplete-new__item:focus,.nas-autocomplete-new__item:focus .nas-autocomplete-new__title,.nas-autocomplete-new__item:focus .nas-autocomplete-new__preamble{color:#15273f}.nas-autocomplete-new__item:hover{background-color:#f8f8f8}.nas-autocomplete-new__title{display:inline-block;font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-autocomplete-new__preamble{display:block;font-size:14px}@keyframes results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}@keyframes backdrop{0%{opacity:0}}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NasClassDirective, selector: "[nasClass]", inputs: ["nasClass", "attr.class"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.IconComponent, selector: "nas-icon", inputs: ["icon", "type", "isIndicator", "lightCircularBackground", "cssClass"] }, { kind: "component", type: i5.BackdropComponent, selector: "nas-backdrop", inputs: ["showBackdrop", "ariaLabelBackdrop"], outputs: ["showBackdropChange"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
259
259
  }
260
260
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: AutocompleteNewComponent, decorators: [{
261
261
  type: Component,
262
- args: [{ selector: 'nas-autocomplete-new', template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\"\n [attr.aria-label]=\"label\"\n [nasClass]=\"getClass('wrapper')\" #labelElement>\n <span [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input\n type=\"text\"\n role=\"combobox\"\n aria-haspopup=\"true\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\"\n [nasClass]=\"getClass('input')\"\n [(ngModel)]=\"model\"\n [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"model; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"getLabelId()\"\n [attr.aria-label]=\"label\"\n [nasClass]=\"getClass('wrapper')\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\">{{label}}</span>\n <input #input\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\"\n [formControlName]=\"nasFormControlName\"\n [nasClass]=\"getClass('input')\"\n [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"model; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [id]=\"getResultsId()\"\n [nasClass]=\"getClass('results-wrapper')\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results\n role=\"listbox\"\n *ngIf=\"open\"\n [attr.aria-labelledby]=\"getLabelId()\"\n [nasClass]=\"getClass('results')\">\n <li role=\"option\"\n *ngFor=\"let item of filteredItems\"\n [id]=\"item.id\"\n [nasClass]=\"getClass('list-item', item.id === focused?.id && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', item.id === focused?.id && 'focus')\"\n (click)=\"select(item)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('title')\">{{item.title}}</span>\n <span [nasClass]=\"getClass('preamble')\">{{item.preamble}}</span>\n </button>\n </li>\n </ul>\n</div>\n\n<nas-backdrop *ngIf=\"!exists(disableBackdrop)\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"showBackdrop\"></nas-backdrop>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-autocomplete-new__wrapper{position:relative;display:block;z-index:3}.nas-autocomplete-new__label{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;font-size:14px;line-height:20px;display:block;position:relative;z-index:3;padding:9px 16px 0;background-color:#fff;margin-bottom:none;border:2px solid #6f6f6f;border-bottom:none}.nas-autocomplete-new__input{height:35px;position:relative;z-index:3;line-height:1;margin:0;border:2px solid #6f6f6f;border-top:none;padding:12px 16px}.nas-autocomplete-new__icon{position:absolute;z-index:4;right:24px;bottom:21px}.nas-autocomplete-new__results-wrapper{position:relative;z-index:4;perspective:1000px}.nas-autocomplete-new__results{margin-top:-8px;position:absolute;z-index:3;width:100%;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;border:2px solid #15273f;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:results .65s ease both;scrollbar-width:none;-ms-overflow-style:none}.nas-autocomplete-new__results::-webkit-scrollbar{display:none}.nas-autocomplete-new__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:backdrop .7s ease-out both}.nas-autocomplete-new__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:12px 16px;margin-top:-1px;outline:0;border-bottom:2px solid #E9E7E4}.nas-autocomplete-new__item--focus,.nas-autocomplete-new__item:focus{background-color:#ebf4ff;border-bottom-color:#15273f;border-top:2px solid #15273f}.nas-autocomplete-new__item--focus,.nas-autocomplete-new__item--focus .nas-autocomplete-new__title,.nas-autocomplete-new__item--focus .nas-autocomplete-new__preamble,.nas-autocomplete-new__item:focus,.nas-autocomplete-new__item:focus .nas-autocomplete-new__title,.nas-autocomplete-new__item:focus .nas-autocomplete-new__preamble{color:#15273f}.nas-autocomplete-new__item:hover{background-color:#f8f8f8}.nas-autocomplete-new__title{display:inline-block;font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-autocomplete-new__preamble{display:block;font-size:14px}@keyframes results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}@keyframes backdrop{0%{opacity:0}}\n"] }]
262
+ args: [{ selector: 'nas-autocomplete-new', template: "<ng-container *ngIf=\"!nasFormControlName; else reactiveForm\">\n <label [id]=\"getLabelId()\" (input)=\"onInput($event)\"\n [attr.aria-label]=\"label\"\n [nasClass]=\"getClass('wrapper')\" #labelElement>\n <span [nasClass]=\"getClass('label')\" #span>{{label}}</span>\n <input #input\n type=\"text\"\n role=\"combobox\"\n aria-haspopup=\"true\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\"\n [nasClass]=\"getClass('input')\"\n [(ngModel)]=\"model\"\n [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"model; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-container>\n<ng-template #reactiveForm>\n <label [id]=\"getLabelId()\"\n [attr.aria-label]=\"label\"\n [nasClass]=\"getClass('wrapper')\"\n [formGroup]=\"nasFormGroup\">\n <span [nasClass]=\"getClass('label')\">{{label}}</span>\n <input #input\n type=\"text\"\n role=\"combobox\"\n aria-autocomplete=\"none\"\n autocomplete=\"off\"\n [id]=\"getInputId()\"\n [attr.aria-controls]=\"getResultsId()\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\"\n [attr.aria-owns]=\"getResultsId()\"\n [formControlName]=\"nasFormControlName\"\n [nasClass]=\"getClass('input')\"\n [placeholder]=\"placeholder\"\n (focus)=\"setOpen()\"\n (input)=\"filter()\"\n (click)=\"setOpen()\"\n (keydown)=\"onKeyDown($event)\" />\n <span [nasClass]=\"getClass('icon')\">\n <button type=\"button\"\n role=\"button\"\n tabindex=\"-1\"\n *ngIf=\"model; else isEmpty\"\n [attr.aria-label]=\"ariaLabelClear\"\n (click)=\"clearSelected($event)\">\n <nas-icon [type]=\"setRemoveIcon()\"></nas-icon>\n </button>\n <ng-template #isEmpty>\n <nas-icon [type]=\"'small'\"\n [icon]=\"icon\"></nas-icon>\n </ng-template>\n </span>\n </label>\n</ng-template>\n<div [id]=\"getResultsId()\"\n [nasClass]=\"getClass('results-wrapper')\"\n [attr.aria-expanded]=\"open ? 'true' : 'false'\">\n <ul #results\n role=\"listbox\"\n *ngIf=\"open\"\n [attr.aria-labelledby]=\"getLabelId()\"\n [nasClass]=\"getClass('results')\">\n <li role=\"option\"\n *ngFor=\"let item of filteredItems\"\n [id]=\"item.id\"\n [nasClass]=\"getClass('list-item', item.id === focused?.id && 'focus')\">\n <button type=\"button\"\n [nasClass]=\"getClass('item', item.id === focused?.id && 'focus')\"\n (click)=\"select(item)\"\n tabindex=\"-1\">\n <span [nasClass]=\"getClass('title')\">{{item.title}}</span>\n <span [nasClass]=\"getClass('preamble')\">{{item.preamble}}</span>\n </button>\n </li>\n </ul>\n</div>\n\n<nas-backdrop *ngIf=\"!exists(disableBackdrop)\"\n [ariaLabelBackdrop]=\"ariaLabelBackdrop\"\n [(showBackdrop)]=\"showBackdrop\"></nas-backdrop>", styles: ["@keyframes fade-in{0%{opacity:0}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-30px)}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-30px)}}@keyframes fade-in-right{0%{opacity:0;transform:translate(30px)}}@keyframes fade-out{to{opacity:0}}@keyframes flip-in{0%{opacity:0;transform:rotateX(-90deg)}40%{opacity:1;transform:rotateX(10deg)}}@keyframes flip-out{to{opacity:0;transform:rotateX(-90deg)}}@keyframes pop-in-from-top{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-100,1,1);opacity:0}6.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-30.227,1,1)}13.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,1.76,1,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,7.08,1,1)}26.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,3.838,1,1)}33.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.902,1,1);opacity:1}40%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.237,1,1)}46.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.312,1,1)}53.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.141,1,1)}60%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.021,1,1)}66.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.015,1,1)}73.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.013,1,1)}80%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,.005,1,1)}86.67%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1)}93.33%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}to{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,-.001,1,1);-webkit-transform:translate3d(0,0,0)}}.nas-autocomplete-new__wrapper{position:relative;display:block;z-index:3}.nas-autocomplete-new__label{font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;font-size:14px;line-height:20px;display:block;position:relative;z-index:3;padding:9px 16px 0;background-color:#fff;margin-bottom:0;border:2px solid #6f6f6f;border-bottom:0}.nas-autocomplete-new__input{height:35px;position:relative;z-index:3;line-height:1;margin:0;border:2px solid #6f6f6f;border-top:none;padding:12px 16px}.nas-autocomplete-new__icon{position:absolute;z-index:4;right:24px;bottom:21px}.nas-autocomplete-new__results-wrapper{position:relative;z-index:4;perspective:1000px}.nas-autocomplete-new__results{margin-top:-8px;position:absolute;z-index:3;width:100%;left:0;max-height:50vh;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch;border:2px solid #15273f;background-color:#fff;transform-origin:center top;transform-style:preserve-3d;-webkit-backface-visibility:hidden;backface-visibility:hidden;animation:results .65s ease both;scrollbar-width:none;-ms-overflow-style:none}.nas-autocomplete-new__results::-webkit-scrollbar{display:none}.nas-autocomplete-new__backdrop{display:block;position:fixed;z-index:2;top:0;left:0;width:100%;height:100%;color:transparent;background-color:#0b14202b;animation:backdrop .7s ease-out both}.nas-autocomplete-new__item{display:block;position:relative;z-index:2;width:100%;text-align:left;padding:12px 16px;margin-top:-1px;outline:0;border-bottom:2px solid #E9E7E4}.nas-autocomplete-new__item--focus,.nas-autocomplete-new__item:focus{background-color:#ebf4ff;border-bottom-color:#15273f;border-top:2px solid #15273f}.nas-autocomplete-new__item--focus,.nas-autocomplete-new__item--focus .nas-autocomplete-new__title,.nas-autocomplete-new__item--focus .nas-autocomplete-new__preamble,.nas-autocomplete-new__item:focus,.nas-autocomplete-new__item:focus .nas-autocomplete-new__title,.nas-autocomplete-new__item:focus .nas-autocomplete-new__preamble{color:#15273f}.nas-autocomplete-new__item:hover{background-color:#f8f8f8}.nas-autocomplete-new__title{display:inline-block;font-family:Apercu,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:700;line-height:1;color:#15273f;margin-bottom:3px}.nas-autocomplete-new__preamble{display:block;font-size:14px}@keyframes results{0%{transform:rotateX(-90deg)}40%{transform:rotateX(20deg)}to{transform:rotateX(0)}}@keyframes backdrop{0%{opacity:0}}\n"] }]
263
263
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
264
264
  type: Inject,
265
265
  args: [DOCUMENT]
@@ -380,7 +380,7 @@ export class DatepickerComponent extends NasComponentBase {
380
380
  setFocusOnTimeSelectorOrNext(event) {
381
381
  if (this.timeOptions) {
382
382
  setTimeout(() => {
383
- const selectElement = this.timeSelector.select.nativeElement;
383
+ const selectElement = this.timeSelector?.select?.nativeElement;
384
384
  if (selectElement) {
385
385
  selectElement.focus();
386
386
  }
@@ -562,4 +562,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
562
562
  }], focusOnPreviousChange: [{
563
563
  type: Output
564
564
  }] } });
565
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7OztBQUszRDs7O0dBR0c7QUFPSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBTXZELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxLQUFjO1FBQzdCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTBDRDs7OztPQUlHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGNB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QU9HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFPRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBUUYsY0FBYztzQkFEakIsS0FBSztnQkFpQkcsWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQVFGLFFBQVE7c0JBRFgsS0FBSztnQkE2QkcsV0FBVztzQkFBbkIsS0FBSztnQkFPRyxRQUFRO3NCQUFoQixLQUFLO2dCQU9HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBU0csWUFBWTtzQkFBcEIsS0FBSztnQkFTRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBUUYsS0FBSztzQkFEUixLQUFLO2dCQTZCRixJQUFJO3NCQURQLEtBQUs7Z0JBd0JGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBMkJGLFlBQVk7c0JBRGYsS0FBSztnQkFrREYsWUFBWTtzQkFEZixLQUFLO2dCQTBDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU9JLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT0csVUFBVTtzQkFBbkIsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF5TW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyL21vZGVscy9kYXkubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uTW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyL21vZGVscy9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZU1vZGVsIH0gZnJvbSAnLi9jYWxlbmRhci9jYWxlbmRhci1kYXRlLm1vZGVsJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBEYXRlIFBpY2tlciBDb21wb25lbnQgfCBGdW5jdGlvbmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICB0aW1lT3B0aW9uczogQXJyYXk8U2VsZWN0T3B0aW9uTW9kZWw+O1xuICBtb2RlbDogc3RyaW5nO1xuICBzaG93ID0gZmFsc2U7XG4gIHNlbGVjdGVkVGltZU9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWw7XG5cbiAgZ2V0IHNob3dCYWNrZHJvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93ICYmICF0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVCYWNrZHJvcCk7XG4gIH1cbiAgc2V0IHNob3dCYWNrZHJvcCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnNob3cgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3cgPSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJykgY2FsZW5kYXI6IENhbGVuZGFyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyQ29udGVudCcpIGRhdGVQaWNrZXJDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0aW1lU2VsZWN0b3InKSB0aW1lU2VsZWN0b3I6IFNlbGVjdENvbXBvbmVudDtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyB0byB0aGUgYmFja2Ryb3BzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGJvb2xlYW4gdmFsdWUgd2hlbiBzZXQgd2lsbCBkaXNhYmxlIHNob3dpbmcgdGhlIGJhY2tkcm9wIG9uIHBvcHVwIG9wZW5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVCYWNrZHJvcDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGRhdGVzIGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVBhc3RTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGxvd2VzdCBkYXRlIGFsbG93ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbG93ZXJMaW1pdERhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgbG93ZXJMaW1pdERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAodGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHRoaXMuc2VsZWN0ZWREYXRlLCBkYXRlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VyIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgd2l0aCBhbGwgdGhlIGF2YWlsYWJsZSAoc2VsZWN0YWJsZSkgZGF0ZXMgb2YgdGhlIG1vbnRoLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIGJvb2xlYW4gdmFsdWUgdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIGlucHV0IG9mIHRoZSBkYXRlIHBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFZhbHVlO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZSBob2xkZXIgc3RyaW5nIGZvciB0aGUgaW5wdXQgZm9yIGRhdGUgcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiB0aGlzIHdpbGwgc2V0IHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IHNvIHN1ZXIgaGFzIHRvIGRhdGUtcGlja2VyIHRoZSBkYXRlLlxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgSURzIG9mIHRoZSBlbGVtZW50cyB0aGF0IGRlc2NyaWJlIHRoZSBkYXRlIHBpY2tlciBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFEZXNjcmliZWRieTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFyaWEgbGFiZWwgZm9yIGlucHV0IHRoYXQgZW5hYmxlcyBkYXRlLXBpY2tlciBwb3B1cCBvbmNlIGNsaWNrZWQuIEZvciBhY2Nlc3NpYmlsaXR5IHdlYiBzdGFuZGFyZHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZGlzcGxheSBmb3JtYXQgb2YgdGhlIGRhdGUgd2hlbiB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgZGF0ZSBhbmQgaXQgaXMgYmVpbmcgc2hvd24gaW4gdGhlIGlucHV0IGJveCBmb3IgdGhlIGRhdGUgcGlja2VyLlxuICAgKiBQbGVhc2UgbG9vayBhdCB0aGUgYW5ndWxhciBEYXRlIHBpcGUgZm9yIHZhbGlkIGZvcm1hdHMgYW5kIHZhcmlhdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlRGlzcGxheUZvcm1hdCA9ICdFRUVFIGQsIE1NTU0geXl5eSc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHRpbWUgZGlzcGxheSBmb3JtYXQuXG4gICAqL1xuICBASW5wdXQoKSB0aW1lRGlzcGxheUZvcm1hdCA9ICdISDptbSc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsb2NhbGUgY29kZSBmb3IgdGhlIGxvY2FsZSBmb3JtYXQgcnVsZXMgdG8gdXNlLiBXaGVuIG5vdCBzdXBwbGllZCwgdXNlcyB0aGUgdmFsdWUgb2YgTE9DQUxFX0lELCB3aGljaCBpcyBlbi1VUyBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgcmVnaXN0ZXJMb2NhbGVEYXRhIGlzIGNhbGxlZCB3aXRoIHRoZSByZXNwZWN0aXZlIGxvY2FsZS5cbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZSA9ICdlbi1VUyc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0byByZW1vdmUgdGhlIHBhZGRpbmcgYW5kIG1hcmdpbnMgYXJvdW5kIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgY29tcGFjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIHRpbWVzIHRvIGJlIGFkZGVkIGluIHRoZSB0aW1lIHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHRpbWVzKCk6IEFycmF5PFV0Y0RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy50aW1lc1ZhbHVlO1xuICB9XG4gIHNldCB0aW1lcyh0aW1lczogQXJyYXk8VXRjRGF0ZT4pIHtcbiAgICBpZiAoIXRpbWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50aW1lc1ZhbHVlID0gdGltZXM7XG4gICAgdGhpcy50aW1lT3B0aW9ucyA9IHRpbWVzLm1hcCh4ID0+IHtcbiAgICAgIHgueWVhciA9IG5ldyBEYXRlKCkuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IG9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWwgPSB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVTZXJ2aWNlLmRhdGUoeCksIHRoaXMudGltZURpc3BsYXlGb3JtYXQsICdVVEMnLCB0aGlzLmxvY2FsZSksXG4gICAgICAgIHZhbHVlOiB0aGlzLmRhdGVTZXJ2aWNlLmRhdGUoeCkudG9JU09TdHJpbmcoKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0ZURpc3BsYXlGb3JtYXQgPSAnbWVkaXVtRGF0ZSc7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgY2FsZW5kYXIgaXMgb3BlbiBvciBjbG9zZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgb3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG9wZW4ob3BlbjogYm9vbGVhbikge1xuICAgIGlmIChvcGVuID09PSB0aGlzLm9wZW5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlblZhbHVlID0gb3BlbjtcblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLm9wZW5DYWxlbmRhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXQgc2VsZWN0ZWQgbW9udGguXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRNb250aCgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTW9udGgobW9udGg6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIW1vbnRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgodGhpcy5zZWxlY3RlZE1vbnRoVmFsdWUsIG1vbnRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoVmFsdWUgPSBtb250aDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgc2VsZWN0ZWQgRGF0ZSBpbiB0aGUgZGF0ZSBwaWNrZXIuIFNldHRpbmcgdGhpcyBkYXRlIHdpbGwgaGlnaGxpZ2h0IHRoZSBkYXRlIGluIHRoZSBkYXRlIHBpY2tlclxuICAgKiBhbmQgdXNlciBjYW4gY2hhbmdlIGl0IGJ5IGNsaWNraW5nIGZyb20gYW55IG90aGVyIGVuYWJsZWQgZGF0ZXNcbiAgICogb3IgYnkgbmF2aWdhdGluZyBiZXRyd2VlbiBtb250aHMgYW5kIHNlbGVjdGluZyBmcm9tIGRpZmZlcmVudCBhdmFpbGFibGUgbW9udGguXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWREYXRlKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlLCBkYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGltZVZhbHVlKSB7XG4gICAgICBkYXRlID0gbmV3IFV0Y0RhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRhdGUsIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUuaG91cnMsIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUubWludXRlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcblxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZTogQ2FsZW5kYXJEYXRlTW9kZWwgPSB7XG4gICAgICAgICAgbW9kZWw6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZShkYXRlKSwgdGhpcy5kYXRlRGlzcGxheUZvcm1hdCwgJ1VUQycsIHRoaXMubG9jYWxlKSxcbiAgICAgICAgICBkYXRlOiBkYXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGNhbGVuZGFyRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VydmljZS5kYXRlKGRhdGUpLCB0aGlzLmRhdGVEaXNwbGF5Rm9ybWF0LCAnVVRDJywgdGhpcy5sb2NhbGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLnNob3cpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHRpbWUgaW4gdGhlIHRpbWUgc2VsZWN0b3IuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRUaW1lKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGltZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZFRpbWUodGltZTogVXRjRGF0ZSkge1xuICAgIGlmICghdGltZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUgPSB0aW1lO1xuXG4gICAgaWYgKHRoaXMudGltZU9wdGlvbnMgJiYgdGhpcy50aW1lT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0aW1lT3B0aW9uID0gdGhpcy50aW1lT3B0aW9ucy5maW5kKHggPT4geC52YWx1ZSA9PT0gdGhpcy5kYXRlU2VydmljZS5kYXRlKHRpbWUpLnRvSVNPU3RyaW5nKCkpO1xuXG4gICAgICBpZiAodGltZU9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGltZU9wdGlvbiA9IHRpbWVPcHRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBVdGNEYXRlKFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS55ZWFyLFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5tb250aCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUuZGF0ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZS5ob3VycyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZS5taW51dGVzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgVXRjRGF0ZShcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlLnllYXIsXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZS5tb250aCxcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlLmRhdGUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUuaG91cnMsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUubWludXRlc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFByZXZpb3VzTW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERhdGUgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYnkgY2xpY2tpbmcgaW4gZGF0ZS1waWNrZXIgZGF0ZS1ib3guXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBNb250aCBzZWxlY3RlZCBieSB0aGUgdXNlciBieSBjbGlja2luZyBpbiBkcm9wIGRvd24gZm9yIG1vbnRoIHNlbGVjdGlvbiBvciBtb250aCBuYXZpZ2F0aW9uIGJ1dHRvbnMuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRNb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGNhbGVuZGFyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBhIHVzZXIgaGFzIHByZXNzZWQgc2hpZnQgKyB0YWIgdG8gZ28gdG8gcHJldmlvdXMgY29udHJvbC5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uUHJldmlvdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50PigpO1xuXG4gIGdldCBhY3RpdmVEYXRlKCk6IFV0Y0RhdGUge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSAmJiB0aGlzLmFjdGl2ZURhdGVWYWx1ZSAmJlxuICAgICAgdGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHRoaXMuYWN0aXZlRGF0ZVZhbHVlLCB0aGlzLnNlbGVjdGVkRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlRGF0ZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZVZhbHVlID0gbmV3IFV0Y0RhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBhY3RpdmVEYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAodGhpcy5sb3dlckxpbWl0RGF0ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzTGVzc1RoYW4oZGF0ZSwgdGhpcy5sb3dlckxpbWl0RGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSBkYXRlO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZlRGF0ZVRpbWVvdXQpO1xuXG4gICAgdGhpcy5hY3RpdmVEYXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSksIHRoaXMuZGF0ZURpc3BsYXlGb3JtYXQsICdVVEMnLCB0aGlzLmxvY2FsZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DYWxlbmRhclRpbWVvdXQ6IGFueTtcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVGltZW91dDogYW55O1xuICBwcml2YXRlIHNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIG9wZW5WYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgdGltZXNWYWx1ZTogQXJyYXk8VXRjRGF0ZT47XG4gIHByaXZhdGUgc2VsZWN0ZWRUaW1lVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgc2VsZWN0ZWRNb250aFZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGRpc2FibGVkVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgZm9yY2VOb3RPcGVuQ2FsZW5kYXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb3dlckxpbWl0RGF0ZVZhbHVlOiBVdGNEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZGF0ZVNlcnZpY2U6IERhdGVIZWxwZXIpIHtcbiAgICBzdXBlcignbmFzLWRhdGVwaWNrZXInKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgdGhpcy5uYXNGb3JtR3JvdXBcbiAgICAgICAgLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSlcbiAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdmFsdWU/Lm1vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWU/Lm1vZGVsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IHZhbHVlPy5kYXRlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0S2V5ZG93blNoaWZ0VGFiKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5mb2N1c09uUHJldmlvdXNDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkNhbGVuZGFyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBjdXJyZW50QWN0aXZlRGF0ZSA9IHRoaXMuYWN0aXZlRGF0ZS5kYXRlO1xuICAgIGxldCBkYXRlOiBVdGNEYXRlO1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVFbGVtZW50TW9udGhCdXR0b25zKCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEFjdGl2ZURhdGUrKztcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUobmV3IERhdGUoRGF0ZS5VVEModGhpcy5hY3RpdmVEYXRlLnllYXIsIHRoaXMuYWN0aXZlRGF0ZS5tb250aCwgY3VycmVudEFjdGl2ZURhdGUpKSk7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlRWxlbWVudE1vbnRoQnV0dG9ucygpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRBY3RpdmVEYXRlLS07XG4gICAgICAgIGRhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUobmV3IERhdGUoRGF0ZS5VVEModGhpcy5hY3RpdmVEYXRlLnllYXIsIHRoaXMuYWN0aXZlRGF0ZS5tb250aCwgY3VycmVudEFjdGl2ZURhdGUpKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24pICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNJblRoZVBhc3QoZGF0ZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QWN0aXZlRGF0ZSAtPSA3O1xuICAgICAgICBkYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMuYWN0aXZlRGF0ZS55ZWFyLCB0aGlzLmFjdGl2ZURhdGUubW9udGgsIGN1cnJlbnRBY3RpdmVEYXRlKSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uKSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzSW5UaGVQYXN0KGRhdGUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QWN0aXZlRGF0ZSArPSA3O1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVWYWx1ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLmFjdGl2ZURhdGUueWVhciwgdGhpcy5hY3RpdmVEYXRlLm1vbnRoLCBjdXJyZW50QWN0aXZlRGF0ZSkpKTtcblxuICAgICAgICB0aGlzLnNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcblxuICAgICAgICB0aGlzLmZvcmNlTm90T3BlbkNhbGVuZGFyID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVFbGVtZW50TW9udGhCdXR0b25zKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblRpbWVTZWxlY3RvcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMub3BlbkNhbGVuZGFyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZU9wdGlvbnMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gdGhpcy50aW1lU2VsZWN0b3Iuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChzZWxlY3RFbGVtZW50KSB7XG4gICAgICAgICAgc2VsZWN0RWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c09uTmV4dENoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgfVxuXG4gIG9uTW9udGhDaGFuZ2UoY3VycmVudE1vbnRoOiBVdGNEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gY3VycmVudE1vbnRoO1xuICB9XG5cbiAgb25Nb3VzZURvd25EYXRlcGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkNhbGVuZGFyKCk7XG4gIH1cblxuICBvcGVuQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvdyB8fCB0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9yY2VOb3RPcGVuQ2FsZW5kYXIpIHtcbiAgICAgIHRoaXMuZm9yY2VOb3RPcGVuQ2FsZW5kYXIgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcblxuICAgIGNsZWFyVGltZW91dCh0aGlzLm9wZW5DYWxlbmRhclRpbWVvdXQpO1xuXG4gICAgdGhpcy5vcGVuQ2FsZW5kYXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdCh0aGlzLnNob3cpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBvblRpbWVTZWxlY3RlZChvcHRpb246IFNlbGVjdE9wdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFRpbWUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUob3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIGdldE1haW5DbGFzcygpOiBBcnJheTxDbGFzc01vZGVsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGFpbmVyQ2xhc3MoJycsIFsodGhpcy5leGlzdHMoPGFueT50aGlzLnRpbWVPcHRpb25zKSAmJiAnaGFzLXRpbWUnKSxcbiAgICAodGhpcy5leGlzdHModGhpcy5jb21wYWN0KSAmJiAnY29tcGFjdCcpXSk7XG4gIH1cblxuICBnZXRMYWJlbENsYXNzKCk6IENsYXNzTW9kZWwge1xuICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyLWxhYmVsJywgWydkaXNhYmxlZCddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyLWxhYmVsJyk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vcGVuQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgc2VsZWN0RGF0ZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc01vZGVsVmFsaWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuZGF0ZSgpO1xuXG4gICAgaWYgKCF0aGlzLnNvbWVWYWxpZERheXNFcXVhbHNTZWxlY3RlZERheSh0aGlzLmFjdGl2ZURhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSB0aGlzLmFjdGl2ZURhdGU7XG4gICAgdGhpcy5zZXRGb2N1c09uVGltZVNlbGVjdG9yT3JOZXh0KGV2ZW50KTtcblxuICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIubmV4dE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQgfHxcbiAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIucHJldmlvdXNNb250aFJlZi5uYXRpdmVFbGVtZW50IHx8XG4gICAgICB0aGlzLmNhbGVuZGFyLm1vbnRoU2VsZWN0UmVmICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMuY2FsZW5kYXIubW9udGhTZWxlY3RSZWYuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbG1lbWVudFRvRm9jdXMgPSB0aGlzLmNhbGVuZGFyLmFjdGl2ZURhdGVDZWxsO1xuICAgICAgaWYgKGVsbWVtZW50VG9Gb2N1cykge1xuICAgICAgICBlbG1lbWVudFRvRm9jdXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAyMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01vZGVsVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5wYXJzZSh0aGlzLm1vZGVsKTtcbiAgICByZXR1cm4gaXNOYU4odGltZXN0YW1wKSAhPT0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsRGF5cygpOiBBcnJheTxEYXlNb2RlbD4ge1xuICAgIGNvbnN0IGFsbERheXMgPSBuZXcgQXJyYXk8RGF5TW9kZWw+KCk7XG5cbiAgICBpZiAodGhpcy5jYWxlbmRhcikge1xuICAgICAgdGhpcy5jYWxlbmRhci53ZWVrcy5mb3JFYWNoKHggPT4geCAmJiB4LmRheXMuZm9yRWFjaChkID0+IGFsbERheXMucHVzaChkKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBhbGxEYXlzO1xuICB9XG5cbiAgcHJpdmF0ZSBzb21lVmFsaWREYXlzRXF1YWxzU2VsZWN0ZWREYXkoc2VsZWN0ZWREYXk6IFV0Y0RhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hbGxEYXlzKClcbiAgICAgIC5zb21lKHggPT4geFxuICAgICAgICAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzU2FtZURhdGUodGhpcy5kYXRlU2VydmljZS51dGNEYXRlKHguZGF0ZSksIHNlbGVjdGVkRGF5KVxuICAgICAgICAmJiAoeC5pc0F2YWlsYWJsZSB8fCAheC5pc0Rpc2FibGVkKSk7XG4gIH1cblxuICBwcml2YXRlIGRhdGUoKTogVXRjRGF0ZSB7XG4gICAgY29uc3QgbW9kZWxEYXRlID0gbmV3IERhdGUodGhpcy5tb2RlbCk7XG4gICAgY29uc3QgbW9kZWxVdGNEYXRlID0gbmV3IFV0Y0RhdGUobW9kZWxEYXRlLmdldEZ1bGxZZWFyKCksIG1vZGVsRGF0ZS5nZXRNb250aCgpLCBtb2RlbERhdGUuZ2V0RGF0ZSgpKTtcbiAgICByZXR1cm4gbW9kZWxVdGNEYXRlO1xuICB9XG59XG4iLCI8bGFiZWwgW25hc0NsYXNzXT1cImdldE1haW5DbGFzcygpXCI+XG4gIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlLXBpY2tlci1jb250ZW50JylcIj5cbiAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnZGF0ZS1waWNrZXItd3JhcHBlcicpXCI+XG4gICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnY29udHJvbHMnLCBzaG93ICYmICdhY3RpdmUnKVwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd25EYXRlcGlja2VyKClcIj5cbiAgICAgICAgPGRpdiAjZGF0ZVBpY2tlckNvbnRlbnRcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0TGFiZWxDbGFzcygpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpbnB1dCAjaW5wdXRcbiAgICAgICAgICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyJylcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiYXJpYURlc2NyaWJlZGJ5XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgIChrZXlkb3duLnRhYik9XCJzZWxlY3REYXRlKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJvbklucHV0S2V5ZG93blNoaWZ0VGFiKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlbGVjdERhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uYXJyb3dkb3duKT1cIm9uQ2FsZW5kYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmFycm93bGVmdCk9XCJvbkNhbGVuZGFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5ZG93bi5hcnJvd3JpZ2h0KT1cIm9uQ2FsZW5kYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmFycm93dXApPVwib25DYWxlbmRhcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9wZW5DYWxlbmRhcigpXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm1vZGVsXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2NhbGVuZGFyLWljb24nKVwiPlxuICAgICAgICA8bmFzLWljb24gKm5nSWY9XCJleGlzdHMoZGlzYWJsZWQpOyBlbHNlIHJlZ3VsYXJJY29uXCJcbiAgICAgICAgICBbaWNvbl09XCInY2FsZW5kYXItLWRpc2FibGVkJ1wiXG4gICAgICAgICAgW25nU3R5bGVdPVwieydwb2ludGVyLWV2ZW50cyc6ICdub25lJ31cIj5cbiAgICAgICAgPC9uYXMtaWNvbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWd1bGFySWNvbj5cbiAgICAgICAgICA8bmFzLWljb24gaWNvbj1cImNhbGVuZGFyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ2FsZW5kYXIoKVwiPlxuICAgICAgICAgIDwvbmFzLWljb24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuYXMtY2FsZW5kYXIgI2NhbGVuZGFyICpuZ0lmPVwic2hvd1wiXG4gICAgICAgIFtuYXNGb3JtR3JvdXBdPVwibmFzRm9ybUdyb3VwXCJcbiAgICAgICAgW25hc0Zvcm1Db250cm9sTmFtZV09XCJuYXNGb3JtQ29udHJvbE5hbWVcIlxuICAgICAgICBbZGF0ZURpc3BsYXlGb3JtYXRdPVwiZGF0ZURpc3BsYXlGb3JtYXRcIlxuICAgICAgICBbbm9BdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwibm9BdmFpbGFibGVGbGlnaHRzTGFiZWxcIlxuICAgICAgICBbYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXT1cImF2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgIFthdmFpbGFiaWxpdHldPVwiZXhpc3RzKGF2YWlsYWJpbGl0eSlcIlxuICAgICAgICBbYXZhaWxhYmxlRGF0ZXNdPVwiYXZhaWxhYmxlRGF0ZXNcIlxuICAgICAgICBbbG93ZXJMaW1pdERhdGVdPVwibG93ZXJMaW1pdERhdGVcIlxuICAgICAgICBbZGlzYWJsZVBhc3RTZWxlY3Rpb25dPVwiZXhpc3RzKGRpc2FibGVQYXN0U2VsZWN0aW9uKVwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW2FyaWFMYWJlbFByZXZpb3VzTW9udGhdPVwiYXJpYUxhYmVsUHJldmlvdXNNb250aFwiXG4gICAgICAgIFthcmlhTGFiZWxOZXh0TW9udGhdPVwiYXJpYUxhYmVsTmV4dE1vbnRoXCJcbiAgICAgICAgWyhhY3RpdmVEYXRlKV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgWyhzZWxlY3RlZERhdGUpXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgIChmb2N1c09uTmV4dENoYW5nZSk9XCJzZXRGb2N1c09uVGltZVNlbGVjdG9yT3JOZXh0KCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkNhbGVuZGFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKG1vbnRoQ2hhbmdlKT1cIm9uTW9udGhDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgPC9uYXMtY2FsZW5kYXI+XG4gICAgPC9kaXY+XG4gICAgPG5hcy1iYWNrZHJvcCBbYXJpYUxhYmVsQmFja2Ryb3BdPVwiYXJpYUxhYmVsQmFja2Ryb3BcIlxuICAgICAgWyhzaG93QmFja2Ryb3ApXT1cInNob3dCYWNrZHJvcFwiPjwvbmFzLWJhY2tkcm9wPlxuICA8L2Rpdj5cbjwvbGFiZWw+XG48ZGl2ICpuZ0lmPVwidGltZU9wdGlvbnNcIlxuICBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ3RpbWUtc2VsZWN0b3Itd3JhcHBlcicpXCI+XG4gIDxuYXMtc2VsZWN0ICN0aW1lU2VsZWN0b3JcbiAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRUaW1lT3B0aW9uXCJcbiAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwib25UaW1lU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwib25UaW1lU2VsZWN0b3JLZXlkb3duKCRldmVudClcIj5cbiAgICA8bmFzLW9wdGlvbiAqbmdGb3I9XCJsZXQgdGltZSBvZiB0aW1lT3B0aW9uc1wiXG4gICAgICBbb3B0aW9uXT1cInRpbWVcIj48L25hcy1vcHRpb24+XG4gIDwvbmFzLXNlbGVjdD5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
565
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7OztBQUszRDs7O0dBR0c7QUFPSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZ0JBQWdCO0lBTXZELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxLQUFjO1FBQzdCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDdkIsT0FBTztTQUNSO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTBDRDs7OztPQUlHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFJLGNB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QU9HLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFPRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBUUYsY0FBYztzQkFEakIsS0FBSztnQkFpQkcsWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQVFGLFFBQVE7c0JBRFgsS0FBSztnQkE2QkcsV0FBVztzQkFBbkIsS0FBSztnQkFPRyxRQUFRO3NCQUFoQixLQUFLO2dCQU9HLGVBQWU7c0JBQXZCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQVFHLE1BQU07c0JBQWQsS0FBSztnQkFPRyxPQUFPO3NCQUFmLEtBQUs7Z0JBU0csWUFBWTtzQkFBcEIsS0FBSztnQkFTRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBUUYsS0FBSztzQkFEUixLQUFLO2dCQTZCRixJQUFJO3NCQURQLEtBQUs7Z0JBd0JGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBMkJGLFlBQVk7c0JBRGYsS0FBSztnQkFrREYsWUFBWTtzQkFEZixLQUFLO2dCQTBDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBT0csa0JBQWtCO3NCQUExQixLQUFLO2dCQU9JLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBT0csVUFBVTtzQkFBbkIsTUFBTTtnQkFPRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBT0cscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IE5vcndlZ2lhbiBBaXIgU2h1dHRsZS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF5TW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyL21vZGVscy9kYXkubW9kZWwnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uTW9kZWwgfSBmcm9tICcuL2NhbGVuZGFyL21vZGVscy9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcbmltcG9ydCB7IE5hc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jb3JlL2Jhc2UvbmFzLWNvbXBvbmVudC5iYXNlJztcbmltcG9ydCB7IENsYXNzTW9kZWwgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jbGFzcy5tb2RlbCc7XG5pbXBvcnQgeyBVdGNEYXRlIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvdXRjLWRhdGUubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZUhlbHBlciB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvZGF0ZS9kYXRlLWhlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyRGF0ZU1vZGVsIH0gZnJvbSAnLi9jYWxlbmRhci9jYWxlbmRhci1kYXRlLm1vZGVsJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIE5vcndlZ2lhbiBEYXRlIFBpY2tlciBDb21wb25lbnQgfCBGdW5jdGlvbmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25hcy1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIE5hc0NvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICB0aW1lT3B0aW9uczogQXJyYXk8U2VsZWN0T3B0aW9uTW9kZWw+O1xuICBtb2RlbDogc3RyaW5nO1xuICBzaG93ID0gZmFsc2U7XG4gIHNlbGVjdGVkVGltZU9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWw7XG5cbiAgZ2V0IHNob3dCYWNrZHJvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93ICYmICF0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVCYWNrZHJvcCk7XG4gIH1cbiAgc2V0IHNob3dCYWNrZHJvcCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnNob3cgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3cgPSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyJykgY2FsZW5kYXI6IENhbGVuZGFyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyQ29udGVudCcpIGRhdGVQaWNrZXJDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0aW1lU2VsZWN0b3InKSB0aW1lU2VsZWN0b3I6IFNlbGVjdENvbXBvbmVudDtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzICdhcmlhLWxhYmVsJyB0byB0aGUgYmFja2Ryb3BzLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQmFja2Ryb3A6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBIGJvb2xlYW4gdmFsdWUgd2hlbiBzZXQgd2lsbCBkaXNhYmxlIHNob3dpbmcgdGhlIGJhY2tkcm9wIG9uIHBvcHVwIG9wZW5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVCYWNrZHJvcDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBMYWJlbCBmb3Igbm8gYXZhaWxhYmxlIGZsaWdodHMuXG4gICAqL1xuICBASW5wdXQoKSBub0F2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIExhYmVsIGZvciBhdmFpbGFibGUgZmxpZ2h0cy5cbiAgICovXG4gIEBJbnB1dCgpIGF2YWlsYWJsZUZsaWdodHNMYWJlbDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERpc2FibGUgcG9zc2liaWxpdHkgdG8gc2VsZWN0IGRhdGVzIGluIHRoZSBwYXN0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZVBhc3RTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGxvd2VzdCBkYXRlIGFsbG93ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgbG93ZXJMaW1pdERhdGUoKTogVXRjRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZTtcbiAgfVxuICBzZXQgbG93ZXJMaW1pdERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIHRoaXMubG93ZXJMaW1pdERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAodGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHRoaXMuc2VsZWN0ZWREYXRlLCBkYXRlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXRzIHRoZSBkYXRlcGlja2VyIGluIGF2YWlsYWJpbGl0eSBtb2RlIHdoZXJlIGF2YWlsYWJsZSBkYXRlcyBjYW4gYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhdmFpbGFiaWxpdHk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQW4gYXJyYXkgd2l0aCBhbGwgdGhlIGF2YWlsYWJsZSAoc2VsZWN0YWJsZSkgZGF0ZXMgb2YgdGhlIG1vbnRoLlxuICAgKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlRGF0ZXM6IEFycmF5PFV0Y0RhdGU+O1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIGJvb2xlYW4gdmFsdWUgdG8gZGlzYWJsZSBvciBlbmFibGUgdGhlIGlucHV0IG9mIHRoZSBkYXRlIHBpY2tlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZFZhbHVlO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMubmFzRm9ybUdyb3VwICYmIHRoaXMubmFzRm9ybUNvbnRyb2xOYW1lKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBwbGFjZSBob2xkZXIgc3RyaW5nIGZvciB0aGUgaW5wdXQgZm9yIGRhdGUgcGlja2VyLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiB0aGlzIHdpbGwgc2V0IHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IHNvIHN1ZXIgaGFzIHRvIGRhdGUtcGlja2VyIHRoZSBkYXRlLlxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgSURzIG9mIHRoZSBlbGVtZW50cyB0aGF0IGRlc2NyaWJlIHRoZSBkYXRlIHBpY2tlciBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFEZXNjcmliZWRieTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFyaWEgbGFiZWwgZm9yIGlucHV0IHRoYXQgZW5hYmxlcyBkYXRlLXBpY2tlciBwb3B1cCBvbmNlIGNsaWNrZWQuIEZvciBhY2Nlc3NpYmlsaXR5IHdlYiBzdGFuZGFyZHMuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgZGlzcGxheSBmb3JtYXQgb2YgdGhlIGRhdGUgd2hlbiB1c2VyIGhhcyBzZWxlY3RlZCB0aGUgZGF0ZSBhbmQgaXQgaXMgYmVpbmcgc2hvd24gaW4gdGhlIGlucHV0IGJveCBmb3IgdGhlIGRhdGUgcGlja2VyLlxuICAgKiBQbGVhc2UgbG9vayBhdCB0aGUgYW5ndWxhciBEYXRlIHBpcGUgZm9yIHZhbGlkIGZvcm1hdHMgYW5kIHZhcmlhdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKSBkYXRlRGlzcGxheUZvcm1hdCA9ICdFRUVFIGQsIE1NTU0geXl5eSc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIHRpbWUgZGlzcGxheSBmb3JtYXQuXG4gICAqL1xuICBASW5wdXQoKSB0aW1lRGlzcGxheUZvcm1hdCA9ICdISDptbSc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBsb2NhbGUgY29kZSBmb3IgdGhlIGxvY2FsZSBmb3JtYXQgcnVsZXMgdG8gdXNlLiBXaGVuIG5vdCBzdXBwbGllZCwgdXNlcyB0aGUgdmFsdWUgb2YgTE9DQUxFX0lELCB3aGljaCBpcyBlbi1VUyBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHJlcXVpcmVzIHRoYXQgcmVnaXN0ZXJMb2NhbGVEYXRhIGlzIGNhbGxlZCB3aXRoIHRoZSByZXNwZWN0aXZlIGxvY2FsZS5cbiAgICovXG4gIEBJbnB1dCgpIGxvY2FsZSA9ICdlbi1VUyc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBJbnB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQSBtb2RpZmllciB0byByZW1vdmUgdGhlIHBhZGRpbmcgYW5kIG1hcmdpbnMgYXJvdW5kIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgY29tcGFjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBZGRzIHRoZSBwYXJlbnQncyBmb3JtIGdyb3VwLlxuICAgKiBJdCByZXF1aXJlcyB0aGF0IHRoZSBjb25zdW1lciBpbmNsdWRlZCBSZWFjdGl2ZUZvcm1zTW9kdWxlIGluIGl0J3MgbW9kdWxlLlxuICAgKiBJdCBpcyByZXF1aWVyZWQgdG8gYmUgZmlsbGVkIGlmIG5hc0Zvcm1Db250cm9sTmFtZSBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgYSBmb3JtQ29udHJvbE5hbWUgZGlyZWN0aXZlIHRvIHRoZSBpbnB1dC5cbiAgICogSXQgcmVxdWlyZXMgdGhhdCB0aGUgY29uc3VtZXIgaW5jbHVkZWQgUmVhY3RpdmVGb3Jtc01vZHVsZSBpbiBpdCdzIG1vZHVsZS5cbiAgICogSXQgcmVxdWllcnMgdGhhdCB0aGUgbmFzRm9ybUdyb3VwIGlucHV0IGlzIGZpbGxlZC5cbiAgICovXG4gIEBJbnB1dCgpIG5hc0Zvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEFuIGFycmF5IG9mIHRpbWVzIHRvIGJlIGFkZGVkIGluIHRoZSB0aW1lIHNlbGVjdG9yLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHRpbWVzKCk6IEFycmF5PFV0Y0RhdGU+IHtcbiAgICByZXR1cm4gdGhpcy50aW1lc1ZhbHVlO1xuICB9XG4gIHNldCB0aW1lcyh0aW1lczogQXJyYXk8VXRjRGF0ZT4pIHtcbiAgICBpZiAoIXRpbWVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50aW1lc1ZhbHVlID0gdGltZXM7XG4gICAgdGhpcy50aW1lT3B0aW9ucyA9IHRpbWVzLm1hcCh4ID0+IHtcbiAgICAgIHgueWVhciA9IG5ldyBEYXRlKCkuZ2V0VVRDRnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IG9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWwgPSB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmRhdGVTZXJ2aWNlLmRhdGUoeCksIHRoaXMudGltZURpc3BsYXlGb3JtYXQsICdVVEMnLCB0aGlzLmxvY2FsZSksXG4gICAgICAgIHZhbHVlOiB0aGlzLmRhdGVTZXJ2aWNlLmRhdGUoeCkudG9JU09TdHJpbmcoKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0ZURpc3BsYXlGb3JtYXQgPSAnbWVkaXVtRGF0ZSc7XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGUgY2FsZW5kYXIgaXMgb3BlbiBvciBjbG9zZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgb3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuVmFsdWU7XG4gIH1cbiAgc2V0IG9wZW4ob3BlbjogYm9vbGVhbikge1xuICAgIGlmIChvcGVuID09PSB0aGlzLm9wZW5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub3BlblZhbHVlID0gb3BlbjtcblxuICAgIGlmIChvcGVuKSB7XG4gICAgICB0aGlzLm9wZW5DYWxlbmRhcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBTZXQgc2VsZWN0ZWQgbW9udGguXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRNb250aCgpOiBVdGNEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE1vbnRoVmFsdWU7XG4gIH1cbiAgc2V0IHNlbGVjdGVkTW9udGgobW9udGg6IFV0Y0RhdGUpIHtcbiAgICBpZiAoIW1vbnRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lTW9udGgodGhpcy5zZWxlY3RlZE1vbnRoVmFsdWUsIG1vbnRoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoVmFsdWUgPSBtb250aDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb250aENoYW5nZS5lbWl0KG1vbnRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgb3Igc2V0cyB0aGUgc2VsZWN0ZWQgRGF0ZSBpbiB0aGUgZGF0ZSBwaWNrZXIuIFNldHRpbmcgdGhpcyBkYXRlIHdpbGwgaGlnaGxpZ2h0IHRoZSBkYXRlIGluIHRoZSBkYXRlIHBpY2tlclxuICAgKiBhbmQgdXNlciBjYW4gY2hhbmdlIGl0IGJ5IGNsaWNraW5nIGZyb20gYW55IG90aGVyIGVuYWJsZWQgZGF0ZXNcbiAgICogb3IgYnkgbmF2aWdhdGluZyBiZXRyd2VlbiBtb250aHMgYW5kIHNlbGVjdGluZyBmcm9tIGRpZmZlcmVudCBhdmFpbGFibGUgbW9udGguXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWREYXRlKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZERhdGUoZGF0ZTogVXRjRGF0ZSkge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZVZhbHVlLCBkYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGltZVZhbHVlKSB7XG4gICAgICBkYXRlID0gbmV3IFV0Y0RhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRhdGUsIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUuaG91cnMsIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUubWludXRlcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IGRhdGU7XG5cbiAgICBpZiAodGhpcy5uYXNGb3JtR3JvdXAgJiYgdGhpcy5uYXNGb3JtQ29udHJvbE5hbWUpIHtcblxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmFzRm9ybUdyb3VwLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSk7XG5cbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyRGF0ZTogQ2FsZW5kYXJEYXRlTW9kZWwgPSB7XG4gICAgICAgICAgbW9kZWw6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZShkYXRlKSwgdGhpcy5kYXRlRGlzcGxheUZvcm1hdCwgJ1VUQycsIHRoaXMubG9jYWxlKSxcbiAgICAgICAgICBkYXRlOiBkYXRlXG4gICAgICAgIH07XG5cbiAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKGNhbGVuZGFyRGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1vZGVsID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5kYXRlU2VydmljZS5kYXRlKGRhdGUpLCB0aGlzLmRhdGVEaXNwbGF5Rm9ybWF0LCAnVVRDJywgdGhpcy5sb2NhbGUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGVDaGFuZ2UuZW1pdChkYXRlKTtcblxuICAgIGlmICh0aGlzLnNob3cpIHtcbiAgICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgSW5wdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkIHRpbWUgaW4gdGhlIHRpbWUgc2VsZWN0b3IuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRUaW1lKCk6IFV0Y0RhdGUge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGltZVZhbHVlO1xuICB9XG4gIHNldCBzZWxlY3RlZFRpbWUodGltZTogVXRjRGF0ZSkge1xuICAgIGlmICghdGltZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUgPSB0aW1lO1xuXG4gICAgaWYgKHRoaXMudGltZU9wdGlvbnMgJiYgdGhpcy50aW1lT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0aW1lT3B0aW9uID0gdGhpcy50aW1lT3B0aW9ucy5maW5kKHggPT4geC52YWx1ZSA9PT0gdGhpcy5kYXRlU2VydmljZS5kYXRlKHRpbWUpLnRvSVNPU3RyaW5nKCkpO1xuXG4gICAgICBpZiAodGltZU9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGltZU9wdGlvbiA9IHRpbWVPcHRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBVdGNEYXRlKFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS55ZWFyLFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5tb250aCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUuZGF0ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZS5ob3VycyxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpbWVWYWx1ZS5taW51dGVzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlRGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgVXRjRGF0ZShcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlLnllYXIsXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZS5tb250aCxcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlLmRhdGUsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUuaG91cnMsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaW1lVmFsdWUubWludXRlc1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgcHJldmlvdXMgbW9udGggYnV0dG9uIGluIHRoZSBjYWxlbmRhci5cbiAgICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbFByZXZpb3VzTW9udGg6IHN0cmluZztcblxuICAvKipcbiAgICogQHByb3BlcnR5IElucHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBBUklBIGxhYmVsIGZvciB0aGUgbmV4dCBtb250aCBidXR0b24gaW4gdGhlIGNhbGVuZGFyLlxuICAgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsTmV4dE1vbnRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERhdGUgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgYnkgY2xpY2tpbmcgaW4gZGF0ZS1waWNrZXIgZGF0ZS1ib3guXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVdGNEYXRlPigpO1xuXG4gIC8qKlxuICAgKiBAcHJvcGVydHkgT3V0cHV0XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBNb250aCBzZWxlY3RlZCBieSB0aGUgdXNlciBieSBjbGlja2luZyBpbiBkcm9wIGRvd24gZm9yIG1vbnRoIHNlbGVjdGlvbiBvciBtb250aCBuYXZpZ2F0aW9uIGJ1dHRvbnMuXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRNb250aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXRjRGF0ZT4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhlIGNhbGVuZGFyIGlzIG9wZW4gb3IgY2xvc2VkLlxuICAgKi9cbiAgQE91dHB1dCgpIG9wZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSBPdXRwdXRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBhY3RpdmVseSBjaGFuZ2VkIHRoZSBkYXRlLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvY3VzT25OZXh0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudD4oKTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IE91dHB1dFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogV2hlbiBhIHVzZXIgaGFzIHByZXNzZWQgc2hpZnQgKyB0YWIgdG8gZ28gdG8gcHJldmlvdXMgY29udHJvbC5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2N1c09uUHJldmlvdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50PigpO1xuXG4gIGdldCBhY3RpdmVEYXRlKCk6IFV0Y0RhdGUge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSAmJiB0aGlzLmFjdGl2ZURhdGVWYWx1ZSAmJlxuICAgICAgdGhpcy5kYXRlU2VydmljZS5pc0xlc3NUaGFuKHRoaXMuYWN0aXZlRGF0ZVZhbHVlLCB0aGlzLnNlbGVjdGVkRGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZlRGF0ZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlVmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0ZSkge1xuICAgICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSB0aGlzLnNlbGVjdGVkRGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIHRoaXMuYWN0aXZlRGF0ZVZhbHVlID0gbmV3IFV0Y0RhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRGF0ZVZhbHVlO1xuICB9XG4gIHNldCBhY3RpdmVEYXRlKGRhdGU6IFV0Y0RhdGUpIHtcbiAgICBpZiAodGhpcy5sb3dlckxpbWl0RGF0ZSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzTGVzc1RoYW4oZGF0ZSwgdGhpcy5sb3dlckxpbWl0RGF0ZSwgZmFsc2UsIHRydWUsIHRydWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVEYXRlVmFsdWUgPSBkYXRlO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZlRGF0ZVRpbWVvdXQpO1xuXG4gICAgdGhpcy5hY3RpdmVEYXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuZGF0ZVNlcnZpY2UuZGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSksIHRoaXMuZGF0ZURpc3BsYXlGb3JtYXQsICdVVEMnLCB0aGlzLmxvY2FsZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5DYWxlbmRhclRpbWVvdXQ6IGFueTtcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVGltZW91dDogYW55O1xuICBwcml2YXRlIHNlbGVjdGVkRGF0ZVZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIG9wZW5WYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBhY3RpdmVEYXRlVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgdGltZXNWYWx1ZTogQXJyYXk8VXRjRGF0ZT47XG4gIHByaXZhdGUgc2VsZWN0ZWRUaW1lVmFsdWU6IFV0Y0RhdGU7XG4gIHByaXZhdGUgc2VsZWN0ZWRNb250aFZhbHVlOiBVdGNEYXRlO1xuICBwcml2YXRlIGRpc2FibGVkVmFsdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgZm9yY2VOb3RPcGVuQ2FsZW5kYXIgPSBmYWxzZTtcbiAgcHJpdmF0ZSBsb3dlckxpbWl0RGF0ZVZhbHVlOiBVdGNEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgZGF0ZVNlcnZpY2U6IERhdGVIZWxwZXIpIHtcbiAgICBzdXBlcignbmFzLWRhdGVwaWNrZXInKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5hc0Zvcm1Hcm91cCAmJiB0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSkge1xuICAgICAgdGhpcy5uYXNGb3JtR3JvdXBcbiAgICAgICAgLmdldCh0aGlzLm5hc0Zvcm1Db250cm9sTmFtZSlcbiAgICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlbCA9PT0gdmFsdWU/Lm1vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWU/Lm1vZGVsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVWYWx1ZSA9IHZhbHVlPy5kYXRlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0S2V5ZG93blNoaWZ0VGFiKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5mb2N1c09uUHJldmlvdXNDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkNhbGVuZGFyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGxldCBjdXJyZW50QWN0aXZlRGF0ZSA9IHRoaXMuYWN0aXZlRGF0ZS5kYXRlO1xuICAgIGxldCBkYXRlOiBVdGNEYXRlO1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVFbGVtZW50TW9udGhCdXR0b25zKCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudEFjdGl2ZURhdGUrKztcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUobmV3IERhdGUoRGF0ZS5VVEModGhpcy5hY3RpdmVEYXRlLnllYXIsIHRoaXMuYWN0aXZlRGF0ZS5tb250aCwgY3VycmVudEFjdGl2ZURhdGUpKSk7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlRWxlbWVudE1vbnRoQnV0dG9ucygpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRBY3RpdmVEYXRlLS07XG4gICAgICAgIGRhdGUgPSB0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUobmV3IERhdGUoRGF0ZS5VVEModGhpcy5hY3RpdmVEYXRlLnllYXIsIHRoaXMuYWN0aXZlRGF0ZS5tb250aCwgY3VycmVudEFjdGl2ZURhdGUpKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzYWJsZVBhc3RTZWxlY3Rpb24pICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNJblRoZVBhc3QoZGF0ZSkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QWN0aXZlRGF0ZSAtPSA3O1xuICAgICAgICBkYXRlID0gdGhpcy5kYXRlU2VydmljZS51dGNEYXRlKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMuYWN0aXZlRGF0ZS55ZWFyLCB0aGlzLmFjdGl2ZURhdGUubW9udGgsIGN1cnJlbnRBY3RpdmVEYXRlKSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4aXN0cyh0aGlzLmRpc2FibGVQYXN0U2VsZWN0aW9uKSAmJiB0aGlzLmRhdGVTZXJ2aWNlLmlzSW5UaGVQYXN0KGRhdGUpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZUVsZW1lbnRNb250aEJ1dHRvbnMoKSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50QWN0aXZlRGF0ZSArPSA3O1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVWYWx1ZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLmFjdGl2ZURhdGUueWVhciwgdGhpcy5hY3RpdmVEYXRlLm1vbnRoLCBjdXJyZW50QWN0aXZlRGF0ZSkpKTtcblxuICAgICAgICB0aGlzLnNldEZvY3VzT25BY3RpdmVEYXRlQXN5bmMoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIoKTtcblxuICAgICAgICB0aGlzLmZvcmNlTm90T3BlbkNhbGVuZGFyID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dCkge1xuICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVFbGVtZW50TW9udGhCdXR0b25zKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblRpbWVTZWxlY3RvcktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgIHRoaXMub3BlbkNhbGVuZGFyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZU9wdGlvbnMpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gdGhpcy50aW1lU2VsZWN0b3I/LnNlbGVjdD8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQpIHtcbiAgICAgICAgICBzZWxlY3RFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzT25OZXh0Q2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VDYWxlbmRhcigpO1xuICB9XG5cbiAgb25Nb250aENoYW5nZShjdXJyZW50TW9udGg6IFV0Y0RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkTW9udGggPSBjdXJyZW50TW9udGg7XG4gIH1cblxuICBvbk1vdXNlRG93bkRhdGVwaWNrZXIoKTogdm9pZCB7XG4gICAgdGhpcy5vcGVuQ2FsZW5kYXIoKTtcbiAgfVxuXG4gIG9wZW5DYWxlbmRhcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaG93IHx8IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JjZU5vdE9wZW5DYWxlbmRhcikge1xuICAgICAgdGhpcy5mb3JjZU5vdE9wZW5DYWxlbmRhciA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuc2VsZWN0ZWREYXRlO1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMub3BlbkNhbGVuZGFyVGltZW91dCk7XG5cbiAgICB0aGlzLm9wZW5DYWxlbmRhclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KHRoaXMuc2hvdyk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIG9uVGltZVNlbGVjdGVkKG9wdGlvbjogU2VsZWN0T3B0aW9uTW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVGltZSA9IHRoaXMuZGF0ZVNlcnZpY2UudXRjRGF0ZShvcHRpb24udmFsdWUpO1xuICAgIHRoaXMuZm9jdXNPbk5leHRDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgZ2V0TWFpbkNsYXNzKCk6IEFycmF5PENsYXNzTW9kZWw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb250YWluZXJDbGFzcygnJywgWyh0aGlzLmV4aXN0cyg8YW55PnRoaXMudGltZU9wdGlvbnMpICYmICdoYXMtdGltZScpLFxuICAgICh0aGlzLmV4aXN0cyh0aGlzLmNvbXBhY3QpICYmICdjb21wYWN0JyldKTtcbiAgfVxuXG4gIGdldExhYmVsQ2xhc3MoKTogQ2xhc3NNb2RlbCB7XG4gICAgaWYgKHRoaXMuZXhpc3RzKHRoaXMuZGlzYWJsZWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygnZGF0ZS1waWNrZXItbGFiZWwnLCBbJ2Rpc2FibGVkJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygnZGF0ZS1waWNrZXItbGFiZWwnKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChmYWxzZSk7XG4gIH1cblxuICBzZWxlY3REYXRlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTW9kZWxWYWxpZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5kYXRlKCk7XG5cbiAgICBpZiAoIXRoaXMuc29tZVZhbGlkRGF5c0VxdWFsc1NlbGVjdGVkRGF5KHRoaXMuYWN0aXZlRGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMuYWN0aXZlRGF0ZTtcbiAgICB0aGlzLnNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoZXZlbnQpO1xuXG4gICAgdGhpcy5jbG9zZUNhbGVuZGFyKCk7XG4gIH1cblxuICBwcml2YXRlIGlzQWN0aXZlRWxlbWVudE1vbnRoQnV0dG9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYWxlbmRhci5uZXh0TW9udGhSZWYubmF0aXZlRWxlbWVudCB8fFxuICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoUmVmLm5hdGl2ZUVsZW1lbnQgfHxcbiAgICAgIHRoaXMuY2FsZW5kYXIubW9udGhTZWxlY3RSZWYgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5jYWxlbmRhci5tb250aFNlbGVjdFJlZi5zZWxlY3QubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbkFjdGl2ZURhdGVBc3luYygpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsbWVtZW50VG9Gb2N1cyA9IHRoaXMuY2FsZW5kYXIuYWN0aXZlRGF0ZUNlbGw7XG4gICAgICBpZiAoZWxtZW1lbnRUb0ZvY3VzKSB7XG4gICAgICAgIGVsbWVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBwcml2YXRlIGlzTW9kZWxWYWxpZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLnBhcnNlKHRoaXMubW9kZWwpO1xuICAgIHJldHVybiBpc05hTih0aW1lc3RhbXApICE9PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxEYXlzKCk6IEFycmF5PERheU1vZGVsPiB7XG4gICAgY29uc3QgYWxsRGF5cyA9IG5ldyBBcnJheTxEYXlNb2RlbD4oKTtcblxuICAgIGlmICh0aGlzLmNhbGVuZGFyKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLndlZWtzLmZvckVhY2goeCA9PiB4ICYmIHguZGF5cy5mb3JFYWNoKGQgPT4gYWxsRGF5cy5wdXNoKGQpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbERheXM7XG4gIH1cblxuICBwcml2YXRlIHNvbWVWYWxpZERheXNFcXVhbHNTZWxlY3RlZERheShzZWxlY3RlZERheTogVXRjRGF0ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFsbERheXMoKVxuICAgICAgLnNvbWUoeCA9PiB4XG4gICAgICAgICYmIHRoaXMuZGF0ZVNlcnZpY2UuaXNTYW1lRGF0ZSh0aGlzLmRhdGVTZXJ2aWNlLnV0Y0RhdGUoeC5kYXRlKSwgc2VsZWN0ZWREYXkpXG4gICAgICAgICYmICh4LmlzQXZhaWxhYmxlIHx8ICF4LmlzRGlzYWJsZWQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZGF0ZSgpOiBVdGNEYXRlIHtcbiAgICBjb25zdCBtb2RlbERhdGUgPSBuZXcgRGF0ZSh0aGlzLm1vZGVsKTtcbiAgICBjb25zdCBtb2RlbFV0Y0RhdGUgPSBuZXcgVXRjRGF0ZShtb2RlbERhdGUuZ2V0RnVsbFllYXIoKSwgbW9kZWxEYXRlLmdldE1vbnRoKCksIG1vZGVsRGF0ZS5nZXREYXRlKCkpO1xuICAgIHJldHVybiBtb2RlbFV0Y0RhdGU7XG4gIH1cbn1cbiIsIjxsYWJlbCBbbmFzQ2xhc3NdPVwiZ2V0TWFpbkNsYXNzKClcIj5cbiAgPGRpdiBbbmFzQ2xhc3NdPVwiZ2V0Q2xhc3MoJ2RhdGUtcGlja2VyLWNvbnRlbnQnKVwiPlxuICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdkYXRlLXBpY2tlci13cmFwcGVyJylcIj5cbiAgICAgIDxkaXYgW25hc0NsYXNzXT1cImdldENsYXNzKCdjb250cm9scycsIHNob3cgJiYgJ2FjdGl2ZScpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bkRhdGVwaWNrZXIoKVwiPlxuICAgICAgICA8ZGl2ICNkYXRlUGlja2VyQ29udGVudFxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRMYWJlbENsYXNzKClcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlucHV0ICNpbnB1dFxuICAgICAgICAgIFtuYXNDbGFzc109XCJnZXRDbGFzcygnZGF0ZS1waWNrZXInKVwiXG4gICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkYnlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgICAgKGtleWRvd24udGFiKT1cInNlbGVjdERhdGUoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cIm9uSW5wdXRLZXlkb3duU2hpZnRUYWIoJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VsZWN0RGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwib25DYWxlbmRhcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uYXJyb3dsZWZ0KT1cIm9uQ2FsZW5kYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgIChrZXlkb3duLmFycm93cmlnaHQpPVwib25DYWxlbmRhcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24uYXJyb3d1cCk9XCJvbkNhbGVuZGFyS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAoZm9jdXMpPVwib3BlbkNhbGVuZGFyKClcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWxcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtuYXNDbGFzc109XCJnZXRDbGFzcygnY2FsZW5kYXItaWNvbicpXCI+XG4gICAgICAgIDxuYXMtaWNvbiAqbmdJZj1cImV4aXN0cyhkaXNhYmxlZCk7IGVsc2UgcmVndWxhckljb25cIlxuICAgICAgICAgIFtpY29uXT1cIidjYWxlbmRhci0tZGlzYWJsZWQnXCJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7J3BvaW50ZXItZXZlbnRzJzogJ25vbmUnfVwiPlxuICAgICAgICA8L25hcy1pY29uPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ3VsYXJJY29uPlxuICAgICAgICAgIDxuYXMtaWNvbiBpY29uPVwiY2FsZW5kYXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DYWxlbmRhcigpXCI+XG4gICAgICAgICAgPC9uYXMtaWNvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5hcy1jYWxlbmRhciAjY2FsZW5kYXIgKm5nSWY9XCJzaG93XCJcbiAgICAgICAgW25hc0Zvcm1Hcm91cF09XCJuYXNGb3JtR3JvdXBcIlxuICAgICAgICBbbmFzRm9ybUNvbnRyb2xOYW1lXT1cIm5hc0Zvcm1Db250cm9sTmFtZVwiXG4gICAgICAgIFtkYXRlRGlzcGxheUZvcm1hdF09XCJkYXRlRGlzcGxheUZvcm1hdFwiXG4gICAgICAgIFtub0F2YWlsYWJsZUZsaWdodHNMYWJlbF09XCJub0F2YWlsYWJsZUZsaWdodHNMYWJlbFwiXG4gICAgICAgIFthdmFpbGFibGVGbGlnaHRzTGFiZWxdPVwiYXZhaWxhYmxlRmxpZ2h0c0xhYmVsXCJcbiAgICAgICAgW2F2YWlsYWJpbGl0eV09XCJleGlzdHMoYXZhaWxhYmlsaXR5KVwiXG4gICAgICAgIFthdmFpbGFibGVEYXRlc109XCJhdmFpbGFibGVEYXRlc1wiXG4gICAgICAgIFtsb3dlckxpbWl0RGF0ZV09XCJsb3dlckxpbWl0RGF0ZVwiXG4gICAgICAgIFtkaXNhYmxlUGFzdFNlbGVjdGlvbl09XCJleGlzdHMoZGlzYWJsZVBhc3RTZWxlY3Rpb24pXCJcbiAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICBbYXJpYUxhYmVsUHJldmlvdXNNb250aF09XCJhcmlhTGFiZWxQcmV2aW91c01vbnRoXCJcbiAgICAgICAgW2FyaWFMYWJlbE5leHRNb250aF09XCJhcmlhTGFiZWxOZXh0TW9udGhcIlxuICAgICAgICBbKGFjdGl2ZURhdGUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICBbKHNlbGVjdGVkRGF0ZSldPVwic2VsZWN0ZWREYXRlXCJcbiAgICAgICAgKGZvY3VzT25OZXh0Q2hhbmdlKT1cInNldEZvY3VzT25UaW1lU2VsZWN0b3JPck5leHQoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uQ2FsZW5kYXJLZXlEb3duKCRldmVudClcIlxuICAgICAgICAobW9udGhDaGFuZ2UpPVwib25Nb250aENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8L25hcy1jYWxlbmRhcj5cbiAgICA8L2Rpdj5cbiAgICA8bmFzLWJhY2tkcm9wIFthcmlhTGFiZWxCYWNrZHJvcF09XCJhcmlhTGFiZWxCYWNrZHJvcFwiXG4gICAgICBbKHNob3dCYWNrZHJvcCldPVwic2hvd0JhY2tkcm9wXCI+PC9uYXMtYmFja2Ryb3A+XG4gIDwvZGl2PlxuPC9sYWJlbD5cbjxkaXYgKm5nSWY9XCJ0aW1lT3B0aW9uc1wiXG4gIFtuYXNDbGFzc109XCJnZXRDbGFzcygndGltZS1zZWxlY3Rvci13cmFwcGVyJylcIj5cbiAgPG5hcy1zZWxlY3QgI3RpbWVTZWxlY3RvclxuICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZFRpbWVPcHRpb25cIlxuICAgIChzZWxlY3RlZENoYW5nZSk9XCJvblRpbWVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAoa2V5ZG93bik9XCJvblRpbWVTZWxlY3RvcktleWRvd24oJGV2ZW50KVwiPlxuICAgIDxuYXMtb3B0aW9uICpuZ0Zvcj1cImxldCB0aW1lIG9mIHRpbWVPcHRpb25zXCJcbiAgICAgIFtvcHRpb25dPVwidGltZVwiPjwvbmFzLW9wdGlvbj5cbiAgPC9uYXMtc2VsZWN0PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=