jconsumer-shared 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -147,13 +147,13 @@ export class ConfirmBoxComponent {
147
147
  this.dialogRef.close(post_data);
148
148
  }
149
149
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfirmBoxComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormBuilder }, { token: i3.FormMessageDisplayService }], target: i0.ɵɵFactoryTarget.Component });
150
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ConfirmBoxComponent, selector: "app-confirm-box", ngImport: i0, template: "<form [formGroup]=\"amForm\" [ngClass]=\"this.data.theme\" novalidate (ngSubmit)=\"amForm.valid && onSubmit(amForm.value)\">\r\n <h1 class=\"mat-dialog-title\">\r\n <button #queue mat-dialog-close class=\"modal_close\">\r\n <i class=\"fa fa-window-close\" aria-hidden=\"true\"></i>\r\n </button>\r\n </h1>\r\n <div mat-dialog-content>\r\n <p class=\"mb-4 fontsize\"> {{data.message}}</p>\r\n <div *ngIf=\"data && data.cancelPolicy\" class=\"policies\">\r\n <p-accordion [multiple]=\"true\">\r\n <p-accordionTab>\r\n <ng-template pTemplate=\"header\">\r\n <h4>Cancellation Policies</h4>\r\n </ng-template>\r\n <p>You can cancel your {{data.book}}s any time until\r\n <span *ngIf=\"data.wtlist.date\">{{data.wtlist.date| date:\r\n newDateFormat}}</span><span *ngIf=\"data.wtlist.appmtDate\">{{data.wtlist.appmtDate| date:\r\n newDateFormat}}</span><span *ngIf=\"data.wtlist.orderDate\">{{data.wtlist.orderDate| date:\r\n newDateFormat}}</span>.<span\r\n *ngIf=\"data.wtlist && data.wtlist.providerAccount && data.wtlist.providerAccount.businessName\">\r\n If the system doesn\u2019t permit your cancellation,\r\n contact your provider, {{data.wtlist.providerAccount.businessName}}.\r\n It\u2019s important to note that the\r\n provider may cancel your bookings at their discretion for their own reasons.\r\n Jaldee will keep you informed promptly regarding the changes through timely notifications.\r\n </span>\r\n </p>\r\n </p-accordionTab>\r\n <p-accordionTab>\r\n <ng-template pTemplate=\"header\">\r\n <h4>Refund policy for Advance Payments(only)</h4>\r\n </ng-template>\r\n <p>\r\n In the case of your cancellation, a 3% (payment gateway fee) will be deducted from the refund\r\n of the advanced payment made. For same-day cancellations, kindly contact your service provider,\r\n {{data.wtlist.providerAccount.businessName}} to initiate the refund. For any refund-related queries, reach\r\n out to\r\n {{data.wtlist.providerAccount.businessName}} for assistance.\r\n </p>\r\n </p-accordionTab>\r\n </p-accordion>\r\n <p class=\"mt-4\"> Are you sure you want to cancel this {{data.book}}? </p>\r\n </div>\r\n <div *ngIf=\"data.book !== 'Order' && data.cancelPolicy\">\r\n <div class=\"form-group\">\r\n <label class=\"col-form-label\" for=\"displayName\">{{select_reason_cap}}*</label>\r\n <mat-chip-list>\r\n <mat-chip *ngFor=\"let cancel_reason of cancel_reasons\" class=\"me-2 mb-2\"\r\n color=\"{{(cancel_reason.value === amForm.get('reason').value) ? 'primary' : ''}}\"\r\n selected=\"{{(cancel_reason.value === amForm.get('reason').value) ? true : false}}\"\r\n [class.selected]=\"(cancel_reason.value === amForm.get('reason').value) ? true : false\"\r\n (click)=\"selectReason(cancel_reason)\">\r\n {{cancel_reason.title}}\r\n </mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n <div class=\"form-group mt-2\">\r\n <mat-checkbox formControlName=\"send_message\">{{send_message_cap}} {{rep_username}}</mat-checkbox>\r\n </div>\r\n <div class=\"form-group reason-area\" *ngIf=\"amForm.get('send_message').value\">\r\n <textarea class=\"form-control\" rows=\"3\" id=\"message\" pInputTextarea placeholder=\"Message\" formControlName=\"message\"></textarea>\r\n <app-field-error-display [displayError]=\"fed_service.isFieldValid(amForm,'message')\"\r\n errorMsg=\"Please enter a message.\">\r\n </app-field-error-display>\r\n </div>\r\n </div>\r\n </div>\r\n <div mat-dialog-actions *ngIf=\"data.book !== 'Order'&& data.cancelPolicy\" class=\"mb-2\">\r\n <div class=\"col-md-12\" style=\"margin-top: 15px;display: inline-flex;\">\r\n <button type=\"button\" mat-dialog-close class=\"cs-btn bt2\">{{cancel_btn_cap}}</button>\r\n <button type=\"submit\" mat-button [disabled]=\"!amForm.valid\" class=\"cs-btn bt1\">{{ok_btn_cap}}</button>\r\n </div>\r\n </div>\r\n <app-field-error-display [displayError]=\"true\" *ngIf=\"api_error\" errorMsg=\"{{api_error}}\"></app-field-error-display>\r\n <app-form-success-display [displayMsg]=\"true\" *ngIf=\"api_success\" successMsg=\"{{api_success}}\">\r\n </app-form-success-display>\r\n <div mat-dialog-actions class=\"paddingtop\" *ngIf=\"data.book !== 'Order' && !data.cancelPolicy\">\r\n <button tabindex=\"-1\" (click)=\"onClick(0)\" class=\"cs-btn bt2\">{{cancel_btn_cap}}</button>\r\n <button tabindex=\"2\" (click)=\"onClick(1)\"\r\n class=\"cs-btn bt1 reddelete checkavailabilitybutton\">{{ok_btn_cap}}</button>\r\n </div>\r\n <app-field-error-display [displayError]=\"true\" *ngIf=\"showError\" errorMsg=\"Department name is required\">\r\n </app-field-error-display>\r\n</form>", styles: [".mat-dialog-actions button{padding:10px 25px!important}.mat-dialog-title{color:#222223;background:#183e79;height:50px!important}.mat-dialog-title{margin:0;padding:15px 20px}p{font-size:12px!important}ul{margin-top:0;margin-bottom:10px}.paddingtop{padding-top:20px}.mat-dialog-actions{display:flex;justify-content:center;border:none}.mat-dialog-actions:last-child{margin:0;padding:20px}.mat-dialog-actions{box-shadow:0 0 30px #0000001a;position:relative;z-index:99}.bt1{margin-left:10px}.reddelete{background:#08b363}.cs-btn{position:relative;display:inline-block;margin-bottom:0;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:none;white-space:nowrap;outline:0;padding:10px 40px;font-size:inherit;line-height:1.4;z-index:2}.bt1,.bt2{border-radius:3px}.mat-dialog-content>.ng-star-inserted{margin-bottom:20px}ul{padding-left:40px}.reddelete{background:#183e79;color:#fff}::ng-deep .policies .p-accordion p-accordiontab .p-accordion-header .p-accordion-header-link{text-decoration:none!important}.fontsize{font-size:16px!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i5.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i5.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.FieldErrorDisplayComponent, selector: "app-field-error-display", inputs: ["errorMsg", "displayError", "errorMsgs"] }, { kind: "component", type: i11.FormSuccessDisplayComponent, selector: "app-form-success-display", inputs: ["successMsg", "displayMsg"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i12.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
150
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ConfirmBoxComponent, selector: "app-confirm-box", ngImport: i0, template: "<form [formGroup]=\"amForm\" [ngClass]=\"this.data.theme\" novalidate (ngSubmit)=\"amForm.valid && onSubmit(amForm.value)\">\r\n <h1 class=\"mat-dialog-title\">\r\n <button #queue mat-dialog-close class=\"modal_close\" id=\"btnClose\">\r\n <i class=\"fa fa-window-close\" aria-hidden=\"true\"></i>\r\n </button>\r\n </h1>\r\n <div mat-dialog-content>\r\n <p class=\"mb-4 fontsize\"> {{data.message}}</p>\r\n <div *ngIf=\"data && data.cancelPolicy\" class=\"policies\">\r\n <p-accordion [multiple]=\"true\">\r\n <p-accordionTab>\r\n <ng-template pTemplate=\"header\">\r\n <h4>Cancellation Policies</h4>\r\n </ng-template>\r\n <p>You can cancel your {{data.book}}s any time until\r\n <span *ngIf=\"data.wtlist.date\">{{data.wtlist.date| date:\r\n newDateFormat}}</span><span *ngIf=\"data.wtlist.appmtDate\">{{data.wtlist.appmtDate| date:\r\n newDateFormat}}</span><span *ngIf=\"data.wtlist.orderDate\">{{data.wtlist.orderDate| date:\r\n newDateFormat}}</span>.<span\r\n *ngIf=\"data.wtlist && data.wtlist.providerAccount && data.wtlist.providerAccount.businessName\">\r\n If the system doesn\u2019t permit your cancellation,\r\n contact your provider, {{data.wtlist.providerAccount.businessName}}.\r\n It\u2019s important to note that the\r\n provider may cancel your bookings at their discretion for their own reasons.\r\n Jaldee will keep you informed promptly regarding the changes through timely notifications.\r\n </span>\r\n </p>\r\n </p-accordionTab>\r\n <p-accordionTab>\r\n <ng-template pTemplate=\"header\">\r\n <h4>Refund policy for Advance Payments(only)</h4>\r\n </ng-template>\r\n <p>\r\n In the case of your cancellation, a 3% (payment gateway fee) will be deducted from the refund\r\n of the advanced payment made. For same-day cancellations, kindly contact your service provider,\r\n {{data.wtlist.providerAccount.businessName}} to initiate the refund. For any refund-related queries, reach\r\n out to\r\n {{data.wtlist.providerAccount.businessName}} for assistance.\r\n </p>\r\n </p-accordionTab>\r\n </p-accordion>\r\n <p class=\"mt-4\"> Are you sure you want to cancel this {{data.book}}? </p>\r\n </div>\r\n <div *ngIf=\"data.book !== 'Order' && data.cancelPolicy\">\r\n <div class=\"form-group\">\r\n <label class=\"col-form-label\" for=\"displayName\">{{select_reason_cap}}*</label>\r\n <mat-chip-list>\r\n <mat-chip *ngFor=\"let cancel_reason of cancel_reasons\" class=\"me-2 mb-2\"\r\n color=\"{{(cancel_reason.value === amForm.get('reason').value) ? 'primary' : ''}}\"\r\n selected=\"{{(cancel_reason.value === amForm.get('reason').value) ? true : false}}\"\r\n [class.selected]=\"(cancel_reason.value === amForm.get('reason').value) ? true : false\"\r\n (click)=\"selectReason(cancel_reason)\">\r\n {{cancel_reason.title}}\r\n </mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n <div class=\"form-group mt-2\">\r\n <mat-checkbox formControlName=\"send_message\">{{send_message_cap}} {{rep_username}}</mat-checkbox>\r\n </div>\r\n <div class=\"form-group reason-area\" *ngIf=\"amForm.get('send_message').value\">\r\n <textarea class=\"form-control\" rows=\"3\" id=\"message\" pInputTextarea placeholder=\"Message\" formControlName=\"message\"></textarea>\r\n <app-field-error-display [displayError]=\"fed_service.isFieldValid(amForm,'message')\"\r\n errorMsg=\"Please enter a message.\">\r\n </app-field-error-display>\r\n </div>\r\n </div>\r\n </div>\r\n <div mat-dialog-actions *ngIf=\"data.book !== 'Order'&& data.cancelPolicy\" class=\"mb-2\">\r\n <div class=\"col-md-12\" style=\"margin-top: 15px;display: inline-flex;\">\r\n <button type=\"button\" mat-dialog-close class=\"cs-btn bt2\" id=\"btnCancel\">{{cancel_btn_cap}}</button>\r\n <button type=\"submit\" mat-button [disabled]=\"!amForm.valid\" class=\"cs-btn bt1\" id=\"btnOk\">{{ok_btn_cap}}</button>\r\n </div>\r\n </div>\r\n <app-field-error-display [displayError]=\"true\" *ngIf=\"api_error\" errorMsg=\"{{api_error}}\"></app-field-error-display>\r\n <app-form-success-display [displayMsg]=\"true\" *ngIf=\"api_success\" successMsg=\"{{api_success}}\">\r\n </app-form-success-display>\r\n <div mat-dialog-actions class=\"paddingtop\" *ngIf=\"data.book !== 'Order' && !data.cancelPolicy\">\r\n <button tabindex=\"-1\" (click)=\"onClick(0)\" class=\"cs-btn bt2\" id=\"btnCancel\">{{cancel_btn_cap}}</button>\r\n <button tabindex=\"2\" (click)=\"onClick(1)\" id=\"btnOk\"\r\n class=\"cs-btn bt1 reddelete checkavailabilitybutton\">{{ok_btn_cap}}</button>\r\n </div>\r\n <app-field-error-display [displayError]=\"true\" *ngIf=\"showError\" errorMsg=\"Department name is required\">\r\n </app-field-error-display>\r\n</form>", styles: [".mat-dialog-actions button{padding:10px 25px!important}.mat-dialog-title{color:#222223;background:#183e79;height:50px!important}.mat-dialog-title{margin:0;padding:15px 20px}p{font-size:12px!important}ul{margin-top:0;margin-bottom:10px}.paddingtop{padding-top:20px}.mat-dialog-actions{display:flex;justify-content:center;border:none}.mat-dialog-actions:last-child{margin:0;padding:20px}.mat-dialog-actions{box-shadow:0 0 30px #0000001a;position:relative;z-index:99}.bt1{margin-left:10px}.reddelete{background:#08b363}.cs-btn{position:relative;display:inline-block;margin-bottom:0;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:none;white-space:nowrap;outline:0;padding:10px 40px;font-size:inherit;line-height:1.4;z-index:2}.bt1,.bt2{border-radius:3px}.mat-dialog-content>.ng-star-inserted{margin-bottom:20px}ul{padding-left:40px}.reddelete{background:#183e79;color:#fff}::ng-deep .policies .p-accordion p-accordiontab .p-accordion-header .p-accordion-header-link{text-decoration:none!important}.fontsize{font-size:16px!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i5.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i5.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.FieldErrorDisplayComponent, selector: "app-field-error-display", inputs: ["errorMsg", "displayError", "errorMsgs"] }, { kind: "component", type: i11.FormSuccessDisplayComponent, selector: "app-form-success-display", inputs: ["successMsg", "displayMsg"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i12.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
151
151
  }
152
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfirmBoxComponent, decorators: [{
153
153
  type: Component,
154
- args: [{ selector: 'app-confirm-box', template: "<form [formGroup]=\"amForm\" [ngClass]=\"this.data.theme\" novalidate (ngSubmit)=\"amForm.valid && onSubmit(amForm.value)\">\r\n <h1 class=\"mat-dialog-title\">\r\n <button #queue mat-dialog-close class=\"modal_close\">\r\n <i class=\"fa fa-window-close\" aria-hidden=\"true\"></i>\r\n </button>\r\n </h1>\r\n <div mat-dialog-content>\r\n <p class=\"mb-4 fontsize\"> {{data.message}}</p>\r\n <div *ngIf=\"data && data.cancelPolicy\" class=\"policies\">\r\n <p-accordion [multiple]=\"true\">\r\n <p-accordionTab>\r\n <ng-template pTemplate=\"header\">\r\n <h4>Cancellation Policies</h4>\r\n </ng-template>\r\n <p>You can cancel your {{data.book}}s any time until\r\n <span *ngIf=\"data.wtlist.date\">{{data.wtlist.date| date:\r\n newDateFormat}}</span><span *ngIf=\"data.wtlist.appmtDate\">{{data.wtlist.appmtDate| date:\r\n newDateFormat}}</span><span *ngIf=\"data.wtlist.orderDate\">{{data.wtlist.orderDate| date:\r\n newDateFormat}}</span>.<span\r\n *ngIf=\"data.wtlist && data.wtlist.providerAccount && data.wtlist.providerAccount.businessName\">\r\n If the system doesn\u2019t permit your cancellation,\r\n contact your provider, {{data.wtlist.providerAccount.businessName}}.\r\n It\u2019s important to note that the\r\n provider may cancel your bookings at their discretion for their own reasons.\r\n Jaldee will keep you informed promptly regarding the changes through timely notifications.\r\n </span>\r\n </p>\r\n </p-accordionTab>\r\n <p-accordionTab>\r\n <ng-template pTemplate=\"header\">\r\n <h4>Refund policy for Advance Payments(only)</h4>\r\n </ng-template>\r\n <p>\r\n In the case of your cancellation, a 3% (payment gateway fee) will be deducted from the refund\r\n of the advanced payment made. For same-day cancellations, kindly contact your service provider,\r\n {{data.wtlist.providerAccount.businessName}} to initiate the refund. For any refund-related queries, reach\r\n out to\r\n {{data.wtlist.providerAccount.businessName}} for assistance.\r\n </p>\r\n </p-accordionTab>\r\n </p-accordion>\r\n <p class=\"mt-4\"> Are you sure you want to cancel this {{data.book}}? </p>\r\n </div>\r\n <div *ngIf=\"data.book !== 'Order' && data.cancelPolicy\">\r\n <div class=\"form-group\">\r\n <label class=\"col-form-label\" for=\"displayName\">{{select_reason_cap}}*</label>\r\n <mat-chip-list>\r\n <mat-chip *ngFor=\"let cancel_reason of cancel_reasons\" class=\"me-2 mb-2\"\r\n color=\"{{(cancel_reason.value === amForm.get('reason').value) ? 'primary' : ''}}\"\r\n selected=\"{{(cancel_reason.value === amForm.get('reason').value) ? true : false}}\"\r\n [class.selected]=\"(cancel_reason.value === amForm.get('reason').value) ? true : false\"\r\n (click)=\"selectReason(cancel_reason)\">\r\n {{cancel_reason.title}}\r\n </mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n <div class=\"form-group mt-2\">\r\n <mat-checkbox formControlName=\"send_message\">{{send_message_cap}} {{rep_username}}</mat-checkbox>\r\n </div>\r\n <div class=\"form-group reason-area\" *ngIf=\"amForm.get('send_message').value\">\r\n <textarea class=\"form-control\" rows=\"3\" id=\"message\" pInputTextarea placeholder=\"Message\" formControlName=\"message\"></textarea>\r\n <app-field-error-display [displayError]=\"fed_service.isFieldValid(amForm,'message')\"\r\n errorMsg=\"Please enter a message.\">\r\n </app-field-error-display>\r\n </div>\r\n </div>\r\n </div>\r\n <div mat-dialog-actions *ngIf=\"data.book !== 'Order'&& data.cancelPolicy\" class=\"mb-2\">\r\n <div class=\"col-md-12\" style=\"margin-top: 15px;display: inline-flex;\">\r\n <button type=\"button\" mat-dialog-close class=\"cs-btn bt2\">{{cancel_btn_cap}}</button>\r\n <button type=\"submit\" mat-button [disabled]=\"!amForm.valid\" class=\"cs-btn bt1\">{{ok_btn_cap}}</button>\r\n </div>\r\n </div>\r\n <app-field-error-display [displayError]=\"true\" *ngIf=\"api_error\" errorMsg=\"{{api_error}}\"></app-field-error-display>\r\n <app-form-success-display [displayMsg]=\"true\" *ngIf=\"api_success\" successMsg=\"{{api_success}}\">\r\n </app-form-success-display>\r\n <div mat-dialog-actions class=\"paddingtop\" *ngIf=\"data.book !== 'Order' && !data.cancelPolicy\">\r\n <button tabindex=\"-1\" (click)=\"onClick(0)\" class=\"cs-btn bt2\">{{cancel_btn_cap}}</button>\r\n <button tabindex=\"2\" (click)=\"onClick(1)\"\r\n class=\"cs-btn bt1 reddelete checkavailabilitybutton\">{{ok_btn_cap}}</button>\r\n </div>\r\n <app-field-error-display [displayError]=\"true\" *ngIf=\"showError\" errorMsg=\"Department name is required\">\r\n </app-field-error-display>\r\n</form>", styles: [".mat-dialog-actions button{padding:10px 25px!important}.mat-dialog-title{color:#222223;background:#183e79;height:50px!important}.mat-dialog-title{margin:0;padding:15px 20px}p{font-size:12px!important}ul{margin-top:0;margin-bottom:10px}.paddingtop{padding-top:20px}.mat-dialog-actions{display:flex;justify-content:center;border:none}.mat-dialog-actions:last-child{margin:0;padding:20px}.mat-dialog-actions{box-shadow:0 0 30px #0000001a;position:relative;z-index:99}.bt1{margin-left:10px}.reddelete{background:#08b363}.cs-btn{position:relative;display:inline-block;margin-bottom:0;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:none;white-space:nowrap;outline:0;padding:10px 40px;font-size:inherit;line-height:1.4;z-index:2}.bt1,.bt2{border-radius:3px}.mat-dialog-content>.ng-star-inserted{margin-bottom:20px}ul{padding-left:40px}.reddelete{background:#183e79;color:#fff}::ng-deep .policies .p-accordion p-accordiontab .p-accordion-header .p-accordion-header-link{text-decoration:none!important}.fontsize{font-size:16px!important}\n"] }]
154
+ args: [{ selector: 'app-confirm-box', template: "<form [formGroup]=\"amForm\" [ngClass]=\"this.data.theme\" novalidate (ngSubmit)=\"amForm.valid && onSubmit(amForm.value)\">\r\n <h1 class=\"mat-dialog-title\">\r\n <button #queue mat-dialog-close class=\"modal_close\" id=\"btnClose\">\r\n <i class=\"fa fa-window-close\" aria-hidden=\"true\"></i>\r\n </button>\r\n </h1>\r\n <div mat-dialog-content>\r\n <p class=\"mb-4 fontsize\"> {{data.message}}</p>\r\n <div *ngIf=\"data && data.cancelPolicy\" class=\"policies\">\r\n <p-accordion [multiple]=\"true\">\r\n <p-accordionTab>\r\n <ng-template pTemplate=\"header\">\r\n <h4>Cancellation Policies</h4>\r\n </ng-template>\r\n <p>You can cancel your {{data.book}}s any time until\r\n <span *ngIf=\"data.wtlist.date\">{{data.wtlist.date| date:\r\n newDateFormat}}</span><span *ngIf=\"data.wtlist.appmtDate\">{{data.wtlist.appmtDate| date:\r\n newDateFormat}}</span><span *ngIf=\"data.wtlist.orderDate\">{{data.wtlist.orderDate| date:\r\n newDateFormat}}</span>.<span\r\n *ngIf=\"data.wtlist && data.wtlist.providerAccount && data.wtlist.providerAccount.businessName\">\r\n If the system doesn\u2019t permit your cancellation,\r\n contact your provider, {{data.wtlist.providerAccount.businessName}}.\r\n It\u2019s important to note that the\r\n provider may cancel your bookings at their discretion for their own reasons.\r\n Jaldee will keep you informed promptly regarding the changes through timely notifications.\r\n </span>\r\n </p>\r\n </p-accordionTab>\r\n <p-accordionTab>\r\n <ng-template pTemplate=\"header\">\r\n <h4>Refund policy for Advance Payments(only)</h4>\r\n </ng-template>\r\n <p>\r\n In the case of your cancellation, a 3% (payment gateway fee) will be deducted from the refund\r\n of the advanced payment made. For same-day cancellations, kindly contact your service provider,\r\n {{data.wtlist.providerAccount.businessName}} to initiate the refund. For any refund-related queries, reach\r\n out to\r\n {{data.wtlist.providerAccount.businessName}} for assistance.\r\n </p>\r\n </p-accordionTab>\r\n </p-accordion>\r\n <p class=\"mt-4\"> Are you sure you want to cancel this {{data.book}}? </p>\r\n </div>\r\n <div *ngIf=\"data.book !== 'Order' && data.cancelPolicy\">\r\n <div class=\"form-group\">\r\n <label class=\"col-form-label\" for=\"displayName\">{{select_reason_cap}}*</label>\r\n <mat-chip-list>\r\n <mat-chip *ngFor=\"let cancel_reason of cancel_reasons\" class=\"me-2 mb-2\"\r\n color=\"{{(cancel_reason.value === amForm.get('reason').value) ? 'primary' : ''}}\"\r\n selected=\"{{(cancel_reason.value === amForm.get('reason').value) ? true : false}}\"\r\n [class.selected]=\"(cancel_reason.value === amForm.get('reason').value) ? true : false\"\r\n (click)=\"selectReason(cancel_reason)\">\r\n {{cancel_reason.title}}\r\n </mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n <div class=\"form-group mt-2\">\r\n <mat-checkbox formControlName=\"send_message\">{{send_message_cap}} {{rep_username}}</mat-checkbox>\r\n </div>\r\n <div class=\"form-group reason-area\" *ngIf=\"amForm.get('send_message').value\">\r\n <textarea class=\"form-control\" rows=\"3\" id=\"message\" pInputTextarea placeholder=\"Message\" formControlName=\"message\"></textarea>\r\n <app-field-error-display [displayError]=\"fed_service.isFieldValid(amForm,'message')\"\r\n errorMsg=\"Please enter a message.\">\r\n </app-field-error-display>\r\n </div>\r\n </div>\r\n </div>\r\n <div mat-dialog-actions *ngIf=\"data.book !== 'Order'&& data.cancelPolicy\" class=\"mb-2\">\r\n <div class=\"col-md-12\" style=\"margin-top: 15px;display: inline-flex;\">\r\n <button type=\"button\" mat-dialog-close class=\"cs-btn bt2\" id=\"btnCancel\">{{cancel_btn_cap}}</button>\r\n <button type=\"submit\" mat-button [disabled]=\"!amForm.valid\" class=\"cs-btn bt1\" id=\"btnOk\">{{ok_btn_cap}}</button>\r\n </div>\r\n </div>\r\n <app-field-error-display [displayError]=\"true\" *ngIf=\"api_error\" errorMsg=\"{{api_error}}\"></app-field-error-display>\r\n <app-form-success-display [displayMsg]=\"true\" *ngIf=\"api_success\" successMsg=\"{{api_success}}\">\r\n </app-form-success-display>\r\n <div mat-dialog-actions class=\"paddingtop\" *ngIf=\"data.book !== 'Order' && !data.cancelPolicy\">\r\n <button tabindex=\"-1\" (click)=\"onClick(0)\" class=\"cs-btn bt2\" id=\"btnCancel\">{{cancel_btn_cap}}</button>\r\n <button tabindex=\"2\" (click)=\"onClick(1)\" id=\"btnOk\"\r\n class=\"cs-btn bt1 reddelete checkavailabilitybutton\">{{ok_btn_cap}}</button>\r\n </div>\r\n <app-field-error-display [displayError]=\"true\" *ngIf=\"showError\" errorMsg=\"Department name is required\">\r\n </app-field-error-display>\r\n</form>", styles: [".mat-dialog-actions button{padding:10px 25px!important}.mat-dialog-title{color:#222223;background:#183e79;height:50px!important}.mat-dialog-title{margin:0;padding:15px 20px}p{font-size:12px!important}ul{margin-top:0;margin-bottom:10px}.paddingtop{padding-top:20px}.mat-dialog-actions{display:flex;justify-content:center;border:none}.mat-dialog-actions:last-child{margin:0;padding:20px}.mat-dialog-actions{box-shadow:0 0 30px #0000001a;position:relative;z-index:99}.bt1{margin-left:10px}.reddelete{background:#08b363}.cs-btn{position:relative;display:inline-block;margin-bottom:0;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:none;white-space:nowrap;outline:0;padding:10px 40px;font-size:inherit;line-height:1.4;z-index:2}.bt1,.bt2{border-radius:3px}.mat-dialog-content>.ng-star-inserted{margin-bottom:20px}ul{padding-left:40px}.reddelete{background:#183e79;color:#fff}::ng-deep .policies .p-accordion p-accordiontab .p-accordion-header .p-accordion-header-link{text-decoration:none!important}.fontsize{font-size:16px!important}\n"] }]
155
155
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
156
156
  type: Inject,
157
157
  args: [MAT_DIALOG_DATA]
158
158
  }] }, { type: i2.FormBuilder }, { type: i3.FormMessageDisplayService }] });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2NvbmZpcm0vY29uZmlybS1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2NvbmZpcm0vY29uZmlybS1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRN0QsTUFBTSxPQUFPLG1CQUFtQjtJQXlCckI7SUFDeUI7SUFDeEI7SUFDRDtJQTNCVCxVQUFVLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUNsQyxjQUFjLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUNyQyxhQUFhLEdBQUcscUJBQXFCLENBQUMsb0JBQW9CLENBQUM7SUFDM0QsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDO0lBQy9DLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQztJQUNyRCxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO0lBQ3hDLE1BQU0sQ0FBWTtJQUNsQixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDbkIsZ0JBQWdCLENBQUM7SUFDakIsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUNu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QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLHlCQUF5QixDQUFDO2dCQUMzQyxPQUFPO1lBQ1QsQ0FBQztZQUNELFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxTQUFTLEdBQUcseUJBQXlCLENBQUM7WUFDM0MsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO3dHQTVIVSxtQkFBbUIsOENBMEJwQixlQUFlOzRGQTFCZCxtQkFBbUIsdURDYmhDLG0rSkFtRk87OzRGRHRFTSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzswQkE4QnhCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWVzc2FnZXMgfSBmcm9tICcuLi9wcm9qZWN0LW1lc3NhZ2VzJztcclxuaW1wb3J0IHsgcHJvamVjdENvbnN0YW50c0xvY2FsIH0gZnJvbSAnLi4vcHJvamVjdC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBGb3JtTWVzc2FnZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS1tZXNzYWdlL2Zvcm0tbWVzc2FnZS1kaXNwbGF5LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY29uZmlybS1ib3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maXJtLWJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29uZmlybS1ib3guY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maXJtQm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBva19idG5fY2FwID0gTWVzc2FnZXMuQ09ORklSTV9CVE47XHJcbiAgY2FuY2VsX2J0bl9jYXAgPSBNZXNzYWdlcy5DQU5DRUxfQlROO1xyXG4gIG5ld0RhdGVGb3JtYXQgPSBwcm9qZWN0Q29uc3RhbnRzTG9jYWwuREFURV9NTV9ERF9ZWV9GT1JNQVQ7XHJcbiAgc2VuZF9tZXNzYWdlX2NhcCA9IE1lc3NhZ2VzLlBPUFVQX1NFTkRfTVNHX0NBUDtcclxuICBzZWxlY3RfcmVhc29uX2NhcCA9IE1lc3NhZ2VzLlBPUFVQX1NFTEVDVF9SRUFTT05fQ0FQO1xyXG4gIG1lc3NnYWVfY2FwID0gTWVzc2FnZXMuT1RIRVJNRVNTQUdFX0NBUDtcclxuICBhbUZvcm06IEZvcm1Hcm91cDtcclxuICBhcGlfZXJyb3IgPSBudWxsO1xyXG4gIGFwaV9zdWNjZXNzID0gbnVsbDtcclxuICBjYW5jZWxfcmVhc29ub2JqO1xyXG4gIGNhbmNlbF9yZWFzb24gPSAnJztcclxuICBjYW5jZWxfcmVhc29uX2tleSA9ICcnO1xyXG4gIGRlZmF1bHRfbWVzc2FnZV9hcnI6IGFueSA9IFtdO1xyXG4gIGRlZl9tc2cgPSAnJztcclxuICBkZXB0TmFtZTtcclxuICBzaG93RXJyb3IgPSBmYWxzZTtcclxuICBva0NhbmNlbEJ0biA9IGZhbHNlO1xyXG4gIGNhbmNlbF9yZWFzb25zOiBhbnkgPSBbXTtcclxuICByZXBfdXNlcm5hbWU6IHN0cmluZztcclxuICByZXBfc2VydmljZTogc3RyaW5nO1xyXG4gIHJlcF9kYXRlOiBzdHJpbmc7XHJcbiAgcmVwX3RpbWU6IHN0cmluZztcclxuICByZXBfcHJvdm5hbWU6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb25maXJtQm94Q29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjpGb3JtQnVpbGRlcixcclxuICAgIHB1YmxpYyBmZWRfc2VydmljZTogRm9ybU1lc3NhZ2VEaXNwbGF5U2VydmljZSxcclxuICApIHsgXHJcbiAgICB0aGlzLmFtRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgcmVhc29uOiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcclxuICAgIG1lc3NhZ2U6IFsnJ10sXHJcbiAgICBzZW5kX21lc3NhZ2U6IFt7IHZhbHVlOiBmYWxzZSwgZGlzYWJsZWQ6IHRydWUgfV1cclxuICB9KTtcclxufVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJkYXRhLWRhdGFcIix0aGlzLmRhdGEpXHJcbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS53dGxpc3QgJiYgdGhpcy5kYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQgJiYgdGhpcy5kYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQuYnVzaW5lc3NOYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwX3VzZXJuYW1lID0gdGhpcy5kYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQuYnVzaW5lc3NOYW1lO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVhc29uc19saXN0ID0gW107XHJcbiAgICBjb25zdCByZWFzb25zID0gcHJvamVjdENvbnN0YW50c0xvY2FsLldBSVRMSVNUX0NBTkNFTF9SRUFTT047XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlYXNvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHJlYXNvbnNbaV0udHlwZSkge1xyXG4gICAgICAgIHJlYXNvbnNfbGlzdC5wdXNoKHJlYXNvbnNbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbmNlbF9yZWFzb25zID0gcmVhc29uc19saXN0O1xyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLmNhbmNlbF9yZWFzb25zXCIsdGhpcy5jYW5jZWxfcmVhc29ucyk7XHJcbiAgICBpZiAodGhpcy5kYXRhLnR5cGUpIHtcclxuICAgICAgdGhpcy5va19idG5fY2FwID0gTWVzc2FnZXMuQ09ORklSTV9CVE47XHJcbiAgICAgIHRoaXMuY2FuY2VsX2J0bl9jYXAgPSBNZXNzYWdlcy5DQU5DRUxfQlROO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25zID09PSAnb2tDYW5jZWwnKSB7XHJcbiAgICAgIHRoaXMub2tfYnRuX2NhcCA9IE1lc3NhZ2VzLkNPTkZJUk1fQlROO1xyXG4gICAgICB0aGlzLmNhbmNlbF9idG5fY2FwID0gTWVzc2FnZXMuQ0FOQ0VMX0JUTjtcclxuICAgIH1cclxuICB9XHJcbiAgb25DbGljayhkYXRhKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLmZpbHRlckJ5RGVwdCAmJiBkYXRhKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtID0ge307XHJcbiAgICAgIGlmICh0aGlzLmRlcHROYW1lKSB7XHJcbiAgICAgICAgcGFyYW1bJ2RlcHROYW1lJ10gPSB0aGlzLmRlcHROYW1lO1xyXG4gICAgICAgIGRhdGEgPSBwYXJhbTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShkYXRhKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3dFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZWxlY3RSZWFzb24oY2FuY2VsX3JlYXNvbikge1xyXG4gICAgdGhpcy5hbUZvcm0uZ2V0KCdyZWFzb24nKS5zZXRWYWx1ZShjYW5jZWxfcmVhc29uLnZhbHVlKTtcclxuICAgIHRoaXMuY2FuY2VsX3JlYXNvbm9iaiA9IGNhbmNlbF9yZWFzb247XHJcbiAgICB0aGlzLmNhbmNlbF9yZWFzb24gPSBjYW5jZWxfcmVhc29uLnRpdGxlO1xyXG4gICAgdGhpcy5jYW5jZWxfcmVhc29uX2tleSA9IGNhbmNlbF9yZWFzb24ucmVhc29ua2V5O1xyXG4gICAgdGhpcy5hbUZvcm0uY29udHJvbHNbJ3NlbmRfbWVzc2FnZSddLmVuYWJsZSgpO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5pc0JhdGNoKSB7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRlZl9tc2cgPSB0aGlzLnJlcGxhY2VkTWVzc2FnZSgpO1xyXG4gICAgfSAgICBcclxuICB9XHJcbiAgcmVwbGFjZWRNZXNzYWdlKCkge1xyXG4gICAgbGV0IHJldG1zZyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuY2FuY2VsX3JlYXNvbl9rZXkpIHtcclxuICAgICAgcmV0bXNnID0gdGhpcy5kZWZhdWx0X21lc3NhZ2VfYXJyW3RoaXMuY2FuY2VsX3JlYXNvbl9rZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKHJldG1zZyAmJiByZXRtc2cgIT09ICcnKSB7XHJcbiAgICAgIHJldG1zZyA9IHJldG1zZy5yZXBsYWNlKC9cXFtjb25zdW1lclxcXS9nLCB0aGlzLnJlcF91c2VybmFtZSk7XHJcbiAgICAgIHJldG1zZyA9IHJldG1zZy5yZXBsYWNlKC9cXFtzZXJ2aWNlXFxdL2csIHRoaXMucmVwX3NlcnZpY2UpO1xyXG4gICAgICByZXRtc2cgPSByZXRtc2cucmVwbGFjZSgvXFxbZGF0ZVxcXS9nLCB0aGlzLnJlcF9kYXRlKTtcclxuICAgICAgcmV0bXNnID0gcmV0bXNnLnJlcGxhY2UoL1xcW3RpbWVcXF0vZywgdGhpcy5yZXBfdGltZSk7XHJcbiAgICAgIHJldG1zZyA9IHJldG1zZy5yZXBsYWNlKC9cXFsuKj9cXF0vZywgdGhpcy5yZXBfcHJvdm5hbWUpO1xyXG4gICAgICBpZiAodGhpcy5jYW5jZWxfcmVhc29uICYmIHRoaXMuY2FuY2VsX3JlYXNvbiAhPT0gJycpIHtcclxuICAgICAgICByZXRtc2cgPSByZXRtc2cucmVwbGFjZSgnW3JlYXNvbl0nLCB0aGlzLmNhbmNlbF9yZWFzb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0bXNnO1xyXG4gIH1cclxuICByZXNldEFwaUVycm9ycygpIHtcclxuICAgIHRoaXMuYXBpX2Vycm9yID0gbnVsbDtcclxuICAgIHRoaXMuYXBpX3N1Y2Nlc3MgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoZm9ybV9kYXRhKSB7XHJcbiAgICBjb25zb2xlLmxvZyhmb3JtX2RhdGEpXHJcbiAgICB0aGlzLnJlc2V0QXBpRXJyb3JzKCk7XHJcbiAgICAgbGV0IHBvc3RfZGF0YSA9IHtcclxuICAgICAgJ2NhbmNlbFJlYXNvbic6IGZvcm1fZGF0YS5yZWFzb25cclxuICAgIH07XHJcbiAgICBpZiAoZm9ybV9kYXRhLnNlbmRfbWVzc2FnZSkge1xyXG4gICAgICBpZiAoIWZvcm1fZGF0YS5tZXNzYWdlLnJlcGxhY2UoL1xccy9nLCAnJykubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5hcGlfZXJyb3IgPSAnTWVzc2FnZSBjYW5ub3QgYmUgZW1wdHknO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBwb3N0X2RhdGFbJ2NvbW11bmljYXRpb25NZXNzYWdlJ10gPSBmb3JtX2RhdGEubWVzc2FnZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuaXNCYXRjaCAmJiAhcG9zdF9kYXRhWydjb21tdW5pY2F0aW9uTWVzc2FnZSddKSB7XHJcbiAgICAgIHRoaXMuYXBpX2Vycm9yID0gJ01lc3NhZ2UgY2Fubm90IGJlIGVtcHR5JztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocG9zdF9kYXRhKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiYW1Gb3JtXCIgW25nQ2xhc3NdPVwidGhpcy5kYXRhLnRoZW1lXCIgbm92YWxpZGF0ZSAobmdTdWJtaXQpPVwiYW1Gb3JtLnZhbGlkICYmIG9uU3VibWl0KGFtRm9ybS52YWx1ZSlcIj5cclxuICA8aDEgY2xhc3M9XCJtYXQtZGlhbG9nLXRpdGxlXCI+XHJcbiAgICA8YnV0dG9uICNxdWV1ZSBtYXQtZGlhbG9nLWNsb3NlIGNsYXNzPVwibW9kYWxfY2xvc2VcIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS13aW5kb3ctY2xvc2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2gxPlxyXG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gICAgPHAgY2xhc3M9XCJtYi00IGZvbnRzaXplXCI+IHt7ZGF0YS5tZXNzYWdlfX08L3A+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YSAmJiBkYXRhLmNhbmNlbFBvbGljeVwiIGNsYXNzPVwicG9saWNpZXNcIj5cclxuICAgICAgPHAtYWNjb3JkaW9uIFttdWx0aXBsZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgPHAtYWNjb3JkaW9uVGFiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8aDQ+Q2FuY2VsbGF0aW9uIFBvbGljaWVzPC9oND5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8cD5Zb3UgY2FuIGNhbmNlbCB5b3VyIHt7ZGF0YS5ib29rfX1zIGFueSB0aW1lIHVudGlsXHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS53dGxpc3QuZGF0ZVwiPnt7ZGF0YS53dGxpc3QuZGF0ZXwgZGF0ZTpcclxuICAgICAgICAgICAgICBuZXdEYXRlRm9ybWF0fX08L3NwYW4+PHNwYW4gKm5nSWY9XCJkYXRhLnd0bGlzdC5hcHBtdERhdGVcIj57e2RhdGEud3RsaXN0LmFwcG10RGF0ZXwgZGF0ZTpcclxuICAgICAgICAgICAgICBuZXdEYXRlRm9ybWF0fX08L3NwYW4+PHNwYW4gKm5nSWY9XCJkYXRhLnd0bGlzdC5vcmRlckRhdGVcIj57e2RhdGEud3RsaXN0Lm9yZGVyRGF0ZXwgZGF0ZTpcclxuICAgICAgICAgICAgICBuZXdEYXRlRm9ybWF0fX08L3NwYW4+LjxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLnd0bGlzdCAmJiBkYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQgJiYgZGF0YS53dGxpc3QucHJvdmlkZXJBY2NvdW50LmJ1c2luZXNzTmFtZVwiPlxyXG4gICAgICAgICAgICAgIElmIHRoZSBzeXN0ZW0gZG9lc27igJl0IHBlcm1pdCB5b3VyIGNhbmNlbGxhdGlvbixcclxuICAgICAgICAgICAgICBjb250YWN0IHlvdXIgcHJvdmlkZXIsIHt7ZGF0YS53dGxpc3QucHJvdmlkZXJBY2NvdW50LmJ1c2luZXNzTmFtZX19LlxyXG4gICAgICAgICAgICAgIEl04oCZcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZVxyXG4gICAgICAgICAgICAgIHByb3ZpZGVyIG1heSBjYW5jZWwgeW91ciBib29raW5ncyBhdCB0aGVpciBkaXNjcmV0aW9uIGZvciB0aGVpciBvd24gcmVhc29ucy5cclxuICAgICAgICAgICAgICBKYWxkZWUgd2lsbCBrZWVwIHlvdSBpbmZvcm1lZCBwcm9tcHRseSByZWdhcmRpbmcgdGhlIGNoYW5nZXMgdGhyb3VnaCB0aW1lbHkgbm90aWZpY2F0aW9ucy5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XHJcbiAgICAgICAgPHAtYWNjb3JkaW9uVGFiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8aDQ+UmVmdW5kIHBvbGljeSBmb3IgQWR2YW5jZSBQYXltZW50cyhvbmx5KTwvaDQ+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgIEluIHRoZSBjYXNlIG9mIHlvdXIgY2FuY2VsbGF0aW9uLCBhIDMlIChwYXltZW50IGdhdGV3YXkgZmVlKSB3aWxsIGJlIGRlZHVjdGVkIGZyb20gdGhlIHJlZnVuZFxyXG4gICAgICAgICAgICBvZiB0aGUgYWR2YW5jZWQgcGF5bWVudCBtYWRlLiBGb3Igc2FtZS1kYXkgY2FuY2VsbGF0aW9ucywga2luZGx5IGNvbnRhY3QgeW91ciBzZXJ2aWNlIHByb3ZpZGVyLFxyXG4gICAgICAgICAgICB7e2RhdGEud3RsaXN0LnByb3ZpZGVyQWNjb3VudC5idXNpbmVzc05hbWV9fSB0byBpbml0aWF0ZSB0aGUgcmVmdW5kLiBGb3IgYW55IHJlZnVuZC1yZWxhdGVkIHF1ZXJpZXMsIHJlYWNoXHJcbiAgICAgICAgICAgIG91dCB0b1xyXG4gICAgICAgICAgICB7e2RhdGEud3RsaXN0LnByb3ZpZGVyQWNjb3VudC5idXNpbmVzc05hbWV9fSBmb3IgYXNzaXN0YW5jZS5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxyXG4gICAgICA8L3AtYWNjb3JkaW9uPlxyXG4gICAgICA8cCBjbGFzcz1cIm10LTRcIj4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbCB0aGlzIHt7ZGF0YS5ib29rfX0/IDwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImRhdGEuYm9vayAhPT0gJ09yZGVyJyAmJiBkYXRhLmNhbmNlbFBvbGljeVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1mb3JtLWxhYmVsXCIgZm9yPVwiZGlzcGxheU5hbWVcIj57e3NlbGVjdF9yZWFzb25fY2FwfX0qPC9sYWJlbD5cclxuICAgICAgICA8bWF0LWNoaXAtbGlzdD5cclxuICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgY2FuY2VsX3JlYXNvbiBvZiBjYW5jZWxfcmVhc29uc1wiIGNsYXNzPVwibWUtMiBtYi0yXCJcclxuICAgICAgICAgICAgY29sb3I9XCJ7eyhjYW5jZWxfcmVhc29uLnZhbHVlID09PSBhbUZvcm0uZ2V0KCdyZWFzb24nKS52YWx1ZSkgPyAncHJpbWFyeScgOiAnJ319XCJcclxuICAgICAgICAgICAgc2VsZWN0ZWQ9XCJ7eyhjYW5jZWxfcmVhc29uLnZhbHVlID09PSBhbUZvcm0uZ2V0KCdyZWFzb24nKS52YWx1ZSkgPyB0cnVlIDogZmFsc2V9fVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCIoY2FuY2VsX3JlYXNvbi52YWx1ZSA9PT0gYW1Gb3JtLmdldCgncmVhc29uJykudmFsdWUpID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFJlYXNvbihjYW5jZWxfcmVhc29uKVwiPlxyXG4gICAgICAgICAgICB7e2NhbmNlbF9yZWFzb24udGl0bGV9fVxyXG4gICAgICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtdC0yXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBmb3JtQ29udHJvbE5hbWU9XCJzZW5kX21lc3NhZ2VcIj57e3NlbmRfbWVzc2FnZV9jYXB9fSB7e3JlcF91c2VybmFtZX19PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByZWFzb24tYXJlYVwiICpuZ0lmPVwiYW1Gb3JtLmdldCgnc2VuZF9tZXNzYWdlJykudmFsdWVcIj5cclxuICAgICAgICA8dGV4dGFyZWEgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiAgaWQ9XCJtZXNzYWdlXCIgcElucHV0VGV4dGFyZWEgcGxhY2Vob2xkZXI9XCJNZXNzYWdlXCIgZm9ybUNvbnRyb2xOYW1lPVwibWVzc2FnZVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgPGFwcC1maWVsZC1lcnJvci1kaXNwbGF5IFtkaXNwbGF5RXJyb3JdPVwiZmVkX3NlcnZpY2UuaXNGaWVsZFZhbGlkKGFtRm9ybSwnbWVzc2FnZScpXCJcclxuICAgICAgICAgIGVycm9yTXNnPVwiUGxlYXNlIGVudGVyIGEgbWVzc2FnZS5cIj5cclxuICAgICAgICA8L2FwcC1maWVsZC1lcnJvci1kaXNwbGF5PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zICpuZ0lmPVwiZGF0YS5ib29rICE9PSAnT3JkZXInJiYgZGF0YS5jYW5jZWxQb2xpY3lcIiBjbGFzcz1cIm1iLTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDE1cHg7ZGlzcGxheTogaW5saW5lLWZsZXg7XCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1kaWFsb2ctY2xvc2UgY2xhc3M9XCJjcy1idG4gYnQyXCI+e3tjYW5jZWxfYnRuX2NhcH19PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cIiFhbUZvcm0udmFsaWRcIiBjbGFzcz1cImNzLWJ0biBidDFcIj57e29rX2J0bl9jYXB9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGFwcC1maWVsZC1lcnJvci1kaXNwbGF5IFtkaXNwbGF5RXJyb3JdPVwidHJ1ZVwiICpuZ0lmPVwiYXBpX2Vycm9yXCIgZXJyb3JNc2c9XCJ7e2FwaV9lcnJvcn19XCI+PC9hcHAtZmllbGQtZXJyb3ItZGlzcGxheT5cclxuICA8YXBwLWZvcm0tc3VjY2Vzcy1kaXNwbGF5IFtkaXNwbGF5TXNnXT1cInRydWVcIiAqbmdJZj1cImFwaV9zdWNjZXNzXCIgc3VjY2Vzc01zZz1cInt7YXBpX3N1Y2Nlc3N9fVwiPlxyXG4gIDwvYXBwLWZvcm0tc3VjY2Vzcy1kaXNwbGF5PlxyXG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGNsYXNzPVwicGFkZGluZ3RvcFwiICpuZ0lmPVwiZGF0YS5ib29rICE9PSAnT3JkZXInICYmICFkYXRhLmNhbmNlbFBvbGljeVwiPlxyXG4gICAgPGJ1dHRvbiB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cIm9uQ2xpY2soMClcIiBjbGFzcz1cImNzLWJ0biBidDJcIj57e2NhbmNlbF9idG5fY2FwfX08L2J1dHRvbj5cclxuICAgIDxidXR0b24gdGFiaW5kZXg9XCIyXCIgKGNsaWNrKT1cIm9uQ2xpY2soMSlcIlxyXG4gICAgICBjbGFzcz1cImNzLWJ0biBidDEgcmVkZGVsZXRlIGNoZWNrYXZhaWxhYmlsaXR5YnV0dG9uXCI+e3tva19idG5fY2FwfX08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8YXBwLWZpZWxkLWVycm9yLWRpc3BsYXkgW2Rpc3BsYXlFcnJvcl09XCJ0cnVlXCIgKm5nSWY9XCJzaG93RXJyb3JcIiBlcnJvck1zZz1cIkRlcGFydG1lbnQgbmFtZSBpcyByZXF1aXJlZFwiPlxyXG4gIDwvYXBwLWZpZWxkLWVycm9yLWRpc3BsYXk+XHJcbjwvZm9ybT4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2NvbmZpcm0vY29uZmlybS1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvamNvbnN1bWVyLXNoYXJlZC9zcmMvbGliL2NvbmZpcm0vY29uZmlybS1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFRN0QsTUFBTSxPQUFPLG1CQUFtQjtJQXlCckI7SUFDeUI7SUFDeEI7SUFDRDtJQTNCVCxVQUFVLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUNsQyxjQUFjLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztJQUNyQyxhQUFhLEdBQUcscUJBQXFCLENBQUMsb0JBQW9CLENBQUM7SUFDM0QsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDO0lBQy9DLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQztJQUNyRCxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO0lBQ3hDLE1BQU0sQ0FBWTtJQUNsQixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDbkIsZ0JBQWdCLENBQUM7SUFDakIsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUNu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QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsU0FBUyxHQUFHLHlCQUF5QixDQUFDO2dCQUMzQyxPQUFPO1lBQ1QsQ0FBQztZQUNELFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO1lBQzVELElBQUksQ0FBQyxTQUFTLEdBQUcseUJBQXlCLENBQUM7WUFDM0MsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsQyxDQUFDO3dHQTVIVSxtQkFBbUIsOENBMEJwQixlQUFlOzRGQTFCZCxtQkFBbUIsdURDYmhDLCtpS0FtRk87OzRGRHRFTSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzswQkE4QnhCLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWVzc2FnZXMgfSBmcm9tICcuLi9wcm9qZWN0LW1lc3NhZ2VzJztcclxuaW1wb3J0IHsgcHJvamVjdENvbnN0YW50c0xvY2FsIH0gZnJvbSAnLi4vcHJvamVjdC1jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBGb3JtTWVzc2FnZURpc3BsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS1tZXNzYWdlL2Zvcm0tbWVzc2FnZS1kaXNwbGF5LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY29uZmlybS1ib3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maXJtLWJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29uZmlybS1ib3guY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maXJtQm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBva19idG5fY2FwID0gTWVzc2FnZXMuQ09ORklSTV9CVE47XHJcbiAgY2FuY2VsX2J0bl9jYXAgPSBNZXNzYWdlcy5DQU5DRUxfQlROO1xyXG4gIG5ld0RhdGVGb3JtYXQgPSBwcm9qZWN0Q29uc3RhbnRzTG9jYWwuREFURV9NTV9ERF9ZWV9GT1JNQVQ7XHJcbiAgc2VuZF9tZXNzYWdlX2NhcCA9IE1lc3NhZ2VzLlBPUFVQX1NFTkRfTVNHX0NBUDtcclxuICBzZWxlY3RfcmVhc29uX2NhcCA9IE1lc3NhZ2VzLlBPUFVQX1NFTEVDVF9SRUFTT05fQ0FQO1xyXG4gIG1lc3NnYWVfY2FwID0gTWVzc2FnZXMuT1RIRVJNRVNTQUdFX0NBUDtcclxuICBhbUZvcm06IEZvcm1Hcm91cDtcclxuICBhcGlfZXJyb3IgPSBudWxsO1xyXG4gIGFwaV9zdWNjZXNzID0gbnVsbDtcclxuICBjYW5jZWxfcmVhc29ub2JqO1xyXG4gIGNhbmNlbF9yZWFzb24gPSAnJztcclxuICBjYW5jZWxfcmVhc29uX2tleSA9ICcnO1xyXG4gIGRlZmF1bHRfbWVzc2FnZV9hcnI6IGFueSA9IFtdO1xyXG4gIGRlZl9tc2cgPSAnJztcclxuICBkZXB0TmFtZTtcclxuICBzaG93RXJyb3IgPSBmYWxzZTtcclxuICBva0NhbmNlbEJ0biA9IGZhbHNlO1xyXG4gIGNhbmNlbF9yZWFzb25zOiBhbnkgPSBbXTtcclxuICByZXBfdXNlcm5hbWU6IHN0cmluZztcclxuICByZXBfc2VydmljZTogc3RyaW5nO1xyXG4gIHJlcF9kYXRlOiBzdHJpbmc7XHJcbiAgcmVwX3RpbWU6IHN0cmluZztcclxuICByZXBfcHJvdm5hbWU6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDb25maXJtQm94Q29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjpGb3JtQnVpbGRlcixcclxuICAgIHB1YmxpYyBmZWRfc2VydmljZTogRm9ybU1lc3NhZ2VEaXNwbGF5U2VydmljZSxcclxuICApIHsgXHJcbiAgICB0aGlzLmFtRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgcmVhc29uOiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXSxcclxuICAgIG1lc3NhZ2U6IFsnJ10sXHJcbiAgICBzZW5kX21lc3NhZ2U6IFt7IHZhbHVlOiBmYWxzZSwgZGlzYWJsZWQ6IHRydWUgfV1cclxuICB9KTtcclxufVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJkYXRhLWRhdGFcIix0aGlzLmRhdGEpXHJcbiAgICBpZiAodGhpcy5kYXRhICYmIHRoaXMuZGF0YS53dGxpc3QgJiYgdGhpcy5kYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQgJiYgdGhpcy5kYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQuYnVzaW5lc3NOYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwX3VzZXJuYW1lID0gdGhpcy5kYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQuYnVzaW5lc3NOYW1lO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVhc29uc19saXN0ID0gW107XHJcbiAgICBjb25zdCByZWFzb25zID0gcHJvamVjdENvbnN0YW50c0xvY2FsLldBSVRMSVNUX0NBTkNFTF9SRUFTT047XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlYXNvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHJlYXNvbnNbaV0udHlwZSkge1xyXG4gICAgICAgIHJlYXNvbnNfbGlzdC5wdXNoKHJlYXNvbnNbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbmNlbF9yZWFzb25zID0gcmVhc29uc19saXN0O1xyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLmNhbmNlbF9yZWFzb25zXCIsdGhpcy5jYW5jZWxfcmVhc29ucyk7XHJcbiAgICBpZiAodGhpcy5kYXRhLnR5cGUpIHtcclxuICAgICAgdGhpcy5va19idG5fY2FwID0gTWVzc2FnZXMuQ09ORklSTV9CVE47XHJcbiAgICAgIHRoaXMuY2FuY2VsX2J0bl9jYXAgPSBNZXNzYWdlcy5DQU5DRUxfQlROO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YS5idXR0b25zID09PSAnb2tDYW5jZWwnKSB7XHJcbiAgICAgIHRoaXMub2tfYnRuX2NhcCA9IE1lc3NhZ2VzLkNPTkZJUk1fQlROO1xyXG4gICAgICB0aGlzLmNhbmNlbF9idG5fY2FwID0gTWVzc2FnZXMuQ0FOQ0VMX0JUTjtcclxuICAgIH1cclxuICB9XHJcbiAgb25DbGljayhkYXRhKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLmZpbHRlckJ5RGVwdCAmJiBkYXRhKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtID0ge307XHJcbiAgICAgIGlmICh0aGlzLmRlcHROYW1lKSB7XHJcbiAgICAgICAgcGFyYW1bJ2RlcHROYW1lJ10gPSB0aGlzLmRlcHROYW1lO1xyXG4gICAgICAgIGRhdGEgPSBwYXJhbTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShkYXRhKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNob3dFcnJvciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZWxlY3RSZWFzb24oY2FuY2VsX3JlYXNvbikge1xyXG4gICAgdGhpcy5hbUZvcm0uZ2V0KCdyZWFzb24nKS5zZXRWYWx1ZShjYW5jZWxfcmVhc29uLnZhbHVlKTtcclxuICAgIHRoaXMuY2FuY2VsX3JlYXNvbm9iaiA9IGNhbmNlbF9yZWFzb247XHJcbiAgICB0aGlzLmNhbmNlbF9yZWFzb24gPSBjYW5jZWxfcmVhc29uLnRpdGxlO1xyXG4gICAgdGhpcy5jYW5jZWxfcmVhc29uX2tleSA9IGNhbmNlbF9yZWFzb24ucmVhc29ua2V5O1xyXG4gICAgdGhpcy5hbUZvcm0uY29udHJvbHNbJ3NlbmRfbWVzc2FnZSddLmVuYWJsZSgpO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5pc0JhdGNoKSB7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRlZl9tc2cgPSB0aGlzLnJlcGxhY2VkTWVzc2FnZSgpO1xyXG4gICAgfSAgICBcclxuICB9XHJcbiAgcmVwbGFjZWRNZXNzYWdlKCkge1xyXG4gICAgbGV0IHJldG1zZyA9ICcnO1xyXG4gICAgaWYgKHRoaXMuY2FuY2VsX3JlYXNvbl9rZXkpIHtcclxuICAgICAgcmV0bXNnID0gdGhpcy5kZWZhdWx0X21lc3NhZ2VfYXJyW3RoaXMuY2FuY2VsX3JlYXNvbl9rZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKHJldG1zZyAmJiByZXRtc2cgIT09ICcnKSB7XHJcbiAgICAgIHJldG1zZyA9IHJldG1zZy5yZXBsYWNlKC9cXFtjb25zdW1lclxcXS9nLCB0aGlzLnJlcF91c2VybmFtZSk7XHJcbiAgICAgIHJldG1zZyA9IHJldG1zZy5yZXBsYWNlKC9cXFtzZXJ2aWNlXFxdL2csIHRoaXMucmVwX3NlcnZpY2UpO1xyXG4gICAgICByZXRtc2cgPSByZXRtc2cucmVwbGFjZSgvXFxbZGF0ZVxcXS9nLCB0aGlzLnJlcF9kYXRlKTtcclxuICAgICAgcmV0bXNnID0gcmV0bXNnLnJlcGxhY2UoL1xcW3RpbWVcXF0vZywgdGhpcy5yZXBfdGltZSk7XHJcbiAgICAgIHJldG1zZyA9IHJldG1zZy5yZXBsYWNlKC9cXFsuKj9cXF0vZywgdGhpcy5yZXBfcHJvdm5hbWUpO1xyXG4gICAgICBpZiAodGhpcy5jYW5jZWxfcmVhc29uICYmIHRoaXMuY2FuY2VsX3JlYXNvbiAhPT0gJycpIHtcclxuICAgICAgICByZXRtc2cgPSByZXRtc2cucmVwbGFjZSgnW3JlYXNvbl0nLCB0aGlzLmNhbmNlbF9yZWFzb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0bXNnO1xyXG4gIH1cclxuICByZXNldEFwaUVycm9ycygpIHtcclxuICAgIHRoaXMuYXBpX2Vycm9yID0gbnVsbDtcclxuICAgIHRoaXMuYXBpX3N1Y2Nlc3MgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoZm9ybV9kYXRhKSB7XHJcbiAgICBjb25zb2xlLmxvZyhmb3JtX2RhdGEpXHJcbiAgICB0aGlzLnJlc2V0QXBpRXJyb3JzKCk7XHJcbiAgICAgbGV0IHBvc3RfZGF0YSA9IHtcclxuICAgICAgJ2NhbmNlbFJlYXNvbic6IGZvcm1fZGF0YS5yZWFzb25cclxuICAgIH07XHJcbiAgICBpZiAoZm9ybV9kYXRhLnNlbmRfbWVzc2FnZSkge1xyXG4gICAgICBpZiAoIWZvcm1fZGF0YS5tZXNzYWdlLnJlcGxhY2UoL1xccy9nLCAnJykubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5hcGlfZXJyb3IgPSAnTWVzc2FnZSBjYW5ub3QgYmUgZW1wdHknO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBwb3N0X2RhdGFbJ2NvbW11bmljYXRpb25NZXNzYWdlJ10gPSBmb3JtX2RhdGEubWVzc2FnZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRhdGEuaXNCYXRjaCAmJiAhcG9zdF9kYXRhWydjb21tdW5pY2F0aW9uTWVzc2FnZSddKSB7XHJcbiAgICAgIHRoaXMuYXBpX2Vycm9yID0gJ01lc3NhZ2UgY2Fubm90IGJlIGVtcHR5JztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocG9zdF9kYXRhKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiYW1Gb3JtXCIgW25nQ2xhc3NdPVwidGhpcy5kYXRhLnRoZW1lXCIgbm92YWxpZGF0ZSAobmdTdWJtaXQpPVwiYW1Gb3JtLnZhbGlkICYmIG9uU3VibWl0KGFtRm9ybS52YWx1ZSlcIj5cclxuICA8aDEgY2xhc3M9XCJtYXQtZGlhbG9nLXRpdGxlXCI+XHJcbiAgICA8YnV0dG9uICNxdWV1ZSBtYXQtZGlhbG9nLWNsb3NlIGNsYXNzPVwibW9kYWxfY2xvc2VcIiBpZD1cImJ0bkNsb3NlXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtd2luZG93LWNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9oMT5cclxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cclxuICAgIDxwIGNsYXNzPVwibWItNCBmb250c2l6ZVwiPiB7e2RhdGEubWVzc2FnZX19PC9wPlxyXG4gICAgPGRpdiAqbmdJZj1cImRhdGEgJiYgZGF0YS5jYW5jZWxQb2xpY3lcIiBjbGFzcz1cInBvbGljaWVzXCI+XHJcbiAgICAgIDxwLWFjY29yZGlvbiBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxwLWFjY29yZGlvblRhYj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPGg0PkNhbmNlbGxhdGlvbiBQb2xpY2llczwvaDQ+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPHA+WW91IGNhbiBjYW5jZWwgeW91ciB7e2RhdGEuYm9va319cyBhbnkgdGltZSB1bnRpbFxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEud3RsaXN0LmRhdGVcIj57e2RhdGEud3RsaXN0LmRhdGV8IGRhdGU6XHJcbiAgICAgICAgICAgICAgbmV3RGF0ZUZvcm1hdH19PC9zcGFuPjxzcGFuICpuZ0lmPVwiZGF0YS53dGxpc3QuYXBwbXREYXRlXCI+e3tkYXRhLnd0bGlzdC5hcHBtdERhdGV8IGRhdGU6XHJcbiAgICAgICAgICAgICAgbmV3RGF0ZUZvcm1hdH19PC9zcGFuPjxzcGFuICpuZ0lmPVwiZGF0YS53dGxpc3Qub3JkZXJEYXRlXCI+e3tkYXRhLnd0bGlzdC5vcmRlckRhdGV8IGRhdGU6XHJcbiAgICAgICAgICAgICAgbmV3RGF0ZUZvcm1hdH19PC9zcGFuPi48c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS53dGxpc3QgJiYgZGF0YS53dGxpc3QucHJvdmlkZXJBY2NvdW50ICYmIGRhdGEud3RsaXN0LnByb3ZpZGVyQWNjb3VudC5idXNpbmVzc05hbWVcIj5cclxuICAgICAgICAgICAgICBJZiB0aGUgc3lzdGVtIGRvZXNu4oCZdCBwZXJtaXQgeW91ciBjYW5jZWxsYXRpb24sXHJcbiAgICAgICAgICAgICAgY29udGFjdCB5b3VyIHByb3ZpZGVyLCB7e2RhdGEud3RsaXN0LnByb3ZpZGVyQWNjb3VudC5idXNpbmVzc05hbWV9fS5cclxuICAgICAgICAgICAgICBJdOKAmXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGVcclxuICAgICAgICAgICAgICBwcm92aWRlciBtYXkgY2FuY2VsIHlvdXIgYm9va2luZ3MgYXQgdGhlaXIgZGlzY3JldGlvbiBmb3IgdGhlaXIgb3duIHJlYXNvbnMuXHJcbiAgICAgICAgICAgICAgSmFsZGVlIHdpbGwga2VlcCB5b3UgaW5mb3JtZWQgcHJvbXB0bHkgcmVnYXJkaW5nIHRoZSBjaGFuZ2VzIHRocm91Z2ggdGltZWx5IG5vdGlmaWNhdGlvbnMuXHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L3AtYWNjb3JkaW9uVGFiPlxyXG4gICAgICAgIDxwLWFjY29yZGlvblRhYj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPGg0PlJlZnVuZCBwb2xpY3kgZm9yIEFkdmFuY2UgUGF5bWVudHMob25seSk8L2g0PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICBJbiB0aGUgY2FzZSBvZiB5b3VyIGNhbmNlbGxhdGlvbiwgYSAzJSAocGF5bWVudCBnYXRld2F5IGZlZSkgd2lsbCBiZSBkZWR1Y3RlZCBmcm9tIHRoZSByZWZ1bmRcclxuICAgICAgICAgICAgb2YgdGhlIGFkdmFuY2VkIHBheW1lbnQgbWFkZS4gRm9yIHNhbWUtZGF5IGNhbmNlbGxhdGlvbnMsIGtpbmRseSBjb250YWN0IHlvdXIgc2VydmljZSBwcm92aWRlcixcclxuICAgICAgICAgICAge3tkYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQuYnVzaW5lc3NOYW1lfX0gdG8gaW5pdGlhdGUgdGhlIHJlZnVuZC4gRm9yIGFueSByZWZ1bmQtcmVsYXRlZCBxdWVyaWVzLCByZWFjaFxyXG4gICAgICAgICAgICBvdXQgdG9cclxuICAgICAgICAgICAge3tkYXRhLnd0bGlzdC5wcm92aWRlckFjY291bnQuYnVzaW5lc3NOYW1lfX0gZm9yIGFzc2lzdGFuY2UuXHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9wLWFjY29yZGlvblRhYj5cclxuICAgICAgPC9wLWFjY29yZGlvbj5cclxuICAgICAgPHAgY2xhc3M9XCJtdC00XCI+IEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjYW5jZWwgdGhpcyB7e2RhdGEuYm9va319PyA8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJkYXRhLmJvb2sgIT09ICdPcmRlcicgJiYgZGF0YS5jYW5jZWxQb2xpY3lcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtZm9ybS1sYWJlbFwiIGZvcj1cImRpc3BsYXlOYW1lXCI+e3tzZWxlY3RfcmVhc29uX2NhcH19KjwvbGFiZWw+XHJcbiAgICAgICAgPG1hdC1jaGlwLWxpc3Q+XHJcbiAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IGNhbmNlbF9yZWFzb24gb2YgY2FuY2VsX3JlYXNvbnNcIiBjbGFzcz1cIm1lLTIgbWItMlwiXHJcbiAgICAgICAgICAgIGNvbG9yPVwie3soY2FuY2VsX3JlYXNvbi52YWx1ZSA9PT0gYW1Gb3JtLmdldCgncmVhc29uJykudmFsdWUpID8gJ3ByaW1hcnknIDogJyd9fVwiXHJcbiAgICAgICAgICAgIHNlbGVjdGVkPVwie3soY2FuY2VsX3JlYXNvbi52YWx1ZSA9PT0gYW1Gb3JtLmdldCgncmVhc29uJykudmFsdWUpID8gdHJ1ZSA6IGZhbHNlfX1cIlxyXG4gICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiKGNhbmNlbF9yZWFzb24udmFsdWUgPT09IGFtRm9ybS5nZXQoJ3JlYXNvbicpLnZhbHVlKSA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSZWFzb24oY2FuY2VsX3JlYXNvbilcIj5cclxuICAgICAgICAgICAge3tjYW5jZWxfcmVhc29uLnRpdGxlfX1cclxuICAgICAgICAgIDwvbWF0LWNoaXA+XHJcbiAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbXQtMlwiPlxyXG4gICAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPVwic2VuZF9tZXNzYWdlXCI+e3tzZW5kX21lc3NhZ2VfY2FwfX0ge3tyZXBfdXNlcm5hbWV9fTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcmVhc29uLWFyZWFcIiAqbmdJZj1cImFtRm9ybS5nZXQoJ3NlbmRfbWVzc2FnZScpLnZhbHVlXCI+XHJcbiAgICAgICAgPHRleHRhcmVhICBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgIGlkPVwibWVzc2FnZVwiIHBJbnB1dFRleHRhcmVhIHBsYWNlaG9sZGVyPVwiTWVzc2FnZVwiIGZvcm1Db250cm9sTmFtZT1cIm1lc3NhZ2VcIj48L3RleHRhcmVhPlxyXG4gICAgICAgIDxhcHAtZmllbGQtZXJyb3ItZGlzcGxheSBbZGlzcGxheUVycm9yXT1cImZlZF9zZXJ2aWNlLmlzRmllbGRWYWxpZChhbUZvcm0sJ21lc3NhZ2UnKVwiXHJcbiAgICAgICAgICBlcnJvck1zZz1cIlBsZWFzZSBlbnRlciBhIG1lc3NhZ2UuXCI+XHJcbiAgICAgICAgPC9hcHAtZmllbGQtZXJyb3ItZGlzcGxheT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyAqbmdJZj1cImRhdGEuYm9vayAhPT0gJ09yZGVyJyYmIGRhdGEuY2FuY2VsUG9saWN5XCIgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxNXB4O2Rpc3BsYXk6IGlubGluZS1mbGV4O1wiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtZGlhbG9nLWNsb3NlIGNsYXNzPVwiY3MtYnRuIGJ0MlwiIGlkPVwiYnRuQ2FuY2VsXCI+e3tjYW5jZWxfYnRuX2NhcH19PC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIG1hdC1idXR0b24gW2Rpc2FibGVkXT1cIiFhbUZvcm0udmFsaWRcIiBjbGFzcz1cImNzLWJ0biBidDFcIiBpZD1cImJ0bk9rXCI+e3tva19idG5fY2FwfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxhcHAtZmllbGQtZXJyb3ItZGlzcGxheSBbZGlzcGxheUVycm9yXT1cInRydWVcIiAqbmdJZj1cImFwaV9lcnJvclwiIGVycm9yTXNnPVwie3thcGlfZXJyb3J9fVwiPjwvYXBwLWZpZWxkLWVycm9yLWRpc3BsYXk+XHJcbiAgPGFwcC1mb3JtLXN1Y2Nlc3MtZGlzcGxheSBbZGlzcGxheU1zZ109XCJ0cnVlXCIgKm5nSWY9XCJhcGlfc3VjY2Vzc1wiIHN1Y2Nlc3NNc2c9XCJ7e2FwaV9zdWNjZXNzfX1cIj5cclxuICA8L2FwcC1mb3JtLXN1Y2Nlc3MtZGlzcGxheT5cclxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBjbGFzcz1cInBhZGRpbmd0b3BcIiAqbmdJZj1cImRhdGEuYm9vayAhPT0gJ09yZGVyJyAmJiAhZGF0YS5jYW5jZWxQb2xpY3lcIj5cclxuICAgIDxidXR0b24gdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJvbkNsaWNrKDApXCIgY2xhc3M9XCJjcy1idG4gYnQyXCIgaWQ9XCJidG5DYW5jZWxcIj57e2NhbmNlbF9idG5fY2FwfX08L2J1dHRvbj5cclxuICAgIDxidXR0b24gdGFiaW5kZXg9XCIyXCIgKGNsaWNrKT1cIm9uQ2xpY2soMSlcIiBpZD1cImJ0bk9rXCJcclxuICAgICAgY2xhc3M9XCJjcy1idG4gYnQxIHJlZGRlbGV0ZSBjaGVja2F2YWlsYWJpbGl0eWJ1dHRvblwiPnt7b2tfYnRuX2NhcH19PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGFwcC1maWVsZC1lcnJvci1kaXNwbGF5IFtkaXNwbGF5RXJyb3JdPVwidHJ1ZVwiICpuZ0lmPVwic2hvd0Vycm9yXCIgZXJyb3JNc2c9XCJEZXBhcnRtZW50IG5hbWUgaXMgcmVxdWlyZWRcIj5cclxuICA8L2FwcC1maWVsZC1lcnJvci1kaXNwbGF5PlxyXG48L2Zvcm0+Il19