@hitsoft/abp.kadooglu 1.0.2 → 1.0.3

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.
@@ -1,5 +1,6 @@
1
1
  import { Component } from '@angular/core';
2
2
  import { forkJoin } from 'rxjs';
3
+ import { switchMap } from 'rxjs/operators';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "../../../hit-proxy/hit-entry-weighing/hit-entry-weighing.service";
5
6
  import * as i2 from "../../../hit-proxy/hit-stock-transfer/hit-stock-transfer.service";
@@ -117,6 +118,7 @@ export class HitEntryWeighingFormComponent {
117
118
  this.lastOperatorCode = '';
118
119
  this.lastWeighingValue = null;
119
120
  this.currentScaleValue = null;
121
+ this.fixedScaleValue = null;
120
122
  this.isSaving = false;
121
123
  this.isWeighing = false;
122
124
  this.entryTypeTrtmYpilck = false;
@@ -163,7 +165,7 @@ export class HitEntryWeighingFormComponent {
163
165
  }
164
166
  get weighingStep() {
165
167
  const status = this.record?.u_Status;
166
- if (this.lastWeighingValue !== null || status === '2')
168
+ if (this.lastWeighingValue !== null || status === '2' || status === '3' || status === '4')
167
169
  return 3;
168
170
  if (this.firstWeighingValue !== null || status === '1')
169
171
  return 2;
@@ -412,26 +414,61 @@ export class HitEntryWeighingFormComponent {
412
414
  // Tartım modundaysa doWeighing API çağır
413
415
  const docEntry = this.getDocEntry(this.record);
414
416
  if (this.weighingMode && docEntry) {
415
- if (this.currentScaleValue == null) {
416
- this.confirmation.warn(this.localizationService.instant('Kadooglu::DoWeighingFirst'), '', {
417
+ if (this.fixedScaleValue == null) {
418
+ this.confirmation.warn(this.localizationService.instant('Kadooglu::DoFixFirst'), '', {
417
419
  hideYesBtn: true,
418
420
  cancelText: this.localizationService.instant('Kadooglu::Cancel'),
419
421
  dismissible: false,
420
422
  });
421
423
  return;
422
424
  }
423
- this.isSaving = true;
424
- this.service.doWeighing(docEntry, {
425
- weighingValue: this.currentScaleValue,
425
+ const doWeigh$ = this.service.doWeighing(docEntry, {
426
+ weighingValue: this.fixedScaleValue,
426
427
  operatorCode: ''
427
- }).subscribe({
428
+ });
429
+ // İLK tartımda form alanlarını (stok kodu, irsaliye vb.) önce kaydet, sonra tartım yap.
430
+ // SON tartımda sadece tartım yap — diğer alanlar ilk tartımdan sonra değiştirilemez.
431
+ let obs$;
432
+ if (this.weighingMode === 'first') {
433
+ const now = new Date();
434
+ const currentDate = now.toISOString().split('T')[0];
435
+ const currentTime = now.toTimeString().split(' ')[0];
436
+ const dto = {
437
+ u_GateCode: this.gateCode || undefined,
438
+ u_EntryDate: this.entryDate || currentDate,
439
+ u_EntryTime: this.entryTime || currentTime,
440
+ u_ExitDate: this.exitDate || null,
441
+ u_ExitTime: this.exitTime || undefined,
442
+ u_Plate: this.truckPlateCode,
443
+ u_DorsePlate: this.trailerPlateCode || undefined,
444
+ u_EntryType: this.entryTypeCode || undefined,
445
+ u_Description: this.description || undefined,
446
+ u_Driver: this.driverFullName || undefined,
447
+ u_DriverCode: this.driverCode || undefined,
448
+ u_TcNo: this.tcNo || undefined,
449
+ u_CardCode: this.accountCode || undefined,
450
+ u_ScaleCode: this.scaleCode || undefined,
451
+ u_ItemCode: this.stockCode || undefined,
452
+ u_DespatchAdviceNo: this.waybillNo || undefined,
453
+ u_DespatchExist: 'N',
454
+ u_ShipTo: this.arrivalLocation || undefined,
455
+ u_ContainerNo: this.containerNo || undefined,
456
+ u_ShipPlace: this.departureLocation || undefined,
457
+ };
458
+ obs$ = this.service.update(docEntry, dto).pipe(switchMap(() => doWeigh$));
459
+ }
460
+ else {
461
+ obs$ = doWeigh$;
462
+ }
463
+ this.isSaving = true;
464
+ obs$.subscribe({
428
465
  next: () => {
429
466
  // Tartım değerlerini weighingMode'a göre güncelle
430
467
  if (this.weighingMode === 'first') {
431
- this.firstWeighingValue = this.currentScaleValue;
468
+ this.firstWeighingValue = this.fixedScaleValue;
432
469
  }
433
470
  else {
434
- this.lastWeighingValue = this.currentScaleValue;
471
+ this.lastWeighingValue = this.fixedScaleValue;
435
472
  }
436
473
  this.isSaving = false;
437
474
  this.toaster.success(this.weighingMode === 'first'
@@ -519,6 +556,9 @@ export class HitEntryWeighingFormComponent {
519
556
  // Random değer üret 30000-40000 arası
520
557
  this.currentScaleValue = Math.floor(Math.random() * 10001) + 30000;
521
558
  }
559
+ sabitle() {
560
+ this.fixedScaleValue = this.currentScaleValue;
561
+ }
522
562
  goBack() {
523
563
  this.router.navigate(['/kadooglu/entry-weighing']);
524
564
  }
@@ -539,9 +579,9 @@ export class HitEntryWeighingFormComponent {
539
579
  }
540
580
  }
541
581
  HitEntryWeighingFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, deps: [{ token: i1.HitEntryWeighingService }, { token: i2.HitStockTransferService }, { token: i3.ConfirmationService }, { token: i3.ToasterService }, { token: i4.ActivatedRoute }, { token: i4.Router }, { token: i5.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
542
- HitEntryWeighingFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitEntryWeighingFormComponent, selector: "lib-hit-entry-weighing-form", ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | 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 [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | 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 [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\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::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 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\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 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]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n <div class=\"card-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mx-auto\">\r\n\r\n <!-- Kantardaki De\u011Fer -->\r\n <div class=\"card bg-light mb-3\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1\">{{ 'Kadooglu::ScaleValue' | abpLocalization }}</div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tart\u0131m Yap butonu -->\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-primary btn-lg w-100 mb-4\"\r\n (click)=\"doWeighing()\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>\r\n {{ 'Kadooglu::PerformWeighing' | abpLocalization }}\r\n </button>\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ firstWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ lastWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece step=3'te g\u00F6ster) -->\r\n <div *ngIf=\"weighingStep === 3 && netWeight != null\" class=\"card border-success mb-3\">\r\n <div class=\"card-body text-center py-3\" style=\"background-color: rgba(25,135,84,0.08);\">\r\n <div class=\"text-success small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"text-success fw-bold\" style=\"font-size: 2rem;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n\r\n <!-- \u00DCst B\u00F6l\u00FCm \u2014 Tart\u0131m Sonu\u00E7 Kartlar\u0131 -->\r\n <div class=\"row mb-4\">\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt B\u00F6l\u00FCm \u2014 Detay Bilgileri -->\r\n <div class=\"card shadow-sm\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-file-text me-2\"></i>{{ 'Kadooglu::RecordDetails' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <!-- Sol S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Sa\u011F S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i7.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i7.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i8.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "editingData"], outputs: ["selected"] }, { kind: "component", type: i9.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: i9.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: i9.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: i9.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: i6.DecimalPipe, name: "number" }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] });
582
+ HitEntryWeighingFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: HitEntryWeighingFormComponent, selector: "lib-hit-entry-weighing-form", ngImport: i0, template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | 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 [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | 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 [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\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::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 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\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 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]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n <div class=\"card-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mx-auto\">\r\n\r\n <!-- Canl\u0131 Tart\u0131m ve Sabitlenmi\u015F De\u011Fer \u2014 \u0130ki S\u00FCtun -->\r\n <div class=\"row g-3 mb-4\">\r\n\r\n <!-- Sol S\u00FCtun: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-6\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-primary btn-lg w-100 mt-2\"\r\n (click)=\"doWeighing()\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>\r\n {{ 'Kadooglu::PerformWeighing' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n <!-- Sa\u011F S\u00FCtun: Sabitlenmi\u015F De\u011Fer -->\r\n <div class=\"col-6\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ firstWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ lastWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece step=3'te g\u00F6ster) -->\r\n <div *ngIf=\"weighingStep === 3 && netWeight != null\" class=\"card border-success mb-3\">\r\n <div class=\"card-body text-center py-3\" style=\"background-color: rgba(25,135,84,0.08);\">\r\n <div class=\"text-success small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"text-success fw-bold\" style=\"font-size: 2rem;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n\r\n <!-- \u00DCst B\u00F6l\u00FCm \u2014 Tart\u0131m Sonu\u00E7 Kartlar\u0131 -->\r\n <div class=\"row mb-4\">\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt B\u00F6l\u00FCm \u2014 Detay Bilgileri -->\r\n <div class=\"card shadow-sm\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-file-text me-2\"></i>{{ 'Kadooglu::RecordDetails' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <!-- Sol S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Sa\u011F S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "abp-button", inputs: ["buttonId", "buttonClass", "buttonType", "formName", "iconClass", "loading", "disabled", "attributes"], outputs: ["click", "focus", "blur", "abpClick", "abpFocus", "abpBlur"] }, { kind: "component", type: i7.PageComponent, selector: "abp-page", inputs: ["title", "toolbar", "breadcrumb"] }, { kind: "component", type: i7.PageToolbarContainerComponent, selector: "abp-page-toolbar-container" }, { kind: "component", type: i8.HitModalComponent, selector: "hit-lookup-select", inputs: ["displayName", "keyExpr", "modalSize", "getFn", "loadFn", "columns", "isVisible", "disabled", "readOnly", "editingData"], outputs: ["selected"] }, { kind: "component", type: i9.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: i9.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: i9.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: i9.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: i6.DecimalPipe, name: "number" }, { kind: "pipe", type: i6.DatePipe, name: "date" }, { kind: "pipe", type: i5.LocalizationPipe, name: "abpLocalization" }] });
543
583
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: HitEntryWeighingFormComponent, decorators: [{
544
584
  type: Component,
545
- args: [{ selector: 'lib-hit-entry-weighing-form', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | 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 [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | 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 [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\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::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 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\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 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]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n <div class=\"card-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mx-auto\">\r\n\r\n <!-- Kantardaki De\u011Fer -->\r\n <div class=\"card bg-light mb-3\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1\">{{ 'Kadooglu::ScaleValue' | abpLocalization }}</div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tart\u0131m Yap butonu -->\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-primary btn-lg w-100 mb-4\"\r\n (click)=\"doWeighing()\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>\r\n {{ 'Kadooglu::PerformWeighing' | abpLocalization }}\r\n </button>\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ firstWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ lastWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece step=3'te g\u00F6ster) -->\r\n <div *ngIf=\"weighingStep === 3 && netWeight != null\" class=\"card border-success mb-3\">\r\n <div class=\"card-body text-center py-3\" style=\"background-color: rgba(25,135,84,0.08);\">\r\n <div class=\"text-success small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"text-success fw-bold\" style=\"font-size: 2rem;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n\r\n <!-- \u00DCst B\u00F6l\u00FCm \u2014 Tart\u0131m Sonu\u00E7 Kartlar\u0131 -->\r\n <div class=\"row mb-4\">\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt B\u00F6l\u00FCm \u2014 Detay Bilgileri -->\r\n <div class=\"card shadow-sm\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-file-text me-2\"></i>{{ 'Kadooglu::RecordDetails' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <!-- Sol S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Sa\u011F S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n" }]
585
+ args: [{ selector: 'lib-hit-entry-weighing-form', template: "<abp-page [breadcrumb]=\"false\">\r\n <abp-page-toolbar-container class=\"col\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col\">\r\n <h3 class=\"page-title\">\r\n {{ 'Kadooglu::EntryWeighingTitle' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-warning text-dark': weighingMode === 'first',\r\n 'bg-primary': weighingMode === 'last'\r\n }\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n <span *ngIf=\"!weighingMode\" class=\"badge ms-2 fs-6\"\r\n [ngClass]=\"{\r\n 'bg-secondary': weighingStep === 1,\r\n 'bg-info': weighingStep === 2,\r\n 'bg-success': weighingStep === 3\r\n }\">\r\n {{ (weighingStep === 1 ? 'Kadooglu::RecordStep' : weighingStep === 2 ? 'Kadooglu::FirstWeighing' : 'Kadooglu::Completed') | abpLocalization }}\r\n </span>\r\n </h3>\r\n </div>\r\n </div>\r\n </abp-page-toolbar-container>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"card mb-3\">\r\n <div class=\"card-body py-3\">\r\n <div class=\"d-flex align-items-center justify-content-center\">\r\n\r\n <!-- Step 1: Ara\u00E7 & Belge -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"formPhase > 1 || isFullyCompleted ? '#198754' : (formPhase === 1 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"formPhase > 1 || isFullyCompleted\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"formPhase <= 1 && !isFullyCompleted\">1</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"formPhase > 1 || isFullyCompleted\" [class.text-primary]=\"formPhase === 1 && !isFullyCompleted\">{{ 'Kadooglu::VehicleAndDocument' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"formPhase > 1 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 2: Tart\u0131m -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : (formPhase === 2 ? '#0d6efd' : '#6c757d')\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">2</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-primary]=\"formPhase === 2 && weighingStep < 3\" [class.text-muted]=\"formPhase < 2 && weighingStep < 3\">{{ 'Kadooglu::WeighingStep' | abpLocalization }}</small>\r\n </div>\r\n\r\n <div class=\"flex-grow-1 mx-2\" style=\"height:3px; max-width:120px;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#dee2e6'\"></div>\r\n\r\n <!-- Step 3: Tamamland\u0131 -->\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"rounded-circle d-flex align-items-center justify-content-center fw-bold text-white\"\r\n style=\"width:40px; height:40px; font-size:1rem;\"\r\n [style.background-color]=\"weighingStep === 3 ? '#198754' : '#6c757d'\">\r\n <i *ngIf=\"weighingStep === 3\" class=\"fa fa-check\"></i>\r\n <span *ngIf=\"weighingStep < 3\">3</span>\r\n </div>\r\n <small class=\"mt-1 fw-semibold\" [class.text-success]=\"weighingStep === 3\" [class.text-muted]=\"weighingStep < 3\">{{ 'Kadooglu::Completed' | abpLocalization }}</small>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 1: Ara\u00E7 & Belge ========== -->\r\n <div *ngIf=\"formPhase === 1 && !isFullyCompleted\">\r\n <div class=\"card\">\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n\r\n <!-- Sol s\u00FCtun: Giri\u015F/\u00C7\u0131k\u0131\u015F + Ara\u00E7 & S\u00FCr\u00FCc\u00FC -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 1: Giri\u015F / \u00C7\u0131k\u0131\u015F Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-sign-in-alt me-2\"></i>{{ 'Kadooglu::EntryExitInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::GateSelection' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadGates\"\r\n [columns]=\"gateColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"gateName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onGateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">Ara\u00E7 Hareket T\u00FCr\u00FC</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadVehicleTypes\"\r\n [columns]=\"vehicleTypeColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"entryTypeName\"\r\n [readOnly]=\"isUpdateMode\"\r\n (selected)=\"onVehicleTypeSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::EntryDate' | 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 [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ExitDate' | 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 [readOnly]=\"isUpdateMode\"\r\n width=\"100%\">\r\n </dx-date-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Grup 2: Ara\u00E7 & S\u00FCr\u00FCc\u00FC Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\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::VehicleDriverInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">\r\n {{ 'Kadooglu::TruckPlate' | abpLocalization }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTruckPlates\"\r\n [columns]=\"truckPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"truckPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTruckPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\" *ngIf=\"trailerPlateNo\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadTrailerPlates\"\r\n [columns]=\"trailerPlateColumns\"\r\n displayName=\"plateNo\"\r\n [editingData]=\"trailerPlateNo\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onTrailerPlateSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DriverName' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"driverFullName\"\r\n [placeholder]=\"'Kadooglu::EnterDriverName' | abpLocalization\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 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\">{{ isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No' }}</label>\r\n <dx-check-box [(value)]=\"isTcCitizen\" [readOnly]=\"isUpdateMode\" text=\"T.C. Vatanda\u015F\u0131\"></dx-check-box>\r\n </div>\r\n <dx-text-box\r\n [(value)]=\"tcNo\"\r\n [placeholder]=\"isTcCitizen ? ('Kadooglu::TcIdentityNo' | abpLocalization) : 'Kimlik No'\"\r\n [readOnly]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Sa\u011F s\u00FCtun: Belge & Y\u00FCk -->\r\n <div class=\"col-md-6\">\r\n\r\n <!-- Grup 3: Belge & Y\u00FCk Bilgileri -->\r\n <div class=\"border rounded p-3 mb-3\">\r\n <div class=\"border-bottom pb-2 mb-3 fw-bold text-secondary\">\r\n <i class=\"fa fa-file-alt me-2\"></i>{{ 'Kadooglu::DocumentCargoInfo' | abpLocalization }}\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadAccounts\"\r\n [columns]=\"accountColumns\"\r\n displayName=\"title\"\r\n [editingData]=\"accountTitle\"\r\n [readOnly]=\"isFormLocked\"\r\n (selected)=\"onAccountSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadWaybills\"\r\n [columns]=\"waybillColumns\"\r\n displayName=\"docNum\"\r\n keyExpr=\"docEntry\"\r\n [editingData]=\"waybillNo\"\r\n (selected)=\"onWaybillSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</label>\r\n <hit-lookup-select\r\n [loadFn]=\"loadStockItems\"\r\n [columns]=\"stockItemColumns\"\r\n displayName=\"name\"\r\n [editingData]=\"stockName\"\r\n (selected)=\"onStockItemSelected($event)\">\r\n </hit-lookup-select>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"containerNo\"\r\n [placeholder]=\"'Kadooglu::ManualEntry' | abpLocalization\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::DeparturePlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"departureLocation\"\r\n [disabled]=\"true\"\r\n [placeholder]=\"'Kadooglu::AutoFilledFromWaybill' | abpLocalization\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-6 mb-3\">\r\n <label class=\"form-label mb-1 small fw-semibold text-muted\">{{ 'Kadooglu::ArrivalPlace' | abpLocalization }}</label>\r\n <dx-text-box\r\n [(value)]=\"arrivalLocation\"\r\n [disabled]=\"true\"\r\n width=\"100%\">\r\n </dx-text-box>\r\n </div>\r\n <div class=\"col-md-12 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]=\"70\"\r\n [readOnly]=\"isFormLocked\"\r\n width=\"100%\">\r\n </dx-text-area>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n </div>\r\n <!-- Phase 1 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <div class=\"d-flex gap-2\">\r\n <abp-button\r\n *ngIf=\"!weighingMode && !isFormLocked\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n <button class=\"btn btn-primary\" (click)=\"ileriGit()\">\r\n {{ 'Kadooglu::Next' | abpLocalization }} <i class=\"fa fa-arrow-right ms-1\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== PHASE 2: Tart\u0131m Paneli ========== -->\r\n <div *ngIf=\"formPhase === 2 && !isFullyCompleted\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>{{ 'Kadooglu::WeighingPanel' | abpLocalization }}\r\n <span *ngIf=\"weighingMode\" class=\"badge ms-2\"\r\n [ngClass]=\"weighingMode === 'first' ? 'bg-warning text-dark' : 'bg-primary'\">\r\n {{ weighingModeLabel }}\r\n </span>\r\n </div>\r\n <div class=\"card-body\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mx-auto\">\r\n\r\n <!-- Canl\u0131 Tart\u0131m ve Sabitlenmi\u015F De\u011Fer \u2014 \u0130ki S\u00FCtun -->\r\n <div class=\"row g-3 mb-4\">\r\n\r\n <!-- Sol S\u00FCtun: Canl\u0131 Tart\u0131m -->\r\n <div class=\"col-6\">\r\n <div class=\"card bg-light h-100\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"text-muted small mb-1 fw-semibold text-uppercase\">\r\n {{ 'Kadooglu::LiveWeighing' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\">\r\n {{ currentScaleValue != null ? (currentScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-primary btn-lg w-100 mt-2\"\r\n (click)=\"doWeighing()\">\r\n <i class=\"fa fa-balance-scale me-2\"></i>\r\n {{ 'Kadooglu::PerformWeighing' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n <!-- Sa\u011F S\u00FCtun: Sabitlenmi\u015F De\u011Fer -->\r\n <div class=\"col-6\">\r\n <div class=\"card h-100\"\r\n [ngClass]=\"fixedScaleValue != null ? 'border-success' : 'bg-light'\"\r\n [style.background-color]=\"fixedScaleValue != null ? 'rgba(25,135,84,0.08)' : ''\">\r\n <div class=\"card-body text-center py-4\">\r\n <div class=\"small mb-1 fw-semibold text-uppercase\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : 'text-muted'\">\r\n {{ 'Kadooglu::FixedValue' | abpLocalization }}\r\n </div>\r\n <div style=\"font-size: 2.5rem; font-weight: bold; letter-spacing: 0.05em;\"\r\n [ngClass]=\"fixedScaleValue != null ? 'text-success' : ''\">\r\n {{ fixedScaleValue != null ? (fixedScaleValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n <button\r\n *ngIf=\"!isFullyCompleted\"\r\n class=\"btn btn-success btn-lg w-100 mt-2\"\r\n [disabled]=\"currentScaleValue == null\"\r\n (click)=\"sabitle()\">\r\n <i class=\"fa fa-lock me-2\"></i>\r\n {{ 'Kadooglu::Fix' | abpLocalization }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"firstWeighingValue != null; else noFirstWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ firstWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noFirstWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"mb-3\">\r\n <div class=\"text-muted small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div *ngIf=\"lastWeighingValue != null; else noLastWeighing\" class=\"card card-body p-2\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <span class=\"fw-bold fs-5\">{{ lastWeighingValue | number:'1.0-0' }} kg</span>\r\n <span class=\"text-muted small\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode }}</span>\r\n </div>\r\n </div>\r\n <ng-template #noLastWeighing>\r\n <div class=\"card card-body p-2 text-muted text-center fst-italic\">{{ 'Kadooglu::NotYetDone' | abpLocalization }}</div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Net Y\u00FCk (sadece step=3'te g\u00F6ster) -->\r\n <div *ngIf=\"weighingStep === 3 && netWeight != null\" class=\"card border-success mb-3\">\r\n <div class=\"card-body text-center py-3\" style=\"background-color: rgba(25,135,84,0.08);\">\r\n <div class=\"text-success small fw-semibold text-uppercase mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"text-success fw-bold\" style=\"font-size: 2rem;\">\r\n {{ netWeight | number:'1.0-0' }} kg\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Phase 2 Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"geriGitPhase()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::Back' | abpLocalization }}\r\n </button>\r\n <abp-button\r\n *ngIf=\"!isFullyCompleted\"\r\n iconClass=\"fa fa-save\"\r\n buttonType=\"button\"\r\n [loading]=\"isSaving\"\r\n (click)=\"save()\">\r\n {{ 'Kadooglu::Save' | abpLocalization }}\r\n </abp-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ========== SUMMARY: Tamamland\u0131 G\u00F6r\u00FCn\u00FCm\u00FC ========== -->\r\n <div *ngIf=\"isFullyCompleted\">\r\n\r\n <!-- \u00DCst B\u00F6l\u00FCm \u2014 Tart\u0131m Sonu\u00E7 Kartlar\u0131 -->\r\n <div class=\"row mb-4\">\r\n <!-- \u0130lk Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #0d6efd;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::FirstWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ firstWeighingValue != null ? (firstWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ firstOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Son Tart\u0131m -->\r\n <div class=\"col-md-4 mb-3 mb-md-0\">\r\n <div class=\"bg-white shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #6f42c1;\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::LastWeighing' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em;\">\r\n {{ lastWeighingValue != null ? (lastWeighingValue | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n <div class=\"text-muted small mt-1\">{{ 'Kadooglu::Operator' | abpLocalization }}: {{ lastOperatorCode || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Net Y\u00FCk -->\r\n <div class=\"col-md-4\">\r\n <div class=\"shadow-sm rounded py-3 px-4 h-100\" style=\"border-left: 4px solid #198754; background: rgba(25,135,84,0.06);\">\r\n <div class=\"text-uppercase text-muted small fw-semibold mb-1\">{{ 'Kadooglu::NetWeight' | abpLocalization }}</div>\r\n <div class=\"fw-bold\" style=\"font-size: 1.75rem; letter-spacing: 0.02em; color: #198754;\">\r\n {{ netWeight != null ? (netWeight | number:'1.0-0') + ' kg' : '\u2014 kg' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt B\u00F6l\u00FCm \u2014 Detay Bilgileri -->\r\n <div class=\"card shadow-sm\">\r\n <div class=\"card-header fw-bold\">\r\n <i class=\"fa fa-file-text me-2\"></i>{{ 'Kadooglu::RecordDetails' | abpLocalization }}\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"row\">\r\n <!-- Sol S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Gate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ gateName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">Ara\u00E7 Hareket T\u00FCr\u00FC</div>\r\n <div class=\"col-7 fw-medium\">{{ entryTypeName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::EntryDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ entryDate ? (entryDate | date:'dd.MM.yyyy') : '\u2014' }} {{ entryTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ExitDate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ exitDate ? (exitDate | date:'dd.MM.yyyy') : '\u2014' }} {{ exitTime || '' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TruckPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ truckPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TrailerPlate' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ trailerPlateNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverName' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverFullName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::TcIdentityNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ tcNo || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n <!-- Sa\u011F S\u00FCtun -->\r\n <div class=\"col-md-6\">\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DriverCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ driverName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::BusinessPartner' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ accountTitle || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::WaybillNumber' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ waybillNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ScaleCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ scaleName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ItemCode' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ stockName || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::ContainerNo' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ containerNo || '\u2014' }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::DepartureToArrival' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ (departureLocation || '\u2014') + ' \u2192 ' + (arrivalLocation || '\u2014') }}</div>\r\n </div>\r\n <div class=\"row mb-2 py-1\" style=\"border-bottom: 1px solid #f0f0f0;\">\r\n <div class=\"col-5 text-muted small fw-semibold\">{{ 'Kadooglu::Description' | abpLocalization }}</div>\r\n <div class=\"col-7 fw-medium\">{{ description || '\u2014' }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Alt Butonlar -->\r\n <div class=\"d-flex justify-content-between mt-3 mb-3\">\r\n <button class=\"btn btn-secondary\" (click)=\"goBack()\">\r\n <i class=\"fa fa-arrow-left me-1\"></i> {{ 'Kadooglu::BackToList' | abpLocalization }}\r\n </button>\r\n <button\r\n *ngIf=\"entryTypeMalGC && record?.u_Status === '2'\"\r\n class=\"btn btn-warning\"\r\n type=\"button\"\r\n [disabled]=\"isDoingGoodsMovement\"\r\n (click)=\"doGoodsMovement()\">\r\n <i [class]=\"isDoingGoodsMovement ? 'fa fa-spinner fa-spin me-1' : 'fa fa-exchange me-1'\" aria-hidden=\"true\"></i>\r\n {{ 'Kadooglu::MalGcYap' | abpLocalization }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n</abp-page>\r\n" }]
546
586
  }], ctorParameters: function () { return [{ type: i1.HitEntryWeighingService }, { type: i2.HitStockTransferService }, { type: i3.ConfirmationService }, { type: i3.ToasterService }, { type: i4.ActivatedRoute }, { type: i4.Router }, { type: i5.LocalizationService }]; } });
547
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUlsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQXNCaEMsTUFBTSxPQUFPLDZCQUE2QjtJQXNIeEMsWUFDVSxPQUFnQyxFQUNoQyxvQkFBNkMsRUFDN0MsWUFBaUMsRUFDakMsT0FBdUIsRUFDdkIsS0FBcUIsRUFDckIsTUFBYyxFQUNkLG1CQUF3QztRQU54QyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXlCO1FBQzdDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTVIbEQsV0FBTSxHQUF5QixJQUFJLENBQUM7UUFDcEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckIsb0RBQW9EO1FBQ3BELGNBQVMsR0FBVSxDQUFDLENBQUM7UUFD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QUFPLEtBQUssQ0FBQztRQUNoQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hGLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7MEhBbmlCVSw2QkFBNkI7OEdBQTdCLDZCQUE2QixtRUMxQjFDLGc3M0JBbWhCQTsyRkR6ZmEsNkJBQTZCO2tCQUp6QyxTQUFTOytCQUNFLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBUb2FzdGVyU2VydmljZSB9IGZyb20gJ0BhYnAvbmcudGhlbWUuc2hhcmVkJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0BhYnAvbmcuY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEhpdEVudHJ5V2VpZ2hpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1lbnRyeS13ZWlnaGluZy9oaXQtZW50cnktd2VpZ2hpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdFN0b2NrVHJhbnNmZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9oaXQtc3RvY2stdHJhbnNmZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b2NrVHJhbnNmZXIgfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXN0b2NrLXRyYW5zZmVyL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRW50cnlXZWlnaGluZyxcclxuICBFbnRyeVdlaWdoaW5nQWNjb3VudCxcclxuICBFbnRyeVdlaWdoaW5nRG9jdW1lbnQsXHJcbiAgRW50cnlXZWlnaGluZ0RyaXZlcixcclxuICBFbnRyeVdlaWdoaW5nR2F0ZSxcclxuICBFbnRyeVdlaWdoaW5nU2NhbGUsXHJcbiAgRW50cnlXZWlnaGluZ1N0b2NrSXRlbSxcclxuICBFbnRyeVdlaWdoaW5nVHJhaWxlclBsYXRlLFxyXG4gIEVudHJ5V2VpZ2hpbmdUcnVja1BsYXRlLFxyXG4gIEVudHJ5V2VpZ2hpbmdWZWhpY2xlVHlwZSxcclxuICBTYXZlRW50cnlXZWlnaGluZ0R0byxcclxufSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWVudHJ5LXdlaWdoaW5nL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1oaXQtZW50cnktd2VpZ2hpbmctZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1lbnRyeS13ZWlnaGluZy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdEVudHJ5V2VpZ2hpbmdGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICByZWNvcmQ6IEVudHJ5V2VpZ2hpbmcgfCBudWxsID0gbnVsbDtcclxuICBpc1VwZGF0ZU1vZGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gV2l6YXJkIHBoYXNlOiAxID0gQXJhw6cgJiBCZWxnZSwgMiA9IFRhcnTEsW0gUGFuZWxpXHJcbiAgZm9ybVBoYXNlOiAxIHwgMiA9IDE7XHJcbiAgLy8gV2VpZ2hpbmcgbW9kZSBmcm9tIHF1ZXJ5IHBhcmFtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCAobnVsbCA9IG5vcm1hbCBuZXcvZWRpdClcclxuICB3ZWlnaGluZ01vZGU6ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gTG9va3VwIGxvYWRlciBmdW5jdGlvbnMgKGNhbGxlZCBsYXppbHkgd2hlbiBtb2RhbCBvcGVucylcclxuICBsb2FkRG9jdW1lbnRzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERvY3VtZW50cygpO1xyXG4gIGxvYWRTY2FsZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0U2NhbGVzKCk7XHJcbiAgbG9hZFRydWNrUGxhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFRydWNrUGxhdGVzKCk7XHJcbiAgbG9hZFRyYWlsZXJQbGF0ZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VHJhaWxlclBsYXRlcygpO1xyXG4gIGxvYWREcml2ZXJzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERyaXZlcnMoKTtcclxuICBsb2FkQWNjb3VudHMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0QWNjb3VudHMoKTtcclxuICBsb2FkU3RvY2tJdGVtcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRTdG9ja0l0ZW1zKCk7XHJcbiAgbG9hZFdheWJpbGxzID0gKCkgPT4gdGhpcy5zdG9ja1RyYW5zZmVyU2VydmljZS5nZXRMaXN0KCk7XHJcbiAgbG9hZEdhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldEdhdGVzKCk7XHJcbiAgbG9hZFZlaGljbGVUeXBlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRWZWhpY2xlVHlwZXMoKTtcclxuXHJcbiAgLy8gQ29sdW1uIGNvbmZpZ3NcclxuICBkb2N1bWVudENvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnQmVsZ2UgTm8nLCB3aWR0aDogMTIwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQ2FyaSBBZMSxJyB9LFxyXG4gIF07XHJcbiAgc2NhbGVDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiA4MCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0thbnRhciBBZMSxJyB9LFxyXG4gIF07XHJcbiAgdHJ1Y2tQbGF0ZUNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDEwMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICdwbGF0ZU5vJywgY2FwdGlvbjogJ1BsYWthJyB9LFxyXG4gIF07XHJcbiAgdHJhaWxlclBsYXRlQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogMTAwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ3BsYXRlTm8nLCBjYXB0aW9uOiAnUGxha2EnIH0sXHJcbiAgXTtcclxuICBkcml2ZXJDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdBZCBTb3lhZCcgfSxcclxuICBdO1xyXG4gIGFjY291bnRDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAndGl0bGUnLCBjYXB0aW9uOiAnVW52YW4nIH0sXHJcbiAgXTtcclxuICBzdG9ja0l0ZW1Db2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdTdG9rIEFkxLEnIH0sXHJcbiAgXTtcclxuICB3YXliaWxsQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnZG9jTnVtJywgY2FwdGlvbjogJ0JlbGdlIE5vJywgd2lkdGg6IDEyMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICdjYXJkTmFtZScsIGNhcHRpb246ICdDYXJpIEFkxLEnIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ2Zyb21XYXJlaG91c2UnLCBjYXB0aW9uOiAnw4fEsWvEscWfIERlcG9zdScsIHdpZHRoOiAxNDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnY29tbWVudHMnLCBjYXB0aW9uOiAnQcOnxLFrbGFtYScgfSxcclxuICBdO1xyXG4gIGdhdGVDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiA4MCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0thcMSxIEFkxLEnIH0sXHJcbiAgXTtcclxuICB2ZWhpY2xlVHlwZUNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDgwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnR2lyacWfIFRpcGknIH0sXHJcbiAgXTtcclxuXHJcbiAgLy8gRm9ybSBmaWVsZHNcclxuICBkb2N1bWVudENvZGUgPSAnJztcclxuICBkb2N1bWVudE5hbWUgPSAnJztcclxuICBzY2FsZUNvZGUgPSAnMSc7XHJcbiAgc2NhbGVOYW1lID0gJ0thbnRhciAxJztcclxuICBhY2NvdW50Q29kZSA9ICcnO1xyXG4gIGFjY291bnRUaXRsZSA9ICcnO1xyXG4gIHRydWNrUGxhdGVDb2RlID0gJyc7XHJcbiAgdHJ1Y2tQbGF0ZU5vID0gJyc7XHJcbiAgdHJhaWxlclBsYXRlQ29kZSA9ICcnO1xyXG4gIHRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgZHJpdmVyQ29kZSA9ICcnO1xyXG4gIGRyaXZlck5hbWUgPSAnJztcclxuICBzdG9ja0NvZGUgPSAnJztcclxuICBzdG9ja05hbWUgPSAnJztcclxuICBjb250YWluZXJObyA9ICcnO1xyXG4gIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgd2F5YmlsbE5vID0gJyc7XHJcbiAgZGVwYXJ0dXJlTG9jYXRpb24gPSAnJztcclxuICBhcnJpdmFsTG9jYXRpb24gPSAnRmFicmlrYSc7XHJcblxyXG4gIC8vIFpaWl9URVNUMiB5ZW5pIGFsYW5sYXJcclxuICBnYXRlQ29kZSA9ICcnO1xyXG4gIGdhdGVOYW1lID0gJyc7XHJcbiAgZW50cnlEYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBlbnRyeVRpbWUgPSAnJztcclxuICBleGl0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZXhpdFRpbWUgPSAnJztcclxuICBlbnRyeVR5cGVDb2RlID0gJyc7XHJcbiAgZW50cnlUeXBlTmFtZSA9ICcnO1xyXG4gIGRyaXZlckZ1bGxOYW1lID0gJyc7XHJcbiAgdGNObyA9ICcnO1xyXG4gIGlzVGNDaXRpemVuID0gdHJ1ZTtcclxuXHJcbiAgLy8gVGFydMSxbSBiaWxnaWxlcmkgKHJlYWRvbmx5KVxyXG4gIGZpcnN0T3BlcmF0b3JDb2RlID0gJyc7XHJcbiAgZmlyc3RXZWlnaGluZ1ZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBsYXN0T3BlcmF0b3JDb2RlID0gJyc7XHJcbiAgbGFzdFdlaWdoaW5nVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIGN1cnJlbnRTY2FsZVZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXNTYXZpbmcgPSBmYWxzZTtcclxuICBpc1dlaWdoaW5nID0gZmFsc2U7XHJcbiAgZW50cnlUeXBlVHJ0bVlwaWxjayA9IGZhbHNlO1xyXG4gIGVudHJ5VHlwZU1hbEdDID0gZmFsc2U7XHJcbiAgaXNEb2luZ0dvb2RzTW92ZW1lbnQgPSBmYWxzZTtcclxuXHJcbiAgLyoqIFNBUCByZXNwb25zZSBjYW1lbENhc2UvUGFzY2FsQ2FzZSBmYXJrxLFuxLEgaGFuZGxlIGVkZXIgKi9cclxuICBwcml2YXRlIGdldERvY0VudHJ5KHJlYzogRW50cnlXZWlnaGluZyB8IG51bGwpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFyZWMpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gcmVjLmRvY0VudHJ5ID8/IChyZWMgYXMgYW55KS5kb2NFbnRyeTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBIaXRFbnRyeVdlaWdoaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvY2tUcmFuc2ZlclNlcnZpY2U6IEhpdFN0b2NrVHJhbnNmZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtYXRpb246IENvbmZpcm1hdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0ZXI6IFRvYXN0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBsb2NhbGl6YXRpb25TZXJ2aWNlOiBMb2NhbGl6YXRpb25TZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIFJlYWQgd2VpZ2hpbmcgbW9kZSBmcm9tIHF1ZXJ5IHBhcmFtc1xyXG4gICAgY29uc3QgbW9kZSA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ21vZGUnKTtcclxuICAgIGlmIChtb2RlID09PSAnZmlyc3QnIHx8IG1vZGUgPT09ICdsYXN0Jykge1xyXG4gICAgICB0aGlzLndlaWdoaW5nTW9kZSA9IG1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gw5ZuY2Ugcm91dGVyIHN0YXRlJ2RlbiBzYXTEsXIgdmVyaXNpbmkgb2t1IChsaXN0ZSBla3JhbsSxbmRhbiBha3RhcsSxbGFuKVxyXG4gICAgY29uc3Qgc3RhdGVEYXRhID0gaGlzdG9yeS5zdGF0ZT8ucm93RGF0YTtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ2lkJyk7XHJcblxyXG4gICAgaWYgKHN0YXRlRGF0YSkge1xyXG4gICAgICAvLyBTdGF0ZSdkZW4gZ2VsZW4gdmVyaXlpIGt1bGxhbiAoQVBJIMOnYcSfcsSxc8SxIG9sbWFkYW4pXHJcbiAgICAgIHRoaXMuaXNVcGRhdGVNb2RlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZWNvcmQgPSBzdGF0ZURhdGE7XHJcbiAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgLy8gU29uIHRhcnTEsW0gbW9kdW5kYXlzYSBkaXJla3QgdGFydMSxbSBwYW5lbGluaSBhw6dcclxuICAgICAgaWYgKHRoaXMud2VpZ2hpbmdNb2RlID09PSAnbGFzdCcpIHtcclxuICAgICAgICB0aGlzLmZvcm1QaGFzZSA9IDI7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaWQpIHtcclxuICAgICAgLy8gRmFsbGJhY2s6IHN0YXRlIHlva3NhIEFQSSdkZW4gecO8a2xlXHJcbiAgICAgIHRoaXMuaXNVcGRhdGVNb2RlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdldCgraWQpLnN1YnNjcmliZShyZWNvcmQgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gcmVjb3JkO1xyXG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICAvLyBTb24gdGFydMSxbSBtb2R1bmRheXNhIGRpcmVrdCB0YXJ0xLFtIHBhbmVsaW5pIGHDp1xyXG4gICAgICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1QaGFzZSA9IDI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCB3ZWlnaGluZ1N0ZXAoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHN0YXR1cyA9ICh0aGlzLnJlY29yZCBhcyBhbnkpPy51X1N0YXR1cztcclxuICAgIGlmICh0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsIHx8IHN0YXR1cyA9PT0gJzInKSByZXR1cm4gMztcclxuICAgIGlmICh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCB8fCBzdGF0dXMgPT09ICcxJykgcmV0dXJuIDI7XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIC8qKiDEsGxrIHRhcnTEsW0geWFwxLFsZMSxeXNhIChzdGVwID49IDIpIGRldGF5IGFsYW5sYXLEsW7EsSBraWxpdGxlICovXHJcbiAgZ2V0IGlzRm9ybUxvY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nU3RlcCA+PSAyO1xyXG4gIH1cclxuXHJcbiAgLyoqIEhlciBpa2kgdGFydMSxbSBkYSB0YW1hbWxhbmTEsXlzYSAoc3RlcCA9PT0gMykgdMO8bSBla3JhbsSxIGtpbGl0bGUgKi9cclxuICBnZXQgaXNGdWxseUNvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nU3RlcCA9PT0gMztcclxuICB9XHJcblxyXG4gIGdldCBlbnRyeURhdGVUaW1lKCk6IERhdGUgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmJ1aWxkRGF0ZVRpbWUodGhpcy5lbnRyeURhdGUsIHRoaXMuZW50cnlUaW1lKTtcclxuICB9XHJcblxyXG4gIGdldCBleGl0RGF0ZVRpbWUoKTogRGF0ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLmV4aXREYXRlLCB0aGlzLmV4aXRUaW1lKTtcclxuICB9XHJcblxyXG4gIC8qKiBUYXJpaCBzdHJpbmcgKyBzYXnEsXNhbCBzYWF0ICjDtnIuIDgzMCA9IDA4OjMwKSBkZcSfZXJpbmRlbiBEYXRlIG9sdcWfdHVydXIgKi9cclxuICBwcml2YXRlIGJ1aWxkRGF0ZVRpbWUoZGF0ZVN0cjogc3RyaW5nIHwgbnVsbCwgdGltZVZhbDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IERhdGUgfCBudWxsIHtcclxuICAgIGlmICghZGF0ZVN0cikgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZVN0cik7XHJcbiAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHQgPSBOdW1iZXIodGltZVZhbCk7XHJcbiAgICBpZiAoIWlzTmFOKHQpKSB7XHJcbiAgICAgIGQuc2V0SG91cnMoTWF0aC5mbG9vcih0IC8gMTAwKSwgdCAlIDEwMCwgMCwgMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZDtcclxuICB9XHJcblxyXG4gIGdldCBuZXRXZWlnaHQoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgIT09IG51bGwgJiYgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5hYnModGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgLSB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdlaWdoaW5nTW9kZUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCdcclxuICAgICAgPyB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnKVxyXG4gICAgICA6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkKSB7XHJcbiAgICAgIGNvbnN0IHIgPSB0aGlzLnJlY29yZCBhcyBhbnk7IC8vIFNBUCBjYW1lbENhc2UgZmFsbGJhY2tcclxuICAgICAgdGhpcy5zY2FsZUNvZGUgPSByLnVfU2NhbGVDb2RlID8/IHIudV9TY2FsZUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuYWNjb3VudENvZGUgPSByLnVfQ2FyZENvZGUgPz8gci51X0NhcmRDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLnRydWNrUGxhdGVDb2RlID0gci51X1BsYXRlID8/IHIudV9QbGF0ZSA/PyAnJztcclxuICAgICAgdGhpcy50cnVja1BsYXRlTm8gPSByLnVfUGxhdGUgPz8gci51X1BsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRyYWlsZXJQbGF0ZUNvZGUgPSByLnVfRG9yc2VQbGF0ZSA/PyAnJztcclxuICAgICAgdGhpcy50cmFpbGVyUGxhdGVObyA9IHIudV9Eb3JzZVBsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLmRyaXZlckNvZGUgPSByLnVfRHJpdmVyQ29kZSA/PyByLnVfRHJpdmVyQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSByLnVfSXRlbUNvZGUgPz8gci51X0l0ZW1Db2RlID8/ICcnO1xyXG4gICAgICB0aGlzLmNvbnRhaW5lck5vID0gci51X0NvbnRhaW5lck5vID8/IHIudV9Db250YWluZXJObyA/PyAnJztcclxuICAgICAgdGhpcy53YXliaWxsTm8gPSByLnVfRGVzcGF0Y2hBZHZpY2VObyA/PyByLnVfRGVzcGF0Y2hBZHZpY2VObyA/PyAnJztcclxuICAgICAgdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiA9IHIudV9TaGlwUGxhY2UgPz8gci51X1NoaXBQbGFjZSA/PyAnJztcclxuICAgICAgdGhpcy5hcnJpdmFsTG9jYXRpb24gPSByLnVfU2hpcFRvID8/IHIudV9TaGlwVG8gPz8gJ0ZhYnJpa2EnO1xyXG4gICAgICB0aGlzLmZpcnN0T3BlcmF0b3JDb2RlID0gci51X0ZpcnN0T3B0ID8/IHIudV9GaXJzdE9wdCA/PyAnJztcclxuICAgICAgdGhpcy5sYXN0T3BlcmF0b3JDb2RlID0gci51X0xhc3RPcHQgPz8gci51X0xhc3RPcHQgPz8gJyc7XHJcbiAgICAgIGNvbnN0IHJhd0ZpcnN0ID0gci51X0ZpcnN0V2VpZ2hpbmcgPz8gci51X0ZpcnN0V2VpZ2hpbmcgPz8gbnVsbDtcclxuICAgICAgdGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgPSAocmF3Rmlyc3QgIT0gbnVsbCAmJiByYXdGaXJzdCAhPT0gMCkgPyByYXdGaXJzdCA6IG51bGw7XHJcbiAgICAgIGNvbnN0IHJhd0xhc3QgPSByLnVfTGFzdFdlaWdoaW5nID8/IHIudV9MYXN0V2VpZ2hpbmcgPz8gbnVsbDtcclxuICAgICAgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSA9IChyYXdMYXN0ICE9IG51bGwgJiYgcmF3TGFzdCAhPT0gMCkgPyByYXdMYXN0IDogbnVsbDtcclxuICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHIudV9EZXNjcmlwdGlvbiA/PyByLnVfRGVzY3JpcHRpb24gPz8gJyc7XHJcblxyXG4gICAgICAvLyBaWlpfVEVTVDIgeWVuaSBhbGFubGFyXHJcbiAgICAgIHRoaXMuZ2F0ZUNvZGUgPSByLnVfR2F0ZUNvZGUgPz8gci51X0dhdGVDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLmVudHJ5RGF0ZSA9IHIudV9FbnRyeURhdGUgPz8gci51X0VudHJ5RGF0ZSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmVudHJ5VGltZSA9IHIudV9FbnRyeVRpbWUgPz8gci51X0VudHJ5VGltZSA/PyAnJztcclxuICAgICAgdGhpcy5leGl0RGF0ZSA9IHIudV9FeGl0RGF0ZSA/PyByLnVfRXhpdERhdGUgPz8gbnVsbDtcclxuICAgICAgdGhpcy5leGl0VGltZSA9IHIudV9FeGl0VGltZSA/PyByLnVfRXhpdFRpbWUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZW50cnlUeXBlQ29kZSA9IHIudV9FbnRyeVR5cGUgPz8gci51X0VudHJ5VHlwZSA/PyAnJztcclxuICAgICAgdGhpcy5kcml2ZXJGdWxsTmFtZSA9IHIudV9Ecml2ZXIgPz8gci51X0RyaXZlciA/PyAnJztcclxuICAgICAgdGhpcy50Y05vID0gci51X1RjTm8gPz8gci51X1RjTm8gPz8gJyc7XHJcbiAgICAgIHRoaXMuaXNUY0NpdGl6ZW4gPSB0cnVlO1xyXG5cclxuICAgICAgLy8gTG9va3VwIGFsYW5sYXLEsW7EsW4gZ8O2csO8bmVuIGlzaW1sZXJpbmkgw6fDtnrDvG1sZVxyXG4gICAgICB0aGlzLnJlc29sdmVEaXNwbGF5TmFtZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBLYXnEsXR0YWtpIGtvZCBhbGFubGFyxLFuYSBrYXLFn8SxbMSxayBnZWxlbiBnw7Zyw7xuZW4gaXNpbWxlcmkgbG9va3VwIHNlcnZpc2xlcmluZGVuIMOnw7Z6w7xtbGVyICovXHJcbiAgcHJpdmF0ZSByZXNvbHZlRGlzcGxheU5hbWVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbG9va3VwczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG5cclxuICAgIGlmICh0aGlzLmdhdGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ2dhdGVzJ10gPSB0aGlzLmxvYWRHYXRlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW50cnlUeXBlQ29kZSkge1xyXG4gICAgICBsb29rdXBzWyd2ZWhpY2xlVHlwZXMnXSA9IHRoaXMubG9hZFZlaGljbGVUeXBlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2NhbGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3NjYWxlcyddID0gdGhpcy5sb2FkU2NhbGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hY2NvdW50Q29kZSkge1xyXG4gICAgICBsb29rdXBzWydhY2NvdW50cyddID0gdGhpcy5sb2FkQWNjb3VudHMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRyaXZlckNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snZHJpdmVycyddID0gdGhpcy5sb2FkRHJpdmVycygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc3RvY2tDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3N0b2NrSXRlbXMnXSA9IHRoaXMubG9hZFN0b2NrSXRlbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobG9va3Vwcyk7XHJcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBmb3JrSm9pbihsb29rdXBzKS5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0cy5nYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGdhdGUgPSByZXN1bHRzLmdhdGVzLmZpbmQoKGc6IGFueSkgPT4gZy5jb2RlID09PSB0aGlzLmdhdGVDb2RlKTtcclxuICAgICAgICBpZiAoZ2F0ZSkgdGhpcy5nYXRlTmFtZSA9IGdhdGUubmFtZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy52ZWhpY2xlVHlwZXMpIHtcclxuICAgICAgICBjb25zdCB2dCA9IHJlc3VsdHMudmVoaWNsZVR5cGVzLmZpbmQoKHQ6IGFueSkgPT4gdC5jb2RlID09PSB0aGlzLmVudHJ5VHlwZUNvZGUpO1xyXG4gICAgICAgIGlmICh2dCkge1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVOYW1lID0gdnQubmFtZTtcclxuICAgICAgICAgIHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayA9IHZ0LnVfVHJ0bVlwaWxjayA9PT0gJ1knO1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVNYWxHQyA9IHZ0LnVfTWFsR0MgPT09ICdZJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuc2NhbGVzKSB7XHJcbiAgICAgICAgY29uc3Qgc2NhbGUgPSByZXN1bHRzLnNjYWxlcy5maW5kKChzOiBhbnkpID0+IHMuY29kZSA9PT0gdGhpcy5zY2FsZUNvZGUpO1xyXG4gICAgICAgIGlmIChzY2FsZSkgdGhpcy5zY2FsZU5hbWUgPSBzY2FsZS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLmFjY291bnRzKSB7XHJcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHJlc3VsdHMuYWNjb3VudHMuZmluZCgoYTogYW55KSA9PiBhLmNvZGUgPT09IHRoaXMuYWNjb3VudENvZGUpO1xyXG4gICAgICAgIGlmIChhY2NvdW50KSB0aGlzLmFjY291bnRUaXRsZSA9IGFjY291bnQudGl0bGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuZHJpdmVycykge1xyXG4gICAgICAgIGNvbnN0IGRyaXZlciA9IHJlc3VsdHMuZHJpdmVycy5maW5kKChkOiBhbnkpID0+IGQuY29kZSA9PT0gdGhpcy5kcml2ZXJDb2RlKTtcclxuICAgICAgICBpZiAoZHJpdmVyKSB0aGlzLmRyaXZlck5hbWUgPSBkcml2ZXIubmFtZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5zdG9ja0l0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHJlc3VsdHMuc3RvY2tJdGVtcy5maW5kKChpOiBhbnkpID0+IGkuY29kZSA9PT0gdGhpcy5zdG9ja0NvZGUpO1xyXG4gICAgICAgIGlmIChpdGVtKSB0aGlzLnN0b2NrTmFtZSA9IGl0ZW0ubmFtZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRvY3VtZW50U2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0RvY3VtZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZG9jdW1lbnRDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5kb2N1bWVudE5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvblNjYWxlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1NjYWxlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuc2NhbGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5zY2FsZU5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvbkFjY291bnRTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nQWNjb3VudCk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLmFjY291bnRDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5hY2NvdW50VGl0bGUgPSBlLnRpdGxlO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uVHJ1Y2tQbGF0ZVNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdUcnVja1BsYXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMudHJ1Y2tQbGF0ZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnRydWNrUGxhdGVObyA9IGUucGxhdGVObztcclxuICB9XHJcblxyXG4gIG9uVHJhaWxlclBsYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1RyYWlsZXJQbGF0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnRyYWlsZXJQbGF0ZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnRyYWlsZXJQbGF0ZU5vID0gZS5wbGF0ZU5vO1xyXG4gIH1cclxuXHJcbiAgb25Ecml2ZXJTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nRHJpdmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZHJpdmVyQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZHJpdmVyTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uU3RvY2tJdGVtU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1N0b2NrSXRlbSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLnN0b2NrQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuc3RvY2tOYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25HYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ0dhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5nYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZ2F0ZU5hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvblZlaGljbGVUeXBlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1ZlaGljbGVUeXBlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuZW50cnlUeXBlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMuZW50cnlUeXBlTmFtZSA9IGUubmFtZTtcclxuICAgIHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayA9IGUudV9UcnRtWXBpbGNrID09PSAnWSc7XHJcbiAgICB0aGlzLmVudHJ5VHlwZU1hbEdDID0gZS51X01hbEdDID09PSAnWSc7XHJcbiAgfVxyXG5cclxuICBvbldheWJpbGxTZWxlY3RlZChlOiBTdG9ja1RyYW5zZmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMud2F5YmlsbE5vID0gZS5kb2NOdW0udG9TdHJpbmcoKTtcclxuICAgIGlmIChlLmNhcmRDb2RlKSB7IHRoaXMuYWNjb3VudENvZGUgPSBlLmNhcmRDb2RlOyB0aGlzLmFjY291bnRUaXRsZSA9IGUuY2FyZE5hbWU7IH1cclxuICAgIGlmIChlLmZyb21XYXJlaG91c2UpIHsgdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiA9IGUuZnJvbVdhcmVob3VzZTsgfVxyXG4gICAgaWYgKGUuY29tbWVudHMpIHsgdGhpcy5kZXNjcmlwdGlvbiA9IGUuY29tbWVudHM7IH1cclxuXHJcbiAgICBjb25zdCBsaW5lcyA9IGUuc3RvY2tUcmFuc2ZlckxpbmVzID8/IFtdO1xyXG4gICAgY29uc3QgdW5pcXVlQ29kZXMgPSBbLi4ubmV3IFNldChsaW5lcy5tYXAobCA9PiBsLml0ZW1Db2RlKS5maWx0ZXIoYyA9PiAhIWMpKV07XHJcbiAgICBpZiAodW5pcXVlQ29kZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc3RvY2tDb2RlID0gdW5pcXVlQ29kZXNbMF07XHJcbiAgICAgIHRoaXMuc3RvY2tOYW1lID0gbGluZXMuZmluZChsID0+IGwuaXRlbUNvZGUgPT09IHVuaXF1ZUNvZGVzWzBdKT8uaXRlbURlc2NyaXB0aW9uID8/ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSAnJztcclxuICAgICAgdGhpcy5zdG9ja05hbWUgPSAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBQaGFzZSAxIOKGkiBQaGFzZSAyIGdlw6dpxZ9pICovXHJcbiAgaWxlcmlHaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJ1Y2tQbGF0ZUNvZGUpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlNlbGVjdFRydWNrUGxhdGUnKSwgJycsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW50cnlUeXBlVHJ0bVlwaWxjayAmJiAhdGhpcy5zdG9ja0NvZGUpIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb24ud2Fybih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlN0b2NrQ29kZVJlcXVpcmVkJyksICcnLCB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICB9XHJcblxyXG4gIC8qKiBQaGFzZSAyIOKGkiBQaGFzZSAxIGdlcmkgZMO2biAqL1xyXG4gIGdlcmlHaXRQaGFzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybVBoYXNlID0gMTtcclxuICB9XHJcblxyXG4gIHNhdmUoKTogdm9pZCB7XHJcbiAgICAvLyBUYXJ0xLFtIG1vZHVuZGF5c2EgZG9XZWlnaGluZyBBUEkgw6dhxJ/EsXJcclxuICAgIGNvbnN0IGRvY0VudHJ5ID0gdGhpcy5nZXREb2NFbnRyeSh0aGlzLnJlY29yZCk7XHJcbiAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgJiYgZG9jRW50cnkpIHtcclxuICAgICAgaWYgKHRoaXMuY3VycmVudFNjYWxlVmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpEb1dlaWdoaW5nRmlyc3QnKSwgJycsIHtcclxuICAgICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VydmljZS5kb1dlaWdoaW5nKGRvY0VudHJ5LCB7XHJcbiAgICAgICAgd2VpZ2hpbmdWYWx1ZTogdGhpcy5jdXJyZW50U2NhbGVWYWx1ZSxcclxuICAgICAgICBvcGVyYXRvckNvZGU6ICcnXHJcbiAgICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGFydMSxbSBkZcSfZXJsZXJpbmkgd2VpZ2hpbmdNb2RlJ2EgZ8O2cmUgZ8O8bmNlbGxlXHJcbiAgICAgICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgPSB0aGlzLmN1cnJlbnRTY2FsZVZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0V2VpZ2hpbmdWYWx1ZSA9IHRoaXMuY3VycmVudFNjYWxlVmFsdWU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgIHRoaXMud2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnXHJcbiAgICAgICAgICAgICAgPyB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmdTYXZlZCcpXHJcbiAgICAgICAgICAgICAgOiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6Okxhc3RXZWlnaGluZ1NhdmVkJylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gS8Sxc2EgYmlyIGdlY2lrbWUgaWxlIGxpc3RleWUgZMO2biAoa3VsbGFuxLFjxLEgcHJvZ3Jlc3MgYmFyIGRlxJ9pxZ9pbWluaSBnw7Zyc8O8bilcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9rYWRvb2dsdS9lbnRyeS13ZWlnaGluZyddKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OldlaWdoaW5nUmVjb3JkRXJyb3InKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOb3JtYWwga2F5xLF0IG1vZHUgKHllbmkga2F5xLF0IHZleWEgZMO8emVubGVtZSlcclxuICAgIGlmICghdGhpcy50cnVja1BsYXRlQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U2VsZWN0VHJ1Y2tQbGF0ZScpLCAnJywge1xyXG4gICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbm93LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gbm93LnRvVGltZVN0cmluZygpLnNwbGl0KCcgJylbMF07IC8vIEhIOm1tOnNzXHJcblxyXG4gICAgY29uc3QgZHRvOiBTYXZlRW50cnlXZWlnaGluZ0R0byA9IHtcclxuICAgICAgdV9HYXRlQ29kZTogdGhpcy5nYXRlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRW50cnlEYXRlOiB0aGlzLmVudHJ5RGF0ZSB8fCBjdXJyZW50RGF0ZSxcclxuICAgICAgdV9FbnRyeVRpbWU6IHRoaXMuZW50cnlUaW1lIHx8IGN1cnJlbnRUaW1lLFxyXG4gICAgICB1X0V4aXREYXRlOiB0aGlzLmV4aXREYXRlIHx8IG51bGwsXHJcbiAgICAgIHVfRXhpdFRpbWU6IHRoaXMuZXhpdFRpbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X1BsYXRlOiB0aGlzLnRydWNrUGxhdGVDb2RlLFxyXG4gICAgICB1X0RvcnNlUGxhdGU6IHRoaXMudHJhaWxlclBsYXRlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRW50cnlUeXBlOiB0aGlzLmVudHJ5VHlwZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0Rlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9Ecml2ZXI6IHRoaXMuZHJpdmVyRnVsbE5hbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0RyaXZlckNvZGU6IHRoaXMuZHJpdmVyQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfVGNObzogdGhpcy50Y05vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9DYXJkQ29kZTogdGhpcy5hY2NvdW50Q29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfU2NhbGVDb2RlOiB0aGlzLnNjYWxlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfSXRlbUNvZGU6IHRoaXMuc3RvY2tDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9EZXNwYXRjaEFkdmljZU5vOiB0aGlzLndheWJpbGxObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRGVzcGF0Y2hFeGlzdDogJ04nLFxyXG4gICAgICB1X1NoaXBUbzogdGhpcy5hcnJpdmFsTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0NvbnRhaW5lck5vOiB0aGlzLmNvbnRhaW5lck5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9TaGlwUGxhY2U6IHRoaXMuZGVwYXJ0dXJlTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvYnMkID0gZG9jRW50cnlcclxuICAgICAgPyB0aGlzLnNlcnZpY2UudXBkYXRlKGRvY0VudHJ5LCBkdG8pXHJcbiAgICAgIDogdGhpcy5zZXJ2aWNlLmNyZWF0ZShkdG8pO1xyXG5cclxuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgb2JzJC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6UmVjb3JkU2F2ZWRTdWNjZXNzJykpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvYXN0ZXIuZXJyb3IodGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpSZWNvcmRTYXZlRXJyb3InKSk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRvR29vZHNNb3ZlbWVudCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRvY0VudHJ5ID0gdGhpcy5nZXREb2NFbnRyeSh0aGlzLnJlY29yZCk7XHJcbiAgICBpZiAoIWRvY0VudHJ5KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IHRydWU7XHJcbiAgICB0aGlzLnNlcnZpY2UuZG9Hb29kc01vdmVtZW50KGRvY0VudHJ5KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiB1cGRhdGVkID0+IHtcclxuICAgICAgICB0aGlzLnJlY29yZCA9IHVwZGF0ZWQ7XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6R29vZHNNb3ZlbWVudFN1Y2Nlc3MnKSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0RvaW5nR29vZHNNb3ZlbWVudCA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkb1dlaWdoaW5nKCk6IHZvaWQge1xyXG4gICAgLy8gUmFuZG9tIGRlxJ9lciDDvHJldCAzMDAwMC00MDAwMCBhcmFzxLFcclxuICAgIHRoaXMuY3VycmVudFNjYWxlVmFsdWUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMSkgKyAzMDAwMDtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVRDS04odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGMgPSB2YWx1ZT8udHJpbSgpO1xyXG4gICAgaWYgKCF0YyB8fCB0Yy5sZW5ndGggIT09IDExKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIS9eXFxkezExfSQvLnRlc3QodGMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGNbMF0gPT09ICcwJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZCA9IHRjLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcclxuICAgIGNvbnN0IGQxMCA9ICgoZFswXSArIGRbMl0gKyBkWzRdICsgZFs2XSArIGRbOF0pICogNyAtIChkWzFdICsgZFszXSArIGRbNV0gKyBkWzddKSkgJSAxMDtcclxuICAgIGlmIChkMTAgIT09IGRbOV0pIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGQxMSA9IGQuc2xpY2UoMCwgMTApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApICUgMTA7XHJcbiAgICByZXR1cm4gZDExID09PSBkWzEwXTtcclxuICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFticmVhZGNydW1iXT1cImZhbHNlXCI+XHJcbiAgPGFicC1wYWdlLXRvb2xiYXItY29udGFpbmVyIGNsYXNzPVwiY29sXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpFbnRyeVdlaWdoaW5nVGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIndlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMiBmcy02XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy13YXJuaW5nIHRleHQtZGFyayc6IHdlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0JyxcclxuICAgICAgICAgICAgICAnYmctcHJpbWFyeSc6IHdlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAge3sgd2VpZ2hpbmdNb2RlTGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXdlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMiBmcy02XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy1zZWNvbmRhcnknOiB3ZWlnaGluZ1N0ZXAgPT09IDEsXHJcbiAgICAgICAgICAgICAgJ2JnLWluZm8nOiB3ZWlnaGluZ1N0ZXAgPT09IDIsXHJcbiAgICAgICAgICAgICAgJ2JnLXN1Y2Nlc3MnOiB3ZWlnaGluZ1N0ZXAgPT09IDNcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICB7eyAod2VpZ2hpbmdTdGVwID09PSAxID8gJ0thZG9vZ2x1OjpSZWNvcmRTdGVwJyA6IHdlaWdoaW5nU3RlcCA9PT0gMiA/ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgOiAnS2Fkb29nbHU6OkNvbXBsZXRlZCcpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FicC1wYWdlLXRvb2xiYXItY29udGFpbmVyPlxyXG5cclxuICA8IS0tIFN0ZXAgSW5kaWNhdG9yIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcblxyXG4gICAgICAgIDwhLS0gU3RlcCAxOiBBcmHDpyAmIEJlbGdlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZvcm1QaGFzZSA+IDEgfHwgaXNGdWxseUNvbXBsZXRlZCA/ICcjMTk4NzU0JyA6IChmb3JtUGhhc2UgPT09IDEgPyAnIzBkNmVmZCcgOiAnIzZjNzU3ZCcpXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtUGhhc2UgPD0gMSAmJiAhaXNGdWxseUNvbXBsZXRlZFwiPjE8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cImZvcm1QaGFzZSA+IDEgfHwgaXNGdWxseUNvbXBsZXRlZFwiIFtjbGFzcy50ZXh0LXByaW1hcnldPVwiZm9ybVBoYXNlID09PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+e3sgJ0thZG9vZ2x1OjpWZWhpY2xlQW5kRG9jdW1lbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9zbWFsbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG14LTJcIiBzdHlsZT1cImhlaWdodDozcHg7IG1heC13aWR0aDoxMjBweDtcIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZm9ybVBoYXNlID4gMSA/ICcjMTk4NzU0JyA6ICcjZGVlMmU2J1wiPjwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFN0ZXAgMjogVGFydMSxbSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmdy1ib2xkIHRleHQtd2hpdGVcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjQwcHg7IGhlaWdodDo0MHB4OyBmb250LXNpemU6MXJlbTtcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZWlnaGluZ1N0ZXAgPT09IDMgPyAnIzE5ODc1NCcgOiAoZm9ybVBoYXNlID09PSAyID8gJyMwZDZlZmQnIDogJyM2Yzc1N2QnKVwiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdTdGVwIDwgM1wiPjI8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIFtjbGFzcy50ZXh0LXByaW1hcnldPVwiZm9ybVBoYXNlID09PSAyICYmIHdlaWdoaW5nU3RlcCA8IDNcIiBbY2xhc3MudGV4dC1tdXRlZF09XCJmb3JtUGhhc2UgPCAyICYmIHdlaWdoaW5nU3RlcCA8IDNcIj57eyAnS2Fkb29nbHU6OldlaWdoaW5nU3RlcCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXgtMlwiIHN0eWxlPVwiaGVpZ2h0OjNweDsgbWF4LXdpZHRoOjEyMHB4O1wiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZWlnaGluZ1N0ZXAgPT09IDMgPyAnIzE5ODc1NCcgOiAnI2RlZTJlNidcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTdGVwIDM6IFRhbWFtbGFuZMSxIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6ICcjNmM3NTdkJ1wiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdTdGVwIDwgM1wiPjM8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIFtjbGFzcy50ZXh0LW11dGVkXT1cIndlaWdoaW5nU3RlcCA8IDNcIj57eyAnS2Fkb29nbHU6OkNvbXBsZXRlZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA9PT09PT09PT09IFBIQVNFIDE6IEFyYcOnICYgQmVsZ2UgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICA8IS0tIFNvbCBzw7x0dW46IEdpcmnFny/Dh8Sxa8SxxZ8gKyBBcmHDpyAmIFPDvHLDvGPDvCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcblxyXG4gICAgICAgIDwhLS0gR3J1cCAxOiBHaXJpxZ8gLyDDh8Sxa8SxxZ8gQmlsZ2lsZXJpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zaWduLWluLWFsdCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RW50cnlFeGl0SW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpHYXRlU2VsZWN0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRHYXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJnYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImdhdGVOYW1lXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uR2F0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPkFyYcOnIEhhcmVrZXQgVMO8csO8PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFZlaGljbGVUeXBlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ2ZWhpY2xlVHlwZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJlbnRyeVR5cGVOYW1lXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVmVoaWNsZVR5cGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkVudHJ5RGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVudHJ5RGF0ZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZXhpdERhdGVUaW1lXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZVwiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwiZGQuTU0ueXl5eSBISDptbVwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNVcGRhdGVNb2RlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gR3J1cCAyOiBBcmHDpyAmIFPDvHLDvGPDvCBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRydWNrIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpWZWhpY2xlRHJpdmVySW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlRydWNrUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVHJ1Y2tQbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwidHJ1Y2tQbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJwbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ0cnVja1BsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UcnVja1BsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiICpuZ0lmPVwidHJhaWxlclBsYXRlTm9cIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6VHJhaWxlclBsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRUcmFpbGVyUGxhdGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInRyYWlsZXJQbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJwbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ0cmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiZHJpdmVyRnVsbE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6RW50ZXJEcml2ZXJOYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTAgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7IGlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJyB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsodmFsdWUpXT1cImlzVGNDaXRpemVuXCIgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiIHRleHQ9XCJULkMuIFZhdGFuZGHFn8SxXCI+PC9keC1jaGVjay1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ0Y05vXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpc1RjQ2l0aXplbiA/ICgnS2Fkb29nbHU6OlRjSWRlbnRpdHlObycgfCBhYnBMb2NhbGl6YXRpb24pIDogJ0tpbWxpayBObydcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBTYcSfIHPDvHR1bjogQmVsZ2UgJiBZw7xrIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgPCEtLSBHcnVwIDM6IEJlbGdlICYgWcO8ayBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpEb2N1bWVudENhcmdvSW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZEFjY291bnRzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImFjY291bnRDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwidGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImFjY291bnRUaXRsZVwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkFjY291bnRTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OldheWJpbGxOdW1iZXInIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFdheWJpbGxzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cIndheWJpbGxDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwiZG9jTnVtXCJcclxuICAgICAgICAgICAgICAgIGtleUV4cHI9XCJkb2NFbnRyeVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwid2F5YmlsbE5vXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbldheWJpbGxTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRTdG9ja0l0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInN0b2NrSXRlbUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzdG9ja05hbWVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uU3RvY2tJdGVtU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpDb250YWluZXJObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiY29udGFpbmVyTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6TWFudWFsRW50cnknIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlcGFydHVyZVBsYWNlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkZXBhcnR1cmVMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpBdXRvRmlsbGVkRnJvbVdheWJpbGwnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpBcnJpdmFsUGxhY2UnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cImFycml2YWxMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYXJlYVxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCI3MFwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gUGhhc2UgMSBBbHQgQnV0b25sYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgbWItM1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpCYWNrJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF3ZWlnaGluZ01vZGUgJiYgIWlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1zYXZlXCJcclxuICAgICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImlsZXJpR2l0KClcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX0gPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1yaWdodCBtcy0xXCI+PC9pPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gUEhBU0UgMjogVGFydMSxbSBQYW5lbGkgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAyICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYWxhbmNlLXNjYWxlIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpXZWlnaGluZ1BhbmVsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIndlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMlwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnID8gJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJyA6ICdiZy1wcmltYXJ5J1wiPlxyXG4gICAgICAgICAgICAgIHt7IHdlaWdoaW5nTW9kZUxhYmVsIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBteC1hdXRvXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBLYW50YXJkYWtpIERlxJ9lciAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJnLWxpZ2h0IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSB0ZXh0LWNlbnRlciBweS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbWItMVwiPnt7ICdLYWRvb2dsdTo6U2NhbGVWYWx1ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAyLjVyZW07IGZvbnQtd2VpZ2h0OiBib2xkOyBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudFNjYWxlVmFsdWUgIT0gbnVsbCA/IChjdXJyZW50U2NhbGVWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRhcnTEsW0gWWFwIGJ1dG9udSAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNGdWxseUNvbXBsZXRlZFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyB3LTEwMCBtYi00XCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvV2VpZ2hpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhbGFuY2Utc2NhbGUgbWUtMlwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAge3sgJ0thZG9vZ2x1OjpQZXJmb3JtV2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIMSwbGsgVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtdXBwZXJjYXNlIG1iLTFcIj57eyAnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaXJzdFdlaWdoaW5nVmFsdWUgIT0gbnVsbDsgZWxzZSBub0ZpcnN0V2VpZ2hpbmdcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5IHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGQgZnMtNVwiPnt7IGZpcnN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnIH19IGtnPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+e3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGZpcnN0T3BlcmF0b3JDb2RlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ZpcnN0V2VpZ2hpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5IHAtMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyIGZzdC1pdGFsaWNcIj57eyAnS2Fkb29nbHU6Ok5vdFlldERvbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFNvbiBUYXJ0xLFtIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgdGV4dC11cHBlcmNhc2UgbWItMVwiPnt7ICdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGFzdFdlaWdoaW5nVmFsdWUgIT0gbnVsbDsgZWxzZSBub0xhc3RXZWlnaGluZ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHkgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctYm9sZCBmcy01XCI+e3sgbGFzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJyB9fSBrZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPnt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBsYXN0T3BlcmF0b3JDb2RlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0xhc3RXZWlnaGluZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHkgcC0yIHRleHQtbXV0ZWQgdGV4dC1jZW50ZXIgZnN0LWl0YWxpY1wiPnt7ICdLYWRvb2dsdTo6Tm90WWV0RG9uZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gTmV0IFnDvGsgKHNhZGVjZSBzdGVwPTMndGUgZ8O2c3RlcikgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2VpZ2hpbmdTdGVwID09PSAzICYmIG5ldFdlaWdodCAhPSBudWxsXCIgY2xhc3M9XCJjYXJkIGJvcmRlci1zdWNjZXNzIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSB0ZXh0LWNlbnRlciBweS0zXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1LDEzNSw4NCwwLjA4KTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWNjZXNzIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtdXBwZXJjYXNlIG1iLTFcIj57eyAnS2Fkb29nbHU6Ok5ldFdlaWdodCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWNjZXNzIGZ3LWJvbGRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMnJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IG5ldFdlaWdodCB8IG51bWJlcjonMS4wLTAnIH19IGtnXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFBoYXNlIDIgQWx0IEJ1dG9ubGFyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIG1iLTNcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImdlcmlHaXRQaGFzZSgpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6QmFjaycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIhaXNGdWxseUNvbXBsZXRlZFwiXHJcbiAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtc2F2ZVwiXHJcbiAgICAgICAgYnV0dG9uVHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgIChjbGljayk9XCJzYXZlKClcIj5cclxuICAgICAgICB7eyAnS2Fkb29nbHU6OlNhdmUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gU1VNTUFSWTogVGFtYW1sYW5kxLEgR8O2csO8bsO8bcO8ID09PT09PT09PT0gLS0+XHJcbiAgPGRpdiAqbmdJZj1cImlzRnVsbHlDb21wbGV0ZWRcIj5cclxuXHJcbiAgICA8IS0tIMOcc3QgQsO2bMO8bSDigJQgVGFydMSxbSBTb251w6cgS2FydGxhcsSxIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBtYi00XCI+XHJcbiAgICAgIDwhLS0gxLBsayBUYXJ0xLFtIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgbWItMyBtYi1tZC0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIHNoYWRvdy1zbSByb3VuZGVkIHB5LTMgcHgtNCBoLTEwMFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMGQ2ZWZkO1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtdXBwZXJjYXNlIHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGQgbWItMVwiPnt7ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07XCI+XHJcbiAgICAgICAgICAgIHt7IGZpcnN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsID8gKGZpcnN0V2VpZ2hpbmdWYWx1ZSB8IG51bWJlcjonMS4wLTAnKSArICcga2cnIDogJ+KAlCBrZycgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMVwiPnt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBmaXJzdE9wZXJhdG9yQ29kZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBTb24gVGFydMSxbSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTMgbWItbWQtMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3ctc20gcm91bmRlZCBweS0zIHB4LTQgaC0xMDBcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzZmNDJjMTtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6Okxhc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07XCI+XHJcbiAgICAgICAgICAgIHt7IGxhc3RXZWlnaGluZ1ZhbHVlICE9IG51bGwgPyAobGFzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgbGFzdE9wZXJhdG9yQ29kZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBOZXQgWcO8ayAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoYWRvdy1zbSByb3VuZGVkIHB5LTMgcHgtNCBoLTEwMFwiIHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjMTk4NzU0OyBiYWNrZ3JvdW5kOiByZ2JhKDI1LDEzNSw4NCwwLjA2KTtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6Ok5ldFdlaWdodCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDEuNzVyZW07IGxldHRlci1zcGFjaW5nOiAwLjAyZW07IGNvbG9yOiAjMTk4NzU0O1wiPlxyXG4gICAgICAgICAgICB7eyBuZXRXZWlnaHQgIT0gbnVsbCA/IChuZXRXZWlnaHQgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFsdCBCw7Zsw7xtIOKAlCBEZXRheSBCaWxnaWxlcmkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCBzaGFkb3ctc21cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGZ3LWJvbGRcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtdGV4dCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6UmVjb3JkRGV0YWlscycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8IS0tIFNvbCBTw7x0dW4gLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpHYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBnYXRlTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+QXJhw6cgSGFyZWtldCBUw7xyw7w8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZW50cnlUeXBlTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpFbnRyeURhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGVudHJ5RGF0ZSA/IChlbnRyeURhdGUgfCBkYXRlOidkZC5NTS55eXl5JykgOiAn4oCUJyB9fSB7eyBlbnRyeVRpbWUgfHwgJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RXhpdERhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGV4aXREYXRlID8gKGV4aXREYXRlIHwgZGF0ZTonZGQuTU0ueXl5eScpIDogJ+KAlCcgfX0ge3sgZXhpdFRpbWUgfHwgJycgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6VHJ1Y2tQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdHJ1Y2tQbGF0ZU5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlRyYWlsZXJQbGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdHJhaWxlclBsYXRlTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZHJpdmVyRnVsbE5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyB0Y05vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIFNhxJ8gU8O8dHVuIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZHJpdmVyTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGFjY291bnRUaXRsZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpXYXliaWxsTnVtYmVyJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyB3YXliaWxsTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6U2NhbGVDb2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBzY2FsZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6SXRlbUNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHN0b2NrTmFtZSB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpDb250YWluZXJObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgY29udGFpbmVyTm8gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RGVwYXJ0dXJlVG9BcnJpdmFsJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyAoZGVwYXJ0dXJlTG9jYXRpb24gfHwgJ+KAlCcpICsgJyDihpIgJyArIChhcnJpdmFsTG9jYXRpb24gfHwgJ+KAlCcpIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBkZXNjcmlwdGlvbiB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQWx0IEJ1dG9ubGFyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC0zIG1iLTNcIj5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cImdvQmFjaygpXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1sZWZ0IG1lLTFcIj48L2k+IHt7ICdLYWRvb2dsdTo6QmFja1RvTGlzdCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAqbmdJZj1cImVudHJ5VHlwZU1hbEdDICYmIHJlY29yZD8udV9TdGF0dXMgPT09ICcyJ1wiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmdcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0RvaW5nR29vZHNNb3ZlbWVudFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImRvR29vZHNNb3ZlbWVudCgpXCI+XHJcbiAgICAgICAgPGkgW2NsYXNzXT1cImlzRG9pbmdHb29kc01vdmVtZW50ID8gJ2ZhIGZhLXNwaW5uZXIgZmEtc3BpbiBtZS0xJyA6ICdmYSBmYS1leGNoYW5nZSBtZS0xJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICB7eyAnS2Fkb29nbHU6Ok1hbEdjWWFwJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuPC9hYnAtcGFnZT5cclxuIl19
587
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Fkb29nbHUvc3JjL2xpYi9oaXQtY29tcG9uZW50cy9oaXQtZW50cnktd2VpZ2hpbmcvaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0vaGl0LWVudHJ5LXdlaWdoaW5nLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUlsRCxPQUFPLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFzQjNDLE1BQU0sT0FBTyw2QkFBNkI7SUF1SHhDLFlBQ1UsT0FBZ0MsRUFDaEMsb0JBQTZDLEVBQzdDLFlBQWlDLEVBQ2pDLE9BQXVCLEVBQ3ZCLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0M7UUFOeEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUE3SGxELFdBQU0sR0FBeUIsSUFBSSxDQUFDO1FBQ3BDLGlCQUFZLEdBQUcsS0FBSyxDQUFD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QUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hGLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7MEhBNWtCVSw2QkFBNkI7OEdBQTdCLDZCQUE2QixtRUMzQjFDLG0yN0JBb2pCQTsyRkR6aEJhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDRSw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgVG9hc3RlclNlcnZpY2UgfSBmcm9tICdAYWJwL25nLnRoZW1lLnNoYXJlZCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tICdAYWJwL25nLmNvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEhpdEVudHJ5V2VpZ2hpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1lbnRyeS13ZWlnaGluZy9oaXQtZW50cnktd2VpZ2hpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEhpdFN0b2NrVHJhbnNmZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vaGl0LXByb3h5L2hpdC1zdG9jay10cmFuc2Zlci9oaXQtc3RvY2stdHJhbnNmZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b2NrVHJhbnNmZXIgfSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LXN0b2NrLXRyYW5zZmVyL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgRW50cnlXZWlnaGluZyxcclxuICBFbnRyeVdlaWdoaW5nQWNjb3VudCxcclxuICBFbnRyeVdlaWdoaW5nRG9jdW1lbnQsXHJcbiAgRW50cnlXZWlnaGluZ0RyaXZlcixcclxuICBFbnRyeVdlaWdoaW5nR2F0ZSxcclxuICBFbnRyeVdlaWdoaW5nU2NhbGUsXHJcbiAgRW50cnlXZWlnaGluZ1N0b2NrSXRlbSxcclxuICBFbnRyeVdlaWdoaW5nVHJhaWxlclBsYXRlLFxyXG4gIEVudHJ5V2VpZ2hpbmdUcnVja1BsYXRlLFxyXG4gIEVudHJ5V2VpZ2hpbmdWZWhpY2xlVHlwZSxcclxuICBTYXZlRW50cnlXZWlnaGluZ0R0byxcclxufSBmcm9tICcuLi8uLi8uLi9oaXQtcHJveHkvaGl0LWVudHJ5LXdlaWdoaW5nL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1oaXQtZW50cnktd2VpZ2hpbmctZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hpdC1lbnRyeS13ZWlnaGluZy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEhpdEVudHJ5V2VpZ2hpbmdGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICByZWNvcmQ6IEVudHJ5V2VpZ2hpbmcgfCBudWxsID0gbnVsbDtcclxuICBpc1VwZGF0ZU1vZGUgPSBmYWxzZTtcclxuXHJcbiAgLy8gV2l6YXJkIHBoYXNlOiAxID0gQXJhw6cgJiBCZWxnZSwgMiA9IFRhcnTEsW0gUGFuZWxpXHJcbiAgZm9ybVBoYXNlOiAxIHwgMiA9IDE7XHJcbiAgLy8gV2VpZ2hpbmcgbW9kZSBmcm9tIHF1ZXJ5IHBhcmFtOiAnZmlyc3QnIHwgJ2xhc3QnIHwgbnVsbCAobnVsbCA9IG5vcm1hbCBuZXcvZWRpdClcclxuICB3ZWlnaGluZ01vZGU6ICdmaXJzdCcgfCAnbGFzdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gTG9va3VwIGxvYWRlciBmdW5jdGlvbnMgKGNhbGxlZCBsYXppbHkgd2hlbiBtb2RhbCBvcGVucylcclxuICBsb2FkRG9jdW1lbnRzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERvY3VtZW50cygpO1xyXG4gIGxvYWRTY2FsZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0U2NhbGVzKCk7XHJcbiAgbG9hZFRydWNrUGxhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldFRydWNrUGxhdGVzKCk7XHJcbiAgbG9hZFRyYWlsZXJQbGF0ZXMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0VHJhaWxlclBsYXRlcygpO1xyXG4gIGxvYWREcml2ZXJzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldERyaXZlcnMoKTtcclxuICBsb2FkQWNjb3VudHMgPSAoKSA9PiB0aGlzLnNlcnZpY2UuZ2V0QWNjb3VudHMoKTtcclxuICBsb2FkU3RvY2tJdGVtcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRTdG9ja0l0ZW1zKCk7XHJcbiAgbG9hZFdheWJpbGxzID0gKCkgPT4gdGhpcy5zdG9ja1RyYW5zZmVyU2VydmljZS5nZXRMaXN0KCk7XHJcbiAgbG9hZEdhdGVzID0gKCkgPT4gdGhpcy5zZXJ2aWNlLmdldEdhdGVzKCk7XHJcbiAgbG9hZFZlaGljbGVUeXBlcyA9ICgpID0+IHRoaXMuc2VydmljZS5nZXRWZWhpY2xlVHlwZXMoKTtcclxuXHJcbiAgLy8gQ29sdW1uIGNvbmZpZ3NcclxuICBkb2N1bWVudENvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnQmVsZ2UgTm8nLCB3aWR0aDogMTIwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnQ2FyaSBBZMSxJyB9LFxyXG4gIF07XHJcbiAgc2NhbGVDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiA4MCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0thbnRhciBBZMSxJyB9LFxyXG4gIF07XHJcbiAgdHJ1Y2tQbGF0ZUNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDEwMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICdwbGF0ZU5vJywgY2FwdGlvbjogJ1BsYWthJyB9LFxyXG4gIF07XHJcbiAgdHJhaWxlclBsYXRlQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnY29kZScsIGNhcHRpb246ICdLb2QnLCB3aWR0aDogMTAwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ3BsYXRlTm8nLCBjYXB0aW9uOiAnUGxha2EnIH0sXHJcbiAgXTtcclxuICBkcml2ZXJDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdBZCBTb3lhZCcgfSxcclxuICBdO1xyXG4gIGFjY291bnRDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAndGl0bGUnLCBjYXB0aW9uOiAnVW52YW4nIH0sXHJcbiAgXTtcclxuICBzdG9ja0l0ZW1Db2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiAxMDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnbmFtZScsIGNhcHRpb246ICdTdG9rIEFkxLEnIH0sXHJcbiAgXTtcclxuICB3YXliaWxsQ29sdW1ucyA9IFtcclxuICAgIHsgZGF0YUZpZWxkOiAnZG9jTnVtJywgY2FwdGlvbjogJ0JlbGdlIE5vJywgd2lkdGg6IDEyMCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICdjYXJkTmFtZScsIGNhcHRpb246ICdDYXJpIEFkxLEnIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ2Zyb21XYXJlaG91c2UnLCBjYXB0aW9uOiAnw4fEsWvEscWfIERlcG9zdScsIHdpZHRoOiAxNDAgfSxcclxuICAgIHsgZGF0YUZpZWxkOiAnY29tbWVudHMnLCBjYXB0aW9uOiAnQcOnxLFrbGFtYScgfSxcclxuICBdO1xyXG4gIGdhdGVDb2x1bW5zID0gW1xyXG4gICAgeyBkYXRhRmllbGQ6ICdjb2RlJywgY2FwdGlvbjogJ0tvZCcsIHdpZHRoOiA4MCB9LFxyXG4gICAgeyBkYXRhRmllbGQ6ICduYW1lJywgY2FwdGlvbjogJ0thcMSxIEFkxLEnIH0sXHJcbiAgXTtcclxuICB2ZWhpY2xlVHlwZUNvbHVtbnMgPSBbXHJcbiAgICB7IGRhdGFGaWVsZDogJ2NvZGUnLCBjYXB0aW9uOiAnS29kJywgd2lkdGg6IDgwIH0sXHJcbiAgICB7IGRhdGFGaWVsZDogJ25hbWUnLCBjYXB0aW9uOiAnR2lyacWfIFRpcGknIH0sXHJcbiAgXTtcclxuXHJcbiAgLy8gRm9ybSBmaWVsZHNcclxuICBkb2N1bWVudENvZGUgPSAnJztcclxuICBkb2N1bWVudE5hbWUgPSAnJztcclxuICBzY2FsZUNvZGUgPSAnMSc7XHJcbiAgc2NhbGVOYW1lID0gJ0thbnRhciAxJztcclxuICBhY2NvdW50Q29kZSA9ICcnO1xyXG4gIGFjY291bnRUaXRsZSA9ICcnO1xyXG4gIHRydWNrUGxhdGVDb2RlID0gJyc7XHJcbiAgdHJ1Y2tQbGF0ZU5vID0gJyc7XHJcbiAgdHJhaWxlclBsYXRlQ29kZSA9ICcnO1xyXG4gIHRyYWlsZXJQbGF0ZU5vID0gJyc7XHJcbiAgZHJpdmVyQ29kZSA9ICcnO1xyXG4gIGRyaXZlck5hbWUgPSAnJztcclxuICBzdG9ja0NvZGUgPSAnJztcclxuICBzdG9ja05hbWUgPSAnJztcclxuICBjb250YWluZXJObyA9ICcnO1xyXG4gIGRlc2NyaXB0aW9uID0gJyc7XHJcbiAgd2F5YmlsbE5vID0gJyc7XHJcbiAgZGVwYXJ0dXJlTG9jYXRpb24gPSAnJztcclxuICBhcnJpdmFsTG9jYXRpb24gPSAnRmFicmlrYSc7XHJcblxyXG4gIC8vIFpaWl9URVNUMiB5ZW5pIGFsYW5sYXJcclxuICBnYXRlQ29kZSA9ICcnO1xyXG4gIGdhdGVOYW1lID0gJyc7XHJcbiAgZW50cnlEYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBlbnRyeVRpbWUgPSAnJztcclxuICBleGl0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgZXhpdFRpbWUgPSAnJztcclxuICBlbnRyeVR5cGVDb2RlID0gJyc7XHJcbiAgZW50cnlUeXBlTmFtZSA9ICcnO1xyXG4gIGRyaXZlckZ1bGxOYW1lID0gJyc7XHJcbiAgdGNObyA9ICcnO1xyXG4gIGlzVGNDaXRpemVuID0gdHJ1ZTtcclxuXHJcbiAgLy8gVGFydMSxbSBiaWxnaWxlcmkgKHJlYWRvbmx5KVxyXG4gIGZpcnN0T3BlcmF0b3JDb2RlID0gJyc7XHJcbiAgZmlyc3RXZWlnaGluZ1ZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBsYXN0T3BlcmF0b3JDb2RlID0gJyc7XHJcbiAgbGFzdFdlaWdoaW5nVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIGN1cnJlbnRTY2FsZVZhbHVlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBmaXhlZFNjYWxlVmFsdWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpc1NhdmluZyA9IGZhbHNlO1xyXG4gIGlzV2VpZ2hpbmcgPSBmYWxzZTtcclxuICBlbnRyeVR5cGVUcnRtWXBpbGNrID0gZmFsc2U7XHJcbiAgZW50cnlUeXBlTWFsR0MgPSBmYWxzZTtcclxuICBpc0RvaW5nR29vZHNNb3ZlbWVudCA9IGZhbHNlO1xyXG5cclxuICAvKiogU0FQIHJlc3BvbnNlIGNhbWVsQ2FzZS9QYXNjYWxDYXNlIGZhcmvEsW7EsSBoYW5kbGUgZWRlciAqL1xyXG4gIHByaXZhdGUgZ2V0RG9jRW50cnkocmVjOiBFbnRyeVdlaWdoaW5nIHwgbnVsbCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXJlYykgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHJldHVybiByZWMuZG9jRW50cnkgPz8gKHJlYyBhcyBhbnkpLmRvY0VudHJ5O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IEhpdEVudHJ5V2VpZ2hpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9ja1RyYW5zZmVyU2VydmljZTogSGl0U3RvY2tUcmFuc2ZlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RlcjogVG9hc3RlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGxvY2FsaXphdGlvblNlcnZpY2U6IExvY2FsaXphdGlvblNlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gUmVhZCB3ZWlnaGluZyBtb2RlIGZyb20gcXVlcnkgcGFyYW1zXHJcbiAgICBjb25zdCBtb2RlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnbW9kZScpO1xyXG4gICAgaWYgKG1vZGUgPT09ICdmaXJzdCcgfHwgbW9kZSA9PT0gJ2xhc3QnKSB7XHJcbiAgICAgIHRoaXMud2VpZ2hpbmdNb2RlID0gbW9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDDlm5jZSByb3V0ZXIgc3RhdGUnZGVuIHNhdMSxciB2ZXJpc2luaSBva3UgKGxpc3RlIGVrcmFuxLFuZGFuIGFrdGFyxLFsYW4pXHJcbiAgICBjb25zdCBzdGF0ZURhdGEgPSBoaXN0b3J5LnN0YXRlPy5yb3dEYXRhO1xyXG4gICAgY29uc3QgaWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnaWQnKTtcclxuXHJcbiAgICBpZiAoc3RhdGVEYXRhKSB7XHJcbiAgICAgIC8vIFN0YXRlJ2RlbiBnZWxlbiB2ZXJpeWkga3VsbGFuIChBUEkgw6dhxJ9yxLFzxLEgb2xtYWRhbilcclxuICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnJlY29yZCA9IHN0YXRlRGF0YTtcclxuICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAvLyBTb24gdGFydMSxbSBtb2R1bmRheXNhIGRpcmVrdCB0YXJ0xLFtIHBhbmVsaW5pIGHDp1xyXG4gICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdsYXN0Jykge1xyXG4gICAgICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpZCkge1xyXG4gICAgICAvLyBGYWxsYmFjazogc3RhdGUgeW9rc2EgQVBJJ2RlbiB5w7xrbGVcclxuICAgICAgdGhpcy5pc1VwZGF0ZU1vZGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0KCtpZCkuc3Vic2NyaWJlKHJlY29yZCA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmQgPSByZWNvcmQ7XHJcbiAgICAgICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgICAgIC8vIFNvbiB0YXJ0xLFtIG1vZHVuZGF5c2EgZGlyZWt0IHRhcnTEsW0gcGFuZWxpbmkgYcOnXHJcbiAgICAgICAgaWYgKHRoaXMud2VpZ2hpbmdNb2RlID09PSAnbGFzdCcpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybVBoYXNlID0gMjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHdlaWdoaW5nU3RlcCgpOiBudW1iZXIge1xyXG4gICAgY29uc3Qgc3RhdHVzID0gKHRoaXMucmVjb3JkIGFzIGFueSk/LnVfU3RhdHVzO1xyXG4gICAgaWYgKHRoaXMubGFzdFdlaWdoaW5nVmFsdWUgIT09IG51bGwgfHwgc3RhdHVzID09PSAnMicgfHwgc3RhdHVzID09PSAnMycgfHwgc3RhdHVzID09PSAnNCcpIHJldHVybiAzO1xyXG4gICAgaWYgKHRoaXMuZmlyc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsIHx8IHN0YXR1cyA9PT0gJzEnKSByZXR1cm4gMjtcclxuICAgIHJldHVybiAxO1xyXG4gIH1cclxuXHJcbiAgLyoqIMSwbGsgdGFydMSxbSB5YXDEsWxkxLF5c2EgKHN0ZXAgPj0gMikgZGV0YXkgYWxhbmxhcsSxbsSxIGtpbGl0bGUgKi9cclxuICBnZXQgaXNGb3JtTG9ja2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2VpZ2hpbmdTdGVwID49IDI7XHJcbiAgfVxyXG5cclxuICAvKiogSGVyIGlraSB0YXJ0xLFtIGRhIHRhbWFtbGFuZMSxeXNhIChzdGVwID09PSAzKSB0w7xtIGVrcmFuxLEga2lsaXRsZSAqL1xyXG4gIGdldCBpc0Z1bGx5Q29tcGxldGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMud2VpZ2hpbmdTdGVwID09PSAzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVudHJ5RGF0ZVRpbWUoKTogRGF0ZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuYnVpbGREYXRlVGltZSh0aGlzLmVudHJ5RGF0ZSwgdGhpcy5lbnRyeVRpbWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGV4aXREYXRlVGltZSgpOiBEYXRlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5idWlsZERhdGVUaW1lKHRoaXMuZXhpdERhdGUsIHRoaXMuZXhpdFRpbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRhcmloIHN0cmluZyArIHNhecSxc2FsIHNhYXQgKMO2ci4gODMwID0gMDg6MzApIGRlxJ9lcmluZGVuIERhdGUgb2x1xZ90dXJ1ciAqL1xyXG4gIHByaXZhdGUgYnVpbGREYXRlVGltZShkYXRlU3RyOiBzdHJpbmcgfCBudWxsLCB0aW1lVmFsOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsKTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgIGlmIChpc05hTihkLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdCA9IE51bWJlcih0aW1lVmFsKTtcclxuICAgIGlmICghaXNOYU4odCkpIHtcclxuICAgICAgZC5zZXRIb3VycyhNYXRoLmZsb29yKHQgLyAxMDApLCB0ICUgMTAwLCAwLCAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5ldFdlaWdodCgpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBNYXRoLmFicyh0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSAtIHRoaXMubGFzdFdlaWdoaW5nVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXQgd2VpZ2hpbmdNb2RlTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLndlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0J1xyXG4gICAgICA/IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycpXHJcbiAgICAgIDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmcnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZWNvcmQpIHtcclxuICAgICAgY29uc3QgciA9IHRoaXMucmVjb3JkIGFzIGFueTsgLy8gU0FQIGNhbWVsQ2FzZSBmYWxsYmFja1xyXG4gICAgICB0aGlzLnNjYWxlQ29kZSA9IHIudV9TY2FsZUNvZGUgPz8gci51X1NjYWxlQ29kZSA/PyAnJztcclxuICAgICAgdGhpcy5hY2NvdW50Q29kZSA9IHIudV9DYXJkQ29kZSA/PyByLnVfQ2FyZENvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMudHJ1Y2tQbGF0ZUNvZGUgPSByLnVfUGxhdGUgPz8gci51X1BsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRydWNrUGxhdGVObyA9IHIudV9QbGF0ZSA/PyByLnVfUGxhdGUgPz8gJyc7XHJcbiAgICAgIHRoaXMudHJhaWxlclBsYXRlQ29kZSA9IHIudV9Eb3JzZVBsYXRlID8/ICcnO1xyXG4gICAgICB0aGlzLnRyYWlsZXJQbGF0ZU5vID0gci51X0RvcnNlUGxhdGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZHJpdmVyQ29kZSA9IHIudV9Ecml2ZXJDb2RlID8/IHIudV9Ecml2ZXJDb2RlID8/ICcnO1xyXG4gICAgICB0aGlzLnN0b2NrQ29kZSA9IHIudV9JdGVtQ29kZSA/PyByLnVfSXRlbUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyTm8gPSByLnVfQ29udGFpbmVyTm8gPz8gci51X0NvbnRhaW5lck5vID8/ICcnO1xyXG4gICAgICB0aGlzLndheWJpbGxObyA9IHIudV9EZXNwYXRjaEFkdmljZU5vID8/IHIudV9EZXNwYXRjaEFkdmljZU5vID8/ICcnO1xyXG4gICAgICB0aGlzLmRlcGFydHVyZUxvY2F0aW9uID0gci51X1NoaXBQbGFjZSA/PyByLnVfU2hpcFBsYWNlID8/ICcnO1xyXG4gICAgICB0aGlzLmFycml2YWxMb2NhdGlvbiA9IHIudV9TaGlwVG8gPz8gci51X1NoaXBUbyA/PyAnRmFicmlrYSc7XHJcbiAgICAgIHRoaXMuZmlyc3RPcGVyYXRvckNvZGUgPSByLnVfRmlyc3RPcHQgPz8gci51X0ZpcnN0T3B0ID8/ICcnO1xyXG4gICAgICB0aGlzLmxhc3RPcGVyYXRvckNvZGUgPSByLnVfTGFzdE9wdCA/PyByLnVfTGFzdE9wdCA/PyAnJztcclxuICAgICAgY29uc3QgcmF3Rmlyc3QgPSByLnVfRmlyc3RXZWlnaGluZyA/PyByLnVfRmlyc3RXZWlnaGluZyA/PyBudWxsO1xyXG4gICAgICB0aGlzLmZpcnN0V2VpZ2hpbmdWYWx1ZSA9IChyYXdGaXJzdCAhPSBudWxsICYmIHJhd0ZpcnN0ICE9PSAwKSA/IHJhd0ZpcnN0IDogbnVsbDtcclxuICAgICAgY29uc3QgcmF3TGFzdCA9IHIudV9MYXN0V2VpZ2hpbmcgPz8gci51X0xhc3RXZWlnaGluZyA/PyBudWxsO1xyXG4gICAgICB0aGlzLmxhc3RXZWlnaGluZ1ZhbHVlID0gKHJhd0xhc3QgIT0gbnVsbCAmJiByYXdMYXN0ICE9PSAwKSA/IHJhd0xhc3QgOiBudWxsO1xyXG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gci51X0Rlc2NyaXB0aW9uID8/IHIudV9EZXNjcmlwdGlvbiA/PyAnJztcclxuXHJcbiAgICAgIC8vIFpaWl9URVNUMiB5ZW5pIGFsYW5sYXJcclxuICAgICAgdGhpcy5nYXRlQ29kZSA9IHIudV9HYXRlQ29kZSA/PyByLnVfR2F0ZUNvZGUgPz8gJyc7XHJcbiAgICAgIHRoaXMuZW50cnlEYXRlID0gci51X0VudHJ5RGF0ZSA/PyByLnVfRW50cnlEYXRlID8/IG51bGw7XHJcbiAgICAgIHRoaXMuZW50cnlUaW1lID0gci51X0VudHJ5VGltZSA/PyByLnVfRW50cnlUaW1lID8/ICcnO1xyXG4gICAgICB0aGlzLmV4aXREYXRlID0gci51X0V4aXREYXRlID8/IHIudV9FeGl0RGF0ZSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmV4aXRUaW1lID0gci51X0V4aXRUaW1lID8/IHIudV9FeGl0VGltZSA/PyAnJztcclxuICAgICAgdGhpcy5lbnRyeVR5cGVDb2RlID0gci51X0VudHJ5VHlwZSA/PyByLnVfRW50cnlUeXBlID8/ICcnO1xyXG4gICAgICB0aGlzLmRyaXZlckZ1bGxOYW1lID0gci51X0RyaXZlciA/PyByLnVfRHJpdmVyID8/ICcnO1xyXG4gICAgICB0aGlzLnRjTm8gPSByLnVfVGNObyA/PyByLnVfVGNObyA/PyAnJztcclxuICAgICAgdGhpcy5pc1RjQ2l0aXplbiA9IHRydWU7XHJcblxyXG4gICAgICAvLyBMb29rdXAgYWxhbmxhcsSxbsSxbiBnw7Zyw7xuZW4gaXNpbWxlcmluaSDDp8O2esO8bWxlXHJcbiAgICAgIHRoaXMucmVzb2x2ZURpc3BsYXlOYW1lcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEthecSxdHRha2kga29kIGFsYW5sYXLEsW5hIGthcsWfxLFsxLFrIGdlbGVuIGfDtnLDvG5lbiBpc2ltbGVyaSBsb29rdXAgc2VydmlzbGVyaW5kZW4gw6fDtnrDvG1sZXIgKi9cclxuICBwcml2YXRlIHJlc29sdmVEaXNwbGF5TmFtZXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBsb29rdXBzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcblxyXG4gICAgaWYgKHRoaXMuZ2F0ZUNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snZ2F0ZXMnXSA9IHRoaXMubG9hZEdhdGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnRyeVR5cGVDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ3ZlaGljbGVUeXBlcyddID0gdGhpcy5sb2FkVmVoaWNsZVR5cGVzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2FsZUNvZGUpIHtcclxuICAgICAgbG9va3Vwc1snc2NhbGVzJ10gPSB0aGlzLmxvYWRTY2FsZXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjY291bnRDb2RlKSB7XHJcbiAgICAgIGxvb2t1cHNbJ2FjY291bnRzJ10gPSB0aGlzLmxvYWRBY2NvdW50cygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHJpdmVyQ29kZSkge1xyXG4gICAgICBsb29rdXBzWydkcml2ZXJzJ10gPSB0aGlzLmxvYWREcml2ZXJzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdG9ja0NvZGUpIHtcclxuICAgICAgbG9va3Vwc1snc3RvY2tJdGVtcyddID0gdGhpcy5sb2FkU3RvY2tJdGVtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhsb29rdXBzKTtcclxuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGZvcmtKb2luKGxvb2t1cHMpLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHRzLmdhdGVzKSB7XHJcbiAgICAgICAgY29uc3QgZ2F0ZSA9IHJlc3VsdHMuZ2F0ZXMuZmluZCgoZzogYW55KSA9PiBnLmNvZGUgPT09IHRoaXMuZ2F0ZUNvZGUpO1xyXG4gICAgICAgIGlmIChnYXRlKSB0aGlzLmdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLnZlaGljbGVUeXBlcykge1xyXG4gICAgICAgIGNvbnN0IHZ0ID0gcmVzdWx0cy52ZWhpY2xlVHlwZXMuZmluZCgodDogYW55KSA9PiB0LmNvZGUgPT09IHRoaXMuZW50cnlUeXBlQ29kZSk7XHJcbiAgICAgICAgaWYgKHZ0KSB7XHJcbiAgICAgICAgICB0aGlzLmVudHJ5VHlwZU5hbWUgPSB2dC5uYW1lO1xyXG4gICAgICAgICAgdGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrID0gdnQudV9UcnRtWXBpbGNrID09PSAnWSc7XHJcbiAgICAgICAgICB0aGlzLmVudHJ5VHlwZU1hbEdDID0gdnQudV9NYWxHQyA9PT0gJ1knO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5zY2FsZXMpIHtcclxuICAgICAgICBjb25zdCBzY2FsZSA9IHJlc3VsdHMuc2NhbGVzLmZpbmQoKHM6IGFueSkgPT4gcy5jb2RlID09PSB0aGlzLnNjYWxlQ29kZSk7XHJcbiAgICAgICAgaWYgKHNjYWxlKSB0aGlzLnNjYWxlTmFtZSA9IHNjYWxlLm5hbWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlc3VsdHMuYWNjb3VudHMpIHtcclxuICAgICAgICBjb25zdCBhY2NvdW50ID0gcmVzdWx0cy5hY2NvdW50cy5maW5kKChhOiBhbnkpID0+IGEuY29kZSA9PT0gdGhpcy5hY2NvdW50Q29kZSk7XHJcbiAgICAgICAgaWYgKGFjY291bnQpIHRoaXMuYWNjb3VudFRpdGxlID0gYWNjb3VudC50aXRsZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVzdWx0cy5kcml2ZXJzKSB7XHJcbiAgICAgICAgY29uc3QgZHJpdmVyID0gcmVzdWx0cy5kcml2ZXJzLmZpbmQoKGQ6IGFueSkgPT4gZC5jb2RlID09PSB0aGlzLmRyaXZlckNvZGUpO1xyXG4gICAgICAgIGlmIChkcml2ZXIpIHRoaXMuZHJpdmVyTmFtZSA9IGRyaXZlci5uYW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXN1bHRzLnN0b2NrSXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gcmVzdWx0cy5zdG9ja0l0ZW1zLmZpbmQoKGk6IGFueSkgPT4gaS5jb2RlID09PSB0aGlzLnN0b2NrQ29kZSk7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHRoaXMuc3RvY2tOYW1lID0gaXRlbS5uYW1lO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRG9jdW1lbnRTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nRG9jdW1lbnQpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5kb2N1bWVudENvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLmRvY3VtZW50TmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uU2NhbGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nU2NhbGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zY2FsZUNvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLnNjYWxlTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uQWNjb3VudFNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdBY2NvdW50KTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuYWNjb3VudENvZGUgPSBlLmNvZGU7XHJcbiAgICB0aGlzLmFjY291bnRUaXRsZSA9IGUudGl0bGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25UcnVja1BsYXRlU2VsZWN0ZWQoZTogRW50cnlXZWlnaGluZ1RydWNrUGxhdGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy50cnVja1BsYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMudHJ1Y2tQbGF0ZU5vID0gZS5wbGF0ZU5vO1xyXG4gIH1cclxuXHJcbiAgb25UcmFpbGVyUGxhdGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nVHJhaWxlclBsYXRlKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlQ29kZSA9IGUuY29kZTtcclxuICAgIHRoaXMudHJhaWxlclBsYXRlTm8gPSBlLnBsYXRlTm87XHJcbiAgfVxyXG5cclxuICBvbkRyaXZlclNlbGVjdGVkKGU6IEVudHJ5V2VpZ2hpbmdEcml2ZXIpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5kcml2ZXJDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5kcml2ZXJOYW1lID0gZS5uYW1lO1xyXG4gIH1cclxuXHJcbiAgb25TdG9ja0l0ZW1TZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nU3RvY2tJdGVtKTogdm9pZCB7XHJcbiAgICBpZiAoIWUpIHJldHVybjtcclxuICAgIHRoaXMuc3RvY2tDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5zdG9ja05hbWUgPSBlLm5hbWU7XHJcbiAgfVxyXG5cclxuICBvbkdhdGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nR2F0ZSk6IHZvaWQge1xyXG4gICAgaWYgKCFlKSByZXR1cm47XHJcbiAgICB0aGlzLmdhdGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5nYXRlTmFtZSA9IGUubmFtZTtcclxuICB9XHJcblxyXG4gIG9uVmVoaWNsZVR5cGVTZWxlY3RlZChlOiBFbnRyeVdlaWdoaW5nVmVoaWNsZVR5cGUpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVDb2RlID0gZS5jb2RlO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVOYW1lID0gZS5uYW1lO1xyXG4gICAgdGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrID0gZS51X1RydG1ZcGlsY2sgPT09ICdZJztcclxuICAgIHRoaXMuZW50cnlUeXBlTWFsR0MgPSBlLnVfTWFsR0MgPT09ICdZJztcclxuICB9XHJcblxyXG4gIG9uV2F5YmlsbFNlbGVjdGVkKGU6IFN0b2NrVHJhbnNmZXIpOiB2b2lkIHtcclxuICAgIGlmICghZSkgcmV0dXJuO1xyXG4gICAgdGhpcy53YXliaWxsTm8gPSBlLmRvY051bS50b1N0cmluZygpO1xyXG4gICAgaWYgKGUuY2FyZENvZGUpIHsgdGhpcy5hY2NvdW50Q29kZSA9IGUuY2FyZENvZGU7IHRoaXMuYWNjb3VudFRpdGxlID0gZS5jYXJkTmFtZTsgfVxyXG4gICAgaWYgKGUuZnJvbVdhcmVob3VzZSkgeyB0aGlzLmRlcGFydHVyZUxvY2F0aW9uID0gZS5mcm9tV2FyZWhvdXNlOyB9XHJcbiAgICBpZiAoZS5jb21tZW50cykgeyB0aGlzLmRlc2NyaXB0aW9uID0gZS5jb21tZW50czsgfVxyXG5cclxuICAgIGNvbnN0IGxpbmVzID0gZS5zdG9ja1RyYW5zZmVyTGluZXMgPz8gW107XHJcbiAgICBjb25zdCB1bmlxdWVDb2RlcyA9IFsuLi5uZXcgU2V0KGxpbmVzLm1hcChsID0+IGwuaXRlbUNvZGUpLmZpbHRlcihjID0+ICEhYykpXTtcclxuICAgIGlmICh1bmlxdWVDb2Rlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zdG9ja0NvZGUgPSB1bmlxdWVDb2Rlc1swXTtcclxuICAgICAgdGhpcy5zdG9ja05hbWUgPSBsaW5lcy5maW5kKGwgPT4gbC5pdGVtQ29kZSA9PT0gdW5pcXVlQ29kZXNbMF0pPy5pdGVtRGVzY3JpcHRpb24gPz8gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b2NrQ29kZSA9ICcnO1xyXG4gICAgICB0aGlzLnN0b2NrTmFtZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFBoYXNlIDEg4oaSIFBoYXNlIDIgZ2XDp2nFn2kgKi9cclxuICBpbGVyaUdpdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cnVja1BsYXRlQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U2VsZWN0VHJ1Y2tQbGF0ZScpLCAnJywge1xyXG4gICAgICAgIGhpZGVZZXNCdG46IHRydWUsXHJcbiAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICBkaXNtaXNzaWJsZTogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbnRyeVR5cGVUcnRtWXBpbGNrICYmICF0aGlzLnN0b2NrQ29kZSkge1xyXG4gICAgICB0aGlzLmNvbmZpcm1hdGlvbi53YXJuKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6U3RvY2tDb2RlUmVxdWlyZWQnKSwgJycsIHtcclxuICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgIGNhbmNlbFRleHQ6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Q2FuY2VsJyksXHJcbiAgICAgICAgZGlzbWlzc2libGU6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtUGhhc2UgPSAyO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBoYXNlIDIg4oaSIFBoYXNlIDEgZ2VyaSBkw7ZuICovXHJcbiAgZ2VyaUdpdFBoYXNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtUGhhc2UgPSAxO1xyXG4gIH1cclxuXHJcbiAgc2F2ZSgpOiB2b2lkIHtcclxuICAgIC8vIFRhcnTEsW0gbW9kdW5kYXlzYSBkb1dlaWdoaW5nIEFQSSDDp2HEn8SxclxyXG4gICAgY29uc3QgZG9jRW50cnkgPSB0aGlzLmdldERvY0VudHJ5KHRoaXMucmVjb3JkKTtcclxuICAgIGlmICh0aGlzLndlaWdoaW5nTW9kZSAmJiBkb2NFbnRyeSkge1xyXG4gICAgICBpZiAodGhpcy5maXhlZFNjYWxlVmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpEb0ZpeEZpcnN0JyksICcnLCB7XHJcbiAgICAgICAgICBoaWRlWWVzQnRuOiB0cnVlLFxyXG4gICAgICAgICAgY2FuY2VsVGV4dDogdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpDYW5jZWwnKSxcclxuICAgICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGRvV2VpZ2gkID0gdGhpcy5zZXJ2aWNlLmRvV2VpZ2hpbmcoZG9jRW50cnksIHtcclxuICAgICAgICB3ZWlnaGluZ1ZhbHVlOiB0aGlzLmZpeGVkU2NhbGVWYWx1ZSEsXHJcbiAgICAgICAgb3BlcmF0b3JDb2RlOiAnJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIMSwTEsgdGFydMSxbWRhIGZvcm0gYWxhbmxhcsSxbsSxIChzdG9rIGtvZHUsIGlyc2FsaXllIHZiLikgw7ZuY2Uga2F5ZGV0LCBzb25yYSB0YXJ0xLFtIHlhcC5cclxuICAgICAgLy8gU09OIHRhcnTEsW1kYSBzYWRlY2UgdGFydMSxbSB5YXAg4oCUIGRpxJ9lciBhbGFubGFyIGlsayB0YXJ0xLFtZGFuIHNvbnJhIGRlxJ9pxZ90aXJpbGVtZXouXHJcbiAgICAgIGxldCBvYnMkOiBPYnNlcnZhYmxlPEVudHJ5V2VpZ2hpbmc+O1xyXG4gICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCcpIHtcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbm93LnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcclxuICAgICAgICBjb25zdCBjdXJyZW50VGltZSA9IG5vdy50b1RpbWVTdHJpbmcoKS5zcGxpdCgnICcpWzBdO1xyXG4gICAgICAgIGNvbnN0IGR0bzogU2F2ZUVudHJ5V2VpZ2hpbmdEdG8gPSB7XHJcbiAgICAgICAgICB1X0dhdGVDb2RlOiB0aGlzLmdhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRW50cnlEYXRlOiB0aGlzLmVudHJ5RGF0ZSB8fCBjdXJyZW50RGF0ZSxcclxuICAgICAgICAgIHVfRW50cnlUaW1lOiB0aGlzLmVudHJ5VGltZSB8fCBjdXJyZW50VGltZSxcclxuICAgICAgICAgIHVfRXhpdERhdGU6IHRoaXMuZXhpdERhdGUgfHwgbnVsbCxcclxuICAgICAgICAgIHVfRXhpdFRpbWU6IHRoaXMuZXhpdFRpbWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9QbGF0ZTogdGhpcy50cnVja1BsYXRlQ29kZSxcclxuICAgICAgICAgIHVfRG9yc2VQbGF0ZTogdGhpcy50cmFpbGVyUGxhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRW50cnlUeXBlOiB0aGlzLmVudHJ5VHlwZUNvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9EZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0RyaXZlcjogdGhpcy5kcml2ZXJGdWxsTmFtZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0RyaXZlckNvZGU6IHRoaXMuZHJpdmVyQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X1RjTm86IHRoaXMudGNObyB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0NhcmRDb2RlOiB0aGlzLmFjY291bnRDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfU2NhbGVDb2RlOiB0aGlzLnNjYWxlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0l0ZW1Db2RlOiB0aGlzLnN0b2NrQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICB1X0Rlc3BhdGNoQWR2aWNlTm86IHRoaXMud2F5YmlsbE5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfRGVzcGF0Y2hFeGlzdDogJ04nLFxyXG4gICAgICAgICAgdV9TaGlwVG86IHRoaXMuYXJyaXZhbExvY2F0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHVfQ29udGFpbmVyTm86IHRoaXMuY29udGFpbmVyTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdV9TaGlwUGxhY2U6IHRoaXMuZGVwYXJ0dXJlTG9jYXRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgb2JzJCA9IHRoaXMuc2VydmljZS51cGRhdGUoZG9jRW50cnksIGR0bykucGlwZShzd2l0Y2hNYXAoKCkgPT4gZG9XZWlnaCQpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvYnMkID0gZG9XZWlnaCQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xyXG4gICAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGFydMSxbSBkZcSfZXJsZXJpbmkgd2VpZ2hpbmdNb2RlJ2EgZ8O2cmUgZ8O8bmNlbGxlXHJcbiAgICAgICAgICBpZiAodGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFdlaWdoaW5nVmFsdWUgPSB0aGlzLmZpeGVkU2NhbGVWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFdlaWdoaW5nVmFsdWUgPSB0aGlzLmZpeGVkU2NhbGVWYWx1ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2VzcyhcclxuICAgICAgICAgICAgdGhpcy53ZWlnaGluZ01vZGUgPT09ICdmaXJzdCdcclxuICAgICAgICAgICAgICA/IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZ1NhdmVkJylcclxuICAgICAgICAgICAgICA6IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6TGFzdFdlaWdoaW5nU2F2ZWQnKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBLxLFzYSBiaXIgZ2VjaWttZSBpbGUgbGlzdGV5ZSBkw7ZuIChrdWxsYW7EsWPEsSBwcm9ncmVzcyBiYXIgZGXEn2nFn2ltaW5pIGfDtnJzw7xuKVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gICAgICAgICAgfSwgMTUwMCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdGVyLmVycm9yKHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5pbnN0YW50KCdLYWRvb2dsdTo6V2VpZ2hpbmdSZWNvcmRFcnJvcicpKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vcm1hbCBrYXnEsXQgbW9kdSAoeWVuaSBrYXnEsXQgdmV5YSBkw7x6ZW5sZW1lKVxyXG4gICAgaWYgKCF0aGlzLnRydWNrUGxhdGVDb2RlKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybWF0aW9uLndhcm4odGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpTZWxlY3RUcnVja1BsYXRlJyksICcnLCB7XHJcbiAgICAgICAgaGlkZVllc0J0bjogdHJ1ZSxcclxuICAgICAgICBjYW5jZWxUZXh0OiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OkNhbmNlbCcpLFxyXG4gICAgICAgIGRpc21pc3NpYmxlOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBub3cudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xyXG4gICAgY29uc3QgY3VycmVudFRpbWUgPSBub3cudG9UaW1lU3RyaW5nKCkuc3BsaXQoJyAnKVswXTsgLy8gSEg6bW06c3NcclxuXHJcbiAgICBjb25zdCBkdG86IFNhdmVFbnRyeVdlaWdoaW5nRHRvID0ge1xyXG4gICAgICB1X0dhdGVDb2RlOiB0aGlzLmdhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9FbnRyeURhdGU6IHRoaXMuZW50cnlEYXRlIHx8IGN1cnJlbnREYXRlLFxyXG4gICAgICB1X0VudHJ5VGltZTogdGhpcy5lbnRyeVRpbWUgfHwgY3VycmVudFRpbWUsXHJcbiAgICAgIHVfRXhpdERhdGU6IHRoaXMuZXhpdERhdGUgfHwgbnVsbCxcclxuICAgICAgdV9FeGl0VGltZTogdGhpcy5leGl0VGltZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfUGxhdGU6IHRoaXMudHJ1Y2tQbGF0ZUNvZGUsXHJcbiAgICAgIHVfRG9yc2VQbGF0ZTogdGhpcy50cmFpbGVyUGxhdGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9FbnRyeVR5cGU6IHRoaXMuZW50cnlUeXBlQ29kZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0RyaXZlcjogdGhpcy5kcml2ZXJGdWxsTmFtZSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfRHJpdmVyQ29kZTogdGhpcy5kcml2ZXJDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9UY05vOiB0aGlzLnRjTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0NhcmRDb2RlOiB0aGlzLmFjY291bnRDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9TY2FsZUNvZGU6IHRoaXMuc2NhbGVDb2RlIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9JdGVtQ29kZTogdGhpcy5zdG9ja0NvZGUgfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X0Rlc3BhdGNoQWR2aWNlTm86IHRoaXMud2F5YmlsbE5vIHx8IHVuZGVmaW5lZCxcclxuICAgICAgdV9EZXNwYXRjaEV4aXN0OiAnTicsXHJcbiAgICAgIHVfU2hpcFRvOiB0aGlzLmFycml2YWxMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHVfQ29udGFpbmVyTm86IHRoaXMuY29udGFpbmVyTm8gfHwgdW5kZWZpbmVkLFxyXG4gICAgICB1X1NoaXBQbGFjZTogdGhpcy5kZXBhcnR1cmVMb2NhdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9icyQgPSBkb2NFbnRyeVxyXG4gICAgICA/IHRoaXMuc2VydmljZS51cGRhdGUoZG9jRW50cnksIGR0bylcclxuICAgICAgOiB0aGlzLnNlcnZpY2UuY3JlYXRlKGR0byk7XHJcblxyXG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICBvYnMkLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpSZWNvcmRTYXZlZFN1Y2Nlc3MnKSk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycva2Fkb29nbHUvZW50cnktd2VpZ2hpbmcnXSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9hc3Rlci5lcnJvcih0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuaW5zdGFudCgnS2Fkb29nbHU6OlJlY29yZFNhdmVFcnJvcicpKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZG9Hb29kc01vdmVtZW50KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZG9jRW50cnkgPSB0aGlzLmdldERvY0VudHJ5KHRoaXMucmVjb3JkKTtcclxuICAgIGlmICghZG9jRW50cnkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmlzRG9pbmdHb29kc01vdmVtZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMuc2VydmljZS5kb0dvb2RzTW92ZW1lbnQoZG9jRW50cnkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHVwZGF0ZWQgPT4ge1xyXG4gICAgICAgIHRoaXMucmVjb3JkID0gdXBkYXRlZDtcclxuICAgICAgICB0aGlzLmlzRG9pbmdHb29kc01vdmVtZW50ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2FzdGVyLnN1Y2Nlc3ModGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmluc3RhbnQoJ0thZG9vZ2x1OjpHb29kc01vdmVtZW50U3VjY2VzcycpKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzRG9pbmdHb29kc01vdmVtZW50ID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRvV2VpZ2hpbmcoKTogdm9pZCB7XHJcbiAgICAvLyBSYW5kb20gZGXEn2VyIMO8cmV0IDMwMDAwLTQwMDAwIGFyYXPEsVxyXG4gICAgdGhpcy5jdXJyZW50U2NhbGVWYWx1ZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAxKSArIDMwMDAwO1xyXG4gIH1cclxuXHJcbiAgc2FiaXRsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZml4ZWRTY2FsZVZhbHVlID0gdGhpcy5jdXJyZW50U2NhbGVWYWx1ZTtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2thZG9vZ2x1L2VudHJ5LXdlaWdoaW5nJ10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVRDS04odmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdGMgPSB2YWx1ZT8udHJpbSgpO1xyXG4gICAgaWYgKCF0YyB8fCB0Yy5sZW5ndGggIT09IDExKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAoIS9eXFxkezExfSQvLnRlc3QodGMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodGNbMF0gPT09ICcwJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgZCA9IHRjLnNwbGl0KCcnKS5tYXAoTnVtYmVyKTtcclxuICAgIGNvbnN0IGQxMCA9ICgoZFswXSArIGRbMl0gKyBkWzRdICsgZFs2XSArIGRbOF0pICogNyAtIChkWzFdICsgZFszXSArIGRbNV0gKyBkWzddKSkgJSAxMDtcclxuICAgIGlmIChkMTAgIT09IGRbOV0pIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGQxMSA9IGQuc2xpY2UoMCwgMTApLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApICUgMTA7XHJcbiAgICByZXR1cm4gZDExID09PSBkWzEwXTtcclxuICB9XHJcbn1cclxuIiwiPGFicC1wYWdlIFticmVhZGNydW1iXT1cImZhbHNlXCI+XHJcbiAgPGFicC1wYWdlLXRvb2xiYXItY29udGFpbmVyIGNsYXNzPVwiY29sXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwicGFnZS10aXRsZVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpFbnRyeVdlaWdoaW5nVGl0bGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIndlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMiBmcy02XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy13YXJuaW5nIHRleHQtZGFyayc6IHdlaWdoaW5nTW9kZSA9PT0gJ2ZpcnN0JyxcclxuICAgICAgICAgICAgICAnYmctcHJpbWFyeSc6IHdlaWdoaW5nTW9kZSA9PT0gJ2xhc3QnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAge3sgd2VpZ2hpbmdNb2RlTGFiZWwgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXdlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMiBmcy02XCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdiZy1zZWNvbmRhcnknOiB3ZWlnaGluZ1N0ZXAgPT09IDEsXHJcbiAgICAgICAgICAgICAgJ2JnLWluZm8nOiB3ZWlnaGluZ1N0ZXAgPT09IDIsXHJcbiAgICAgICAgICAgICAgJ2JnLXN1Y2Nlc3MnOiB3ZWlnaGluZ1N0ZXAgPT09IDNcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICB7eyAod2VpZ2hpbmdTdGVwID09PSAxID8gJ0thZG9vZ2x1OjpSZWNvcmRTdGVwJyA6IHdlaWdoaW5nU3RlcCA9PT0gMiA/ICdLYWRvb2dsdTo6Rmlyc3RXZWlnaGluZycgOiAnS2Fkb29nbHU6OkNvbXBsZXRlZCcpIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2FicC1wYWdlLXRvb2xiYXItY29udGFpbmVyPlxyXG5cclxuICA8IS0tIFN0ZXAgSW5kaWNhdG9yIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcblxyXG4gICAgICAgIDwhLS0gU3RlcCAxOiBBcmHDpyAmIEJlbGdlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZvcm1QaGFzZSA+IDEgfHwgaXNGdWxseUNvbXBsZXRlZCA/ICcjMTk4NzU0JyA6IChmb3JtUGhhc2UgPT09IDEgPyAnIzBkNmVmZCcgOiAnIzZjNzU3ZCcpXCI+XHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwiZm9ybVBoYXNlID4gMSB8fCBpc0Z1bGx5Q29tcGxldGVkXCIgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtUGhhc2UgPD0gMSAmJiAhaXNGdWxseUNvbXBsZXRlZFwiPjE8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cImZvcm1QaGFzZSA+IDEgfHwgaXNGdWxseUNvbXBsZXRlZFwiIFtjbGFzcy50ZXh0LXByaW1hcnldPVwiZm9ybVBoYXNlID09PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+e3sgJ0thZG9vZ2x1OjpWZWhpY2xlQW5kRG9jdW1lbnQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9zbWFsbD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIG14LTJcIiBzdHlsZT1cImhlaWdodDozcHg7IG1heC13aWR0aDoxMjBweDtcIlxyXG4gICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiZm9ybVBoYXNlID4gMSA/ICcjMTk4NzU0JyA6ICcjZGVlMmU2J1wiPjwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIFN0ZXAgMjogVGFydMSxbSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtY2lyY2xlIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmdy1ib2xkIHRleHQtd2hpdGVcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIndpZHRoOjQwcHg7IGhlaWdodDo0MHB4OyBmb250LXNpemU6MXJlbTtcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZWlnaGluZ1N0ZXAgPT09IDMgPyAnIzE5ODc1NCcgOiAoZm9ybVBoYXNlID09PSAyID8gJyMwZDZlZmQnIDogJyM2Yzc1N2QnKVwiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdTdGVwIDwgM1wiPjI8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIFtjbGFzcy50ZXh0LXByaW1hcnldPVwiZm9ybVBoYXNlID09PSAyICYmIHdlaWdoaW5nU3RlcCA8IDNcIiBbY2xhc3MudGV4dC1tdXRlZF09XCJmb3JtUGhhc2UgPCAyICYmIHdlaWdoaW5nU3RlcCA8IDNcIj57eyAnS2Fkb29nbHU6OldlaWdoaW5nU3RlcCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTEgbXgtMlwiIHN0eWxlPVwiaGVpZ2h0OjNweDsgbWF4LXdpZHRoOjEyMHB4O1wiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZWlnaGluZ1N0ZXAgPT09IDMgPyAnIzE5ODc1NCcgOiAnI2RlZTJlNidcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTdGVwIDM6IFRhbWFtbGFuZMSxIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1jaXJjbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZ3LWJvbGQgdGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6NDBweDsgaGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZToxcmVtO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIndlaWdoaW5nU3RlcCA9PT0gMyA/ICcjMTk4NzU0JyA6ICcjNmM3NTdkJ1wiPlxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwid2VpZ2hpbmdTdGVwIDwgM1wiPjM8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm10LTEgZnctc2VtaWJvbGRcIiBbY2xhc3MudGV4dC1zdWNjZXNzXT1cIndlaWdoaW5nU3RlcCA9PT0gM1wiIFtjbGFzcy50ZXh0LW11dGVkXT1cIndlaWdoaW5nU3RlcCA8IDNcIj57eyAnS2Fkb29nbHU6OkNvbXBsZXRlZCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L3NtYWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA9PT09PT09PT09IFBIQVNFIDE6IEFyYcOnICYgQmVsZ2UgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAxICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcblxyXG4gICAgICA8IS0tIFNvbCBzw7x0dW46IEdpcmnFny/Dh8Sxa8SxxZ8gKyBBcmHDpyAmIFPDvHLDvGPDvCAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcblxyXG4gICAgICAgIDwhLS0gR3J1cCAxOiBHaXJpxZ8gLyDDh8Sxa8SxxZ8gQmlsZ2lsZXJpIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgcm91bmRlZCBwLTMgbWItM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlci1ib3R0b20gcGItMiBtYi0zIGZ3LWJvbGQgdGV4dC1zZWNvbmRhcnlcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zaWduLWluLWFsdCBtZS0yXCI+PC9pPnt7ICdLYWRvb2dsdTo6RW50cnlFeGl0SW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpHYXRlU2VsZWN0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRHYXRlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJnYXRlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImdhdGVOYW1lXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uR2F0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPkFyYcOnIEhhcmVrZXQgVMO8csO8PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFZlaGljbGVUeXBlc1wiXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJ2ZWhpY2xlVHlwZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJlbnRyeVR5cGVOYW1lXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uVmVoaWNsZVR5cGVTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkVudHJ5RGF0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC1kYXRlLWJveFxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVudHJ5RGF0ZVRpbWVcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ9XCJkZC5NTS55eXl5IEhIOm1tXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc1VwZGF0ZU1vZGVcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LWRhdGUtYm94XHJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZXhpdERhdGVUaW1lXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZVwiXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5Rm9ybWF0PVwiZGQuTU0ueXl5eSBISDptbVwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNVcGRhdGVNb2RlXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gR3J1cCAyOiBBcmHDpyAmIFPDvHLDvGPDvCBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRydWNrIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpWZWhpY2xlRHJpdmVySW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlRydWNrUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxoaXQtbG9va3VwLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW2xvYWRGbl09XCJsb2FkVHJ1Y2tQbGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwidHJ1Y2tQbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJwbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ0cnVja1BsYXRlTm9cIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25UcnVja1BsYXRlU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiICpuZ0lmPVwidHJhaWxlclBsYXRlTm9cIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6VHJhaWxlclBsYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRUcmFpbGVyUGxhdGVzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInRyYWlsZXJQbGF0ZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJwbGF0ZU5vXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJ0cmFpbGVyUGxhdGVOb1wiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvblRyYWlsZXJQbGF0ZVNlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2hpdC1sb29rdXAtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTEgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7ICdLYWRvb2dsdTo6RHJpdmVyTmFtZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiZHJpdmVyRnVsbE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6RW50ZXJEcml2ZXJOYW1lJyB8IGFicExvY2FsaXphdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTNcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTAgc21hbGwgZnctc2VtaWJvbGQgdGV4dC1tdXRlZFwiPnt7IGlzVGNDaXRpemVuID8gKCdLYWRvb2dsdTo6VGNJZGVudGl0eU5vJyB8IGFicExvY2FsaXphdGlvbikgOiAnS2ltbGlrIE5vJyB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsodmFsdWUpXT1cImlzVGNDaXRpemVuXCIgW3JlYWRPbmx5XT1cImlzVXBkYXRlTW9kZVwiIHRleHQ9XCJULkMuIFZhdGFuZGHFn8SxXCI+PC9keC1jaGVjay1ib3g+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJ0Y05vXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpc1RjQ2l0aXplbiA/ICgnS2Fkb29nbHU6OlRjSWRlbnRpdHlObycgfCBhYnBMb2NhbGl6YXRpb24pIDogJ0tpbWxpayBObydcIlxyXG4gICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBTYcSfIHPDvHR1bjogQmVsZ2UgJiBZw7xrIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuXHJcbiAgICAgICAgPCEtLSBHcnVwIDM6IEJlbGdlICYgWcO8ayBCaWxnaWxlcmkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciByb3VuZGVkIHAtMyBtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyLWJvdHRvbSBwYi0yIG1iLTMgZnctYm9sZCB0ZXh0LXNlY29uZGFyeVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtYWx0IG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpEb2N1bWVudENhcmdvSW5mbycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpCdXNpbmVzc1BhcnRuZXInIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZEFjY291bnRzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImFjY291bnRDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwidGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgW2VkaXRpbmdEYXRhXT1cImFjY291bnRUaXRsZVwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbkFjY291bnRTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OldheWJpbGxOdW1iZXInIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aGl0LWxvb2t1cC1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtsb2FkRm5dPVwibG9hZFdheWJpbGxzXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cIndheWJpbGxDb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lPVwiZG9jTnVtXCJcclxuICAgICAgICAgICAgICAgIGtleUV4cHI9XCJkb2NFbnRyeVwiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ0RhdGFdPVwid2F5YmlsbE5vXCJcclxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJvbldheWJpbGxTZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPC9oaXQtbG9va3VwLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGhpdC1sb29rdXAtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbG9hZEZuXT1cImxvYWRTdG9ja0l0ZW1zXCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInN0b2NrSXRlbUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nRGF0YV09XCJzdG9ja05hbWVcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uU3RvY2tJdGVtU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvaGl0LWxvb2t1cC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpDb250YWluZXJObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiY29udGFpbmVyTm9cIlxyXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidLYWRvb2dsdTo6TWFudWFsRW50cnknIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJpc0Zvcm1Mb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlcGFydHVyZVBsYWNlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYm94XHJcbiAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJkZXBhcnR1cmVMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0thZG9vZ2x1OjpBdXRvRmlsbGVkRnJvbVdheWJpbGwnIHwgYWJwTG9jYWxpemF0aW9uXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItM1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMSBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LW11dGVkXCI+e3sgJ0thZG9vZ2x1OjpBcnJpdmFsUGxhY2UnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcclxuICAgICAgICAgICAgICAgIFsodmFsdWUpXT1cImFycml2YWxMb2NhdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtbXV0ZWRcIj57eyAnS2Fkb29nbHU6OkRlc2NyaXB0aW9uJyB8IGFicExvY2FsaXphdGlvbiB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGR4LXRleHQtYXJlYVxyXG4gICAgICAgICAgICAgICAgWyh2YWx1ZSldPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCI3MFwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiaXNGb3JtTG9ja2VkXCJcclxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICAgICAgICAgIDwvZHgtdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gUGhhc2UgMSBBbHQgQnV0b25sYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgbWItM1wiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwiZ29CYWNrKClcIj5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnQgbWUtMVwiPjwvaT4ge3sgJ0thZG9vZ2x1OjpCYWNrJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgIDxhYnAtYnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiF3ZWlnaGluZ01vZGUgJiYgIWlzRm9ybUxvY2tlZFwiXHJcbiAgICAgICAgICBpY29uQ2xhc3M9XCJmYSBmYS1zYXZlXCJcclxuICAgICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgW2xvYWRpbmddPVwiaXNTYXZpbmdcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiPlxyXG4gICAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgIDwvYWJwLWJ1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImlsZXJpR2l0KClcIj5cclxuICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TmV4dCcgfCBhYnBMb2NhbGl6YXRpb24gfX0gPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1yaWdodCBtcy0xXCI+PC9pPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tID09PT09PT09PT0gUEhBU0UgMjogVGFydMSxbSBQYW5lbGkgPT09PT09PT09PSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZm9ybVBoYXNlID09PSAyICYmICFpc0Z1bGx5Q29tcGxldGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGZ3LWJvbGRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYWxhbmNlLXNjYWxlIG1lLTJcIj48L2k+e3sgJ0thZG9vZ2x1OjpXZWlnaGluZ1BhbmVsJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIndlaWdoaW5nTW9kZVwiIGNsYXNzPVwiYmFkZ2UgbXMtMlwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwid2VpZ2hpbmdNb2RlID09PSAnZmlyc3QnID8gJ2JnLXdhcm5pbmcgdGV4dC1kYXJrJyA6ICdiZy1wcmltYXJ5J1wiPlxyXG4gICAgICAgICAgICAgIHt7IHdlaWdoaW5nTW9kZUxhYmVsIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBteC1hdXRvXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBDYW5sxLEgVGFydMSxbSB2ZSBTYWJpdGxlbm1pxZ8gRGXEn2VyIOKAlCDEsGtpIFPDvHR1biAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zIG1iLTRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gU29sIFPDvHR1bjogQ2FubMSxIFRhcnTEsW0gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJnLWxpZ2h0IGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbWItMSBmdy1zZW1pYm9sZCB0ZXh0LXVwcGVyY2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdLYWRvb2dsdTo6TGl2ZVdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMi41cmVtOyBmb250LXdlaWdodDogYm9sZDsgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50U2NhbGVWYWx1ZSAhPSBudWxsID8gKGN1cnJlbnRTY2FsZVZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWxnIHctMTAwIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRvV2VpZ2hpbmcoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1iYWxhbmNlLXNjYWxlIG1lLTJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OlBlcmZvcm1XZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8IS0tIFNhxJ8gU8O8dHVuOiBTYWJpdGxlbm1pxZ8gRGXEn2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJmaXhlZFNjYWxlVmFsdWUgIT0gbnVsbCA/ICdib3JkZXItc3VjY2VzcycgOiAnYmctbGlnaHQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImZpeGVkU2NhbGVWYWx1ZSAhPSBudWxsID8gJ3JnYmEoMjUsMTM1LDg0LDAuMDgpJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHRleHQtY2VudGVyIHB5LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsIG1iLTEgZnctc2VtaWJvbGQgdGV4dC11cHBlcmNhc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImZpeGVkU2NhbGVWYWx1ZSAhPSBudWxsID8gJ3RleHQtc3VjY2VzcycgOiAndGV4dC1tdXRlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OkZpeGVkVmFsdWUnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOiAyLjVyZW07IGZvbnQtd2VpZ2h0OiBib2xkOyBsZXR0ZXItc3BhY2luZzogMC4wNWVtO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAndGV4dC1zdWNjZXNzJyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZml4ZWRTY2FsZVZhbHVlICE9IG51bGwgPyAoZml4ZWRTY2FsZVZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLWxnIHctMTAwIG10LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRTY2FsZVZhbHVlID09IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhYml0bGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1sb2NrIG1lLTJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyAnS2Fkb29nbHU6OkZpeCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSDEsGxrIFRhcnTEsW0gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LXVwcGVyY2FzZSBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpGaXJzdFdlaWdoaW5nJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlyc3RXZWlnaGluZ1ZhbHVlICE9IG51bGw7IGVsc2Ugbm9GaXJzdFdlaWdoaW5nXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keSBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIGZzLTVcIj57eyBmaXJzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJyB9fSBrZzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPnt7ICdLYWRvb2dsdTo6T3BlcmF0b3InIHwgYWJwTG9jYWxpemF0aW9uIH19OiB7eyBmaXJzdE9wZXJhdG9yQ29kZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9GaXJzdFdlaWdoaW5nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keSBwLTIgdGV4dC1tdXRlZCB0ZXh0LWNlbnRlciBmc3QtaXRhbGljXCI+e3sgJ0thZG9vZ2x1OjpOb3RZZXREb25lJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBTb24gVGFydMSxbSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIHRleHQtdXBwZXJjYXNlIG1iLTFcIj57eyAnS2Fkb29nbHU6Okxhc3RXZWlnaGluZycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxhc3RXZWlnaGluZ1ZhbHVlICE9IG51bGw7IGVsc2Ugbm9MYXN0V2VpZ2hpbmdcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5IHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGQgZnMtNVwiPnt7IGxhc3RXZWlnaGluZ1ZhbHVlIHwgbnVtYmVyOicxLjAtMCcgfX0ga2c8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgbGFzdE9wZXJhdG9yQ29kZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9MYXN0V2VpZ2hpbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5IHAtMiB0ZXh0LW11dGVkIHRleHQtY2VudGVyIGZzdC1pdGFsaWNcIj57eyAnS2Fkb29nbHU6Ok5vdFlldERvbmUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIE5ldCBZw7xrIChzYWRlY2Ugc3RlcD0zJ3RlIGfDtnN0ZXIpIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndlaWdoaW5nU3RlcCA9PT0gMyAmJiBuZXRXZWlnaHQgIT0gbnVsbFwiIGNsYXNzPVwiY2FyZCBib3JkZXItc3VjY2VzcyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgdGV4dC1jZW50ZXIgcHktM1wiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNSwxMzUsODQsMC4wOCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VjY2VzcyBzbWFsbCBmdy1zZW1pYm9sZCB0ZXh0LXVwcGVyY2FzZSBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpOZXRXZWlnaHQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc3VjY2VzcyBmdy1ib2xkXCIgc3R5bGU9XCJmb250LXNpemU6IDJyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBuZXRXZWlnaHQgfCBudW1iZXI6JzEuMC0wJyB9fSBrZ1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBQaGFzZSAyIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnZXJpR2l0UGhhc2UoKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2snIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YWJwLWJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiIWlzRnVsbHlDb21wbGV0ZWRcIlxyXG4gICAgICAgIGljb25DbGFzcz1cImZhIGZhLXNhdmVcIlxyXG4gICAgICAgIGJ1dHRvblR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtsb2FkaW5nXT1cImlzU2F2aW5nXCJcclxuICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCI+XHJcbiAgICAgICAge3sgJ0thZG9vZ2x1OjpTYXZlJyB8IGFicExvY2FsaXphdGlvbiB9fVxyXG4gICAgICA8L2FicC1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA9PT09PT09PT09IFNVTU1BUlk6IFRhbWFtbGFuZMSxIEfDtnLDvG7DvG3DvCA9PT09PT09PT09IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJpc0Z1bGx5Q29tcGxldGVkXCI+XHJcblxyXG4gICAgPCEtLSDDnHN0IELDtmzDvG0g4oCUIFRhcnTEsW0gU29udcOnIEthcnRsYXLEsSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItNFwiPlxyXG4gICAgICA8IS0tIMSwbGsgVGFydMSxbSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IG1iLTMgbWItbWQtMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiZy13aGl0ZSBzaGFkb3ctc20gcm91bmRlZCBweS0zIHB4LTQgaC0xMDBcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzBkNmVmZDtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXVwcGVyY2FzZSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkIG1iLTFcIj57eyAnS2Fkb29nbHU6OkZpcnN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICB7eyBmaXJzdFdlaWdoaW5nVmFsdWUgIT0gbnVsbCA/IChmaXJzdFdlaWdoaW5nVmFsdWUgfCBudW1iZXI6JzEuMC0wJykgKyAnIGtnJyA6ICfigJQga2cnIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIj57eyAnS2Fkb29nbHU6Ok9wZXJhdG9yJyB8IGFicExvY2FsaXphdGlvbiB9fToge3sgZmlyc3RPcGVyYXRvckNvZGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gU29uIFRhcnTEsW0gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBtYi0zIG1iLW1kLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmctd2hpdGUgc2hhZG93LXNtIHJvdW5kZWQgcHktMyBweC00IGgtMTAwXCIgc3R5bGU9XCJib3JkZXItbGVmdDogNHB4IHNvbGlkICM2ZjQyYzE7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC11cHBlcmNhc2UgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpMYXN0V2VpZ2hpbmcnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1wiPlxyXG4gICAgICAgICAgICB7eyBsYXN0V2VpZ2hpbmdWYWx1ZSAhPSBudWxsID8gKGxhc3RXZWlnaGluZ1ZhbHVlIHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCI+e3sgJ0thZG9vZ2x1OjpPcGVyYXRvcicgfCBhYnBMb2NhbGl6YXRpb24gfX06IHt7IGxhc3RPcGVyYXRvckNvZGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gTmV0IFnDvGsgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGFkb3ctc20gcm91bmRlZCBweS0zIHB4LTQgaC0xMDBcIiBzdHlsZT1cImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzE5ODc1NDsgYmFja2dyb3VuZDogcmdiYSgyNSwxMzUsODQsMC4wNik7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC11cHBlcmNhc2UgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZCBtYi0xXCI+e3sgJ0thZG9vZ2x1OjpOZXRXZWlnaHQnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiIHN0eWxlPVwiZm9udC1zaXplOiAxLjc1cmVtOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyBjb2xvcjogIzE5ODc1NDtcIj5cclxuICAgICAgICAgICAge3sgbmV0V2VpZ2h0ICE9IG51bGwgPyAobmV0V2VpZ2h0IHwgbnVtYmVyOicxLjAtMCcpICsgJyBrZycgOiAn4oCUIGtnJyB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBBbHQgQsO2bMO8bSDigJQgRGV0YXkgQmlsZ2lsZXJpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgc2hhZG93LXNtXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBmdy1ib2xkXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLXRleHQgbWUtMlwiPjwvaT57eyAnS2Fkb29nbHU6OlJlY29yZERldGFpbHMnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgPCEtLSBTb2wgU8O8dHVuIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6R2F0ZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZ2F0ZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPkFyYcOnIEhhcmVrZXQgVMO8csO8PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGVudHJ5VHlwZU5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6RW50cnlEYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBlbnRyeURhdGUgPyAoZW50cnlEYXRlIHwgZGF0ZTonZGQuTU0ueXl5eScpIDogJ+KAlCcgfX0ge3sgZW50cnlUaW1lIHx8ICcnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkV4aXREYXRlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBleGl0RGF0ZSA/IChleGl0RGF0ZSB8IGRhdGU6J2RkLk1NLnl5eXknKSA6ICfigJQnIH19IHt7IGV4aXRUaW1lIHx8ICcnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlRydWNrUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHRydWNrUGxhdGVObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpUcmFpbGVyUGxhdGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IHRyYWlsZXJQbGF0ZU5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRyaXZlck5hbWUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGRyaXZlckZ1bGxOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlRjSWRlbnRpdHlObycgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgdGNObyB8fCAn4oCUJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBTYcSfIFPDvHR1biAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRyaXZlckNvZGUnIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGRyaXZlck5hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6QnVzaW5lc3NQYXJ0bmVyJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBhY2NvdW50VGl0bGUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6V2F5YmlsbE51bWJlcicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgd2F5YmlsbE5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OlNjYWxlQ29kZScgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgc2NhbGVOYW1lIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6Okl0ZW1Db2RlJyB8IGFicExvY2FsaXphdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNyBmdy1tZWRpdW1cIj57eyBzdG9ja05hbWUgfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMiBweS0xXCIgc3R5bGU9XCJib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YwZjBmMDtcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTUgdGV4dC1tdXRlZCBzbWFsbCBmdy1zZW1pYm9sZFwiPnt7ICdLYWRvb2dsdTo6Q29udGFpbmVyTm8nIHwgYWJwTG9jYWxpemF0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC03IGZ3LW1lZGl1bVwiPnt7IGNvbnRhaW5lck5vIHx8ICfigJQnIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTIgcHktMVwiIHN0eWxlPVwiYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMGYwZjA7XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01IHRleHQtbXV0ZWQgc21hbGwgZnctc2VtaWJvbGRcIj57eyAnS2Fkb29nbHU6OkRlcGFydHVyZVRvQXJyaXZhbCcgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgKGRlcGFydHVyZUxvY2F0aW9uIHx8ICfigJQnKSArICcg4oaSICcgKyAoYXJyaXZhbExvY2F0aW9uIHx8ICfigJQnKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yIHB5LTFcIiBzdHlsZT1cImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjBmMGYwO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNSB0ZXh0LW11dGVkIHNtYWxsIGZ3LXNlbWlib2xkXCI+e3sgJ0thZG9vZ2x1OjpEZXNjcmlwdGlvbicgfCBhYnBMb2NhbGl6YXRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTcgZnctbWVkaXVtXCI+e3sgZGVzY3JpcHRpb24gfHwgJ+KAlCcgfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFsdCBCdXRvbmxhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMyBtYi0zXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIChjbGljayk9XCJnb0JhY2soKVwiPlxyXG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdCBtZS0xXCI+PC9pPiB7eyAnS2Fkb29nbHU6OkJhY2tUb0xpc3QnIHwgYWJwTG9jYWxpemF0aW9uIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCJlbnRyeVR5cGVNYWxHQyAmJiByZWNvcmQ/LnVfU3RhdHVzID09PSAnMidcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi13YXJuaW5nXCJcclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEb2luZ0dvb2RzTW92ZW1lbnRcIlxyXG4gICAgICAgIChjbGljayk9XCJkb0dvb2RzTW92ZW1lbnQoKVwiPlxyXG4gICAgICAgIDxpIFtjbGFzc109XCJpc0RvaW5nR29vZHNNb3ZlbWVudCA/ICdmYSBmYS1zcGlubmVyIGZhLXNwaW4gbWUtMScgOiAnZmEgZmEtZXhjaGFuZ2UgbWUtMSdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAge3sgJ0thZG9vZ2x1OjpNYWxHY1lhcCcgfCBhYnBMb2NhbGl6YXRpb24gfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvYWJwLXBhZ2U+XHJcbiJdfQ==