ngx-st-sap-bp 1.0.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.
- package/README.md +24 -0
- package/esm2020/lib/base-interfaces.mjs +2 -0
- package/esm2020/lib/components/sap-bp-base-create-edit.mjs +488 -0
- package/esm2020/lib/components/sap-bp-create/sap-bp-create.component.mjs +64 -0
- package/esm2020/lib/components/sap-bp-create-address/sap-bp-create-address.component.mjs +206 -0
- package/esm2020/lib/components/sap-bp-create-contact-person/sap-bp-create-contact-person.component.mjs +68 -0
- package/esm2020/lib/components/sap-bp-details/sap-bp-details.component.mjs +208 -0
- package/esm2020/lib/components/sap-bp-details-address/sap-bp-details-address.component.mjs +23 -0
- package/esm2020/lib/components/sap-bp-details-contact-person/sap-bp-details-contact-person.component.mjs +23 -0
- package/esm2020/lib/components/sap-bp-edit/sap-bp-edit.component.mjs +111 -0
- package/esm2020/lib/components/sap-bp-list/sap-bp-list.component.mjs +111 -0
- package/esm2020/lib/components/sap-bp-list-address/sap-bp-list-address.component.mjs +235 -0
- package/esm2020/lib/components/sap-bp-list-contact-person/sap-bp-list-contact-person.component.mjs +199 -0
- package/esm2020/lib/models/bp-tax-type.enum.mjs +7 -0
- package/esm2020/lib/models/sap-bp-addr-country.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-addr-sic-code.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-addr-state.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-address-dialog.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-address.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-contact-person.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-create.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-edit-auth-flags.enum.mjs +16 -0
- package/esm2020/lib/models/sap-bp-edit.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-global-id.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-group-code.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-industry.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-list.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-payment-terms.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-pricelist.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-qry-group.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-sales-employee.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-ship-type.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-tax.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-technician.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-territory.model.mjs +2 -0
- package/esm2020/lib/models/sap-bp-type-translate.enum.mjs +7 -0
- package/esm2020/lib/models/sap-bp-type.enum.mjs +7 -0
- package/esm2020/lib/models/sap-bp.model.mjs +2 -0
- package/esm2020/lib/services/sap-bp-helper.service.mjs +250 -0
- package/esm2020/lib/services/sap-bp.service.mjs +131 -0
- package/esm2020/lib/st-sap-bp.module.mjs +187 -0
- package/esm2020/ngx-st-sap-bp.mjs +5 -0
- package/esm2020/public-api.mjs +42 -0
- package/fesm2015/ngx-st-sap-bp.mjs +2192 -0
- package/fesm2015/ngx-st-sap-bp.mjs.map +1 -0
- package/fesm2020/ngx-st-sap-bp.mjs +2177 -0
- package/fesm2020/ngx-st-sap-bp.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/base-interfaces.d.ts +9 -0
- package/lib/components/sap-bp-base-create-edit.d.ts +114 -0
- package/lib/components/sap-bp-create/sap-bp-create.component.d.ts +21 -0
- package/lib/components/sap-bp-create-address/sap-bp-create-address.component.d.ts +62 -0
- package/lib/components/sap-bp-create-contact-person/sap-bp-create-contact-person.component.d.ts +20 -0
- package/lib/components/sap-bp-details/sap-bp-details.component.d.ts +66 -0
- package/lib/components/sap-bp-details-address/sap-bp-details-address.component.d.ts +16 -0
- package/lib/components/sap-bp-details-contact-person/sap-bp-details-contact-person.component.d.ts +16 -0
- package/lib/components/sap-bp-edit/sap-bp-edit.component.d.ts +33 -0
- package/lib/components/sap-bp-list/sap-bp-list.component.d.ts +40 -0
- package/lib/components/sap-bp-list-address/sap-bp-list-address.component.d.ts +48 -0
- package/lib/components/sap-bp-list-contact-person/sap-bp-list-contact-person.component.d.ts +41 -0
- package/lib/models/bp-tax-type.enum.d.ts +5 -0
- package/lib/models/sap-bp-addr-country.model.d.ts +4 -0
- package/lib/models/sap-bp-addr-sic-code.model.d.ts +6 -0
- package/lib/models/sap-bp-addr-state.model.d.ts +5 -0
- package/lib/models/sap-bp-address-dialog.model.d.ts +23 -0
- package/lib/models/sap-bp-address.model.d.ts +26 -0
- package/lib/models/sap-bp-contact-person.model.d.ts +18 -0
- package/lib/models/sap-bp-create.model.d.ts +47 -0
- package/lib/models/sap-bp-edit-auth-flags.enum.d.ts +14 -0
- package/lib/models/sap-bp-edit.model.d.ts +4 -0
- package/lib/models/sap-bp-global-id.model.d.ts +5 -0
- package/lib/models/sap-bp-group-code.model.d.ts +4 -0
- package/lib/models/sap-bp-industry.model.d.ts +4 -0
- package/lib/models/sap-bp-list.model.d.ts +9 -0
- package/lib/models/sap-bp-payment-terms.model.d.ts +6 -0
- package/lib/models/sap-bp-pricelist.model.d.ts +5 -0
- package/lib/models/sap-bp-qry-group.model.d.ts +5 -0
- package/lib/models/sap-bp-sales-employee.model.d.ts +4 -0
- package/lib/models/sap-bp-ship-type.model.d.ts +4 -0
- package/lib/models/sap-bp-tax.model.d.ts +5 -0
- package/lib/models/sap-bp-technician.model.d.ts +4 -0
- package/lib/models/sap-bp-territory.model.d.ts +4 -0
- package/lib/models/sap-bp-type-translate.enum.d.ts +5 -0
- package/lib/models/sap-bp-type.enum.d.ts +5 -0
- package/lib/models/sap-bp.model.d.ts +56 -0
- package/lib/services/sap-bp-helper.service.d.ts +15 -0
- package/lib/services/sap-bp.service.d.ts +58 -0
- package/lib/st-sap-bp.module.d.ts +47 -0
- package/package.json +35 -0
- package/public-api.d.ts +38 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Component, HostBinding } from '@angular/core';
|
|
2
|
+
import { SapBpBaseCreateEdit } from '../sap-bp-base-create-edit';
|
|
3
|
+
import { SapBpTypeEnum } from '../../models/sap-bp-type.enum';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../services/sap-bp.service";
|
|
6
|
+
import * as i2 from "@angular/material/dialog";
|
|
7
|
+
import * as i3 from "../../services/sap-bp-helper.service";
|
|
8
|
+
import * as i4 from "@angular/router";
|
|
9
|
+
import * as i5 from "ngx-st-snack-bar";
|
|
10
|
+
import * as i6 from "@ngx-translate/core";
|
|
11
|
+
import * as i7 from "@angular/common";
|
|
12
|
+
import * as i8 from "@angular/material/button";
|
|
13
|
+
import * as i9 from "@angular/material/form-field";
|
|
14
|
+
import * as i10 from "@angular/material/input";
|
|
15
|
+
import * as i11 from "@angular/material/select";
|
|
16
|
+
import * as i12 from "@angular/material/core";
|
|
17
|
+
import * as i13 from "@angular/material/tooltip";
|
|
18
|
+
import * as i14 from "@angular/forms";
|
|
19
|
+
import * as i15 from "ngx-mask";
|
|
20
|
+
import * as i16 from "ngx-st-base-functions";
|
|
21
|
+
import * as i17 from "../sap-bp-list-address/sap-bp-list-address.component";
|
|
22
|
+
import * as i18 from "../sap-bp-list-contact-person/sap-bp-list-contact-person.component";
|
|
23
|
+
export class SapBpCreateComponent extends SapBpBaseCreateEdit {
|
|
24
|
+
constructor(sapBpService, dialog, sapBpHelperService, router, activatedRoute, snackBar, translateService) {
|
|
25
|
+
super(sapBpService, dialog, sapBpHelperService);
|
|
26
|
+
this.router = router;
|
|
27
|
+
this.activatedRoute = activatedRoute;
|
|
28
|
+
this.snackBar = snackBar;
|
|
29
|
+
this.translateService = translateService;
|
|
30
|
+
this.class = 'display-flex-component';
|
|
31
|
+
}
|
|
32
|
+
ngOnInit() {
|
|
33
|
+
this.initForm();
|
|
34
|
+
}
|
|
35
|
+
formSubmitted() {
|
|
36
|
+
this.submitted = true;
|
|
37
|
+
if (this.form.valid &&
|
|
38
|
+
this.shipToAddress?.length > 0 &&
|
|
39
|
+
(this.form.get('cardType').value === SapBpTypeEnum.Lead ||
|
|
40
|
+
(this.form.get('cardType').value !== SapBpTypeEnum.Lead &&
|
|
41
|
+
this.billToAddress?.length > 0))) {
|
|
42
|
+
this.showLoader = true;
|
|
43
|
+
this.sapBpService.saveNewBp(this.prepareDataToSend()).subscribe(() => {
|
|
44
|
+
this.router.navigate(['../'], { relativeTo: this.activatedRoute });
|
|
45
|
+
this.showLoader = false;
|
|
46
|
+
}, () => {
|
|
47
|
+
this.showLoader = false;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.snackBar.warning(this.translateService.instant('global.fillRequiredFields'));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
SapBpCreateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SapBpCreateComponent, deps: [{ token: i1.SapBpService }, { token: i2.MatDialog }, { token: i3.SapBpHelperService }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i5.StSnackBarService }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
56
|
+
SapBpCreateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SapBpCreateComponent, selector: "app-sap-bp-create", host: { properties: { "class": "this.class" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid users-list no-cut\">\r\n <div class=\"card\">\r\n <div class=\"card-header card-header-warning\">\r\n <h3 class=\"card-title\">{{ 'sapAdminBp.titleBpCreate' | translate }}</h3>\r\n </div>\r\n\r\n <div class=\"card-body\">\r\n <a class=\"back-link\" [routerLink]=\"['../']\">\r\n <span class=\"material-icons\">keyboard_backspace</span>\r\n </a>\r\n\r\n <ngx-st-loader\r\n [showLoader]=\"showLoader\"\r\n [positionVal]=\"'fixed'\"\r\n ></ngx-st-loader>\r\n\r\n <form\r\n [formGroup]=\"form\"\r\n id=\"sapBpCreateForm\"\r\n (ngSubmit)=\"formSubmitted()\"\r\n >\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.accountType' | translate }}</mat-label>\r\n <mat-select formControlName=\"cardType\" [required]=\"true\">\r\n <mat-option *ngFor=\"let bpType of bpTypeAllowed\" [value]=\"bpType\">\r\n {{ 'sapAdminBp.bpType' + bpType | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.accountNo' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n required\r\n formControlName=\"cardCode\"\r\n [maxLength]=\"15\"\r\n />\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n (click)=\"refreshCardCode()\"\r\n [disabled]=\"false\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.accountName' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n required\r\n formControlName=\"cardName\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.foreignName' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"cardForeignName\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.groupCode' | translate }}</mat-label>\r\n <mat-select formControlName=\"groupCode\" [required]=\"true\">\r\n <mat-option\r\n [value]=\"groupCode.id\"\r\n *ngFor=\"let groupCode of groupCodeList\"\r\n >{{ groupCode.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadGroupCodeList(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.currency' | translate }}</mat-label>\r\n <mat-select formControlName=\"currency\" [required]=\"true\">\r\n <mat-option\r\n [value]=\"currency\"\r\n *ngFor=\"let currency of currencyList\"\r\n >{{ currency }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadCurrency(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\">\r\n <mat-form-field style=\"width: 100px\">\r\n <mat-label>{{ 'global.country' | translate }}</mat-label>\r\n <span matPrefix>+ </span>\r\n <input\r\n type=\"text\"\r\n matInput\r\n required\r\n formControlName=\"countryCodePhone1\"\r\n placeholder=\"1\"\r\n [maxlength]=\"3\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.tel1' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"phone1\"\r\n [placeholder]=\"phonePlaceholder\"\r\n [specialCharacters]=\"[\r\n '[',\r\n ']',\r\n '\\\\',\r\n '+',\r\n ' ',\r\n '(',\r\n ')',\r\n 'e',\r\n 'x',\r\n 't',\r\n '.'\r\n ]\"\r\n [mask]=\"phoneMask\"\r\n [maxlength]=\"phoneMaxLength\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.tel2' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"phone2\"\r\n [maxLength]=\"20\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.cellular' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"cellular\"\r\n [maxLength]=\"50\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.fax' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"fax\"\r\n [maxLength]=\"20\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.email' | translate }}</mat-label>\r\n <input\r\n type=\"email\"\r\n matInput\r\n formControlName=\"email\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.webSite' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"webSite\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.shipType' | translate }}</mat-label>\r\n <mat-select formControlName=\"shipType\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"shipType.id\"\r\n *ngFor=\"let shipType of shipTypeList\"\r\n >{{ shipType.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadShipType(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.industryCode' | translate }}</mat-label>\r\n <mat-select formControlName=\"industryCode\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"industry.id\"\r\n *ngFor=\"let industry of industryList\"\r\n >{{ industry.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadIndustry(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.licTradNum' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"licTradNum\"\r\n [maxLength]=\"32\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.vatIdUnified' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"vatIdUnified\"\r\n [maxLength]=\"32\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.addId' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"addId\"\r\n [maxLength]=\"64\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.registerNo' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"registerNo\"\r\n [maxLength]=\"32\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div\r\n class=\"row col-xs-12 col-sm\"\r\n style=\"padding: 0\"\r\n *ngIf=\"!salesPersonOnlyOnAddress\"\r\n >\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{\r\n 'sapAdminBp.salesEmployee' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"salesEmployee\" [required]=\"true\">\r\n <mat-option\r\n [value]=\"salesEmployee.id\"\r\n *ngFor=\"let salesEmployee of salesEmployeeList\"\r\n >{{ salesEmployee.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadSalesEmployee(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row col-xs-12 col-sm\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.technician' | translate }}</mat-label>\r\n <mat-select formControlName=\"technician\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"technician.id\"\r\n *ngFor=\"let technician of technicianList\"\r\n >{{ technician.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadTechnician(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.territory' | translate }}</mat-label>\r\n <mat-select formControlName=\"territory\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"territory.id\"\r\n *ngFor=\"let territory of territoryList\"\r\n >{{ territory.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadTerritory(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.notes' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"notes\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.globalAccount' | translate }}</mat-label>\r\n <mat-select formControlName=\"globalAccount\" [required]=\"true\">\r\n <mat-option [value]=\"'Yes'\">{{\r\n 'global.yes' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'No'\">{{\r\n 'global.no' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.globalId' | translate }}</mat-label>\r\n <mat-select\r\n formControlName=\"globalId\"\r\n [required]=\"form.get('globalAccount')!.value === 'Yes'\"\r\n >\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"globalId.cardName\"\r\n *ngFor=\"let globalId of globalIdList\"\r\n >{{ globalId.cardName }} -\r\n {{ globalId.priceAgreement }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadGlobalId(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.paymentTerms' | translate }}</mat-label>\r\n <mat-select formControlName=\"paymentCode\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"paymentTerm.id\"\r\n *ngFor=\"let paymentTerm of paymentTermsList\"\r\n >{{ paymentTerm.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadPaymentTerms(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.priceList' | translate }}</mat-label>\r\n <mat-select formControlName=\"priceList\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"pricel.id\"\r\n *ngFor=\"let pricel of priceList\"\r\n >{{ pricel.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadPriceList(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{\r\n 'sapAdminBp.deliveryInstructions' | translate\r\n }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"deliveryInstructions\"\r\n [maxLength]=\"254\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{ 'sapAdminBp.freeText' | translate }}</mat-label>\r\n <textarea\r\n matInput\r\n [rows]=\"5\"\r\n formControlName=\"freeText\"\r\n [maxLength]=\"256000\"\r\n ></textarea>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"row\"\r\n *ngIf=\"\r\n userSettings.bpTaxType === bpTaxType.Us ||\r\n userSettings.bpTaxType === bpTaxType.Eu\r\n \"\r\n >\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{ 'sapAdminBp.vatStatus' | translate }}</mat-label>\r\n <mat-select formControlName=\"vatStatus\">\r\n <mat-option value=\"Y\">{{\r\n 'sapAdminBp.vatStatusLiable' | translate\r\n }}</mat-option>\r\n <mat-option value=\"N\">{{\r\n 'sapAdminBp.vatStatusExempt' | translate\r\n }}</mat-option>\r\n <mat-option\r\n value=\"E\"\r\n *ngIf=\"userSettings.bpTaxType === bpTaxType.Eu\"\r\n >{{ 'sapAdminBp.vatStatusEu' | translate }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{ 'global.status' | translate }}</mat-label>\r\n <mat-select formControlName=\"status\">\r\n <mat-option value=\"On-Hold\">{{\r\n 'sapAdminBp.statusOnHold' | translate\r\n }}</mat-option>\r\n <mat-option value=\"Inactive\">{{\r\n 'sapAdminBp.statusInactive' | translate\r\n }}</mat-option>\r\n <mat-option value=\"\">{{\r\n 'sapAdminBp.statusActive' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"form.get('status')?.value !== 'Active'\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{\r\n 'sapAdminBp.inactiveComment' | translate\r\n }}</mat-label>\r\n <textarea\r\n matInput\r\n [rows]=\"3\"\r\n formControlName=\"inactiveComment\"\r\n ></textarea>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n\r\n <hr />\r\n\r\n <app-sap-bp-list-contact-person\r\n [contactPersons]=\"initContactPersonList\"\r\n (contactPersonChangedEmitter)=\"contactPersonChanged = $event\"\r\n (contactPersonListEmitter)=\"contactPersons = $event\"\r\n ></app-sap-bp-list-contact-person>\r\n\r\n <hr />\r\n\r\n <app-sap-bp-list-address\r\n [addresses]=\"initBillToAddress\"\r\n [required]=\"form.get('cardType')!.value !== 1\"\r\n [errorText]=\"\r\n submitted &&\r\n !(billToAddress && billToAddress.length > 0) &&\r\n form.get('cardType')!.value !== 1\r\n \"\r\n [addressType]=\"'B'\"\r\n [userSettings]=\"userSettings\"\r\n (addressListEmitter)=\"setBillToAddress($event)\"\r\n (addressChangedEmitter)=\"setAddressChanged($event)\"\r\n ></app-sap-bp-list-address>\r\n\r\n <hr />\r\n\r\n <app-sap-bp-list-address\r\n [addresses]=\"initShipToAddress\"\r\n [required]=\"true\"\r\n [errorText]=\"submitted && !(shipToAddress && shipToAddress.length > 0)\"\r\n [addressType]=\"'S'\"\r\n [useTaxCode]=\"userSettings.bpTaxType === bpTaxType.Us\"\r\n [userSettings]=\"userSettings\"\r\n (addressListEmitter)=\"setShipToAddress($event)\"\r\n (addressChangedEmitter)=\"setAddressChanged($event)\"\r\n ></app-sap-bp-list-address>\r\n\r\n <hr />\r\n\r\n <div class=\"contact-person-container\">\r\n <div class=\"row align-items-center\">\r\n <p class=\"contact-person-title\">\r\n {{ 'sapAdminBp.qryGroup' | translate }}\r\n </p>\r\n <button\r\n color=\"primary\"\r\n mat-button\r\n (click)=\"showQryGroup = !showQryGroup\"\r\n style=\"font-weight: bold; margin-left: 10px\"\r\n >\r\n <ng-container *ngIf=\"!showQryGroup\">{{\r\n 'global.show' | translate\r\n }}</ng-container>\r\n <ng-container *ngIf=\"showQryGroup\">{{\r\n 'global.hide' | translate\r\n }}</ng-container>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"showQryGroup\">\r\n <div class=\"col-xs-12 col-sm-6\">\r\n <div\r\n class=\"row qry-group-row\"\r\n *ngFor=\"let group of qryGroupList | slice: 0 : 32\"\r\n >\r\n <div class=\"qry-group-name\">\r\n {{ group.name }}\r\n </div>\r\n <div class=\"qry-group-val\">\r\n <mat-form-field>\r\n <mat-select [(ngModel)]=\"group.value\">\r\n <mat-option [value]=\"'Y'\">{{\r\n 'global.yes' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'N'\">{{\r\n 'global.no' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-xs-12 col-sm-6\">\r\n <div\r\n class=\"row qry-group-row\"\r\n *ngFor=\"let group of qryGroupList | slice: 32 : 64\"\r\n >\r\n <div class=\"qry-group-name\">\r\n {{ group.name }}\r\n </div>\r\n <div class=\"qry-group-val\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-select [(ngModel)]=\"group.value\">\r\n <mat-option [value]=\"'Y'\">{{\r\n 'global.yes' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'N'\">{{\r\n 'global.no' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <button\r\n mat-raised-button\r\n color=\"accent\"\r\n form=\"sapBpCreateForm\"\r\n type=\"submit\"\r\n >\r\n {{ 'global.save' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr:hover{background-color:#a5d6a7}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}table::ng-deep .actions-cell{width:115px!important}table::ng-deep .is-default-cell{width:100px!important}.contact-person-container{margin-top:1rem}.contact-person-container .contact-person-title{margin:0;font-weight:500}.qry-group-row{margin:5px 0}.qry-group-row .qry-group-name{width:250px;align-self:center}.qry-group-row .qry-group-val{align-self:center}.error-text{color:#ef5350}\n"], dependencies: [{ kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "directive", type: i9.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i13.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i14.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i14.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: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i14.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i14.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i14.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i14.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i14.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i15.MaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "triggerOnMaskChange"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "directive", type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.LoaderComponent, selector: "ngx-st-loader", inputs: ["showLoader", "positionVal"] }, { kind: "component", type: i17.SapBpListAddressComponent, selector: "app-sap-bp-list-address", inputs: ["addresses", "errorText", "addressType", "required", "baseIndustryCode", "disableEdit", "disableAdd", "detailsView", "canEditInDetails", "useTaxCode", "userSettings"], outputs: ["addressListEmitter", "addressChangedEmitter", "deletedAddressEmitter"] }, { kind: "component", type: i18.SapBpListContactPersonComponent, selector: "app-sap-bp-list-contact-person", inputs: ["contactPersons", "disableEdit", "disableAdd", "detailsView", "canEditInDetails"], outputs: ["contactPersonChangedEmitter", "contactPersonListEmitter", "deletedContactPersonEmitter"] }, { kind: "pipe", type: i7.SlicePipe, name: "slice" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
|
|
57
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SapBpCreateComponent, decorators: [{
|
|
58
|
+
type: Component,
|
|
59
|
+
args: [{ selector: 'app-sap-bp-create', template: "<div class=\"container-fluid users-list no-cut\">\r\n <div class=\"card\">\r\n <div class=\"card-header card-header-warning\">\r\n <h3 class=\"card-title\">{{ 'sapAdminBp.titleBpCreate' | translate }}</h3>\r\n </div>\r\n\r\n <div class=\"card-body\">\r\n <a class=\"back-link\" [routerLink]=\"['../']\">\r\n <span class=\"material-icons\">keyboard_backspace</span>\r\n </a>\r\n\r\n <ngx-st-loader\r\n [showLoader]=\"showLoader\"\r\n [positionVal]=\"'fixed'\"\r\n ></ngx-st-loader>\r\n\r\n <form\r\n [formGroup]=\"form\"\r\n id=\"sapBpCreateForm\"\r\n (ngSubmit)=\"formSubmitted()\"\r\n >\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.accountType' | translate }}</mat-label>\r\n <mat-select formControlName=\"cardType\" [required]=\"true\">\r\n <mat-option *ngFor=\"let bpType of bpTypeAllowed\" [value]=\"bpType\">\r\n {{ 'sapAdminBp.bpType' + bpType | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.accountNo' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n required\r\n formControlName=\"cardCode\"\r\n [maxLength]=\"15\"\r\n />\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n (click)=\"refreshCardCode()\"\r\n [disabled]=\"false\"\r\n type=\"button\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.accountName' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n required\r\n formControlName=\"cardName\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.foreignName' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"cardForeignName\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.groupCode' | translate }}</mat-label>\r\n <mat-select formControlName=\"groupCode\" [required]=\"true\">\r\n <mat-option\r\n [value]=\"groupCode.id\"\r\n *ngFor=\"let groupCode of groupCodeList\"\r\n >{{ groupCode.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadGroupCodeList(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.currency' | translate }}</mat-label>\r\n <mat-select formControlName=\"currency\" [required]=\"true\">\r\n <mat-option\r\n [value]=\"currency\"\r\n *ngFor=\"let currency of currencyList\"\r\n >{{ currency }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadCurrency(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\">\r\n <mat-form-field style=\"width: 100px\">\r\n <mat-label>{{ 'global.country' | translate }}</mat-label>\r\n <span matPrefix>+ </span>\r\n <input\r\n type=\"text\"\r\n matInput\r\n required\r\n formControlName=\"countryCodePhone1\"\r\n placeholder=\"1\"\r\n [maxlength]=\"3\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.tel1' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"phone1\"\r\n [placeholder]=\"phonePlaceholder\"\r\n [specialCharacters]=\"[\r\n '[',\r\n ']',\r\n '\\\\',\r\n '+',\r\n ' ',\r\n '(',\r\n ')',\r\n 'e',\r\n 'x',\r\n 't',\r\n '.'\r\n ]\"\r\n [mask]=\"phoneMask\"\r\n [maxlength]=\"phoneMaxLength\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.tel2' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"phone2\"\r\n [maxLength]=\"20\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.cellular' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"cellular\"\r\n [maxLength]=\"50\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.fax' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"fax\"\r\n [maxLength]=\"20\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.email' | translate }}</mat-label>\r\n <input\r\n type=\"email\"\r\n matInput\r\n formControlName=\"email\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.webSite' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"webSite\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.shipType' | translate }}</mat-label>\r\n <mat-select formControlName=\"shipType\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"shipType.id\"\r\n *ngFor=\"let shipType of shipTypeList\"\r\n >{{ shipType.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadShipType(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.industryCode' | translate }}</mat-label>\r\n <mat-select formControlName=\"industryCode\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"industry.id\"\r\n *ngFor=\"let industry of industryList\"\r\n >{{ industry.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadIndustry(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.licTradNum' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"licTradNum\"\r\n [maxLength]=\"32\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.vatIdUnified' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"vatIdUnified\"\r\n [maxLength]=\"32\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.addId' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"addId\"\r\n [maxLength]=\"64\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.registerNo' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"registerNo\"\r\n [maxLength]=\"32\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div\r\n class=\"row col-xs-12 col-sm\"\r\n style=\"padding: 0\"\r\n *ngIf=\"!salesPersonOnlyOnAddress\"\r\n >\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{\r\n 'sapAdminBp.salesEmployee' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"salesEmployee\" [required]=\"true\">\r\n <mat-option\r\n [value]=\"salesEmployee.id\"\r\n *ngFor=\"let salesEmployee of salesEmployeeList\"\r\n >{{ salesEmployee.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadSalesEmployee(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row col-xs-12 col-sm\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.technician' | translate }}</mat-label>\r\n <mat-select formControlName=\"technician\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"technician.id\"\r\n *ngFor=\"let technician of technicianList\"\r\n >{{ technician.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadTechnician(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.territory' | translate }}</mat-label>\r\n <mat-select formControlName=\"territory\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"territory.id\"\r\n *ngFor=\"let territory of territoryList\"\r\n >{{ territory.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadTerritory(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.notes' | translate }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"notes\"\r\n [maxLength]=\"100\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-xs-12 col-sm-6\">\r\n <mat-label>{{ 'sapAdminBp.globalAccount' | translate }}</mat-label>\r\n <mat-select formControlName=\"globalAccount\" [required]=\"true\">\r\n <mat-option [value]=\"'Yes'\">{{\r\n 'global.yes' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'No'\">{{\r\n 'global.no' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.globalId' | translate }}</mat-label>\r\n <mat-select\r\n formControlName=\"globalId\"\r\n [required]=\"form.get('globalAccount')!.value === 'Yes'\"\r\n >\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"globalId.cardName\"\r\n *ngFor=\"let globalId of globalIdList\"\r\n >{{ globalId.cardName }} -\r\n {{ globalId.priceAgreement }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadGlobalId(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.paymentTerms' | translate }}</mat-label>\r\n <mat-select formControlName=\"paymentCode\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"paymentTerm.id\"\r\n *ngFor=\"let paymentTerm of paymentTermsList\"\r\n >{{ paymentTerm.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadPaymentTerms(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row col-xs-12 col-sm-6\" style=\"padding: 0\">\r\n <mat-form-field class=\"col\">\r\n <mat-label>{{ 'sapAdminBp.priceList' | translate }}</mat-label>\r\n <mat-select formControlName=\"priceList\">\r\n <mat-option value=\"\">{{\r\n 'global.empty' | translate\r\n }}</mat-option>\r\n <mat-option\r\n [value]=\"pricel.id\"\r\n *ngFor=\"let pricel of priceList\"\r\n >{{ pricel.name }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'global.refreshFromSap' | translate\"\r\n (click)=\"loadPriceList(true)\"\r\n [disabled]=\"refreshingDataFromSap\"\r\n >\r\n <i class=\"material-icons\">refresh</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{\r\n 'sapAdminBp.deliveryInstructions' | translate\r\n }}</mat-label>\r\n <input\r\n type=\"text\"\r\n matInput\r\n formControlName=\"deliveryInstructions\"\r\n [maxLength]=\"254\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{ 'sapAdminBp.freeText' | translate }}</mat-label>\r\n <textarea\r\n matInput\r\n [rows]=\"5\"\r\n formControlName=\"freeText\"\r\n [maxLength]=\"256000\"\r\n ></textarea>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n class=\"row\"\r\n *ngIf=\"\r\n userSettings.bpTaxType === bpTaxType.Us ||\r\n userSettings.bpTaxType === bpTaxType.Eu\r\n \"\r\n >\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{ 'sapAdminBp.vatStatus' | translate }}</mat-label>\r\n <mat-select formControlName=\"vatStatus\">\r\n <mat-option value=\"Y\">{{\r\n 'sapAdminBp.vatStatusLiable' | translate\r\n }}</mat-option>\r\n <mat-option value=\"N\">{{\r\n 'sapAdminBp.vatStatusExempt' | translate\r\n }}</mat-option>\r\n <mat-option\r\n value=\"E\"\r\n *ngIf=\"userSettings.bpTaxType === bpTaxType.Eu\"\r\n >{{ 'sapAdminBp.vatStatusEu' | translate }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{ 'global.status' | translate }}</mat-label>\r\n <mat-select formControlName=\"status\">\r\n <mat-option value=\"On-Hold\">{{\r\n 'sapAdminBp.statusOnHold' | translate\r\n }}</mat-option>\r\n <mat-option value=\"Inactive\">{{\r\n 'sapAdminBp.statusInactive' | translate\r\n }}</mat-option>\r\n <mat-option value=\"\">{{\r\n 'sapAdminBp.statusActive' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"form.get('status')?.value !== 'Active'\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-label>{{\r\n 'sapAdminBp.inactiveComment' | translate\r\n }}</mat-label>\r\n <textarea\r\n matInput\r\n [rows]=\"3\"\r\n formControlName=\"inactiveComment\"\r\n ></textarea>\r\n </mat-form-field>\r\n </div>\r\n </form>\r\n\r\n <hr />\r\n\r\n <app-sap-bp-list-contact-person\r\n [contactPersons]=\"initContactPersonList\"\r\n (contactPersonChangedEmitter)=\"contactPersonChanged = $event\"\r\n (contactPersonListEmitter)=\"contactPersons = $event\"\r\n ></app-sap-bp-list-contact-person>\r\n\r\n <hr />\r\n\r\n <app-sap-bp-list-address\r\n [addresses]=\"initBillToAddress\"\r\n [required]=\"form.get('cardType')!.value !== 1\"\r\n [errorText]=\"\r\n submitted &&\r\n !(billToAddress && billToAddress.length > 0) &&\r\n form.get('cardType')!.value !== 1\r\n \"\r\n [addressType]=\"'B'\"\r\n [userSettings]=\"userSettings\"\r\n (addressListEmitter)=\"setBillToAddress($event)\"\r\n (addressChangedEmitter)=\"setAddressChanged($event)\"\r\n ></app-sap-bp-list-address>\r\n\r\n <hr />\r\n\r\n <app-sap-bp-list-address\r\n [addresses]=\"initShipToAddress\"\r\n [required]=\"true\"\r\n [errorText]=\"submitted && !(shipToAddress && shipToAddress.length > 0)\"\r\n [addressType]=\"'S'\"\r\n [useTaxCode]=\"userSettings.bpTaxType === bpTaxType.Us\"\r\n [userSettings]=\"userSettings\"\r\n (addressListEmitter)=\"setShipToAddress($event)\"\r\n (addressChangedEmitter)=\"setAddressChanged($event)\"\r\n ></app-sap-bp-list-address>\r\n\r\n <hr />\r\n\r\n <div class=\"contact-person-container\">\r\n <div class=\"row align-items-center\">\r\n <p class=\"contact-person-title\">\r\n {{ 'sapAdminBp.qryGroup' | translate }}\r\n </p>\r\n <button\r\n color=\"primary\"\r\n mat-button\r\n (click)=\"showQryGroup = !showQryGroup\"\r\n style=\"font-weight: bold; margin-left: 10px\"\r\n >\r\n <ng-container *ngIf=\"!showQryGroup\">{{\r\n 'global.show' | translate\r\n }}</ng-container>\r\n <ng-container *ngIf=\"showQryGroup\">{{\r\n 'global.hide' | translate\r\n }}</ng-container>\r\n </button>\r\n </div>\r\n\r\n <div class=\"row\" *ngIf=\"showQryGroup\">\r\n <div class=\"col-xs-12 col-sm-6\">\r\n <div\r\n class=\"row qry-group-row\"\r\n *ngFor=\"let group of qryGroupList | slice: 0 : 32\"\r\n >\r\n <div class=\"qry-group-name\">\r\n {{ group.name }}\r\n </div>\r\n <div class=\"qry-group-val\">\r\n <mat-form-field>\r\n <mat-select [(ngModel)]=\"group.value\">\r\n <mat-option [value]=\"'Y'\">{{\r\n 'global.yes' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'N'\">{{\r\n 'global.no' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-xs-12 col-sm-6\">\r\n <div\r\n class=\"row qry-group-row\"\r\n *ngFor=\"let group of qryGroupList | slice: 32 : 64\"\r\n >\r\n <div class=\"qry-group-name\">\r\n {{ group.name }}\r\n </div>\r\n <div class=\"qry-group-val\">\r\n <mat-form-field class=\"col-12\">\r\n <mat-select [(ngModel)]=\"group.value\">\r\n <mat-option [value]=\"'Y'\">{{\r\n 'global.yes' | translate\r\n }}</mat-option>\r\n <mat-option [value]=\"'N'\">{{\r\n 'global.no' | translate\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <button\r\n mat-raised-button\r\n color=\"accent\"\r\n form=\"sapBpCreateForm\"\r\n type=\"submit\"\r\n >\r\n {{ 'global.save' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".search-form button{height:40px}.search-form mat-form-field:first-child{padding-left:0}.search-form mat-form-field:last-child{padding-right:0}.search-form .clear{padding:0}.search-form .clear i{height:20px;width:20px;font-size:20px;cursor:pointer}table{width:100%}table::ng-deep thead tr{background-color:#fff9c4}table::ng-deep thead tr th{border-color:#fdd835}table::ng-deep tbody>tr{cursor:pointer}table::ng-deep tbody>tr.active{background-color:#a5d6a7}table::ng-deep tbody>tr:hover{background-color:#a5d6a7}table::ng-deep tbody>tr.disabled{cursor:not-allowed}table::ng-deep tbody>tr.disabled:hover{background-color:inherit}table::ng-deep tbody>tr.detail-row{height:0;cursor:default}table::ng-deep tbody>tr.detail-row:hover{background-color:transparent}table::ng-deep tbody>tr.detail-row .element-detail{overflow:hidden;display:flex}table::ng-deep tbody>tr.detail-row .element-detail p{padding:20px 0;margin-bottom:0;white-space:pre-wrap}table::ng-deep tbody>tr td i.active-row{color:#1b5e20;font-weight:700;font-size:25px;height:25px;width:25px;margin-top:2px}table::ng-deep tbody>tr td>div{max-height:200px;overflow:hidden;overflow-y:auto}table::ng-deep tbody>tr td a button{color:#000}table::ng-deep tbody>tr td a i{color:#333}table::ng-deep .mat-column-active{width:48px}table.no-hover::ng-deep tbody tr{cursor:default}table.no-hover::ng-deep tbody tr.active{background-color:transparent}table.no-hover::ng-deep tbody tr:hover{background-color:transparent}table.admin-table::ng-deep .actions-cell{width:100px}table::ng-deep .actions-cell{width:115px!important}table::ng-deep .is-default-cell{width:100px!important}.contact-person-container{margin-top:1rem}.contact-person-container .contact-person-title{margin:0;font-weight:500}.qry-group-row{margin:5px 0}.qry-group-row .qry-group-name{width:250px;align-self:center}.qry-group-row .qry-group-val{align-self:center}.error-text{color:#ef5350}\n"] }]
|
|
60
|
+
}], ctorParameters: function () { return [{ type: i1.SapBpService }, { type: i2.MatDialog }, { type: i3.SapBpHelperService }, { type: i4.Router }, { type: i4.ActivatedRoute }, { type: i5.StSnackBarService }, { type: i6.TranslateService }]; }, propDecorators: { class: [{
|
|
61
|
+
type: HostBinding,
|
|
62
|
+
args: ['class']
|
|
63
|
+
}] } });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FwLWJwLWNyZWF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3Qtc2FwLWJwL3NyYy9saWIvY29tcG9uZW50cy9zYXAtYnAtY3JlYXRlL3NhcC1icC1jcmVhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN0LXNhcC1icC9zcmMvbGliL2NvbXBvbmVudHMvc2FwLWJwLWNyZWF0ZS9zYXAtYnAtY3JlYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBS2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTOUQsTUFBTSxPQUFPLG9CQUNYLFNBQVEsbUJBQW1CO0lBSzNCLFlBQ0UsWUFBMEIsRUFDMUIsTUFBaUIsRUFDakIsa0JBQXNDLEVBQzlCLE1BQWMsRUFDZCxjQUE4QixFQUM5QixRQUEyQixFQUMzQixnQkFBa0M7UUFFMUMsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUx4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQW1CO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFUdEIsVUFBSyxHQUFHLHdCQUF3QixDQUFDO0lBWXZELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDZixJQUFJLENBQUMsYUFBYSxFQUFFLE1BQU0sR0FBRyxDQUFDO1lBQzlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFFLENBQUMsS0FBSyxLQUFLLGFBQWEsQ0FBQyxJQUFJO2dCQUN0RCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLEtBQUssS0FBSyxhQUFhLENBQUMsSUFBSTtvQkFDdEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDcEM7WUFDQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUV2QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FDN0QsR0FBRyxFQUFFO2dCQUNILElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQzFCLENBQUMsRUFDRCxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDMUIsQ0FBQyxDQUNGLENBQUM7U0FDSDthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FDM0QsQ0FBQztTQUNIO0lBQ0gsQ0FBQzs7aUhBL0NVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGlJQ2ZqQyw2a3pCQXNyQkE7MkZEdnFCYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsbUJBQW1COzZRQVFQLEtBQUs7c0JBQTFCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTYXBCcEJhc2VDcmVhdGVFZGl0IH0gZnJvbSAnLi4vc2FwLWJwLWJhc2UtY3JlYXRlLWVkaXQnO1xyXG5pbXBvcnQgeyBTYXBCcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYXAtYnAuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFNhcEJwVHlwZUVudW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvc2FwLWJwLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFNhcEJwSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NhcC1icC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0U25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXN0LXNuYWNrLWJhcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zYXAtYnAtY3JlYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2FwLWJwLWNyZWF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2FwLWJwLWNyZWF0ZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2FwQnBDcmVhdGVDb21wb25lbnRcclxuICBleHRlbmRzIFNhcEJwQmFzZUNyZWF0ZUVkaXRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ2Rpc3BsYXktZmxleC1jb21wb25lbnQnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHNhcEJwU2VydmljZTogU2FwQnBTZXJ2aWNlLFxyXG4gICAgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBzYXBCcEhlbHBlclNlcnZpY2U6IFNhcEJwSGVscGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IFN0U25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihzYXBCcFNlcnZpY2UsIGRpYWxvZywgc2FwQnBIZWxwZXJTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgZm9ybVN1Ym1pdHRlZCgpIHtcclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtLnZhbGlkICYmXHJcbiAgICAgIHRoaXMuc2hpcFRvQWRkcmVzcz8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAodGhpcy5mb3JtLmdldCgnY2FyZFR5cGUnKSEudmFsdWUgPT09IFNhcEJwVHlwZUVudW0uTGVhZCB8fFxyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdjYXJkVHlwZScpIS52YWx1ZSAhPT0gU2FwQnBUeXBlRW51bS5MZWFkICYmXHJcbiAgICAgICAgICB0aGlzLmJpbGxUb0FkZHJlc3M/Lmxlbmd0aCA+IDApKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLnNhcEJwU2VydmljZS5zYXZlTmV3QnAodGhpcy5wcmVwYXJlRGF0YVRvU2VuZCgpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xyXG4gICAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNuYWNrQmFyLndhcm5pbmcoXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2dsb2JhbC5maWxsUmVxdWlyZWRGaWVsZHMnKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHVzZXJzLWxpc3Qgbm8tY3V0XCI+XHJcbiAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBjYXJkLWhlYWRlci13YXJuaW5nXCI+XHJcbiAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyAnc2FwQWRtaW5CcC50aXRsZUJwQ3JlYXRlJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgIDxhIGNsYXNzPVwiYmFjay1saW5rXCIgW3JvdXRlckxpbmtdPVwiWycuLi8nXVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5rZXlib2FyZF9iYWNrc3BhY2U8L3NwYW4+XHJcbiAgICAgIDwvYT5cclxuXHJcbiAgICAgIDxuZ3gtc3QtbG9hZGVyXHJcbiAgICAgICAgW3Nob3dMb2FkZXJdPVwic2hvd0xvYWRlclwiXHJcbiAgICAgICAgW3Bvc2l0aW9uVmFsXT1cIidmaXhlZCdcIlxyXG4gICAgICA+PC9uZ3gtc3QtbG9hZGVyPlxyXG5cclxuICAgICAgPGZvcm1cclxuICAgICAgICBbZm9ybUdyb3VwXT1cImZvcm1cIlxyXG4gICAgICAgIGlkPVwic2FwQnBDcmVhdGVGb3JtXCJcclxuICAgICAgICAobmdTdWJtaXQpPVwiZm9ybVN1Ym1pdHRlZCgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLmFjY291bnRUeXBlJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYXJkVHlwZVwiIFtyZXF1aXJlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGJwVHlwZSBvZiBicFR5cGVBbGxvd2VkXCIgW3ZhbHVlXT1cImJwVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ3NhcEFkbWluQnAuYnBUeXBlJyArIGJwVHlwZSB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC14cy0xMiBjb2wtc20tNlwiIHN0eWxlPVwicGFkZGluZzogMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLmFjY291bnRObycgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2FyZENvZGVcIlxyXG4gICAgICAgICAgICAgICAgW21heExlbmd0aF09XCIxNVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZWZyZXNoQ2FyZENvZGUoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnc2FwQWRtaW5CcC5hY2NvdW50TmFtZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjYXJkTmFtZVwiXHJcbiAgICAgICAgICAgICAgW21heExlbmd0aF09XCIxMDBcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnc2FwQWRtaW5CcC5mb3JlaWduTmFtZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY2FyZEZvcmVpZ25OYW1lXCJcclxuICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjEwMFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC14cy0xMiBjb2wtc20tNlwiIHN0eWxlPVwicGFkZGluZzogMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLmdyb3VwQ29kZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJncm91cENvZGVcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdyb3VwQ29kZS5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cENvZGUgb2YgZ3JvdXBDb2RlTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgID57eyBncm91cENvZGUubmFtZSB9fTwvbWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidnbG9iYWwucmVmcmVzaEZyb21TYXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZEdyb3VwQ29kZUxpc3QodHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWZyZXNoaW5nRGF0YUZyb21TYXBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnJlZnJlc2g8L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wteHMtMTIgY29sLXNtLTZcIiBzdHlsZT1cInBhZGRpbmc6IDBcIj5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnc2FwQWRtaW5CcC5jdXJyZW5jeScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjdXJyZW5jeVwiIFtyZXF1aXJlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY3VycmVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY3VycmVuY3kgb2YgY3VycmVuY3lMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IGN1cnJlbmN5IH19PC9tYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2dsb2JhbC5yZWZyZXNoRnJvbVNhcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJsb2FkQ3VycmVuY3kodHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWZyZXNoaW5nRGF0YUZyb21TYXBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnJlZnJlc2g8L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLXhzLTEyIGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIndpZHRoOiAxMDBweFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ2dsb2JhbC5jb3VudHJ5JyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxzcGFuIG1hdFByZWZpeD4rICZuYnNwOzwvc3Bhbj5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeUNvZGVQaG9uZTFcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIxXCJcclxuICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiM1wiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAudGVsMScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZTFcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBob25lUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgW3NwZWNpYWxDaGFyYWN0ZXJzXT1cIltcclxuICAgICAgICAgICAgICAgICAgJ1snLFxyXG4gICAgICAgICAgICAgICAgICAnXScsXHJcbiAgICAgICAgICAgICAgICAgICdcXFxcJyxcclxuICAgICAgICAgICAgICAgICAgJysnLFxyXG4gICAgICAgICAgICAgICAgICAnICcsXHJcbiAgICAgICAgICAgICAgICAgICcoJyxcclxuICAgICAgICAgICAgICAgICAgJyknLFxyXG4gICAgICAgICAgICAgICAgICAnZScsXHJcbiAgICAgICAgICAgICAgICAgICd4JyxcclxuICAgICAgICAgICAgICAgICAgJ3QnLFxyXG4gICAgICAgICAgICAgICAgICAnLidcclxuICAgICAgICAgICAgICAgIF1cIlxyXG4gICAgICAgICAgICAgICAgW21hc2tdPVwicGhvbmVNYXNrXCJcclxuICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwicGhvbmVNYXhMZW5ndGhcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnc2FwQWRtaW5CcC50ZWwyJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZTJcIlxyXG4gICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMjBcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAuY2VsbHVsYXInIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNlbGx1bGFyXCJcclxuICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjUwXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAuZmF4JyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmYXhcIlxyXG4gICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMjBcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAuZW1haWwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXHJcbiAgICAgICAgICAgICAgW21heExlbmd0aF09XCIxMDBcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnc2FwQWRtaW5CcC53ZWJTaXRlJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3ZWJTaXRlXCJcclxuICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjEwMFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC14cy0xMiBjb2wtc20tNlwiIHN0eWxlPVwicGFkZGluZzogMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLnNoaXBUeXBlJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNoaXBUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICdnbG9iYWwuZW1wdHknIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzaGlwVHlwZS5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzaGlwVHlwZSBvZiBzaGlwVHlwZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICA+e3sgc2hpcFR5cGUubmFtZSB9fTwvbWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidnbG9iYWwucmVmcmVzaEZyb21TYXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZFNoaXBUeXBlKHRydWUpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVmcmVzaGluZ0RhdGFGcm9tU2FwXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLXhzLTEyIGNvbC1zbS02XCIgc3R5bGU9XCJwYWRkaW5nOiAwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAuaW5kdXN0cnlDb2RlJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImluZHVzdHJ5Q29kZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJcIj57e1xyXG4gICAgICAgICAgICAgICAgICAnZ2xvYmFsLmVtcHR5JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaW5kdXN0cnkuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaW5kdXN0cnkgb2YgaW5kdXN0cnlMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IGluZHVzdHJ5Lm5hbWUgfX08L21hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInZ2xvYmFsLnJlZnJlc2hGcm9tU2FwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRJbmR1c3RyeSh0cnVlKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZnJlc2hpbmdEYXRhRnJvbVNhcFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+cmVmcmVzaDwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAubGljVHJhZE51bScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGljVHJhZE51bVwiXHJcbiAgICAgICAgICAgICAgW21heExlbmd0aF09XCIzMlwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLnZhdElkVW5pZmllZCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmF0SWRVbmlmaWVkXCJcclxuICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjMyXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLmFkZElkJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhZGRJZFwiXHJcbiAgICAgICAgICAgICAgW21heExlbmd0aF09XCI2NFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLnJlZ2lzdGVyTm8nIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlZ2lzdGVyTm9cIlxyXG4gICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMzJcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInJvdyBjb2wteHMtMTIgY29sLXNtXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhc2FsZXNQZXJzb25Pbmx5T25BZGRyZXNzXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgICAgICAgJ3NhcEFkbWluQnAuc2FsZXNFbXBsb3llZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNhbGVzRW1wbG95ZWVcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNhbGVzRW1wbG95ZWUuaWRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc2FsZXNFbXBsb3llZSBvZiBzYWxlc0VtcGxveWVlTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgID57eyBzYWxlc0VtcGxveWVlLm5hbWUgfX08L21hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInZ2xvYmFsLnJlZnJlc2hGcm9tU2FwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRTYWxlc0VtcGxveWVlKHRydWUpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVmcmVzaGluZ0RhdGFGcm9tU2FwXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLXhzLTEyIGNvbC1zbVwiIHN0eWxlPVwicGFkZGluZzogMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLnRlY2huaWNpYW4nIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidGVjaG5pY2lhblwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJcIj57e1xyXG4gICAgICAgICAgICAgICAgICAnZ2xvYmFsLmVtcHR5JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGVjaG5pY2lhbi5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0ZWNobmljaWFuIG9mIHRlY2huaWNpYW5MaXN0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IHRlY2huaWNpYW4ubmFtZSB9fTwvbWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidnbG9iYWwucmVmcmVzaEZyb21TYXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZFRlY2huaWNpYW4odHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWZyZXNoaW5nRGF0YUZyb21TYXBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnJlZnJlc2g8L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29sLXhzLTEyIGNvbC1zbS02XCIgc3R5bGU9XCJwYWRkaW5nOiAwXCI+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAudGVycml0b3J5JyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInRlcnJpdG9yeVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJcIj57e1xyXG4gICAgICAgICAgICAgICAgICAnZ2xvYmFsLmVtcHR5JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGVycml0b3J5LmlkXCJcclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRlcnJpdG9yeSBvZiB0ZXJyaXRvcnlMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IHRlcnJpdG9yeS5uYW1lIH19PC9tYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2dsb2JhbC5yZWZyZXNoRnJvbVNhcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJsb2FkVGVycml0b3J5KHRydWUpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVmcmVzaGluZ0RhdGFGcm9tU2FwXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLm5vdGVzJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJub3Rlc1wiXHJcbiAgICAgICAgICAgICAgW21heExlbmd0aF09XCIxMDBcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAuZ2xvYmFsQWNjb3VudCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZ2xvYmFsQWNjb3VudFwiIFtyZXF1aXJlZF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidZZXMnXCI+e3tcclxuICAgICAgICAgICAgICAgICdnbG9iYWwueWVzJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInTm8nXCI+e3tcclxuICAgICAgICAgICAgICAgICdnbG9iYWwubm8nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wteHMtMTIgY29sLXNtLTZcIiBzdHlsZT1cInBhZGRpbmc6IDBcIj5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnc2FwQWRtaW5CcC5nbG9iYWxJZCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2xvYmFsSWRcIlxyXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZvcm0uZ2V0KCdnbG9iYWxBY2NvdW50JykhLnZhbHVlID09PSAnWWVzJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJcIj57e1xyXG4gICAgICAgICAgICAgICAgICAnZ2xvYmFsLmVtcHR5JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2xvYmFsSWQuY2FyZE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ2xvYmFsSWQgb2YgZ2xvYmFsSWRMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IGdsb2JhbElkLmNhcmROYW1lIH19IC1cclxuICAgICAgICAgICAgICAgICAge3sgZ2xvYmFsSWQucHJpY2VBZ3JlZW1lbnQgfX08L21hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInZ2xvYmFsLnJlZnJlc2hGcm9tU2FwJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRHbG9iYWxJZCh0cnVlKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZnJlc2hpbmdEYXRhRnJvbVNhcFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+cmVmcmVzaDwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb2wteHMtMTIgY29sLXNtLTZcIiBzdHlsZT1cInBhZGRpbmc6IDBcIj5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnc2FwQWRtaW5CcC5wYXltZW50VGVybXMnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwicGF5bWVudENvZGVcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiXCI+e3tcclxuICAgICAgICAgICAgICAgICAgJ2dsb2JhbC5lbXB0eScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBheW1lbnRUZXJtLmlkXCJcclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBheW1lbnRUZXJtIG9mIHBheW1lbnRUZXJtc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICA+e3sgcGF5bWVudFRlcm0ubmFtZSB9fTwvbWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidnbG9iYWwucmVmcmVzaEZyb21TYXAnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZFBheW1lbnRUZXJtcyh0cnVlKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZnJlc2hpbmdEYXRhRnJvbVNhcFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+cmVmcmVzaDwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbC14cy0xMiBjb2wtc20tNlwiIHN0eWxlPVwicGFkZGluZzogMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLnByaWNlTGlzdCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJwcmljZUxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiXCI+e3tcclxuICAgICAgICAgICAgICAgICAgJ2dsb2JhbC5lbXB0eScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInByaWNlbC5pZFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcmljZWwgb2YgcHJpY2VMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgPnt7IHByaWNlbC5uYW1lIH19PC9tYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2dsb2JhbC5yZWZyZXNoRnJvbVNhcCcgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJsb2FkUHJpY2VMaXN0KHRydWUpXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVmcmVzaGluZ0RhdGFGcm9tU2FwXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5yZWZyZXNoPC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgICAgICdzYXBBZG1pbkJwLmRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWxpdmVyeUluc3RydWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW21heExlbmd0aF09XCIyNTRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ3NhcEFkbWluQnAuZnJlZVRleHQnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgW3Jvd3NdPVwiNVwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZnJlZVRleHRcIlxyXG4gICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMjU2MDAwXCJcclxuICAgICAgICAgICAgPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInJvd1wiXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICB1c2VyU2V0dGluZ3MuYnBUYXhUeXBlID09PSBicFRheFR5cGUuVXMgfHxcclxuICAgICAgICAgICAgdXNlclNldHRpbmdzLmJwVGF4VHlwZSA9PT0gYnBUYXhUeXBlLkV1XHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdzYXBBZG1pbkJwLnZhdFN0YXR1cycgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidmF0U3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJZXCI+e3tcclxuICAgICAgICAgICAgICAgICdzYXBBZG1pbkJwLnZhdFN0YXR1c0xpYWJsZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIk5cIj57e1xyXG4gICAgICAgICAgICAgICAgJ3NhcEFkbWluQnAudmF0U3RhdHVzRXhlbXB0JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIkVcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ1c2VyU2V0dGluZ3MuYnBUYXhUeXBlID09PSBicFRheFR5cGUuRXVcIlxyXG4gICAgICAgICAgICAgICAgPnt7ICdzYXBBZG1pbkJwLnZhdFN0YXR1c0V1JyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ2dsb2JhbC5zdGF0dXMnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInN0YXR1c1wiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiT24tSG9sZFwiPnt7XHJcbiAgICAgICAgICAgICAgICAnc2FwQWRtaW5CcC5zdGF0dXNPbkhvbGQnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJJbmFjdGl2ZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAnc2FwQWRtaW5CcC5zdGF0dXNJbmFjdGl2ZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiPnt7XHJcbiAgICAgICAgICAgICAgICAnc2FwQWRtaW5CcC5zdGF0dXNBY3RpdmUnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImZvcm0uZ2V0KCdzdGF0dXMnKT8udmFsdWUgIT09ICdBY3RpdmUnXCI+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICAgICAgICdzYXBBZG1pbkJwLmluYWN0aXZlQ29tbWVudCcgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICBbcm93c109XCIzXCJcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbmFjdGl2ZUNvbW1lbnRcIlxyXG4gICAgICAgICAgICA+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgIDxociAvPlxyXG5cclxuICAgICAgPGFwcC1zYXAtYnAtbGlzdC1jb250YWN0LXBlcnNvblxyXG4gICAgICAgIFtjb250YWN0UGVyc29uc109XCJpbml0Q29udGFjdFBlcnNvbkxpc3RcIlxyXG4gICAgICAgIChjb250YWN0UGVyc29uQ2hhbmdlZEVtaXR0ZXIpPVwiY29udGFjdFBlcnNvbkNoYW5nZWQgPSAkZXZlbnRcIlxyXG4gICAgICAgIChjb250YWN0UGVyc29uTGlzdEVtaXR0ZXIpPVwiY29udGFjdFBlcnNvbnMgPSAkZXZlbnRcIlxyXG4gICAgICA+PC9hcHAtc2FwLWJwLWxpc3QtY29udGFjdC1wZXJzb24+XHJcblxyXG4gICAgICA8aHIgLz5cclxuXHJcbiAgICAgIDxhcHAtc2FwLWJwLWxpc3QtYWRkcmVzc1xyXG4gICAgICAgIFthZGRyZXNzZXNdPVwiaW5pdEJpbGxUb0FkZHJlc3NcIlxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJmb3JtLmdldCgnY2FyZFR5cGUnKSEudmFsdWUgIT09IDFcIlxyXG4gICAgICAgIFtlcnJvclRleHRdPVwiXHJcbiAgICAgICAgICBzdWJtaXR0ZWQgJiZcclxuICAgICAgICAgICEoYmlsbFRvQWRkcmVzcyAmJiBiaWxsVG9BZGRyZXNzLmxlbmd0aCA+IDApICYmXHJcbiAgICAgICAgICBmb3JtLmdldCgnY2FyZFR5cGUnKSEudmFsdWUgIT09IDFcclxuICAgICAgICBcIlxyXG4gICAgICAgIFthZGRyZXNzVHlwZV09XCInQidcIlxyXG4gICAgICAgIFt1c2VyU2V0dGluZ3NdPVwidXNlclNldHRpbmdzXCJcclxuICAgICAgICAoYWRkcmVzc0xpc3RFbWl0dGVyKT1cInNldEJpbGxUb0FkZHJlc3MoJGV2ZW50KVwiXHJcbiAgICAgICAgKGFkZHJlc3NDaGFuZ2VkRW1pdHRlcik9XCJzZXRBZGRyZXNzQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgPjwvYXBwLXNhcC1icC1saXN0LWFkZHJlc3M+XHJcblxyXG4gICAgICA8aHIgLz5cclxuXHJcbiAgICAgIDxhcHAtc2FwLWJwLWxpc3QtYWRkcmVzc1xyXG4gICAgICAgIFthZGRyZXNzZXNdPVwiaW5pdFNoaXBUb0FkZHJlc3NcIlxyXG4gICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgICAgICBbZXJyb3JUZXh0XT1cInN1Ym1pdHRlZCAmJiAhKHNoaXBUb0FkZHJlc3MgJiYgc2hpcFRvQWRkcmVzcy5sZW5ndGggPiAwKVwiXHJcbiAgICAgICAgW2FkZHJlc3NUeXBlXT1cIidTJ1wiXHJcbiAgICAgICAgW3VzZVRheENvZGVdPVwidXNlclNldHRpbmdzLmJwVGF4VHlwZSA9PT0gYnBUYXhUeXBlLlVzXCJcclxuICAgICAgICBbdXNlclNldHRpbmdzXT1cInVzZXJTZXR0aW5nc1wiXHJcbiAgICAgICAgKGFkZHJlc3NMaXN0RW1pdHRlcik9XCJzZXRTaGlwVG9BZGRyZXNzKCRldmVudClcIlxyXG4gICAgICAgIChhZGRyZXNzQ2hhbmdlZEVtaXR0ZXIpPVwic2V0QWRkcmVzc0NoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgID48L2FwcC1zYXAtYnAtbGlzdC1hZGRyZXNzPlxyXG5cclxuICAgICAgPGhyIC8+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1wZXJzb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiY29udGFjdC1wZXJzb24tdGl0bGVcIj5cclxuICAgICAgICAgICAge3sgJ3NhcEFkbWluQnAucXJ5R3JvdXAnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dRcnlHcm91cCA9ICFzaG93UXJ5R3JvdXBcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW4tbGVmdDogMTBweFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd1FyeUdyb3VwXCI+e3tcclxuICAgICAgICAgICAgICAnZ2xvYmFsLnNob3cnIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UXJ5R3JvdXBcIj57e1xyXG4gICAgICAgICAgICAgICdnbG9iYWwuaGlkZScgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJzaG93UXJ5R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93IHFyeS1ncm91cC1yb3dcIlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBncm91cCBvZiBxcnlHcm91cExpc3QgfCBzbGljZTogMCA6IDMyXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxcnktZ3JvdXAtbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZ3JvdXAubmFtZSB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxcnktZ3JvdXAtdmFsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwiZ3JvdXAudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ1knXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWwueWVzJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInTidcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbC5ubycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cInJvdyBxcnktZ3JvdXAtcm93XCJcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgcXJ5R3JvdXBMaXN0IHwgc2xpY2U6IDMyIDogNjRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFyeS1ncm91cC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBncm91cC5uYW1lIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFyeS1ncm91cC12YWxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cImdyb3VwLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIidZJ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAnZ2xvYmFsLnllcycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiJ04nXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWwubm8nIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgICAgZm9ybT1cInNhcEJwQ3JlYXRlRm9ybVwiXHJcbiAgICAgICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyAnZ2xvYmFsLnNhdmUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|