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,679 @@
|
|
|
1
|
+
import { Component, ElementRef, ViewChild } from '@angular/core';
|
|
2
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
3
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { ToastrService } from 'ngx-toastr';
|
|
5
|
+
import { Cookie } from 'ng2-cookies/ng2-cookies';
|
|
6
|
+
import { NgxSpinnerService } from "ngx-spinner";
|
|
7
|
+
import { ContactServiceService } from '../contact-service/contact-service.service';
|
|
8
|
+
import { StockServiceService } from '../stock-service/stock-service.service';
|
|
9
|
+
import { CommanServiceService } from '../comman-service/comman-service.service';
|
|
10
|
+
//import { ToolbarService, LinkService, ImageService, HtmlEditorService, TableService, QuickToolbarService } from '@syncfusion/ej2-angular-richtexteditor';
|
|
11
|
+
//import * as ClassicEditor from '@ckeditor/ckeditor5-build-classic';
|
|
12
|
+
import { FormBuilder, Validators } from '@angular/forms';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/router";
|
|
15
|
+
import * as i2 from "ngx-toastr";
|
|
16
|
+
import * as i3 from "../contact-service/contact-service.service";
|
|
17
|
+
import * as i4 from "../stock-service/stock-service.service";
|
|
18
|
+
import * as i5 from "ngx-spinner";
|
|
19
|
+
import * as i6 from "../comman-service/comman-service.service";
|
|
20
|
+
import * as i7 from "@angular/forms";
|
|
21
|
+
import * as i8 from "ng-select";
|
|
22
|
+
import * as i9 from "@kolkov/angular-editor";
|
|
23
|
+
import * as i10 from "@angular/common";
|
|
24
|
+
import * as i11 from "../utility/contact-table-search.pipe";
|
|
25
|
+
export class ContactSearchComponent {
|
|
26
|
+
constructor(router, route, toastr, cs, ss, spinnerService, cmncs, fb) {
|
|
27
|
+
this.router = router;
|
|
28
|
+
this.route = route;
|
|
29
|
+
this.toastr = toastr;
|
|
30
|
+
this.cs = cs;
|
|
31
|
+
this.ss = ss;
|
|
32
|
+
this.spinnerService = spinnerService;
|
|
33
|
+
this.cmncs = cmncs;
|
|
34
|
+
this.fb = fb;
|
|
35
|
+
this.config = {
|
|
36
|
+
editable: true,
|
|
37
|
+
spellcheck: true,
|
|
38
|
+
height: '15rem',
|
|
39
|
+
minHeight: '5rem',
|
|
40
|
+
placeholder: 'Enter text here...',
|
|
41
|
+
translate: 'no',
|
|
42
|
+
defaultParagraphSeparator: 'p',
|
|
43
|
+
defaultFontName: 'Arial'
|
|
44
|
+
};
|
|
45
|
+
this.noticonfig = {
|
|
46
|
+
editable: true,
|
|
47
|
+
spellcheck: true,
|
|
48
|
+
height: '5rem',
|
|
49
|
+
minHeight: '3rem',
|
|
50
|
+
placeholder: 'Enter text here...',
|
|
51
|
+
translate: 'no',
|
|
52
|
+
defaultParagraphSeparator: '',
|
|
53
|
+
defaultFontName: '',
|
|
54
|
+
toolbarHiddenButtons: [
|
|
55
|
+
[
|
|
56
|
+
'bold',
|
|
57
|
+
'italic',
|
|
58
|
+
'underline',
|
|
59
|
+
'strikeThrough',
|
|
60
|
+
'subscript',
|
|
61
|
+
'superscript',
|
|
62
|
+
'justifyLeft',
|
|
63
|
+
'justifyCenter',
|
|
64
|
+
'justifyRight',
|
|
65
|
+
'justifyFull',
|
|
66
|
+
'indent',
|
|
67
|
+
'outdent',
|
|
68
|
+
'insertUnorderedList',
|
|
69
|
+
'insertOrderedList',
|
|
70
|
+
'heading',
|
|
71
|
+
'fontName'
|
|
72
|
+
],
|
|
73
|
+
[
|
|
74
|
+
'fontSize',
|
|
75
|
+
'textColor',
|
|
76
|
+
'backgroundColor',
|
|
77
|
+
'customClasses',
|
|
78
|
+
'insertImage',
|
|
79
|
+
'insertVideo',
|
|
80
|
+
'insertHorizontalRule',
|
|
81
|
+
'removeFormat',
|
|
82
|
+
'toggleEditorMode'
|
|
83
|
+
]
|
|
84
|
+
]
|
|
85
|
+
};
|
|
86
|
+
this.cDt = new Date();
|
|
87
|
+
this.employeeList = [];
|
|
88
|
+
this.countryList = [];
|
|
89
|
+
this.buyerList = [];
|
|
90
|
+
this.saleExecutiveList = [];
|
|
91
|
+
this.cityList = [];
|
|
92
|
+
this.contactType = '';
|
|
93
|
+
this.actions = [];
|
|
94
|
+
this.Terms = '';
|
|
95
|
+
this.currency = '';
|
|
96
|
+
this.City = '';
|
|
97
|
+
this.dataHeader = [];
|
|
98
|
+
this.dataList = [];
|
|
99
|
+
this.notificationMdlList = [];
|
|
100
|
+
this.mmtimeList = [];
|
|
101
|
+
this.hhtimeList = [];
|
|
102
|
+
this.EmployeeList = [];
|
|
103
|
+
this.selectedObj = [];
|
|
104
|
+
this.selectedItm = [];
|
|
105
|
+
this.selectedCrtWeight = 0;
|
|
106
|
+
}
|
|
107
|
+
loadProcess() {
|
|
108
|
+
this.status = "0";
|
|
109
|
+
this.spinnerService.show();
|
|
110
|
+
let reqObj = {};
|
|
111
|
+
reqObj['formNme'] = this.route.snapshot.params['frm']; //'contactSearchForm';//;
|
|
112
|
+
this.header['method'] = 'load';
|
|
113
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
114
|
+
console.log(JSON.stringify(reqObj));
|
|
115
|
+
this.cs.load(reqObj, options, 'contact/loadContact').then((response) => {
|
|
116
|
+
if (response.status == 'SUCCESS') {
|
|
117
|
+
console.log(response);
|
|
118
|
+
this.spinnerService.hide();
|
|
119
|
+
this.contactTypeList = response.contactTypeList;
|
|
120
|
+
this.currencyList = response.currencyList;
|
|
121
|
+
this.termsList = response.termsList;
|
|
122
|
+
this.countryList = response.countryList;
|
|
123
|
+
// this.buyerList = response.buyerList;
|
|
124
|
+
this.saleExecutiveList = response.saleExecutiveList.map(option => ({
|
|
125
|
+
value: option.k,
|
|
126
|
+
label: option.v
|
|
127
|
+
}));
|
|
128
|
+
this.actions = response.pageDefination.action || [];
|
|
129
|
+
this.tabs = response.pageDefination.tabs || [];
|
|
130
|
+
this.trns_buttons = response.pageDefination.trns_buttons || [];
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
this.spinnerService.hide();
|
|
134
|
+
this.toastr.error(response.message);
|
|
135
|
+
}
|
|
136
|
+
}).catch((err) => {
|
|
137
|
+
this.spinnerService.hide();
|
|
138
|
+
this.toastr.error(err.message);
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
addNewContact(dtl) {
|
|
142
|
+
console.log(dtl);
|
|
143
|
+
this.router.navigate([dtl.lov_qry]);
|
|
144
|
+
}
|
|
145
|
+
loadBuyer(searchTerm) {
|
|
146
|
+
this.spinnerService.show();
|
|
147
|
+
let reqObj = {};
|
|
148
|
+
reqObj['likeStr'] = searchTerm;
|
|
149
|
+
reqObj['typ'] = 'All';
|
|
150
|
+
this.header['method'] = 'loadBuyer';
|
|
151
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
152
|
+
this.ss.load(reqObj, options, 'marketing/search').then((response) => {
|
|
153
|
+
if (response.status == 'SUCCESS') {
|
|
154
|
+
let result = response.result;
|
|
155
|
+
this.buyerList = result.buyerList.map(option => ({
|
|
156
|
+
value: option.k,
|
|
157
|
+
label: option.v
|
|
158
|
+
}));
|
|
159
|
+
this.spinnerService.hide();
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
this.spinnerService.hide();
|
|
163
|
+
this.toastr.error(response.message);
|
|
164
|
+
}
|
|
165
|
+
}).catch((err) => {
|
|
166
|
+
this.spinnerService.hide();
|
|
167
|
+
this.toastr.error(err.message);
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
loadSaleExcutive(searchTerm) {
|
|
171
|
+
this.spinnerService.show();
|
|
172
|
+
let reqObj = {};
|
|
173
|
+
reqObj['likeStr'] = searchTerm;
|
|
174
|
+
reqObj['typ'] = 'employee';
|
|
175
|
+
this.header['method'] = 'loadBuyer';
|
|
176
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
177
|
+
this.ss.load(reqObj, options, 'marketing/search').then((response) => {
|
|
178
|
+
if (response.status == 'SUCCESS') {
|
|
179
|
+
let result = response.result;
|
|
180
|
+
this.EmployeeList = result.buyerList.map(option => ({
|
|
181
|
+
value: option.k,
|
|
182
|
+
label: option.v
|
|
183
|
+
}));
|
|
184
|
+
this.spinnerService.hide();
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
this.spinnerService.hide();
|
|
188
|
+
this.toastr.error(response.message);
|
|
189
|
+
}
|
|
190
|
+
}).catch((err) => {
|
|
191
|
+
this.spinnerService.hide();
|
|
192
|
+
this.toastr.error(err.message);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
getCity(counrytId) {
|
|
196
|
+
if (counrytId == undefined || counrytId == '')
|
|
197
|
+
return;
|
|
198
|
+
this.spinnerService.show();
|
|
199
|
+
let reqObj = {};
|
|
200
|
+
reqObj['formNme'] = this.route.snapshot.params['frm'];
|
|
201
|
+
reqObj['countryIdn'] = counrytId;
|
|
202
|
+
this.header['method'] = 'getCityBasedOnCountry';
|
|
203
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
204
|
+
this.cs.load(reqObj, options, 'contact/loadContact').then((response) => {
|
|
205
|
+
if (response.status == 'SUCCESS') {
|
|
206
|
+
this.cityList = [];
|
|
207
|
+
this.City = '';
|
|
208
|
+
console.log(response);
|
|
209
|
+
this.spinnerService.hide();
|
|
210
|
+
this.cityList = response.cityList;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
this.spinnerService.hide();
|
|
214
|
+
this.toastr.error(response.message);
|
|
215
|
+
}
|
|
216
|
+
}).catch((err) => {
|
|
217
|
+
this.spinnerService.hide();
|
|
218
|
+
this.toastr.error(err.message);
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
onSubmit(formVal, subBtn) {
|
|
222
|
+
var t = Object.keys(formVal.form.controls).forEach(field => {
|
|
223
|
+
const control = formVal.form.get(field);
|
|
224
|
+
});
|
|
225
|
+
// this.searchContact(formVal.value, subBtn);
|
|
226
|
+
}
|
|
227
|
+
searchContact() {
|
|
228
|
+
debugger;
|
|
229
|
+
//console.log(frmFld);
|
|
230
|
+
// "formNme":"contactSearchForm",
|
|
231
|
+
// "tableNameVar":"nme_m#nme_m#nme_m#buyer_terms#buyer_terms",
|
|
232
|
+
// "tableFieldVar":"emp_idn#nme_idn#typ#currency_idn#terms_idn",
|
|
233
|
+
// "typeVar":"n#n#n#n#n",
|
|
234
|
+
// "attrVar":"emp_idn#nme_idn#typ#currency_idn#terms_idn",
|
|
235
|
+
// "valuesVar":"27588#28173#buyer#206#246",
|
|
236
|
+
// "dataTypeVar":"n#n#c#n#n"
|
|
237
|
+
//*****for username******** ///
|
|
238
|
+
// "tableNameVar":"appl_user",
|
|
239
|
+
// "tableFieldVar":"username",
|
|
240
|
+
// "typeVar":"n",
|
|
241
|
+
// "attrVar":"username",
|
|
242
|
+
// "valuesVar":"nilamweb",
|
|
243
|
+
// "dataTypeVar":"c"
|
|
244
|
+
this.spinnerService.show();
|
|
245
|
+
let tableNameVar = '';
|
|
246
|
+
let tableFieldVar = '';
|
|
247
|
+
let typeVar = '';
|
|
248
|
+
let attrVar = '';
|
|
249
|
+
let valuesVar = '';
|
|
250
|
+
let dataTypeVar = '';
|
|
251
|
+
if (this.userName != null && this.userName != "" && this.userName != undefined) {
|
|
252
|
+
tableNameVar += 'appl_user' + '#';
|
|
253
|
+
tableFieldVar += 'username' + '#';
|
|
254
|
+
typeVar += 'n' + '#';
|
|
255
|
+
attrVar += 'username' + '#';
|
|
256
|
+
valuesVar += this.userName + '#';
|
|
257
|
+
dataTypeVar += 'c' + '#';
|
|
258
|
+
}
|
|
259
|
+
if (this.contactType != null && this.contactType != "" && this.contactType != undefined) {
|
|
260
|
+
tableNameVar += 'nme_m' + '#';
|
|
261
|
+
tableFieldVar += 'typ' + '#';
|
|
262
|
+
typeVar += 'n' + '#';
|
|
263
|
+
attrVar += 'typ' + '#';
|
|
264
|
+
valuesVar += this.contactType + '#';
|
|
265
|
+
dataTypeVar += 'c' + '#';
|
|
266
|
+
}
|
|
267
|
+
if (this.buyer != null && this.buyer != "" && this.buyer != undefined) {
|
|
268
|
+
tableNameVar += 'nme_m' + '#';
|
|
269
|
+
tableFieldVar += 'nme_idn' + '#';
|
|
270
|
+
typeVar += 'n' + '#';
|
|
271
|
+
attrVar += 'nme_idn' + '#';
|
|
272
|
+
valuesVar += this.buyer + '#';
|
|
273
|
+
dataTypeVar += 'n' + '#';
|
|
274
|
+
}
|
|
275
|
+
if (this.empId != null && this.empId != "" && this.empId != undefined) {
|
|
276
|
+
tableNameVar += 'nme_m' + '#';
|
|
277
|
+
tableFieldVar += 'emp_idn' + '#';
|
|
278
|
+
typeVar += 'n' + '#';
|
|
279
|
+
attrVar += 'emp_idn' + '#';
|
|
280
|
+
valuesVar += this.empId + '#';
|
|
281
|
+
dataTypeVar += 'n' + '#';
|
|
282
|
+
}
|
|
283
|
+
if (this.Terms != null && this.Terms != "" && this.Terms != undefined) {
|
|
284
|
+
tableNameVar += 'buyer_terms' + '#';
|
|
285
|
+
tableFieldVar += 'terms_idn' + '#';
|
|
286
|
+
typeVar += 'n' + '#';
|
|
287
|
+
attrVar += 'terms_idn' + '#';
|
|
288
|
+
valuesVar += this.Terms + '#';
|
|
289
|
+
dataTypeVar += 'n' + '#';
|
|
290
|
+
}
|
|
291
|
+
if (this.currency != null && this.currency != "" && this.currency != undefined) {
|
|
292
|
+
tableNameVar += 'buyer_terms' + '#';
|
|
293
|
+
tableFieldVar += 'currency_idn' + '#';
|
|
294
|
+
typeVar += 'n' + '#';
|
|
295
|
+
attrVar += 'currency_idn' + '#';
|
|
296
|
+
valuesVar += this.currency + '#';
|
|
297
|
+
dataTypeVar += 'n' + '#';
|
|
298
|
+
}
|
|
299
|
+
this.spinnerService.show();
|
|
300
|
+
let reqObj = {};
|
|
301
|
+
reqObj['formNme'] = this.route.snapshot.params['frm'];
|
|
302
|
+
reqObj['tableNameVar'] = tableNameVar.slice(0, -1); //'nme_m';
|
|
303
|
+
reqObj['tableFieldVar'] = tableFieldVar.slice(0, -1); //'typ';
|
|
304
|
+
reqObj['typeVar'] = typeVar.slice(0, -1); //'n';
|
|
305
|
+
reqObj['attrVar'] = attrVar.slice(0, -1); //'typ';
|
|
306
|
+
reqObj['valuesVar'] = valuesVar.slice(0, -1); //contactType.print.toLowerCase();
|
|
307
|
+
reqObj['dataTypeVar'] = dataTypeVar.slice(0, -1); //'c';
|
|
308
|
+
if (this.nameIdnList != "" && this.nameIdnList != undefined && this.nameIdnList != null) {
|
|
309
|
+
this.nameIdnList = this.nameIdnList.trim();
|
|
310
|
+
let spaceTocomma = this.nameIdnList.replace(/[ ,]+/g, ",");
|
|
311
|
+
let newLineToComma = spaceTocomma.replace(/\n/g, ",");
|
|
312
|
+
reqObj['nmeIdnList'] = newLineToComma.split(',');
|
|
313
|
+
}
|
|
314
|
+
this.header['method'] = 'searchContact';
|
|
315
|
+
console.log(JSON.stringify(reqObj));
|
|
316
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
317
|
+
this.cs.load(reqObj, options, 'contact/loadContact').then((response) => {
|
|
318
|
+
if (response.status == 'SUCCESS') {
|
|
319
|
+
console.log(response);
|
|
320
|
+
this.spinnerService.hide();
|
|
321
|
+
this.dataHeader = response.dataHeader;
|
|
322
|
+
this.dataList = response.dataList;
|
|
323
|
+
this.dataHeaderPrint = response.dataHeaderPrint;
|
|
324
|
+
this.pageDefination = response.pageDefination;
|
|
325
|
+
this.selectedItm = [];
|
|
326
|
+
this.nameIdnList = "";
|
|
327
|
+
document.getElementById("wrap").addEventListener("scroll", function () {
|
|
328
|
+
var translate = "translate(0," + this.scrollTop + "px)";
|
|
329
|
+
this.querySelector("thead").style.transform = translate;
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
this.spinnerService.hide();
|
|
334
|
+
this.toastr.error(response.message);
|
|
335
|
+
}
|
|
336
|
+
}).catch((err) => {
|
|
337
|
+
this.spinnerService.hide();
|
|
338
|
+
this.toastr.error(err.message);
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
userAction(ua, c, a) {
|
|
342
|
+
debugger;
|
|
343
|
+
if (ua && c.trim() == 'subform') {
|
|
344
|
+
this.router.navigate([a.lov_qry.trim(), a.column_key, ua.nme_idn]);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
toolactions(tab) {
|
|
348
|
+
console.log("process", process);
|
|
349
|
+
switch (tab.form_field) {
|
|
350
|
+
case "addnotification": {
|
|
351
|
+
this.NotificationPopup();
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
default: {
|
|
355
|
+
console.log("Invalid choice");
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
NotificationPopup() {
|
|
361
|
+
if (this.selectedItm.length > 0) {
|
|
362
|
+
this.notificationFormreset();
|
|
363
|
+
this.spinnerService.show();
|
|
364
|
+
let reqObj = {};
|
|
365
|
+
reqObj['formNme'] = this.route.snapshot.params['frm'];
|
|
366
|
+
this.header['method'] = 'loadNotification';
|
|
367
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
368
|
+
this.cs.load(reqObj, options, 'contact/notification').then((response) => {
|
|
369
|
+
if (response.status == 'SUCCESS') {
|
|
370
|
+
let result = response.result || {};
|
|
371
|
+
this.notificationMdlList = result.notificationMdlList || [];
|
|
372
|
+
document.getElementById('btnNotification').click();
|
|
373
|
+
this.spinnerService.hide();
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
this.spinnerService.hide();
|
|
377
|
+
this.toastr.error(response.message);
|
|
378
|
+
}
|
|
379
|
+
}).catch((err) => {
|
|
380
|
+
this.spinnerService.hide();
|
|
381
|
+
this.toastr.error(err.message);
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
this.toastr.error("Please select contacts");
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
AddNotification() {
|
|
389
|
+
if (this.myNotification.valid) {
|
|
390
|
+
let formsVal = this.myNotification.value;
|
|
391
|
+
let buyerList = [];
|
|
392
|
+
this.selectedItm.forEach(element => {
|
|
393
|
+
let nme_idn = element.nme_idn || [];
|
|
394
|
+
buyerList.push(nme_idn);
|
|
395
|
+
});
|
|
396
|
+
debugger;
|
|
397
|
+
let dateString = formsVal['logdate'] + ' ' + formsVal['hh'] + ':' + formsVal['mm'] + ':00';
|
|
398
|
+
let reqObj = {};
|
|
399
|
+
reqObj['formNme'] = this.route.snapshot.params['frm'];
|
|
400
|
+
reqObj['log_ts'] = dateString;
|
|
401
|
+
reqObj['pub_pvt'] = formsVal['pub_pvt'];
|
|
402
|
+
reqObj['mdl'] = formsVal['mdl'];
|
|
403
|
+
reqObj['src'] = formsVal['src'];
|
|
404
|
+
reqObj['msg'] = formsVal['massage'];
|
|
405
|
+
reqObj['status'] = formsVal['status'];
|
|
406
|
+
reqObj['buyerList'] = buyerList;
|
|
407
|
+
reqObj['action'] = 'add';
|
|
408
|
+
console.log(JSON.stringify(reqObj));
|
|
409
|
+
this.header['method'] = 'saveNotification';
|
|
410
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
411
|
+
this.cs.load(reqObj, options, 'contact/notification').then((response) => {
|
|
412
|
+
if (response.status == 'SUCCESS') {
|
|
413
|
+
let result = response.result || {};
|
|
414
|
+
this.notificationFormreset();
|
|
415
|
+
this.selectedItm = [];
|
|
416
|
+
this.spinnerService.hide();
|
|
417
|
+
this.notificlosebtn.nativeElement.click();
|
|
418
|
+
this.toastr.success("Notification added successfully.");
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
this.spinnerService.hide();
|
|
422
|
+
this.toastr.error(response.message);
|
|
423
|
+
}
|
|
424
|
+
}).catch((err) => {
|
|
425
|
+
this.spinnerService.hide();
|
|
426
|
+
this.toastr.error(err.message);
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
this.toastr.error("Please specify all required field");
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
exportExcel() {
|
|
434
|
+
this.cmncs.CSVConvertor(this.dataList, 'Contact_Search_', true);
|
|
435
|
+
}
|
|
436
|
+
MailPopup() {
|
|
437
|
+
if (this.selectedItm.length > 0) {
|
|
438
|
+
document.getElementById('btnsendMail').click();
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
this.toastr.error("Please select contacts");
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
UpdateSaleExecutivePop() {
|
|
445
|
+
if (this.selectedItm.length > 0) {
|
|
446
|
+
document.getElementById('btnsaleex').click();
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
this.toastr.error("Please select contacts");
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
UpdateSaleExecutive() {
|
|
453
|
+
let nmeIdnList = [];
|
|
454
|
+
this.selectedItm.forEach(element => {
|
|
455
|
+
let nme_idn = element.nme_idn || [];
|
|
456
|
+
nmeIdnList.push(nme_idn);
|
|
457
|
+
});
|
|
458
|
+
this.saleExcute = this.saleExcute || "";
|
|
459
|
+
if (this.saleExcute != "") {
|
|
460
|
+
this.spinnerService.show();
|
|
461
|
+
let reqObj = {};
|
|
462
|
+
reqObj['formNme'] = this.route.snapshot.params['frm'];
|
|
463
|
+
reqObj['nmeIdnList'] = nmeIdnList;
|
|
464
|
+
reqObj['emp_idn'] = this.saleExcute;
|
|
465
|
+
console.log(JSON.stringify(reqObj));
|
|
466
|
+
this.header['method'] = 'assignSaleExecutive';
|
|
467
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
468
|
+
this.cs.load(reqObj, options, 'contact/loadContact').then((response) => {
|
|
469
|
+
if (response.status == 'SUCCESS') {
|
|
470
|
+
this.saleExcute = "";
|
|
471
|
+
this.slexclosebtn.nativeElement.click();
|
|
472
|
+
this.toastr.success("Update done successfully");
|
|
473
|
+
this.spinnerService.hide();
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
this.spinnerService.hide();
|
|
477
|
+
this.toastr.error(response.message);
|
|
478
|
+
}
|
|
479
|
+
}).catch((err) => {
|
|
480
|
+
this.spinnerService.hide();
|
|
481
|
+
this.toastr.error(err.message);
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
this.toastr.error("Please Specify Sale Executive");
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
SendMail() {
|
|
489
|
+
let formsVal = this.myFormmm.value;
|
|
490
|
+
debugger;
|
|
491
|
+
let isValid = true;
|
|
492
|
+
let massage = "";
|
|
493
|
+
let htmlcontent = formsVal['htmlcontent'] || '';
|
|
494
|
+
let subject = formsVal['subject'] || '';
|
|
495
|
+
let senderName = formsVal['senderName'] || '';
|
|
496
|
+
if (this.selectedItm.length == 0) {
|
|
497
|
+
isValid = false;
|
|
498
|
+
massage = "Please select contacts for mail";
|
|
499
|
+
}
|
|
500
|
+
if (subject == '') {
|
|
501
|
+
isValid = false;
|
|
502
|
+
massage = "Please Specify Subject";
|
|
503
|
+
}
|
|
504
|
+
if (htmlcontent == '') {
|
|
505
|
+
isValid = false;
|
|
506
|
+
massage = "Please Specify Mail Body";
|
|
507
|
+
}
|
|
508
|
+
if (senderName == '') {
|
|
509
|
+
isValid = false;
|
|
510
|
+
massage = "Please Specify Sender Name";
|
|
511
|
+
}
|
|
512
|
+
if (isValid) {
|
|
513
|
+
let CClst = formsVal['CC'] || '';
|
|
514
|
+
let BCClst = formsVal['BCC'] || '';
|
|
515
|
+
let cc = [];
|
|
516
|
+
let bcc = [];
|
|
517
|
+
this.spinnerService.show();
|
|
518
|
+
if (CClst != '') {
|
|
519
|
+
let spaceTocomma = CClst.replace(/[ ,]+/g, ",");
|
|
520
|
+
let newLineToComma = spaceTocomma.replace(/\n/g, ",");
|
|
521
|
+
cc = newLineToComma.split(',');
|
|
522
|
+
}
|
|
523
|
+
if (BCClst != '') {
|
|
524
|
+
let spaceTocomma = BCClst.replace(/[ ,]+/g, ",");
|
|
525
|
+
let newLineToComma = spaceTocomma.replace(/\n/g, ",");
|
|
526
|
+
bcc = newLineToComma.split(',');
|
|
527
|
+
}
|
|
528
|
+
let emailDetails = [];
|
|
529
|
+
this.selectedItm.forEach(element => {
|
|
530
|
+
let emailIdns = element.emailIdns || [];
|
|
531
|
+
let nme_idn = element.nme_idn;
|
|
532
|
+
let emp_idn = element.emp_idn;
|
|
533
|
+
if (emailIdns.length > 0) {
|
|
534
|
+
emailDetails.push({
|
|
535
|
+
"emails": emailIdns,
|
|
536
|
+
"nme_idn": nme_idn,
|
|
537
|
+
"emp_idn": emp_idn
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
});
|
|
541
|
+
debugger;
|
|
542
|
+
let reqObj = {};
|
|
543
|
+
reqObj['formNme'] = "ContactMassMail";
|
|
544
|
+
reqObj['sendername'] = senderName;
|
|
545
|
+
reqObj['subject'] = subject;
|
|
546
|
+
reqObj['maildetails'] = emailDetails;
|
|
547
|
+
reqObj['cc'] = cc;
|
|
548
|
+
reqObj['bcc'] = bcc;
|
|
549
|
+
reqObj['mailBody'] = htmlcontent;
|
|
550
|
+
console.log(JSON.stringify(reqObj));
|
|
551
|
+
this.header['method'] = 'sendBulkMail';
|
|
552
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
553
|
+
this.cs.load(reqObj, options, 'contact/loadContact').then((response) => {
|
|
554
|
+
if (response.status == 'SUCCESS') {
|
|
555
|
+
this.myFormmm = this.fb.group({
|
|
556
|
+
senderName: ['', Validators.required],
|
|
557
|
+
subject: ['', Validators.required],
|
|
558
|
+
htmlcontent: ['', [Validators.required]],
|
|
559
|
+
CC: "",
|
|
560
|
+
BCC: ""
|
|
561
|
+
});
|
|
562
|
+
this.mailclosebtn.nativeElement.click();
|
|
563
|
+
this.toastr.error(response.message);
|
|
564
|
+
this.spinnerService.hide();
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
this.spinnerService.hide();
|
|
568
|
+
this.toastr.error(response.message);
|
|
569
|
+
}
|
|
570
|
+
}).catch((err) => {
|
|
571
|
+
this.spinnerService.hide();
|
|
572
|
+
this.toastr.error(err.message);
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
else {
|
|
576
|
+
this.spinnerService.hide();
|
|
577
|
+
this.toastr.error(massage);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
get notificationControl() {
|
|
581
|
+
return this.myNotification.controls;
|
|
582
|
+
}
|
|
583
|
+
selectRow(nme_idn) {
|
|
584
|
+
document.getElementById('cb_' + nme_idn).click();
|
|
585
|
+
}
|
|
586
|
+
selectAll(e) {
|
|
587
|
+
this.dataList.forEach(ele => {
|
|
588
|
+
debugger;
|
|
589
|
+
this.selectRow(ele.nme_idn);
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
checkedRow(data, nme_idn) {
|
|
593
|
+
debugger;
|
|
594
|
+
if (document.getElementById('cb_' + nme_idn).checked == false) {
|
|
595
|
+
let element = document.getElementById('cb_' + nme_idn); //pktId
|
|
596
|
+
element.parentElement.parentElement.classList.remove("selectedRow");
|
|
597
|
+
element.parentElement.parentElement.classList.add("notselectedRow");
|
|
598
|
+
this.selectedItm.forEach((element, index) => {
|
|
599
|
+
if (element.nme_idn == nme_idn) {
|
|
600
|
+
this.selectedItm.splice(index, 1);
|
|
601
|
+
}
|
|
602
|
+
});
|
|
603
|
+
}
|
|
604
|
+
else {
|
|
605
|
+
var element = document.getElementById('cb_' + nme_idn); //pktId
|
|
606
|
+
element.parentElement.parentElement.classList.remove("notselectedRow");
|
|
607
|
+
element.parentElement.parentElement.classList.add("selectedRow");
|
|
608
|
+
this.selectedItm.push(data);
|
|
609
|
+
}
|
|
610
|
+
console.log(this.selectedItm);
|
|
611
|
+
}
|
|
612
|
+
ngOnInit() {
|
|
613
|
+
this.editorConfig = this.cmncs.editorConfig;
|
|
614
|
+
let mdlk = JSON.parse(localStorage.getItem('mdlKey'));
|
|
615
|
+
this.cUrl = this.router.url;
|
|
616
|
+
console.log(this.cUrl.split('/')[1]);
|
|
617
|
+
this.header = {
|
|
618
|
+
'clientkey': Cookie.get('_ck'),
|
|
619
|
+
'Content-Type': 'application/json',
|
|
620
|
+
'modulekey': mdlk[this.cUrl.split('/')[1]],
|
|
621
|
+
'loginid': Cookie.get('_logid'),
|
|
622
|
+
'source': 'qs'
|
|
623
|
+
};
|
|
624
|
+
this.myFormmm = this.fb.group({
|
|
625
|
+
senderName: ['', Validators.required],
|
|
626
|
+
subject: ['', Validators.required],
|
|
627
|
+
htmlcontent: ['', [Validators.required]],
|
|
628
|
+
CC: "",
|
|
629
|
+
BCC: ""
|
|
630
|
+
});
|
|
631
|
+
this.mmtimeList = [];
|
|
632
|
+
for (var i = 0; i < 24; i++) {
|
|
633
|
+
if (i < 10)
|
|
634
|
+
this.mmtimeList.push("0" + i);
|
|
635
|
+
else
|
|
636
|
+
this.mmtimeList.push("" + i);
|
|
637
|
+
}
|
|
638
|
+
this.hhtimeList = [];
|
|
639
|
+
for (var i = 0; i < 60; i++) {
|
|
640
|
+
if (i < 10)
|
|
641
|
+
this.hhtimeList.push("0" + i);
|
|
642
|
+
else
|
|
643
|
+
this.hhtimeList.push("" + i);
|
|
644
|
+
}
|
|
645
|
+
this.notificationFormreset();
|
|
646
|
+
this.loadProcess();
|
|
647
|
+
}
|
|
648
|
+
notificationFormreset() {
|
|
649
|
+
this.myNotification = this.fb.group({
|
|
650
|
+
logdate: ['', Validators.required],
|
|
651
|
+
pub_pvt: "PVT",
|
|
652
|
+
mdl: ['', Validators.required],
|
|
653
|
+
src: "ez",
|
|
654
|
+
hh: "00",
|
|
655
|
+
mm: "00",
|
|
656
|
+
massage: ['', Validators.required],
|
|
657
|
+
status: "P"
|
|
658
|
+
});
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
/** @nocollapse */ /** @nocollapse */ ContactSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ContactSearchComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ToastrService }, { token: i3.ContactServiceService }, { token: i4.StockServiceService }, { token: i5.NgxSpinnerService }, { token: i6.CommanServiceService }, { token: i7.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
662
|
+
/** @nocollapse */ /** @nocollapse */ ContactSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ContactSearchComponent, selector: "app-contact-search", viewQueries: [{ propertyName: "submitbtn", first: true, predicate: ["submitBtn"], descendants: true }, { propertyName: "slexclosebtn", first: true, predicate: ["slexclosebtn"], descendants: true }, { propertyName: "mailclosebtn", first: true, predicate: ["mailclosebtn"], descendants: true }, { propertyName: "notificlosebtn", first: true, predicate: ["notificlosebtn"], descendants: true }], 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\"> Back</span> Contact Search \r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <div class=\"pull-right\" *ngIf=\"trns_buttons.length>0\">\r\n <button type=\"button\" (click)=\"addNewContact(trns_buttons[0])\" class=\"btn btn-success\" style=\"background-color:#3c5998;border-color: #3c5998;\">Add New Contact</button>\r\n </div> \r\n </div>\r\n </div>\r\n <div class=\"content-frame\" style=\"background: #fff;height: calc(100vh - 100px);\">\r\n <div class=\"innerD\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"row\" style=\"margin: 10px 0;\">\r\n \r\n <div class=\"form-group w-100\">\r\n <select class=\"form-control w-100\" name=\"contactType\" [(ngModel)]=\"contactType\" style=\"height: 100%;\">\r\n <option value=\"\">Select ContactType</option>\r\n <option *ngFor=\"let type of contactTypeList\" [ngValue]=\"type.val\">{{type.print}}</option>\r\n </select>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"buyerList\" [searchable]=\"false\" name=\"buyerSugg\" [(ngModel)]=\"buyerSugg\"\r\n bindLabel=\"v\" bindValue=\"k\" placeholder=\"Select Buyer\">\r\n <ng-template ng-header-tmp>\r\n <input style=\"width: 100%; line-height: 24px\" #buyer type=\"text\" (keyup)=\"loadBuyer(buyer.value);\"\r\n [autofocus]=\"testt\" />\r\n </ng-template>\r\n </ng-select> -->\r\n <ng-select style=\"z-index: 5;\" placeholder=\"Select Buyer\" [options]=\"buyerList\"\r\n [(ngModel)]=\"buyer\" name=\"buyer\" (filterInputChanged)=\"loadBuyer($event)\" [allowClear]=\"true\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select employee\" name=\"empId\"\r\n [options]=\"saleExecutiveList\"\r\n [(ngModel)]=\"empId\" [allowClear]=\"true\">\r\n </ng-select>\r\n <!-- <ng-select [items]=\"saleExecutiveList\" [(ngModel)]=\"empId\" bindLabel=\"v\" name=\"empId\" bindValue=\"k\"\r\n placeholder=\"Select employee\" #buyerFil=\"ngModel\" required>\r\n <ng-template ng-header-tmp>\r\n </ng-template>\r\n </ng-select> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <select class=\"form-control w-100\" name=\"Terms\" [(ngModel)]=\"Terms\" style=\"height: 100%;\">\r\n <option value=\"\">Select Terms</option>\r\n <option *ngFor=\"let term of termsList\" value=\"{{term.terms_idn}}\">{{term.print}}</option>\r\n </select>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <select class=\"form-control w-100\" name=\"currency\" [(ngModel)]=\"currency\" style=\"height: 100%;\">\r\n <option value=\"\">Select currency</option>\r\n <option *ngFor=\"let currency of currencyList\" value=\"{{currency.currency_idn}}\">{{currency.print}}</option>\r\n </select>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <input class=\"form-control w-100\" placeholder=\"User Name\" type=\"text\" name=\"userName\" [(ngModel)]=\"userName\" />\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <textarea style=\"white-space: pre;\" class=\"form-control\" placeholder=\"NameIdn List\" \r\n [(ngModel)]=\"nameIdnList\" id=\"nameIdnList\" name=\"nameIdnList\" cols=\"38\" rows=\"3\" ></textarea>\r\n </div>\r\n \r\n <div class=\" w-100\" style=\"padding-top: 10px;\">\r\n <button id=\"savebtn\" (click)=\"searchContact()\" type=\"button\" style=\"background-color:#3c5998;border-color: #3c5998\"\r\n class=\"btn btn-success pull-left\">submit</button>\r\n <!-- (click)=\"searchContact(contactType,buyerSugg,empId,Terms,currency,userName)\" -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 custCls\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"row\" *ngIf=\"dataList?.length > 0\">\r\n <div class=\"col-md-1 pull-right\">\r\n <!-- <button type=\"submit\" class=\"btn btn-success\" (click)=\"togtsl();\" style=\"background-color:#3c5998;border-color: #3c5998;margin-top: 7px;margin-bottom: 7px\">tools</button> -->\r\n <!-- <div class=\"tlsdrp\" *ngIf=\"tsl\">\r\n <ul class=\"tlsul\">\r\n <li *ngFor=\"let action of actions\">\r\n <span class=\"{{action?.form_field_icon}} tslico\"></span>{{action?.form_field_title}}</li>\r\n </ul>\r\n </div> -->\r\n <div class=\"dropdown\">\r\n <button type=\"submit\" class=\"btn btn-success\" style=\"background-color:#3c5998;border-color: #3c5998;margin-top: 7px;margin-bottom: 7px\"\r\n data-toggle=\"dropdown\">tools\r\n <span class=\"caret\"></span>\r\n </button>\r\n <ul class=\"dropdown-menu dropdown-menu-right\">\r\n <li *ngFor=\"let tab of tabs\" (click)=\"toolactions(tab);\" style=\"padding: 10px;\">\r\n <span class=\"{{tab?.form_field_icon}} tslico\"></span>{{tab?.form_field_title}}</li>\r\n\r\n <li style=\"padding: 10px;cursor: pointer;\" (click)=\"exportExcel();\">\r\n Excel</li>\r\n \r\n <li style=\"padding: 10px;cursor: pointer;\" (click)=\"UpdateSaleExecutivePop();\">\r\n Update Sales Executive\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-6 pull-left\">\r\n <div class=\"form-group\" style=\"padding-top: 10px;\">\r\n <div class=\"col-md-2\">\r\n <label for=\"exampleInputName2\" style=\"padding-top: 5px;\">Search </label>\r\n </div>\r\n\r\n <div class=\"col-md-5\">\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"table-responsive\" style=\"height: calc(100vh - 100px);\" id=\"wrap\">\r\n <table class=\"displayTable\" *ngIf=\"dataList?.length > 0\">\r\n <thead>\r\n <tr class=\"posrel\">\r\n <th>SR No<input type=\"checkbox\" (click)=\"selectAll($event);\"></th>\r\n <th>Action</th>\r\n <th *ngFor=\"let hdr of dataHeader\">{{dataHeaderPrint[hdr]}}</th>\r\n <th>Add.Emails</th>\r\n </tr>\r\n </thead>\r\n <tbody >\r\n <tr *ngFor=\"let data of dataList | ContactTableSrcPipe:searchF; let i = index\">\r\n <!-- | searchPipe:searchF -->\r\n <td (click)=\"selectRow(data.nme_idn)\">{{i + 1}}\r\n\r\n <input type=\"checkbox\" [hidden]=\"true\" id=\"cb_{{data.nme_idn}}\"\r\n (click)=\"checkedRow(data,data.nme_idn)\" value=\"{{data.nme_idn}}\" />\r\n </td>\r\n <td (click)=\"selectRow(data.nme_idn)\">\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 pageDefination.action\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(data,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 *ngFor=\"let hdr of dataHeader\" (click)=\"selectRow(data.nme_idn)\">{{data[hdr]}}</td>\r\n <td>{{data['emailIdns']}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter pull-right\">\r\n <div class=\"row\">\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"modelSaleEx\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mailModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog modal-md\" >\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\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=\"mailModalHead\">Update Sale Executive</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Sale Executive\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group input-group-sm w-100\">\r\n <ng-select style=\"z-index: 5;\" placeholder=\"Select Buyer\" [options]=\"EmployeeList\"\r\n [(ngModel)]=\"saleExcute\" name=\"saleExcute\" (filterInputChanged)=\"loadSaleExcutive($event)\" [allowClear]=\"true\">\r\n </ng-select> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <!-- <p> dff {{htmlContent}}</p> -->\r\n <button type=\"button\" (click)=\"UpdateSaleExecutive()\" class=\"btn btn-success\">Update</button>\r\n <button type=\"button\" #slexclosebtn class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n<div class=\"modal\" id=\"modelMail\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mailModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog modal-lg\" style=\"width: 705px\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" [formGroup]=\"myFormmm\" (ngSubmit)=\"SendMail()\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\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=\"mailModalHead\">Send Mail</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n \r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Sender Name\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group input-group-sm w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" formControlName=\"senderName\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Subject\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" formControlName=\"subject\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">CC\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" formControlName=\"CC\" name=\"CC\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">BCC\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" formControlName=\"BCC\" name=\"BCC\" />\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <angular-editor [placeholder]=\"'Enter text here...'\" [config]=\"config\" formControlName=\"htmlcontent\"></angular-editor>\r\n <!-- <ejs-richtexteditor id='defaultRTE' [(value)]='value' ></ejs-richtexteditor> -->\r\n\r\n <!-- <ckeditor [(ngModel)]=\"value\" ></ckeditor> -->\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <!-- <p> dff {{htmlContent}}</p> -->\r\n <button type=\"submit\" class=\"btn btn-success\">Send</button>\r\n <button type=\"button\" #mailclosebtn class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"modelNotification\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog modal-lg\" style=\"width: 705px\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" [formGroup]=\"myNotification\" (ngSubmit)=\"AddNotification()\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\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=\"mailModalHead\">Add Notification</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n \r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\"> <span style=\"color:red\">*</span> Date\r\n </label>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group input-group-sm w-100\">\r\n <input\r\n formControlName=\"logdate\"\r\n onfocus=\"(this.type='date')\"\r\n onblur=\"(this.type='text')\"\r\n class=\"form-control\"\r\n placeholder=\"dd/mm/yyyy\" \r\n />\r\n\r\n <span class=\"text-danger\"\r\n *ngIf=\"notificationControl.logdate.invalid && (notificationControl.logdate.dirty || notificationControl.logdate.touched) && notificationControl.logdate.errors.required\">\r\n Date is required\r\n </span>\r\n </div>\r\n </div>\r\n <label class=\"col-md-2 control-label\"> <span style=\"color:red\">*</span>Time(HH:MM)\r\n </label>\r\n <div class=\"col-md-1\" style=\"padding:2px;margin:0px;\">\r\n \r\n <select formControlName=\"hh\" style=\"padding:5px 5px\" class=\"form-control\" >\r\n \r\n <option *ngFor=\"let mmt of mmtimeList\" [ngValue]=\"mmt\">{{mmt}}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-1\" style=\"padding:2px;margin:0px;\">\r\n \r\n <select formControlName=\"mm\" style=\"padding:5px 5px\" class=\"form-control\" >\r\n \r\n <option *ngFor=\"let hht of hhtimeList\" [ngValue]=\"hht\">{{hht}}</option>\r\n </select>\r\n </div>\r\n \r\n \r\n \r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\"> <span style=\"color:red\">*</span>Module\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select formControlName=\"mdl\" class=\"form-control\" >\r\n \r\n <option *ngFor=\"let notificate of notificationMdlList\" [ngValue]=\"notificate.k\">{{notificate['v']}}</option>\r\n \r\n \r\n </select>\r\n <span class=\"text-danger\"\r\n *ngIf=\"notificationControl.mdl.invalid && (notificationControl.mdl.dirty || notificationControl.mdl.touched) && notificationControl.mdl.errors.required\">\r\n Module is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\"><span style=\"color:red\">*</span>Massage</label>\r\n <div class=\"col-md-10\">\r\n <angular-editor [placeholder]=\"\" [config]=\"noticonfig\" formControlName=\"massage\"></angular-editor>\r\n <span class=\"text-danger\"\r\n *ngIf=\"notificationControl.massage.invalid && (notificationControl.massage.dirty || notificationControl.massage.touched) && notificationControl.massage.errors.required\">\r\n Notification massage is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <!-- <p> dff {{htmlContent}}</p> -->\r\n <button type=\"submit\" class=\"btn btn-success\">Add</button>\r\n <button type=\"button\" #notificlosebtn class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<button id=\"btnNotification\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#modelNotification\"></button>\r\n\r\n\r\n<button id=\"btnsaleex\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#modelSaleEx\"></button>\r\n\r\n<button id=\"btnsendMail\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#modelMail\"></button>\r\n", styles: [".selectedRow{background-color:#3c59983b!important;cursor:pointer}.notselectedRow{background-color:#fff}:host ::ng-deep .ck-editor__editable_inline{min-height:300px}\n"], components: [{ type: i8.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"] }, { type: i9.AngularEditorComponent, selector: "angular-editor", inputs: ["id", "config", "placeholder", "tabIndex"], outputs: ["viewMode", "blur", "focus", "html"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i7.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.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: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], pipes: { "date": i10.DatePipe, "ContactTableSrcPipe": i11.ContacttableSearch } });
|
|
663
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ContactSearchComponent, decorators: [{
|
|
664
|
+
type: Component,
|
|
665
|
+
args: [{ selector: 'app-contact-search', 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\"> Back</span> Contact Search \r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <div class=\"pull-right\" *ngIf=\"trns_buttons.length>0\">\r\n <button type=\"button\" (click)=\"addNewContact(trns_buttons[0])\" class=\"btn btn-success\" style=\"background-color:#3c5998;border-color: #3c5998;\">Add New Contact</button>\r\n </div> \r\n </div>\r\n </div>\r\n <div class=\"content-frame\" style=\"background: #fff;height: calc(100vh - 100px);\">\r\n <div class=\"innerD\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3\">\r\n <div class=\"row\" style=\"margin: 10px 0;\">\r\n \r\n <div class=\"form-group w-100\">\r\n <select class=\"form-control w-100\" name=\"contactType\" [(ngModel)]=\"contactType\" style=\"height: 100%;\">\r\n <option value=\"\">Select ContactType</option>\r\n <option *ngFor=\"let type of contactTypeList\" [ngValue]=\"type.val\">{{type.print}}</option>\r\n </select>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <div class=\"input-group w-100\">\r\n <!-- <ng-select [items]=\"buyerList\" [searchable]=\"false\" name=\"buyerSugg\" [(ngModel)]=\"buyerSugg\"\r\n bindLabel=\"v\" bindValue=\"k\" placeholder=\"Select Buyer\">\r\n <ng-template ng-header-tmp>\r\n <input style=\"width: 100%; line-height: 24px\" #buyer type=\"text\" (keyup)=\"loadBuyer(buyer.value);\"\r\n [autofocus]=\"testt\" />\r\n </ng-template>\r\n </ng-select> -->\r\n <ng-select style=\"z-index: 5;\" placeholder=\"Select Buyer\" [options]=\"buyerList\"\r\n [(ngModel)]=\"buyer\" name=\"buyer\" (filterInputChanged)=\"loadBuyer($event)\" [allowClear]=\"true\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <div class=\"input-group w-100\">\r\n <ng-select placeholder=\"Select employee\" name=\"empId\"\r\n [options]=\"saleExecutiveList\"\r\n [(ngModel)]=\"empId\" [allowClear]=\"true\">\r\n </ng-select>\r\n <!-- <ng-select [items]=\"saleExecutiveList\" [(ngModel)]=\"empId\" bindLabel=\"v\" name=\"empId\" bindValue=\"k\"\r\n placeholder=\"Select employee\" #buyerFil=\"ngModel\" required>\r\n <ng-template ng-header-tmp>\r\n </ng-template>\r\n </ng-select> -->\r\n </div>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <select class=\"form-control w-100\" name=\"Terms\" [(ngModel)]=\"Terms\" style=\"height: 100%;\">\r\n <option value=\"\">Select Terms</option>\r\n <option *ngFor=\"let term of termsList\" value=\"{{term.terms_idn}}\">{{term.print}}</option>\r\n </select>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <select class=\"form-control w-100\" name=\"currency\" [(ngModel)]=\"currency\" style=\"height: 100%;\">\r\n <option value=\"\">Select currency</option>\r\n <option *ngFor=\"let currency of currencyList\" value=\"{{currency.currency_idn}}\">{{currency.print}}</option>\r\n </select>\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <input class=\"form-control w-100\" placeholder=\"User Name\" type=\"text\" name=\"userName\" [(ngModel)]=\"userName\" />\r\n </div>\r\n <div class=\"form-group w-100\">\r\n <textarea style=\"white-space: pre;\" class=\"form-control\" placeholder=\"NameIdn List\" \r\n [(ngModel)]=\"nameIdnList\" id=\"nameIdnList\" name=\"nameIdnList\" cols=\"38\" rows=\"3\" ></textarea>\r\n </div>\r\n \r\n <div class=\" w-100\" style=\"padding-top: 10px;\">\r\n <button id=\"savebtn\" (click)=\"searchContact()\" type=\"button\" style=\"background-color:#3c5998;border-color: #3c5998\"\r\n class=\"btn btn-success pull-left\">submit</button>\r\n <!-- (click)=\"searchContact(contactType,buyerSugg,empId,Terms,currency,userName)\" -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 custCls\">\r\n <form class=\"form-horizontal\">\r\n <div class=\"row\" *ngIf=\"dataList?.length > 0\">\r\n <div class=\"col-md-1 pull-right\">\r\n <!-- <button type=\"submit\" class=\"btn btn-success\" (click)=\"togtsl();\" style=\"background-color:#3c5998;border-color: #3c5998;margin-top: 7px;margin-bottom: 7px\">tools</button> -->\r\n <!-- <div class=\"tlsdrp\" *ngIf=\"tsl\">\r\n <ul class=\"tlsul\">\r\n <li *ngFor=\"let action of actions\">\r\n <span class=\"{{action?.form_field_icon}} tslico\"></span>{{action?.form_field_title}}</li>\r\n </ul>\r\n </div> -->\r\n <div class=\"dropdown\">\r\n <button type=\"submit\" class=\"btn btn-success\" style=\"background-color:#3c5998;border-color: #3c5998;margin-top: 7px;margin-bottom: 7px\"\r\n data-toggle=\"dropdown\">tools\r\n <span class=\"caret\"></span>\r\n </button>\r\n <ul class=\"dropdown-menu dropdown-menu-right\">\r\n <li *ngFor=\"let tab of tabs\" (click)=\"toolactions(tab);\" style=\"padding: 10px;\">\r\n <span class=\"{{tab?.form_field_icon}} tslico\"></span>{{tab?.form_field_title}}</li>\r\n\r\n <li style=\"padding: 10px;cursor: pointer;\" (click)=\"exportExcel();\">\r\n Excel</li>\r\n \r\n <li style=\"padding: 10px;cursor: pointer;\" (click)=\"UpdateSaleExecutivePop();\">\r\n Update Sales Executive\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-md-6 pull-left\">\r\n <div class=\"form-group\" style=\"padding-top: 10px;\">\r\n <div class=\"col-md-2\">\r\n <label for=\"exampleInputName2\" style=\"padding-top: 5px;\">Search </label>\r\n </div>\r\n\r\n <div class=\"col-md-5\">\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"table-responsive\" style=\"height: calc(100vh - 100px);\" id=\"wrap\">\r\n <table class=\"displayTable\" *ngIf=\"dataList?.length > 0\">\r\n <thead>\r\n <tr class=\"posrel\">\r\n <th>SR No<input type=\"checkbox\" (click)=\"selectAll($event);\"></th>\r\n <th>Action</th>\r\n <th *ngFor=\"let hdr of dataHeader\">{{dataHeaderPrint[hdr]}}</th>\r\n <th>Add.Emails</th>\r\n </tr>\r\n </thead>\r\n <tbody >\r\n <tr *ngFor=\"let data of dataList | ContactTableSrcPipe:searchF; let i = index\">\r\n <!-- | searchPipe:searchF -->\r\n <td (click)=\"selectRow(data.nme_idn)\">{{i + 1}}\r\n\r\n <input type=\"checkbox\" [hidden]=\"true\" id=\"cb_{{data.nme_idn}}\"\r\n (click)=\"checkedRow(data,data.nme_idn)\" value=\"{{data.nme_idn}}\" />\r\n </td>\r\n <td (click)=\"selectRow(data.nme_idn)\">\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 pageDefination.action\">\r\n <a href=\"javascript:void(0)\" (click)=\"userAction(data,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 *ngFor=\"let hdr of dataHeader\" (click)=\"selectRow(data.nme_idn)\">{{data[hdr]}}</td>\r\n <td>{{data['emailIdns']}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter pull-right\">\r\n <div class=\"row\">\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"modelSaleEx\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mailModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog modal-md\" >\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\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=\"mailModalHead\">Update Sale Executive</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"form-group\">\r\n <label class=\"col-md-3 control-label\">Sale Executive\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group input-group-sm w-100\">\r\n <ng-select style=\"z-index: 5;\" placeholder=\"Select Buyer\" [options]=\"EmployeeList\"\r\n [(ngModel)]=\"saleExcute\" name=\"saleExcute\" (filterInputChanged)=\"loadSaleExcutive($event)\" [allowClear]=\"true\">\r\n </ng-select> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <!-- <p> dff {{htmlContent}}</p> -->\r\n <button type=\"button\" (click)=\"UpdateSaleExecutive()\" class=\"btn btn-success\">Update</button>\r\n <button type=\"button\" #slexclosebtn class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n<div class=\"modal\" id=\"modelMail\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mailModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog modal-lg\" style=\"width: 705px\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" [formGroup]=\"myFormmm\" (ngSubmit)=\"SendMail()\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\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=\"mailModalHead\">Send Mail</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n \r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Sender Name\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group input-group-sm w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" formControlName=\"senderName\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">Subject\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" formControlName=\"subject\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">CC\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" formControlName=\"CC\" name=\"CC\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\">BCC\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control posrel\" formControlName=\"BCC\" name=\"BCC\" />\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n\r\n <div class=\"form-group\">\r\n <div class=\"col-md-12\">\r\n <angular-editor [placeholder]=\"'Enter text here...'\" [config]=\"config\" formControlName=\"htmlcontent\"></angular-editor>\r\n <!-- <ejs-richtexteditor id='defaultRTE' [(value)]='value' ></ejs-richtexteditor> -->\r\n\r\n <!-- <ckeditor [(ngModel)]=\"value\" ></ckeditor> -->\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <!-- <p> dff {{htmlContent}}</p> -->\r\n <button type=\"submit\" class=\"btn btn-success\">Send</button>\r\n <button type=\"button\" #mailclosebtn class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"modelNotification\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"true\">\r\n <div class=\"modal-dialog modal-lg\" style=\"width: 705px\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" [formGroup]=\"myNotification\" (ngSubmit)=\"AddNotification()\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\">\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=\"mailModalHead\">Add Notification</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n \r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\"> <span style=\"color:red\">*</span> Date\r\n </label>\r\n <div class=\"col-md-4\">\r\n <div class=\"input-group input-group-sm w-100\">\r\n <input\r\n formControlName=\"logdate\"\r\n onfocus=\"(this.type='date')\"\r\n onblur=\"(this.type='text')\"\r\n class=\"form-control\"\r\n placeholder=\"dd/mm/yyyy\" \r\n />\r\n\r\n <span class=\"text-danger\"\r\n *ngIf=\"notificationControl.logdate.invalid && (notificationControl.logdate.dirty || notificationControl.logdate.touched) && notificationControl.logdate.errors.required\">\r\n Date is required\r\n </span>\r\n </div>\r\n </div>\r\n <label class=\"col-md-2 control-label\"> <span style=\"color:red\">*</span>Time(HH:MM)\r\n </label>\r\n <div class=\"col-md-1\" style=\"padding:2px;margin:0px;\">\r\n \r\n <select formControlName=\"hh\" style=\"padding:5px 5px\" class=\"form-control\" >\r\n \r\n <option *ngFor=\"let mmt of mmtimeList\" [ngValue]=\"mmt\">{{mmt}}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-1\" style=\"padding:2px;margin:0px;\">\r\n \r\n <select formControlName=\"mm\" style=\"padding:5px 5px\" class=\"form-control\" >\r\n \r\n <option *ngFor=\"let hht of hhtimeList\" [ngValue]=\"hht\">{{hht}}</option>\r\n </select>\r\n </div>\r\n \r\n \r\n \r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\"> <span style=\"color:red\">*</span>Module\r\n </label>\r\n <div class=\"col-md-10\">\r\n <div class=\"input-group w-100\">\r\n <select formControlName=\"mdl\" class=\"form-control\" >\r\n \r\n <option *ngFor=\"let notificate of notificationMdlList\" [ngValue]=\"notificate.k\">{{notificate['v']}}</option>\r\n \r\n \r\n </select>\r\n <span class=\"text-danger\"\r\n *ngIf=\"notificationControl.mdl.invalid && (notificationControl.mdl.dirty || notificationControl.mdl.touched) && notificationControl.mdl.errors.required\">\r\n Module is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n \r\n\r\n <div class=\"form-group\">\r\n <label class=\"col-md-2 control-label\"><span style=\"color:red\">*</span>Massage</label>\r\n <div class=\"col-md-10\">\r\n <angular-editor [placeholder]=\"\" [config]=\"noticonfig\" formControlName=\"massage\"></angular-editor>\r\n <span class=\"text-danger\"\r\n *ngIf=\"notificationControl.massage.invalid && (notificationControl.massage.dirty || notificationControl.massage.touched) && notificationControl.massage.errors.required\">\r\n Notification massage is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <!-- <p> dff {{htmlContent}}</p> -->\r\n <button type=\"submit\" class=\"btn btn-success\">Add</button>\r\n <button type=\"button\" #notificlosebtn class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n<button id=\"btnNotification\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#modelNotification\"></button>\r\n\r\n\r\n<button id=\"btnsaleex\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#modelSaleEx\"></button>\r\n\r\n<button id=\"btnsendMail\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#modelMail\"></button>\r\n", styles: [".selectedRow{background-color:#3c59983b!important;cursor:pointer}.notselectedRow{background-color:#fff}:host ::ng-deep .ck-editor__editable_inline{min-height:300px}\n"] }]
|
|
666
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ToastrService }, { type: i3.ContactServiceService }, { type: i4.StockServiceService }, { type: i5.NgxSpinnerService }, { type: i6.CommanServiceService }, { type: i7.FormBuilder }]; }, propDecorators: { submitbtn: [{
|
|
667
|
+
type: ViewChild,
|
|
668
|
+
args: ['submitBtn']
|
|
669
|
+
}], slexclosebtn: [{
|
|
670
|
+
type: ViewChild,
|
|
671
|
+
args: ['slexclosebtn']
|
|
672
|
+
}], mailclosebtn: [{
|
|
673
|
+
type: ViewChild,
|
|
674
|
+
args: ['mailclosebtn']
|
|
675
|
+
}], notificlosebtn: [{
|
|
676
|
+
type: ViewChild,
|
|
677
|
+
args: ['notificlosebtn']
|
|
678
|
+
}] } });
|
|
679
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXpsaWIvc3JjL2xpYi9jb250YWN0LXNlYXJjaC9jb250YWN0LXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lemxpYi9zcmMvbGliL2NvbnRhY3Qtc2VhcmNoL2NvbnRhY3Qtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLFNBQVMsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWhGLDJKQUEySjtBQUMzSixxRUFBcUU7QUFDckUsT0FBTyxFQUFhLFdBQVcsRUFBQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVNuRSxNQUFNLE9BQU8sc0JBQXNCO0lBS2pDLFlBQ1MsTUFBYyxFQUNiLEtBQXFCLEVBQ3JCLE1BQXFCLEVBQ3JCLEVBQXlCLEVBQ3pCLEVBQXVCLEVBQ3ZCLGNBQWlDLEVBQ2pDLEtBQTJCLEVBQzNCLEVBQWU7UUFQaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsT0FBRSxHQUFGLEVBQUUsQ0FBdUI7UUFDekIsT0FBRSxHQUFGLEVBQUUsQ0FBcUI7UUFDdkIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLFVBQUssR0FBTCxLQUFLLENBQXNCO1FBQzNCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFRcEIsV0FBTSxHQUFHO1lBQ2QsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSTtZQUNoQixNQUFNLEVBQUUsT0FBTztZQUNmLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFdBQVcsRUFBRSxvQkFBb0I7WUFDakMsU0FBUyxFQUFFLElBQUk7WUFDZix5QkFBeUIsRUFBRSxHQUFHO1lBQzlCLGVBQWUsRUFBRSxPQUFPO1NBRXpCLENBQUM7UUFFSyxlQUFVLEdBQUc7WUFDbEIsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSTtZQUNoQixNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFdBQVcsRUFBRSxvQkFBb0I7WUFDakMsU0FBUyxFQUFFLElBQUk7WUFDZix5QkFBeUIsRUFBRSxFQUFFO1lBQzdCLGVBQWUsRUFBRSxFQUFFO1lBQ25CLG9CQUFvQixFQUFFO2dCQUNwQjtvQkFDRSxNQUFNO29CQUNOLFFBQVE7b0JBQ1IsV0FBVztvQkFDWCxlQUFlO29CQUNmLFdBQVc7b0JBQ1gsYUFBYTtvQkFDYixhQUFhO29CQUNiLGVBQWU7b0JBQ2YsY0FBYztvQkFDZCxhQUFhO29CQUNiLFFBQVE7b0JBQ1IsU0FBUztvQkFDVCxxQkFBcUI7b0JBQ3JCLG1CQUFtQjtvQkFDbkIsU0FBUztvQkFDVCxVQUFVO2lCQUNYO2dCQUNEO29CQUNFLFVBQVU7b0JBQ1YsV0FBVztvQkFDWCxpQkFBaUI7b0JBQ2pCLGVBQWU7b0JBQ2YsYUFBYTtvQkFDYixhQUFhO29CQUNiLHNCQUFzQjtvQkFDdEIsY0FBYztvQkFDZCxrQkFBa0I7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDO1FBS0EsUUFBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFVakIsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDbEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUdiLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBRWQsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQVdkLHdCQUFtQixHQUFDLEVBQUUsQ0FBQztRQUV2QixlQUFVLEdBQUMsRUFBRSxDQUFDO1FBQ2QsZUFBVSxHQUFDLEVBQUUsQ0FBQztRQW1FZCxpQkFBWSxHQUFDLEVBQUUsQ0FBQztRQTRjaEIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBeG5CbEIsQ0FBQztJQXdHTCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBQyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlCQUF5QjtRQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzFFLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7Z0JBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDMUMsd0NBQXdDO2dCQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDZixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUUsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFJLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFFLEVBQUUsQ0FBQTtnQkFDN0MsSUFBSSxDQUFDLFlBQVksR0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksSUFBRSxFQUFFLENBQUM7YUFDNUQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEdBQUc7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUlELFNBQVMsQ0FBQyxVQUFVO1FBRWxCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUM7UUFDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3ZFLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7Z0JBQ2hDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMvQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUNoQixDQUFDLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyQztRQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELGdCQUFnQixDQUFDLFVBQVU7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDdkUsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtnQkFDaEMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xELEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDZixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7aUJBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDNUI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLFNBQVM7UUFDZixJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLEVBQUU7WUFBRSxPQUFNO1FBQ3JELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLHVCQUF1QixDQUFDO1FBQ2hELElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDMUUsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQzthQUNuQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckM7UUFDSCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU07UUFFdEIsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNKLDZDQUE2QztJQUM5QyxDQUFDO0lBRUQsYUFBYTtRQUNYLFFBQVEsQ0FBQTtRQUNSLHNCQUFzQjtRQUN0QixpQ0FBaUM7UUFDakMsOERBQThEO1FBQzlELGdFQUFnRTtRQUNoRSx5QkFBeUI7UUFDekIsMERBQTBEO1FBQzFELDJDQUEyQztRQUMzQyw0QkFBNEI7UUFFNUIsK0JBQStCO1FBQy9CLDhCQUE4QjtRQUM5QiwrQkFBK0I7UUFDL0Isa0JBQWtCO1FBQ2xCLHlCQUF5QjtRQUN6QiwyQkFBMkI7UUFDM0IscUJBQXFCO1FBRXJCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFM0IsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRTtZQUM5RSxZQUFZLElBQUksV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUNsQyxhQUFhLElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNsQyxPQUFPLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNyQixPQUFPLElBQUksVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUM1QixTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDakMsV0FBVyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDMUI7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksU0FBUyxFQUFFO1lBQ3ZGLFlBQVksSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQzlCLGFBQWEsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQzdCLE9BQU8sSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ3ZCLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFFLEdBQUcsQ0FBQztZQUNuQyxXQUFXLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUMxQjtRQUVELElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQUU7WUFDckUsWUFBWSxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUM7WUFDOUIsYUFBYSxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDakMsT0FBTyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDckIsT0FBTyxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDM0IsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQzlCLFdBQVcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRTtZQUNyRSxZQUFZLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUM5QixhQUFhLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUNqQyxPQUFPLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNyQixPQUFPLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUMzQixTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDOUIsV0FBVyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDMUI7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxFQUFFO1lBQ3JFLFlBQVksSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQ3BDLGFBQWEsSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ25DLE9BQU8sSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQzdCLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUM5QixXQUFXLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztTQUMxQjtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUU7WUFDOUUsWUFBWSxJQUFJLGFBQWEsR0FBRyxHQUFHLENBQUM7WUFDcEMsYUFBYSxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUM7WUFDdEMsT0FBTyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDckIsT0FBTyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUM7WUFDaEMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ2pDLFdBQVcsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQzFCO1FBSUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLFVBQVU7UUFDN0QsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxRQUFRO1FBQzdELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsTUFBTTtRQUMvQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLFFBQVE7UUFDakQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7UUFDaEYsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxNQUFNO1FBQ3ZELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDdkYsSUFBSSxDQUFDLFdBQVcsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzRCxJQUFJLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXBDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDMUUsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtnQkFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFDLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBQyxFQUFFLENBQUM7Z0JBQ3BCLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO29CQUN6RCxJQUFJLFNBQVMsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3hELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO2FBRUo7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3JDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNqQixRQUFRLENBQUE7UUFDUixJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksU0FBUyxFQUFFO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFHO1FBRVgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsUUFBUSxHQUFHLENBQUMsVUFBVSxFQUFFO1lBRXRCLEtBQUssaUJBQWlCLENBQUMsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLE1BQU07YUFDUDtZQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDOUIsTUFBTTthQUNQO1NBQ0Y7SUFHTCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUM7WUFDM0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1lBQzNDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzNFLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7b0JBQ2hDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUUsRUFBRSxDQUFDO29CQUNqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixJQUFFLEVBQUUsQ0FBQztvQkFDMUQsUUFBUSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3JDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUdIO2FBQUk7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBRTdDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQy9CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQ3pDLElBQUksU0FBUyxHQUFDLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUEsRUFBRTtnQkFDaEMsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBRSxFQUFFLENBQUM7Z0JBQ2xDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUE7WUFDRixRQUFRLENBQUE7WUFDUixJQUFJLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUMsR0FBRyxHQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBQyxHQUFHLEdBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFDLEtBQUssQ0FBQztZQUNqRixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUUsVUFBVSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUU7WUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztZQUMzQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMzRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFO29CQUNoQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxJQUFFLEVBQUUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUMsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztpQkFDekQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNyQztZQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFJO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztTQUV4RDtJQUVELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDO1lBQzVCLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDL0M7YUFBSTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FFN0M7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDO1lBQzdCLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDNUM7YUFBSTtZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FFN0M7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksVUFBVSxHQUFDLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUEsRUFBRTtZQUNoQyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFFLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsVUFBVSxJQUFFLEVBQUUsQ0FBQztRQUNwQyxJQUFHLElBQUksQ0FBQyxVQUFVLElBQUUsRUFBRSxFQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFDLFVBQVUsQ0FBQztZQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLHFCQUFxQixDQUFDO1lBQzlDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQzFFLElBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUMsRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDMUI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUNyQztZQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFJO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUVwRDtJQUVELENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDdkMsUUFBUSxDQUFBO1FBQ0osSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksT0FBTyxHQUFDLEVBQUUsQ0FBQztRQUNmLElBQUksV0FBVyxHQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBRSxFQUFFLENBQUM7UUFDN0MsSUFBSSxPQUFPLEdBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFFLEVBQUUsQ0FBQztRQUNwQyxJQUFJLFVBQVUsR0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUUsRUFBRSxDQUFDO1FBQzFDLElBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLElBQUUsQ0FBQyxFQUFDO1lBQzVCLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDaEIsT0FBTyxHQUFDLGlDQUFpQyxDQUFDO1NBRTNDO1FBQ0QsSUFBRyxPQUFPLElBQUUsRUFBRSxFQUFDO1lBQ2IsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNoQixPQUFPLEdBQUMsd0JBQXdCLENBQUM7U0FFbEM7UUFDRCxJQUFHLFdBQVcsSUFBRSxFQUFFLEVBQUM7WUFDakIsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNoQixPQUFPLEdBQUMsMEJBQTBCLENBQUM7U0FFcEM7UUFFRCxJQUFHLFVBQVUsSUFBRSxFQUFFLEVBQUM7WUFDaEIsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNoQixPQUFPLEdBQUMsNEJBQTRCLENBQUM7U0FFdEM7UUFFRCxJQUFHLE9BQU8sRUFBQztZQUNYLElBQUksS0FBSyxHQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBRyxFQUFFLENBQUM7WUFDL0IsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFFLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEVBQUUsR0FBQyxFQUFFLENBQUM7WUFDVixJQUFJLEdBQUcsR0FBQyxFQUFFLENBQUM7WUFFWCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRzNCLElBQUcsS0FBSyxJQUFFLEVBQUUsRUFBQztnQkFDZCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxjQUFjLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RELEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsSUFBRyxNQUFNLElBQUUsRUFBRSxFQUFDO2dCQUNmLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLGNBQWMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDckQsR0FBRyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDaEM7WUFDRCxJQUFJLFlBQVksR0FBQyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFBLEVBQUU7Z0JBQ2hDLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUUsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLE9BQU8sR0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUM1QixJQUFJLE9BQU8sR0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUM1QixJQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFDO29CQUN0QixZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUNoQixRQUFRLEVBQUMsU0FBUzt3QkFDbEIsU0FBUyxFQUFDLE9BQU87d0JBQ2pCLFNBQVMsRUFBQyxPQUFPO3FCQUNsQixDQUFDLENBQUE7aUJBQ0Q7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUNGLFFBQVEsQ0FBQTtZQUVSLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7WUFDdEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFDLFVBQVUsQ0FBQztZQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUMsT0FBTyxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBQyxZQUFZLENBQUM7WUFDbkMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUMsR0FBRyxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBQyxXQUFXLENBQUM7WUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDdkMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFDMUUsSUFBRyxRQUFRLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzt3QkFDNUIsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7d0JBQ3JDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO3dCQUNsQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3hDLEVBQUUsRUFBRSxFQUFFO3dCQUNOLEdBQUcsRUFBQyxFQUFFO3FCQUNSLENBQUMsQ0FBQztvQkFDSixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUMxQjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3JDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQUk7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVCO0lBRUQsQ0FBQztJQUdELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPO1FBQ2YsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUNELFNBQVMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFBLEVBQUU7WUFDekIsUUFBUSxDQUFBO1lBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUE7SUFFTixDQUFDO0lBS0QsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPO1FBQ3RCLFFBQVEsQ0FBQTtRQUNSLElBQUssUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUMsT0FBTyxDQUFTLENBQUMsT0FBTyxJQUFJLEtBQUssRUFBRTtZQUNwRSxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBLE9BQU87WUFDNUQsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRSxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDbkM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBLE9BQU87WUFDNUQsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7UUFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU1QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFFNUMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLFdBQVcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUM5QixjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQy9CLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDNUIsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDckMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbEMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLEVBQUUsRUFBRSxFQUFFO1lBQ04sR0FBRyxFQUFDLEVBQUU7U0FDVCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxHQUFDLEVBQUUsQ0FBQztRQUNuQixLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsRUFBRSxFQUFDLENBQUMsRUFBRSxFQUFDO1lBQ25CLElBQUcsQ0FBQyxHQUFDLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDOztnQkFFNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBQyxFQUFFLENBQUM7UUFDbkIsS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBQztZQUNuQixJQUFHLENBQUMsR0FBQyxFQUFFO2dCQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBQyxDQUFDLENBQUMsQ0FBQzs7Z0JBRTVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QjtRQUVDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBQ0QscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDbEMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbEMsT0FBTyxFQUFFLEtBQUs7WUFDZCxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM5QixHQUFHLEVBQUMsSUFBSTtZQUNSLEVBQUUsRUFBQyxJQUFJO1lBQ1AsRUFBRSxFQUFDLElBQUk7WUFDUCxPQUFPLEVBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxNQUFNLEVBQUMsR0FBRztTQUNULENBQUMsQ0FBQztJQUNQLENBQUM7O3lKQS9zQlUsc0JBQXNCOzZJQUF0QixzQkFBc0IsbWNDckJuQyw2MG5CQTBZQTsyRkRyWGEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQjt5VEFvQk4sU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNLLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0ksY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBQaXBlLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBIZWFkZXJzICB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBDb29raWUgfSBmcm9tICduZzItY29va2llcy9uZzItY29va2llcyc7XHJcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XHJcbmltcG9ydCB7IENvbnRhY3RTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uL2NvbnRhY3Qtc2VydmljZS9jb250YWN0LXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b2NrU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9zdG9jay1zZXJ2aWNlL3N0b2NrLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1hblNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuLy9pbXBvcnQgeyBUb29sYmFyU2VydmljZSwgTGlua1NlcnZpY2UsIEltYWdlU2VydmljZSwgSHRtbEVkaXRvclNlcnZpY2UsIFRhYmxlU2VydmljZSwgUXVpY2tUb29sYmFyU2VydmljZSB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXJpY2h0ZXh0ZWRpdG9yJztcclxuLy9pbXBvcnQgKiBhcyBDbGFzc2ljRWRpdG9yIGZyb20gJ0Bja2VkaXRvci9ja2VkaXRvcjUtYnVpbGQtY2xhc3NpYyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtY29udGFjdC1zZWFyY2gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250YWN0LXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29udGFjdC1zZWFyY2guY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250YWN0U2VhcmNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjczogQ29udGFjdFNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzczogU3RvY2tTZXJ2aWNlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3Bpbm5lclNlcnZpY2U6IE5neFNwaW5uZXJTZXJ2aWNlICxcclxuICAgIHByaXZhdGUgY21uY3M6IENvbW1hblNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXJcclxuICApIHsgfVxyXG5cclxuICBAVmlld0NoaWxkKCdzdWJtaXRCdG4nKSBzdWJtaXRidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2xleGNsb3NlYnRuJykgc2xleGNsb3NlYnRuOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ21haWxjbG9zZWJ0bicpIG1haWxjbG9zZWJ0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdub3RpZmljbG9zZWJ0bicpIG5vdGlmaWNsb3NlYnRuOiBFbGVtZW50UmVmO1xyXG5cclxucHVibGljIGNvbmZpZyA9IHtcclxuICBlZGl0YWJsZTogdHJ1ZSxcclxuICBzcGVsbGNoZWNrOiB0cnVlLFxyXG4gIGhlaWdodDogJzE1cmVtJyxcclxuICBtaW5IZWlnaHQ6ICc1cmVtJyxcclxuICBwbGFjZWhvbGRlcjogJ0VudGVyIHRleHQgaGVyZS4uLicsXHJcbiAgdHJhbnNsYXRlOiAnbm8nLFxyXG4gIGRlZmF1bHRQYXJhZ3JhcGhTZXBhcmF0b3I6ICdwJyxcclxuICBkZWZhdWx0Rm9udE5hbWU6ICdBcmlhbCdcclxuICBcclxufTtcclxuXHJcbnB1YmxpYyBub3RpY29uZmlnID0ge1xyXG4gIGVkaXRhYmxlOiB0cnVlLFxyXG4gIHNwZWxsY2hlY2s6IHRydWUsXHJcbiAgaGVpZ2h0OiAnNXJlbScsXHJcbiAgbWluSGVpZ2h0OiAnM3JlbScsXHJcbiAgcGxhY2Vob2xkZXI6ICdFbnRlciB0ZXh0IGhlcmUuLi4nLFxyXG4gIHRyYW5zbGF0ZTogJ25vJyxcclxuICBkZWZhdWx0UGFyYWdyYXBoU2VwYXJhdG9yOiAnJyxcclxuICBkZWZhdWx0Rm9udE5hbWU6ICcnLFxyXG4gIHRvb2xiYXJIaWRkZW5CdXR0b25zOiBbXHJcbiAgICBbXHJcbiAgICAgICdib2xkJyxcclxuICAgICAgJ2l0YWxpYycsXHJcbiAgICAgICd1bmRlcmxpbmUnLFxyXG4gICAgICAnc3RyaWtlVGhyb3VnaCcsXHJcbiAgICAgICdzdWJzY3JpcHQnLFxyXG4gICAgICAnc3VwZXJzY3JpcHQnLFxyXG4gICAgICAnanVzdGlmeUxlZnQnLFxyXG4gICAgICAnanVzdGlmeUNlbnRlcicsXHJcbiAgICAgICdqdXN0aWZ5UmlnaHQnLFxyXG4gICAgICAnanVzdGlmeUZ1bGwnLFxyXG4gICAgICAnaW5kZW50JyxcclxuICAgICAgJ291dGRlbnQnLFxyXG4gICAgICAnaW5zZXJ0VW5vcmRlcmVkTGlzdCcsXHJcbiAgICAgICdpbnNlcnRPcmRlcmVkTGlzdCcsXHJcbiAgICAgICdoZWFkaW5nJyxcclxuICAgICAgJ2ZvbnROYW1lJ1xyXG4gICAgXSxcclxuICAgIFtcclxuICAgICAgJ2ZvbnRTaXplJyxcclxuICAgICAgJ3RleHRDb2xvcicsXHJcbiAgICAgICdiYWNrZ3JvdW5kQ29sb3InLFxyXG4gICAgICAnY3VzdG9tQ2xhc3NlcycsXHJcbiAgICAgICdpbnNlcnRJbWFnZScsXHJcbiAgICAgICdpbnNlcnRWaWRlbycsXHJcbiAgICAgICdpbnNlcnRIb3Jpem9udGFsUnVsZScsXHJcbiAgICAgICdyZW1vdmVGb3JtYXQnLFxyXG4gICAgICAndG9nZ2xlRWRpdG9yTW9kZSdcclxuICAgIF1cclxuICBdXHJcbn07XHJcblxyXG5cclxuICBjVXJsO1xyXG4gIGhlYWRlcjtcclxuICBjRHQgPSBuZXcgRGF0ZSgpO1xyXG4gIGVkaXRvckNvbmZpZztcclxuXHJcbiAgY29udGFjdFR5cGVMaXN0O1xyXG4gIGN1cnJlbmN5TGlzdDtcclxuICB0ZXJtc0xpc3Q7XHJcbiAgcGFnZURlZmluYXRpb247XHJcbiAgaHRtbGNvbnRlbnQ7XHJcbiAgc2VhcmNoRjtcclxuXHJcbiAgZW1wbG95ZWVMaXN0ID0gW107XHJcbiAgY291bnRyeUxpc3QgPSBbXTtcclxuICBidXllckxpc3QgPSBbXTtcclxuICBzYWxlRXhlY3V0aXZlTGlzdCA9IFtdO1xyXG4gIGNpdHlMaXN0ID0gW107XHJcbiAgY29udGFjdFR5cGUgPSAnJztcclxuICBhY3Rpb25zID0gW107XHJcbiAgYnV5ZXJTdWdnO1xyXG4gIGVtcElkO1xyXG4gIFRlcm1zID0gJyc7XHJcbiAgY3VycmVuY3kgPSAnJztcclxuICB1c2VyTmFtZTtcclxuICBDaXR5ID0gJyc7XHJcbiAgdHJuc19idXR0b25zO1xyXG4gIGRhdGFIZWFkZXIgPSBbXTtcclxuICBkYXRhTGlzdCA9IFtdO1xyXG4gIGRhdGFIZWFkZXJQcmludDtcclxuICBidXR0b25zO1xyXG4gIHRhYnM7XHJcbiAgc3RhdHVzO1xyXG5cclxuICBNYWlsTXNnO1xyXG4gIHNhbGVFeGN1dGU7XHJcbiAgbmFtZUlkbkxpc3Q7XHJcbiAgbXlGb3JtbW06IEZvcm1Hcm91cDtcclxuICBteU5vdGlmaWNhdGlvbjogRm9ybUdyb3VwO1xyXG4gIG5vdGlmaWNhdGlvbk1kbExpc3Q9W107XHJcbiAgYnV5ZXI7XHJcbiAgbW10aW1lTGlzdD1bXTtcclxuICBoaHRpbWVMaXN0PVtdO1xyXG4gIGxvYWRQcm9jZXNzKCkge1xyXG4gICAgdGhpcy5zdGF0dXM9XCIwXCI7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybSddOyAvLydjb250YWN0U2VhcmNoRm9ybSc7Ly87XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZCc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsICdjb250YWN0L2xvYWRDb250YWN0JykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLmNvbnRhY3RUeXBlTGlzdCA9IHJlc3BvbnNlLmNvbnRhY3RUeXBlTGlzdDtcclxuICAgICAgICB0aGlzLmN1cnJlbmN5TGlzdCA9IHJlc3BvbnNlLmN1cnJlbmN5TGlzdDtcclxuICAgICAgICB0aGlzLnRlcm1zTGlzdCA9IHJlc3BvbnNlLnRlcm1zTGlzdDtcclxuICAgICAgICB0aGlzLmNvdW50cnlMaXN0ID0gcmVzcG9uc2UuY291bnRyeUxpc3Q7XHJcbiAgICAgIC8vICB0aGlzLmJ1eWVyTGlzdCA9IHJlc3BvbnNlLmJ1eWVyTGlzdDtcclxuICAgICAgICB0aGlzLnNhbGVFeGVjdXRpdmVMaXN0ID0gcmVzcG9uc2Uuc2FsZUV4ZWN1dGl2ZUxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHJlc3BvbnNlLnBhZ2VEZWZpbmF0aW9uLmFjdGlvbnx8W107XHJcbiAgICAgICAgdGhpcy50YWJzICA9IHJlc3BvbnNlLnBhZ2VEZWZpbmF0aW9uLnRhYnN8fFtdXHJcbiAgICAgICAgdGhpcy50cm5zX2J1dHRvbnM9cmVzcG9uc2UucGFnZURlZmluYXRpb24udHJuc19idXR0b25zfHxbXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgYWRkTmV3Q29udGFjdChkdGwpe1xyXG4gICAgY29uc29sZS5sb2coZHRsKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtkdGwubG92X3FyeV0pO1xyXG4gIH1cclxuXHJcbiBcclxuXHJcbiAgbG9hZEJ1eWVyKHNlYXJjaFRlcm0pIHtcclxuICAgXHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnbGlrZVN0ciddID0gc2VhcmNoVGVybTtcclxuICAgIHJlcU9ialsndHlwJ10gPSAnQWxsJztcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkQnV5ZXInO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ21hcmtldGluZy9zZWFyY2gnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICB0aGlzLmJ1eWVyTGlzdCA9IHJlc3VsdC5idXllckxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgRW1wbG95ZWVMaXN0PVtdO1xyXG4gIGxvYWRTYWxlRXhjdXRpdmUoc2VhcmNoVGVybSkge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2xpa2VTdHInXSA9IHNlYXJjaFRlcm07XHJcbiAgICByZXFPYmpbJ3R5cCddID0gJ2VtcGxveWVlJztcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkQnV5ZXInO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ21hcmtldGluZy9zZWFyY2gnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICB0aGlzLkVtcGxveWVlTGlzdCA9IHJlc3VsdC5idXllckxpc3QubWFwKG9wdGlvbiA9PiAoe1xyXG4gICAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgICAgbGFiZWw6IG9wdGlvbi52XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2l0eShjb3Vucnl0SWQpIHtcclxuICAgIGlmIChjb3Vucnl0SWQgPT0gdW5kZWZpbmVkIHx8IGNvdW5yeXRJZCA9PSAnJykgcmV0dXJuXHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm0nXTsgXHJcbiAgICByZXFPYmpbJ2NvdW50cnlJZG4nXSA9IGNvdW5yeXRJZDtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdnZXRDaXR5QmFzZWRPbkNvdW50cnknO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ2NvbnRhY3QvbG9hZENvbnRhY3QnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5jaXR5TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuQ2l0eSA9ICcnO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLmNpdHlMaXN0ID0gcmVzcG9uc2UuY2l0eUxpc3Q7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdChmb3JtVmFsLCBzdWJCdG4pIHtcclxuICAgIFxyXG4gICAgdmFyIHQgPSBPYmplY3Qua2V5cyhmb3JtVmFsLmZvcm0uY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybVZhbC5mb3JtLmdldChmaWVsZCk7XHJcbiAgICB9KTtcclxuICAgLy8gdGhpcy5zZWFyY2hDb250YWN0KGZvcm1WYWwudmFsdWUsIHN1YkJ0bik7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hDb250YWN0KCkge1xyXG4gICAgZGVidWdnZXJcclxuICAgIC8vY29uc29sZS5sb2coZnJtRmxkKTtcclxuICAgIC8vIFwiZm9ybU5tZVwiOlwiY29udGFjdFNlYXJjaEZvcm1cIixcclxuICAgIC8vIFwidGFibGVOYW1lVmFyXCI6XCJubWVfbSNubWVfbSNubWVfbSNidXllcl90ZXJtcyNidXllcl90ZXJtc1wiLFxyXG4gICAgLy8gXCJ0YWJsZUZpZWxkVmFyXCI6XCJlbXBfaWRuI25tZV9pZG4jdHlwI2N1cnJlbmN5X2lkbiN0ZXJtc19pZG5cIixcclxuICAgIC8vIFwidHlwZVZhclwiOlwibiNuI24jbiNuXCIsXHJcbiAgICAvLyBcImF0dHJWYXJcIjpcImVtcF9pZG4jbm1lX2lkbiN0eXAjY3VycmVuY3lfaWRuI3Rlcm1zX2lkblwiLFxyXG4gICAgLy8gXCJ2YWx1ZXNWYXJcIjpcIjI3NTg4IzI4MTczI2J1eWVyIzIwNiMyNDZcIixcclxuICAgIC8vIFwiZGF0YVR5cGVWYXJcIjpcIm4jbiNjI24jblwiXHJcblxyXG4gICAgLy8qKioqKmZvciB1c2VybmFtZSoqKioqKioqIC8vL1xyXG4gICAgLy8gXCJ0YWJsZU5hbWVWYXJcIjpcImFwcGxfdXNlclwiLFxyXG4gICAgLy8gIFwidGFibGVGaWVsZFZhclwiOlwidXNlcm5hbWVcIixcclxuICAgIC8vICBcInR5cGVWYXJcIjpcIm5cIixcclxuICAgIC8vICBcImF0dHJWYXJcIjpcInVzZXJuYW1lXCIsXHJcbiAgICAvLyAgXCJ2YWx1ZXNWYXJcIjpcIm5pbGFtd2ViXCIsXHJcbiAgICAvLyAgXCJkYXRhVHlwZVZhclwiOlwiY1wiXHJcblxyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcblxyXG4gICAgbGV0IHRhYmxlTmFtZVZhciA9ICcnO1xyXG4gICAgbGV0IHRhYmxlRmllbGRWYXIgPSAnJztcclxuICAgIGxldCB0eXBlVmFyID0gJyc7XHJcbiAgICBsZXQgYXR0clZhciA9ICcnO1xyXG4gICAgbGV0IHZhbHVlc1ZhciA9ICcnO1xyXG4gICAgbGV0IGRhdGFUeXBlVmFyID0gJyc7XHJcbiAgICBpZiAodGhpcy51c2VyTmFtZSAhPSBudWxsICYmIHRoaXMudXNlck5hbWUgIT0gXCJcIiAmJiB0aGlzLnVzZXJOYW1lICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0YWJsZU5hbWVWYXIgKz0gJ2FwcGxfdXNlcicgKyAnIyc7XHJcbiAgICAgIHRhYmxlRmllbGRWYXIgKz0gJ3VzZXJuYW1lJyArICcjJztcclxuICAgICAgdHlwZVZhciArPSAnbicgKyAnIyc7XHJcbiAgICAgIGF0dHJWYXIgKz0gJ3VzZXJuYW1lJyArICcjJztcclxuICAgICAgdmFsdWVzVmFyICs9IHRoaXMudXNlck5hbWUgKyAnIyc7XHJcbiAgICAgIGRhdGFUeXBlVmFyICs9ICdjJyArICcjJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb250YWN0VHlwZSAhPSBudWxsICYmIHRoaXMuY29udGFjdFR5cGUgIT0gXCJcIiAmJiB0aGlzLmNvbnRhY3RUeXBlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0YWJsZU5hbWVWYXIgKz0gJ25tZV9tJyArICcjJztcclxuICAgICAgdGFibGVGaWVsZFZhciArPSAndHlwJyArICcjJztcclxuICAgICAgdHlwZVZhciArPSAnbicgKyAnIyc7XHJcbiAgICAgIGF0dHJWYXIgKz0gJ3R5cCcgKyAnIyc7XHJcbiAgICAgIHZhbHVlc1ZhciArPSB0aGlzLmNvbnRhY3RUeXBlKyAnIyc7XHJcbiAgICAgIGRhdGFUeXBlVmFyICs9ICdjJyArICcjJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5idXllciAhPSBudWxsICYmIHRoaXMuYnV5ZXIgIT0gXCJcIiAmJiB0aGlzLmJ1eWVyICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0YWJsZU5hbWVWYXIgKz0gJ25tZV9tJyArICcjJztcclxuICAgICAgdGFibGVGaWVsZFZhciArPSAnbm1lX2lkbicgKyAnIyc7XHJcbiAgICAgIHR5cGVWYXIgKz0gJ24nICsgJyMnO1xyXG4gICAgICBhdHRyVmFyICs9ICdubWVfaWRuJyArICcjJztcclxuICAgICAgdmFsdWVzVmFyICs9IHRoaXMuYnV5ZXIgKyAnIyc7XHJcbiAgICAgIGRhdGFUeXBlVmFyICs9ICduJyArICcjJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVtcElkICE9IG51bGwgJiYgdGhpcy5lbXBJZCAhPSBcIlwiICYmIHRoaXMuZW1wSWQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRhYmxlTmFtZVZhciArPSAnbm1lX20nICsgJyMnO1xyXG4gICAgICB0YWJsZUZpZWxkVmFyICs9ICdlbXBfaWRuJyArICcjJztcclxuICAgICAgdHlwZVZhciArPSAnbicgKyAnIyc7XHJcbiAgICAgIGF0dHJWYXIgKz0gJ2VtcF9pZG4nICsgJyMnO1xyXG4gICAgICB2YWx1ZXNWYXIgKz0gdGhpcy5lbXBJZCArICcjJztcclxuICAgICAgZGF0YVR5cGVWYXIgKz0gJ24nICsgJyMnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlRlcm1zICE9IG51bGwgJiYgdGhpcy5UZXJtcyAhPSBcIlwiICYmIHRoaXMuVGVybXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRhYmxlTmFtZVZhciArPSAnYnV5ZXJfdGVybXMnICsgJyMnO1xyXG4gICAgICB0YWJsZUZpZWxkVmFyICs9ICd0ZXJtc19pZG4nICsgJyMnO1xyXG4gICAgICB0eXBlVmFyICs9ICduJyArICcjJztcclxuICAgICAgYXR0clZhciArPSAndGVybXNfaWRuJyArICcjJztcclxuICAgICAgdmFsdWVzVmFyICs9IHRoaXMuVGVybXMgKyAnIyc7XHJcbiAgICAgIGRhdGFUeXBlVmFyICs9ICduJyArICcjJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdXJyZW5jeSAhPSBudWxsICYmIHRoaXMuY3VycmVuY3kgIT0gXCJcIiAmJiB0aGlzLmN1cnJlbmN5ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0YWJsZU5hbWVWYXIgKz0gJ2J1eWVyX3Rlcm1zJyArICcjJztcclxuICAgICAgdGFibGVGaWVsZFZhciArPSAnY3VycmVuY3lfaWRuJyArICcjJztcclxuICAgICAgdHlwZVZhciArPSAnbicgKyAnIyc7XHJcbiAgICAgIGF0dHJWYXIgKz0gJ2N1cnJlbmN5X2lkbicgKyAnIyc7XHJcbiAgICAgIHZhbHVlc1ZhciArPSB0aGlzLmN1cnJlbmN5ICsgJyMnO1xyXG4gICAgICBkYXRhVHlwZVZhciArPSAnbicgKyAnIyc7XHJcbiAgICB9XHJcblxyXG4gICBcclxuXHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm0nXTsgXHJcbiAgICByZXFPYmpbJ3RhYmxlTmFtZVZhciddID0gdGFibGVOYW1lVmFyLnNsaWNlKDAsIC0xKTsvLydubWVfbSc7XHJcbiAgICByZXFPYmpbJ3RhYmxlRmllbGRWYXInXSA9IHRhYmxlRmllbGRWYXIuc2xpY2UoMCwgLTEpOy8vJ3R5cCc7XHJcbiAgICByZXFPYmpbJ3R5cGVWYXInXSA9IHR5cGVWYXIuc2xpY2UoMCwgLTEpOy8vJ24nO1xyXG4gICAgcmVxT2JqWydhdHRyVmFyJ10gPSBhdHRyVmFyLnNsaWNlKDAsIC0xKTsvLyd0eXAnO1xyXG4gICAgcmVxT2JqWyd2YWx1ZXNWYXInXSA9IHZhbHVlc1Zhci5zbGljZSgwLCAtMSk7IC8vY29udGFjdFR5cGUucHJpbnQudG9Mb3dlckNhc2UoKTtcclxuICAgIHJlcU9ialsnZGF0YVR5cGVWYXInXSA9IGRhdGFUeXBlVmFyLnNsaWNlKDAsIC0xKTsvLydjJztcclxuICAgIGlmICh0aGlzLm5hbWVJZG5MaXN0ICE9IFwiXCIgJiYgdGhpcy5uYW1lSWRuTGlzdCAhPSB1bmRlZmluZWQgJiYgdGhpcy5uYW1lSWRuTGlzdCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMubmFtZUlkbkxpc3Q9dGhpcy5uYW1lSWRuTGlzdC50cmltKCk7XHJcbiAgICAgIGxldCBzcGFjZVRvY29tbWEgPSB0aGlzLm5hbWVJZG5MaXN0LnJlcGxhY2UoL1sgLF0rL2csIFwiLFwiKTtcclxuICAgICAgbGV0IG5ld0xpbmVUb0NvbW1hID0gc3BhY2VUb2NvbW1hLnJlcGxhY2UoL1xcbi9nLCBcIixcIik7XHJcbiAgICAgIHJlcU9ialsnbm1lSWRuTGlzdCddPSBuZXdMaW5lVG9Db21tYS5zcGxpdCgnLCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NlYXJjaENvbnRhY3QnO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICBcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsICdjb250YWN0L2xvYWRDb250YWN0JykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLmRhdGFIZWFkZXIgPSByZXNwb25zZS5kYXRhSGVhZGVyO1xyXG4gICAgICAgIHRoaXMuZGF0YUxpc3QgPSByZXNwb25zZS5kYXRhTGlzdDtcclxuICAgICAgICB0aGlzLmRhdGFIZWFkZXJQcmludCA9IHJlc3BvbnNlLmRhdGFIZWFkZXJQcmludDtcclxuICAgICAgICB0aGlzLnBhZ2VEZWZpbmF0aW9uID0gcmVzcG9uc2UucGFnZURlZmluYXRpb247XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0bT1bXTtcclxuICAgICAgICB0aGlzLm5hbWVJZG5MaXN0PVwiXCI7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3cmFwXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdmFyIHRyYW5zbGF0ZSA9IFwidHJhbnNsYXRlKDAsXCIgKyB0aGlzLnNjcm9sbFRvcCArIFwicHgpXCI7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ0aGVhZFwiKS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHVzZXJBY3Rpb24odWEsIGMsIGEpIHtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICBpZiAodWEgJiYgYy50cmltKCkgPT0gJ3N1YmZvcm0nKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFthLmxvdl9xcnkudHJpbSgpLCBhLmNvbHVtbl9rZXksIHVhLm5tZV9pZG5dKTtcclxuICAgIH1cclxuICB9XHJcbiAgdG9vbGFjdGlvbnModGFiKXtcclxuICBcclxuICAgICAgY29uc29sZS5sb2coXCJwcm9jZXNzXCIsIHByb2Nlc3MpO1xyXG4gICAgICBzd2l0Y2ggKHRhYi5mb3JtX2ZpZWxkKSB7XHJcblxyXG4gICAgICAgIGNhc2UgXCJhZGRub3RpZmljYXRpb25cIjoge1xyXG4gICAgICAgICAgdGhpcy5Ob3RpZmljYXRpb25Qb3B1cCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfSBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkludmFsaWQgY2hvaWNlXCIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBcclxuICBcclxuICB9XHJcblxyXG4gIE5vdGlmaWNhdGlvblBvcHVwKCl7XHJcbiAgICBpZih0aGlzLnNlbGVjdGVkSXRtLmxlbmd0aD4wKXtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25Gb3JtcmVzZXQoKTtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgICAgcmVxT2JqWydmb3JtTm1lJ10gPSAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybSddO1xyXG4gICAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZE5vdGlmaWNhdGlvbic7XHJcbiAgICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgICAgdGhpcy5jcy5sb2FkKHJlcU9iaiwgb3B0aW9ucywgJ2NvbnRhY3Qvbm90aWZpY2F0aW9uJykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0fHx7fTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uTWRsTGlzdCA9IHJlc3VsdC5ub3RpZmljYXRpb25NZGxMaXN0fHxbXTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG5Ob3RpZmljYXRpb24nKS5jbGljaygpO1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgXHJcbiAgICAgfWVsc2V7XHJcbiAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIlBsZWFzZSBzZWxlY3QgY29udGFjdHNcIik7XHJcbiBcclxuICAgICB9XHJcbiAgfVxyXG5cclxuICBBZGROb3RpZmljYXRpb24oKXtcclxuICAgIGlmICh0aGlzLm15Tm90aWZpY2F0aW9uLnZhbGlkKSB7XHJcbiAgICBsZXQgZm9ybXNWYWwgPSB0aGlzLm15Tm90aWZpY2F0aW9uLnZhbHVlO1xyXG4gICAgbGV0IGJ1eWVyTGlzdD1bXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdG0uZm9yRWFjaChlbGVtZW50PT57XHJcbiAgICAgIGxldCBubWVfaWRuID0gZWxlbWVudC5ubWVfaWRufHxbXTtcclxuICAgICAgYnV5ZXJMaXN0LnB1c2gobm1lX2lkbik7XHJcbiAgICB9KVxyXG4gICAgZGVidWdnZXJcclxuICAgIGxldCBkYXRlU3RyaW5nID0gZm9ybXNWYWxbJ2xvZ2RhdGUnXSsnICcrZm9ybXNWYWxbJ2hoJ10rJzonK2Zvcm1zVmFsWydtbSddKyc6MDAnO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybSddO1xyXG4gICAgcmVxT2JqWydsb2dfdHMnXSA9ZGF0ZVN0cmluZztcclxuICAgIHJlcU9ialsncHViX3B2dCddID0gZm9ybXNWYWxbJ3B1Yl9wdnQnXTtcclxuICAgIHJlcU9ialsnbWRsJ10gPSBmb3Jtc1ZhbFsnbWRsJ107XHJcbiAgICByZXFPYmpbJ3NyYyddID0gZm9ybXNWYWxbJ3NyYyddO1xyXG4gICAgcmVxT2JqWydtc2cnXSA9IGZvcm1zVmFsWydtYXNzYWdlJ107XHJcbiAgICByZXFPYmpbJ3N0YXR1cyddID0gZm9ybXNWYWxbJ3N0YXR1cyddO1xyXG4gICAgcmVxT2JqWydidXllckxpc3QnXSA9IGJ1eWVyTGlzdDtcclxuICAgIHJlcU9ialsnYWN0aW9uJ10gPSAnYWRkJyA7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdzYXZlTm90aWZpY2F0aW9uJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsICdjb250YWN0L25vdGlmaWNhdGlvbicpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gcmVzcG9uc2UucmVzdWx0fHx7fTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkZvcm1yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdG09W107XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljbG9zZWJ0bi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIk5vdGlmaWNhdGlvbiBhZGRlZCBzdWNjZXNzZnVsbHkuXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1lbHNle1xyXG4gICAgdGhpcy50b2FzdHIuZXJyb3IoXCJQbGVhc2Ugc3BlY2lmeSBhbGwgcmVxdWlyZWQgZmllbGRcIik7XHJcblxyXG4gIH1cclxuXHJcbiAgfVxyXG5cclxuICBleHBvcnRFeGNlbCgpIHtcclxuICAgIHRoaXMuY21uY3MuQ1NWQ29udmVydG9yKHRoaXMuZGF0YUxpc3QsICdDb250YWN0X1NlYXJjaF8nLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIE1haWxQb3B1cCgpe1xyXG4gICAgaWYodGhpcy5zZWxlY3RlZEl0bS5sZW5ndGg+MCl7XHJcbiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bnNlbmRNYWlsJykuY2xpY2soKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIlBsZWFzZSBzZWxlY3QgY29udGFjdHNcIik7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgVXBkYXRlU2FsZUV4ZWN1dGl2ZVBvcCgpe1xyXG4gICAgaWYodGhpcy5zZWxlY3RlZEl0bS5sZW5ndGg+MCl7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuc2FsZWV4JykuY2xpY2soKTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihcIlBsZWFzZSBzZWxlY3QgY29udGFjdHNcIik7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgVXBkYXRlU2FsZUV4ZWN1dGl2ZSgpe1xyXG4gICAgbGV0IG5tZUlkbkxpc3Q9W107XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRtLmZvckVhY2goZWxlbWVudD0+e1xyXG4gICAgICBsZXQgbm1lX2lkbiA9IGVsZW1lbnQubm1lX2lkbnx8W107XHJcbiAgICAgICAgbm1lSWRuTGlzdC5wdXNoKG5tZV9pZG4pO1xyXG4gICAgfSlcclxuICAgIHRoaXMuc2FsZUV4Y3V0ZT10aGlzLnNhbGVFeGN1dGV8fFwiXCI7XHJcbiAgICBpZih0aGlzLnNhbGVFeGN1dGUhPVwiXCIpe1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm0nXTsgXHJcbiAgICByZXFPYmpbJ25tZUlkbkxpc3QnXT1ubWVJZG5MaXN0O1xyXG4gICAgcmVxT2JqWydlbXBfaWRuJ109dGhpcy5zYWxlRXhjdXRlO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnYXNzaWduU2FsZUV4ZWN1dGl2ZSc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLmNzLmxvYWQocmVxT2JqLCBvcHRpb25zLCAnY29udGFjdC9sb2FkQ29udGFjdCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuc2FsZUV4Y3V0ZT1cIlwiO1xyXG4gICAgICAgIHRoaXMuc2xleGNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIlVwZGF0ZSBkb25lIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcbiAgfWVsc2V7XHJcbiAgICB0aGlzLnRvYXN0ci5lcnJvcihcIlBsZWFzZSBTcGVjaWZ5IFNhbGUgRXhlY3V0aXZlXCIpO1xyXG5cclxuICB9XHJcbiAgXHJcbiAgfVxyXG5cclxuICBTZW5kTWFpbCgpe1xyXG4gICAgbGV0IGZvcm1zVmFsID0gdGhpcy5teUZvcm1tbS52YWx1ZTtcclxuZGVidWdnZXJcclxuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcclxuICAgIGxldCBtYXNzYWdlPVwiXCI7XHJcbiAgICBsZXQgaHRtbGNvbnRlbnQgPWZvcm1zVmFsWydodG1sY29udGVudCddfHwnJztcclxuICAgIGxldCBzdWJqZWN0PWZvcm1zVmFsWydzdWJqZWN0J118fCcnO1xyXG4gICAgbGV0IHNlbmRlck5hbWU9Zm9ybXNWYWxbJ3NlbmRlck5hbWUnXXx8Jyc7XHJcbiAgICBpZih0aGlzLnNlbGVjdGVkSXRtLmxlbmd0aD09MCl7XHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgbWFzc2FnZT1cIlBsZWFzZSBzZWxlY3QgY29udGFjdHMgZm9yIG1haWxcIjtcclxuXHJcbiAgICB9XHJcbiAgICBpZihzdWJqZWN0PT0nJyl7XHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgbWFzc2FnZT1cIlBsZWFzZSBTcGVjaWZ5IFN1YmplY3RcIjtcclxuXHJcbiAgICB9XHJcbiAgICBpZihodG1sY29udGVudD09Jycpe1xyXG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIG1hc3NhZ2U9XCJQbGVhc2UgU3BlY2lmeSBNYWlsIEJvZHlcIjtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWYoc2VuZGVyTmFtZT09Jycpe1xyXG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIG1hc3NhZ2U9XCJQbGVhc2UgU3BlY2lmeSBTZW5kZXIgTmFtZVwiO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpZihpc1ZhbGlkKXtcclxuICAgIGxldCBDQ2xzdCA9Zm9ybXNWYWxbJ0NDJ10gfHwnJztcclxuICAgIGxldCBCQ0Nsc3QgPSBmb3Jtc1ZhbFsnQkNDJ118fCcnO1xyXG4gICAgbGV0IGNjPVtdO1xyXG4gICAgbGV0IGJjYz1bXTtcclxuXHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgXHJcblxyXG4gICAgaWYoQ0Nsc3QhPScnKXtcclxuICAgbGV0IHNwYWNlVG9jb21tYSA9IENDbHN0LnJlcGxhY2UoL1sgLF0rL2csIFwiLFwiKTtcclxuICAgICBsZXQgbmV3TGluZVRvQ29tbWEgPSBzcGFjZVRvY29tbWEucmVwbGFjZSgvXFxuL2csIFwiLFwiKTtcclxuICAgICBjYyA9IG5ld0xpbmVUb0NvbW1hLnNwbGl0KCcsJyk7XHJcbiAgICB9XHJcbiAgICBpZihCQ0Nsc3QhPScnKXtcclxuICAgbGV0IHNwYWNlVG9jb21tYSA9IEJDQ2xzdC5yZXBsYWNlKC9bICxdKy9nLCBcIixcIik7XHJcbiAgICBsZXQgbmV3TGluZVRvQ29tbWEgPSBzcGFjZVRvY29tbWEucmVwbGFjZSgvXFxuL2csIFwiLFwiKTtcclxuICAgICBiY2MgPSBuZXdMaW5lVG9Db21tYS5zcGxpdCgnLCcpO1xyXG4gICAgfVxyXG4gICAgbGV0IGVtYWlsRGV0YWlscz1bXTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdG0uZm9yRWFjaChlbGVtZW50PT57XHJcbiAgICAgIGxldCBlbWFpbElkbnMgPSBlbGVtZW50LmVtYWlsSWRuc3x8W107XHJcbiAgICAgIGxldCBubWVfaWRuPWVsZW1lbnQubm1lX2lkbjtcclxuICAgICAgbGV0IGVtcF9pZG49ZWxlbWVudC5lbXBfaWRuO1xyXG4gICAgICBpZihlbWFpbElkbnMubGVuZ3RoPjApe1xyXG4gICAgICBlbWFpbERldGFpbHMucHVzaCh7XHJcbiAgICAgICAgXCJlbWFpbHNcIjplbWFpbElkbnMsXHJcbiAgICAgICAgXCJubWVfaWRuXCI6bm1lX2lkbixcclxuICAgICAgICBcImVtcF9pZG5cIjplbXBfaWRuXHJcbiAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBkZWJ1Z2dlclxyXG4gICBcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gXCJDb250YWN0TWFzc01haWxcIjtcclxuICAgIHJlcU9ialsnc2VuZGVybmFtZSddPXNlbmRlck5hbWU7XHJcbiAgICByZXFPYmpbJ3N1YmplY3QnXT1zdWJqZWN0O1xyXG4gICAgcmVxT2JqWydtYWlsZGV0YWlscyddPWVtYWlsRGV0YWlscztcclxuICAgIHJlcU9ialsnY2MnXT1jYztcclxuICAgIHJlcU9ialsnYmNjJ109YmNjO1xyXG4gICAgcmVxT2JqWydtYWlsQm9keSddPWh0bWxjb250ZW50O1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnc2VuZEJ1bGtNYWlsJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsICdjb250YWN0L2xvYWRDb250YWN0JykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZihyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5teUZvcm1tbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgc2VuZGVyTmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHN1YmplY3Q6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBodG1sY29udGVudDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICAgICAgQ0M6IFwiXCIsXHJcbiAgICAgICAgICBCQ0M6XCJcIlxyXG4gICAgICAgfSk7XHJcbiAgICAgIHRoaXMubWFpbGNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1lbHNle1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICB0aGlzLnRvYXN0ci5lcnJvcihtYXNzYWdlKTtcclxuICB9XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIGdldCBub3RpZmljYXRpb25Db250cm9sKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubXlOb3RpZmljYXRpb24uY29udHJvbHM7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RSb3cobm1lX2lkbikge1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NiXycrbm1lX2lkbikuY2xpY2soKTtcclxuICB9XHJcbiAgc2VsZWN0QWxsKGUpIHtcclxuICAgICAgdGhpcy5kYXRhTGlzdC5mb3JFYWNoKGVsZT0+e1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcbiAgICAgICAgdGhpcy5zZWxlY3RSb3coZWxlLm5tZV9pZG4pO1xyXG4gICAgICB9KVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZE9iaiA9IFtdO1xyXG4gIHNlbGVjdGVkSXRtID0gW107XHJcbiAgc2VsZWN0ZWRDcnRXZWlnaHQgPSAwO1xyXG4gIGNoZWNrZWRSb3coZGF0YSwgbm1lX2lkbikge1xyXG4gICAgZGVidWdnZXJcclxuICAgIGlmICgoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NiXycrbm1lX2lkbikgYXMgYW55KS5jaGVja2VkID09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NiXycrbm1lX2lkbik7Ly9wa3RJZFxyXG4gICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwic2VsZWN0ZWRSb3dcIik7XHJcbiAgICAgIGVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJub3RzZWxlY3RlZFJvd1wiKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0bS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5tZV9pZG4gPT0gbm1lX2lkbikge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0bS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYl8nK25tZV9pZG4pOy8vcGt0SWRcclxuICAgICAgZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcIm5vdHNlbGVjdGVkUm93XCIpO1xyXG4gICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2VsZWN0ZWRSb3dcIik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdG0ucHVzaChkYXRhKTtcclxuICAgIH1cclxuY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEl0bSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmVkaXRvckNvbmZpZyA9IHRoaXMuY21uY3MuZWRpdG9yQ29uZmlnO1xyXG5cclxuICAgIGxldCBtZGxrID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWRsS2V5JykpO1xyXG4gICAgdGhpcy5jVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5jVXJsLnNwbGl0KCcvJylbMV0pO1xyXG4gICAgdGhpcy5oZWFkZXIgPSB7XHJcbiAgICAgICdjbGllbnRrZXknOiBDb29raWUuZ2V0KCdfY2snKSxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ21vZHVsZWtleSc6IG1kbGtbdGhpcy5jVXJsLnNwbGl0KCcvJylbMV1dLFxyXG4gICAgICAnbG9naW5pZCc6IENvb2tpZS5nZXQoJ19sb2dpZCcpLFxyXG4gICAgICAnc291cmNlJzogJ3FzJ1xyXG4gICAgfTtcclxuICAgXHJcbiAgICB0aGlzLm15Rm9ybW1tID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHNlbmRlck5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHN1YmplY3Q6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGh0bWxjb250ZW50OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIENDOiBcIlwiLFxyXG4gICAgICBCQ0M6XCJcIlxyXG4gIH0pO1xyXG4gIHRoaXMubW10aW1lTGlzdD1bXTtcclxuICBmb3IodmFyIGk9MDtpPDI0O2krKyl7XHJcbiAgICBpZihpPDEwKVxyXG4gICAgdGhpcy5tbXRpbWVMaXN0LnB1c2goXCIwXCIraSk7XHJcbiAgICBlbHNlXHJcbiAgICB0aGlzLm1tdGltZUxpc3QucHVzaChcIlwiK2kpO1xyXG4gIH1cclxuXHJcbiAgdGhpcy5oaHRpbWVMaXN0PVtdO1xyXG4gIGZvcih2YXIgaT0wO2k8NjA7aSsrKXtcclxuICAgIGlmKGk8MTApXHJcbiAgICB0aGlzLmhodGltZUxpc3QucHVzaChcIjBcIitpKTtcclxuICAgIGVsc2VcclxuICAgIHRoaXMuaGh0aW1lTGlzdC5wdXNoKFwiXCIraSk7XHJcbiAgfVxyXG5cclxuICAgIHRoaXMubm90aWZpY2F0aW9uRm9ybXJlc2V0KCk7XHJcbiAgICB0aGlzLmxvYWRQcm9jZXNzKCk7XHJcbiAgfVxyXG4gIG5vdGlmaWNhdGlvbkZvcm1yZXNldCgpe1xyXG4gICAgdGhpcy5teU5vdGlmaWNhdGlvbiA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBsb2dkYXRlOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBwdWJfcHZ0OiBcIlBWVFwiLFxyXG4gICAgICBtZGw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHNyYzpcImV6XCIsXHJcbiAgICAgIGhoOlwiMDBcIixcclxuICAgICAgbW06XCIwMFwiLFxyXG4gICAgICBtYXNzYWdlOlsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIHN0YXR1czpcIlBcIlxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm10XCI+XHJcbiAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nXCI+XHJcbiAgICAgIDxoMyBjbGFzcz1cInBhbmVsLXRpdGxlXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgY3BcIj4gQmFjazwvc3Bhbj4mbmJzcDsmbmJzcDsmbmJzcDsgQ29udGFjdCBTZWFyY2gmbmJzcDsmbmJzcDsmbmJzcDtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImYtMTJcIj4oe3tjRHQgfCBkYXRlOidtZWRpdW0nfX0pPC9zcGFuPlxyXG4gICAgICA8L2gzPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiICpuZ0lmPVwidHJuc19idXR0b25zLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFkZE5ld0NvbnRhY3QodHJuc19idXR0b25zWzBdKVwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjojM2M1OTk4O2JvcmRlci1jb2xvcjogIzNjNTk5ODtcIj5BZGQgTmV3IENvbnRhY3Q8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+IFxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRlbnQtZnJhbWVcIiBzdHlsZT1cImJhY2tncm91bmQ6ICNmZmY7aGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTAwcHgpO1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlubmVyRFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cIm1hcmdpbjogMTBweCAwO1wiPlxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHctMTAwXCIgbmFtZT1cImNvbnRhY3RUeXBlXCIgWyhuZ01vZGVsKV09XCJjb250YWN0VHlwZVwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IENvbnRhY3RUeXBlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2YgY29udGFjdFR5cGVMaXN0XCIgW25nVmFsdWVdPVwidHlwZS52YWxcIj57e3R5cGUucHJpbnR9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImJ1eWVyTGlzdFwiIFtzZWFyY2hhYmxlXT1cImZhbHNlXCIgbmFtZT1cImJ1eWVyU3VnZ1wiIFsobmdNb2RlbCldPVwiYnV5ZXJTdWdnXCJcclxuICAgICAgICAgICAgICAgICAgICBiaW5kTGFiZWw9XCJ2XCIgYmluZFZhbHVlPVwia1wiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEJ1eWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWhlYWRlci10bXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJ3aWR0aDogMTAwJTsgbGluZS1oZWlnaHQ6IDI0cHhcIiAjYnV5ZXIgdHlwZT1cInRleHRcIiAoa2V5dXApPVwibG9hZEJ1eWVyKGJ1eWVyLnZhbHVlKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRlc3R0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3Qgc3R5bGU9XCJ6LWluZGV4OiA1O1wiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEJ1eWVyXCIgW29wdGlvbnNdPVwiYnV5ZXJMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImJ1eWVyXCIgbmFtZT1cImJ1eWVyXCIgKGZpbHRlcklucHV0Q2hhbmdlZCk9XCJsb2FkQnV5ZXIoJGV2ZW50KVwiIFthbGxvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjdCBlbXBsb3llZVwiIG5hbWU9XCJlbXBJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2FsZUV4ZWN1dGl2ZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1wSWRcIiBbYWxsb3dDbGVhcl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8bmctc2VsZWN0IFtpdGVtc109XCJzYWxlRXhlY3V0aXZlTGlzdFwiIFsobmdNb2RlbCldPVwiZW1wSWRcIiBiaW5kTGFiZWw9XCJ2XCIgbmFtZT1cImVtcElkXCIgYmluZFZhbHVlPVwia1wiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZW1wbG95ZWVcIiAjYnV5ZXJGaWw9XCJuZ01vZGVsXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWhlYWRlci10bXA+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy0xMDBcIiBuYW1lPVwiVGVybXNcIiBbKG5nTW9kZWwpXT1cIlRlcm1zXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3QgVGVybXM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdGVybSBvZiB0ZXJtc0xpc3RcIiB2YWx1ZT1cInt7dGVybS50ZXJtc19pZG59fVwiPnt7dGVybS5wcmludH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCB3LTEwMFwiIG5hbWU9XCJjdXJyZW5jeVwiIFsobmdNb2RlbCldPVwiY3VycmVuY3lcIiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBjdXJyZW5jeTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjdXJyZW5jeSBvZiBjdXJyZW5jeUxpc3RcIiB2YWx1ZT1cInt7Y3VycmVuY3kuY3VycmVuY3lfaWRufX1cIj57e2N1cnJlbmN5LnByaW50fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdy0xMDBcIiBwbGFjZWhvbGRlcj1cIlVzZXIgTmFtZVwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInVzZXJOYW1lXCIgWyhuZ01vZGVsKV09XCJ1c2VyTmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHN0eWxlPVwid2hpdGUtc3BhY2U6IHByZTtcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiTmFtZUlkbiBMaXN0XCIgXHJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmFtZUlkbkxpc3RcIiAgaWQ9XCJuYW1lSWRuTGlzdFwiICBuYW1lPVwibmFtZUlkbkxpc3RcIiBjb2xzPVwiMzhcIiByb3dzPVwiM1wiICA+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiB3LTEwMFwiIHN0eWxlPVwicGFkZGluZy10b3A6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwic2F2ZWJ0blwiIChjbGljayk9XCJzZWFyY2hDb250YWN0KClcIiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiMzYzU5OTg7Ym9yZGVyLWNvbG9yOiAjM2M1OTk4XCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgcHVsbC1sZWZ0XCI+c3VibWl0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIChjbGljayk9XCJzZWFyY2hDb250YWN0KGNvbnRhY3RUeXBlLGJ1eWVyU3VnZyxlbXBJZCxUZXJtcyxjdXJyZW5jeSx1c2VyTmFtZSlcIiAtLT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05IGN1c3RDbHNcIj5cclxuICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cImRhdGFMaXN0Py5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiAoY2xpY2spPVwidG9ndHNsKCk7XCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiMzYzU5OTg7Ym9yZGVyLWNvbG9yOiAjM2M1OTk4O21hcmdpbi10b3A6IDdweDttYXJnaW4tYm90dG9tOiA3cHhcIj50b29sczwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInRsc2RycFwiICpuZ0lmPVwidHNsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInRsc3VsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7e2FjdGlvbj8uZm9ybV9maWVsZF9pY29ufX0gdHNsaWNvXCI+PC9zcGFuPnt7YWN0aW9uPy5mb3JtX2ZpZWxkX3RpdGxlfX08L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiMzYzU5OTg7Ym9yZGVyLWNvbG9yOiAjM2M1OTk4O21hcmdpbi10b3A6IDdweDttYXJnaW4tYm90dG9tOiA3cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIj50b29sc1xyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCIgIChjbGljayk9XCJ0b29sYWN0aW9ucyh0YWIpO1wiIHN0eWxlPVwicGFkZGluZzogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3t0YWI/LmZvcm1fZmllbGRfaWNvbn19IHRzbGljb1wiPjwvc3Bhbj57e3RhYj8uZm9ybV9maWVsZF90aXRsZX19PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPVwicGFkZGluZzogMTBweDtjdXJzb3I6IHBvaW50ZXI7XCIgKGNsaWNrKT1cImV4cG9ydEV4Y2VsKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIEV4Y2VsPC9saT5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgIDxsaSBzdHlsZT1cInBhZGRpbmc6IDEwcHg7Y3Vyc29yOiBwb2ludGVyO1wiIChjbGljayk9XCJVcGRhdGVTYWxlRXhlY3V0aXZlUG9wKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIFNhbGVzIEV4ZWN1dGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgcHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4YW1wbGVJbnB1dE5hbWUyXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogNXB4O1wiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImV4YW1wbGVJbnB1dE5hbWUyXCIgbmFtZT1cInNjaHR4dFwiIFsobmdNb2RlbCldPVwic2VhcmNoRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTAwcHgpO1wiIGlkPVwid3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZGlzcGxheVRhYmxlXCIgKm5nSWY9XCJkYXRhTGlzdD8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicG9zcmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGg+U1IgTm88aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNsaWNrKT1cInNlbGVjdEFsbCgkZXZlbnQpO1wiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGg+QWN0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGRyIG9mIGRhdGFIZWFkZXJcIj57e2RhdGFIZWFkZXJQcmludFtoZHJdfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoPkFkZC5FbWFpbHM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgIDx0Ym9keSA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGRhdGFMaXN0IHwgQ29udGFjdFRhYmxlU3JjUGlwZTpzZWFyY2hGOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIHwgc2VhcmNoUGlwZTpzZWFyY2hGIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJzZWxlY3RSb3coZGF0YS5ubWVfaWRuKVwiPnt7aSArIDF9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtoaWRkZW5dPVwidHJ1ZVwiIGlkPVwiY2Jfe3tkYXRhLm5tZV9pZG59fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoZWNrZWRSb3coZGF0YSxkYXRhLm5tZV9pZG4pXCIgdmFsdWU9XCJ7e2RhdGEubm1lX2lkbn19XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgKGNsaWNrKT1cInNlbGVjdFJvdyhkYXRhLm5tZV9pZG4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBjbGFzcz1cImJ0biBidG4taW5mbyBkcm9wZG93bi10b2dnbGVcIj5BY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiByb2xlPVwibWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgcGFnZURlZmluYXRpb24uYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwidXNlckFjdGlvbihkYXRhLGFjdGlvbi5mb3JtX2ZpZWxkX3R5cCxhY3Rpb24pO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uLmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgaGRyIG9mIGRhdGFIZWFkZXJcIiAoY2xpY2spPVwic2VsZWN0Um93KGRhdGEubm1lX2lkbilcIj57e2RhdGFbaGRyXX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2RhdGFbJ2VtYWlsSWRucyddfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYWN0aW9uRm9vdGVyIHB1bGwtcmlnaHRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJtb2RlbFNhbGVFeFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwibWFpbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJ0cnVlXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1tZFwiID5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5cclxuICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwibWFpbE1vZGFsSGVhZFwiPlVwZGF0ZSBTYWxlIEV4ZWN1dGl2ZTwvaDQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj5TYWxlIEV4ZWN1dGl2ZVxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc20gIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3Qgc3R5bGU9XCJ6LWluZGV4OiA1O1wiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEJ1eWVyXCIgW29wdGlvbnNdPVwiRW1wbG95ZWVMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzYWxlRXhjdXRlXCIgbmFtZT1cInNhbGVFeGN1dGVcIiAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxvYWRTYWxlRXhjdXRpdmUoJGV2ZW50KVwiIFthbGxvd0NsZWFyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgPCEtLSA8cD4gZGZmIHt7aHRtbENvbnRlbnR9fTwvcD4gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiVXBkYXRlU2FsZUV4ZWN1dGl2ZSgpXCIgICBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPlVwZGF0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI3NsZXhjbG9zZWJ0biBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwibW9kZWxNYWlsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJtYWlsTW9kYWxIZWFkXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICBkYXRhLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1rZXlib2FyZD1cInRydWVcIj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgc3R5bGU9XCJ3aWR0aDogNzA1cHhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIiAgW2Zvcm1Hcm91cF09XCJteUZvcm1tbVwiICAgKG5nU3VibWl0KT1cIlNlbmRNYWlsKClcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPlxyXG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJtYWlsTW9kYWxIZWFkXCI+U2VuZCBNYWlsPC9oND5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj5TZW5kZXIgTmFtZVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtICB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBvc3JlbFwiIGZvcm1Db250cm9sTmFtZT1cInNlbmRlck5hbWVcIiAgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj5TdWJqZWN0XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwb3NyZWxcIiBmb3JtQ29udHJvbE5hbWU9XCJzdWJqZWN0XCIgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+Q0NcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBvc3JlbFwiIGZvcm1Db250cm9sTmFtZT1cIkNDXCIgbmFtZT1cIkNDXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTIgY29udHJvbC1sYWJlbFwiPkJDQ1xyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zcmVsXCIgZm9ybUNvbnRyb2xOYW1lPVwiQkNDXCIgbmFtZT1cIkJDQ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhbmd1bGFyLWVkaXRvciBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyIHRleHQgaGVyZS4uLidcIiBbY29uZmlnXT1cImNvbmZpZ1wiIGZvcm1Db250cm9sTmFtZT1cImh0bWxjb250ZW50XCI+PC9hbmd1bGFyLWVkaXRvcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8ZWpzLXJpY2h0ZXh0ZWRpdG9yIGlkPSdkZWZhdWx0UlRFJyBbKHZhbHVlKV09J3ZhbHVlJyA+PC9lanMtcmljaHRleHRlZGl0b3I+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8Y2tlZGl0b3IgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiID48L2NrZWRpdG9yPiAtLT5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICA8IS0tIDxwPiBkZmYge3todG1sQ29udGVudH19PC9wPiAtLT5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiAgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj5TZW5kPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI21haWxjbG9zZWJ0biBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwibW9kZWxOb3RpZmljYXRpb25cIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJ0cnVlXCI+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHN0eWxlPVwid2lkdGg6IDcwNXB4XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgIFtmb3JtR3JvdXBdPVwibXlOb3RpZmljYXRpb25cIiAgIChuZ1N1Ym1pdCk9XCJBZGROb3RpZmljYXRpb24oKVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCI+XHJcbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm1haWxNb2RhbEhlYWRcIj5BZGQgTm90aWZpY2F0aW9uPC9oND5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj4gPHNwYW4gc3R5bGU9XCJjb2xvcjpyZWRcIj4qPC9zcGFuPiBEYXRlXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb2dkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBvbmZvY3VzPVwiKHRoaXMudHlwZT0nZGF0ZScpXCJcclxuICAgICAgICAgICAgICAgICAgICBvbmJsdXI9XCIodGhpcy50eXBlPSd0ZXh0JylcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBcclxuICAgICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm5vdGlmaWNhdGlvbkNvbnRyb2wubG9nZGF0ZS5pbnZhbGlkICYmIChub3RpZmljYXRpb25Db250cm9sLmxvZ2RhdGUuZGlydHkgfHwgbm90aWZpY2F0aW9uQ29udHJvbC5sb2dkYXRlLnRvdWNoZWQpICYmIG5vdGlmaWNhdGlvbkNvbnRyb2wubG9nZGF0ZS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+IDxzcGFuIHN0eWxlPVwiY29sb3I6cmVkXCI+Kjwvc3Bhbj5UaW1lKEhIOk1NKVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiIHN0eWxlPVwicGFkZGluZzoycHg7bWFyZ2luOjBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImhoXCIgc3R5bGU9XCJwYWRkaW5nOjVweCA1cHhcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBtbXQgb2YgbW10aW1lTGlzdFwiIFtuZ1ZhbHVlXT1cIm1tdFwiPnt7bW10fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCIgc3R5bGU9XCJwYWRkaW5nOjJweDttYXJnaW46MHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwibW1cIiBzdHlsZT1cInBhZGRpbmc6NXB4IDVweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGhodCBvZiBoaHRpbWVMaXN0XCIgW25nVmFsdWVdPVwiaGh0XCI+e3toaHR9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0yIGNvbnRyb2wtbGFiZWxcIj4gPHNwYW4gc3R5bGU9XCJjb2xvcjpyZWRcIj4qPC9zcGFuPk1vZHVsZVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtZGxcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG5vdGlmaWNhdGUgb2Ygbm90aWZpY2F0aW9uTWRsTGlzdFwiIFtuZ1ZhbHVlXT1cIm5vdGlmaWNhdGUua1wiPnt7bm90aWZpY2F0ZVsndiddfX08L29wdGlvbj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub3RpZmljYXRpb25Db250cm9sLm1kbC5pbnZhbGlkICYmIChub3RpZmljYXRpb25Db250cm9sLm1kbC5kaXJ0eSB8fCBub3RpZmljYXRpb25Db250cm9sLm1kbC50b3VjaGVkKSAmJiBub3RpZmljYXRpb25Db250cm9sLm1kbC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICBNb2R1bGUgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+PHNwYW4gc3R5bGU9XCJjb2xvcjpyZWRcIj4qPC9zcGFuPk1hc3NhZ2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YW5ndWxhci1lZGl0b3IgW3BsYWNlaG9sZGVyXT1cIlwiIFtjb25maWddPVwibm90aWNvbmZpZ1wiIGZvcm1Db250cm9sTmFtZT1cIm1hc3NhZ2VcIj48L2FuZ3VsYXItZWRpdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub3RpZmljYXRpb25Db250cm9sLm1hc3NhZ2UuaW52YWxpZCAmJiAobm90aWZpY2F0aW9uQ29udHJvbC5tYXNzYWdlLmRpcnR5IHx8IG5vdGlmaWNhdGlvbkNvbnRyb2wubWFzc2FnZS50b3VjaGVkKSAmJiBub3RpZmljYXRpb25Db250cm9sLm1hc3NhZ2UuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbiBtYXNzYWdlIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgPCEtLSA8cD4gZGZmIHt7aHRtbENvbnRlbnR9fTwvcD4gLS0+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI25vdGlmaWNsb3NlYnRuIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxidXR0b24gaWQ9XCJidG5Ob3RpZmljYXRpb25cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjbW9kZWxOb3RpZmljYXRpb25cIj48L2J1dHRvbj5cclxuXHJcblxyXG48YnV0dG9uIGlkPVwiYnRuc2FsZWV4XCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI21vZGVsU2FsZUV4XCI+PC9idXR0b24+XHJcblxyXG48YnV0dG9uIGlkPVwiYnRuc2VuZE1haWxcIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjbW9kZWxNYWlsXCI+PC9idXR0b24+XHJcbiJdfQ==
|