ezlibrary_v2 0.0.1
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/esm2020/ezlibrary_v2.mjs +5 -0
- package/esm2020/lib/admin-service/admin-service.service.mjs +36 -0
- package/esm2020/lib/analysis-search/analysis-search.component.mjs +1083 -0
- package/esm2020/lib/assort-service/assort-service.service.mjs +31 -0
- package/esm2020/lib/attribute-definition/attribute-definition.component.mjs +231 -0
- package/esm2020/lib/auth/auth.guard.mjs +40 -0
- package/esm2020/lib/bi-service/bi.service.mjs +58 -0
- package/esm2020/lib/call-info/callinfo.component.mjs +126 -0
- package/esm2020/lib/comman-service/comman-service.service.mjs +679 -0
- package/esm2020/lib/comman-service/share-data-service.service.mjs +23 -0
- package/esm2020/lib/contact-search/contact-search.component.mjs +679 -0
- package/esm2020/lib/contact-service/contact-service.service.mjs +47 -0
- package/esm2020/lib/ezheader/header.component.mjs +383 -0
- package/esm2020/lib/ezlib.module.mjs +220 -0
- package/esm2020/lib/file-upload/fileupload.component.mjs +920 -0
- package/esm2020/lib/file-upload-log/file-upload-log.component.mjs +175 -0
- package/esm2020/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.mjs +14 -0
- package/esm2020/lib/fileupload-module/fileupload-routing.module.mjs +28 -0
- package/esm2020/lib/footer/footer.component.mjs +18 -0
- package/esm2020/lib/globle/common-pdf.service.mjs +28 -0
- package/esm2020/lib/globle/globle-env.service.mjs +45 -0
- package/esm2020/lib/globle/memo-report.service.mjs +2800 -0
- package/esm2020/lib/globle/pdf-service.service.mjs +18848 -0
- package/esm2020/lib/globle/shared-services.service.mjs +27 -0
- package/esm2020/lib/globle/upload-service.service.mjs +69 -0
- package/esm2020/lib/header/header.component.mjs +179 -0
- package/esm2020/lib/invalid/invalid.component.mjs +71 -0
- package/esm2020/lib/logout/logout.component.mjs +107 -0
- package/esm2020/lib/menu-right/menu-right.component.mjs +252 -0
- package/esm2020/lib/pipes/number-with-commas.pipe.mjs +24 -0
- package/esm2020/lib/pipes/order-by-pipe.pipe.mjs +17 -0
- package/esm2020/lib/pipes/selectedCount.mjs +19 -0
- package/esm2020/lib/pipes/sum.pipe.mjs +16 -0
- package/esm2020/lib/pkt-data/pkt-data.component.mjs +1107 -0
- package/esm2020/lib/pricing-service/pricing.service.mjs +58 -0
- package/esm2020/lib/qa-analysis/qa-analysis.component.mjs +1035 -0
- package/esm2020/lib/report-format/report-format.component.mjs +400 -0
- package/esm2020/lib/sessionend/session-end.guard.mjs +28 -0
- package/esm2020/lib/stock-service/lazyload.service.mjs +21 -0
- package/esm2020/lib/stock-service/stock-service.service.mjs +62 -0
- package/esm2020/lib/system-module/subform/subform.component.mjs +2481 -0
- package/esm2020/lib/system-module/system/system.component.mjs +959 -0
- package/esm2020/lib/system-module/system-service/system-service.service.mjs +85 -0
- package/esm2020/lib/system-module/system-service/upload-file.service.mjs +86 -0
- package/esm2020/lib/utility/app-no-dbl-click.directive.mjs +23 -0
- package/esm2020/lib/utility/constants.mjs +5 -0
- package/esm2020/lib/utility/contact-table-search.pipe.mjs +25 -0
- package/esm2020/lib/utility/formate-num-field.pipe.mjs +19 -0
- package/esm2020/lib/utility/search-pipe.pipe.mjs +26 -0
- package/esm2020/lib/utility/selective-preloading-strategy.mjs +23 -0
- package/esm2020/lib/utility/table-search.pipe.mjs +25 -0
- package/esm2020/lib/utility/tranform.directive.mjs +27 -0
- package/esm2020/lib/websearch-history/websearch-history.component.mjs +273 -0
- package/esm2020/public_api.mjs +57 -0
- package/ezlibrary_v2.d.ts +5 -0
- package/fesm2015/ezlibrary_v2.mjs +33543 -0
- package/fesm2015/ezlibrary_v2.mjs.map +1 -0
- package/fesm2020/ezlibrary_v2.mjs +33533 -0
- package/fesm2020/ezlibrary_v2.mjs.map +1 -0
- package/lib/admin-service/admin-service.service.d.ts +13 -0
- package/lib/analysis-search/analysis-search.component.d.ts +122 -0
- package/lib/assort-service/assort-service.service.d.ts +12 -0
- package/lib/attribute-definition/attribute-definition.component.d.ts +47 -0
- package/lib/auth/auth.guard.d.ts +16 -0
- package/lib/bi-service/bi.service.d.ts +20 -0
- package/lib/call-info/callinfo.component.d.ts +30 -0
- package/lib/comman-service/comman-service.service.d.ts +111 -0
- package/lib/comman-service/share-data-service.service.d.ts +10 -0
- package/lib/contact-search/contact-search.component.d.ts +115 -0
- package/lib/contact-service/contact-service.service.d.ts +15 -0
- package/lib/ezheader/header.component.d.ts +61 -0
- package/lib/ezlib.module.d.ts +47 -0
- package/lib/file-upload/fileupload.component.d.ts +131 -0
- package/lib/file-upload-log/file-upload-log.component.d.ts +53 -0
- package/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.d.ts +8 -0
- package/lib/fileupload-module/fileupload-routing.module.d.ts +7 -0
- package/lib/footer/footer.component.d.ts +9 -0
- package/lib/globle/common-pdf.service.d.ts +9 -0
- package/lib/globle/globle-env.service.d.ts +16 -0
- package/lib/globle/memo-report.service.d.ts +107 -0
- package/lib/globle/pdf-service.service.d.ts +459 -0
- package/lib/globle/shared-services.service.d.ts +12 -0
- package/lib/globle/upload-service.service.d.ts +20 -0
- package/lib/header/header.component.d.ts +45 -0
- package/lib/invalid/invalid.component.d.ts +12 -0
- package/lib/logout/logout.component.d.ts +21 -0
- package/lib/menu-right/menu-right.component.d.ts +47 -0
- package/lib/pipes/number-with-commas.pipe.d.ts +7 -0
- package/lib/pipes/order-by-pipe.pipe.d.ts +7 -0
- package/lib/pipes/selectedCount.d.ts +7 -0
- package/lib/pipes/sum.pipe.d.ts +7 -0
- package/lib/pkt-data/pkt-data.component.d.ts +189 -0
- package/lib/pricing-service/pricing.service.d.ts +20 -0
- package/lib/qa-analysis/qa-analysis.component.d.ts +99 -0
- package/lib/report-format/report-format.component.d.ts +74 -0
- package/lib/sessionend/session-end.guard.d.ts +10 -0
- package/lib/stock-service/lazyload.service.d.ts +7 -0
- package/lib/stock-service/stock-service.service.d.ts +19 -0
- package/lib/system-module/subform/subform.component.d.ts +227 -0
- package/lib/system-module/system/system.component.d.ts +113 -0
- package/lib/system-module/system-service/system-service.service.d.ts +23 -0
- package/lib/system-module/system-service/upload-file.service.d.ts +12 -0
- package/lib/utility/app-no-dbl-click.directive.d.ts +7 -0
- package/lib/utility/constants.d.ts +4 -0
- package/lib/utility/contact-table-search.pipe.d.ts +7 -0
- package/lib/utility/formate-num-field.pipe.d.ts +7 -0
- package/lib/utility/search-pipe.pipe.d.ts +7 -0
- package/lib/utility/selective-preloading-strategy.d.ts +9 -0
- package/lib/utility/table-search.pipe.d.ts +7 -0
- package/lib/utility/tranform.directive.d.ts +10 -0
- package/lib/websearch-history/websearch-history.component.d.ts +62 -0
- package/package.json +48 -0
- package/public_api.d.ts +52 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
|
+
// import { GlobleEnvService } from 'ez/ez/src/app/globle/globle-env.service';
|
|
4
|
+
import { GlobleEnvService } from '../globle/globle-env.service';
|
|
5
|
+
import { Cookie } from 'ng2-cookies/ng2-cookies';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common/http";
|
|
8
|
+
import * as i2 from "../globle/globle-env.service";
|
|
9
|
+
export class AssortServiceService {
|
|
10
|
+
constructor(http, glbEnv) {
|
|
11
|
+
this.http = http;
|
|
12
|
+
this.glbEnv = glbEnv;
|
|
13
|
+
}
|
|
14
|
+
load(reqObj, headers, url) {
|
|
15
|
+
return this.http.post(this.glbEnv.baseUrl + url, JSON.stringify(reqObj), headers)
|
|
16
|
+
.toPromise()
|
|
17
|
+
.then((response) => response);
|
|
18
|
+
}
|
|
19
|
+
getCookies() {
|
|
20
|
+
return Cookie.get('_logid');
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** @nocollapse */ /** @nocollapse */ AssortServiceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AssortServiceService, deps: [{ token: i1.HttpClient }, { token: i2.GlobleEnvService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
24
|
+
/** @nocollapse */ /** @nocollapse */ AssortServiceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AssortServiceService, providedIn: 'root' });
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AssortServiceService, decorators: [{
|
|
26
|
+
type: Injectable,
|
|
27
|
+
args: [{
|
|
28
|
+
providedIn: 'root'
|
|
29
|
+
}]
|
|
30
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.GlobleEnvService }]; } });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzb3J0LXNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvYXNzb3J0LXNlcnZpY2UvYXNzb3J0LXNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCw4RUFBOEU7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7O0FBS2pELE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFDVSxJQUFnQixFQUNqQixNQUF3QjtRQUR2QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2pCLFdBQU0sR0FBTixNQUFNLENBQWtCO0lBQzdCLENBQUM7SUFFTCxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDO2FBQzlFLFNBQVMsRUFBRTthQUNYLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7dUpBZlUsb0JBQW9COzJKQUFwQixvQkFBb0IsY0FGbkIsTUFBTTsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG4vLyBpbXBvcnQgeyBHbG9ibGVFbnZTZXJ2aWNlIH0gZnJvbSAnZXovZXovc3JjL2FwcC9nbG9ibGUvZ2xvYmxlLWVudi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2xvYmxlRW52U2VydmljZSB9IGZyb20gJy4uL2dsb2JsZS9nbG9ibGUtZW52LnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgQ29va2llIH0gZnJvbSAnbmcyLWNvb2tpZXMvbmcyLWNvb2tpZXMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNzb3J0U2VydmljZVNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHB1YmxpYyBnbGJFbnY6IEdsb2JsZUVudlNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgbG9hZChyZXFPYmosIGhlYWRlcnMsIHVybCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZ2xiRW52LmJhc2VVcmwgKyB1cmwsIEpTT04uc3RyaW5naWZ5KHJlcU9iaiksIGhlYWRlcnMpXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIGdldENvb2tpZXMoKSB7XHJcbiAgICByZXR1cm4gQ29va2llLmdldCgnX2xvZ2lkJyk7XHJcbiAgfVxyXG4gIFxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { CommanServiceService } from '../comman-service/comman-service.service';
|
|
2
|
+
import { PricingService } from './../pricing-service/pricing.service';
|
|
3
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { Component } from '@angular/core';
|
|
5
|
+
import { ToastrService } from 'ngx-toastr';
|
|
6
|
+
import { NgxSpinnerService } from "ngx-spinner";
|
|
7
|
+
import { FormArray, FormBuilder } from '@angular/forms';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/router";
|
|
10
|
+
import * as i2 from "ngx-toastr";
|
|
11
|
+
import * as i3 from "ngx-spinner";
|
|
12
|
+
import * as i4 from "./../pricing-service/pricing.service";
|
|
13
|
+
import * as i5 from "../comman-service/comman-service.service";
|
|
14
|
+
import * as i6 from "@angular/forms";
|
|
15
|
+
import * as i7 from "ng-select";
|
|
16
|
+
import * as i8 from "@angular/common";
|
|
17
|
+
import * as i9 from "../utility/app-no-dbl-click.directive";
|
|
18
|
+
;
|
|
19
|
+
export class AttributeDefinitionComponent {
|
|
20
|
+
constructor(router, route, toastr, spinnerService, ps, cs, fb) {
|
|
21
|
+
this.router = router;
|
|
22
|
+
this.route = route;
|
|
23
|
+
this.toastr = toastr;
|
|
24
|
+
this.spinnerService = spinnerService;
|
|
25
|
+
this.ps = ps;
|
|
26
|
+
this.cs = cs;
|
|
27
|
+
this.fb = fb;
|
|
28
|
+
this.priceDefination = [];
|
|
29
|
+
}
|
|
30
|
+
//load page defination
|
|
31
|
+
getPageDefination() {
|
|
32
|
+
this.spinnerService.show();
|
|
33
|
+
let reqObj = {};
|
|
34
|
+
reqObj['formNme'] = 'priceGroupForm';
|
|
35
|
+
reqObj['grpIdn'] = this.route.snapshot.params['id'];
|
|
36
|
+
this.ps.data(reqObj, 'loadData', 'pricing/load')
|
|
37
|
+
.subscribe(response => {
|
|
38
|
+
if (response.status == 'SUCCESS') {
|
|
39
|
+
console.log(response);
|
|
40
|
+
let res = response.result;
|
|
41
|
+
let pageDefination = res.pageDefination;
|
|
42
|
+
this.spinnerService.hide();
|
|
43
|
+
this.priceDefination = [...res.priceDefination];
|
|
44
|
+
this.btnAction = res.pageDefination.action;
|
|
45
|
+
this.addNew = pageDefination.button[0];
|
|
46
|
+
this.pageInfo = res.pageDefination;
|
|
47
|
+
this.attibutes = res.attrStructureDtl.map(option => ({
|
|
48
|
+
sort: option.sort,
|
|
49
|
+
label: option.print + ' ' + '(' + option.attr + ')',
|
|
50
|
+
type: option.dataType,
|
|
51
|
+
value: option.attr,
|
|
52
|
+
prpList: option.prpList
|
|
53
|
+
}));
|
|
54
|
+
// this.pkf = response.pageInfo.primary_key_field;
|
|
55
|
+
// this.datalist = response.dataList;
|
|
56
|
+
// this.actions = response.actions;
|
|
57
|
+
// this.navigation = response.navigation;
|
|
58
|
+
this.spinnerService.hide();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.log(response);
|
|
62
|
+
this.spinnerService.hide();
|
|
63
|
+
this.toastr.error(response.message);
|
|
64
|
+
}
|
|
65
|
+
}, error => {
|
|
66
|
+
console.log(error);
|
|
67
|
+
this.spinnerService.hide();
|
|
68
|
+
this.toastr.error(error);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
ngOnInit() {
|
|
72
|
+
console.log("response");
|
|
73
|
+
this.myFormmm = this.fb.group({
|
|
74
|
+
attr: '',
|
|
75
|
+
display: '',
|
|
76
|
+
sort: '',
|
|
77
|
+
values: this.fb.array([]),
|
|
78
|
+
grid: '',
|
|
79
|
+
status: ''
|
|
80
|
+
});
|
|
81
|
+
this.getPageDefination();
|
|
82
|
+
this.myFormmm.valueChanges.subscribe(console.log);
|
|
83
|
+
}
|
|
84
|
+
get fromToForms() {
|
|
85
|
+
return this.myFormmm.get('values');
|
|
86
|
+
}
|
|
87
|
+
get attr() {
|
|
88
|
+
return this.myFormmm.get('attr');
|
|
89
|
+
}
|
|
90
|
+
get disType() {
|
|
91
|
+
return this.myFormmm.get('display').value;
|
|
92
|
+
}
|
|
93
|
+
addFromTo() {
|
|
94
|
+
const values = this.fb.group({
|
|
95
|
+
srt_frm: [],
|
|
96
|
+
srt_to: []
|
|
97
|
+
});
|
|
98
|
+
this.fromToForms.push(values);
|
|
99
|
+
}
|
|
100
|
+
deletePhone(i) {
|
|
101
|
+
// this.fromToForms.setValue()
|
|
102
|
+
this.fromToForms.removeAt(i);
|
|
103
|
+
}
|
|
104
|
+
getAttriBute(val) {
|
|
105
|
+
let attrval;
|
|
106
|
+
if (val == null) {
|
|
107
|
+
attrval = this.attr.value;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
attrval = val;
|
|
111
|
+
}
|
|
112
|
+
this.attibutes.forEach(element => {
|
|
113
|
+
if (element.value == attrval) {
|
|
114
|
+
console.log(element);
|
|
115
|
+
this.type = element.type;
|
|
116
|
+
if (element.type == 'c') {
|
|
117
|
+
this.frmPrps = element.prpList;
|
|
118
|
+
this.toPrps = element.prpList;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
userAction(obj, call, actionObj) {
|
|
124
|
+
console.log(obj, call, actionObj);
|
|
125
|
+
this.currObj = null;
|
|
126
|
+
this.currObj = obj;
|
|
127
|
+
this.getAttriBute(obj.attr);
|
|
128
|
+
let fromvalueList = [];
|
|
129
|
+
let valuelst = obj.values || [];
|
|
130
|
+
valuelst.forEach(element => {
|
|
131
|
+
let valCon = this.fb.group({
|
|
132
|
+
"srt_frm": element.srt_frm,
|
|
133
|
+
"srt_to": element.srt_to
|
|
134
|
+
});
|
|
135
|
+
fromvalueList.push(valCon);
|
|
136
|
+
});
|
|
137
|
+
// let values = (obj.values|| []).map((x) => this.fb.group(x))
|
|
138
|
+
if (call == 'edit') {
|
|
139
|
+
document.getElementById('datamdbtn').click();
|
|
140
|
+
this.btnName = 'Edit';
|
|
141
|
+
this.myFormmm = this.fb.group({
|
|
142
|
+
attr: obj.attr,
|
|
143
|
+
display: obj.display,
|
|
144
|
+
sort: obj.sort,
|
|
145
|
+
values: new FormArray(fromvalueList),
|
|
146
|
+
grid: obj.grid,
|
|
147
|
+
status: obj.status
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
else if (call == 'delete') {
|
|
151
|
+
document.getElementById('deletebtn').click();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
setBtnAdd() {
|
|
155
|
+
this.btnName = 'Add';
|
|
156
|
+
this.myFormmm = this.fb.group({
|
|
157
|
+
attr: '',
|
|
158
|
+
display: '',
|
|
159
|
+
sort: '',
|
|
160
|
+
values: this.fb.array([]),
|
|
161
|
+
grid: '',
|
|
162
|
+
status: ''
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
deleteData() {
|
|
166
|
+
this.spinnerService.show();
|
|
167
|
+
let reqObj = {};
|
|
168
|
+
reqObj['formNme'] = 'priceGroupDefinition';
|
|
169
|
+
reqObj['trnsType'] = 'DELETE';
|
|
170
|
+
reqObj['attr'] = this.currObj.attr;
|
|
171
|
+
reqObj['grpIdn'] = this.route.snapshot.params['id'];
|
|
172
|
+
console.log(reqObj);
|
|
173
|
+
this.ps.data(reqObj, 'savePriceGroupDef', 'pricing/load')
|
|
174
|
+
.subscribe(response => {
|
|
175
|
+
if (response.status == 'SUCCESS') {
|
|
176
|
+
console.log(response);
|
|
177
|
+
let res = response.result;
|
|
178
|
+
// let index = this.priceDefination.indexOf(this.currObj);
|
|
179
|
+
// this.priceDefination.splice(index, 1);
|
|
180
|
+
this.getPageDefination();
|
|
181
|
+
document.getElementById('deleteCloseMd').click();
|
|
182
|
+
this.spinnerService.hide();
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
this.spinnerService.hide();
|
|
186
|
+
this.toastr.error(response.message);
|
|
187
|
+
}
|
|
188
|
+
}, error => {
|
|
189
|
+
this.spinnerService.hide();
|
|
190
|
+
this.toastr.error(error);
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
onSubmit() {
|
|
194
|
+
this.spinnerService.show();
|
|
195
|
+
let formsVal = this.myFormmm.value;
|
|
196
|
+
let reqObj = {};
|
|
197
|
+
reqObj['formNme'] = 'priceGroupDefinition';
|
|
198
|
+
reqObj['trnsType'] = this.btnName == 'Add' ? 'ADD' : 'EDIT'; //this.currObj != null ? 'EDIT' : 'ADD';
|
|
199
|
+
formsVal['status'] = '1';
|
|
200
|
+
reqObj['dataTrnsDtl'] = formsVal;
|
|
201
|
+
reqObj['grpIdn'] = this.route.snapshot.params['id'];
|
|
202
|
+
if (this.currObj != null) {
|
|
203
|
+
reqObj['attr'] = formsVal['attr'];
|
|
204
|
+
}
|
|
205
|
+
console.log(JSON.stringify(reqObj));
|
|
206
|
+
this.ps.data(reqObj, 'savePriceGroupDef', 'pricing/load')
|
|
207
|
+
.subscribe(response => {
|
|
208
|
+
if (response.status == 'SUCCESS') {
|
|
209
|
+
console.log(response);
|
|
210
|
+
let res = response.result;
|
|
211
|
+
document.getElementById('closeMd').click();
|
|
212
|
+
this.getPageDefination();
|
|
213
|
+
this.spinnerService.hide();
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
this.spinnerService.hide();
|
|
217
|
+
this.toastr.error(response.message);
|
|
218
|
+
}
|
|
219
|
+
}, error => {
|
|
220
|
+
this.spinnerService.hide();
|
|
221
|
+
this.toastr.error(error);
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/** @nocollapse */ /** @nocollapse */ AttributeDefinitionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AttributeDefinitionComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ToastrService }, { token: i3.NgxSpinnerService }, { token: i4.PricingService }, { token: i5.CommanServiceService }, { token: i6.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
226
|
+
/** @nocollapse */ /** @nocollapse */ AttributeDefinitionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AttributeDefinitionComponent, selector: "app-attribute-definition", ngImport: i0, template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">\r\n <span class=\"fa fa-chevron-left cp\" (click)=\"cs.pageBck();\"> Back</span> {{pageInfo?.title}}\r\n <span class=\"f-12\">({{cs.cDate | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\" (click)=\"f.reset();\" data-toggle=\"modal\"\r\n data-target=\"#datamodal\" (click)=\"setBtnAdd()\">{{addNew?.form_field_title}}</button>\r\n </div>\r\n </div>\r\n <div class=\"content-frame\">\r\n <!-- <div class=\"content-frame-left\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\" *ngFor=\"let nav of navigation;let i=index\"\r\n (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}} </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"content-frame-body\" style=\"margin-left:0;\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div> -->\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size </label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\">\r\n <!-- (change)=\"onPageSizeChange(pageSize)\" -->\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px;\" data-toggle=\"tooltip\"\r\n data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th class=\"align-center\">SR No</th>\r\n <th class=\"align-center\">Action</th>\r\n <th class=\"align-center\">Attribute</th>\r\n <th class=\"align-center\">Grid</th>\r\n <th class=\"align-center\">Display</th>\r\n <th class=\"align-center\">Sort</th>\r\n <th class=\"align-center\">Date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let priceDef of priceDefination;let i = index\">\r\n <!-- | searchPipe:searchF | orderBy: order:reverse:'case-insensitive' | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index; -->\r\n <td class=\"align-center\">{{i + 1}}</td>\r\n <td class=\"align-center\">\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of btnAction\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(priceDef,action.form_field_typ,action);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td class=\"align-center\">{{priceDef.attr}}</td>\r\n <td class=\"align-center\">{{priceDef.grid}}</td>\r\n <td class=\"align-center\">{{priceDef.display}}</td>\r\n <td class=\"align-center\">{{priceDef.sort}}</td>\r\n <td class=\"align-center\">{{priceDef.start_dt}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" [formGroup]=\"myFormmm\" #f=\"ngForm\" > \r\n <!-- ng-submit=\"onSubmit()\" -->\r\n <!-- (ngSubmit)=\"onSubmit(f,submitBtn)\" -->\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"closeMd\">\r\n <!-- (click)=\"closeNull();\" -->\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Add Group</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <!-- {{myFormmm.value | json}} -->\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Attribute\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"attibutes\" formControlName=\"attr\" (selected)=\"getAttriBute(null)\">\r\n </ng-select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Display\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"grid\">\r\n <option value=\"\">Select</option>\r\n <option value=\"group\">Group</option>\r\n <option value=\"side\">Side</option>\r\n <option value=\"head\">Head</option>\r\n </select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Type\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"display\">\r\n <option value=\"\">Select</option>\r\n <option value=\"range\">Range</option>\r\n <option value=\"plusminus\">With plus minus</option>\r\n <option value=\"woplusminus\">Without plus minus </option>\r\n <option value=\"userdefined\">User Defined </option>\r\n\r\n </select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div formArrayName=\"values\" *ngIf=\"disType == 'userdefined'\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-2\"></div>\r\n <div class=\"col-md-4\" style=\"text-align: center\"><label class=\"control-label\">From</label></div>\r\n <div class=\"col-md-4\" style=\"text-align: center\"><label class=\"control-label\">To</label></div>\r\n </div>\r\n <div class=\"form-group\">\r\n <div *ngFor=\"let value of fromToForms.controls;let i = index\" class=\"row\" style=\"margin-top: 5px;\"\r\n [formGroupName]=\"i\">\r\n <div class=\"col-md-2\"></div>\r\n <div *ngIf=\"type == 't'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'n'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'c'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"srt_frm\" >\r\n <option *ngFor=\"let prp of frmPrps\" [value]=\"prp.sort\">{{prp.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"srt_to\">\r\n <option *ngFor=\"let prp of toPrps\" [value]=\"prp.sort\">{{prp.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'd'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" style=\"text-align:center\">\r\n <button class=\"w-100 btn btn-danger\" (click)=\"deletePhone(i);\"><i class=\"fa fa-times\"\r\n aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" style=\"text-align:center;\">\r\n <a class=\"btn btn-success\" (click)=\"addFromTo();\">Add More</a>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Sort\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input class=\"form-control\" formControlName=\"sort\" />\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-success\" appAppNoDblClick (click)=\"onSubmit()\">{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\">Reset</button>\r\n <!-- (click)=\"reset(f)\" -->\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"deleteCloseMd\">\r\n <!-- (click)=\"closeNull();\" #deleteclsbtn -->\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteData();\" data-dismiss=\"modal\">Delete</button>\r\n <!-- (click)=\"deleteDataList();\" -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n</div>", styles: [""], components: [{ type: i7.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { type: i6.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i9.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }], pipes: { "date": i8.DatePipe } });
|
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AttributeDefinitionComponent, decorators: [{
|
|
228
|
+
type: Component,
|
|
229
|
+
args: [{ selector: 'app-attribute-definition', template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">\r\n <span class=\"fa fa-chevron-left cp\" (click)=\"cs.pageBck();\"> Back</span> {{pageInfo?.title}}\r\n <span class=\"f-12\">({{cs.cDate | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\" (click)=\"f.reset();\" data-toggle=\"modal\"\r\n data-target=\"#datamodal\" (click)=\"setBtnAdd()\">{{addNew?.form_field_title}}</button>\r\n </div>\r\n </div>\r\n <div class=\"content-frame\">\r\n <!-- <div class=\"content-frame-left\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\" *ngFor=\"let nav of navigation;let i=index\"\r\n (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}} </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"content-frame-body\" style=\"margin-left:0;\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div> -->\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\">\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size </label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\">\r\n <!-- (change)=\"onPageSizeChange(pageSize)\" -->\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n </form>\r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px;\" data-toggle=\"tooltip\"\r\n data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th class=\"align-center\">SR No</th>\r\n <th class=\"align-center\">Action</th>\r\n <th class=\"align-center\">Attribute</th>\r\n <th class=\"align-center\">Grid</th>\r\n <th class=\"align-center\">Display</th>\r\n <th class=\"align-center\">Sort</th>\r\n <th class=\"align-center\">Date</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let priceDef of priceDefination;let i = index\">\r\n <!-- | searchPipe:searchF | orderBy: order:reverse:'case-insensitive' | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index; -->\r\n <td class=\"align-center\">{{i + 1}}</td>\r\n <td class=\"align-center\">\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\" class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of btnAction\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(priceDef,action.form_field_typ,action);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td class=\"align-center\">{{priceDef.attr}}</td>\r\n <td class=\"align-center\">{{priceDef.grid}}</td>\r\n <td class=\"align-center\">{{priceDef.display}}</td>\r\n <td class=\"align-center\">{{priceDef.sort}}</td>\r\n <td class=\"align-center\">{{priceDef.start_dt}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!-- <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" [formGroup]=\"myFormmm\" #f=\"ngForm\" > \r\n <!-- ng-submit=\"onSubmit()\" -->\r\n <!-- (ngSubmit)=\"onSubmit(f,submitBtn)\" -->\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"closeMd\">\r\n <!-- (click)=\"closeNull();\" -->\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">Add Group</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <!-- {{myFormmm.value | json}} -->\r\n <div class=\"col-md-12\">\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Attribute\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"attibutes\" formControlName=\"attr\" (selected)=\"getAttriBute(null)\">\r\n </ng-select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Display\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"grid\">\r\n <option value=\"\">Select</option>\r\n <option value=\"group\">Group</option>\r\n <option value=\"side\">Side</option>\r\n <option value=\"head\">Head</option>\r\n </select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Type\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"display\">\r\n <option value=\"\">Select</option>\r\n <option value=\"range\">Range</option>\r\n <option value=\"plusminus\">With plus minus</option>\r\n <option value=\"woplusminus\">Without plus minus </option>\r\n <option value=\"userdefined\">User Defined </option>\r\n\r\n </select>\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n <div formArrayName=\"values\" *ngIf=\"disType == 'userdefined'\">\r\n <div class=\"form-group\">\r\n <div class=\"col-md-2\"></div>\r\n <div class=\"col-md-4\" style=\"text-align: center\"><label class=\"control-label\">From</label></div>\r\n <div class=\"col-md-4\" style=\"text-align: center\"><label class=\"control-label\">To</label></div>\r\n </div>\r\n <div class=\"form-group\">\r\n <div *ngFor=\"let value of fromToForms.controls;let i = index\" class=\"row\" style=\"margin-top: 5px;\"\r\n [formGroupName]=\"i\">\r\n <div class=\"col-md-2\"></div>\r\n <div *ngIf=\"type == 't'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'n'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'c'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"srt_frm\" >\r\n <option *ngFor=\"let prp of frmPrps\" [value]=\"prp.sort\">{{prp.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" formControlName=\"srt_to\">\r\n <option *ngFor=\"let prp of toPrps\" [value]=\"prp.sort\">{{prp.print}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"type == 'd'\">\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" formControlName=\"srt_frm\" />\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"date\" class=\"form-control\" formControlName=\"srt_to\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\" style=\"text-align:center\">\r\n <button class=\"w-100 btn btn-danger\" (click)=\"deletePhone(i);\"><i class=\"fa fa-times\"\r\n aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" style=\"text-align:center;\">\r\n <a class=\"btn btn-success\" (click)=\"addFromTo();\">Add More</a>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Sort\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input class=\"form-control\" formControlName=\"sort\" />\r\n </div>\r\n <!-- <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\" class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-success\" appAppNoDblClick (click)=\"onSubmit()\">{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\">Reset</button>\r\n <!-- (click)=\"reset(f)\" -->\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\" data-backdrop=\"static\"\r\n data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" id=\"deleteCloseMd\">\r\n <!-- (click)=\"closeNull();\" #deleteclsbtn -->\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" (click)=\"deleteData();\" data-dismiss=\"modal\">Delete</button>\r\n <!-- (click)=\"deleteDataList();\" -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n</div>", styles: [""] }]
|
|
230
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ToastrService }, { type: i3.NgxSpinnerService }, { type: i4.PricingService }, { type: i5.CommanServiceService }, { type: i6.FormBuilder }]; } });
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLWRlZmluaXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXpsaWIvc3JjL2xpYi9hdHRyaWJ1dGUtZGVmaW5pdGlvbi9hdHRyaWJ1dGUtZGVmaW5pdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL2F0dHJpYnV0ZS1kZWZpbml0aW9uL2F0dHJpYnV0ZS1kZWZpbml0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBYSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFIeEIsQ0FBQztBQVc1QyxNQUFNLE9BQU8sNEJBQTRCO0lBSXZDLFlBQ1MsTUFBYyxFQUNiLEtBQXFCLEVBQ3JCLE1BQXFCLEVBQ3JCLGNBQWlDLEVBQ2pDLEVBQWtCLEVBQ25CLEVBQXdCLEVBQ3ZCLEVBQWU7UUFOaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLE9BQUUsR0FBRixFQUFFLENBQWdCO1FBQ25CLE9BQUUsR0FBRixFQUFF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QWlCLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUM1QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7K0pBcE9VLDRCQUE0QjttSkFBNUIsNEJBQTRCLGdFQ2Z6Qyxnd2xCQXNWTTsyRkR2VU8sNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hblNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFByaWNpbmdTZXJ2aWNlIH0gZnJvbSAnLi8uLi9wcmljaW5nLXNlcnZpY2UvcHJpY2luZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJzs7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtR3JvdXAsIEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hdHRyaWJ1dGUtZGVmaW5pdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dHJpYnV0ZS1kZWZpbml0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hdHRyaWJ1dGUtZGVmaW5pdGlvbi5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZURlZmluaXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBteUZvcm1tbTogRm9ybUdyb3VwO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIHBzOiBQcmljaW5nU2VydmljZSxcclxuICAgIHB1YmxpYyBjczogQ29tbWFuU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxyXG4gICkgeyB9XHJcblxyXG4gIGFkZE5ldztcclxuICBwYWdlSW5mbztcclxuICBhdHRpYnV0ZXM7XHJcbiAgcHJpY2VEZWZpbmF0aW9uOiBhbnkgPSBbXTtcclxuICBhdHRyaWJ1dGU7XHJcbiAgYnRuQWN0aW9uO1xyXG4gIHBhZ2VTaXplO1xyXG4gIHNlYXJjaEY7XHJcbiAgYnRuTmFtZTtcclxuICAvL2xvYWQgcGFnZSBkZWZpbmF0aW9uIFxyXG4gIGdldFBhZ2VEZWZpbmF0aW9uKCkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdwcmljZUdyb3VwRm9ybSc7XHJcbiAgICByZXFPYmpbJ2dycElkbiddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2lkJ107XHJcbiAgICB0aGlzLnBzLmRhdGEocmVxT2JqLCAnbG9hZERhdGEnLCAncHJpY2luZy9sb2FkJylcclxuICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIGxldCByZXMgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgICAgICBsZXQgcGFnZURlZmluYXRpb24gPSByZXMucGFnZURlZmluYXRpb247XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMucHJpY2VEZWZpbmF0aW9uID0gWy4uLnJlcy5wcmljZURlZmluYXRpb25dO1xyXG4gICAgICAgICAgdGhpcy5idG5BY3Rpb24gPSByZXMucGFnZURlZmluYXRpb24uYWN0aW9uO1xyXG4gICAgICAgICAgdGhpcy5hZGROZXcgPSBwYWdlRGVmaW5hdGlvbi5idXR0b25bMF07XHJcbiAgICAgICAgICB0aGlzLnBhZ2VJbmZvID0gcmVzLnBhZ2VEZWZpbmF0aW9uO1xyXG4gICAgICAgICAgdGhpcy5hdHRpYnV0ZXMgPSByZXMuYXR0clN0cnVjdHVyZUR0bC5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgICAgIHNvcnQ6IG9wdGlvbi5zb3J0LFxyXG4gICAgICAgICAgICBsYWJlbDogb3B0aW9uLnByaW50ICsgJyAnICsgJygnICsgb3B0aW9uLmF0dHIgKyAnKScsXHJcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbi5kYXRhVHlwZSxcclxuICAgICAgICAgICAgdmFsdWU6IG9wdGlvbi5hdHRyLFxyXG4gICAgICAgICAgICBwcnBMaXN0OiBvcHRpb24ucHJwTGlzdFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgLy8gdGhpcy5wa2YgPSByZXNwb25zZS5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgICAgICAgIC8vIHRoaXMuZGF0YWxpc3QgPSByZXNwb25zZS5kYXRhTGlzdDtcclxuICAgICAgICAgIC8vIHRoaXMuYWN0aW9ucyA9IHJlc3BvbnNlLmFjdGlvbnM7XHJcbiAgICAgICAgICAvLyB0aGlzLm5hdmlnYXRpb24gPSByZXNwb25zZS5uYXZpZ2F0aW9uO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwicmVzcG9uc2VcIik7XHJcbiAgICB0aGlzLm15Rm9ybW1tID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGF0dHI6ICcnLFxyXG4gICAgICBkaXNwbGF5OiAnJyxcclxuICAgICAgc29ydDogJycsXHJcbiAgICAgIHZhbHVlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIGdyaWQ6ICcnLFxyXG4gICAgICBzdGF0dXM6ICcnXHJcbiAgICB9KVxyXG4gICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgdGhpcy5teUZvcm1tbS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvbnNvbGUubG9nKTtcclxuICB9XHJcblxyXG4gIGdldCBmcm9tVG9Gb3JtcygpIHtcclxuICAgIHJldHVybiB0aGlzLm15Rm9ybW1tLmdldCgndmFsdWVzJykgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGF0dHIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5teUZvcm1tbS5nZXQoJ2F0dHInKTtcclxuICB9XHJcblxyXG4gIGdldCBkaXNUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubXlGb3JtbW0uZ2V0KCdkaXNwbGF5JykudmFsdWU7XHJcbiAgfVxyXG5cclxuICBhZGRGcm9tVG8oKSB7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc3J0X2ZybTogW10sXHJcbiAgICAgIHNydF90bzogW11cclxuICAgIH0pXHJcbiAgICB0aGlzLmZyb21Ub0Zvcm1zLnB1c2godmFsdWVzKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVBob25lKGkpIHtcclxuICAgIC8vIHRoaXMuZnJvbVRvRm9ybXMuc2V0VmFsdWUoKVxyXG4gICAgdGhpcy5mcm9tVG9Gb3Jtcy5yZW1vdmVBdChpKTtcclxuICB9XHJcblxyXG4gIHR5cGU7XHJcbiAgZnJtUHJwcztcclxuICB0b1BycHM7XHJcblxyXG4gIGdldEF0dHJpQnV0ZSh2YWwpIHtcclxuICAgIGxldCBhdHRydmFsO1xyXG4gICAgaWYgKHZhbCA9PSBudWxsKSB7XHJcbiAgICAgIGF0dHJ2YWwgPSB0aGlzLmF0dHIudmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhdHRydmFsID0gdmFsO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hdHRpYnV0ZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQudmFsdWUgPT0gYXR0cnZhbCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IGVsZW1lbnQudHlwZTtcclxuICAgICAgICBpZiAoZWxlbWVudC50eXBlID09ICdjJykge1xyXG4gICAgICAgICAgdGhpcy5mcm1QcnBzID0gZWxlbWVudC5wcnBMaXN0O1xyXG4gICAgICAgICAgdGhpcy50b1BycHMgPSBlbGVtZW50LnBycExpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3Vyck9iajtcclxuXHJcbiAgdXNlckFjdGlvbihvYmosIGNhbGwsIGFjdGlvbk9iaikge1xyXG4gICAgY29uc29sZS5sb2cob2JqLCBjYWxsLCBhY3Rpb25PYmopO1xyXG4gICAgdGhpcy5jdXJyT2JqID0gbnVsbDtcclxuICAgIHRoaXMuY3Vyck9iaiA9IG9iajtcclxuICAgIHRoaXMuZ2V0QXR0cmlCdXRlKG9iai5hdHRyKTtcclxuICAgIGxldCBmcm9tdmFsdWVMaXN0OiBhbnk9W107XHJcbiAgICBsZXQgdmFsdWVsc3QgPSBvYmoudmFsdWVzfHxbXTtcclxuICAgIHZhbHVlbHN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGxldCB2YWxDb249ICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBcInNydF9mcm1cIjplbGVtZW50LnNydF9mcm0sXHJcbiAgICAgICAgXCJzcnRfdG9cIjplbGVtZW50LnNydF90b1xyXG4gICAgICB9KTtcclxuICAgICAgZnJvbXZhbHVlTGlzdC5wdXNoKHZhbENvbik7XHJcbiAgfSk7XHJcbiAgLy8gbGV0IHZhbHVlcyA9IChvYmoudmFsdWVzfHwgW10pLm1hcCgoeCkgPT4gdGhpcy5mYi5ncm91cCh4KSlcclxuICAgIGlmIChjYWxsID09ICdlZGl0Jykge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgdGhpcy5idG5OYW1lID0gJ0VkaXQnO1xyXG4gICAgICB0aGlzLm15Rm9ybW1tID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgYXR0cjogb2JqLmF0dHIsXHJcbiAgICAgICAgZGlzcGxheTogb2JqLmRpc3BsYXksXHJcbiAgICAgICAgc29ydDogb2JqLnNvcnQsXHJcbiAgICAgICAgdmFsdWVzOiBuZXcgRm9ybUFycmF5KGZyb212YWx1ZUxpc3QpLFxyXG4gICAgICAgIGdyaWQ6IG9iai5ncmlkLFxyXG4gICAgICAgIHN0YXR1czogb2JqLnN0YXR1c1xyXG4gICAgICB9KVxyXG4gICAgICBcclxuXHJcbiAgICB9IGVsc2UgaWYgKGNhbGwgPT0gJ2RlbGV0ZScpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbGV0ZWJ0bicpLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldEJ0bkFkZCgpIHtcclxuICAgIHRoaXMuYnRuTmFtZSA9ICdBZGQnO1xyXG4gICAgdGhpcy5teUZvcm1tbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBhdHRyOiAnJyxcclxuICAgICAgZGlzcGxheTogJycsXHJcbiAgICAgIHNvcnQ6ICcnLFxyXG4gICAgICB2YWx1ZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBncmlkOiAnJyxcclxuICAgICAgc3RhdHVzOiAnJ1xyXG4gICAgfSlcclxuICB9XHJcbiAgZGVsZXRlRGF0YSgpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAncHJpY2VHcm91cERlZmluaXRpb24nO1xyXG4gICAgcmVxT2JqWyd0cm5zVHlwZSddID0gJ0RFTEVURSc7XHJcbiAgICByZXFPYmpbJ2F0dHInXSA9IHRoaXMuY3Vyck9iai5hdHRyO1xyXG4gICAgcmVxT2JqWydncnBJZG4nXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydpZCddO1xyXG4gICAgY29uc29sZS5sb2cocmVxT2JqKTtcclxuICAgIHRoaXMucHMuZGF0YShyZXFPYmosICdzYXZlUHJpY2VHcm91cERlZicsICdwcmljaW5nL2xvYWQnKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgbGV0IHJlcyA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIC8vIGxldCBpbmRleCA9IHRoaXMucHJpY2VEZWZpbmF0aW9uLmluZGV4T2YodGhpcy5jdXJyT2JqKTtcclxuICAgICAgICAgIC8vIHRoaXMucHJpY2VEZWZpbmF0aW9uLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlQ2xvc2VNZCcpLmNsaWNrKCk7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCBmb3Jtc1ZhbCA9IHRoaXMubXlGb3JtbW0udmFsdWU7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9ICdwcmljZUdyb3VwRGVmaW5pdGlvbic7XHJcbiAgICByZXFPYmpbJ3RybnNUeXBlJ10gPSB0aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnQUREJyA6ICdFRElUJzsvL3RoaXMuY3Vyck9iaiAhPSBudWxsID8gJ0VESVQnIDogJ0FERCc7XHJcbiAgICBmb3Jtc1ZhbFsnc3RhdHVzJ10gPSAnMSc7XHJcbiAgICByZXFPYmpbJ2RhdGFUcm5zRHRsJ10gPSBmb3Jtc1ZhbDtcclxuICAgIHJlcU9ialsnZ3JwSWRuJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snaWQnXTtcclxuICAgIGlmICh0aGlzLmN1cnJPYmogIT0gbnVsbCkge1xyXG4gICAgICByZXFPYmpbJ2F0dHInXSA9IGZvcm1zVmFsWydhdHRyJ107XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMucHMuZGF0YShyZXFPYmosICdzYXZlUHJpY2VHcm91cERlZicsICdwcmljaW5nL2xvYWQnKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgICAgbGV0IHJlcyA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbG9zZU1kJykuY2xpY2soKTtcclxuICAgICAgICAgIHRoaXMuZ2V0UGFnZURlZmluYXRpb24oKTtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibXRcIj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cclxuICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCBjcFwiIChjbGljayk9XCJjcy5wYWdlQmNrKCk7XCI+IEJhY2s8L3NwYW4+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHt7cGFnZUluZm8/LnRpdGxlfX1cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImYtMTJcIj4oe3tjcy5jRGF0ZSB8IGRhdGU6J21lZGl1bSd9fSk8L3NwYW4+XHJcbiAgICAgIDwvaDM+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLWluZm8gcHVsbC1yaWdodFwiICpuZ0lmPVwiYWRkTmV3Py5pc19jb21wdWxzb3J5ID09IDFcIiAoY2xpY2spPVwiZi5yZXNldCgpO1wiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIlxyXG4gICAgICAgIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiIChjbGljayk9XCJzZXRCdG5BZGQoKVwiPnt7YWRkTmV3Py5mb3JtX2ZpZWxkX3RpdGxlfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJjb250ZW50LWZyYW1lXCI+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb250ZW50LWZyYW1lLWxlZnRcIiAqbmdJZj1cIm5hdmlnYXRpb24ubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJyA6aSA9PSBjTGlua31cIiAqbmdGb3I9XCJsZXQgbmF2IG9mIG5hdmlnYXRpb247bGV0IGk9aW5kZXhcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0aW9uRnVuKG5hdixpKTtcIj57e25hdi5mb3JtX2ZpZWxkX3RpdGxlfX0gPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZnJhbWUtYm9keVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6MDtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxyXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZXhhbXBsZUlucHV0TmFtZTJcIj5TZWFyY2ggJm5ic3A7Jm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWlubGluZSBwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZGxQYWdlc2l6ZVwiPlBhZ2UgU2l6ZSAmbmJzcDsgJm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJwYWdlU2l6ZVwiIFsobmdNb2RlbCldPVwicGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBbGxcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTBcIj4xMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjUwXCI+NTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTAwXCI+MTAwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBzdHlsZT1cInBhZGRpbmc6IDRweCAxNXB4IDRweCAyMHB4O21hcmdpbi1sZWZ0OiAxMHB4O1wiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJSZWZyZXNoXCIgKGNsaWNrKT1cIm5nT25Jbml0KCk7XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLWhvdmVyLWNlbGxzXCI+XHJcbiAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj5TUiBObzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImFsaWduLWNlbnRlclwiPkFjdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImFsaWduLWNlbnRlclwiPkF0dHJpYnV0ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImFsaWduLWNlbnRlclwiPkdyaWQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj5EaXNwbGF5PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiYWxpZ24tY2VudGVyXCI+U29ydDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImFsaWduLWNlbnRlclwiPkRhdGU8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcHJpY2VEZWYgb2YgcHJpY2VEZWZpbmF0aW9uO2xldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSB8IHNlYXJjaFBpcGU6c2VhcmNoRiB8IG9yZGVyQnk6IG9yZGVyOnJldmVyc2U6J2Nhc2UtaW5zZW5zaXRpdmUnIHwgcGFnaW5hdGU6IHsgaXRlbXNQZXJQYWdlOiBwYWdlU2l6ZSwgY3VycmVudFBhZ2U6IHAgfTsgbGV0IGkgPSBpbmRleDsgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLWNlbnRlclwiPnt7aSArIDF9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIGRyb3Bkb3duLXRvZ2dsZVwiPkFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIHJvbGU9XCJtZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGJ0bkFjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwidXNlckFjdGlvbihwcmljZURlZixhY3Rpb24uZm9ybV9maWVsZF90eXAsYWN0aW9uKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uLmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLWNlbnRlclwiPnt7cHJpY2VEZWYuYXR0cn19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tY2VudGVyXCI+e3twcmljZURlZi5ncmlkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1jZW50ZXJcIj57e3ByaWNlRGVmLmRpc3BsYXl9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLWNlbnRlclwiPnt7cHJpY2VEZWYuc29ydH19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tY2VudGVyXCI+e3twcmljZURlZi5zdGFydF9kdH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSA8cGFnaW5hdGlvbi1jb250cm9scyAocGFnZUNoYW5nZSk9XCJwID0gJGV2ZW50XCIgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+PC9wYWdpbmF0aW9uLWNvbnRyb2xzPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkYXRhbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZGVmTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiXHJcbiAgICBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiIFtmb3JtR3JvdXBdPVwibXlGb3JtbW1cIiAjZj1cIm5nRm9ybVwiICA+IFxyXG4gICAgICAgICAgPCEtLSBuZy1zdWJtaXQ9XCJvblN1Ym1pdCgpXCIgLS0+XHJcbiAgICAgICAgICA8IS0tIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdChmLHN1Ym1pdEJ0bilcIiAgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGlkPVwiY2xvc2VNZFwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICAtLT5cclxuICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImRlZk1vZGFsSGVhZFwiPkFkZCBHcm91cDwvaDQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8IS0tIHt7bXlGb3JtbW0udmFsdWUgfCBqc29ufX0gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkF0dHJpYnV0ZVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHN0eWxlPVwiei1pbmRleDogNTtcIiBbb3B0aW9uc109XCJhdHRpYnV0ZXNcIiBmb3JtQ29udHJvbE5hbWU9XCJhdHRyXCIgKHNlbGVjdGVkKT1cImdldEF0dHJpQnV0ZShudWxsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmludmFsaWQgJiYgKHRleHRJbnB1dC5kaXJ0eSB8fCB0ZXh0SW5wdXQudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBtdXN0IGJlIGF0IGxlYXN0IHt7ZmwuZm9ybV9maWVsZF9taW5fbGVuZ3RofX0gY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5tYXhsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gTWF4bWltdW0gbGltaXQge3tmbC5mb3JtX2ZpZWxkX21heF9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+RGlzcGxheVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJncm91cFwiPkdyb3VwPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzaWRlXCI+U2lkZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaGVhZFwiPkhlYWQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cInRleHRJbnB1dC5pbnZhbGlkICYmICh0ZXh0SW5wdXQuZGlydHkgfHwgdGV4dElucHV0LnRvdWNoZWQpXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5tYXhsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyYW5nZVwiPlJhbmdlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJwbHVzbWludXNcIj5XaXRoIHBsdXMgbWludXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIndvcGx1c21pbnVzXCI+V2l0aG91dCBwbHVzIG1pbnVzIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidXNlcmRlZmluZWRcIj5Vc2VyIERlZmluZWQgPC9vcHRpb24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmludmFsaWQgJiYgKHRleHRJbnB1dC5kaXJ0eSB8fCB0ZXh0SW5wdXQudG91Y2hlZClcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5taW5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMubWF4bGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAgZm9ybUFycmF5TmFtZT1cInZhbHVlc1wiICAqbmdJZj1cImRpc1R5cGUgPT0gJ3VzZXJkZWZpbmVkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPkZyb208L2xhYmVsPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+PGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPlRvPC9sYWJlbD48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZnJvbVRvRm9ybXMuY29udHJvbHM7bGV0IGkgPSBpbmRleFwiIGNsYXNzPVwicm93XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiA1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT0gJ3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfZnJtXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfdG9cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT0gJ24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfZnJtXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfdG9cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT0gJ2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInNydF9mcm1cIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHBycCBvZiBmcm1QcnBzXCIgW3ZhbHVlXT1cInBycC5zb3J0XCI+e3twcnAucHJpbnR9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfdG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgcHJwIG9mIHRvUHJwc1wiIFt2YWx1ZV09XCJwcnAuc29ydFwiPnt7cHJwLnByaW50fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInR5cGUgPT0gJ2QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfZnJtXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzcnRfdG9cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidy0xMDAgYnRuIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlUGhvbmUoaSk7XCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwiYWRkRnJvbVRvKCk7XCI+QWRkIE1vcmU8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+U29ydFxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJzb3J0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuaW52YWxpZCAmJiAodGV4dElucHV0LmRpcnR5IHx8IHRleHRJbnB1dC50b3VjaGVkKVwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMubWlubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1heGxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBhcHBBcHBOb0RibENsaWNrIChjbGljayk9XCJvblN1Ym1pdCgpXCI+e3tidG5OYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwicmVzZXRcIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSAoY2xpY2spPVwicmVzZXQoZilcIiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIlxyXG4gICAgZGF0YS1rZXlib2FyZD1cImZhbHNlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLXNtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVDbG9zZU1kXCI+XHJcbiAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNkZWxldGVjbHNidG4gLS0+XHJcbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5XYXJuaW5nPC9oND5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGVsZXRlP1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJkZWxldGVEYXRhKCk7XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5EZWxldGU8L2J1dHRvbj5cclxuICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImRlbGV0ZURhdGFMaXN0KCk7XCIgLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxidXR0b24gaWQ9XCJkZWxldGVidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjZGVsZXRlbW9kYWxcIj48L2J1dHRvbj5cclxuICA8YnV0dG9uIGlkPVwiZGF0YW1kYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gaWQ9XCJjbHNNZFwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjZGF0YW1vZGFsXCI+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBpZD1cInBvcGRhdGFtZGJ0blwiIFtoaWRkZW5dPVwidHJ1ZVwiIGRhdGEtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNwb3BkYXRhbW9kYWxcIj48L2J1dHRvbj5cclxuICA8YnV0dG9uIGlkPVwicG9wUmVzbW9kYWxidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcG9wUmVzbW9kYWxcIj48L2J1dHRvbj5cclxuPC9kaXY+Il19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Cookie } from 'ng2-cookies/ng2-cookies';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { ToastrService } from 'ngx-toastr';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/router";
|
|
7
|
+
import * as i2 from "ngx-toastr";
|
|
8
|
+
export class AuthGuard {
|
|
9
|
+
constructor(route, ac, router, toastr) {
|
|
10
|
+
this.route = route;
|
|
11
|
+
this.ac = ac;
|
|
12
|
+
this.router = router;
|
|
13
|
+
this.toastr = toastr;
|
|
14
|
+
this.userLoggedIn = false;
|
|
15
|
+
}
|
|
16
|
+
canActivate() {
|
|
17
|
+
// let logIdn = localStorage.getItem('logIdn');
|
|
18
|
+
// let ds = localStorage.getItem('DS');
|
|
19
|
+
if (Cookie.get('_ck') != null) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// this.redirectToLoginPage(ds);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
redirectToLoginPage(ds) {
|
|
28
|
+
// this.flashMessagesService.show('Invalid access to application', { cssClass: 'alert-danger', timeout: 3000 });
|
|
29
|
+
this.route.navigate(['/login/', ds]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** @nocollapse */ /** @nocollapse */ AuthGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuthGuard, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ToastrService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
33
|
+
/** @nocollapse */ /** @nocollapse */ AuthGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuthGuard, providedIn: 'root' });
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AuthGuard, decorators: [{
|
|
35
|
+
type: Injectable,
|
|
36
|
+
args: [{
|
|
37
|
+
providedIn: 'root'
|
|
38
|
+
}]
|
|
39
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ToastrService }]; } });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvYXV0aC9hdXRoLmd1YXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBNkIsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7QUFNM0MsTUFBTSxPQUFPLFNBQVM7SUFFcEIsWUFDVSxLQUFhLEVBQ2IsRUFBa0IsRUFDbEIsTUFBYSxFQUNiLE1BQXFCO1FBSHJCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixPQUFFLEdBQUYsRUFBRSxDQUFnQjtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUsvQixpQkFBWSxHQUFXLEtBQUssQ0FBQztJQUY3QixDQUFDO0lBSUQsV0FBVztRQUNULCtDQUErQztRQUMvQyx1Q0FBdUM7UUFDdkMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxpQ0FBaUM7WUFDakMsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxFQUFFO1FBQ3BCLGdIQUFnSDtRQUNoSCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7OzRJQTNCVSxTQUFTO2dKQUFULFNBQVMsY0FIUixNQUFNOzJGQUdQLFNBQVM7a0JBSnJCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29va2llIH0gZnJvbSAnbmcyLWNvb2tpZXMvbmcyLWNvb2tpZXMnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENhbkFjdGl2YXRlLE5hdmlnYXRpb25FbmQsIFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRoR3VhcmQgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XHJcbiAgY1VybFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhYzogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZVxyXG4gICkgeyBcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgdXNlckxvZ2dlZEluOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY2FuQWN0aXZhdGUoKXtcclxuICAgIC8vIGxldCBsb2dJZG4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbG9nSWRuJyk7XHJcbiAgICAvLyBsZXQgZHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnRFMnKTtcclxuICAgIGlmIChDb29raWUuZ2V0KCdfY2snKSAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5yZWRpcmVjdFRvTG9naW5QYWdlKGRzKTsgXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICByZWRpcmVjdFRvTG9naW5QYWdlKGRzKSB7XHJcbiAgICAvLyB0aGlzLmZsYXNoTWVzc2FnZXNTZXJ2aWNlLnNob3coJ0ludmFsaWQgYWNjZXNzIHRvIGFwcGxpY2F0aW9uJywgeyBjc3NDbGFzczogJ2FsZXJ0LWRhbmdlcicsIHRpbWVvdXQ6IDMwMDAgfSk7XHJcbiAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFsnL2xvZ2luLycsIGRzXSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { Cookie } from 'ng2-cookies/ng2-cookies';
|
|
3
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { ToastrService } from 'ngx-toastr';
|
|
5
|
+
import { NgxSpinnerService } from "ngx-spinner";
|
|
6
|
+
import { GlobleEnvService } from '../globle/globle-env.service';
|
|
7
|
+
import { HttpClient } from '@angular/common/http';
|
|
8
|
+
import { Injectable } from '@angular/core';
|
|
9
|
+
import { catchError, map } from 'rxjs/operators';
|
|
10
|
+
import { throwError } from 'rxjs';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common/http";
|
|
13
|
+
import * as i2 from "../globle/globle-env.service";
|
|
14
|
+
import * as i3 from "ngx-spinner";
|
|
15
|
+
import * as i4 from "ngx-toastr";
|
|
16
|
+
import * as i5 from "@angular/router";
|
|
17
|
+
export class BiService {
|
|
18
|
+
constructor(http, glbEnv, _spinnerService, toastr, router, route) {
|
|
19
|
+
this.http = http;
|
|
20
|
+
this.glbEnv = glbEnv;
|
|
21
|
+
this._spinnerService = _spinnerService;
|
|
22
|
+
this.toastr = toastr;
|
|
23
|
+
this.router = router;
|
|
24
|
+
this.route = route;
|
|
25
|
+
this.header = {};
|
|
26
|
+
}
|
|
27
|
+
data(reqObj, method, url) {
|
|
28
|
+
this._spinnerService.show();
|
|
29
|
+
if (localStorage.getItem('mdlKey') != null) {
|
|
30
|
+
let cUrl = this.router.url;
|
|
31
|
+
let mdlk = JSON.parse(localStorage.getItem('mdlKey'));
|
|
32
|
+
this.header = {
|
|
33
|
+
'clientkey': Cookie.get('_ck'),
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
'modulekey': mdlk[cUrl.split('/')[1]],
|
|
36
|
+
'loginid': Cookie.get('_logid'),
|
|
37
|
+
'source': 'qs',
|
|
38
|
+
'method': method
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
console.log(JSON.stringify(this.header));
|
|
42
|
+
let options = new HttpHeaders({ headers: this.header });
|
|
43
|
+
return this.http.post(this.glbEnv.baseUrl + url, JSON.stringify(reqObj), options).pipe(map((res) => res), (catchError((error) => {
|
|
44
|
+
this._spinnerService.hide();
|
|
45
|
+
this.toastr.error(error.message);
|
|
46
|
+
return throwError(error);
|
|
47
|
+
})));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** @nocollapse */ /** @nocollapse */ BiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BiService, deps: [{ token: i1.HttpClient }, { token: i2.GlobleEnvService }, { token: i3.NgxSpinnerService }, { token: i4.ToastrService }, { token: i5.Router }, { token: i5.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
51
|
+
/** @nocollapse */ /** @nocollapse */ BiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BiService, providedIn: 'root' });
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: BiService, decorators: [{
|
|
53
|
+
type: Injectable,
|
|
54
|
+
args: [{
|
|
55
|
+
providedIn: 'root'
|
|
56
|
+
}]
|
|
57
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.GlobleEnvService }, { type: i3.NgxSpinnerService }, { type: i4.ToastrService }, { type: i5.Router }, { type: i5.ActivatedRoute }]; } });
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvYmktc2VydmljZS9iaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFLOUMsTUFBTSxPQUFPLFNBQVM7SUFFcEIsWUFDVSxJQUFnQixFQUNoQixNQUF3QixFQUN4QixlQUFrQyxFQUNsQyxNQUFxQixFQUNyQixNQUFjLEVBQ2QsS0FBcUI7UUFMckIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFHdkIsV0FBTSxHQUFRLEVBQUUsQ0FBQztJQUZyQixDQUFDO0lBSUwsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRztRQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDMUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDM0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLE1BQU0sR0FBRztnQkFDWixXQUFXLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQzlCLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUMvQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUsTUFBTTthQUNqQixDQUFDO1NBQ0g7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxPQUFPLEdBQVEsSUFBSSxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3BGLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQ3RCLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FDSixDQUFDO0lBQ0osQ0FBQzs7NElBckNVLFNBQVM7Z0pBQVQsU0FBUyxjQUZSLE1BQU07MkZBRVAsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwSGVhZGVycyAgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgR2xvYmxlRW52U2VydmljZSB9IGZyb20gJy4uL2dsb2JsZS9nbG9ibGUtZW52LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQmlTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGdsYkVudjogR2xvYmxlRW52U2VydmljZSxcclxuICAgIHByaXZhdGUgX3NwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgaGVhZGVyOiBhbnkgPSB7fTtcclxuXHJcbiAgZGF0YShyZXFPYmosIG1ldGhvZCwgdXJsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuX3NwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWRsS2V5JykgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgY1VybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgbGV0IG1kbGsgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdtZGxLZXknKSk7XHJcbiAgICAgIHRoaXMuaGVhZGVyID0ge1xyXG4gICAgICAgICdjbGllbnRrZXknOiBDb29raWUuZ2V0KCdfY2snKSxcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdtb2R1bGVrZXknOiBtZGxrW2NVcmwuc3BsaXQoJy8nKVsxXV0sXHJcbiAgICAgICAgJ2xvZ2luaWQnOiBDb29raWUuZ2V0KCdfbG9naWQnKSxcclxuICAgICAgICAnc291cmNlJzogJ3FzJyxcclxuICAgICAgICAnbWV0aG9kJzogbWV0aG9kXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSggdGhpcy5oZWFkZXIpKTtcclxuICAgIGxldCBvcHRpb25zOiBhbnkgPSBuZXcgSHR0cEhlYWRlcnMoeyBoZWFkZXJzOiB0aGlzLmhlYWRlciB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmdsYkVudi5iYXNlVXJsICsgdXJsLCBKU09OLnN0cmluZ2lmeShyZXFPYmopLCBvcHRpb25zKS5waXBlKFxyXG4gICAgICBtYXAoKHJlczogYW55KSA9PiByZXMpLFxyXG4gICAgICAoY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICB0aGlzLl9zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|