@metadev/lux 0.15.3 → 0.16.0

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.
@@ -348,7 +348,7 @@ AutocompleteComponent.decorators = [
348
348
  useExisting: forwardRef(() => AutocompleteComponent)
349
349
  }
350
350
  ],
351
- styles: ["input,select,textarea{border:solid 1px #495057;border:solid 1px var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:#495057;color:var(--lux-symbol-color, #495057);text-align:center;white-space:nowrap;background:#e9ecef;background:var(--lux-symbol-background, #e9ecef);border:1px solid #495057;border:1px solid var(--lux-input-border-color, #495057);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.rounded,.postfix,.infix,.prefix{border-radius:.25rem;border:1px solid;border:var(--lux-input-border, 1px solid)}.prefix{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.infix{border-radius:0}.postfix{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.lux-autocomplete .lux-autocomplete-box{display:grid;grid-template-columns:1fr -webkit-max-content;grid-template-columns:1fr max-content}.lux-autocomplete input{padding:.1rem 1.5rem .1rem .5rem;padding:var(--lux-autocomplete-input-padding, .1rem 1.5rem .1rem .5rem);text-overflow:ellipsis;grid-row:1;grid-column-start:1;grid-column-end:3}.lux-autocomplete .icon-suggestions{grid-row:1;grid-column:2;width:1.5rem;border:none;background-color:transparent;background:url(/assets/img/suggestions.svg) no-repeat center;background-size:.5rem .5rem;z-index:1;position:relative;left:-1rem}.lux-autocomplete .icon-clear{grid-row:1;grid-column:2;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);border:none;background-color:transparent;background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-autocomplete .icon-dropdown{grid-row:1;grid-column:2;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);height:1.3rem;height:var(--lux-autocomplete-icon-height, 1.3rem);border:none;background-color:transparent;background:url(/assets/img/drop-down-arrow.svg) no-repeat center;background:var(--lux-autocomplete-icon-dropdown, url(/assets/img/drop-down-arrow.svg) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-autocomplete .icon-spinner{grid-row:1;grid-column:2;width:1.5rem;border:none;background-color:transparent;background:url(/assets/img/spinner.svg) no-repeat center;background-size:1.2rem 1.2rem;z-index:1}.lux-completion-list{visibility:collapse;position:absolute;border:1px solid #ccc;margin:0;padding:0;max-height:10rem;overflow:auto;z-index:2}.lux-completion-list ul{list-style:none;margin:0;padding:0}.showCompletion{visibility:visible}.lux-completion-item{background-color:#fff;color:#000;padding:.1rem .5rem;cursor:pointer}.selected{background-color:#2e2eac;color:#fff}.disabled{background-color:#f0f0f0;color:#444}.disabled .selected{background-color:#9898ec;color:#fff}.bold{font-weight:bold}\n"]
351
+ styles: [":focus{z-index:1}input,select,textarea{border:solid 1px #495057;border:solid 1px var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);border:1px solid #495057;border:1px solid var(--lux-input-border-color, #495057);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border:1px solid;border:var(--lux-input-border, 1px solid)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none}.lux-autocomplete .lux-autocomplete-box{display:grid;grid-template-columns:1fr -webkit-max-content;grid-template-columns:1fr max-content}.lux-autocomplete input{padding:.1rem 1.5rem .1rem .5rem;padding:var(--lux-autocomplete-input-padding, .1rem 1.5rem .1rem .5rem);text-overflow:ellipsis;grid-row:1;grid-column-start:1;grid-column-end:3}.lux-autocomplete .icon-suggestions{grid-row:1;grid-column:2;width:1.5rem;border:none;background-color:transparent;background:url(/assets/img/suggestions.svg) no-repeat center;background-size:.5rem .5rem;z-index:1;position:relative;left:-1rem}.lux-autocomplete .icon-clear{grid-row:1;grid-column:2;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);border:none;background-color:transparent;background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-autocomplete .icon-dropdown{grid-row:1;grid-column:2;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);height:1.3rem;height:var(--lux-autocomplete-icon-height, 1.3rem);border:none;background-color:transparent;background:url(/assets/img/drop-down-arrow.svg) no-repeat center;background:var(--lux-autocomplete-icon-dropdown, url(/assets/img/drop-down-arrow.svg) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-autocomplete .icon-spinner{grid-row:1;grid-column:2;width:1.5rem;border:none;background-color:transparent;background:url(/assets/img/spinner.svg) no-repeat center;background-size:1.2rem 1.2rem;z-index:1}.lux-completion-list{visibility:collapse;position:absolute;border:1px solid #ccc;margin:0;padding:0;max-height:10rem;overflow:auto;z-index:2}.lux-completion-list ul{list-style:none;margin:0;padding:0}.showCompletion{visibility:visible}.lux-completion-item{background-color:#fff;color:#000;padding:.1rem .5rem;cursor:pointer}.selected{background-color:#2e2eac;color:#fff}.disabled{background-color:#f0f0f0;color:#444}.disabled .selected{background-color:#9898ec;color:#fff}.bold{font-weight:bold}\n"]
352
352
  },] }
353
353
  ];
354
354
  AutocompleteComponent.ctorParameters = () => [
@@ -207,7 +207,7 @@ DatetimeComponent.idCounter = 0;
207
207
  DatetimeComponent.decorators = [
208
208
  { type: Component, args: [{
209
209
  selector: 'lux-datetime',
210
- template: "<input\n #dateInput\n class=\"prefix\"\n type=\"date\"\n [id]=\"inputId + '$date'\"\n [(ngModel)]=\"dateValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [placeholder]=\"\"\n [ngClass]=\"className\"\n (keyup)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (change)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<input\n #timeInput\n class=\"infix\"\n type=\"time\"\n [id]=\"inputId + '$time'\"\n [(ngModel)]=\"timeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [placeholder]=\"\"\n [step]=\"includeSeconds ? 1 : 60\"\n [ngClass]=\"className\"\n (keyup)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (change)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<ng-container *ngIf=\"!localTime\">\n <div [class]=\"disabled || readonly ? 'postfix symbol' : 'infix symbol'\">\n <span>{{ localTime ? '' : 'UTC' }}</span>\n </div>\n</ng-container>\n<button\n #clearButton\n *ngIf=\"!(disabled || readonly)\"\n class=\"postfix icon-clear\"\n [id]=\"inputId + '$clear'\"\n [ngClass]=\"className\"\n (click)=\"updateDatetime(undefined)\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n",
210
+ template: "<input\n #dateInput\n class=\"rounded-left prefix\"\n type=\"date\"\n [id]=\"inputId + '$date'\"\n [(ngModel)]=\"dateValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [placeholder]=\"\"\n [ngClass]=\"className\"\n (keyup)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (change)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<input\n #timeInput\n class=\"\"\n type=\"time\"\n [id]=\"inputId + '$time'\"\n [(ngModel)]=\"timeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [placeholder]=\"\"\n [step]=\"includeSeconds ? 1 : 60\"\n [ngClass]=\"className\"\n (keyup)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (change)=\"onEventDatetime(dateInput.value, timeInput.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<ng-container *ngIf=\"!localTime\">\n <div [class]=\"disabled || readonly ? 'rounded-right postfix symbol' : 'postfix symbol'\">\n <span>{{ localTime ? '' : 'UTC' }}</span>\n </div>\n</ng-container>\n<button\n #clearButton\n *ngIf=\"!(disabled || readonly)\"\n class=\"rounded-right postfix icon-clear\"\n [id]=\"inputId + '$clear'\"\n [ngClass]=\"className\"\n (click)=\"updateDatetime(undefined)\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.min\">\n {{ userErrors[this.lang].min.replace('$min', lastErrors.min.min) }}\n </div>\n <div *ngIf=\"lastErrors.max\">\n {{ userErrors[this.lang].max.replace('$max', lastErrors.max.max) }}\n </div>\n</div>\n",
211
211
  providers: [
212
212
  {
213
213
  provide: NG_VALUE_ACCESSOR,
@@ -220,7 +220,7 @@ DatetimeComponent.decorators = [
220
220
  useExisting: forwardRef(() => DatetimeComponent)
221
221
  }
222
222
  ],
223
- styles: ["input,select,textarea{border:solid 1px #495057;border:solid 1px var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:#495057;color:var(--lux-symbol-color, #495057);text-align:center;white-space:nowrap;background:#e9ecef;background:var(--lux-symbol-background, #e9ecef);border:1px solid #495057;border:1px solid var(--lux-input-border-color, #495057);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.rounded,.postfix,.infix,.prefix{border-radius:.25rem;border:1px solid;border:var(--lux-input-border, 1px solid)}.prefix{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.infix{border-radius:0}.postfix{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}:host{position:relative;display:flex;align-items:stretch}.readonly{border:none}.readonly:focus{border:none;outline:none}.icon-clear{grid-row:1;grid-column:2;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}\n"]
223
+ styles: [":focus{z-index:1}input,select,textarea{border:solid 1px #495057;border:solid 1px var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);border:1px solid #495057;border:1px solid var(--lux-input-border-color, #495057);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border:1px solid;border:var(--lux-input-border, 1px solid)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none}:host{position:relative;display:flex;align-items:stretch}.readonly{border:none}.readonly:focus{border:none;outline:none}.icon-clear{grid-row:1;grid-column:2;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}\n"]
224
224
  },] }
225
225
  ];
226
226
  DatetimeComponent.ctorParameters = () => [];
@@ -242,4 +242,4 @@ DatetimeComponent.propDecorators = {
242
242
  valueChange: [{ type: Output }],
243
243
  keyPress: [{ type: Output }]
244
244
  };
245
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZGF0ZXRpbWUvZGF0ZXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUtqQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsV0FBVyxFQUNaLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQWtCM0MsTUFBTSxPQUFPLGlCQUFpQjtJQWtHNUI7UUExRkEsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsZUFBVSxHQUE0QixJQUFJLENBQUM7UUFNcEMsY0FBUyxHQUFZLFNBQVMsQ0FBQztRQUMvQixjQUFTLEdBQVksU0FBUyxDQUFDO1FBRS9CLGVBQVUsR0FBRztZQUNsQixFQUFFLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsR0FBRyxFQUFFLHdCQUF3QjtnQkFDN0IsR0FBRyxFQUFFLHdCQUF3QjthQUM5QjtZQUNELEVBQUUsRUFBRTtnQkFDRixRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyxHQUFHLEVBQUUsMEJBQTBCO2dCQUMvQixHQUFHLEVBQUUsMEJBQTBCO2FBQ2hDO1NBQ0YsQ0FBQztRQUdLLFFBQUcsR0FBWSxzQkFBc0IsQ0FBQztRQUV0QyxRQUFHLEdBQVksc0JBQXNCLENBQUM7UUFFdEMsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFFL0Is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OzZCQUVMLEtBQUs7d0JBRUwsS0FBSzttQkFPTCxLQUFLOzJCQUNMLEtBQUs7c0JBQ0wsS0FBSzt3QkFDTCxLQUFLLFNBQUMsWUFBWTt1QkFDbEIsS0FBSzt1QkFFTCxLQUFLO3VCQVNMLEtBQUs7b0JBUUwsS0FBSzswQkF3QkwsTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBBYnN0cmFjdENvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbiAgTkdfVkFMSURBVE9SU1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBhZGRUaW1lem9uZU9mZnNldCxcbiAgaGFzVmFsdWUsXG4gIGlzSW5pdGlhbEFuZEVtcHR5LFxuICBpc1ZhbGlkRGF0ZVxufSBmcm9tICcuLi9oZWxwZXJGbnMnO1xuaW1wb3J0IHsgbGFuZ3VhZ2VEZXRlY3RvciB9IGZyb20gJy4uL2xhbmcnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHV4LWRhdGV0aW1lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXRpbWUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGV0aW1lQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGV0aW1lQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yXG57XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGltZUlucHV0JywgeyBzdGF0aWM6IHRydWUgfSkgdGltZUlucHV0OiBFbGVtZW50UmVmO1xuXG4gIHRvdWNoZWQgPSBmYWxzZTtcbiAgZGlydHkgPSBmYWxzZTtcbiAgbGFzdEVycm9yczogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBzdHJpbmcgfCBib29sZWFuO1xuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcblxuICBwdWJsaWMgZGF0ZVZhbHVlPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgdGltZVZhbHVlPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyB1c2VyRXJyb3JzID0ge1xuICAgIGVuOiB7XG4gICAgICByZXF1aXJlZDogJ1JlcXVpcmVkIGZpZWxkLicsXG4gICAgICBtaW46ICdNaW5pbXVtIHZhbHVlIGlzICRtaW4uJyxcbiAgICAgIG1heDogJ01heGltdW0gdmFsdWUgaXMgJG1heC4nXG4gICAgfSxcbiAgICBlczoge1xuICAgICAgcmVxdWlyZWQ6ICdFbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLFxuICAgICAgbWluOiAnRWwgdmFsb3IgbcOtbmltbyBlcyAkbWluLicsXG4gICAgICBtYXg6ICdFbCB2YWxvciBtw6F4aW1vIGVzICRtYXguJ1xuICAgIH1cbiAgfTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWluPzogc3RyaW5nID0gJzE5MDAtMDEtMDFUMDA6MDA6MDBaJztcbiAgQElucHV0KClcbiAgcHVibGljIG1heD86IHN0cmluZyA9ICcyMTAwLTAxLTAxVDAwOjAwOjAwWic7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbmNsdWRlU2Vjb25kczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2NhbFRpbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGdldCBjbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0NsYXNzTmFtZSgpO1xuICB9XG5cbiAgQElucHV0KCkgbGFuZyA9IGxhbmd1YWdlRGV0ZWN0b3IoKTtcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9ycyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRJZDogc3RyaW5nO1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2OiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgdiA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHRydWUgOiB2O1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdjtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJlcXVpcmVkKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHY7XG4gIH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodiA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjsgLy8gcHJldmVudCBldmVudHMgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VzXG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxBbmRFbXB0eSA9IGlzSW5pdGlhbEFuZEVtcHR5KHRoaXMuX3ZhbHVlLCB2KTtcbiAgICBjb25zdCBkYXRldGltZSA9IG5ldyBEYXRlKHYpO1xuICAgIGlmICghdiB8fCAhaXNWYWxpZERhdGUoZGF0ZXRpbWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLmRhdGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudGltZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGRhdGV0aW1lLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgICAgdGhpcy5zZXRWYWx1ZUluQ29udHJvbChkYXRldGltZSk7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2Uodik7XG4gICAgaWYgKCFpbml0aWFsQW5kRW1wdHkpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcbiAgICB9XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBrZXlQcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICBvbkNoYW5nZSA9IChfdmFsdWUpOiB2b2lkID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG4gIC8vIEVuZCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cblxuICBzZXRWYWx1ZUluQ29udHJvbChkYXRldGltZTogRGF0ZSk6IHZvaWQge1xuICAgIGxldCBvZmZzZXREYXRldGltZVN0cmluZztcbiAgICBpZiAodGhpcy5sb2NhbFRpbWUpIHtcbiAgICAgIG9mZnNldERhdGV0aW1lU3RyaW5nID0gYWRkVGltZXpvbmVPZmZzZXQoZGF0ZXRpbWUpLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXREYXRldGltZVN0cmluZyA9IGRhdGV0aW1lLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgIH1cbiAgICB0aGlzLmRhdGVWYWx1ZSA9IG9mZnNldERhdGV0aW1lU3RyaW5nLnNsaWNlKDAsIDEwKTsgLy8gWVlZWS1NTS1ERFxuICAgIGlmICh0aGlzLmluY2x1ZGVTZWNvbmRzKSB7XG4gICAgICB0aGlzLnRpbWVWYWx1ZSA9IG9mZnNldERhdGV0aW1lU3RyaW5nLnNsaWNlKDExLCAxOSk7IC8vIGhoOm1tOnNzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGltZVZhbHVlID0gb2Zmc2V0RGF0ZXRpbWVTdHJpbmcuc2xpY2UoMTEsIDE2KTsgLy8gaGg6bW1cbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0b3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoKTogdm9pZCB7fVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgbGV0IHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIWhhc1ZhbHVlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LnJlcXVpcmVkID0geyB2YWx1ZSwgcmVhc29uOiAnUmVxdWlyZWQgZmllbGQuJyB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdGhpcy5taW4gPT09ICdzdHJpbmcnICYmXG4gICAgICBoYXNWYWx1ZSh2YWx1ZSkgJiZcbiAgICAgIFN0cmluZyh2YWx1ZSkubG9jYWxlQ29tcGFyZSh0aGlzLm1pbikgPT09IC0xXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWluID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWlufS5gXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdGhpcy5tYXggPT09ICdzdHJpbmcnICYmXG4gICAgICBoYXNWYWx1ZSh2YWx1ZSkgJiZcbiAgICAgIFN0cmluZyh2YWx1ZSkubG9jYWxlQ29tcGFyZSh0aGlzLm1heCkgIT09IC0xXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWF4ID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoYW4gbWF4aW11bSB2YWx1ZTogJHt0aGlzLm1heH0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JzID0gcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gRW5kIG9mIFZhbGlkYXRvciBpbnRlcmZhY2VcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0SWQgPSB0aGlzLmlucHV0SWRcbiAgICAgID8gdGhpcy5pbnB1dElkXG4gICAgICA6IGBkYXRldGltZSQke0RhdGV0aW1lQ29tcG9uZW50LmlkQ291bnRlcisrfWA7XG4gICAgdGhpcy5zZXRQYXR0ZXJucygpO1xuICB9XG5cbiAgdXBkYXRlRGF0ZXRpbWUobmV3VmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRldGltZSA9IG5ldyBEYXRlKG5ld1ZhbHVlKTtcbiAgICAgIGlmIChpc1ZhbGlkRGF0ZShkYXRldGltZSkpIHtcbiAgICAgICAgbGV0IGRhdGV0aW1lU3RyaW5nO1xuICAgICAgICBpZiAodGhpcy5sb2NhbFRpbWUpIHtcbiAgICAgICAgICBkYXRldGltZVN0cmluZyA9IGRhdGV0aW1lLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGV0aW1lU3RyaW5nID0gYWRkVGltZXpvbmVPZmZzZXQoZGF0ZXRpbWUpLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluY2x1ZGVTZWNvbmRzKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGV0aW1lU3RyaW5nLnNsaWNlKDAsIDE5KSArICdaJzsgLy8gWVlZWS1NTS1ERFRoaDptbTpzc1pcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZXRpbWVTdHJpbmcuc2xpY2UoMCwgMTYpICsgJ1onOyAvLyBZWVlZLU1NLUREVGhoOm1tWlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Mb3N0Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25LZXlVcChuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRldGltZShuZXdWYWx1ZSk7XG4gIH1cbiAgb25DaGFuZ2VWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRldGltZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5UHJlc3MuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkV2ZW50RGF0ZXRpbWUobmV3RGF0ZTogc3RyaW5nLCBuZXdUaW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW5ld0RhdGUgJiYgIW5ld1RpbWUpIHtcbiAgICAgIHRoaXMudXBkYXRlRGF0ZXRpbWUobnVsbCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRGF0ZXRpbWUobmV3RGF0ZSArICcgJyArIG5ld1RpbWUpO1xuICB9XG5cbiAgY2hlY2tDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICdyZWFkb25seSc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHNldFBhdHRlcm5zKCk6IHZvaWQge1xuICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgJzE5MDAtMDEtMDEnO1xuICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgJzIxMDAtMDEtMDEnO1xuICB9XG59XG4iXX0=
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZGF0ZXRpbWUvZGF0ZXRpbWUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUtqQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsV0FBVyxFQUNaLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQWtCM0MsTUFBTSxPQUFPLGlCQUFpQjtJQWtHNUI7UUExRkEsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsZUFBVSxHQUE0QixJQUFJLENBQUM7UUFNcEMsY0FBUyxHQUFZLFNBQVMsQ0FBQztRQUMvQixjQUFTLEdBQVksU0FBUyxDQUFDO1FBRS9CLGVBQVUsR0FBRztZQUNsQixFQUFFLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsR0FBRyxFQUFFLHdCQUF3QjtnQkFDN0IsR0FBRyxFQUFFLHdCQUF3QjthQUM5QjtZQUNELEVBQUUsRUFBRTtnQkFDRixRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyxHQUFHLEVBQUUsMEJBQTBCO2dCQUMvQixHQUFHLEVBQUUsMEJBQTBCO2FBQ2hDO1NBQ0YsQ0FBQztRQUdLLFFBQUcsR0FBWSxzQkFBc0IsQ0FBQztRQUV0QyxRQUFHLEdBQVksc0JBQXNCLENBQUM7UUFFdEMsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFFL0Is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OzZCQUVMLEtBQUs7d0JBRUwsS0FBSzttQkFPTCxLQUFLOzJCQUNMLEtBQUs7c0JBQ0wsS0FBSzt3QkFDTCxLQUFLLFNBQUMsWUFBWTt1QkFDbEIsS0FBSzt1QkFFTCxLQUFLO3VCQVNMLEtBQUs7b0JBUUwsS0FBSzswQkF3QkwsTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBBYnN0cmFjdENvbnRyb2wsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcixcbiAgTkdfVkFMSURBVE9SU1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBhZGRUaW1lem9uZU9mZnNldCxcbiAgaGFzVmFsdWUsXG4gIGlzSW5pdGlhbEFuZEVtcHR5LFxuICBpc1ZhbGlkRGF0ZVxufSBmcm9tICcuLi9oZWxwZXJGbnMnO1xuaW1wb3J0IHsgbGFuZ3VhZ2VEZXRlY3RvciB9IGZyb20gJy4uL2xhbmcnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHV4LWRhdGV0aW1lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGV0aW1lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZXRpbWUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGV0aW1lQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXRpbWVDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGV0aW1lQ29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yXG57XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGltZUlucHV0JywgeyBzdGF0aWM6IHRydWUgfSkgdGltZUlucHV0OiBFbGVtZW50UmVmO1xuXG4gIHRvdWNoZWQgPSBmYWxzZTtcbiAgZGlydHkgPSBmYWxzZTtcbiAgbGFzdEVycm9yczogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBzdHJpbmcgfCBib29sZWFuO1xuICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcblxuICBwdWJsaWMgZGF0ZVZhbHVlPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuICBwdWJsaWMgdGltZVZhbHVlPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyB1c2VyRXJyb3JzID0ge1xuICAgIGVuOiB7XG4gICAgICByZXF1aXJlZDogJ1JlcXVpcmVkIGZpZWxkLicsXG4gICAgICBtaW46ICdNaW5pbXVtIHZhbHVlIGlzICRtaW4uJyxcbiAgICAgIG1heDogJ01heGltdW0gdmFsdWUgaXMgJG1heC4nXG4gICAgfSxcbiAgICBlczoge1xuICAgICAgcmVxdWlyZWQ6ICdFbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLFxuICAgICAgbWluOiAnRWwgdmFsb3IgbcOtbmltbyBlcyAkbWluLicsXG4gICAgICBtYXg6ICdFbCB2YWxvciBtw6F4aW1vIGVzICRtYXguJ1xuICAgIH1cbiAgfTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWluPzogc3RyaW5nID0gJzE5MDAtMDEtMDFUMDA6MDA6MDBaJztcbiAgQElucHV0KClcbiAgcHVibGljIG1heD86IHN0cmluZyA9ICcyMTAwLTAxLTAxVDAwOjAwOjAwWic7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbmNsdWRlU2Vjb25kczogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2NhbFRpbWU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGdldCBjbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0NsYXNzTmFtZSgpO1xuICB9XG5cbiAgQElucHV0KCkgbGFuZyA9IGxhbmd1YWdlRGV0ZWN0b3IoKTtcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9ycyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRJZDogc3RyaW5nO1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2OiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgdiA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHRydWUgOiB2O1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdjtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJlcXVpcmVkKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHY7XG4gIH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodiA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjsgLy8gcHJldmVudCBldmVudHMgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VzXG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxBbmRFbXB0eSA9IGlzSW5pdGlhbEFuZEVtcHR5KHRoaXMuX3ZhbHVlLCB2KTtcbiAgICBjb25zdCBkYXRldGltZSA9IG5ldyBEYXRlKHYpO1xuICAgIGlmICghdiB8fCAhaXNWYWxpZERhdGUoZGF0ZXRpbWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICB0aGlzLmRhdGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMudGltZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IGRhdGV0aW1lLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgICAgdGhpcy5zZXRWYWx1ZUluQ29udHJvbChkYXRldGltZSk7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2Uodik7XG4gICAgaWYgKCFpbml0aWFsQW5kRW1wdHkpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcbiAgICB9XG4gIH1cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBrZXlQcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICBvbkNoYW5nZSA9IChfdmFsdWUpOiB2b2lkID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG4gIC8vIEVuZCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cblxuICBzZXRWYWx1ZUluQ29udHJvbChkYXRldGltZTogRGF0ZSk6IHZvaWQge1xuICAgIGxldCBvZmZzZXREYXRldGltZVN0cmluZztcbiAgICBpZiAodGhpcy5sb2NhbFRpbWUpIHtcbiAgICAgIG9mZnNldERhdGV0aW1lU3RyaW5nID0gYWRkVGltZXpvbmVPZmZzZXQoZGF0ZXRpbWUpLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXREYXRldGltZVN0cmluZyA9IGRhdGV0aW1lLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgIH1cbiAgICB0aGlzLmRhdGVWYWx1ZSA9IG9mZnNldERhdGV0aW1lU3RyaW5nLnNsaWNlKDAsIDEwKTsgLy8gWVlZWS1NTS1ERFxuICAgIGlmICh0aGlzLmluY2x1ZGVTZWNvbmRzKSB7XG4gICAgICB0aGlzLnRpbWVWYWx1ZSA9IG9mZnNldERhdGV0aW1lU3RyaW5nLnNsaWNlKDExLCAxOSk7IC8vIGhoOm1tOnNzXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGltZVZhbHVlID0gb2Zmc2V0RGF0ZXRpbWVTdHJpbmcuc2xpY2UoMTEsIDE2KTsgLy8gaGg6bW1cbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0b3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoKTogdm9pZCB7fVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgbGV0IHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIWhhc1ZhbHVlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LnJlcXVpcmVkID0geyB2YWx1ZSwgcmVhc29uOiAnUmVxdWlyZWQgZmllbGQuJyB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdGhpcy5taW4gPT09ICdzdHJpbmcnICYmXG4gICAgICBoYXNWYWx1ZSh2YWx1ZSkgJiZcbiAgICAgIFN0cmluZyh2YWx1ZSkubG9jYWxlQ29tcGFyZSh0aGlzLm1pbikgPT09IC0xXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWluID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWluOiB0aGlzLm1pbixcbiAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWlufS5gXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgdGhpcy5tYXggPT09ICdzdHJpbmcnICYmXG4gICAgICBoYXNWYWx1ZSh2YWx1ZSkgJiZcbiAgICAgIFN0cmluZyh2YWx1ZSkubG9jYWxlQ29tcGFyZSh0aGlzLm1heCkgIT09IC0xXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWF4ID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgZ3JlYXRlciB0aGFuIHRoYW4gbWF4aW11bSB2YWx1ZTogJHt0aGlzLm1heH0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JzID0gcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLy8gRW5kIG9mIFZhbGlkYXRvciBpbnRlcmZhY2VcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0SWQgPSB0aGlzLmlucHV0SWRcbiAgICAgID8gdGhpcy5pbnB1dElkXG4gICAgICA6IGBkYXRldGltZSQke0RhdGV0aW1lQ29tcG9uZW50LmlkQ291bnRlcisrfWA7XG4gICAgdGhpcy5zZXRQYXR0ZXJucygpO1xuICB9XG5cbiAgdXBkYXRlRGF0ZXRpbWUobmV3VmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbmV3VmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRldGltZSA9IG5ldyBEYXRlKG5ld1ZhbHVlKTtcbiAgICAgIGlmIChpc1ZhbGlkRGF0ZShkYXRldGltZSkpIHtcbiAgICAgICAgbGV0IGRhdGV0aW1lU3RyaW5nO1xuICAgICAgICBpZiAodGhpcy5sb2NhbFRpbWUpIHtcbiAgICAgICAgICBkYXRldGltZVN0cmluZyA9IGRhdGV0aW1lLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGV0aW1lU3RyaW5nID0gYWRkVGltZXpvbmVPZmZzZXQoZGF0ZXRpbWUpLnRvSVNPU3RyaW5nKCk7IC8vIFlZWVktTU0tRERUaGg6bW06c3MuU1NTWlxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmluY2x1ZGVTZWNvbmRzKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGV0aW1lU3RyaW5nLnNsaWNlKDAsIDE5KSArICdaJzsgLy8gWVlZWS1NTS1ERFRoaDptbTpzc1pcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZXRpbWVTdHJpbmcuc2xpY2UoMCwgMTYpICsgJ1onOyAvLyBZWVlZLU1NLUREVGhoOm1tWlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Mb3N0Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25LZXlVcChuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRldGltZShuZXdWYWx1ZSk7XG4gIH1cbiAgb25DaGFuZ2VWYWx1ZShuZXdWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVEYXRldGltZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5UHJlc3MuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkV2ZW50RGF0ZXRpbWUobmV3RGF0ZTogc3RyaW5nLCBuZXdUaW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIW5ld0RhdGUgJiYgIW5ld1RpbWUpIHtcbiAgICAgIHRoaXMudXBkYXRlRGF0ZXRpbWUobnVsbCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRGF0ZXRpbWUobmV3RGF0ZSArICcgJyArIG5ld1RpbWUpO1xuICB9XG5cbiAgY2hlY2tDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICdyZWFkb25seSc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHNldFBhdHRlcm5zKCk6IHZvaWQge1xuICAgIHRoaXMubWluID0gdGhpcy5taW4gfHwgJzE5MDAtMDEtMDEnO1xuICAgIHRoaXMubWF4ID0gdGhpcy5tYXggfHwgJzIxMDAtMDEtMDEnO1xuICB9XG59XG4iXX0=
@@ -123,7 +123,7 @@ FilterComponent.decorators = [
123
123
  useExisting: forwardRef(() => FilterComponent)
124
124
  }
125
125
  ],
126
- styles: ["input,select,textarea{border:solid 1px #495057;border:solid 1px var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:#495057;color:var(--lux-symbol-color, #495057);text-align:center;white-space:nowrap;background:#e9ecef;background:var(--lux-symbol-background, #e9ecef);border:1px solid #495057;border:1px solid var(--lux-input-border-color, #495057);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.rounded,.postfix,.infix,.prefix{border-radius:.25rem;border:1px solid;border:var(--lux-input-border, 1px solid)}.prefix{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.infix{border-radius:0}.postfix{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}.filter{display:grid;grid-template-columns:auto 1.5rem 1.5rem .5rem auto}.filter input{grid-row:1;grid-column-start:1;grid-column-end:4}.filter .hide{visibility:collapse}.filter .clear-indicator{grid-row:1;grid-column:2;border:none}.filter .search-indicator{grid-row:1;grid-column:3}.filter .btn-search{grid-row:1;grid-column:5}.filter .icon-search{background:url(/assets/img/filter-search.png) no-repeat center;background:var(--lux-filter-icon-search, url(/assets/img/filter-search.png) no-repeat center);background-size:1rem;background-size:var(--lux-filter-icon-bg-size, 1rem);background-position:center;width:1rem;width:var(--lux-filter-icon-width, 1rem)}.filter .icon-clear{background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-filter-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:1rem;background-size:var(--lux-filter-icon-bg-size, 1rem);background-position:center}\n"]
126
+ styles: [":focus{z-index:1}input,select,textarea{border:solid 1px #495057;border:solid 1px var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);border:1px solid #495057;border:1px solid var(--lux-input-border-color, #495057);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border:1px solid;border:var(--lux-input-border, 1px solid)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none}.filter{display:grid;grid-template-columns:auto 1.5rem 1.5rem .5rem auto}.filter input{grid-row:1;grid-column-start:1;grid-column-end:4}.filter .hide{visibility:collapse}.filter .clear-indicator{grid-row:1;grid-column:2;border:none}.filter .search-indicator{grid-row:1;grid-column:3}.filter .btn-search{grid-row:1;grid-column:5}.filter .icon-search{background:url(/assets/img/filter-search.png) no-repeat center;background:var(--lux-filter-icon-search, url(/assets/img/filter-search.png) no-repeat center);background-size:1rem;background-size:var(--lux-filter-icon-bg-size, 1rem);background-position:center;width:1rem;width:var(--lux-filter-icon-width, 1rem)}.filter .icon-clear{background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-filter-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:1rem;background-size:var(--lux-filter-icon-bg-size, 1rem);background-position:center}\n"]
127
127
  },] }
128
128
  ];
129
129
  FilterComponent.ctorParameters = () => [];
@@ -1,6 +1,6 @@
1
- import { Component, Input, Output, EventEmitter, ElementRef, ViewChild, forwardRef } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
3
- import { isInitialAndEmpty, isValidNumber, roundToMultipleOf } from '../helperFns';
1
+ import { Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
2
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { exists, isInitialAndEmpty, isValidNumber, roundToMultipleOf } from '../helperFns';
4
4
  import { languageDetector } from '../lang';
5
5
  import { ModalService } from '../modal/modal.service';
6
6
  import { GeolocationService } from './geolocation.service';
@@ -14,36 +14,52 @@ export class GeolocationComponent {
14
14
  this.latitudeValue = null;
15
15
  this.longitudeValue = null;
16
16
  this.isValidNumber = isValidNumber;
17
- this.userErrors = {
17
+ this.i18n = {
18
18
  en: {
19
- required: 'Required field.',
20
- minLatitude: 'Minimum latitude is $minLatitude.',
21
- maxLatitude: 'Maximum latitude is $maxLatitude.',
22
- minLongitude: 'Minimum longitude is $minLongitude.',
23
- maxLongitude: 'Maximum longitude is $maxLongitude.'
19
+ lat: 'latitude',
20
+ lon: 'longitude',
21
+ selectLocation: 'Select location',
22
+ location: 'Location',
23
+ selectAction: 'Select',
24
+ cancelAction: 'Cancel',
25
+ closeAction: 'Close',
26
+ typeToSearch: 'type to search',
27
+ cardinalPoints: {
28
+ north: 'N',
29
+ south: 'S',
30
+ east: 'E',
31
+ west: 'W'
32
+ },
33
+ userErrors: {
34
+ required: 'Required field.',
35
+ minLatitude: 'Minimum latitude is $minLatitude.',
36
+ maxLatitude: 'Maximum latitude is $maxLatitude.',
37
+ minLongitude: 'Minimum longitude is $minLongitude.',
38
+ maxLongitude: 'Maximum longitude is $maxLongitude.'
39
+ }
24
40
  },
25
41
  es: {
26
- required: 'El campo es obligatorio.',
27
- minLatitude: 'La latitud mínima es $minLatitude.',
28
- maxLatitude: 'La latitud máxima es $maxLatitude.',
29
- minLongitude: 'La longitud mínima es $minLongitude.',
30
- maxLongitude: 'La longitud máxima es $maxLongitude.'
31
- }
32
- };
33
- this.cardinalPoints = {
34
- en: {
35
- north: 'N',
36
- south: 'S',
37
- east: 'E',
38
- west: 'W',
39
- unknown: '?'
40
- },
41
- es: {
42
- north: 'N',
43
- south: 'S',
44
- east: 'E',
45
- west: 'O',
46
- unknown: '?'
42
+ lat: 'latitud',
43
+ lon: 'longitud',
44
+ selectLocation: 'Seleccione ubicación',
45
+ location: 'Ubicación',
46
+ selectAction: 'Seleccionar',
47
+ cancelAction: 'Cancelar',
48
+ closeAction: 'Cerrar',
49
+ typeToSearch: 'escribe para buscar',
50
+ cardinalPoints: {
51
+ north: 'N',
52
+ south: 'S',
53
+ east: 'E',
54
+ west: 'O'
55
+ },
56
+ userErrors: {
57
+ required: 'El campo es obligatorio.',
58
+ minLatitude: 'La latitud mínima es $minLatitude.',
59
+ maxLatitude: 'La latitud máxima es $maxLatitude.',
60
+ minLongitude: 'La longitud mínima es $minLongitude.',
61
+ maxLongitude: 'La longitud máxima es $maxLongitude.'
62
+ }
47
63
  }
48
64
  };
49
65
  this.lang = languageDetector();
@@ -128,48 +144,40 @@ export class GeolocationComponent {
128
144
  validate(control) {
129
145
  const value = control.value;
130
146
  let result = null;
131
- if (this.required && (value === null || value === undefined)) {
147
+ if (this.required && !exists(value)) {
132
148
  result = result || {};
133
149
  result.required = { value, reason: 'Required field.' };
134
150
  }
135
- if (this.minLatitude !== undefined &&
136
- this.minLatitude !== null &&
137
- this.latitudeValue < this.minLatitude) {
151
+ if (exists(this.minLatitude) && this.latitudeValue < this.minLatitude) {
138
152
  result = result || {};
139
153
  result.minLatitude = {
140
154
  value,
141
155
  min: this.minLatitude,
142
- reason: `Value is lower than minimum value: ${this.minLatitude}.`
156
+ reason: `Latitude is lower than minimum value: ${this.minLatitude}.`
143
157
  };
144
158
  }
145
- if (this.maxLatitude !== undefined &&
146
- this.maxLatitude !== null &&
147
- this.latitudeValue < this.maxLatitude) {
159
+ if (exists(this.maxLatitude) && this.latitudeValue > this.maxLatitude) {
148
160
  result = result || {};
149
161
  result.maxLatitude = {
150
162
  value,
151
163
  max: this.maxLatitude,
152
- reason: `Value is lower than maximum value: ${this.maxLatitude}.`
164
+ reason: `Latitude is higher than maximum value: ${this.maxLatitude}.`
153
165
  };
154
166
  }
155
- if (this.minLongitude !== undefined &&
156
- this.minLongitude !== null &&
157
- this.longitudeValue < this.minLongitude) {
167
+ if (exists(this.minLongitude) && this.longitudeValue < this.minLongitude) {
158
168
  result = result || {};
159
169
  result.minLongitude = {
160
170
  value,
161
171
  min: this.minLongitude,
162
- reason: `Value is lower than minimum value: ${this.minLongitude}.`
172
+ reason: `Longitude is lower than minimum value: ${this.minLongitude}.`
163
173
  };
164
174
  }
165
- if (this.maxLongitude !== undefined &&
166
- this.maxLongitude !== null &&
167
- this.longitudeValue < this.maxLongitude) {
175
+ if (exists(this.maxLongitude) && this.longitudeValue > this.maxLongitude) {
168
176
  result = result || {};
169
177
  result.maxLongitude = {
170
178
  value,
171
179
  max: this.maxLongitude,
172
- reason: `Value is lower than maximum value: ${this.maxLongitude}.`
180
+ reason: `Longitude is higher than maximum value: ${this.maxLongitude}.`
173
181
  };
174
182
  }
175
183
  this.lastErrors = result;
@@ -186,28 +194,49 @@ export class GeolocationComponent {
186
194
  if (this.disabled || this.readonly) {
187
195
  return;
188
196
  }
189
- this.value = {
190
- type: 'Point',
191
- coordinates: [this.longitudeValue, newLatitude]
192
- };
197
+ if (isValidNumber(this.longitudeValue)) {
198
+ this.value = {
199
+ type: 'Point',
200
+ coordinates: [this.longitudeValue, newLatitude]
201
+ };
202
+ }
203
+ else {
204
+ this.value = {
205
+ type: 'Point',
206
+ coordinates: [0, newLatitude]
207
+ };
208
+ }
193
209
  }
194
210
  updateLongitude(newLongitude) {
195
211
  if (this.disabled || this.readonly) {
196
212
  return;
197
213
  }
198
- this.value = {
199
- type: 'Point',
200
- coordinates: [newLongitude, this.latitudeValue]
201
- };
214
+ if (isValidNumber(this.latitudeValue)) {
215
+ this.value = {
216
+ type: 'Point',
217
+ coordinates: [newLongitude, this.latitudeValue]
218
+ };
219
+ }
220
+ else {
221
+ this.value = {
222
+ type: 'Point',
223
+ coordinates: [newLongitude, 0]
224
+ };
225
+ }
202
226
  }
203
227
  updateLatitudeAndLongitude(newLatitudeAndLongitude) {
204
228
  if (this.disabled || this.readonly) {
205
229
  return;
206
230
  }
207
- this.value = {
208
- type: 'Point',
209
- coordinates: newLatitudeAndLongitude
210
- };
231
+ if (!exists(newLatitudeAndLongitude)) {
232
+ this.value = undefined;
233
+ }
234
+ else {
235
+ this.value = {
236
+ type: 'Point',
237
+ coordinates: newLatitudeAndLongitude
238
+ };
239
+ }
211
240
  }
212
241
  roundToStepAndUpdateLatitudeAndLongitude(newLatitudeAndLongitude) {
213
242
  const newLatitude = roundToMultipleOf(newLatitudeAndLongitude[1], this.step);
@@ -215,6 +244,9 @@ export class GeolocationComponent {
215
244
  if (this.disabled || this.readonly) {
216
245
  return;
217
246
  }
247
+ if (!exists(newLatitudeAndLongitude)) {
248
+ this.value = undefined;
249
+ }
218
250
  this.value = {
219
251
  type: 'Point',
220
252
  coordinates: [newLongitude, newLatitude]
@@ -227,11 +259,19 @@ export class GeolocationComponent {
227
259
  if (isValidNumber(newLatitude)) {
228
260
  this.updateLatitude(+newLatitude);
229
261
  }
262
+ else {
263
+ this.updateLatitude(undefined);
264
+ }
265
+ this.markAsTouched();
230
266
  }
231
267
  onEventLongitude(newLongitude) {
232
268
  if (isValidNumber(newLongitude)) {
233
269
  this.updateLongitude(+newLongitude);
234
270
  }
271
+ else {
272
+ this.updateLongitude(undefined);
273
+ }
274
+ this.markAsTouched();
235
275
  }
236
276
  onKeyPress(event) {
237
277
  this.keyPress.emit(event);
@@ -249,8 +289,14 @@ export class GeolocationComponent {
249
289
  }
250
290
  }, (_) => { });
251
291
  }
292
+ onSearchLocationChanged(newValue, map) {
293
+ map.markerPoint = newValue;
294
+ map.center = map.markerPoint;
295
+ }
252
296
  get mapTitle() {
253
- return this._disabled || !!this.readonly ? 'Location:' : 'Select location:';
297
+ return this._disabled || !!this.readonly
298
+ ? this.i18n[this.lang].location
299
+ : this.i18n[this.lang].selectLocation;
254
300
  }
255
301
  get self() {
256
302
  return this;
@@ -274,7 +320,7 @@ GeolocationComponent.idCounter = 0;
274
320
  GeolocationComponent.decorators = [
275
321
  { type: Component, args: [{
276
322
  selector: 'lux-geolocation',
277
- template: "<div class=\"lux-geolocation\" [id]=\"inputId\">\n <input\n #latitude\n class=\"prefix\"\n type=\"number\"\n [id]=\"inputId + '$latitude'\"\n [(ngModel)]=\"latitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLatitude !== undefined && minLatitude !== null\n ? minLatitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLatitude !== undefined && maxLatitude !== null\n ? maxLatitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n placeholder=\"lat\"\n [ngClass]=\"className\"\n (keyup)=\"onEventLatitude(latitude.value)\"\n (change)=\"onEventLatitude(latitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n <div class=\"infix symbol\">\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue >= 0\">{{\n cardinalPoints[this.lang].north\n }}</span>\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue < 0\">{{\n cardinalPoints[this.lang].south\n }}</span>\n <span *ngIf=\"!isValidNumber(latitudeValue)\">{{\n cardinalPoints[this.lang].unknown\n }}</span>\n </div>\n <input\n #longitude\n class=\"infix\"\n type=\"number\"\n [id]=\"inputId + '$longitude'\"\n [(ngModel)]=\"longitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLongitude !== undefined && minLongitude !== null\n ? minLongitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLongitude !== undefined && maxLongitude !== null\n ? maxLongitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n placeholder=\"lon\"\n [ngClass]=\"className\"\n (keyup)=\"onEventLongitude(longitude.value)\"\n (change)=\"onEventLongitude(longitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n />\n <div class=\"infix symbol\">\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue >= 0\">{{\n cardinalPoints[this.lang].east\n }}</span>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue < 0\">{{\n cardinalPoints[this.lang].west\n }}</span>\n <span *ngIf=\"!isValidNumber(longitudeValue)\">{{\n cardinalPoints[this.lang].unknown\n }}</span>\n </div>\n <button class=\"postfix symbol\" (click)=\"openModalMap(modalMap)\">\n <span>\uD83C\uDF10</span>\n </button>\n</div>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ userErrors[this.lang].required }}\n </div>\n <div *ngIf=\"lastErrors.minLatitude\">\n {{\n userErrors[this.lang].minLatitude.replace(\n '$minLatitude',\n lastErrors.minLatitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLatitude\">\n {{\n userErrors[this.lang].maxLatitude.replace(\n '$maxLatitude',\n lastErrors.maxLatitude.max\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.minLongitude\">\n {{\n userErrors[this.lang].minLongitude.replace(\n '$minLongitude',\n lastErrors.minLongitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLongitude\">\n {{\n userErrors[this.lang].maxLongitude.replace(\n '$maxLongitude',\n lastErrors.maxLongitude.max\n )\n }}\n </div>\n</div>\n\n<ng-template #modalMap let-modal>\n <div class=\"lux-modal-header\">\n <h4 class=\"modal-title\" id=\"modal-basic-title\">{{ mapTitle }}</h4>\n <button\n type=\"button\"\n class=\"close\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n </button>\n </div>\n <div class=\"lux-modal-body content\">\n <lux-autocomplete\n #searchBar\n *ngIf=\"!disabled && !readonly\"\n [instance]=\"self\"\n [resolveLabelsFunction]=\"getLabels\"\n [populateFunction]=\"getData\"\n (valueChange)=\"\n map.markerPoint = searchBar.value;\n map.center = map.markerPoint\n \"\n ></lux-autocomplete>\n <div class=\"map-container\">\n <lux-map\n #map\n [center]=\"value\"\n [markerPoint]=\"value\"\n [zoom]=\"zoom\"\n [readonly]=\"readonly === true || disabled === true ? true : false\"\n ></lux-map>\n </div>\n </div>\n <div class=\"lux-modal-footer\">\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n Cancel\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-select\"\n (click)=\"modal.close(map.markerPoint.coordinates)\"\n >\n Select\n </button>\n </div>\n</ng-template>\n",
323
+ template: "<input\n #latitude\n class=\"rounded-left prefix\"\n type=\"number\"\n [id]=\"inputId + '$latitude'\"\n [(ngModel)]=\"latitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLatitude !== undefined && minLatitude !== null\n ? minLatitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLatitude !== undefined && maxLatitude !== null\n ? maxLatitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lat\"\n [ngClass]=\"className\"\n (keyup)=\"onEventLatitude(latitude.value)\"\n (change)=\"onEventLatitude(latitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div class=\"infix symbol clickable\" (click)=\"openModalMap(modalMap)\">\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue >= 0\">{{\n i18n[this.lang].cardinalPoints.north\n }}</span>\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue < 0\">{{\n i18n[this.lang].cardinalPoints.south\n }}</span>\n <span *ngIf=\"!isValidNumber(latitudeValue)\" class=\"icon-globe\"></span>\n</div>\n<input\n #longitude\n class=\"prefix\"\n type=\"number\"\n [id]=\"inputId + '$longitude'\"\n [(ngModel)]=\"longitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLongitude !== undefined && minLongitude !== null\n ? minLongitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLongitude !== undefined && maxLongitude !== null\n ? maxLongitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lon\"\n [ngClass]=\"className\"\n (keyup)=\"onEventLongitude(longitude.value)\"\n (change)=\"onEventLongitude(longitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n [class]=\"\n disabled || readonly\n ? 'clickable rounded-right postfix symbol'\n : 'clickable postfix symbol'\n \"\n (click)=\"openModalMap(modalMap)\"\n>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue >= 0\">{{\n i18n[this.lang].cardinalPoints.east\n }}</span>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue < 0\">{{\n i18n[this.lang].cardinalPoints.west\n }}</span>\n <span *ngIf=\"!isValidNumber(longitudeValue)\" class=\"icon-globe\"></span>\n</div>\n<button\n #clearButton\n *ngIf=\"!(disabled || readonly)\"\n class=\"rounded-right postfix icon icon-clear\"\n [id]=\"inputId + '$clear'\"\n [ngClass]=\"className\"\n (click)=\"updateLatitudeAndLongitude(undefined)\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ i18n[this.lang].userErrors.required }}\n </div>\n <div *ngIf=\"lastErrors.minLatitude\">\n {{\n i18n[this.lang].userErrors.minLatitude.replace(\n '$minLatitude',\n lastErrors.minLatitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLatitude\">\n {{\n i18n[this.lang].userErrors.maxLatitude.replace(\n '$maxLatitude',\n lastErrors.maxLatitude.max\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.minLongitude\">\n {{\n i18n[this.lang].userErrors.minLongitude.replace(\n '$minLongitude',\n lastErrors.minLongitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLongitude\">\n {{\n i18n[this.lang].userErrors.maxLongitude.replace(\n '$maxLongitude',\n lastErrors.maxLongitude.max\n )\n }}\n </div>\n</div>\n\n<ng-template #modalMap let-modal>\n <div class=\"lux-modal-header\">\n <h4 class=\"modal-title\" id=\"modal-basic-title\">{{ mapTitle }}</h4>\n <button\n type=\"button\"\n class=\"close\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n </button>\n </div>\n <div class=\"lux-modal-body content\">\n <lux-autocomplete\n #searchBar\n [attr.aria-label]=\"i18n[lang].typeToSearch\"\n [placeholder]=\"i18n[lang].typeToSearch\"\n *ngIf=\"!disabled && !readonly\"\n [instance]=\"self\"\n [resolveLabelsFunction]=\"getLabels\"\n [populateFunction]=\"getData\"\n (valueChange)=\"onSearchLocationChanged(searchBar.value, map)\"\n ></lux-autocomplete>\n <div class=\"map-container\">\n <lux-map\n #map\n [center]=\"value\"\n [markerPoint]=\"value\"\n [zoom]=\"zoom\"\n [readonly]=\"readonly === true || disabled === true ? true : false\"\n ></lux-map>\n </div>\n </div>\n <div class=\"lux-modal-footer\">\n <button\n *ngIf=\"disabled || readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].closeAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].cancelAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-select\"\n (click)=\"modal.close(map.markerPoint.coordinates)\"\n >\n {{ i18n[lang].selectAction }}\n </button>\n </div>\n</ng-template>\n",
278
324
  providers: [
279
325
  {
280
326
  provide: NG_VALUE_ACCESSOR,
@@ -287,7 +333,7 @@ GeolocationComponent.decorators = [
287
333
  useExisting: forwardRef(() => GeolocationComponent)
288
334
  }
289
335
  ],
290
- styles: ["input,select,textarea{border:solid 1px #495057;border:solid 1px var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:#495057;color:var(--lux-symbol-color, #495057);text-align:center;white-space:nowrap;background:#e9ecef;background:var(--lux-symbol-background, #e9ecef);border:1px solid #495057;border:1px solid var(--lux-input-border-color, #495057);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.rounded,.postfix,.infix,.prefix{border-radius:.25rem;border:1px solid;border:var(--lux-input-border, 1px solid)}.prefix{border-right:none;border-top-right-radius:0;border-bottom-right-radius:0}.infix{border-radius:0}.postfix{border-left:none;border-top-left-radius:0;border-bottom-left-radius:0}:host{position:relative;display:flex;align-items:stretch}.btn-select{background-color:#b4b8f0}.btn-cancel{background-color:#ffced7}.readonly:focus{outline:none}.lux-modal-body{padding:0}.map-container{height:45vh}\n"]
336
+ styles: [":focus{z-index:1}input,select,textarea{border:solid 1px #495057;border:solid 1px var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);border:1px solid #495057;border:1px solid var(--lux-input-border-color, #495057);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border:1px solid;border:var(--lux-input-border, 1px solid)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none}:host{position:relative;display:flex;align-items:stretch}.btn-select{color:#fff;background-color:#4242d1;margin-left:2rem}.btn-cancel{color:#fff;background-color:#c22929}.readonly:focus{outline:none}.icon,.icon-clear,.icon-globe{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;min-width:1rem;min-height:1rem;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.clickable{cursor:pointer}.icon-globe{background:url(/assets/img/globe.svg) no-repeat center;background:var(--lux-autocomplete-icon-globe, url(/assets/img/globe.svg) no-repeat center);background-size:1rem;height:100%}.icon-clear{width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-modal-body{padding:0}.map-container{height:45vh;height:var(--lux-geolocation-map-height, 45vh);width:90vw;width:var(--lux-geolocation-map-width, 90vw)}\n"]
291
337
  },] }
292
338
  ];
293
339
  GeolocationComponent.ctorParameters = () => [
@@ -297,6 +343,7 @@ GeolocationComponent.ctorParameters = () => [
297
343
  GeolocationComponent.propDecorators = {
298
344
  latitude: [{ type: ViewChild, args: ['latitude', { static: true },] }],
299
345
  longitude: [{ type: ViewChild, args: ['longitude', { static: true },] }],
346
+ map: [{ type: ViewChild, args: ['map', { static: false },] }],
300
347
  minLatitude: [{ type: Input }],
301
348
  maxLatitude: [{ type: Input }],
302
349
  minLongitude: [{ type: Input }],
@@ -314,4 +361,4 @@ GeolocationComponent.propDecorators = {
314
361
  valueChange: [{ type: Output }],
315
362
  keyPress: [{ type: Output }]
316
363
  };
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBRVgsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixhQUFhLEVBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixpQkFBaUIsRUFDbEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQW1CM0QsTUFBTSxPQUFPLG9CQUFvQjtJQStIL0IsWUFDVSxZQUEwQixFQUMzQixlQUFtQztRQURsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBb0I7UUEzSDVDLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLGVBQVUsR0FBNEIsSUFBSSxDQUFDO1FBTXBDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBRXRDLGtCQUFhLEdBQUcsYUFBYSxDQUFDO1FBRXZCLGVBQVUsR0FBRztZQUNsQixFQUFFLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsV0FBVyxFQUFFLG1DQUFtQztnQkFDaEQsV0FBVyxFQUFFLG1DQUFtQztnQkFDaEQsWUFBWSxFQUFFLHFDQUFxQztnQkFDbkQsWUFBWSxFQUFFLHFDQUFxQzthQUNwRDtZQUNELEVBQUUsRUFBRTtnQkFDRixRQUFRLEVBQUUsMEJBQTBCO2dCQUNwQyxXQUFXLEVBQUUsb0NBQW9DO2dCQUNqRCxXQUFXLEVBQUUsb0NBQW9DO2dCQUNqRCxZQUFZLEVBQUUsc0NBQXNDO2dCQUNwRCxZQUFZLEVBQUUsc0NBQXNDO2FBQ3JEO1NBQ0YsQ0FBQztRQUVLLG1CQUFjLEdBQUc7WUFDdEIsRUFBRSxFQUFFO2dCQUNGLEtBQUssRUFBRSxHQUFHO2dCQUNWLEtBQUssRUFBRSxHQUFHO2dCQUNWLElBQUksRUFBRSxHQUFHO2dCQUNULElBQUksRUFBRSxHQUFHO2dCQUNULE9BQU8sRUFBRSxHQUFHO2FBQ2I7WUFDRCxFQUFFLEVBQUU7Z0JBQ0YsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsSUFBSSxFQUFFLEdBQUc7Z0JBQ1QsSUFBSSxFQUFFLEdBQUc7Z0JBQ1QsT0FBTyxFQUFFLEdBQUc7YUFDYjtTQUNGLENBQUM7UUFtQk8sU0FBSSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFHckIsYUFBUSxHQUFtQixJQUFJLENBQUM7UUErQ3RDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUMzQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFFdkQsYUFBUSxHQUFHLENBQUMsS0FBVSxFQUFRLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDcEMsY0FBUyxHQUFHLEdBQVMsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUt4QixDQUFDO0lBaEVKLElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFRRCxJQUNJLFFBQVEsQ0FBQyxDQUFtQjtRQUM5QixDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLFFBQVEsQ0FBQyxDQUFVO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQ0ksS0FBSyxDQUFDLENBQVc7UUFDbkIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixPQUFPLENBQUMsMENBQTBDO1NBQ25EO1FBQ0QsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNqRDthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7WUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7WUFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ2pEO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBYUQsZ0RBQWdEO0lBQ2hELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFhO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWlCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFDRCx1REFBdUQ7SUFFL0Msb0JBQW9CLENBQUMsUUFBZ0I7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztJQUMvQyxDQUFDO0lBQ08scUJBQXFCLENBQUMsU0FBaUI7UUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLHlCQUF5QixLQUFVLENBQUM7SUFFcEMsUUFBUSxDQUFDLE9BQXdCO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDNUIsSUFBSSxNQUFNLEdBQTRCLElBQUksQ0FBQztRQUUzQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsRUFBRTtZQUM1RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1NBQ3hEO1FBQ0QsSUFDRSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVM7WUFDOUIsSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFDckM7WUFDQSxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsV0FBVyxHQUFHO2dCQUNuQixLQUFLO2dCQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDckIsTUFBTSxFQUFFLHNDQUFzQyxJQUFJLENBQUMsV0FBVyxHQUFHO2FBQ2xFLENBQUM7U0FDSDtRQUNELElBQ0UsSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTO1lBQzlCLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSTtZQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQ3JDO1lBQ0EsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLFdBQVcsR0FBRztnQkFDbkIsS0FBSztnQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSxzQ0FBc0MsSUFBSSxDQUFDLFdBQVcsR0FBRzthQUNsRSxDQUFDO1NBQ0g7UUFDRCxJQUNFLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUztZQUMvQixJQUFJLENBQUMsWUFBWSxLQUFLLElBQUk7WUFDMUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUN2QztZQUNBLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxZQUFZLEdBQUc7Z0JBQ3BCLEtBQUs7Z0JBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUN0QixNQUFNLEVBQUUsc0NBQXNDLElBQUksQ0FBQyxZQUFZLEdBQUc7YUFDbkUsQ0FBQztTQUNIO1FBQ0QsSUFDRSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVM7WUFDL0IsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJO1lBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFDdkM7WUFDQSxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsWUFBWSxHQUFHO2dCQUNwQixLQUFLO2dCQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDdEIsTUFBTSxFQUFFLHNDQUFzQyxJQUFJLENBQUMsWUFBWSxHQUFHO2FBQ25FLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCw2QkFBNkI7SUFFN0IsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ2QsQ0FBQyxDQUFDLGVBQWUsb0JBQW9CLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGNBQWMsQ0FBQyxXQUEwQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLE9BQU87WUFDYixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQztTQUNoRCxDQUFDO0lBQ0osQ0FBQztJQUNELGVBQWUsQ0FBQyxZQUEyQjtRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLE9BQU87WUFDYixXQUFXLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUNoRCxDQUFDO0lBQ0osQ0FBQztJQUNELDBCQUEwQixDQUFDLHVCQUFpQztRQUMxRCxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLE9BQU87WUFDYixXQUFXLEVBQUUsdUJBQXVCO1NBQ3JDLENBQUM7SUFDSixDQUFDO0lBRUQsd0NBQXdDLENBQ3RDLHVCQUFpQztRQUVqQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FDbkMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQzFCLElBQUksQ0FBQyxJQUFJLENBQ1YsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUNwQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFDMUIsSUFBSSxDQUFDLElBQUksQ0FDVixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNYLElBQUksRUFBRSxPQUFPO1lBQ2IsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztTQUN6QyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELGVBQWUsQ0FBQyxXQUFtQjtRQUNqQyxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsWUFBb0I7UUFDbkMsSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUNELFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDMUIsT0FBTyxVQUFVLENBQUM7U0FDbkI7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBdUI7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdkMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNULElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZEO1FBQ0gsQ0FBQyxFQUNELENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQ1YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7SUFDOUUsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsQ0FDUCxRQUE4QixFQUM5QixJQUFnQjtRQUVoQixPQUFPLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELE9BQU8sQ0FDTCxRQUE4QixFQUM5QixNQUFjO1FBRWQsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGdDQUFnQztRQUNsRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsb0RBQW9EO1FBQ2pGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNoRCxDQUFDOztBQTFWTSw4QkFBUyxHQUFHLENBQUMsQ0FBQzs7WUFsQnRCLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2dCQUMzQiw0bktBQTJDO2dCQUUzQyxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsS0FBSyxFQUFFLElBQUk7d0JBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztxQkFDcEQ7b0JBQ0Q7d0JBQ0UsT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLEtBQUssRUFBRSxJQUFJO3dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7cUJBQ3BEO2lCQUNGOzthQUNGOzs7WUFyQlEsWUFBWTtZQUdaLGtCQUFrQjs7O3VCQXNCeEIsU0FBUyxTQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7d0JBQ3RDLFNBQVMsU0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzBCQWlEdkMsS0FBSzswQkFFTCxLQUFLOzJCQUVMLEtBQUs7MkJBRUwsS0FBSzttQkFFTCxLQUFLO21CQUVMLEtBQUs7bUJBT0wsS0FBSzsyQkFDTCxLQUFLO3NCQUNMLEtBQUs7d0JBQ0wsS0FBSyxTQUFDLFlBQVk7dUJBQ2xCLEtBQUs7dUJBRUwsS0FBSzt1QkFTTCxLQUFLO29CQVFMLEtBQUs7MEJBNEJMLE1BQU07dUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgZm9yd2FyZFJlZixcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgQWJzdHJhY3RDb250cm9sLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBOR19WQUxJREFUT1JTXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi9kYXRhc291cmNlJztcbmltcG9ydCB7XG4gIGlzSW5pdGlhbEFuZEVtcHR5LFxuICBpc1ZhbGlkTnVtYmVyLFxuICByb3VuZFRvTXVsdGlwbGVPZlxufSBmcm9tICcuLi9oZWxwZXJGbnMnO1xuaW1wb3J0IHsgbGFuZ3VhZ2VEZXRlY3RvciB9IGZyb20gJy4uL2xhbmcnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBHZW9Qb2ludCB9IGZyb20gJy4uL21hcC9nZW9wb2ludCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHZW9sb2NhdGlvblNlcnZpY2UgfSBmcm9tICcuL2dlb2xvY2F0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsdXgtZ2VvbG9jYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2VvbG9jYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nZW9sb2NhdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR2VvbG9jYXRpb25Db21wb25lbnQpXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHZW9sb2NhdGlvbkNvbXBvbmVudClcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgR2VvbG9jYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBzdGF0aWMgaWRDb3VudGVyID0gMDtcblxuICBAVmlld0NoaWxkKCdsYXRpdHVkZScsIHsgc3RhdGljOiB0cnVlIH0pIGxhdGl0dWRlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb25naXR1ZGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBsb25naXR1ZGU6IEVsZW1lbnRSZWY7XG5cbiAgdG91Y2hlZCA9IGZhbHNlO1xuICBkaXJ0eSA9IGZhbHNlO1xuICBsYXN0RXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW47XG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuO1xuICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gIHB1YmxpYyBsYXRpdHVkZVZhbHVlPzogbnVtYmVyID0gbnVsbDtcbiAgcHVibGljIGxvbmdpdHVkZVZhbHVlPzogbnVtYmVyID0gbnVsbDtcblxuICBpc1ZhbGlkTnVtYmVyID0gaXNWYWxpZE51bWJlcjtcblxuICBwdWJsaWMgdXNlckVycm9ycyA9IHtcbiAgICBlbjoge1xuICAgICAgcmVxdWlyZWQ6ICdSZXF1aXJlZCBmaWVsZC4nLFxuICAgICAgbWluTGF0aXR1ZGU6ICdNaW5pbXVtIGxhdGl0dWRlIGlzICRtaW5MYXRpdHVkZS4nLFxuICAgICAgbWF4TGF0aXR1ZGU6ICdNYXhpbXVtIGxhdGl0dWRlIGlzICRtYXhMYXRpdHVkZS4nLFxuICAgICAgbWluTG9uZ2l0dWRlOiAnTWluaW11bSBsb25naXR1ZGUgaXMgJG1pbkxvbmdpdHVkZS4nLFxuICAgICAgbWF4TG9uZ2l0dWRlOiAnTWF4aW11bSBsb25naXR1ZGUgaXMgJG1heExvbmdpdHVkZS4nXG4gICAgfSxcbiAgICBlczoge1xuICAgICAgcmVxdWlyZWQ6ICdFbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLFxuICAgICAgbWluTGF0aXR1ZGU6ICdMYSBsYXRpdHVkIG3DrW5pbWEgZXMgJG1pbkxhdGl0dWRlLicsXG4gICAgICBtYXhMYXRpdHVkZTogJ0xhIGxhdGl0dWQgbcOheGltYSBlcyAkbWF4TGF0aXR1ZGUuJyxcbiAgICAgIG1pbkxvbmdpdHVkZTogJ0xhIGxvbmdpdHVkIG3DrW5pbWEgZXMgJG1pbkxvbmdpdHVkZS4nLFxuICAgICAgbWF4TG9uZ2l0dWRlOiAnTGEgbG9uZ2l0dWQgbcOheGltYSBlcyAkbWF4TG9uZ2l0dWRlLidcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIGNhcmRpbmFsUG9pbnRzID0ge1xuICAgIGVuOiB7XG4gICAgICBub3J0aDogJ04nLFxuICAgICAgc291dGg6ICdTJyxcbiAgICAgIGVhc3Q6ICdFJyxcbiAgICAgIHdlc3Q6ICdXJyxcbiAgICAgIHVua25vd246ICc/J1xuICAgIH0sXG4gICAgZXM6IHtcbiAgICAgIG5vcnRoOiAnTicsXG4gICAgICBzb3V0aDogJ1MnLFxuICAgICAgZWFzdDogJ0UnLFxuICAgICAgd2VzdDogJ08nLFxuICAgICAgdW5rbm93bjogJz8nXG4gICAgfVxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5MYXRpdHVkZTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4TGF0aXR1ZGU6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIG1pbkxvbmdpdHVkZTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4TG9uZ2l0dWRlOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGVwOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b29tOiBudW1iZXI7XG5cbiAgZ2V0IGNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNoZWNrQ2xhc3NOYW1lKCk7XG4gIH1cblxuICBASW5wdXQoKSBsYW5nID0gbGFuZ3VhZ2VEZXRlY3RvcigpO1xuICBASW5wdXQoKSBwdWJsaWMgaW5saW5lRXJyb3JzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbnB1dElkOiBzdHJpbmc7XG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpIHB1YmxpYyBhcmlhTGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHJlYWRvbmx5OiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKHY6IHN0cmluZyB8IGJvb2xlYW4pIHtcbiAgICB2ID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdHJ1ZSA6IHY7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2O1xuICB9XG4gIGdldCBkaXNhYmxlZCgpOiBzdHJpbmcgfCBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgcmVxdWlyZWQodjogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gdjtcbiAgfVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IEdlb1BvaW50KSB7XG4gICAgaWYgKHYgPT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICByZXR1cm47IC8vIHByZXZlbnQgZXZlbnRzIHdoZW4gdGhlcmUgaXMgbm8gY2hhbmdlc1xuICAgIH1cbiAgICBjb25zdCBpbml0aWFsQW5kRW1wdHkgPSBpc0luaXRpYWxBbmRFbXB0eSh0aGlzLl92YWx1ZSwgdik7XG4gICAgaWYgKHYgJiYgdi5jb29yZGluYXRlcyAmJiB2LmNvb3JkaW5hdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5sYXRpdHVkZVZhbHVlID0gdi5jb29yZGluYXRlc1sxXTtcbiAgICAgIHRoaXMubG9uZ2l0dWRlVmFsdWUgPSB2LmNvb3JkaW5hdGVzWzBdO1xuICAgICAgdGhpcy5zZXRMYXRpdHVkZUluQ29udHJvbCh0aGlzLmxhdGl0dWRlVmFsdWUpO1xuICAgICAgdGhpcy5zZXRMb25naXR1ZGVJbkNvbnRyb2wodGhpcy5sb25naXR1ZGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5sYXRpdHVkZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5sb25naXR1ZGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2V0TGF0aXR1ZGVJbkNvbnRyb2wodGhpcy5sYXRpdHVkZVZhbHVlKTtcbiAgICAgIHRoaXMuc2V0TG9uZ2l0dWRlSW5Db250cm9sKHRoaXMubG9uZ2l0dWRlVmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKHYpO1xuICAgIGlmICghaW5pdGlhbEFuZEVtcHR5KSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpOiBHZW9Qb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9Qb2ludD4oKTtcbiAgQE91dHB1dCgpIGtleVByZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpOiB2b2lkID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2NhdGlvblNlcnZpY2U6IEdlb2xvY2F0aW9uU2VydmljZVxuICApIHt9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG4gIC8vIEVuZCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cblxuICBwcml2YXRlIHNldExhdGl0dWRlSW5Db250cm9sKGxhdGl0dWRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxhdGl0dWRlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBsYXRpdHVkZTtcbiAgfVxuICBwcml2YXRlIHNldExvbmdpdHVkZUluQ29udHJvbChsb25naXR1ZGU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubG9uZ2l0dWRlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBsb25naXR1ZGU7XG4gIH1cblxuICAvLyBWYWxpZGF0b3IgaW50ZXJmYWNlXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoKTogdm9pZCB7fVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgbGV0IHJlc3VsdDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQucmVxdWlyZWQgPSB7IHZhbHVlLCByZWFzb246ICdSZXF1aXJlZCBmaWVsZC4nIH07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMubWluTGF0aXR1ZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhpcy5taW5MYXRpdHVkZSAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5sYXRpdHVkZVZhbHVlIDwgdGhpcy5taW5MYXRpdHVkZVxuICAgICkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm1pbkxhdGl0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWluOiB0aGlzLm1pbkxhdGl0dWRlLFxuICAgICAgICByZWFzb246IGBWYWx1ZSBpcyBsb3dlciB0aGFuIG1pbmltdW0gdmFsdWU6ICR7dGhpcy5taW5MYXRpdHVkZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5tYXhMYXRpdHVkZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLm1heExhdGl0dWRlICE9PSBudWxsICYmXG4gICAgICB0aGlzLmxhdGl0dWRlVmFsdWUgPCB0aGlzLm1heExhdGl0dWRlXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWF4TGF0aXR1ZGUgPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBtYXg6IHRoaXMubWF4TGF0aXR1ZGUsXG4gICAgICAgIHJlYXNvbjogYFZhbHVlIGlzIGxvd2VyIHRoYW4gbWF4aW11bSB2YWx1ZTogJHt0aGlzLm1heExhdGl0dWRlfS5gXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLm1pbkxvbmdpdHVkZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLm1pbkxvbmdpdHVkZSAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5sb25naXR1ZGVWYWx1ZSA8IHRoaXMubWluTG9uZ2l0dWRlXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWluTG9uZ2l0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWluOiB0aGlzLm1pbkxvbmdpdHVkZSxcbiAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgbG93ZXIgdGhhbiBtaW5pbXVtIHZhbHVlOiAke3RoaXMubWluTG9uZ2l0dWRlfS5gXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLm1heExvbmdpdHVkZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLm1heExvbmdpdHVkZSAhPT0gbnVsbCAmJlxuICAgICAgdGhpcy5sb25naXR1ZGVWYWx1ZSA8IHRoaXMubWF4TG9uZ2l0dWRlXG4gICAgKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWF4TG9uZ2l0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWF4OiB0aGlzLm1heExvbmdpdHVkZSxcbiAgICAgICAgcmVhc29uOiBgVmFsdWUgaXMgbG93ZXIgdGhhbiBtYXhpbXVtIHZhbHVlOiAke3RoaXMubWF4TG9uZ2l0dWRlfS5gXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLmxhc3RFcnJvcnMgPSByZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvLyBFbmQgb2YgVmFsaWRhdG9yIGludGVyZmFjZVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5wdXRJZCA9IHRoaXMuaW5wdXRJZFxuICAgICAgPyB0aGlzLmlucHV0SWRcbiAgICAgIDogYGdlb2xvY2F0aW9uJCR7R2VvbG9jYXRpb25Db21wb25lbnQuaWRDb3VudGVyKyt9YDtcbiAgICB0aGlzLnNldFBhdHRlcm5zKCk7XG4gIH1cblxuICB1cGRhdGVMYXRpdHVkZShuZXdMYXRpdHVkZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICBjb29yZGluYXRlczogW3RoaXMubG9uZ2l0dWRlVmFsdWUsIG5ld0xhdGl0dWRlXVxuICAgIH07XG4gIH1cbiAgdXBkYXRlTG9uZ2l0dWRlKG5ld0xvbmdpdHVkZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICBjb29yZGluYXRlczogW25ld0xvbmdpdHVkZSwgdGhpcy5sYXRpdHVkZVZhbHVlXVxuICAgIH07XG4gIH1cbiAgdXBkYXRlTGF0aXR1ZGVBbmRMb25naXR1ZGUobmV3TGF0aXR1ZGVBbmRMb25naXR1ZGU6IG51bWJlcltdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgIGNvb3JkaW5hdGVzOiBuZXdMYXRpdHVkZUFuZExvbmdpdHVkZVxuICAgIH07XG4gIH1cblxuICByb3VuZFRvU3RlcEFuZFVwZGF0ZUxhdGl0dWRlQW5kTG9uZ2l0dWRlKFxuICAgIG5ld0xhdGl0dWRlQW5kTG9uZ2l0dWRlOiBudW1iZXJbXVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuZXdMYXRpdHVkZSA9IHJvdW5kVG9NdWx0aXBsZU9mKFxuICAgICAgbmV3TGF0aXR1ZGVBbmRMb25naXR1ZGVbMV0sXG4gICAgICB0aGlzLnN0ZXBcbiAgICApO1xuICAgIGNvbnN0IG5ld0xvbmdpdHVkZSA9IHJvdW5kVG9NdWx0aXBsZU9mKFxuICAgICAgbmV3TGF0aXR1ZGVBbmRMb25naXR1ZGVbMF0sXG4gICAgICB0aGlzLnN0ZXBcbiAgICApO1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICBjb29yZGluYXRlczogW25ld0xvbmdpdHVkZSwgbmV3TGF0aXR1ZGVdXG4gICAgfTtcbiAgfVxuXG4gIG9uTG9zdEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIG9uRXZlbnRMYXRpdHVkZShuZXdMYXRpdHVkZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlzVmFsaWROdW1iZXIobmV3TGF0aXR1ZGUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxhdGl0dWRlKCtuZXdMYXRpdHVkZSk7XG4gICAgfVxuICB9XG4gIG9uRXZlbnRMb25naXR1ZGUobmV3TG9uZ2l0dWRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNWYWxpZE51bWJlcihuZXdMb25naXR1ZGUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxvbmdpdHVkZSgrbmV3TG9uZ2l0dWRlKTtcbiAgICB9XG4gIH1cbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5UHJlc3MuZW1pdChldmVudCk7XG4gIH1cblxuICBjaGVja0NsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gJ3JlYWRvbmx5JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgb3Blbk1vZGFsTWFwKG1vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCkucmVzdWx0LnRoZW4oXG4gICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgIT09ICdjYW5jZWwnKSB7XG4gICAgICAgICAgdGhpcy5yb3VuZFRvU3RlcEFuZFVwZGF0ZUxhdGl0dWRlQW5kTG9uZ2l0dWRlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoXykgPT4ge31cbiAgICApO1xuICB9XG5cbiAgZ2V0IG1hcFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8ICEhdGhpcy5yZWFkb25seSA/ICdMb2NhdGlvbjonIDogJ1NlbGVjdCBsb2NhdGlvbjonO1xuICB9XG5cbiAgZ2V0IHNlbGYoKTogR2VvbG9jYXRpb25Db21wb25lbnQge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKFxuICAgIGluc3RhbmNlOiBHZW9sb2NhdGlvbkNvbXBvbmVudCxcbiAgICBrZXlzOiBHZW9Qb2ludFtdXG4gICk6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxHZW9Qb2ludCwgc3RyaW5nPj4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5sb2NhdGlvblNlcnZpY2UuZ2V0TGFiZWxzKGluc3RhbmNlLmxvY2F0aW9uU2VydmljZSwga2V5cyk7XG4gIH1cblxuICBnZXREYXRhKFxuICAgIGluc3RhbmNlOiBHZW9sb2NhdGlvbkNvbXBvbmVudCxcbiAgICBzZWFyY2g6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPERhdGFTb3VyY2U8R2VvUG9pbnQsIHN0cmluZz4+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UubG9jYXRpb25TZXJ2aWNlLmdldERhdGEoaW5zdGFuY2UubG9jYXRpb25TZXJ2aWNlLCBzZWFyY2gpO1xuICB9XG5cbiAgc2V0UGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwID0gdGhpcy5zdGVwIHx8IDAuMDAwMDE7IC8vIDAuMDAwMDEgZGVncmVlcyA9IDEuMTEgbWV0ZXJzXG4gICAgdGhpcy56b29tID0gdGhpcy56b29tIHx8IDE4OyAvLyAoMzYwLzJeMTgpIGRlZ3JlZXMgfiAwLjAwMTM3IGRlZ3JlZXMgfiAxNTMgbWV0ZXJzXG4gICAgdGhpcy5taW5MYXRpdHVkZSA9IHRoaXMubWluTGF0aXR1ZGUgfHwgLTkwO1xuICAgIHRoaXMubWF4TGF0aXR1ZGUgPSB0aGlzLm1heExhdGl0dWRlIHx8ICs5MDtcbiAgICB0aGlzLm1pbkxvbmdpdHVkZSA9IHRoaXMubWluTG9uZ2l0dWRlIHx8IC0xODA7XG4gICAgdGhpcy5tYXhMb25naXR1ZGUgPSB0aGlzLm1heExvbmdpdHVkZSB8fCArMTgwO1xuICB9XG59XG4iXX0=
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGFBQWEsRUFDYixpQkFBaUIsRUFFbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2xCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFtQjNELE1BQU0sT0FBTyxvQkFBb0I7SUErSS9CLFlBQ1UsWUFBMEIsRUFDM0IsZUFBbUM7UUFEbEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBMUk1QyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxlQUFVLEdBQTRCLElBQUksQ0FBQztRQU0zQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5QixtQkFBYyxHQUFZLElBQUksQ0FBQztRQUUvQixrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUU5QixTQUFJLEdBQUc7WUFDTCxFQUFFLEVBQUU7Z0JBQ0YsR0FBRyxFQUFFLFVBQVU7Z0JBQ2YsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGNBQWMsRUFBRSxpQkFB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d0JBQzFCLEtBQUssRUFBRSxJQUFJO3dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7cUJBQ3BEO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixLQUFLLEVBQUUsSUFBSTt3QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO3FCQUNwRDtpQkFDRjs7YUFDRjs7O1lBbkJRLFlBQVk7WUFDWixrQkFBa0I7Ozt1QkFzQnhCLFNBQVMsU0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQUN0QyxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtrQkFDdkMsU0FBUyxTQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7MEJBZ0VsQyxLQUFLOzBCQUVMLEtBQUs7MkJBRUwsS0FBSzsyQkFFTCxLQUFLO21CQUVMLEtBQUs7bUJBRUwsS0FBSzttQkFPTCxLQUFLOzJCQUNMLEtBQUs7c0JBQ0wsS0FBSzt3QkFDTCxLQUFLLFNBQUMsWUFBWTt1QkFDbEIsS0FBSzt1QkFFTCxLQUFLO3VCQVNMLEtBQUs7b0JBUUwsS0FBSzswQkE0QkwsTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uL2RhdGFzb3VyY2UnO1xuaW1wb3J0IHtcbiAgZXhpc3RzLFxuICBpc0luaXRpYWxBbmRFbXB0eSxcbiAgaXNWYWxpZE51bWJlcixcbiAgcm91bmRUb011bHRpcGxlT2Zcbn0gZnJvbSAnLi4vaGVscGVyRm5zJztcbmltcG9ydCB7IGxhbmd1YWdlRGV0ZWN0b3IgfSBmcm9tICcuLi9sYW5nJztcbmltcG9ydCB7IEdlb1BvaW50IH0gZnJvbSAnLi4vbWFwL2dlb3BvaW50JztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VvbG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9nZW9sb2NhdGlvbi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHV4LWdlb2xvY2F0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlb2xvY2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2VvbG9jYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdlb2xvY2F0aW9uQ29tcG9uZW50KVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR2VvbG9jYXRpb25Db21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEdlb2xvY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgc3RhdGljIGlkQ291bnRlciA9IDA7XG5cbiAgQFZpZXdDaGlsZCgnbGF0aXR1ZGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBsYXRpdHVkZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbG9uZ2l0dWRlJywgeyBzdGF0aWM6IHRydWUgfSkgbG9uZ2l0dWRlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtYXAnLCB7IHN0YXRpYzogZmFsc2UgfSkgbWFwPzogRWxlbWVudFJlZjtcblxuICB0b3VjaGVkID0gZmFsc2U7XG4gIGRpcnR5ID0gZmFsc2U7XG4gIGxhc3RFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9kaXNhYmxlZDogc3RyaW5nIHwgYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgbGF0aXR1ZGVWYWx1ZT86IG51bWJlciA9IG51bGw7XG4gIGxvbmdpdHVkZVZhbHVlPzogbnVtYmVyID0gbnVsbDtcblxuICBpc1ZhbGlkTnVtYmVyID0gaXNWYWxpZE51bWJlcjtcblxuICBpMThuID0ge1xuICAgIGVuOiB7XG4gICAgICBsYXQ6ICdsYXRpdHVkZScsXG4gICAgICBsb246ICdsb25naXR1ZGUnLFxuICAgICAgc2VsZWN0TG9jYXRpb246ICdTZWxlY3QgbG9jYXRpb24nLFxuICAgICAgbG9jYXRpb246ICdMb2NhdGlvbicsXG4gICAgICBzZWxlY3RBY3Rpb246ICdTZWxlY3QnLFxuICAgICAgY2FuY2VsQWN0aW9uOiAnQ2FuY2VsJyxcbiAgICAgIGNsb3NlQWN0aW9uOiAnQ2xvc2UnLFxuICAgICAgdHlwZVRvU2VhcmNoOiAndHlwZSB0byBzZWFyY2gnLFxuICAgICAgY2FyZGluYWxQb2ludHM6IHtcbiAgICAgICAgbm9ydGg6ICdOJyxcbiAgICAgICAgc291dGg6ICdTJyxcbiAgICAgICAgZWFzdDogJ0UnLFxuICAgICAgICB3ZXN0OiAnVydcbiAgICAgIH0sXG4gICAgICB1c2VyRXJyb3JzOiB7XG4gICAgICAgIHJlcXVpcmVkOiAnUmVxdWlyZWQgZmllbGQuJyxcbiAgICAgICAgbWluTGF0aXR1ZGU6ICdNaW5pbXVtIGxhdGl0dWRlIGlzICRtaW5MYXRpdHVkZS4nLFxuICAgICAgICBtYXhMYXRpdHVkZTogJ01heGltdW0gbGF0aXR1ZGUgaXMgJG1heExhdGl0dWRlLicsXG4gICAgICAgIG1pbkxvbmdpdHVkZTogJ01pbmltdW0gbG9uZ2l0dWRlIGlzICRtaW5Mb25naXR1ZGUuJyxcbiAgICAgICAgbWF4TG9uZ2l0dWRlOiAnTWF4aW11bSBsb25naXR1ZGUgaXMgJG1heExvbmdpdHVkZS4nXG4gICAgICB9XG4gICAgfSxcbiAgICBlczoge1xuICAgICAgbGF0OiAnbGF0aXR1ZCcsXG4gICAgICBsb246ICdsb25naXR1ZCcsXG4gICAgICBzZWxlY3RMb2NhdGlvbjogJ1NlbGVjY2lvbmUgdWJpY2FjacOzbicsXG4gICAgICBsb2NhdGlvbjogJ1ViaWNhY2nDs24nLFxuICAgICAgc2VsZWN0QWN0aW9uOiAnU2VsZWNjaW9uYXInLFxuICAgICAgY2FuY2VsQWN0aW9uOiAnQ2FuY2VsYXInLFxuICAgICAgY2xvc2VBY3Rpb246ICdDZXJyYXInLFxuICAgICAgdHlwZVRvU2VhcmNoOiAnZXNjcmliZSBwYXJhIGJ1c2NhcicsXG4gICAgICBjYXJkaW5hbFBvaW50czoge1xuICAgICAgICBub3J0aDogJ04nLFxuICAgICAgICBzb3V0aDogJ1MnLFxuICAgICAgICBlYXN0OiAnRScsXG4gICAgICAgIHdlc3Q6ICdPJ1xuICAgICAgfSxcbiAgICAgIHVzZXJFcnJvcnM6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdFbCBjYW1wbyBlcyBvYmxpZ2F0b3Jpby4nLFxuICAgICAgICBtaW5MYXRpdHVkZTogJ0xhIGxhdGl0dWQgbcOtbmltYSBlcyAkbWluTGF0aXR1ZGUuJyxcbiAgICAgICAgbWF4TGF0aXR1ZGU6ICdMYSBsYXRpdHVkIG3DoXhpbWEgZXMgJG1heExhdGl0dWRlLicsXG4gICAgICAgIG1pbkxvbmdpdHVkZTogJ0xhIGxvbmdpdHVkIG3DrW5pbWEgZXMgJG1pbkxvbmdpdHVkZS4nLFxuICAgICAgICBtYXhMb25naXR1ZGU6ICdMYSBsb25naXR1ZCBtw6F4aW1hIGVzICRtYXhMb25naXR1ZGUuJ1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWluTGF0aXR1ZGU6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIG1heExhdGl0dWRlOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5Mb25naXR1ZGU6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIG1heExvbmdpdHVkZTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RlcDogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgem9vbTogbnVtYmVyO1xuXG4gIGdldCBjbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0NsYXNzTmFtZSgpO1xuICB9XG5cbiAgQElucHV0KCkgbGFuZyA9IGxhbmd1YWdlRGV0ZWN0b3IoKTtcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9ycyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgaW5wdXRJZDogc3RyaW5nO1xuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZWFkb25seTogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkaXNhYmxlZCh2OiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgdiA9IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHRydWUgOiB2O1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdjtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKTogc3RyaW5nIHwgYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHJlcXVpcmVkKHY6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IHY7XG4gIH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2OiBHZW9Qb2ludCkge1xuICAgIGlmICh2ID09PSB0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuOyAvLyBwcmV2ZW50IGV2ZW50cyB3aGVuIHRoZXJlIGlzIG5vIGNoYW5nZXNcbiAgICB9XG4gICAgY29uc3QgaW5pdGlhbEFuZEVtcHR5ID0gaXNJbml0aWFsQW5kRW1wdHkodGhpcy5fdmFsdWUsIHYpO1xuICAgIGlmICh2ICYmIHYuY29vcmRpbmF0ZXMgJiYgdi5jb29yZGluYXRlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICAgIHRoaXMubGF0aXR1ZGVWYWx1ZSA9IHYuY29vcmRpbmF0ZXNbMV07XG4gICAgICB0aGlzLmxvbmdpdHVkZVZhbHVlID0gdi5jb29yZGluYXRlc1swXTtcbiAgICAgIHRoaXMuc2V0TGF0aXR1ZGVJbkNvbnRyb2wodGhpcy5sYXRpdHVkZVZhbHVlKTtcbiAgICAgIHRoaXMuc2V0TG9uZ2l0dWRlSW5Db250cm9sKHRoaXMubG9uZ2l0dWRlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubGF0aXR1ZGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMubG9uZ2l0dWRlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnNldExhdGl0dWRlSW5Db250cm9sKHRoaXMubGF0aXR1ZGVWYWx1ZSk7XG4gICAgICB0aGlzLnNldExvbmdpdHVkZUluQ29udHJvbCh0aGlzLmxvbmdpdHVkZVZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5vbkNoYW5nZSh2KTtcbiAgICBpZiAoIWluaXRpYWxBbmRFbXB0eSkge1xuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHYpO1xuICAgIH1cbiAgfVxuICBnZXQgdmFsdWUoKTogR2VvUG9pbnQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2VvUG9pbnQ+KCk7XG4gIEBPdXRwdXQoKSBrZXlQcmVzcyA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KTogdm9pZCA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwdWJsaWMgbG9jYXRpb25TZXJ2aWNlOiBHZW9sb2NhdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIEludGVyZmFjZSBpbXBsZW1lbnRhdGlvblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gb25DaGFuZ2U7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChvblRvdWNoZWQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gb25Ub3VjaGVkO1xuICB9XG5cbiAgbWFya0FzVG91Y2hlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfVxuICAvLyBFbmQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG5cbiAgcHJpdmF0ZSBzZXRMYXRpdHVkZUluQ29udHJvbChsYXRpdHVkZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5sYXRpdHVkZS5uYXRpdmVFbGVtZW50LnZhbHVlID0gbGF0aXR1ZGU7XG4gIH1cbiAgcHJpdmF0ZSBzZXRMb25naXR1ZGVJbkNvbnRyb2wobG9uZ2l0dWRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxvbmdpdHVkZS5uYXRpdmVFbGVtZW50LnZhbHVlID0gbG9uZ2l0dWRlO1xuICB9XG5cbiAgLy8gVmFsaWRhdG9yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKCk6IHZvaWQge31cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGxldCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICFleGlzdHModmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQucmVxdWlyZWQgPSB7IHZhbHVlLCByZWFzb246ICdSZXF1aXJlZCBmaWVsZC4nIH07XG4gICAgfVxuICAgIGlmIChleGlzdHModGhpcy5taW5MYXRpdHVkZSkgJiYgdGhpcy5sYXRpdHVkZVZhbHVlIDwgdGhpcy5taW5MYXRpdHVkZSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm1pbkxhdGl0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWluOiB0aGlzLm1pbkxhdGl0dWRlLFxuICAgICAgICByZWFzb246IGBMYXRpdHVkZSBpcyBsb3dlciB0aGFuIG1pbmltdW0gdmFsdWU6ICR7dGhpcy5taW5MYXRpdHVkZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV4aXN0cyh0aGlzLm1heExhdGl0dWRlKSAmJiB0aGlzLmxhdGl0dWRlVmFsdWUgPiB0aGlzLm1heExhdGl0dWRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWF4TGF0aXR1ZGUgPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBtYXg6IHRoaXMubWF4TGF0aXR1ZGUsXG4gICAgICAgIHJlYXNvbjogYExhdGl0dWRlIGlzIGhpZ2hlciB0aGFuIG1heGltdW0gdmFsdWU6ICR7dGhpcy5tYXhMYXRpdHVkZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV4aXN0cyh0aGlzLm1pbkxvbmdpdHVkZSkgJiYgdGhpcy5sb25naXR1ZGVWYWx1ZSA8IHRoaXMubWluTG9uZ2l0dWRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWluTG9uZ2l0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWluOiB0aGlzLm1pbkxvbmdpdHVkZSxcbiAgICAgICAgcmVhc29uOiBgTG9uZ2l0dWRlIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2YWx1ZTogJHt0aGlzLm1pbkxvbmdpdHVkZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV4aXN0cyh0aGlzLm1heExvbmdpdHVkZSkgJiYgdGhpcy5sb25naXR1ZGVWYWx1ZSA+IHRoaXMubWF4TG9uZ2l0dWRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWF4TG9uZ2l0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWF4OiB0aGlzLm1heExvbmdpdHVkZSxcbiAgICAgICAgcmVhc29uOiBgTG9uZ2l0dWRlIGlzIGhpZ2hlciB0aGFuIG1heGltdW0gdmFsdWU6ICR7dGhpcy5tYXhMb25naXR1ZGV9LmBcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMubGFzdEVycm9ycyA9IHJlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIEVuZCBvZiBWYWxpZGF0b3IgaW50ZXJmYWNlXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dElkID0gdGhpcy5pbnB1dElkXG4gICAgICA/IHRoaXMuaW5wdXRJZFxuICAgICAgOiBgZ2VvbG9jYXRpb24kJHtHZW9sb2NhdGlvbkNvbXBvbmVudC5pZENvdW50ZXIrK31gO1xuICAgIHRoaXMuc2V0UGF0dGVybnMoKTtcbiAgfVxuXG4gIHVwZGF0ZUxhdGl0dWRlKG5ld0xhdGl0dWRlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNWYWxpZE51bWJlcih0aGlzLmxvbmdpdHVkZVZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFt0aGlzLmxvbmdpdHVkZVZhbHVlLCBuZXdMYXRpdHVkZV1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbMCwgbmV3TGF0aXR1ZGVdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICB1cGRhdGVMb25naXR1ZGUobmV3TG9uZ2l0dWRlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNWYWxpZE51bWJlcih0aGlzLmxhdGl0dWRlVmFsdWUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogW25ld0xvbmdpdHVkZSwgdGhpcy5sYXRpdHVkZVZhbHVlXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtuZXdMb25naXR1ZGUsIDBdXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICB1cGRhdGVMYXRpdHVkZUFuZExvbmdpdHVkZShuZXdMYXRpdHVkZUFuZExvbmdpdHVkZTogbnVtYmVyW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZXhpc3RzKG5ld0xhdGl0dWRlQW5kTG9uZ2l0dWRlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IG5ld0xhdGl0dWRlQW5kTG9uZ2l0dWRlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJvdW5kVG9TdGVwQW5kVXBkYXRlTGF0aXR1ZGVBbmRMb25naXR1ZGUoXG4gICAgbmV3TGF0aXR1ZGVBbmRMb25naXR1ZGU6IG51bWJlcltdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0xhdGl0dWRlID0gcm91bmRUb011bHRpcGxlT2YoXG4gICAgICBuZXdMYXRpdHVkZUFuZExvbmdpdHVkZVsxXSxcbiAgICAgIHRoaXMuc3RlcFxuICAgICk7XG4gICAgY29uc3QgbmV3TG9uZ2l0dWRlID0gcm91bmRUb011bHRpcGxlT2YoXG4gICAgICBuZXdMYXRpdHVkZUFuZExvbmdpdHVkZVswXSxcbiAgICAgIHRoaXMuc3RlcFxuICAgICk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWV4aXN0cyhuZXdMYXRpdHVkZUFuZExvbmdpdHVkZSkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgY29vcmRpbmF0ZXM6IFtuZXdMb25naXR1ZGUsIG5ld0xhdGl0dWRlXVxuICAgIH07XG4gIH1cblxuICBvbkxvc3RGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbkV2ZW50TGF0aXR1ZGUobmV3TGF0aXR1ZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChpc1ZhbGlkTnVtYmVyKG5ld0xhdGl0dWRlKSkge1xuICAgICAgdGhpcy51cGRhdGVMYXRpdHVkZSgrbmV3TGF0aXR1ZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUxhdGl0dWRlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICB9XG4gIG9uRXZlbnRMb25naXR1ZGUobmV3TG9uZ2l0dWRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaXNWYWxpZE51bWJlcihuZXdMb25naXR1ZGUpKSB7XG4gICAgICB0aGlzLnVwZGF0ZUxvbmdpdHVkZSgrbmV3TG9uZ2l0dWRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVMb25naXR1ZGUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25LZXlQcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMua2V5UHJlc3MuZW1pdChldmVudCk7XG4gIH1cblxuICBjaGVja0NsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gJ3JlYWRvbmx5JztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgb3Blbk1vZGFsTWFwKG1vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCkucmVzdWx0LnRoZW4oXG4gICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgIT09ICdjYW5jZWwnKSB7XG4gICAgICAgICAgdGhpcy5yb3VuZFRvU3RlcEFuZFVwZGF0ZUxhdGl0dWRlQW5kTG9uZ2l0dWRlKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoXykgPT4ge31cbiAgICApO1xuICB9XG5cbiAgb25TZWFyY2hMb2NhdGlvbkNoYW5nZWQobmV3VmFsdWU6IEdlb1BvaW50LCBtYXA6IGFueSk6IHZvaWQge1xuICAgIG1hcC5tYXJrZXJQb2ludCA9IG5ld1ZhbHVlO1xuICAgIG1hcC5jZW50ZXIgPSBtYXAubWFya2VyUG9pbnQ7XG4gIH1cblxuICBnZXQgbWFwVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgfHwgISF0aGlzLnJlYWRvbmx5XG4gICAgICA/IHRoaXMuaTE4blt0aGlzLmxhbmddLmxvY2F0aW9uXG4gICAgICA6IHRoaXMuaTE4blt0aGlzLmxhbmddLnNlbGVjdExvY2F0aW9uO1xuICB9XG5cbiAgZ2V0IHNlbGYoKTogR2VvbG9jYXRpb25Db21wb25lbnQge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0TGFiZWxzKFxuICAgIGluc3RhbmNlOiBHZW9sb2NhdGlvbkNvbXBvbmVudCxcbiAgICBrZXlzOiBHZW9Qb2ludFtdXG4gICk6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxHZW9Qb2ludCwgc3RyaW5nPj4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5sb2NhdGlvblNlcnZpY2UuZ2V0TGFiZWxzKGluc3RhbmNlLmxvY2F0aW9uU2VydmljZSwga2V5cyk7XG4gIH1cblxuICBnZXREYXRhKFxuICAgIGluc3RhbmNlOiBHZW9sb2NhdGlvbkNvbXBvbmVudCxcbiAgICBzZWFyY2g6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPERhdGFTb3VyY2U8R2VvUG9pbnQsIHN0cmluZz4+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UubG9jYXRpb25TZXJ2aWNlLmdldERhdGEoaW5zdGFuY2UubG9jYXRpb25TZXJ2aWNlLCBzZWFyY2gpO1xuICB9XG5cbiAgc2V0UGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwID0gdGhpcy5zdGVwIHx8IDAuMDAwMDE7IC8vIDAuMDAwMDEgZGVncmVlcyA9IDEuMTEgbWV0ZXJzXG4gICAgdGhpcy56b29tID0gdGhpcy56b29tIHx8IDE4OyAvLyAoMzYwLzJeMTgpIGRlZ3JlZXMgfiAwLjAwMTM3IGRlZ3JlZXMgfiAxNTMgbWV0ZXJzXG4gICAgdGhpcy5taW5MYXRpdHVkZSA9IHRoaXMubWluTGF0aXR1ZGUgfHwgLTkwO1xuICAgIHRoaXMubWF4TGF0aXR1ZGUgPSB0aGlzLm1heExhdGl0dWRlIHx8ICs5MDtcbiAgICB0aGlzLm1pbkxvbmdpdHVkZSA9IHRoaXMubWluTG9uZ2l0dWRlIHx8IC0xODA7XG4gICAgdGhpcy5tYXhMb25naXR1ZGUgPSB0aGlzLm1heExvbmdpdHVkZSB8fCArMTgwO1xuICB9XG59XG4iXX0=