@hitsoft/abp.kadooglu 1.0.10 → 1.0.12

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.
Files changed (34) hide show
  1. package/esm2020/lib/hit-components/hit-carrier-person/hit-carrier-person-form/hit-carrier-person-form.component.mjs +4 -3
  2. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.mjs +278 -109
  3. package/esm2020/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.mjs +56 -27
  4. package/esm2020/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.mjs +266 -24
  5. package/esm2020/lib/hit-components/hit-knt-item-esl/hit-knt-item-esl-form/hit-knt-item-esl-form.component.mjs +4 -4
  6. package/esm2020/lib/hit-components/hit-vehicle-type/hit-vehicle-type-form/hit-vehicle-type-form.component.mjs +1 -1
  7. package/esm2020/lib/hit-proxy/hit-carrier-person/models.mjs +1 -1
  8. package/esm2020/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.mjs +5 -2
  9. package/esm2020/lib/hit-proxy/hit-entry-weighing/models.mjs +1 -1
  10. package/esm2020/lib/hit-proxy/hit-factory-entry/models.mjs +1 -1
  11. package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.mjs +4 -1
  12. package/esm2020/lib/hit-proxy/hit-purchase-delivery-note/models.mjs +1 -1
  13. package/esm2020/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.mjs +4 -1
  14. package/esm2020/lib/hit-proxy/hit-stock-transfer/models.mjs +1 -1
  15. package/esm2020/lib/services/scale-signalr.service.mjs +4 -1
  16. package/esm2020/lib/shared/hit-modal/hit-modal.component.mjs +68 -16
  17. package/fesm2015/hitsoft-abp.kadooglu.mjs +725 -216
  18. package/fesm2015/hitsoft-abp.kadooglu.mjs.map +1 -1
  19. package/fesm2020/hitsoft-abp.kadooglu.mjs +707 -208
  20. package/fesm2020/hitsoft-abp.kadooglu.mjs.map +1 -1
  21. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-form/hit-entry-weighing-form.component.d.ts +20 -7
  22. package/lib/hit-components/hit-entry-weighing/hit-entry-weighing-list/hit-entry-weighing-list.component.d.ts +9 -1
  23. package/lib/hit-components/hit-factory-entry/hit-factory-entry-form/hit-factory-entry-form.component.d.ts +24 -1
  24. package/lib/hit-proxy/hit-carrier-person/models.d.ts +2 -0
  25. package/lib/hit-proxy/hit-entry-weighing/hit-entry-weighing.service.d.ts +3 -0
  26. package/lib/hit-proxy/hit-entry-weighing/models.d.ts +1 -0
  27. package/lib/hit-proxy/hit-factory-entry/models.d.ts +9 -4
  28. package/lib/hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service.d.ts +1 -0
  29. package/lib/hit-proxy/hit-purchase-delivery-note/models.d.ts +6 -0
  30. package/lib/hit-proxy/hit-stock-transfer/hit-stock-transfer.service.d.ts +1 -0
  31. package/lib/hit-proxy/hit-stock-transfer/models.d.ts +2 -0
  32. package/lib/services/scale-signalr.service.d.ts +2 -0
  33. package/lib/shared/hit-modal/hit-modal.component.d.ts +25 -2
  34. package/package.json +1 -1
@@ -9,11 +9,13 @@ import * as i5 from "../../../hit-proxy/hit-vehicle-type/hit-vehicle-type.servic
9
9
  import * as i6 from "../../../hit-proxy/hit-business-partner/hit-business-partner.service";
10
10
  import * as i7 from "../../../hit-proxy/hit-user-gate/hit-user-gate.service";
11
11
  import * as i8 from "@abp/ng.core";
12
- import * as i9 from "@angular/common";
13
- import * as i10 from "../../../shared/hit-modal/hit-modal.component";
14
- import * as i11 from "devextreme-angular";
12
+ import * as i9 from "../../../hit-proxy/hit-stock-transfer/hit-stock-transfer.service";
13
+ import * as i10 from "../../../hit-proxy/hit-purchase-delivery-note/hit-purchase-delivery-note.service";
14
+ import * as i11 from "@angular/common";
15
+ import * as i12 from "../../../shared/hit-modal/hit-modal.component";
16
+ import * as i13 from "devextreme-angular";
15
17
  export class HitFactoryEntryFormComponent {
16
- constructor(confirmation, service, carrierPersonService, plateService, vehicleTypeService, businessPartnerService, userGateService, localizationService) {
18
+ constructor(confirmation, service, carrierPersonService, plateService, vehicleTypeService, businessPartnerService, userGateService, localizationService, stockTransferService, purchaseDeliveryNoteService) {
17
19
  this.confirmation = confirmation;
18
20
  this.service = service;
19
21
  this.carrierPersonService = carrierPersonService;
@@ -22,6 +24,8 @@ export class HitFactoryEntryFormComponent {
22
24
  this.businessPartnerService = businessPartnerService;
23
25
  this.userGateService = userGateService;
24
26
  this.localizationService = localizationService;
27
+ this.stockTransferService = stockTransferService;
28
+ this.purchaseDeliveryNoteService = purchaseDeliveryNoteService;
25
29
  this.visible = false;
26
30
  this.visibleChange = new EventEmitter();
27
31
  this.record = null;
@@ -58,6 +62,7 @@ export class HitFactoryEntryFormComponent {
58
62
  this.exitDateTime = null;
59
63
  this.selectedTypeCode = '';
60
64
  this.selectedTypeName = '';
65
+ this.selectedType = null;
61
66
  this.selectedPlateNo = '';
62
67
  this.tcNo = '';
63
68
  this.selectedCarrierName = '';
@@ -82,13 +87,84 @@ export class HitFactoryEntryFormComponent {
82
87
  this.newCarrierTel = '';
83
88
  this.isTcCitizen = true;
84
89
  this.isLoading = false;
90
+ // Waybill (SSMG / Stok Nakli) — yalnızca Mal GÇ = Y olan hareket tiplerinde gösterilir
91
+ this.waybillTabs = [];
92
+ this.waybillNo = '';
93
+ this.waybillDocEntry = null;
94
+ // Waybill seçimi sonrası backend'den otomatik doldurulan gizli alanlar
95
+ this.waybillIrsaliyeNo = ''; // u_EFATNO → u_DespatchAdviceNo
96
+ this.waybillAutoPlate = ''; // u_AracPlakasi
97
+ this.waybillAutoDorsePlate = ''; // u_DorsePlakalar
98
+ this.waybillAutoTcNo = ''; // u_SoforKimlik
99
+ this.waybillAutoDriverFirstname = ''; // u_SoforAd
100
+ this.waybillAutoDriverLastname = ''; // u_SoforSoyadi
101
+ this.waybillAutoDriverName = ''; // u_SoforAd + u_SoforSoyadi
102
+ this.waybillAutoCardCode = ''; // cardCode
103
+ this.waybillSourceType = null;
104
+ this.isWaybillLoading = false;
85
105
  }
86
106
  ngOnInit() {
87
- this.vehicleTypeService.getList().subscribe(d => (this.typeData = d));
107
+ this.vehicleTypeService.getList().subscribe(d => {
108
+ this.typeData = d;
109
+ // Form düzenleme modunda açıksa typeData yüklendikten sonra selectedType'ı çöz
110
+ if (this.record?.u_EntryType && !this.selectedType) {
111
+ const found = d.find(t => t.code === this.record.u_EntryType);
112
+ if (found)
113
+ this.selectedType = found;
114
+ }
115
+ });
88
116
  this.carrierPersonService.getList().subscribe(d => (this.carrierData = d));
89
117
  this.businessPartnerService.getList().subscribe(d => (this.businessPartnerData = d));
90
118
  this.userGateService.getMyGates().subscribe(d => (this.gateData = d));
91
119
  this.userGateService.getMyDefaultGateCode().subscribe(d => (this.defaultGateCode = d ?? ''));
120
+ const l = (key) => this.localizationService.instant('Kadooglu::' + key);
121
+ const waybillDateFrom = (() => { const d = new Date(); d.setDate(d.getDate() - 3); return d; })();
122
+ const waybillDateTo = new Date();
123
+ this.waybillTabs = [
124
+ {
125
+ title: l('WaybillTab_StockTransfer'),
126
+ loadFn: (params) => this.stockTransferService.getList(params),
127
+ displayName: 'u_EFATNO',
128
+ keyExpr: 'docEntry',
129
+ showDateFilter: true,
130
+ defaultDateFrom: waybillDateFrom,
131
+ defaultDateTo: waybillDateTo,
132
+ columns: [
133
+ { dataField: 'docNum', caption: l('DocumentNo'), width: 100 },
134
+ { dataField: 'u_EFATNO', caption: l('WaybillNo'), width: 120 },
135
+ { dataField: 'cardCode', caption: l('CardCode'), width: 120 },
136
+ { dataField: 'cardName', caption: l('CardName') },
137
+ { dataField: 'fromWarehouse', caption: l('ExitWarehouse'), width: 140 },
138
+ { dataField: 'u_AracPlakasi', caption: l('VehiclePlate'), width: 110 },
139
+ { dataField: 'u_DorsePlakalar', caption: l('TrailerPlate'), width: 110 },
140
+ { dataField: 'u_SoforAd', caption: l('DriverName') },
141
+ { dataField: 'u_SoforSoyadi', caption: l('DriverSurname') },
142
+ { dataField: 'u_SoforKimlik', caption: l('TcIdentityNo'), width: 130 },
143
+ { dataField: 'comments', caption: l('Description') },
144
+ ],
145
+ },
146
+ {
147
+ title: l('WaybillTab_PurchaseDelivery'),
148
+ loadFn: (params) => this.purchaseDeliveryNoteService.getList(params),
149
+ displayName: 'u_EFATNO',
150
+ keyExpr: 'docEntry',
151
+ showDateFilter: true,
152
+ defaultDateFrom: waybillDateFrom,
153
+ defaultDateTo: waybillDateTo,
154
+ columns: [
155
+ { dataField: 'docNum', caption: l('DocumentNo'), width: 100 },
156
+ { dataField: 'u_EFATNO', caption: l('WaybillNo'), width: 120 },
157
+ { dataField: 'cardCode', caption: l('CardCode'), width: 120 },
158
+ { dataField: 'cardName', caption: l('CardName') },
159
+ { dataField: 'u_AracPlakasi', caption: l('VehiclePlate'), width: 110 },
160
+ { dataField: 'u_DorsePlakalar', caption: l('TrailerPlate'), width: 110 },
161
+ { dataField: 'u_SoforAd', caption: l('DriverName') },
162
+ { dataField: 'u_SoforSoyadi', caption: l('DriverSurname') },
163
+ { dataField: 'u_SoforKimlik', caption: l('TcIdentityNo'), width: 130 },
164
+ { dataField: 'comments', caption: l('Description') },
165
+ ],
166
+ },
167
+ ];
92
168
  }
93
169
  ngOnChanges(changes) {
94
170
  if (changes['visible']?.currentValue === true) {
@@ -97,6 +173,7 @@ export class HitFactoryEntryFormComponent {
97
173
  }
98
174
  initForm() {
99
175
  this.isTcCitizen = true;
176
+ this.selectedType = null;
100
177
  this.plateInputMode = 'lookup';
101
178
  this.manualPlateNo = '';
102
179
  this.trailerPlateInputMode = 'lookup';
@@ -107,6 +184,15 @@ export class HitFactoryEntryFormComponent {
107
184
  this.newCarrierFirstname = '';
108
185
  this.newCarrierLastname = '';
109
186
  this.newCarrierTel = '';
187
+ this.waybillIrsaliyeNo = '';
188
+ this.waybillAutoPlate = '';
189
+ this.waybillAutoDorsePlate = '';
190
+ this.waybillAutoTcNo = '';
191
+ this.waybillAutoDriverFirstname = '';
192
+ this.waybillAutoDriverLastname = '';
193
+ this.waybillAutoDriverName = '';
194
+ this.waybillAutoCardCode = '';
195
+ this.waybillSourceType = null;
110
196
  if (this.record) {
111
197
  this.gateCode = this.record.u_GateCode ?? '';
112
198
  this.entryDateTime = this.buildDateTime(this.record.u_EntryDate, this.record.u_EntryTime);
@@ -120,6 +206,25 @@ export class HitFactoryEntryFormComponent {
120
206
  this.description = this.record.u_Description;
121
207
  this.selectedBusinessPartnerCode = this.record.u_CardCode ?? '';
122
208
  this.selectedBusinessPartnerName = this.businessPartnerData.find(p => p.cardCode === this.record.u_CardCode)?.cardName ?? this.record.u_CardCode ?? '';
209
+ this.waybillNo = this.record.u_DespatchAdviceNo ?? '';
210
+ this.waybillDocEntry = null;
211
+ this.waybillIrsaliyeNo = '';
212
+ this.waybillAutoPlate = '';
213
+ this.waybillAutoDorsePlate = '';
214
+ this.waybillAutoTcNo = '';
215
+ this.waybillAutoDriverFirstname = '';
216
+ this.waybillAutoDriverLastname = '';
217
+ this.waybillAutoDriverName = '';
218
+ this.waybillAutoCardCode = '';
219
+ this.waybillSourceType = null;
220
+ // Carrier'dan TC vatandaşı bilgisini oku
221
+ const carrier = this.carrierData.find(c => c.code === this.record.u_TcNo);
222
+ this.isTcCitizen = carrier ? carrier.u_TcVtndsiMi !== 'N' : true;
223
+ // Seçili tipte Mal GÇ bilgisini çöz
224
+ const foundType = this.typeData.find(t => t.code === this.record.u_EntryType);
225
+ if (foundType) {
226
+ this.selectedType = foundType;
227
+ }
123
228
  }
124
229
  else {
125
230
  this.gateCode = this.defaultGateCode;
@@ -127,12 +232,24 @@ export class HitFactoryEntryFormComponent {
127
232
  this.exitDateTime = null;
128
233
  this.selectedTypeCode = '';
129
234
  this.selectedTypeName = '';
235
+ this.selectedType = null;
130
236
  this.selectedPlateNo = '';
131
237
  this.tcNo = '';
132
238
  this.selectedCarrierName = '';
133
239
  this.description = '';
134
240
  this.selectedBusinessPartnerCode = '';
135
241
  this.selectedBusinessPartnerName = '';
242
+ this.waybillNo = '';
243
+ this.waybillDocEntry = null;
244
+ this.waybillIrsaliyeNo = '';
245
+ this.waybillAutoPlate = '';
246
+ this.waybillAutoDorsePlate = '';
247
+ this.waybillAutoTcNo = '';
248
+ this.waybillAutoDriverFirstname = '';
249
+ this.waybillAutoDriverLastname = '';
250
+ this.waybillAutoDriverName = '';
251
+ this.waybillAutoCardCode = '';
252
+ this.waybillSourceType = null;
136
253
  }
137
254
  }
138
255
  buildDateTime(dateStr, timeNum) {
@@ -145,10 +262,60 @@ export class HitFactoryEntryFormComponent {
145
262
  return d;
146
263
  }
147
264
  onTypeSelected(e) {
148
- if (!e)
265
+ if (!e) {
266
+ // Hareket tipi temizlendi — ilgili tüm alanları sıfırla ve gizle
267
+ this.selectedTypeCode = '';
268
+ this.selectedTypeName = '';
269
+ this.selectedType = null;
270
+ this.selectedPlateNo = '';
271
+ this.manualPlateNo = '';
272
+ this.plateInputMode = 'lookup';
273
+ this.selectedTrailerPlateNo = '';
274
+ this.manualTrailerPlateNo = '';
275
+ this.trailerPlateInputMode = 'lookup';
276
+ this.tcNo = '';
277
+ this.selectedCarrierName = '';
278
+ this.isNewCarrier = false;
279
+ this.newCarrierFirstname = '';
280
+ this.newCarrierLastname = '';
281
+ this.newCarrierTel = '';
282
+ this.tcLookupMode = false;
283
+ this.selectedBusinessPartnerCode = '';
284
+ this.selectedBusinessPartnerName = '';
285
+ this.waybillNo = '';
286
+ this.waybillDocEntry = null;
287
+ this.waybillIrsaliyeNo = '';
288
+ this.waybillAutoPlate = '';
289
+ this.waybillAutoDorsePlate = '';
290
+ this.waybillAutoTcNo = '';
291
+ this.waybillAutoDriverFirstname = '';
292
+ this.waybillAutoDriverLastname = '';
293
+ this.waybillAutoDriverName = '';
294
+ this.waybillAutoCardCode = '';
295
+ this.waybillSourceType = null;
149
296
  return;
297
+ }
150
298
  this.selectedTypeCode = e.code;
151
299
  this.selectedTypeName = e.name;
300
+ this.selectedType = e;
301
+ // Hareket tipi değişince waybill seçimini ve otomatik doldurulan alanları sıfırla
302
+ this.waybillNo = '';
303
+ this.waybillDocEntry = null;
304
+ this.waybillIrsaliyeNo = '';
305
+ this.waybillAutoPlate = '';
306
+ this.waybillAutoDorsePlate = '';
307
+ this.waybillAutoTcNo = '';
308
+ this.waybillAutoDriverFirstname = '';
309
+ this.waybillAutoDriverLastname = '';
310
+ this.waybillAutoDriverName = '';
311
+ this.waybillAutoCardCode = '';
312
+ this.waybillSourceType = null;
313
+ }
314
+ get isGoodsType() {
315
+ return this.selectedType?.u_MalGC === 'Y';
316
+ }
317
+ get showExtraFields() {
318
+ return !!this.selectedTypeCode && !this.isGoodsType;
152
319
  }
153
320
  onPlateSelected(e) {
154
321
  if (!e)
@@ -182,6 +349,7 @@ export class HitFactoryEntryFormComponent {
182
349
  return;
183
350
  this.selectedCarrierName = e.name;
184
351
  this.tcNo = e.code;
352
+ this.isTcCitizen = e.u_TcVtndsiMi !== 'N';
185
353
  this.isNewCarrier = false;
186
354
  this.tcLookupMode = false;
187
355
  }
@@ -194,6 +362,62 @@ export class HitFactoryEntryFormComponent {
194
362
  this.selectedBusinessPartnerCode = e.cardCode;
195
363
  this.selectedBusinessPartnerName = e.cardName;
196
364
  }
365
+ onWaybillSelected(e) {
366
+ if (!e) {
367
+ this.waybillNo = '';
368
+ this.waybillDocEntry = null;
369
+ this.waybillIrsaliyeNo = '';
370
+ this.waybillAutoPlate = '';
371
+ this.waybillAutoDorsePlate = '';
372
+ this.waybillAutoTcNo = '';
373
+ this.waybillAutoDriverFirstname = '';
374
+ this.waybillAutoDriverLastname = '';
375
+ this.waybillAutoDriverName = '';
376
+ this.waybillAutoCardCode = '';
377
+ this.waybillSourceType = null;
378
+ return;
379
+ }
380
+ // Lookup'ta u_EFATNO gösterilir (displayName: 'u_EFATNO')
381
+ this.waybillNo = e.u_EFATNO?.toString() ?? e.docNum?.toString() ?? '';
382
+ this.waybillDocEntry = e.docEntry ?? null;
383
+ // Kaynak tipi: StockTransfer'da 'fromWarehouse' alanı vardır, PurchaseDeliveryNote'da yoktur
384
+ const isStockTransfer = 'fromWarehouse' in e;
385
+ this.waybillSourceType = isStockTransfer ? 'stockTransfer' : 'purchaseDelivery';
386
+ if (!e.docEntry)
387
+ return;
388
+ this.isWaybillLoading = true;
389
+ const onNext = (doc) => this.applyWaybillAutoFill(doc);
390
+ const onError = () => { this.isWaybillLoading = false; };
391
+ if (isStockTransfer) {
392
+ this.stockTransferService.get(e.docEntry).subscribe({ next: onNext, error: onError });
393
+ }
394
+ else {
395
+ this.purchaseDeliveryNoteService.get(e.docEntry).subscribe({ next: onNext, error: onError });
396
+ }
397
+ }
398
+ applyWaybillAutoFill(doc) {
399
+ this.isWaybillLoading = false;
400
+ if (!doc)
401
+ return;
402
+ // İrsaliye numarası (u_EFATNO) — DTO'da u_DespatchAdviceNo olarak gönderilecek
403
+ this.waybillIrsaliyeNo = doc.u_EFATNO?.trim() ?? '';
404
+ // Araç plakası
405
+ this.waybillAutoPlate = doc.u_AracPlakasi?.trim() ?? '';
406
+ // Dorse plaka
407
+ this.waybillAutoDorsePlate = doc.u_DorsePlakalar?.trim() ?? '';
408
+ // Sürücü TC kimlik no
409
+ this.waybillAutoTcNo = doc.u_SoforKimlik?.trim() ?? '';
410
+ // Cari kodu
411
+ this.waybillAutoCardCode = doc.cardCode?.trim() ?? '';
412
+ // Sürücü adı soyadı (ayrı ve birleşik)
413
+ const ad = doc.u_SoforAd?.trim() ?? '';
414
+ const soyad = doc.u_SoforSoyadi?.trim() ?? '';
415
+ this.waybillAutoDriverFirstname = ad;
416
+ this.waybillAutoDriverLastname = soyad;
417
+ this.waybillAutoDriverName = [ad, soyad].filter(Boolean).join(' ');
418
+ // TCKN algoritmasına göre TC vatandaşı mı belirle
419
+ this.isTcCitizen = this.validateTCKN(this.waybillAutoTcNo);
420
+ }
197
421
  queryCarrierByTcNo() {
198
422
  const tc = this.tcNo?.trim();
199
423
  if (!tc) {
@@ -210,6 +434,7 @@ export class HitFactoryEntryFormComponent {
210
434
  this.isTcQuerying = false;
211
435
  if (carrier) {
212
436
  this.selectedCarrierName = carrier.name;
437
+ this.isTcCitizen = carrier.u_TcVtndsiMi !== 'N';
213
438
  this.isNewCarrier = false;
214
439
  }
215
440
  else {
@@ -236,7 +461,7 @@ export class HitFactoryEntryFormComponent {
236
461
  const effectiveTrailerPlateNo = this.formatPlate(this.trailerPlateInputMode === 'manual'
237
462
  ? this.manualTrailerPlateNo.trim().toUpperCase()
238
463
  : this.selectedTrailerPlateNo);
239
- if (!this.selectedTypeCode || !effectivePlateNo || !this.tcNo?.trim()) {
464
+ if (!this.selectedTypeCode || (!this.isGoodsType && (!effectivePlateNo || !this.tcNo?.trim()))) {
240
465
  this.confirmation.warn(this.localizationService.instant('Kadooglu::FillRequiredFields'), '', {
241
466
  hideYesBtn: true,
242
467
  cancelText: this.localizationService.instant('Kadooglu::Cancel'),
@@ -244,7 +469,15 @@ export class HitFactoryEntryFormComponent {
244
469
  });
245
470
  return;
246
471
  }
247
- if (this.isTcCitizen && !this.validateTCKN(this.tcNo)) {
472
+ if (this.isGoodsType && !this.waybillNo?.trim()) {
473
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::WaybillRequired'), '', {
474
+ hideYesBtn: true,
475
+ cancelText: this.localizationService.instant('Kadooglu::Cancel'),
476
+ dismissible: false,
477
+ });
478
+ return;
479
+ }
480
+ if (!this.isGoodsType && this.isTcCitizen && !this.validateTCKN(this.tcNo)) {
248
481
  this.confirmation.warn('Geçersiz T.C. Kimlik No. Lütfen 11 haneli, geçerli bir TCKN giriniz.', '', {
249
482
  hideYesBtn: true,
250
483
  cancelText: this.localizationService.instant('Kadooglu::Cancel'),
@@ -252,7 +485,7 @@ export class HitFactoryEntryFormComponent {
252
485
  });
253
486
  return;
254
487
  }
255
- if (this.isNewCarrier && (!this.newCarrierFirstname?.trim() || !this.newCarrierLastname?.trim())) {
488
+ if (!this.isGoodsType && this.isNewCarrier && (!this.newCarrierFirstname?.trim() || !this.newCarrierLastname?.trim())) {
256
489
  this.confirmation.warn(this.localizationService.instant('Kadooglu::EnterNewDriverName'), '', {
257
490
  hideYesBtn: true,
258
491
  cancelText: this.localizationService.instant('Kadooglu::Cancel'),
@@ -275,18 +508,27 @@ export class HitFactoryEntryFormComponent {
275
508
  ? this.exitDateTime.getHours() * 100 + this.exitDateTime.getMinutes()
276
509
  : undefined,
277
510
  u_EntryType: this.selectedTypeCode,
278
- u_Plate: effectivePlateNo,
279
- u_DorsePlate: effectiveTrailerPlateNo || undefined,
280
- u_TcNo: this.tcNo.trim(),
281
- u_Driver: this.isNewCarrier
282
- ? `${this.newCarrierFirstname.trim()} ${this.newCarrierLastname.trim()}`
283
- : undefined,
284
- u_DriverFirstname: this.isNewCarrier ? this.newCarrierFirstname.trim() : undefined,
285
- u_DriverLastname: this.isNewCarrier ? this.newCarrierLastname.trim() : undefined,
286
- u_DriverTel: this.isNewCarrier ? (this.newCarrierTel.trim() || undefined) : undefined,
287
- u_CardCode: this.selectedBusinessPartnerCode,
288
511
  u_Description: this.description,
512
+ u_TcVtndsiMi: this.isTcCitizen ? 'Y' : 'N',
289
513
  };
514
+ if (this.isGoodsType) {
515
+ // Mal GÇ = Y: Sadece irsaliye referansı gönder, backend SAP'tan doğrulayarak dolduracak
516
+ dto.u_WaybillDocEntry = this.waybillDocEntry ?? undefined;
517
+ dto.u_WaybillSourceType = this.waybillSourceType ?? undefined;
518
+ }
519
+ else {
520
+ // Mal GÇ = N: Araç ve sürücü bilgilerini frontend'den gönder
521
+ dto.u_Plate = effectivePlateNo;
522
+ dto.u_DorsePlate = effectiveTrailerPlateNo || undefined;
523
+ dto.u_TcNo = this.tcNo.trim();
524
+ dto.u_Driver = this.isNewCarrier
525
+ ? `${this.newCarrierFirstname.trim()} ${this.newCarrierLastname.trim()}`
526
+ : undefined;
527
+ dto.u_DriverFirstname = this.isNewCarrier ? this.newCarrierFirstname.trim() : undefined;
528
+ dto.u_DriverLastname = this.isNewCarrier ? this.newCarrierLastname.trim() : undefined;
529
+ dto.u_DriverTel = this.isNewCarrier ? (this.newCarrierTel.trim() || undefined) : undefined;
530
+ dto.u_CardCode = this.selectedBusinessPartnerCode;
531
+ }
290
532
  const doSave = () => {
291
533
  const obs$ = this.record?.docEntry
292
534
  ? this.service.update(this.record.docEntry.toString(), dto)
@@ -361,12 +603,12 @@ export class HitFactoryEntryFormComponent {
361
603
  return d11 === d[10];
362
604
  }
363
605
  }
364
- HitFactoryEntryFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, deps: [{ token: i1.ConfirmationService }, { token: i2.HitFactoryEntryService }, { token: i3.HitCarrierPersonService }, { token: i4.HitPlateService }, { token: i5.HitVehicleTypeService }, { token: i6.HitBusinessPartnerService }, { token: i7.HitUserGateService }, { token: i8.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
365
- HitFactoryEntryFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFactoryEntryFormComponent, selector: "lib-hit-factory-entry-form", inputs: { visible: "visible", record: "record" }, outputs: { visibleChange: "visibleChange", saved: "saved", cancelled: "cancelled" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'lg', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | abpLocalization }}</label>\r\n <dx-date-box\r\n [(value)]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | abpLocalization }}</label>\r\n <dx-date-box\r\n [(value)]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: i10.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "editingData"], outputs: ["selected"] }, { kind: "component", type: i11.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i11.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i11.DxTextAreaComponent, selector: "dx-text-area", inputs: ["accessKey", "activeStateEnabled", "autoResizeEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "maxHeight", "maxLength", "minHeight", "name", "placeholder", "readOnly", "rtlEnabled", "spellcheck", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "autoResizeEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maxHeightChange", "maxLengthChange", "minHeightChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i11.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "enableThreeStateBehavior", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "enableThreeStateBehaviorChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i8.LocalizationPipe, name: "abpLocalization" }] });
606
+ HitFactoryEntryFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, deps: [{ token: i1.ConfirmationService }, { token: i2.HitFactoryEntryService }, { token: i3.HitCarrierPersonService }, { token: i4.HitPlateService }, { token: i5.HitVehicleTypeService }, { token: i6.HitBusinessPartnerService }, { token: i7.HitUserGateService }, { token: i8.LocalizationService }, { token: i9.HitStockTransferService }, { token: i10.HitPurchaseDeliveryNoteService }], target: i0.ɵɵFactoryTarget.Component });
607
+ HitFactoryEntryFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitFactoryEntryFormComponent, selector: "lib-hit-factory-entry-form", inputs: { visible: "visible", record: "record" }, outputs: { visibleChange: "visibleChange", saved: "saved", cancelled: "cancelled" }, usesOnChanges: true, ngImport: i0, template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'lg', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | abpLocalization }}</label>\r\n <dx-date-box\r\n [(value)]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | abpLocalization }}</label>\r\n <dx-date-box\r\n [(value)]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Mal G\u00C7 = Y: SSMG / Stok Nakli se\u00E7imi -->\r\n <div class=\"mb-3\" *ngIf=\"selectedTypeCode && isGoodsType\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::WaybillNumber' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [tabs]=\"waybillTabs\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\" *ngIf=\"showExtraFields\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\" *ngIf=\"showExtraFields\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"border rounded p-3 mb-2\" *ngIf=\"showExtraFields\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [disabled]=\"!!record\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading || isWaybillLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n", dependencies: [{ kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i1.ModalComponent, selector: "abp-modal", inputs: ["visible", "busy", "options", "suppressUnsavedChangesWarning"], outputs: ["visibleChange", "init", "appear", "disappear"] }, { kind: "component", type: i12.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "showDateFilter", "defaultDateFrom", "defaultDateTo", "tabs", "editingData"], outputs: ["selected"] }, { kind: "component", type: i13.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "todayButtonText", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "todayButtonTextChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i13.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "customItemCreateEvent", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "customItemCreateEventChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i13.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i13.DxTextAreaComponent, selector: "dx-text-area", inputs: ["accessKey", "activeStateEnabled", "autoResizeEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "maxHeight", "maxLength", "minHeight", "name", "placeholder", "readOnly", "rtlEnabled", "spellcheck", "stylingMode", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "autoResizeEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maxHeightChange", "maxLengthChange", "minHeightChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i13.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "enableThreeStateBehavior", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "enableThreeStateBehaviorChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "pipe", type: i8.LocalizationPipe, name: "abpLocalization" }] });
366
608
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitFactoryEntryFormComponent, decorators: [{
367
609
  type: Component,
368
- args: [{ selector: 'lib-hit-factory-entry-form', template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'lg', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | abpLocalization }}</label>\r\n <dx-date-box\r\n [(value)]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | abpLocalization }}</label>\r\n <dx-date-box\r\n [(value)]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
369
- }], ctorParameters: function () { return [{ type: i1.ConfirmationService }, { type: i2.HitFactoryEntryService }, { type: i3.HitCarrierPersonService }, { type: i4.HitPlateService }, { type: i5.HitVehicleTypeService }, { type: i6.HitBusinessPartnerService }, { type: i7.HitUserGateService }, { type: i8.LocalizationService }]; }, propDecorators: { visible: [{
610
+ args: [{ selector: 'lib-hit-factory-entry-form', template: "<abp-modal [visible]=\"visible\" (visibleChange)=\"onModalVisibleChange($event)\" [options]=\"{ size: 'lg', backdrop: 'static' }\">\r\n <ng-template #abpHeader>\r\n <h3>{{ record?.docEntry ? ('AbpUi::Edit' | abpLocalization) : ('Kadooglu::NewRecord' | abpLocalization) }}</h3>\r\n </ng-template>\r\n\r\n <ng-template #abpBody>\r\n\r\n <!-- Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-clock me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDateTime' | abpLocalization }}</label>\r\n <dx-date-box\r\n [(value)]=\"entryDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDateTime' | abpLocalization }}</label>\r\n <dx-date-box\r\n [(value)]=\"exitDateTime\"\r\n type=\"datetime\"\r\n displayFormat=\"dd.MM.yyyy HH:mm\"\r\n [showClearButton]=\"true\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Gate' | abpLocalization }}</label>\r\n <dx-select-box\r\n [(value)]=\"gateCode\"\r\n [dataSource]=\"gateData\"\r\n displayExpr=\"name\"\r\n valueExpr=\"code\"\r\n [placeholder]=\"'Kadooglu::SelectGate' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-select-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Ara\u00E7 Bilgileri -->\r\n <div class=\"border rounded p-3 mb-2\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-truck me-2\"></i>{{ 'Kadooglu::VehicleInfo' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n Ara\u00E7 Hareket T\u00FCr\u00FC <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"typeData\"\r\n [columns]=\"typeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedTypeName\"\r\n (selected)=\"onTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <!-- Mal G\u00C7 = Y: SSMG / Stok Nakli se\u00E7imi -->\r\n <div class=\"mb-3\" *ngIf=\"selectedTypeCode && isGoodsType\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::WaybillNumber' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [tabs]=\"waybillTabs\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n\r\n <div class=\"mb-3\" *ngIf=\"showExtraFields\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Plate' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-container *ngIf=\"plateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehiclePlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedPlateNo\"\r\n (selected)=\"onPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"plateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"plateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"mb-3\" *ngIf=\"showExtraFields\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DorsePlate' | abpLocalization }}\r\n </label>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'lookup'\">\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"plateColumns\"\r\n displayName=\"code\"\r\n keyExpr=\"code\"\r\n [editingData]=\"selectedTrailerPlateNo\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'manual'\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::ManualEntry' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"trailerPlateInputMode === 'manual'\">\r\n <dx-text-box\r\n [(value)]=\"manualTrailerPlateNo\"\r\n [placeholder]=\"'Kadooglu::EnterPlate' | abpLocalization\"\r\n width=\"100%\"\r\n (onFocusOut)=\"onManualTrailerPlateFocusOut()\">\r\n </dx-text-box>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"trailerPlateInputMode = 'lookup'\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <!-- S\u00FCr\u00FCc\u00FC & Firma -->\r\n <div class=\"border rounded p-3 mb-2\" *ngIf=\"showExtraFields\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-id-card me-2\"></i>{{ 'Kadooglu::DriverAndCompany' | abpLocalization }}\r\n </div>\r\n\r\n <div class=\"mb-3\">\r\n <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n <label class=\"form-label mb-0 small fw-semibold text-muted\">\r\n {{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [disabled]=\"!!record\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <ng-container *ngIf=\"!tcLookupMode\">\r\n <div class=\"d-flex gap-2\">\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n <button type=\"button\" class=\"btn btn-outline-primary btn-sm text-nowrap\"\r\n [disabled]=\"isTcQuerying\"\r\n (click)=\"queryCarrierByTcNo()\">\r\n <i class=\"fa fa-search me-1\"></i>\r\n {{ (isTcQuerying ? 'Kadooglu::Querying' : 'Kadooglu::Query') | abpLocalization }}\r\n </button>\r\n </div>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = true\">\r\n <i class=\"fa fa-list me-1\"></i> {{ 'Kadooglu::SelectFromList' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"tcLookupMode\">\r\n <hit-lookup-select\r\n [getFn]=\"carrierData\"\r\n [columns]=\"carrierColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"selectedCarrierName\"\r\n (selected)=\"onCarrierLookupSelected($event)\">\r\n </hit-lookup-select>\r\n <div class=\"mt-1\">\r\n <a href=\"javascript:void(0)\" class=\"small text-primary\" (click)=\"tcLookupMode = false\">\r\n <i class=\"fa fa-keyboard me-1\"></i> {{ 'Kadooglu::QueryByTc' | abpLocalization }}\r\n </a>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Mevcut s\u00FCr\u00FCc\u00FC: sadece ad\u0131 g\u00F6ster (readonly) -->\r\n <ng-container *ngIf=\"!isNewCarrier\">\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::DriverNameSurname' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"selectedCarrierName\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Yeni s\u00FCr\u00FCc\u00FC: Ad, Soyad, Telefon alanlar\u0131n\u0131 g\u00F6ster -->\r\n <ng-container *ngIf=\"isNewCarrier\">\r\n <div class=\"row mb-3\">\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::FirstName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierFirstname\"\r\n [placeholder]=\"'Kadooglu::FirstName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::LastName' | abpLocalization }} <span class=\"text-danger\">*</span>\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierLastname\"\r\n [placeholder]=\"'Kadooglu::LastName' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::Phone' | abpLocalization }}\r\n </label>\r\n <dx-text-box\r\n [(value)]=\"newCarrierTel\"\r\n [placeholder]=\"'Kadooglu::Phone' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"alert alert-info small py-1 mb-3\">\r\n <i class=\"fa fa-info-circle me-1\"></i>\r\n {{ 'Kadooglu::NewDriverAlert' | abpLocalization }}\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::BusinessPartner' | abpLocalization }}\r\n </label>\r\n <hit-lookup-select\r\n [getFn]=\"businessPartnerData\"\r\n [columns]=\"businessPartnerColumns\"\r\n displayName=\"cardName\"\r\n keyExpr=\"cardCode\"\r\n [editingData]=\"selectedBusinessPartnerName\"\r\n (selected)=\"onBusinessPartnerSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n </div>\r\n\r\n <!-- A\u00E7\u0131klama -->\r\n <div class=\"mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::Description' | abpLocalization }}</label>\r\n <dx-text-area\r\n [(value)]=\"description\"\r\n [height]=\"80\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n\r\n </ng-template>\r\n\r\n <ng-template #abpFooter>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"cancel()\">\r\n {{ 'AbpUi::Cancel' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isLoading || isWaybillLoading\"\r\n (click)=\"save()\">\r\n {{ 'AbpUi::Save' | abpLocalization }}\r\n </abp-button>\r\n </ng-template>\r\n</abp-modal>\r\n" }]
611
+ }], ctorParameters: function () { return [{ type: i1.ConfirmationService }, { type: i2.HitFactoryEntryService }, { type: i3.HitCarrierPersonService }, { type: i4.HitPlateService }, { type: i5.HitVehicleTypeService }, { type: i6.HitBusinessPartnerService }, { type: i7.HitUserGateService }, { type: i8.LocalizationService }, { type: i9.HitStockTransferService }, { type: i10.HitPurchaseDeliveryNoteService }]; }, propDecorators: { visible: [{
370
612
  type: Input
371
613
  }], visibleChange: [{
372
614
  type: Output
@@ -377,4 +619,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
377
619
  }], cancelled: [{
378
620
  type: Output
379
621
  }] } });
380
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFldkcsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBTW5DLE1BQU0sT0FBTyw0QkFBNEI7SUEyRXJDLFlBQ1ksWUFBaUMsRUFDakMsT0FBK0IsRUFDL0Isb0JBQTZDLEVBQzdDLFlBQTZCLEVBQzdCLGtCQUF5QyxFQUN6QyxzQkFBaUQsRUFDakQsZUFBbUMsRUFDbkMsbUJBQXdDO1FBUHhDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXVCO1FBQ3pDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBMkI7UUFDakQsb0JBQWUsR0FBZixlQUFlLENBQW9CO1FBQ25DLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFsRjNDLFlBQU8s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TSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7TG9jYWxpemF0aW9uU2VydmljZX0gZnJvbSAnQGFicC9uZy5jb3JlJztcclxuaW1wb3J0IHtIaXRGYWN0b3J5RW50cnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWZhY3RvcnktZW50cnkvaGl0LWZhY3RvcnktZW50cnkuc2VydmljZSc7XHJcbmltcG9ydCB7SGl0VmVoaWNsZVR5cGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXZlaGljbGUtdHlwZS9oaXQtdmVoaWNsZS10eXBlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZlaGljbGVUeXBlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXZlaGljbGUtdHlwZS9tb2RlbHMnO1xyXG5pbXBvcnQge1BsYXRlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXBsYXRlL21vZGVscyc7XHJcbmltcG9ydCB7Q2FycmllclBlcnNvbn0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1jYXJyaWVyLXBlcnNvbi9tb2RlbHMnO1xyXG5pbXBvcnQge0hpdENhcnJpZXJQZXJzb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWNhcnJpZXItcGVyc29uL2hpdC1jYXJyaWVyLXBlcnNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtIaXRQbGF0ZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtcGxhdGUvaGl0LXBsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZhY3RvcnlFbnRyeSwgU2F2ZUZhY3RvcnlFbnRyeUR0b30gZnJvbSBcIi4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZmFjdG9yeS1lbnRyeS9tb2RlbHNcIjtcclxuaW1wb3J0IHtIaXRCdXNpbmVzc1BhcnRuZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWJ1c2luZXNzLXBhcnRuZXIvaGl0LWJ1c2luZXNzLXBhcnRuZXIuc2VydmljZSc7XHJcbmltcG9ydCB7QnVzaW5lc3NQYXJ0bmVyfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWJ1c2luZXNzLXBhcnRuZXIvbW9kZWxzJztcclxuaW1wb3J0IHtIaXRVc2VyR2F0ZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtdXNlci1nYXRlL2hpdC11c2VyLWdhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7R2F0ZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1nYXRlL21vZGVscyc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWhpdC1mYWN0b3J5LWVudHJ5LWZvcm0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGl0RmFjdG9yeUVudHJ5Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICAgIEBJbnB1dCgpIHZpc2libGUgPSBmYWxzZTtcclxuICAgIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gICAgQElucHV0KCkgcmVjb3JkOiBGYWN0b3J5RW50cnkgfCBudWxsID0gbnVsbDtcclxuICAgIEBPdXRwdXQoKSBzYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLy8gTG9va3VwIGRhdGEgYXJyYXlzIGZvciBtb2RhbHNcclxuICAgIHR5cGVEYXRhOiBWZWhpY2xlVHlwZVtdID0gW107XHJcbiAgICBjYXJyaWVyRGF0YTogQ2FycmllclBlcnNvbltdID0gW107XHJcblxyXG4gICAgLy8gTGF6eSBsb2FkZXJzIGZvciBwbGF0ZSBsb29rdXBzIOKAlCBmaWx0ZXJlZCBieSB1X0lzVHJhaWxlclxyXG4gICAgbG9hZFZlaGljbGVQbGF0ZXMgPSAoKSA9PiB0aGlzLnBsYXRlU2VydmljZS5nZXRMaXN0KCkucGlwZShcclxuICAgICAgICBtYXAocGxhdGVzID0+IHBsYXRlcy5maWx0ZXIocCA9PiBwLnVfSXNUcmFpbGVyICE9PSAnWScpKVxyXG4gICAgKTtcclxuICAgIGxvYWRUcmFpbGVyUGxhdGVzID0gKCkgPT4gdGhpcy5wbGF0ZVNlcnZpY2UuZ2V0TGlzdCgpLnBpcGUoXHJcbiAgICAgICAgbWFwKHBsYXRlcyA9PiBwbGF0ZXMuZmlsdGVyKHAgPT4gcC51X0lzVHJhaWxlciA9PT0gJ1knKSlcclxuICAgICk7XHJcbiAgICBnYXRlRGF0YTogR2F0ZVtdID0gW107XHJcbiAgICBkZWZhdWx0R2F0ZUNvZGUgPSAnJztcclxuXHJcbiAgICAvLyBDb2x1bW4gY29uZmlncyBmb3IgbG9va3VwIG1vZGFsc1xyXG4gICAgdHlwZUNvbHVtbnMgPSBbXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDEwMH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQWQnfSxcclxuICAgIF07XHJcbiAgICBwbGF0ZUNvbHVtbnMgPSBbXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnUGxha2EnLCB3aWR0aDogMTAwfSxcclxuICAgICAgICB7ZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdOYW1lJ30sXHJcbiAgICBdO1xyXG4gICAgY2FycmllckNvbHVtbnMgPSBbXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnVC5DLiBLaW1saWsgTm8nLCB3aWR0aDogMTQwfSxcclxuICAgICAgICB7ZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdBZCBTb3lhZCd9LFxyXG4gICAgXTtcclxuICAgIGJ1c2luZXNzUGFydG5lckNvbHVtbnMgPSBbXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NhcmRDb2RlJywgY2FwdGlvbjogJ0NhcmkgS29kJywgd2lkdGg6IDEyMH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ2NhcmROYW1lJywgY2FwdGlvbjogJ0NhcmkgVW52YW4nfSxcclxuICAgIF07XHJcblxyXG4gICAgLy8gRm9ybSBmaWVsZHNcclxuICAgIGdhdGVDb2RlID0gJyc7XHJcbiAgICBlbnRyeURhdGVUaW1lOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBleGl0RGF0ZVRpbWU6IERhdGUgfCBudWxsID0gbnVsbDtcclxuICAgIHNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuICAgIHNlbGVjdGVkVHlwZU5hbWUgPSAnJztcclxuICAgIHNlbGVjdGVkUGxhdGVObyA9ICcnO1xyXG4gICAgdGNObyA9ICcnO1xyXG4gICAgc2VsZWN0ZWRDYXJyaWVyTmFtZSA9ICcnO1xyXG4gICAgYnVzaW5lc3NQYXJ0bmVyRGF0YTogQnVzaW5lc3NQYXJ0bmVyW10gPSBbXTtcclxuICAgIHNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9ICcnO1xyXG4gICAgc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICBkZXNjcmlwdGlvbiA9ICcnO1xyXG5cclxuICAgIC8vIFBsYXRlIGlucHV0IG1vZGVcclxuICAgIHBsYXRlSW5wdXRNb2RlOiAnbG9va3VwJyB8ICdtYW51YWwnID0gJ2xvb2t1cCc7XHJcbiAgICBtYW51YWxQbGF0ZU5vID0gJyc7XHJcblxyXG4gICAgLy8gVHJhaWxlciBwbGF0ZVxyXG4gICAgdHJhaWxlclBsYXRlSW5wdXRNb2RlOiAnbG9va3VwJyB8ICdtYW51YWwnID0gJ2xvb2t1cCc7XHJcbiAgICBzZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICBtYW51YWxUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG5cclxuICAgIC8vIENhcnJpZXIgVEMgbW9kZVxyXG4gICAgdGNMb29rdXBNb2RlID0gZmFsc2U7XHJcbiAgICBpc1RjUXVlcnlpbmcgPSBmYWxzZTtcclxuICAgIGlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG5cclxuICAgIC8vIE5ldyBjYXJyaWVyIGZpZWxkc1xyXG4gICAgbmV3Q2FycmllckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgbmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICBuZXdDYXJyaWVyVGVsID0gJyc7XHJcblxyXG4gICAgaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG4gICAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBIaXRGYWN0b3J5RW50cnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2FycmllclBlcnNvblNlcnZpY2U6IEhpdENhcnJpZXJQZXJzb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGxhdGVTZXJ2aWNlOiBIaXRQbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2ZWhpY2xlVHlwZVNlcnZpY2U6IEhpdFZlaGljbGVUeXBlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGJ1c2luZXNzUGFydG5lclNlcnZpY2U6IEhpdEJ1c2luZXNzUGFydG5lclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyR2F0ZVNlcnZpY2U6IEhpdFVzZXJHYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmVoaWNsZVR5cGVTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy50eXBlRGF0YSA9IGQpKTtcclxuICAgICAgICB0aGlzLmNhcnJpZXJQZXJzb25TZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5jYXJyaWVyRGF0YSA9IGQpKTtcclxuICAgICAgICB0aGlzLmJ1c2luZXNzUGFydG5lclNlcnZpY2UuZ2V0TGlzdCgpLnN1YnNjcmliZShkID0+ICh0aGlzLmJ1c2luZXNzUGFydG5lckRhdGEgPSBkKSk7XHJcbiAgICAgICAgdGhpcy51c2VyR2F0ZVNlcnZpY2UuZ2V0TXlHYXRlcygpLnN1YnNjcmliZShkID0+ICh0aGlzLmdhdGVEYXRhID0gZCkpO1xyXG4gICAgICAgIHRoaXMudXNlckdhdGVTZXJ2aWNlLmdldE15RGVmYXVsdEdhdGVDb2RlKCkuc3Vic2NyaWJlKGQgPT4gKHRoaXMuZGVmYXVsdEdhdGVDb2RlID0gZCA/PyAnJykpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1sndmlzaWJsZSddPy5jdXJyZW50VmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICB0aGlzLm1hbnVhbFBsYXRlTm8gPSAnJztcclxuICAgICAgICB0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgICAgIHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8gPSAnJztcclxuICAgICAgICB0aGlzLnRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNOZXdDYXJyaWVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLm5ld0NhcnJpZXJUZWwgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVjb3JkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZUNvZGUgPSB0aGlzLnJlY29yZC51X0dhdGVDb2RlID8/ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVudHJ5RGF0ZVRpbWUgPSB0aGlzLmJ1aWxkRGF0ZVRpbWUodGhpcy5yZWNvcmQudV9FbnRyeURhdGUsIHRoaXMucmVjb3JkLnVfRW50cnlUaW1lKTtcclxuICAgICAgICAgICAgdGhpcy5leGl0RGF0ZVRpbWUgID0gdGhpcy5idWlsZERhdGVUaW1lKHRoaXMucmVjb3JkLnVfRXhpdERhdGUsICB0aGlzLnJlY29yZC51X0V4aXRUaW1lKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlTmFtZSA9IHRoaXMucmVjb3JkLnVfRW50cnlUeXBlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUodGhpcy5yZWNvcmQudV9QbGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUodGhpcy5yZWNvcmQudV9Eb3JzZVBsYXRlID8/ICcnKTtcclxuICAgICAgICAgICAgdGhpcy50Y05vID0gdGhpcy5yZWNvcmQudV9UY05vO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSB0aGlzLnJlY29yZC51X0RyaXZlcjtcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRoaXMucmVjb3JkLnVfRGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gdGhpcy5yZWNvcmQudV9DYXJkQ29kZSA/PyAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lck5hbWUgPSB0aGlzLmJ1c2luZXNzUGFydG5lckRhdGEuZmluZChwID0+IHAuY2FyZENvZGUgPT09IHRoaXMucmVjb3JkLnVfQ2FyZENvZGUpPy5jYXJkTmFtZSA/PyB0aGlzLnJlY29yZC51X0NhcmRDb2RlID8/ICcnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZUNvZGUgPSB0aGlzLmRlZmF1bHRHYXRlQ29kZTtcclxuICAgICAgICAgICAgdGhpcy5lbnRyeURhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5leGl0RGF0ZVRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudGNObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkRGF0ZVRpbWUoZGF0ZVN0cj86IHN0cmluZywgdGltZU51bT86IG51bWJlcik6IERhdGUgfCBudWxsIHtcclxuICAgICAgICBpZiAoIWRhdGVTdHIpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgICAgICBpZiAodGltZU51bSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGQuc2V0SG91cnMoTWF0aC5mbG9vcih0aW1lTnVtIC8gMTAwKSwgdGltZU51bSAlIDEwMCwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVHlwZVNlbGVjdGVkKGU6IFZlaGljbGVUeXBlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gZS5jb2RlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlTmFtZSA9IGUubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBvblBsYXRlU2VsZWN0ZWQoZTogUGxhdGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUoZS5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKGU6IFBsYXRlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShlLmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWFudWFsUGxhdGVGb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbnVhbFBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMubWFudWFsUGxhdGVObyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NYW51YWxUcmFpbGVyUGxhdGVGb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZSh0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVMO8cmsgcGxha2FzxLFuxLEgXCIzNCBITUEgMDAxXCIgZm9ybWF0xLFuYSBkw7Zuw7zFn3TDvHLDvHIgKi9cclxuICAgIGZvcm1hdFBsYXRlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcclxuICAgICAgICBjb25zdCByYXcgPSB2YWx1ZS5yZXBsYWNlKC9bXkEtWmEtejAtOcOHxJ7EsMOWxZ7DnMOnxJ/EscO2xZ/DvF0vZywgJycpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByYXcubWF0Y2goL14oXFxkezJ9KShbQS1aw4fEnsSww5bFnsOcXXsxLDN9KShcXGR7MSw0fSkkLyk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHttYXRjaFsxXX0gJHttYXRjaFsyXX0gJHttYXRjaFszXX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXJyaWVyTG9va3VwU2VsZWN0ZWQoZTogQ2FycmllclBlcnNvbik6IHZvaWQge1xyXG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9IGUubmFtZTtcclxuICAgICAgICB0aGlzLnRjTm8gPSBlLmNvZGU7XHJcbiAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQnVzaW5lc3NQYXJ0bmVyU2VsZWN0ZWQoZTogQnVzaW5lc3NQYXJ0bmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSBlLmNhcmRDb2RlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gZS5jYXJkTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeUNhcnJpZXJCeVRjTm8oKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGMgPSB0aGlzLnRjTm8/LnRyaW0oKTtcclxuICAgICAgICBpZiAoIXRjKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpQbGVhc2VFbnRlclRjTm8nKSwgJycsIHtcclxuICAgICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzVGNRdWVyeWluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYXJyaWVyUGVyc29uU2VydmljZS5nZXQodGMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChjYXJyaWVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGNRdWVyeWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnJpZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSBjYXJyaWVyLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhcnJpZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3Q2FycmllckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyVGVsID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGNRdWVyeWluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyVGVsID0gJyc7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlZmZlY3RpdmVQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShcclxuICAgICAgICAgICAgdGhpcy5wbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5tYW51YWxQbGF0ZU5vLnRyaW0oKS50b1VwcGVyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRQbGF0ZU5vXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKFxyXG4gICAgICAgICAgICB0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5tYW51YWxUcmFpbGVyUGxhdGVOby50cmltKCkudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm9cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUeXBlQ29kZSB8fCAhZWZmZWN0aXZlUGxhdGVObyB8fCAhdGhpcy50Y05vPy50cmltKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkZpbGxSZXF1aXJlZEZpZWxkcycpLCAnJywge1xyXG4gICAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1RjQ2l0aXplbiAmJiAhdGhpcy52YWxpZGF0ZVRDS04odGhpcy50Y05vKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKCdHZcOnZXJzaXogVC5DLiBLaW1saWsgTm8uIEzDvHRmZW4gMTEgaGFuZWxpLCBnZcOnZXJsaSBiaXIgVENLTiBnaXJpbml6LicsICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzTmV3Q2FycmllciAmJiAoIXRoaXMubmV3Q2FycmllckZpcnN0bmFtZT8udHJpbSgpIHx8ICF0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZT8udHJpbSgpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6RW50ZXJOZXdEcml2ZXJOYW1lJyksICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGR0bzogU2F2ZUZhY3RvcnlFbnRyeUR0byA9IHtcclxuICAgICAgICAgICAgdV9HYXRlQ29kZTogdGhpcy5nYXRlQ29kZSxcclxuICAgICAgICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmVudHJ5RGF0ZVRpbWUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9FbnRyeVRpbWU6IHRoaXMuZW50cnlEYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmVudHJ5RGF0ZVRpbWUuZ2V0SG91cnMoKSAqIDEwMCArIHRoaXMuZW50cnlEYXRlVGltZS5nZXRNaW51dGVzKClcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0V4aXREYXRlOiB0aGlzLmV4aXREYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmV4aXREYXRlVGltZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF1cclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0V4aXRUaW1lOiB0aGlzLmV4aXREYXRlVGltZVxyXG4gICAgICAgICAgICAgICAgPyB0aGlzLmV4aXREYXRlVGltZS5nZXRIb3VycygpICogMTAwICsgdGhpcy5leGl0RGF0ZVRpbWUuZ2V0TWludXRlcygpXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSxcclxuICAgICAgICAgICAgdV9QbGF0ZTogZWZmZWN0aXZlUGxhdGVObyxcclxuICAgICAgICAgICAgdV9Eb3JzZVBsYXRlOiBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfVGNObzogdGhpcy50Y05vLnRyaW0oKSxcclxuICAgICAgICAgICAgdV9Ecml2ZXI6IHRoaXMuaXNOZXdDYXJyaWVyXHJcbiAgICAgICAgICAgICAgICA/IGAke3RoaXMubmV3Q2FycmllckZpcnN0bmFtZS50cmltKCl9ICR7dGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUudHJpbSgpfWBcclxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0RyaXZlckZpcnN0bmFtZTogdGhpcy5pc05ld0NhcnJpZXIgPyB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUudHJpbSgpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICB1X0RyaXZlckxhc3RuYW1lOiB0aGlzLmlzTmV3Q2FycmllciA/IHRoaXMubmV3Q2Fycmllckxhc3RuYW1lLnRyaW0oKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9Ecml2ZXJUZWw6IHRoaXMuaXNOZXdDYXJyaWVyID8gKHRoaXMubmV3Q2FycmllclRlbC50cmltKCkgfHwgdW5kZWZpbmVkKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9DYXJkQ29kZTogdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUsXHJcbiAgICAgICAgICAgIHVfRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZG9TYXZlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvYnMkID0gdGhpcy5yZWNvcmQ/LmRvY0VudHJ5XHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy5yZWNvcmQuZG9jRW50cnkudG9TdHJpbmcoKSwgZHRvKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlcnZpY2UuY3JlYXRlKGR0byk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgb2JzJC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlZC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNNYW51YWwgPSB0aGlzLnBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJyAmJiAhIWVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vKTtcclxuXHJcbiAgICAgICAgaWYgKGlzTWFudWFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbGF0ZVNlcnZpY2UuZ2V0TGlzdCgpLnN1YnNjcmliZShwbGF0ZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBNYW51ZWwgcGxha2EgZHVwbGljYXRlIGtvbnRyb2zDvFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZHVwbGljYXRlID0gcGxhdGVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT4gcC5jb2RlLnRyaW0oKS50b1VwcGVyQ2FzZSgpID09PSBlZmZlY3RpdmVQbGF0ZU5vXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlBsYXRlQWxyZWFkeUV4aXN0cycsIGVmZmVjdGl2ZVBsYXRlTm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aGlkZVllc0J0bjogdHJ1ZSwgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSwgZGlzbWlzc2libGU6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gZHVwbGljYXRlLmNvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gTWFudWVsIGRvcnNlIHBsYWthIGR1cGxpY2F0ZSBrb250cm9sw7xcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCcgJiYgZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFpbGVyRHVwbGljYXRlID0gcGxhdGVzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPT4gcC5jb2RlLnRyaW0oKS50b1VwcGVyQ2FzZSgpID09PSBlZmZlY3RpdmVUcmFpbGVyUGxhdGVOb1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWlsZXJEdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UGxhdGVBbHJlYWR5RXhpc3RzJywgZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aGlkZVllc0J0bjogdHJ1ZSwgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSwgZGlzbWlzc2libGU6IGZhbHNlfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm8gPSB0cmFpbGVyRHVwbGljYXRlLmNvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZG9TYXZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvU2F2ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk1vZGFsVmlzaWJsZUNoYW5nZSh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpc2libGUgPSB2YWw7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodmFsKTtcclxuICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uTW9kYWxWaXNpYmxlQ2hhbmdlKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbGlkYXRlVENLTih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgdGMgPSB2YWx1ZT8udHJpbSgpO1xyXG4gICAgICAgIGlmICghdGMgfHwgdGMubGVuZ3RoICE9PSAxMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghL15cXGR7MTF9JC8udGVzdCh0YykpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGNbMF0gPT09ICcwJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0Yy5zcGxpdCgnJykubWFwKE51bWJlcik7XHJcbiAgICAgICAgY29uc3QgZDEwID0gKChkWzBdICsgZFsyXSArIGRbNF0gKyBkWzZdICsgZFs4XSkgKiA3IC0gKGRbMV0gKyBkWzNdICsgZFs1XSArIGRbN10pKSAlIDEwO1xyXG4gICAgICAgIGlmIChkMTAgIT09IGRbOV0pIHJldHVybiBmYWxzZTtcclxuICAgICAgICBjb25zdCBkMTEgPSBkLnNsaWNlKDAsIDEwKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAlIDEwO1xyXG4gICAgICAgIHJldHVybiBkMTEgPT09IGRbMTBdO1xyXG4gICAgfVxyXG59XHJcbiIsIjxhYnAtbW9kYWwgW3Zpc2libGVdPVwidmlzaWJsZVwiICh2aXNpYmxlQ2hhbmdlKT1cIm9uTW9kYWxWaXNpYmxlQ2hhbmdlKCRldmVudClcIiBbb3B0aW9uc109XCJ7IHNpemU6ICdsZycsIGJhY2tkcm9wOiAnc3RhdGljJyB9XCI+XHJcbiAgPG5nLXRlbXBsYXRlICNhYnBIZWFkZXI+XHJcbiAgICA8aDM+e3sgcmVjb3JkPy5kb2NFbnRyeSA/ICgnQWJwVWk6OkVkaXQnIHwgYWJwTG9jYWxpemF0aW9uKSA6ICgnS2Fkb29nbHU6Ok5ld1JlY29yZCcgfCBhYnBMb2NhbGl6YXRpb24pIH19PC9oMz5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEJvZHk+XHJcblxyXG4gICAgPCEtLSBHaXJpxZ8gLyDDh8Sxa8SxxZ8gQmlsZ2lsZXJpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbG9jayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RW50cnlFeGl0SW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkVudHJ5RGF0ZVRpbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJlbnRyeURhdGVUaW1lXCJcclxuICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGVUaW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZXhpdERhdGVUaW1lXCJcclxuICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgZGlzcGxheUZvcm1hdD1cImRkLk1NLnl5eXkgSEg6bW1cIlxyXG4gICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6R2F0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LXNlbGVjdC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZ2F0ZUNvZGVcIlxyXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJnYXRlRGF0YVwiXHJcbiAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiXHJcbiAgICAgICAgICAgIHZhbHVlRXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpTZWxlY3RHYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC1zZWxlY3QtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQXJhw6cgQmlsZ2lsZXJpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cnVjayBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6VmVoaWNsZUluZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgQXJhw6cgSGFyZWtldCBUw7xyw7wgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgIFtnZXRGbl09XCJ0eXBlRGF0YVwiXHJcbiAgICAgICAgICBbY29sdW1uc109XCJ0eXBlQ29sdW1uc1wiXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInNlbGVjdGVkVHlwZU5hbWVcIlxyXG4gICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVHlwZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6UGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFZlaGljbGVQbGF0ZXNcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJwbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICBrZXlFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFBsYXRlTm9cIlxyXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25QbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicGxhdGVJbnB1dE1vZGUgPSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5Ym9hcmQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cIm1hbnVhbFBsYXRlTm9cIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgIChvbkZvY3VzT3V0KT1cIm9uTWFudWFsUGxhdGVGb2N1c091dCgpXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpc3QgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpTZWxlY3RGcm9tTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpEb3JzZVBsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ2xvb2t1cCdcIj5cclxuICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRUcmFpbGVyUGxhdGVzXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwicGxhdGVDb2x1bW5zXCJcclxuICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJjb2RlXCJcclxuICAgICAgICAgICAga2V5RXhwcj1cImNvZGVcIlxyXG4gICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRUcmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwidHJhaWxlclBsYXRlSW5wdXRNb2RlID0gJ21hbnVhbCdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWtleWJvYXJkIG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6TWFudWFsRW50cnknIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnXCI+XHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwibWFudWFsVHJhaWxlclBsYXRlTm9cIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgIChvbkZvY3VzT3V0KT1cIm9uTWFudWFsVHJhaWxlclBsYXRlRm9jdXNPdXQoKVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInNtYWxsIHRleHQtcHJpbWFyeVwiIChjbGljayk9XCJ0cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlNlbGVjdEZyb21MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFPDvHLDvGPDvCAmIEZpcm1hIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXItYm90dG9tIHBiLTIgbWItMyBmdy1ib2xkIHRleHQtc2Vjb25kYXJ5XCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pZC1jYXJkIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpEcml2ZXJBbmRDb21wYW55JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMVwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0wIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAge3sgaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyh2YWx1ZSldPVwiaXNUY0NpdGl6ZW5cIiB0ZXh0PVwiVC5DLiBWYXRhbmRhxZ/EsVwiPjwvZHgtY2hlY2stYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGNMb29rdXBNb2RlXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcbiAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cInRjTm9cIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpc1RjQ2l0aXplbiA/ICgnS2Fkb29nbHU6OlRjSWRlbnRpdHlObycgfCBhYnBMb2NhbGl6YXRpb24pIDogJ0tpbWxpayBObydcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi1zbSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzVGNRdWVyeWluZ1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInF1ZXJ5Q2FycmllckJ5VGNObygpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICB7eyAoaXNUY1F1ZXJ5aW5nID8gJ0thZG9vZ2x1OjpRdWVyeWluZycgOiAnS2Fkb29nbHU6OlF1ZXJ5JykgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInNtYWxsIHRleHQtcHJpbWFyeVwiIChjbGljayk9XCJ0Y0xvb2t1cE1vZGUgPSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1saXN0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6U2VsZWN0RnJvbUxpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0Y0xvb2t1cE1vZGVcIj5cclxuICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICBbZ2V0Rm5dPVwiY2FycmllckRhdGFcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJjYXJyaWVyQ29sdW1uc1wiXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZENhcnJpZXJOYW1lXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uQ2Fycmllckxvb2t1cFNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwidGNMb29rdXBNb2RlID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWtleWJvYXJkIG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6UXVlcnlCeVRjJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1ldmN1dCBzw7xyw7xjw7w6IHNhZGVjZSBhZMSxIGfDtnN0ZXIgKHJlYWRvbmx5KSAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc05ld0NhcnJpZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpEcml2ZXJOYW1lU3VybmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwic2VsZWN0ZWRDYXJyaWVyTmFtZVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDwhLS0gWWVuaSBzw7xyw7xjw7w6IEFkLCBTb3lhZCwgVGVsZWZvbiBhbGFubGFyxLFuxLEgZ8O2c3RlciAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTmV3Q2FycmllclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpGaXJzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJuZXdDYXJyaWVyRmlyc3RuYW1lXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpGaXJzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpMYXN0TmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX0gPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgIFsodmFsdWUpXT1cIm5ld0NhcnJpZXJMYXN0bmFtZVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6TGFzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlBob25lJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJuZXdDYXJyaWVyVGVsXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6UGhvbmUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHNtYWxsIHB5LTEgbWItM1wiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZSBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpOZXdEcml2ZXJBbGVydCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OkJ1c2luZXNzUGFydG5lcicgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgW2dldEZuXT1cImJ1c2luZXNzUGFydG5lckRhdGFcIlxyXG4gICAgICAgICAgW2NvbHVtbnNdPVwiYnVzaW5lc3NQYXJ0bmVyQ29sdW1uc1wiXHJcbiAgICAgICAgICBkaXNwbGF5TmFtZT1cImNhcmROYW1lXCJcclxuICAgICAgICAgIGtleUV4cHI9XCJjYXJkQ29kZVwiXHJcbiAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lXCJcclxuICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkJ1c2luZXNzUGFydG5lclNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQcOnxLFrbGFtYSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpEZXNjcmlwdGlvbicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICA8ZHgtdGV4dC1hcmVhXHJcbiAgICAgICAgWyh2YWx1ZSldPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgIFtoZWlnaHRdPVwiODBcIlxyXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICA8L2R4LXRleHQtYXJlYT5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2FicEZvb3Rlcj5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAge3sgJ0FicFVpOjpDYW5jZWwnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgIGljb25DbGFzcz1cImZhIGZhLXNhdmVcIlxyXG4gICAgICBidXR0b25UeXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcclxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICB7eyAnQWJwVWk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2FicC1idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==
622
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rYWRvb2dsdS9zcmMvbGliL2hpdC1jb21wb25lbnRzL2hpdC1mYWN0b3J5LWVudHJ5L2hpdC1mYWN0b3J5LWVudHJ5LWZvcm0vaGl0LWZhY3RvcnktZW50cnktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFldkcsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFTbkMsTUFBTSxPQUFPLDRCQUE0QjtJQTZGckMsWUFDWSxZQUFpQyxFQUNqQyxPQUErQixFQUMvQixvQkFBNkMsRUFDN0MsWUFBNkIsRUFDN0Isa0JBQXlDLEVBQ3pDLHNCQUFpRCxFQUNqRCxlQUFtQyxFQUNuQyxtQkFBd0MsRUFDeEMsb0JBQTZDLEVBQzdDLDJCQUEyRDtRQVQzRCxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFDL0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQUN6QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQTJCO1FBQ2pELG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQUNuQyx3QkFBbUIsR0FB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LDRCQUE0QjtzYkFJN0IsT0FBTztzQkFBZixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0UsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHtMb2NhbGl6YXRpb25TZXJ2aWNlfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQge0hpdEZhY3RvcnlFbnRyeVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtZmFjdG9yeS1lbnRyeS9oaXQtZmFjdG9yeS1lbnRyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIaXRWZWhpY2xlVHlwZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtdmVoaWNsZS10eXBlL2hpdC12ZWhpY2xlLXR5cGUuc2VydmljZSc7XHJcbmltcG9ydCB7VmVoaWNsZVR5cGV9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtdmVoaWNsZS10eXBlL21vZGVscyc7XHJcbmltcG9ydCB7UGxhdGV9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtcGxhdGUvbW9kZWxzJztcclxuaW1wb3J0IHtDYXJyaWVyUGVyc29ufSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWNhcnJpZXItcGVyc29uL21vZGVscyc7XHJcbmltcG9ydCB7SGl0Q2FycmllclBlcnNvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtY2Fycmllci1wZXJzb24vaGl0LWNhcnJpZXItcGVyc29uLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hpdFBsYXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1wbGF0ZS9oaXQtcGxhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7RmFjdG9yeUVudHJ5LCBTYXZlRmFjdG9yeUVudHJ5RHRvfSBmcm9tIFwiLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1mYWN0b3J5LWVudHJ5L21vZGVsc1wiO1xyXG5pbXBvcnQge0hpdEJ1c2luZXNzUGFydG5lclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtYnVzaW5lc3MtcGFydG5lci9oaXQtYnVzaW5lc3MtcGFydG5lci5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdXNpbmVzc1BhcnRuZXJ9IGZyb20gJy4uLy4uLy4uL2hpdC1wcm94eS9oaXQtYnVzaW5lc3MtcGFydG5lci9tb2RlbHMnO1xyXG5pbXBvcnQge0hpdFVzZXJHYXRlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC11c2VyLWdhdGUvaGl0LXVzZXItZ2F0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtHYXRlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWdhdGUvbW9kZWxzJztcclxuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtIaXRTdG9ja1RyYW5zZmVyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9oaXQtc3RvY2stdHJhbnNmZXIuc2VydmljZSc7XHJcbmltcG9ydCB7SGl0UHVyY2hhc2VEZWxpdmVyeU5vdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXB1cmNoYXNlLWRlbGl2ZXJ5LW5vdGUvaGl0LXB1cmNoYXNlLWRlbGl2ZXJ5LW5vdGUuc2VydmljZSc7XHJcbmltcG9ydCB7TG9va3VwVGFifSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaGl0LW1vZGFsL2hpdC1tb2RhbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi1oaXQtZmFjdG9yeS1lbnRyeS1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaXQtZmFjdG9yeS1lbnRyeS1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdEZhY3RvcnlFbnRyeUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgICBASW5wdXQoKSB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAgIEBJbnB1dCgpIHJlY29yZDogRmFjdG9yeUVudHJ5IHwgbnVsbCA9IG51bGw7XHJcbiAgICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIC8vIExvb2t1cCBkYXRhIGFycmF5cyBmb3IgbW9kYWxzXHJcbiAgICB0eXBlRGF0YTogVmVoaWNsZVR5cGVbXSA9IFtdO1xyXG4gICAgY2FycmllckRhdGE6IENhcnJpZXJQZXJzb25bXSA9IFtdO1xyXG5cclxuICAgIC8vIExhenkgbG9hZGVycyBmb3IgcGxhdGUgbG9va3VwcyDigJQgZmlsdGVyZWQgYnkgdV9Jc1RyYWlsZXJcclxuICAgIGxvYWRWZWhpY2xlUGxhdGVzID0gKCkgPT4gdGhpcy5wbGF0ZVNlcnZpY2UuZ2V0TGlzdCgpLnBpcGUoXHJcbiAgICAgICAgbWFwKHBsYXRlcyA9PiBwbGF0ZXMuZmlsdGVyKHAgPT4gcC51X0lzVHJhaWxlciAhPT0gJ1knKSlcclxuICAgICk7XHJcbiAgICBsb2FkVHJhaWxlclBsYXRlcyA9ICgpID0+IHRoaXMucGxhdGVTZXJ2aWNlLmdldExpc3QoKS5waXBlKFxyXG4gICAgICAgIG1hcChwbGF0ZXMgPT4gcGxhdGVzLmZpbHRlcihwID0+IHAudV9Jc1RyYWlsZXIgPT09ICdZJykpXHJcbiAgICApO1xyXG4gICAgZ2F0ZURhdGE6IEdhdGVbXSA9IFtdO1xyXG4gICAgZGVmYXVsdEdhdGVDb2RlID0gJyc7XHJcblxyXG4gICAgLy8gQ29sdW1uIGNvbmZpZ3MgZm9yIGxvb2t1cCBtb2RhbHNcclxuICAgIHR5cGVDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDB9LFxyXG4gICAgICAgIHtkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0FkJ30sXHJcbiAgICBdO1xyXG4gICAgcGxhdGVDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ1BsYWthJywgd2lkdGg6IDEwMH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnTmFtZSd9LFxyXG4gICAgXTtcclxuICAgIGNhcnJpZXJDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ1QuQy4gS2ltbGlrIE5vJywgd2lkdGg6IDE0MH0sXHJcbiAgICAgICAge2RhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQWQgU295YWQnfSxcclxuICAgIF07XHJcbiAgICBidXNpbmVzc1BhcnRuZXJDb2x1bW5zID0gW1xyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkQ29kZScsIGNhcHRpb246ICdDYXJpIEtvZCcsIHdpZHRoOiAxMjB9LFxyXG4gICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkTmFtZScsIGNhcHRpb246ICdDYXJpIFVudmFuJ30sXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIEZvcm0gZmllbGRzXHJcbiAgICBnYXRlQ29kZSA9ICcnO1xyXG4gICAgZW50cnlEYXRlVGltZTogRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgZXhpdERhdGVUaW1lOiBEYXRlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICBzZWxlY3RlZFR5cGU6IFZlaGljbGVUeXBlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFBsYXRlTm8gPSAnJztcclxuICAgIHRjTm8gPSAnJztcclxuICAgIHNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgIGJ1c2luZXNzUGFydG5lckRhdGE6IEJ1c2luZXNzUGFydG5lcltdID0gW107XHJcbiAgICBzZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSAnJztcclxuICAgIHNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgZGVzY3JpcHRpb24gPSAnJztcclxuXHJcbiAgICAvLyBQbGF0ZSBpbnB1dCBtb2RlXHJcbiAgICBwbGF0ZUlucHV0TW9kZTogJ2xvb2t1cCcgfCAnbWFudWFsJyA9ICdsb29rdXAnO1xyXG4gICAgbWFudWFsUGxhdGVObyA9ICcnO1xyXG5cclxuICAgIC8vIFRyYWlsZXIgcGxhdGVcclxuICAgIHRyYWlsZXJQbGF0ZUlucHV0TW9kZTogJ2xvb2t1cCcgfCAnbWFudWFsJyA9ICdsb29rdXAnO1xyXG4gICAgc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9ICcnO1xyXG4gICAgbWFudWFsVHJhaWxlclBsYXRlTm8gPSAnJztcclxuXHJcbiAgICAvLyBDYXJyaWVyIFRDIG1vZGVcclxuICAgIHRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgaXNUY1F1ZXJ5aW5nID0gZmFsc2U7XHJcbiAgICBpc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBOZXcgY2FycmllciBmaWVsZHNcclxuICAgIG5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgIG5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgbmV3Q2FycmllclRlbCA9ICcnO1xyXG5cclxuICAgIGlzVGNDaXRpemVuID0gdHJ1ZTtcclxuICAgIGlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIC8vIFdheWJpbGwgKFNTTUcgLyBTdG9rIE5ha2xpKSDigJQgeWFsbsSxemNhIE1hbCBHw4cgPSBZIG9sYW4gaGFyZWtldCB0aXBsZXJpbmRlIGfDtnN0ZXJpbGlyXHJcbiAgICB3YXliaWxsVGFiczogTG9va3VwVGFiW10gPSBbXTtcclxuICAgIHdheWJpbGxObyA9ICcnO1xyXG4gICAgd2F5YmlsbERvY0VudHJ5OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvLyBXYXliaWxsIHNlw6dpbWkgc29ucmFzxLEgYmFja2VuZCdkZW4gb3RvbWF0aWsgZG9sZHVydWxhbiBnaXpsaSBhbGFubGFyXHJcbiAgICB3YXliaWxsSXJzYWxpeWVObyA9ICcnOyAgICAgICAgICAgICAgLy8gdV9FRkFUTk8gIOKGkiB1X0Rlc3BhdGNoQWR2aWNlTm9cclxuICAgIHdheWJpbGxBdXRvUGxhdGUgPSAnJzsgICAgICAgICAgICAgICAvLyB1X0FyYWNQbGFrYXNpXHJcbiAgICB3YXliaWxsQXV0b0RvcnNlUGxhdGUgPSAnJzsgICAgICAgICAgLy8gdV9Eb3JzZVBsYWthbGFyXHJcbiAgICB3YXliaWxsQXV0b1RjTm8gPSAnJzsgICAgICAgICAgICAgICAgLy8gdV9Tb2ZvcktpbWxpa1xyXG4gICAgd2F5YmlsbEF1dG9Ecml2ZXJGaXJzdG5hbWUgPSAnJzsgICAgIC8vIHVfU29mb3JBZFxyXG4gICAgd2F5YmlsbEF1dG9Ecml2ZXJMYXN0bmFtZSA9ICcnOyAgICAgIC8vIHVfU29mb3JTb3lhZGlcclxuICAgIHdheWJpbGxBdXRvRHJpdmVyTmFtZSA9ICcnOyAgICAgICAgICAvLyB1X1NvZm9yQWQgKyB1X1NvZm9yU295YWRpXHJcbiAgICB3YXliaWxsQXV0b0NhcmRDb2RlID0gJyc7ICAgICAgICAgICAgLy8gY2FyZENvZGVcclxuICAgIHdheWJpbGxTb3VyY2VUeXBlOiAnc3RvY2tUcmFuc2ZlcicgfCAncHVyY2hhc2VEZWxpdmVyeScgfCBudWxsID0gbnVsbDtcclxuICAgIGlzV2F5YmlsbExvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IEhpdEZhY3RvcnlFbnRyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjYXJyaWVyUGVyc29uU2VydmljZTogSGl0Q2FycmllclBlcnNvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwbGF0ZVNlcnZpY2U6IEhpdFBsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZlaGljbGVUeXBlU2VydmljZTogSGl0VmVoaWNsZVR5cGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYnVzaW5lc3NQYXJ0bmVyU2VydmljZTogSGl0QnVzaW5lc3NQYXJ0bmVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVzZXJHYXRlU2VydmljZTogSGl0VXNlckdhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHN0b2NrVHJhbnNmZXJTZXJ2aWNlOiBIaXRTdG9ja1RyYW5zZmVyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHB1cmNoYXNlRGVsaXZlcnlOb3RlU2VydmljZTogSGl0UHVyY2hhc2VEZWxpdmVyeU5vdGVTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52ZWhpY2xlVHlwZVNlcnZpY2UuZ2V0TGlzdCgpLnN1YnNjcmliZShkID0+IHtcclxuICAgICAgICAgICAgdGhpcy50eXBlRGF0YSA9IGQ7XHJcbiAgICAgICAgICAgIC8vIEZvcm0gZMO8emVubGVtZSBtb2R1bmRhIGHDp8Sxa3NhIHR5cGVEYXRhIHnDvGtsZW5kaWt0ZW4gc29ucmEgc2VsZWN0ZWRUeXBlJ8SxIMOnw7Z6XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlY29yZD8udV9FbnRyeVR5cGUgJiYgIXRoaXMuc2VsZWN0ZWRUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZCA9IGQuZmluZCh0ID0+IHQuY29kZSA9PT0gdGhpcy5yZWNvcmQudV9FbnRyeVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB0aGlzLnNlbGVjdGVkVHlwZSA9IGZvdW5kO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jYXJyaWVyUGVyc29uU2VydmljZS5nZXRMaXN0KCkuc3Vic2NyaWJlKGQgPT4gKHRoaXMuY2FycmllckRhdGEgPSBkKSk7XHJcbiAgICAgICAgdGhpcy5idXNpbmVzc1BhcnRuZXJTZXJ2aWNlLmdldExpc3QoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5idXNpbmVzc1BhcnRuZXJEYXRhID0gZCkpO1xyXG4gICAgICAgIHRoaXMudXNlckdhdGVTZXJ2aWNlLmdldE15R2F0ZXMoKS5zdWJzY3JpYmUoZCA9PiAodGhpcy5nYXRlRGF0YSA9IGQpKTtcclxuICAgICAgICB0aGlzLnVzZXJHYXRlU2VydmljZS5nZXRNeURlZmF1bHRHYXRlQ29kZSgpLnN1YnNjcmliZShkID0+ICh0aGlzLmRlZmF1bHRHYXRlQ29kZSA9IGQgPz8gJycpKTtcclxuXHJcbiAgICAgICAgY29uc3QgbCA9IChrZXk6IHN0cmluZykgPT4gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjonICsga2V5KTtcclxuICAgICAgICBjb25zdCB3YXliaWxsRGF0ZUZyb20gPSAoKCkgPT4geyBjb25zdCBkID0gbmV3IERhdGUoKTsgZC5zZXREYXRlKGQuZ2V0RGF0ZSgpIC0gMyk7IHJldHVybiBkOyB9KSgpO1xyXG4gICAgICAgIGNvbnN0IHdheWJpbGxEYXRlVG8gPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbFRhYnMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBsKCdXYXliaWxsVGFiX1N0b2NrVHJhbnNmZXInKSxcclxuICAgICAgICAgICAgICAgIGxvYWRGbjogKHBhcmFtcz86IGFueSkgPT4gdGhpcy5zdG9ja1RyYW5zZmVyU2VydmljZS5nZXRMaXN0KHBhcmFtcyksXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ3VfRUZBVE5PJyxcclxuICAgICAgICAgICAgICAgIGtleUV4cHI6ICdkb2NFbnRyeScsXHJcbiAgICAgICAgICAgICAgICBzaG93RGF0ZUZpbHRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHREYXRlRnJvbTogd2F5YmlsbERhdGVGcm9tLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdERhdGVUbzogd2F5YmlsbERhdGVUbyxcclxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAnZG9jTnVtJywgICAgICAgIGNhcHRpb246IGwoJ0RvY3VtZW50Tm8nKSwgICAgd2lkdGg6IDEwMH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfRUZBVE5PJywgICAgICBjYXB0aW9uOiBsKCdXYXliaWxsTm8nKSwgICAgIHdpZHRoOiAxMjB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkQ29kZScsICAgICAgY2FwdGlvbjogbCgnQ2FyZENvZGUnKSwgICAgICB3aWR0aDogMTIwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAnY2FyZE5hbWUnLCAgICAgIGNhcHRpb246IGwoJ0NhcmROYW1lJyl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdmcm9tV2FyZWhvdXNlJywgY2FwdGlvbjogbCgnRXhpdFdhcmVob3VzZScpLCB3aWR0aDogMTQwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAndV9BcmFjUGxha2FzaScsIGNhcHRpb246IGwoJ1ZlaGljbGVQbGF0ZScpLCAgd2lkdGg6IDExMH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfRG9yc2VQbGFrYWxhcicsIGNhcHRpb246IGwoJ1RyYWlsZXJQbGF0ZScpLCB3aWR0aDogMTEwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAndV9Tb2ZvckFkJywgICAgIGNhcHRpb246IGwoJ0RyaXZlck5hbWUnKX0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfU29mb3JTb3lhZGknLCBjYXB0aW9uOiBsKCdEcml2ZXJTdXJuYW1lJyl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICd1X1NvZm9yS2ltbGlrJywgY2FwdGlvbjogbCgnVGNJZGVudGl0eU5vJyksIHdpZHRoOiAxMzB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdjb21tZW50cycsICAgICAgY2FwdGlvbjogbCgnRGVzY3JpcHRpb24nKX0sXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZTogbCgnV2F5YmlsbFRhYl9QdXJjaGFzZURlbGl2ZXJ5JyksXHJcbiAgICAgICAgICAgICAgICBsb2FkRm46IChwYXJhbXM/OiBhbnkpID0+IHRoaXMucHVyY2hhc2VEZWxpdmVyeU5vdGVTZXJ2aWNlLmdldExpc3QocGFyYW1zKSxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAndV9FRkFUTk8nLFxyXG4gICAgICAgICAgICAgICAga2V5RXhwcjogJ2RvY0VudHJ5JyxcclxuICAgICAgICAgICAgICAgIHNob3dEYXRlRmlsdGVyOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdERhdGVGcm9tOiB3YXliaWxsRGF0ZUZyb20sXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGF0ZVRvOiB3YXliaWxsRGF0ZVRvLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdkb2NOdW0nLCAgICAgICAgY2FwdGlvbjogbCgnRG9jdW1lbnRObycpLCAgICB3aWR0aDogMTAwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAndV9FRkFUTk8nLCAgICAgIGNhcHRpb246IGwoJ1dheWJpbGxObycpLCAgICAgd2lkdGg6IDEyMH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ2NhcmRDb2RlJywgICAgICBjYXB0aW9uOiBsKCdDYXJkQ29kZScpLCAgICAgIHdpZHRoOiAxMjB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICdjYXJkTmFtZScsICAgICAgY2FwdGlvbjogbCgnQ2FyZE5hbWUnKX0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfQXJhY1BsYWthc2knLCBjYXB0aW9uOiBsKCdWZWhpY2xlUGxhdGUnKSwgIHdpZHRoOiAxMTB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICd1X0RvcnNlUGxha2FsYXInLCBjYXB0aW9uOiBsKCdUcmFpbGVyUGxhdGUnKSwgd2lkdGg6IDExMH0sXHJcbiAgICAgICAgICAgICAgICAgICAge2RhdGFGaWVsZDogJ3VfU29mb3JBZCcsICAgICBjYXB0aW9uOiBsKCdEcml2ZXJOYW1lJyl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtkYXRhRmllbGQ6ICd1X1NvZm9yU295YWRpJywgY2FwdGlvbjogbCgnRHJpdmVyU3VybmFtZScpfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAndV9Tb2ZvcktpbWxpaycsIGNhcHRpb246IGwoJ1RjSWRlbnRpdHlObycpLCB3aWR0aDogMTMwfSxcclxuICAgICAgICAgICAgICAgICAgICB7ZGF0YUZpZWxkOiAnY29tbWVudHMnLCAgICAgIGNhcHRpb246IGwoJ0Rlc2NyaXB0aW9uJyl9LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY2hhbmdlc1sndmlzaWJsZSddPy5jdXJyZW50VmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgdGhpcy5tYW51YWxQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgdGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm8gPSAnJztcclxuICAgICAgICB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgdGhpcy50Y0xvb2t1cE1vZGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubmV3Q2FycmllckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMubmV3Q2Fycmllckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy5uZXdDYXJyaWVyVGVsID0gJyc7XHJcblxyXG4gICAgICAgIHRoaXMud2F5YmlsbElyc2FsaXllTm8gPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvUGxhdGUgPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRG9yc2VQbGF0ZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9UY05vID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJOYW1lID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0NhcmRDb2RlID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsU291cmNlVHlwZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlY29yZCkge1xyXG4gICAgICAgICAgICB0aGlzLmdhdGVDb2RlID0gdGhpcy5yZWNvcmQudV9HYXRlQ29kZSA/PyAnJztcclxuICAgICAgICAgICAgdGhpcy5lbnRyeURhdGVUaW1lID0gdGhpcy5idWlsZERhdGVUaW1lKHRoaXMucmVjb3JkLnVfRW50cnlEYXRlLCB0aGlzLnJlY29yZC51X0VudHJ5VGltZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdERhdGVUaW1lICA9IHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLnJlY29yZC51X0V4aXREYXRlLCAgdGhpcy5yZWNvcmQudV9FeGl0VGltZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IHRoaXMucmVjb3JkLnVfRW50cnlUeXBlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZU5hbWUgPSB0aGlzLnJlY29yZC51X0VudHJ5VHlwZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMucmVjb3JkLnVfUGxhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJhaWxlclBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMucmVjb3JkLnVfRG9yc2VQbGF0ZSA/PyAnJyk7XHJcbiAgICAgICAgICAgIHRoaXMudGNObyA9IHRoaXMucmVjb3JkLnVfVGNObztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhcnJpZXJOYW1lID0gdGhpcy5yZWNvcmQudV9Ecml2ZXI7XHJcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0aGlzLnJlY29yZC51X0Rlc2NyaXB0aW9uO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9IHRoaXMucmVjb3JkLnVfQ2FyZENvZGUgPz8gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gdGhpcy5idXNpbmVzc1BhcnRuZXJEYXRhLmZpbmQocCA9PiBwLmNhcmRDb2RlID09PSB0aGlzLnJlY29yZC51X0NhcmRDb2RlKT8uY2FyZE5hbWUgPz8gdGhpcy5yZWNvcmQudV9DYXJkQ29kZSA/PyAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsTm8gPSB0aGlzLnJlY29yZC51X0Rlc3BhdGNoQWR2aWNlTm8gPz8gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbERvY0VudHJ5ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsSXJzYWxpeWVObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvUGxhdGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RvcnNlUGxhdGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b1RjTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0NhcmRDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbFNvdXJjZVR5cGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgLy8gQ2FycmllcidkYW4gVEMgdmF0YW5kYcWfxLEgYmlsZ2lzaW5pIG9rdVxyXG4gICAgICAgICAgICBjb25zdCBjYXJyaWVyID0gdGhpcy5jYXJyaWVyRGF0YS5maW5kKGMgPT4gYy5jb2RlID09PSB0aGlzLnJlY29yZC51X1RjTm8pO1xyXG4gICAgICAgICAgICB0aGlzLmlzVGNDaXRpemVuID0gY2FycmllciA/IGNhcnJpZXIudV9UY1Z0bmRzaU1pICE9PSAnTicgOiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2XDp2lsaSB0aXB0ZSBNYWwgR8OHIGJpbGdpc2luaSDDp8O2elxyXG4gICAgICAgICAgICBjb25zdCBmb3VuZFR5cGUgPSB0aGlzLnR5cGVEYXRhLmZpbmQodCA9PiB0LmNvZGUgPT09IHRoaXMucmVjb3JkLnVfRW50cnlUeXBlKTtcclxuICAgICAgICAgICAgaWYgKGZvdW5kVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBmb3VuZFR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmdhdGVDb2RlID0gdGhpcy5kZWZhdWx0R2F0ZUNvZGU7XHJcbiAgICAgICAgICAgIHRoaXMuZW50cnlEYXRlVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXhpdERhdGVUaW1lID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudGNObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2Fycmllck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxEb2NFbnRyeSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbElyc2FsaXllTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b1BsYXRlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9Eb3JzZVBsYXRlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9UY05vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckxhc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9DYXJkQ29kZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxTb3VyY2VUeXBlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZERhdGVUaW1lKGRhdGVTdHI/OiBzdHJpbmcsIHRpbWVOdW0/OiBudW1iZXIpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICAgICAgaWYgKHRpbWVOdW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBkLnNldEhvdXJzKE1hdGguZmxvb3IodGltZU51bSAvIDEwMCksIHRpbWVOdW0gJSAxMDAsIDAsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZDtcclxuICAgIH1cclxuXHJcbiAgICBvblR5cGVTZWxlY3RlZChlOiBWZWhpY2xlVHlwZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghZSkge1xyXG4gICAgICAgICAgICAvLyBIYXJla2V0IHRpcGkgdGVtaXpsZW5kaSDigJQgaWxnaWxpIHTDvG0gYWxhbmxhcsSxIHPEsWbEsXJsYSB2ZSBnaXpsZVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZUNvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXRlTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy5tYW51YWxQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMucGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICAgICAgdGhpcy50Y05vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmlzTmV3Q2FycmllciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyVGVsID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMudGNMb29rdXBNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbE5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbERvY0VudHJ5ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsSXJzYWxpeWVObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvUGxhdGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RvcnNlUGxhdGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b1RjTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsQXV0b0NhcmRDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbFNvdXJjZVR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUeXBlQ29kZSA9IGUuY29kZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVHlwZU5hbWUgPSBlLm5hbWU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBlO1xyXG4gICAgICAgIC8vIEhhcmVrZXQgdGlwaSBkZcSfacWfaW5jZSB3YXliaWxsIHNlw6dpbWluaSB2ZSBvdG9tYXRpayBkb2xkdXJ1bGFuIGFsYW5sYXLEsSBzxLFmxLFybGFcclxuICAgICAgICB0aGlzLndheWJpbGxObyA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbERvY0VudHJ5ID0gbnVsbDtcclxuICAgICAgICB0aGlzLndheWJpbGxJcnNhbGl5ZU5vID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b1BsYXRlID0gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0RvcnNlUGxhdGUgPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvVGNObyA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTmFtZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9DYXJkQ29kZSA9ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbFNvdXJjZVR5cGUgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc0dvb2RzVHlwZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFR5cGU/LnVfTWFsR0MgPT09ICdZJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2hvd0V4dHJhRmllbGRzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMuc2VsZWN0ZWRUeXBlQ29kZSAmJiAhdGhpcy5pc0dvb2RzVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBvblBsYXRlU2VsZWN0ZWQoZTogUGxhdGUpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUoZS5jb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKGU6IFBsYXRlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShlLmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWFudWFsUGxhdGVGb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbnVhbFBsYXRlTm8gPSB0aGlzLmZvcm1hdFBsYXRlKHRoaXMubWFudWFsUGxhdGVObyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25NYW51YWxUcmFpbGVyUGxhdGVGb2N1c091dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZSh0aGlzLm1hbnVhbFRyYWlsZXJQbGF0ZU5vKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogVMO8cmsgcGxha2FzxLFuxLEgXCIzNCBITUEgMDAxXCIgZm9ybWF0xLFuYSBkw7Zuw7zFn3TDvHLDvHIgKi9cclxuICAgIGZvcm1hdFBsYXRlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybiB2YWx1ZTtcclxuICAgICAgICBjb25zdCByYXcgPSB2YWx1ZS5yZXBsYWNlKC9bXkEtWmEtejAtOcOHxJ7EsMOWxZ7DnMOnxJ/EscO2xZ/DvF0vZywgJycpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByYXcubWF0Y2goL14oXFxkezJ9KShbQS1aw4fEnsSww5bFnsOcXXsxLDN9KShcXGR7MSw0fSkkLyk7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHttYXRjaFsxXX0gJHttYXRjaFsyXX0gJHttYXRjaFszXX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DYXJyaWVyTG9va3VwU2VsZWN0ZWQoZTogQ2FycmllclBlcnNvbik6IHZvaWQge1xyXG4gICAgICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9IGUubmFtZTtcclxuICAgICAgICB0aGlzLnRjTm8gPSBlLmNvZGU7XHJcbiAgICAgICAgdGhpcy5pc1RjQ2l0aXplbiA9IGUudV9UY1Z0bmRzaU1pICE9PSAnTic7XHJcbiAgICAgICAgdGhpcy5pc05ld0NhcnJpZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRjTG9va3VwTW9kZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQnVzaW5lc3NQYXJ0bmVyU2VsZWN0ZWQoZTogQnVzaW5lc3NQYXJ0bmVyKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJDb2RlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGUgPSBlLmNhcmRDb2RlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCdXNpbmVzc1BhcnRuZXJOYW1lID0gZS5jYXJkTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBvbldheWJpbGxTZWxlY3RlZChlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWUpIHtcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsTm8gPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsRG9jRW50cnkgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxJcnNhbGl5ZU5vID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9QbGF0ZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRG9yc2VQbGF0ZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvVGNObyA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyRmlyc3RuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLndheWJpbGxBdXRvQ2FyZENvZGUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy53YXliaWxsU291cmNlVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExvb2t1cCd0YSB1X0VGQVROTyBnw7ZzdGVyaWxpciAoZGlzcGxheU5hbWU6ICd1X0VGQVROTycpXHJcbiAgICAgICAgdGhpcy53YXliaWxsTm8gPSBlLnVfRUZBVE5PPy50b1N0cmluZygpID8/IGUuZG9jTnVtPy50b1N0cmluZygpID8/ICcnO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbERvY0VudHJ5ID0gZS5kb2NFbnRyeSA/PyBudWxsO1xyXG5cclxuICAgICAgICAvLyBLYXluYWsgdGlwaTogU3RvY2tUcmFuc2ZlcidkYSAnZnJvbVdhcmVob3VzZScgYWxhbsSxIHZhcmTEsXIsIFB1cmNoYXNlRGVsaXZlcnlOb3RlJ2RhIHlva3R1clxyXG4gICAgICAgIGNvbnN0IGlzU3RvY2tUcmFuc2ZlciA9ICdmcm9tV2FyZWhvdXNlJyBpbiBlO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbFNvdXJjZVR5cGUgPSBpc1N0b2NrVHJhbnNmZXIgPyAnc3RvY2tUcmFuc2ZlcicgOiAncHVyY2hhc2VEZWxpdmVyeSc7XHJcblxyXG4gICAgICAgIGlmICghZS5kb2NFbnRyeSkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmlzV2F5YmlsbExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IG9uTmV4dCA9IChkb2M6IGFueSkgPT4gdGhpcy5hcHBseVdheWJpbGxBdXRvRmlsbChkb2MpO1xyXG4gICAgICAgIGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7IHRoaXMuaXNXYXliaWxsTG9hZGluZyA9IGZhbHNlOyB9O1xyXG5cclxuICAgICAgICBpZiAoaXNTdG9ja1RyYW5zZmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvY2tUcmFuc2ZlclNlcnZpY2UuZ2V0KGUuZG9jRW50cnkpLnN1YnNjcmliZSh7IG5leHQ6IG9uTmV4dCwgZXJyb3I6IG9uRXJyb3IgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wdXJjaGFzZURlbGl2ZXJ5Tm90ZVNlcnZpY2UuZ2V0KGUuZG9jRW50cnkpLnN1YnNjcmliZSh7IG5leHQ6IG9uTmV4dCwgZXJyb3I6IG9uRXJyb3IgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwbHlXYXliaWxsQXV0b0ZpbGwoZG9jOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzV2F5YmlsbExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWRvYykgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyDEsHJzYWxpeWUgbnVtYXJhc8SxICh1X0VGQVROTykg4oCUIERUTydkYSB1X0Rlc3BhdGNoQWR2aWNlTm8gb2xhcmFrIGfDtm5kZXJpbGVjZWtcclxuICAgICAgICB0aGlzLndheWJpbGxJcnNhbGl5ZU5vID0gZG9jLnVfRUZBVE5PPy50cmltKCkgPz8gJyc7XHJcblxyXG4gICAgICAgIC8vIEFyYcOnIHBsYWthc8SxXHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b1BsYXRlID0gZG9jLnVfQXJhY1BsYWthc2k/LnRyaW0oKSA/PyAnJztcclxuXHJcbiAgICAgICAgLy8gRG9yc2UgcGxha2FcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRG9yc2VQbGF0ZSA9IGRvYy51X0RvcnNlUGxha2FsYXI/LnRyaW0oKSA/PyAnJztcclxuXHJcbiAgICAgICAgLy8gU8O8csO8Y8O8IFRDIGtpbWxpayBub1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9UY05vID0gZG9jLnVfU29mb3JLaW1saWs/LnRyaW0oKSA/PyAnJztcclxuXHJcbiAgICAgICAgLy8gQ2FyaSBrb2R1XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0NhcmRDb2RlID0gZG9jLmNhcmRDb2RlPy50cmltKCkgPz8gJyc7XHJcblxyXG4gICAgICAgIC8vIFPDvHLDvGPDvCBhZMSxIHNveWFkxLEgKGF5csSxIHZlIGJpcmxlxZ9paylcclxuICAgICAgICBjb25zdCBhZCAgICA9IGRvYy51X1NvZm9yQWQ/LnRyaW0oKSA/PyAnJztcclxuICAgICAgICBjb25zdCBzb3lhZCA9IGRvYy51X1NvZm9yU295YWRpPy50cmltKCkgPz8gJyc7XHJcbiAgICAgICAgdGhpcy53YXliaWxsQXV0b0RyaXZlckZpcnN0bmFtZSA9IGFkO1xyXG4gICAgICAgIHRoaXMud2F5YmlsbEF1dG9Ecml2ZXJMYXN0bmFtZSAgPSBzb3lhZDtcclxuICAgICAgICB0aGlzLndheWJpbGxBdXRvRHJpdmVyTmFtZSAgICAgID0gW2FkLCBzb3lhZF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcclxuXHJcbiAgICAgICAgLy8gVENLTiBhbGdvcml0bWFzxLFuYSBnw7ZyZSBUQyB2YXRhbmRhxZ/EsSBtxLEgYmVsaXJsZVxyXG4gICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0aGlzLnZhbGlkYXRlVENLTih0aGlzLndheWJpbGxBdXRvVGNObyk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnlDYXJyaWVyQnlUY05vKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRjID0gdGhpcy50Y05vPy50cmltKCk7XHJcbiAgICAgICAgaWYgKCF0Yykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UGxlYXNlRW50ZXJUY05vJyksICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1RjUXVlcnlpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FycmllclBlcnNvblNlcnZpY2UuZ2V0KHRjKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoY2FycmllcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RjUXVlcnlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChjYXJyaWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhcnJpZXJOYW1lID0gY2Fycmllci5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSBjYXJyaWVyLnVfVGNWdG5kc2lNaSAhPT0gJ04nO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXdDYXJyaWVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJyaWVyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXdDYXJyaWVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0NhcnJpZXJMYXN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3Q2FycmllclRlbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc1RjUXVlcnlpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNOZXdDYXJyaWVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Q2FycmllckZpcnN0bmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3Q2FycmllclRlbCA9ICcnO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlUGxhdGVObyA9IHRoaXMuZm9ybWF0UGxhdGUoXHJcbiAgICAgICAgICAgIHRoaXMucGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMubWFudWFsUGxhdGVOby50cmltKCkudG9VcHBlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkUGxhdGVOb1xyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vID0gdGhpcy5mb3JtYXRQbGF0ZShcclxuICAgICAgICAgICAgdGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMubWFudWFsVHJhaWxlclBsYXRlTm8udHJpbSgpLnRvVXBwZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZFRyYWlsZXJQbGF0ZU5vXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkVHlwZUNvZGUgfHwgKCF0aGlzLmlzR29vZHNUeXBlICYmICghZWZmZWN0aXZlUGxhdGVObyB8fCAhdGhpcy50Y05vPy50cmltKCkpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6RmlsbFJlcXVpcmVkRmllbGRzJyksICcnLCB7XHJcbiAgICAgICAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzR29vZHNUeXBlICYmICF0aGlzLndheWJpbGxObz8udHJpbSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpXYXliaWxsUmVxdWlyZWQnKSwgJycsIHtcclxuICAgICAgICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzR29vZHNUeXBlICYmIHRoaXMuaXNUY0NpdGl6ZW4gJiYgIXRoaXMudmFsaWRhdGVUQ0tOKHRoaXMudGNObykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybignR2XDp2Vyc2l6IFQuQy4gS2ltbGlrIE5vLiBMw7x0ZmVuIDExIGhhbmVsaSwgZ2XDp2VybGkgYmlyIFRDS04gZ2lyaW5pei4nLCAnJywge1xyXG4gICAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNHb29kc1R5cGUgJiYgdGhpcy5pc05ld0NhcnJpZXIgJiYgKCF0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWU/LnRyaW0oKSB8fCAhdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWU/LnRyaW0oKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkVudGVyTmV3RHJpdmVyTmFtZScpLCAnJywge1xyXG4gICAgICAgICAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkdG86IFNhdmVGYWN0b3J5RW50cnlEdG8gPSB7XHJcbiAgICAgICAgICAgIHVfR2F0ZUNvZGU6IHRoaXMuZ2F0ZUNvZGUsXHJcbiAgICAgICAgICAgIHVfRW50cnlEYXRlOiB0aGlzLmVudHJ5RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5lbnRyeURhdGVUaW1lLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRW50cnlUaW1lOiB0aGlzLmVudHJ5RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5lbnRyeURhdGVUaW1lLmdldEhvdXJzKCkgKiAxMDAgKyB0aGlzLmVudHJ5RGF0ZVRpbWUuZ2V0TWludXRlcygpXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9FeGl0RGF0ZTogdGhpcy5leGl0RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5leGl0RGF0ZVRpbWUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0RGF0ZVRpbWVcclxuICAgICAgICAgICAgICAgID8gdGhpcy5leGl0RGF0ZVRpbWUuZ2V0SG91cnMoKSAqIDEwMCArIHRoaXMuZXhpdERhdGVUaW1lLmdldE1pbnV0ZXMoKVxyXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHVfRW50cnlUeXBlOiB0aGlzLnNlbGVjdGVkVHlwZUNvZGUsXHJcbiAgICAgICAgICAgIHVfRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXHJcbiAgICAgICAgICAgIHVfVGNWdG5kc2lNaTogdGhpcy5pc1RjQ2l0aXplbiA/ICdZJyA6ICdOJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0dvb2RzVHlwZSkge1xyXG4gICAgICAgICAgICAvLyBNYWwgR8OHID0gWTogU2FkZWNlIGlyc2FsaXllIHJlZmVyYW5zxLEgZ8O2bmRlciwgYmFja2VuZCBTQVAndGFuIGRvxJ9ydWxheWFyYWsgZG9sZHVyYWNha1xyXG4gICAgICAgICAgICBkdG8udV9XYXliaWxsRG9jRW50cnkgPSB0aGlzLndheWJpbGxEb2NFbnRyeSA/PyB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGR0by51X1dheWJpbGxTb3VyY2VUeXBlID0gdGhpcy53YXliaWxsU291cmNlVHlwZSA/PyB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTWFsIEfDhyA9IE46IEFyYcOnIHZlIHPDvHLDvGPDvCBiaWxnaWxlcmluaSBmcm9udGVuZCdkZW4gZ8O2bmRlclxyXG4gICAgICAgICAgICBkdG8udV9QbGF0ZSA9IGVmZmVjdGl2ZVBsYXRlTm87XHJcbiAgICAgICAgICAgIGR0by51X0RvcnNlUGxhdGUgPSBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyB8fCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGR0by51X1RjTm8gPSB0aGlzLnRjTm8udHJpbSgpO1xyXG4gICAgICAgICAgICBkdG8udV9Ecml2ZXIgPSB0aGlzLmlzTmV3Q2FycmllclxyXG4gICAgICAgICAgICAgICAgPyBgJHt0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUudHJpbSgpfSAke3RoaXMubmV3Q2Fycmllckxhc3RuYW1lLnRyaW0oKX1gXHJcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgZHRvLnVfRHJpdmVyRmlyc3RuYW1lID0gdGhpcy5pc05ld0NhcnJpZXIgPyB0aGlzLm5ld0NhcnJpZXJGaXJzdG5hbWUudHJpbSgpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBkdG8udV9Ecml2ZXJMYXN0bmFtZSA9IHRoaXMuaXNOZXdDYXJyaWVyID8gdGhpcy5uZXdDYXJyaWVyTGFzdG5hbWUudHJpbSgpIDogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICBkdG8udV9Ecml2ZXJUZWwgPSB0aGlzLmlzTmV3Q2FycmllciA/ICh0aGlzLm5ld0NhcnJpZXJUZWwudHJpbSgpIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIGR0by51X0NhcmRDb2RlID0gdGhpcy5zZWxlY3RlZEJ1c2luZXNzUGFydG5lckNvZGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkb1NhdmUgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9icyQgPSB0aGlzLnJlY29yZD8uZG9jRW50cnlcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0aGlzLnJlY29yZC5kb2NFbnRyeS50b1N0cmluZygpLCBkdG8pXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2VydmljZS5jcmVhdGUoZHRvKTtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVkLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBpc01hbnVhbCA9IHRoaXMucGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy50cmFpbGVyUGxhdGVJbnB1dE1vZGUgPT09ICdtYW51YWwnICYmICEhZWZmZWN0aXZlVHJhaWxlclBsYXRlTm8pO1xyXG5cclxuICAgICAgICBpZiAoaXNNYW51YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsYXRlU2VydmljZS5nZXRMaXN0KCkuc3Vic2NyaWJlKHBsYXRlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIE1hbnVlbCBwbGFrYSBkdXBsaWNhdGUga29udHJvbMO8XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkdXBsaWNhdGUgPSBwbGF0ZXMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PiBwLmNvZGUudHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09IGVmZmVjdGl2ZVBsYXRlTm9cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb24ud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UGxhdGVBbHJlYWR5RXhpc3RzJywgZWZmZWN0aXZlUGxhdGVObyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLCBkaXNtaXNzaWJsZTogZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGxhdGVJbnB1dE1vZGUgPSAnbG9va3VwJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFBsYXRlTm8gPSBkdXBsaWNhdGUuY29kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBNYW51ZWwgZG9yc2UgcGxha2EgZHVwbGljYXRlIGtvbnRyb2zDvFxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJyAmJiBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYWlsZXJEdXBsaWNhdGUgPSBwbGF0ZXMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcCA9PiBwLmNvZGUudHJpbSgpLnRvVXBwZXJDYXNlKCkgPT09IGVmZmVjdGl2ZVRyYWlsZXJQbGF0ZU5vXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHJhaWxlckR1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpQbGF0ZUFscmVhZHlFeGlzdHMnLCBlZmZlY3RpdmVUcmFpbGVyUGxhdGVObyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtoaWRlWWVzQnRuOiB0cnVlLCBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLCBkaXNtaXNzaWJsZTogZmFsc2V9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhaWxlclBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFpbGVyUGxhdGVObyA9IHRyYWlsZXJEdXBsaWNhdGUuY29kZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBkb1NhdmUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9TYXZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTW9kYWxWaXNpYmxlQ2hhbmdlKHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHZhbDtcclxuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2YWwpO1xyXG4gICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Nb2RhbFZpc2libGVDaGFuZ2UoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdmFsaWRhdGVUQ0tOKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB0YyA9IHZhbHVlPy50cmltKCk7XHJcbiAgICAgICAgaWYgKCF0YyB8fCB0Yy5sZW5ndGggIT09IDExKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCEvXlxcZHsxMX0kLy50ZXN0KHRjKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0Y1swXSA9PT0gJzAnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZCA9IHRjLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcclxuICAgICAgICBjb25zdCBkMTAgPSAoKGRbMF0gKyBkWzJdICsgZFs0XSArIGRbNl0gKyBkWzhdKSAqIDcgLSAoZFsxXSArIGRbM10gKyBkWzVdICsgZFs3XSkpICUgMTA7XHJcbiAgICAgICAgaWYgKGQxMCAhPT0gZFs5XSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGQxMSA9IGQuc2xpY2UoMCwgMTApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApICUgMTA7XHJcbiAgICAgICAgcmV0dXJuIGQxMSA9PT0gZFsxMF07XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4iLCI8YWJwLW1vZGFsIFt2aXNpYmxlXT1cInZpc2libGVcIiAodmlzaWJsZUNoYW5nZSk9XCJvbk1vZGFsVmlzaWJsZUNoYW5nZSgkZXZlbnQpXCIgW29wdGlvbnNdPVwieyBzaXplOiAnbGcnLCBiYWNrZHJvcDogJ3N0YXRpYycgfVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjYWJwSGVhZGVyPlxyXG4gICAgPGgzPnt7IHJlY29yZD8uZG9jRW50cnkgPyAoJ0FicFVpOjpFZGl0JyB8IGFicExvY2FsaXphdGlvbikgOiAoJ0thZG9vZ2x1OjpOZXdSZWNvcmQnIHwgYWJwTG9jYWxpemF0aW9uKSB9fTwvaDM+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBCb2R5PlxyXG5cclxuICAgIDwhLS0gR2lyacWfIC8gw4fEsWvEscWfIEJpbGdpbGVyaSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2xvY2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OkVudHJ5RXhpdEluZm8nIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpFbnRyeURhdGVUaW1lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtZGF0ZS1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiZW50cnlEYXRlVGltZVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZVwiXHJcbiAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICA8L2R4LWRhdGUtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlVGltZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImV4aXREYXRlVGltZVwiXHJcbiAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZVwiXHJcbiAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICA8L2R4LWRhdGUtYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkdhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgIDxkeC1zZWxlY3QtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImdhdGVDb2RlXCJcclxuICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZ2F0ZURhdGFcIlxyXG4gICAgICAgICAgICBkaXNwbGF5RXhwcj1cIm5hbWVcIlxyXG4gICAgICAgICAgICB2YWx1ZUV4cHI9XCJjb2RlXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6U2VsZWN0R2F0ZScgfCBhYnBMb2NhbGl6YXRpb25cIlxyXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgIDwvZHgtc2VsZWN0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFyYcOnIEJpbGdpbGVyaSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJ1Y2sgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlZlaGljbGVJbmZvJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgIEFyYcOnIEhhcmVrZXQgVMO8csO8IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICBbZ2V0Rm5dPVwidHlwZURhdGFcIlxyXG4gICAgICAgICAgW2NvbHVtbnNdPVwidHlwZUNvbHVtbnNcIlxyXG4gICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFR5cGVOYW1lXCJcclxuICAgICAgICAgIChzZWxlY3RlZCk9XCJvblR5cGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIE1hbCBHw4cgPSBZOiBTU01HIC8gU3RvayBOYWtsaSBzZcOnaW1pIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwic2VsZWN0ZWRUeXBlQ29kZSAmJiBpc0dvb2RzVHlwZVwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OldheWJpbGxOdW1iZXInIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICBbdGFic109XCJ3YXliaWxsVGFic1wiXHJcbiAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwid2F5YmlsbE5vXCJcclxuICAgICAgICAgIChzZWxlY3RlZCk9XCJvbldheWJpbGxTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwic2hvd0V4dHJhRmllbGRzXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6UGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFZlaGljbGVQbGF0ZXNcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJwbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICBrZXlFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFBsYXRlTm9cIlxyXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25QbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwicGxhdGVJbnB1dE1vZGUgPSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5Ym9hcmQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBsYXRlSW5wdXRNb2RlID09PSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cIm1hbnVhbFBsYXRlTm9cIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpFbnRlclBsYXRlJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgIChvbkZvY3VzT3V0KT1cIm9uTWFudWFsUGxhdGVGb2N1c091dCgpXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInBsYXRlSW5wdXRNb2RlID0gJ2xvb2t1cCdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWxpc3QgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpTZWxlY3RGcm9tTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cInNob3dFeHRyYUZpZWxkc1wiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICB7eyAnS2Fkb29nbHU6OkRvcnNlUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidHJhaWxlclBsYXRlSW5wdXRNb2RlID09PSAnbG9va3VwJ1wiPlxyXG4gICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFRyYWlsZXJQbGF0ZXNcIlxyXG4gICAgICAgICAgICBbY29sdW1uc109XCJwbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICBrZXlFeHByPVwiY29kZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzZWxlY3RlZFRyYWlsZXJQbGF0ZU5vXCJcclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cInNtYWxsIHRleHQtcHJpbWFyeVwiIChjbGljayk9XCJ0cmFpbGVyUGxhdGVJbnB1dE1vZGUgPSAnbWFudWFsJ1wiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5Ym9hcmQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpNYW51YWxFbnRyeScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9PT0gJ21hbnVhbCdcIj5cclxuICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJtYW51YWxUcmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6OkVudGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcclxuICAgICAgICAgICAgKG9uRm9jdXNPdXQpPVwib25NYW51YWxUcmFpbGVyUGxhdGVGb2N1c091dCgpXCI+XHJcbiAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRyYWlsZXJQbGF0ZUlucHV0TW9kZSA9ICdsb29rdXAnXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1saXN0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6U2VsZWN0RnJvbUxpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gU8O8csO8Y8O8ICYgRmlybWEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIHJvdW5kZWQgcC0zIG1iLTJcIiAqbmdJZj1cInNob3dFeHRyYUZpZWxkc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaWQtY2FyZCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RHJpdmVyQW5kQ29tcGFueScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIHt7IGlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJyB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtY2hlY2stYm94IFsodmFsdWUpXT1cImlzVGNDaXRpemVuXCIgW2Rpc2FibGVkXT1cIiEhcmVjb3JkXCIgdGV4dD1cIlQuQy4gVmF0YW5kYcWfxLFcIj48L2R4LWNoZWNrLWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRjTG9va3VwTW9kZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ0Y05vXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaXNUY0NpdGl6ZW4gPyAoJ0thZG9vZ2x1OjpUY0lkZW50aXR5Tm8nIHwgYWJwTG9jYWxpemF0aW9uKSA6ICdLaW1saWsgTm8nXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tc20gdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1RjUXVlcnlpbmdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJxdWVyeUNhcnJpZXJCeVRjTm8oKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAge3sgKGlzVGNRdWVyeWluZyA/ICdLYWRvb2dsdTo6UXVlcnlpbmcnIDogJ0thZG9vZ2x1OjpRdWVyeScpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMVwiPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJzbWFsbCB0ZXh0LXByaW1hcnlcIiAoY2xpY2spPVwidGNMb29rdXBNb2RlID0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlzdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlNlbGVjdEZyb21MaXN0JyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGNMb29rdXBNb2RlXCI+XHJcbiAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgW2dldEZuXT1cImNhcnJpZXJEYXRhXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY2FycmllckNvbHVtbnNcIlxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwic2VsZWN0ZWRDYXJyaWVyTmFtZVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkNhcnJpZXJMb29rdXBTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTFcIj5cclxuICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwic21hbGwgdGV4dC1wcmltYXJ5XCIgKGNsaWNrKT1cInRjTG9va3VwTW9kZSA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1rZXlib2FyZCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OlF1ZXJ5QnlUYycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBNZXZjdXQgc8O8csO8Y8O8OiBzYWRlY2UgYWTEsSBnw7ZzdGVyIChyZWFkb25seSkgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNOZXdDYXJyaWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZVN1cm5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cInNlbGVjdGVkQ2Fycmllck5hbWVcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIFllbmkgc8O8csO8Y8O8OiBBZCwgU295YWQsIFRlbGVmb24gYWxhbmxhcsSxbsSxIGfDtnN0ZXIgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05ld0NhcnJpZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6Rmlyc3ROYW1lJyB8IGFicExvY2FsaXphdGlvbiB9fSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgWyh2YWx1ZSldPVwibmV3Q2FycmllckZpcnN0bmFtZVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6Rmlyc3ROYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TGFzdE5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19IDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICBbKHZhbHVlKV09XCJuZXdDYXJyaWVyTGFzdG5hbWVcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6Okxhc3ROYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpQaG9uZScgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwibmV3Q2FycmllclRlbFwiXHJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInS2Fkb29nbHU6OlBob25lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBweS0xIG1iLTNcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGUgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV3RHJpdmVyQWxlcnQnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgIFtnZXRGbl09XCJidXNpbmVzc1BhcnRuZXJEYXRhXCJcclxuICAgICAgICAgIFtjb2x1bW5zXT1cImJ1c2luZXNzUGFydG5lckNvbHVtbnNcIlxyXG4gICAgICAgICAgZGlzcGxheU5hbWU9XCJjYXJkTmFtZVwiXHJcbiAgICAgICAgICBrZXlFeHByPVwiY2FyZENvZGVcIlxyXG4gICAgICAgICAgW2VkaXRpbmdEYXRhXT1cInNlbGVjdGVkQnVzaW5lc3NQYXJ0bmVyTmFtZVwiXHJcbiAgICAgICAgICAoc2VsZWN0ZWQpPVwib25CdXNpbmVzc1BhcnRuZXJTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEHDp8Sxa2xhbWEgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RGVzY3JpcHRpb24nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgPGR4LXRleHQtYXJlYVxyXG4gICAgICAgIFsodmFsdWUpXT1cImRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbaGVpZ2h0XT1cIjgwXCJcclxuICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgPC9keC10ZXh0LWFyZWE+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNhYnBGb290ZXI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XHJcbiAgICAgIHt7ICdBYnBVaTo6Q2FuY2VsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YWJwLWJ1dHRvblxyXG4gICAgICBpY29uQ2xhc3M9XCJmYSBmYS1zYXZlXCJcclxuICAgICAgYnV0dG9uVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZyB8fCBpc1dheWJpbGxMb2FkaW5nXCJcclxuICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICB7eyAnQWJwVWk6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICA8L2FicC1idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hYnAtbW9kYWw+XHJcbiJdfQ==