tnx-shared 5.3.408 → 5.3.409

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.
@@ -431,6 +431,18 @@ export class FileViewerComponent extends ComponentBase {
431
431
  return styleClass;
432
432
  }
433
433
  kySoHandle() {
434
+ return __awaiter(this, void 0, void 0, function* () {
435
+ this.showWaitBox('Đang thực hiện ký số, vui lòng kiểm tra ứng dụng SmartCA');
436
+ const res = yield this._fileObjectService.kySoSmartCA(this.model.data);
437
+ if (res.success) {
438
+ this._notifierService.showSuccess('Thực hiện ký số thành công');
439
+ }
440
+ else {
441
+ this._notifierService.showWarning(res.error);
442
+ }
443
+ this.hideWaitBox();
444
+ this.show = false;
445
+ });
434
446
  }
435
447
  ngAfterViewInit() {
436
448
  // Access the PDF.js viewer instance
@@ -460,7 +472,20 @@ export class FileViewerComponent extends ComponentBase {
460
472
  const rect = target.getBoundingClientRect();
461
473
  const x = event.clientX - rect.left;
462
474
  const y = event.clientY - rect.top;
463
- // Create marker at this position
475
+ const WIDTH = this.model.data.width || 100;
476
+ const HEIGHT = this.model.data.height || 100;
477
+ // Convert pixel sang point TRƯỚC
478
+ const clickXPoint = this.pixelToPoint(x);
479
+ const clickYPoint = this.pixelToPoint(y);
480
+ const widthPoint = this.pixelToPoint(WIDTH);
481
+ const heightPoint = this.pixelToPoint(HEIGHT);
482
+ // SAU ĐÓ mới tính toán như C#
483
+ const x1 = clickXPoint;
484
+ const y1 = clickYPoint - heightPoint;
485
+ const x2 = clickXPoint + widthPoint;
486
+ const y2 = clickYPoint;
487
+ const rectangle = `${x1},${y1},${x2},${y2}`;
488
+ this.model.data.signatureLocation = rectangle;
464
489
  this.createMarker(target, x, y, pageNumber);
465
490
  }
466
491
  }
@@ -471,8 +496,9 @@ export class FileViewerComponent extends ComponentBase {
471
496
  position: absolute;
472
497
  left: ${x}px;
473
498
  top: ${y}px;
474
- width: 100px;
475
- height: 100px;
499
+ transform: translate(-50%,-50%);
500
+ width: ${this.model.data.width}px;
501
+ height: ${this.model.data.height}px;
476
502
  background-image: url(${this.model.data.fileBase64Content});
477
503
  pointer-events: none;
478
504
  background-size: contain; /* Fits the image */
@@ -480,9 +506,13 @@ export class FileViewerComponent extends ComponentBase {
480
506
  background-position: center top; /* Positioning */
481
507
  z-index: 999;
482
508
  `;
509
+ this.model.data.page = page;
483
510
  const pageContainer = parent.closest('.page');
484
511
  pageContainer === null || pageContainer === void 0 ? void 0 : pageContainer.appendChild(marker);
485
512
  }
513
+ pixelToPoint(pixel, dpi = 96) {
514
+ return Math.round(pixel * 72 / dpi * 100); // Làm tròn 2 chữ số thập phân
515
+ }
486
516
  }
487
517
  FileViewerComponent.decorators = [
488
518
  { type: Component, args: [{
@@ -523,4 +553,4 @@ FileViewerComponent.propDecorators = {
523
553
  onRename: [{ type: Output }],
524
554
  onDelete: [{ type: Output }]
525
555
  };
526
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLXZpZXdlci9maWxlLXZpZXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FB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LEtBQUs7eUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3lCQUNMLEtBQUs7c0JBQ0wsTUFBTTt1QkFDTixNQUFNO3VCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9zaWRlYmFyJztcblxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgQ29tbW9uRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb21tb24tZXJyb3ItY29kZSc7XG5pbXBvcnQgeyBGSUxFX1RZUEVTIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ3J1ZEZvcm1EYXRhLCBQb3B1cFNpemUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XG5pbXBvcnQgeyBFZGl0RmlsZUNvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZWRpdC1maWxlLWNvbW1hbmQnO1xuaW1wb3J0IHsgQ29tbWFuZFR5cGUsIFRuQ2xpZW50Q29tbWFuZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90bi1jbGllbnQtY29tbWFuZCc7XG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVZlcnNpb25EVE8gfSBmcm9tICcuLi9tb2RlbHMvZmlsZS12ZXJzaW9uLWR0byc7XG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL21vZGVscy9nZW5lcmF0ZS1saW5rLWRvd25sb2FkLWR0byc7XG5pbXBvcnQgeyBEb3dubG9hZExpbmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG93bmxvYWQtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVFeHBsb3JlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLW9iamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVWZXJzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZpbGUtdmVyc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZvbGRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb2xkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLy4uLy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuXG5kZWNsYXJlIGxldCBEb2NzQVBJOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmlsZS12aWV3ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnZmlsZS12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydmaWxlLXZpZXdlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlVmlld2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnc2lkZWJhcicpIHNpZGViYXI6IFNpZGViYXI7XG4gICAgQElucHV0KCkgbW9kZWw6IGFueSA9IHtcbiAgICAgICAgZGF0YToge31cbiAgICB9O1xuICAgIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd1ByaW50ID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93RG93bmxvYWQgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dEZWxldGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIGZ1bGxTY3JlZW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dNb2RhbCA9IHRydWU7XG4gICAgQElucHV0KCkgc3R5bGVDbGFzcyA9IFwiXCI7XG4gICAgQE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVuYW1lOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRlbGV0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZzogTW9kdWxlQ29uZmlnO1xuICAgIGRhdGE6IGFueSA9IHt9O1xuICAgIHNob3cgPSBmYWxzZTtcbiAgICBpc1JlYWRvbmx5ID0gZmFsc2U7XG4gICAgZmlsZVR5cGVzID0gRklMRV9UWVBFUztcbiAgICByZW5hbWVGaWxlRm9ybTogYW55O1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2F1dGhlblNlcnZpY2U6IEF1dGhlblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVFeHBsb3JlclNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NvbmZpcm1TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF90bkNsaWVudFNlcnZpY2U6IFRuQ2xpZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZmlsZVZlcnNpb25TZXJ2aWNlOiBGaWxlVmVyc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVPYmplY3RTZXJ2aWNlOiBGaWxlT2JqZWN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZm9sZGVyU2VydmljZTogRm9sZGVyU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IF9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICAgICAgYXdhaXQgdGhpcy5nZXREZXRhaWwoKTtcbiAgICAgICAgdGhpcy5zaG93RmlsZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldERldGFpbCgpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5tb2RlbC5kYXRhO1xuICAgICAgICBpZiAoIXRoaXMuZGF0YS5maWxlSWQgJiYgIXRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLmZpbGVVcmwgIT0gbnVsbCAmJiB0aGlzLmRhdGEuZmlsZVVybCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZXh0ZW5zaW9uID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZUV4dGVuc2lvbih0aGlzLmRhdGEubmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZpbGVUeXBlID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZVR5cGUodGhpcy5kYXRhLmV4dGVuc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0YTogYW55ID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IChhd2FpdCB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5maWxlVmVyc2lvbklkKSkuZGF0YSB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKGZpbGVWZXJzaW9uLmZpbGVJZCkpLmRhdGEgfHwge307XG4gICAgICAgICAgICBkYXRhID0gZmlsZU9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5maWxlSWQpKS5kYXRhIHx8IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5leHRlbnNpb24gPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlRXh0ZW5zaW9uKGRhdGEubmFtZSk7XG4gICAgICAgIGRhdGEuZmlsZVR5cGUgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRGaWxlVHlwZShkYXRhLmV4dGVuc2lvbik7XG4gICAgICAgIGRhdGEuZmlsZUlkID0gdGhpcy5kYXRhLmZpbGVJZDtcbiAgICAgICAgZGF0YS5maWxlVmVyc2lvbklkID0gdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQ7XG5cbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG5cbiAgICBzaG93RmlsZSgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbWFnZXMgPSBbXTtcbiAgICAgICAgdGhpcy5tb2RlbC5pc0ltYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJvb3Quc3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULktFWV9ET1dOX0VTQywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVNpZGViYXIobnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZm9yY2VVc2luZ0ludGVybmFsID0gZmFsc2U7XG4gICAgICAgIGxldCBwcm9jZXNzRnVuYzogKHVybDogc3RyaW5nKSA9PiB2b2lkO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuZGF0YS5maWxlVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGSUxFX1RZUEVTLklNQUdFOlxuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzU2hvd0ltYWdlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuVklERU86XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuQVVESU86XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NWaWRlb09yQXVkaW8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRklMRV9UWVBFUy5QREY6XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NGaWxlUGRmLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuaXNJbWFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGZvcmNlVXNpbmdJbnRlcm5hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmMgPSB0aGlzLnByb2Nlc3NPdGhlckZpbGVFeHRlbnNpb24uYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5kYXRhLmZpbGVVcmwgfHwgdGhpcy5kYXRhLmZpbGVVcmwgPT09ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbCgpO1xuICAgICAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZW5lcmF0ZURvd25sb2FkTGluayhtb2RlbClcbiAgICAgICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZ2V0QW5vbnltb3VzRG93bmxvYWRVcmxGb3JWaWV3ZXIocnMuZGF0YSwgZm9yY2VVc2luZ0ludGVybmFsKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0Z1bmModXJsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3NGdW5jKHRoaXMuZGF0YS5maWxlVXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoKSB7XG4gICAgICAgIHJldHVybiA8R2VuZXJhdGVMaW5rRG93bmxvYWREVE8+e1xuICAgICAgICAgICAgZmlsZUlkOiB0aGlzLmRhdGEuZmlsZUlkLFxuICAgICAgICAgICAgZmlsZVZlcnNpb25JZDogdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWRcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIHNob3dJbWFnZVdoZW5Mb2FkZWQoKSB7XG4gICAgICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWFnZS12aWV3LWxpc3QnKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgbG9hZGluZzogYW55ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5pdi1sb2FkZXInKTtcbiAgICAgICAgICAgIGlmIChsb2FkaW5nICYmIGxvYWRpbmcuc3R5bGUuZGlzcGxheSA9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW1nLml2LWltYWdlLml2LWxhcmdlLWltYWdlJyk7XG4gICAgICAgICAgICAgICAgaWYgKGltZykge1xuICAgICAgICAgICAgICAgICAgICBpbWcuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zaG93SW1hZ2VXaGVuTG9hZGVkKCksIDUwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NTaG93SW1hZ2UodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5pbWFnZXMgPSBbdXJsXTtcbiAgICB9XG5cbiAgICBwcm9jZXNzVmlkZW9PckF1ZGlvKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubW9kZWwuZmlsZVVybCA9IHVybDtcbiAgICB9XG5cbiAgICBwcm9jZXNzRmlsZVBkZih1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1vZGVsLmZpbGVVcmwgPSB1cmw7XG4gICAgfVxuXG4gICAgcHJvY2Vzc090aGVyRmlsZUV4dGVuc2lvbih1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLmluaXREb2N1bWVudFZpZXdlcih0aGlzLmRhdGEuZXh0ZW5zaW9uLCB0aGlzLmRhdGEuZmlsZVR5cGUsIHVybCk7XG4gICAgfVxuXG4gICAgaW5pdERvY3VtZW50Vmlld2VyKGZpbGVFeHRlbnNpb24sIGZpbGVUeXBlLCBmaWxlVXJsKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSA/ICdkZXNrdG9wJyA6ICdtb2JpbGUnLFxuICAgICAgICAgICAgZG9jdW1lbnRUeXBlOiBgJHtmaWxlVHlwZX1gLFxuICAgICAgICAgICAgZWRpdG9yQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgICAgICAgICAgIGN1c3RvbWl6YXRpb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2hhdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFib3V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudHM6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZG93bmxvYWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVkaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcmludDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcmV2aWV3OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbEZvcm1zOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmlsZVR5cGU6IGAke2ZpbGVFeHRlbnNpb259YCxcbiAgICAgICAgICAgICAgICB0aXRsZTogYCR7dGhpcy5tb2RlbC5kYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICB1cmw6IGAke2ZpbGVVcmx9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1vZGVsLmRvY0VkaXRvciA9IG5ldyBEb2NzQVBJLkRvY0VkaXRvcignZmlsZS12aWV3ZXInLCBjb25maWcpO1xuICAgIH1cblxuICAgIGluaXRGb3JtKCkge1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtID0ge1xuICAgICAgICAgICAgaGVhZGVyOiAnxJDhu5VpIHTDqm4gdOG7h3AnLFxuICAgICAgICAgICAgc2hvdzogZmFsc2UsXG4gICAgICAgICAgICBmb3JtRGF0YTogbmV3IENydWRGb3JtRGF0YSgpLFxuICAgICAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMjAwXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFzeW5jIGdldE9yaWVudGF0aW9uKGltYWdlVXJsLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChpbWFnZVVybCk7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXMuYmxvYigpO1xuXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IG5ldyBEYXRhVmlldyhldmVudC50YXJnZXQucmVzdWx0KTtcblxuICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDE2KDAsIGZhbHNlKSAhPSAweEZGRDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYmxvYiwgLTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSB2aWV3LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gMjtcblxuICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmtlciA9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hcmtlciA9PSAweEZGRTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDMyKG9mZnNldCArPSAyLCBmYWxzZSkgIT0gMHg0NTc4Njk2Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXR0bGUgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQgKz0gNiwgZmFsc2UpID09IDB4NDk0OTtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VWludDMyKG9mZnNldCArIDQsIGxpdHRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZ3MgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGxpdHRsZSk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlldy5nZXRVaW50MTYob2Zmc2V0ICsgKGkgKiAxMiksIGxpdHRsZSkgPT0gMHgwMTEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIHZpZXcuZ2V0VWludDE2KG9mZnNldCArIChpICogMTIpICsgOCwgbGl0dGxlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1hcmtlciAmIDB4RkYwMCkgIT0gMHhGRjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHZpZXcuZ2V0VWludDE2KG9mZnNldCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhibG9iLCAtMSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJhc2U2NChibG9iLCBvcmllbnRhdGlvbikge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICAgIC8vIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGltYWdlVXJsKTtcbiAgICAgICAgLy8gY29uc3QgYmxvYiA9IGF3YWl0IHJlcy5ibG9iKCk7XG5cbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlNjQgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICAgICAgdGhpcy5yZXNldE9yaWVudGF0aW9uKGJhc2U2NCwgb3JpZW50YXRpb24sIChyZXNldEJhc2U2NEltYWdlKSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlV2l0aG91dEJhc2U2NFByZWZpeCA9IHJlc2V0QmFzZTY0SW1hZ2Uuc3BsaXQoJ2Jhc2U2NCwnKVsxXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmltYWdlcyA9IFtpbWFnZVdpdGhvdXRCYXNlNjRQcmVmaXhdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3I6ICcsIGVycm9yKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICByZXNldE9yaWVudGF0aW9uKHNyY0Jhc2U2NCwgc3JjT3JpZW50YXRpb24sIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGltZy53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBpbWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLFxuICAgICAgICAgICAgICAgIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgICAgICAvLyBzZXQgcHJvcGVyIGNhbnZhcyBkaW1lbnNpb25zIGJlZm9yZSB0cmFuc2Zvcm0gJiBleHBvcnRcbiAgICAgICAgICAgIGlmICg0IDwgc3JjT3JpZW50YXRpb24gJiYgc3JjT3JpZW50YXRpb24gPCA5KSB7XG4gICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBjb250ZXh0IGJlZm9yZSBkcmF3aW5nIGltYWdlXG4gICAgICAgICAgICBzd2l0Y2ggKHNyY09yaWVudGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAyOiBjdHgudHJhbnNmb3JtKC0xLCAwLCAwLCAxLCB3aWR0aCwgMCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogY3R4LnRyYW5zZm9ybSgtMSwgMCwgMCwgLTEsIHdpZHRoLCBoZWlnaHQpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IGN0eC50cmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIGhlaWdodCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNTogY3R4LnRyYW5zZm9ybSgwLCAxLCAxLCAwLCAwLCAwKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA2OiBjdHgudHJhbnNmb3JtKDAsIDEsIC0xLCAwLCBoZWlnaHQsIDApOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDc6IGN0eC50cmFuc2Zvcm0oMCwgLTEsIC0xLCAwLCBoZWlnaHQsIHdpZHRoKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiBjdHgudHJhbnNmb3JtKDAsIC0xLCAxLCAwLCAwLCB3aWR0aCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkcmF3IGltYWdlXG4gICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XG5cbiAgICAgICAgICAgIC8vIGV4cG9ydCBiYXNlNjRcbiAgICAgICAgICAgIGNhbGxiYWNrKGNhbnZhcy50b0RhdGFVUkwoKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaW1nLnNyYyA9IHNyY0Jhc2U2NDtcbiAgICB9XG5cbiAgICBvblRvcGJhckl0ZW1DbGljayhldmVudCkge1xuICAgICAgICB0aGlzLm1vZGVsLmFjdGl2ZVRvcGJhckl0ZW0gPSAhdGhpcy5tb2RlbC5hY3RpdmVUb3BiYXJJdGVtO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGNsb3NlU2lkZWJhcihldmVudCA9IG51bGwpIHtcbiAgICAgICAgaWYgKCFldmVudCB8fCBldmVudC50YXJnZXQuaWQgPT0gJ2ZpbGVWaWV3ZXJIb2xkZXInIHx8IGV2ZW50LnRhcmdldC5pZCA9PSAnaW1hZ2Utdmlldy1saXN0JyB8fCBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdpbWFnZS1jb250YWluZXInKVxuICAgICAgICAgICAgfHwgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaXYtaW1hZ2UtdmlldycpKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFjdGl2ZVRvcGJhckl0ZW0gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vbkNsb3NlLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaW50KCkge1xuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmNvbnZlcnRUb1BkZkJhc2U2NCh0aGlzLmRhdGEubmFtZSwgdGhpcy5kYXRhLmZpbGVJZCwgdGhpcy5kYXRhLmZpbGVWZXJzaW9uSWQpXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycy5zdWNjZXNzIHx8ICFycy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLnByaW50KHJzLmRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZG93bmxvYWQoKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKCk7XG4gICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2UuZG93bmxvYWRMaW5rKG1vZGVsKTtcbiAgICB9XG5cbiAgICBkZWxldGVGaWxlKCkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9mb2xkZXJTZXJ2aWNlLmRlbGV0ZU11bHRpcGxlKFt0aGlzLmRhdGFdKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU2lkZWJhcihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmFtZUZpbGUoKSB7XG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0uaGVhZGVyID0gJ8SQ4buVaSB0w6puIHRoxrAgbeG7pWMnO1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtLmZvcm1EYXRhLmRhdGEgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5kYXRhLmlkXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBvblNhdmVkUmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZpbGUgPSAoYXdhaXQgdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RGV0YWlsKHRoaXMuZGF0YS5pZCkpLmRhdGE7XG4gICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEubmFtZSA9IGZpbGUubmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2FuY2VsUmVuYW1lRmlsZSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5zaG93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgZWRpdEZpbGUoKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJBhbmcga+G6v3QgbuG7kWkgbeG7nyDhu6luZyBk4bulbmcnKTtcblxuICAgICAgICB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuY3JlYXRlTmV3TWlub3JWZXJzaW9uKHRoaXMuZGF0YS5maWxlSWQsICcnLCBmYWxzZSlcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVmVyc2lvbiA9IDxGaWxlVmVyc2lvbkRUTz5yZXNwb25zZS5kYXRhO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRGaWxlVmVyc2lvbkRvd25sb2FkVXJsKGZpbGVWZXJzaW9uLmlkKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLkVkaXRGaWxlO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQua2V5ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LnNpZ25hbHIuY2xpZW50S2V5O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpbGVDb21tYW5kID0gbmV3IEVkaXRGaWxlQ29tbWFuZCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlU2VydmljZUVuZHBvaW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnVwbG9hZEZpbGVBcGkgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0VXBsb2FkRmlsZVZlcnNpb25BcGlVcmwoKTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQucmVtb3ZlRmlsZUFwaSA9IHRoaXMuX2ZpbGVWZXJzaW9uU2VydmljZS5nZXRSZW1vdmVGaWxlVmVyc2lvbkFwaVVybCgpO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVXJsID0gZmlsZVVybDtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuaXNEcmFmdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmdyb3VwRmlsZU5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZU5hbWUgPSB0aGlzLmRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQudmVyc2lvbiA9IGZpbGVWZXJzaW9uLnZlcnNpb25OYW1lO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5maWxlVmVyc2lvbklkID0gZmlsZVZlcnNpb24uaWQ7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmFjY2Vzc1Rva2VuID0gdGhpcy5fYXV0aGVuU2VydmljZS5nZXRBY2Nlc3NUb2tlbigpO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQuZGF0YSA9IGVkaXRGaWxlQ29tbWFuZDtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3RuQ2xpZW50U2VydmljZS5zZW5kQ29tbWFuZChjb21tYW5kKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQ29tbW9uRXJyb3JDb2RlLkVSUk9SX1NFUlZJQ0VfTk9UX1JVTiA9PT0gZXJyb3Iuc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93UmVzcG9uc2VFcnJvcigwLCBudWxsLCAnRmlsZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdGSUxFX0VYUExPUkVSLk1FU1NBR0VfRVJST1JfSEVBREVSJyksXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRklMRV9FWFBMT1JFUi5NRVNTQUdFX0VSUk9SX0RFVEFJTCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlmZTogNTAwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnlDb25uZWN0VG9DbGllbnQoKSB7XG5cbiAgICB9XG5cbiAgICBpc0Rlc2t0b3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCk7XG4gICAgfVxuXG4gICAgaXNGaWxlVHlwZSh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsZVR5cGUgPT0gdHlwZTtcbiAgICB9XG4gICAgZ2V0U3R5bGVDbGFzc0J5RG9jdW1lbnRUeXBlKGRvY1R5cGUpIHtcbiAgICAgICAgbGV0IHN0eWxlQ2xhc3MgPSB0aGlzLnN0eWxlQ2xhc3M7XG4gICAgICAgIGlmIChkb2NUeXBlID09PSBGSUxFX1RZUEVTLlBERikge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlQ2xhc3MgKyAnICcgKyAncGRmLWNvbnRhaW5lcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlQ2xhc3M7XG4gICAgfVxuXG4gICAga3lTb0hhbmRsZSgpIHtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBBY2Nlc3MgdGhlIFBERi5qcyB2aWV3ZXIgaW5zdGFuY2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwZGZWaWV3ZXIgPSAod2luZG93IGFzIGFueSkuUERGVmlld2VyQXBwbGljYXRpb24/LnBkZlZpZXdlcjtcblxuICAgICAgICAgICAgaWYgKHBkZlZpZXdlcikge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBjbGljayBsaXN0ZW5lciB0byBlYWNoIHBhZ2UgY2FudmFzXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlckNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhZ2VDbGljayhlIGFzIE1vdXNlRXZlbnQsIHBkZlZpZXdlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgIH1cblxuICAgIGhhbmRsZVBhZ2VDbGljayhldmVudDogTW91c2VFdmVudCwgcGRmVmlld2VyOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBtYXJrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY3VzdG9tLW1hcmtlcmApO1xuICAgICAgICBpZiAobWFya2VyKSB7XG4gICAgICAgICAgICBtYXJrZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NhbnZhc1dyYXBwZXInKSB8fFxuICAgICAgICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdDQU5WQVMnKSB7XG5cbiAgICAgICAgICAgIC8vIEdldCBwYWdlIG51bWJlciBhbmQgY29vcmRpbmF0ZXNcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VEaXYgPSB0YXJnZXQuY2xvc2VzdCgnLnBhZ2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBwYXJzZUludChwYWdlRGl2Py5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1udW1iZXInKSB8fCAnMScpO1xuXG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wO1xuXG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBtYXJrZXIgYXQgdGhpcyBwb3NpdGlvblxuICAgICAgICAgICAgdGhpcy5jcmVhdGVNYXJrZXIodGFyZ2V0LCB4LCB5LCBwYWdlTnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZU1hcmtlcihwYXJlbnQ6IEhUTUxFbGVtZW50LCB4OiBudW1iZXIsIHk6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBtYXJrZXIuaWQgPSAnY3VzdG9tLW1hcmtlcic7XG4gICAgICAgIG1hcmtlci5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgbGVmdDogJHt4fXB4O1xuICAgICAgICAgICAgdG9wOiAke3l9cHg7XG4gICAgICAgICAgICB3aWR0aDogMTAwcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCR7dGhpcy5tb2RlbC5kYXRhLmZpbGVCYXNlNjRDb250ZW50fSk7XG4gICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsgICAgICAgIC8qIEZpdHMgdGhlIGltYWdlICovXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyAgICAvKiBObyB0aWxpbmcgKi9cbiAgICAgICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciB0b3A7IC8qIFBvc2l0aW9uaW5nICovXG4gICAgICAgICAgICB6LWluZGV4OiA5OTk7XG4gICAgICAgIGA7XG4gICAgICAgIGNvbnN0IHBhZ2VDb250YWluZXIgPSBwYXJlbnQuY2xvc2VzdCgnLnBhZ2UnKTtcbiAgICAgICAgcGFnZUNvbnRhaW5lcj8uYXBwZW5kQ2hpbGQobWFya2VyKTtcbiAgICB9XG59XG4iXX0=
556
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9maWxlLXZpZXdlci9maWxlLXZpZXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FB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LEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtJQUM3RSxDQUFDOzs7WUFqaUJKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsYUFBYTtnQkFDdkIsdWdnQkFBeUM7Z0JBRXpDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDOzthQUN2Qzs7O1lBbkJRLG1CQUFtQjtZQWhCUixVQUFVO1lBY3JCLGFBQWE7WUFRYixtQkFBbUI7WUFuQkUsY0FBYztZQWNuQyxlQUFlO1lBZGYsbUJBQW1CO1lBZW5CLGVBQWU7WUFNZixrQkFBa0I7WUFUbEIsbUJBQW1CO1lBYm5CLHFCQUFxQjtZQXFCckIsaUJBQWlCO1lBRmpCLG1CQUFtQjtZQUluQixhQUFhO1lBekJ3QixRQUFROzs7c0JBcUNqRCxTQUFTLFNBQUMsU0FBUztvQkFDbkIsS0FBSzt1QkFHTCxLQUFLO3dCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3lCQUNMLEtBQUs7d0JBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLE1BQU07dUJBQ04sTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvc2lkZWJhcic7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IENvbW1vbkVycm9yQ29kZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29tbW9uLWVycm9yLWNvZGUnO1xuaW1wb3J0IHsgRklMRV9UWVBFUyB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IENydWRGb3JtRGF0YSwgUG9wdXBTaXplIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9jb25maWdzL21vZHVsZS1jb25maWcnO1xuaW1wb3J0IHsgRWRpdEZpbGVDb21tYW5kIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2VkaXQtZmlsZS1jb21tYW5kJztcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xuaW1wb3J0IHsgQXV0aGVuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbi5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFRuQ2xpZW50U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RuLWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVWZXJzaW9uRFRPIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtdmVyc2lvbi1kdG8nO1xuaW1wb3J0IHsgR2VuZXJhdGVMaW5rRG93bmxvYWREVE8gfSBmcm9tICcuLi9tb2RlbHMvZ2VuZXJhdGUtbGluay1kb3dubG9hZC1kdG8nO1xuaW1wb3J0IHsgRG93bmxvYWRMaW5rU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1leHBsb3Jlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbGVPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlVmVyc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlLXZlcnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBGb2xkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9sZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi8uLi8uLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcblxuZGVjbGFyZSBsZXQgRG9jc0FQSTogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZpbGUtdmlld2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2ZpbGUtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnZmlsZS12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRmlsZVZpZXdlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoJ3NpZGViYXInKSBzaWRlYmFyOiBTaWRlYmFyO1xuICAgIEBJbnB1dCgpIG1vZGVsOiBhbnkgPSB7XG4gICAgICAgIGRhdGE6IHt9XG4gICAgfTtcbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dQcmludCA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd0Rvd25sb2FkID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93RGVsZXRlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBmdWxsU2NyZWVuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzaG93TW9kYWwgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3MgPSBcIlwiO1xuICAgIEBPdXRwdXQoKSBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbmFtZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25EZWxldGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcbiAgICBkYXRhOiBhbnkgPSB7fTtcbiAgICBzaG93ID0gZmFsc2U7XG4gICAgaXNSZWFkb25seSA9IGZhbHNlO1xuICAgIGZpbGVUeXBlcyA9IEZJTEVfVFlQRVM7XG4gICAgcmVuYW1lRmlsZUZvcm06IGFueTtcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9hdXRoZW5TZXJ2aWNlOiBBdXRoZW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlRXhwbG9yZXJTZXJ2aWNlOiBGaWxlRXhwbG9yZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jb25maXJtU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdG5DbGllbnRTZXJ2aWNlOiBUbkNsaWVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZpbGVWZXJzaW9uU2VydmljZTogRmlsZVZlcnNpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgX2RldmljZURldGVjdG9yU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2Rvd25sb2FkTGlua1NlcnZpY2U6IERvd25sb2FkTGlua1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZvbGRlclNlcnZpY2U6IEZvbGRlclNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSBfaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0RGV0YWlsKCk7XG4gICAgICAgIHRoaXMuc2hvd0ZpbGUoKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXREZXRhaWwoKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMubW9kZWwuZGF0YTtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGEuZmlsZUlkICYmICF0aGlzLmRhdGEuZmlsZVZlcnNpb25JZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5maWxlVXJsICE9IG51bGwgJiYgdGhpcy5kYXRhLmZpbGVVcmwgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmV4dGVuc2lvbiA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEZpbGVFeHRlbnNpb24odGhpcy5kYXRhLm5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5maWxlVHlwZSA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEZpbGVUeXBlKHRoaXMuZGF0YS5leHRlbnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRhdGE6IGFueSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmRhdGEuZmlsZVZlcnNpb25JZCkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVZlcnNpb24gPSAoYXdhaXQgdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldERldGFpbCh0aGlzLmRhdGEuZmlsZVZlcnNpb25JZCkpLmRhdGEgfHwge307XG4gICAgICAgICAgICBjb25zdCBmaWxlT2JqZWN0ID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldERldGFpbChmaWxlVmVyc2lvbi5maWxlSWQpKS5kYXRhIHx8IHt9O1xuICAgICAgICAgICAgZGF0YSA9IGZpbGVPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldERldGFpbCh0aGlzLmRhdGEuZmlsZUlkKSkuZGF0YSB8fCB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEuZXh0ZW5zaW9uID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZUV4dGVuc2lvbihkYXRhLm5hbWUpO1xuICAgICAgICBkYXRhLmZpbGVUeXBlID0gdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0RmlsZVR5cGUoZGF0YS5leHRlbnNpb24pO1xuICAgICAgICBkYXRhLmZpbGVJZCA9IHRoaXMuZGF0YS5maWxlSWQ7XG4gICAgICAgIGRhdGEuZmlsZVZlcnNpb25JZCA9IHRoaXMuZGF0YS5maWxlVmVyc2lvbklkO1xuXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgfVxuXG4gICAgc2hvd0ZpbGUoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuaW1hZ2VzID0gW107XG4gICAgICAgIHRoaXMubW9kZWwuaXNJbWFnZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgIHRoaXMuY29udGV4dC5yb290LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVC5LRVlfRE9XTl9FU0MsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTaWRlYmFyKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IGZvcmNlVXNpbmdJbnRlcm5hbCA9IGZhbHNlO1xuICAgICAgICBsZXQgcHJvY2Vzc0Z1bmM6ICh1cmw6IHN0cmluZykgPT4gdm9pZDtcbiAgICAgICAgc3dpdGNoICh0aGlzLmRhdGEuZmlsZVR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRklMRV9UWVBFUy5JTUFHRTpcbiAgICAgICAgICAgICAgICBwcm9jZXNzRnVuYyA9IHRoaXMucHJvY2Vzc1Nob3dJbWFnZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGSUxFX1RZUEVTLlZJREVPOlxuICAgICAgICAgICAgY2FzZSBGSUxFX1RZUEVTLkFVRElPOlxuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzVmlkZW9PckF1ZGlvLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZJTEVfVFlQRVMuUERGOlxuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzRmlsZVBkZi5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmlzSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3JjZVVzaW5nSW50ZXJuYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jID0gdGhpcy5wcm9jZXNzT3RoZXJGaWxlRXh0ZW5zaW9uLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZGF0YS5maWxlVXJsIHx8IHRoaXMuZGF0YS5maWxlVXJsID09PSAnJykge1xuICAgICAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldEdlbmVyYXRlRG93bmxvYWRMaW5rTW9kZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2Rvd25sb2FkTGlua1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2VuZXJhdGVEb3dubG9hZExpbmsobW9kZWwpXG4gICAgICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmdldEFub255bW91c0Rvd25sb2FkVXJsRm9yVmlld2VyKHJzLmRhdGEsIGZvcmNlVXNpbmdJbnRlcm5hbCk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NGdW5jKHVybCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzRnVuYyh0aGlzLmRhdGEuZmlsZVVybCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRHZW5lcmF0ZURvd25sb2FkTGlua01vZGVsKCkge1xuICAgICAgICByZXR1cm4gPEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPPntcbiAgICAgICAgICAgIGZpbGVJZDogdGhpcy5kYXRhLmZpbGVJZCxcbiAgICAgICAgICAgIGZpbGVWZXJzaW9uSWQ6IHRoaXMuZGF0YS5maWxlVmVyc2lvbklkXG4gICAgICAgIH07XG4gICAgfVxuXG5cbiAgICBzaG93SW1hZ2VXaGVuTG9hZGVkKCkge1xuICAgICAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2Utdmlldy1saXN0Jyk7XG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRpbmc6IGFueSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuaXYtbG9hZGVyJyk7XG4gICAgICAgICAgICBpZiAobG9hZGluZyAmJiBsb2FkaW5nLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1nID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2ltZy5pdi1pbWFnZS5pdi1sYXJnZS1pbWFnZScpO1xuICAgICAgICAgICAgICAgIGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW1nLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2hvd0ltYWdlV2hlbkxvYWRlZCgpLCA1MCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzU2hvd0ltYWdlKHVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubW9kZWwuaW1hZ2VzID0gW3VybF07XG4gICAgfVxuXG4gICAgcHJvY2Vzc1ZpZGVvT3JBdWRpbyh1cmw6IHN0cmluZykge1xuICAgICAgICB0aGlzLm1vZGVsLmZpbGVVcmwgPSB1cmw7XG4gICAgfVxuXG4gICAgcHJvY2Vzc0ZpbGVQZGYodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5maWxlVXJsID0gdXJsO1xuICAgIH1cblxuICAgIHByb2Nlc3NPdGhlckZpbGVFeHRlbnNpb24odXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5pbml0RG9jdW1lbnRWaWV3ZXIodGhpcy5kYXRhLmV4dGVuc2lvbiwgdGhpcy5kYXRhLmZpbGVUeXBlLCB1cmwpO1xuICAgIH1cblxuICAgIGluaXREb2N1bWVudFZpZXdlcihmaWxlRXh0ZW5zaW9uLCBmaWxlVHlwZSwgZmlsZVVybCkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkgPyAnZGVza3RvcCcgOiAnbW9iaWxlJyxcbiAgICAgICAgICAgIGRvY3VtZW50VHlwZTogYCR7ZmlsZVR5cGV9YCxcbiAgICAgICAgICAgIGVkaXRvckNvbmZpZzoge1xuICAgICAgICAgICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNoYXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhYm91dDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvY3VtZW50OiB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBlZGl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJpbnQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHJldmlldzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxGb3JtczogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZpbGVUeXBlOiBgJHtmaWxlRXh0ZW5zaW9ufWAsXG4gICAgICAgICAgICAgICAgdGl0bGU6IGAke3RoaXMubW9kZWwuZGF0YS5uYW1lfWAsXG4gICAgICAgICAgICAgICAgdXJsOiBgJHtmaWxlVXJsfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5tb2RlbC5kb2NFZGl0b3IgPSBuZXcgRG9jc0FQSS5Eb2NFZGl0b3IoJ2ZpbGUtdmlld2VyJywgY29uZmlnKTtcbiAgICB9XG5cbiAgICBpbml0Rm9ybSgpIHtcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybSA9IHtcbiAgICAgICAgICAgIGhlYWRlcjogJ8SQ4buVaSB0w6puIHThu4dwJyxcbiAgICAgICAgICAgIHNob3c6IGZhbHNlLFxuICAgICAgICAgICAgZm9ybURhdGE6IG5ldyBDcnVkRm9ybURhdGEoKSxcbiAgICAgICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRPcmllbnRhdGlvbihpbWFnZVVybCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goaW1hZ2VVcmwpO1xuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzLmJsb2IoKTtcblxuICAgICAgICByZWFkZXIub25sb2FkID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XG5cbiAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQxNigwLCBmYWxzZSkgIT0gMHhGRkQ4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGJsb2IsIC0yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gdmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IDI7XG5cbiAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrZXIgPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcblxuICAgICAgICAgICAgICAgIGlmIChtYXJrZXIgPT0gMHhGRkUxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmdldFVpbnQzMihvZmZzZXQgKz0gMiwgZmFsc2UpICE9IDB4NDU3ODY5NjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhibG9iLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGl0dGxlID0gdmlldy5nZXRVaW50MTYob2Zmc2V0ICs9IDYsIGZhbHNlKSA9PSAweDQ5NDk7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB2aWV3LmdldFVpbnQzMihvZmZzZXQgKyA0LCBsaXR0bGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWdzID0gdmlldy5nZXRVaW50MTYob2Zmc2V0LCBsaXR0bGUpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ3M7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuZ2V0VWludDE2KG9mZnNldCArIChpICogMTIpLCBsaXR0bGUpID09IDB4MDExMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhibG9iLCB2aWV3LmdldFVpbnQxNihvZmZzZXQgKyAoaSAqIDEyKSArIDgsIGxpdHRsZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKChtYXJrZXIgJiAweEZGMDApICE9IDB4RkYwMCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSB2aWV3LmdldFVpbnQxNihvZmZzZXQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYmxvYiwgLTEpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRCYXNlNjQoYmxvYiwgb3JpZW50YXRpb24pIHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgICAgICAvLyBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChpbWFnZVVybCk7XG4gICAgICAgIC8vIGNvbnN0IGJsb2IgPSBhd2FpdCByZXMuYmxvYigpO1xuXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICAgIHRoaXMucmVzZXRPcmllbnRhdGlvbihiYXNlNjQsIG9yaWVudGF0aW9uLCAocmVzZXRCYXNlNjRJbWFnZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZVdpdGhvdXRCYXNlNjRQcmVmaXggPSByZXNldEJhc2U2NEltYWdlLnNwbGl0KCdiYXNlNjQsJylbMV07XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5pbWFnZXMgPSBbaW1hZ2VXaXRob3V0QmFzZTY0UHJlZml4XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yOiAnLCBlcnJvcik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmVzZXRPcmllbnRhdGlvbihzcmNCYXNlNjQsIHNyY09yaWVudGF0aW9uLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcblxuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBpbWcud2lkdGgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0ID0gaW1nLmhlaWdodCxcbiAgICAgICAgICAgICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSxcbiAgICAgICAgICAgICAgICBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcblxuICAgICAgICAgICAgLy8gc2V0IHByb3BlciBjYW52YXMgZGltZW5zaW9ucyBiZWZvcmUgdHJhbnNmb3JtICYgZXhwb3J0XG4gICAgICAgICAgICBpZiAoNCA8IHNyY09yaWVudGF0aW9uICYmIHNyY09yaWVudGF0aW9uIDwgOSkge1xuICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gd2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB0cmFuc2Zvcm0gY29udGV4dCBiZWZvcmUgZHJhd2luZyBpbWFnZVxuICAgICAgICAgICAgc3dpdGNoIChzcmNPcmllbnRhdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgMjogY3R4LnRyYW5zZm9ybSgtMSwgMCwgMCwgMSwgd2lkdGgsIDApOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM6IGN0eC50cmFuc2Zvcm0oLTEsIDAsIDAsIC0xLCB3aWR0aCwgaGVpZ2h0KTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBjdHgudHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBoZWlnaHQpOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDU6IGN0eC50cmFuc2Zvcm0oMCwgMSwgMSwgMCwgMCwgMCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNjogY3R4LnRyYW5zZm9ybSgwLCAxLCAtMSwgMCwgaGVpZ2h0LCAwKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBjdHgudHJhbnNmb3JtKDAsIC0xLCAtMSwgMCwgaGVpZ2h0LCB3aWR0aCk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgODogY3R4LnRyYW5zZm9ybSgwLCAtMSwgMSwgMCwgMCwgd2lkdGgpOyBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJhdyBpbWFnZVxuICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuXG4gICAgICAgICAgICAvLyBleHBvcnQgYmFzZTY0XG4gICAgICAgICAgICBjYWxsYmFjayhjYW52YXMudG9EYXRhVVJMKCkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGltZy5zcmMgPSBzcmNCYXNlNjQ7XG4gICAgfVxuXG4gICAgb25Ub3BiYXJJdGVtQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5hY3RpdmVUb3BiYXJJdGVtID0gIXRoaXMubW9kZWwuYWN0aXZlVG9wYmFySXRlbTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBjbG9zZVNpZGViYXIoZXZlbnQgPSBudWxsKSB7XG4gICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQudGFyZ2V0LmlkID09ICdmaWxlVmlld2VySG9sZGVyJyB8fCBldmVudC50YXJnZXQuaWQgPT0gJ2ltYWdlLXZpZXctbGlzdCcgfHwgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnaW1hZ2UtY29udGFpbmVyJylcbiAgICAgICAgICAgIHx8IGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2l2LWltYWdlLXZpZXcnKSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5hY3RpdmVUb3BiYXJJdGVtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMub25DbG9zZS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcmludCgpIHtcbiAgICAgICAgdGhpcy5fZG93bmxvYWRMaW5rU2VydmljZS5jb252ZXJ0VG9QZGZCYXNlNjQodGhpcy5kYXRhLm5hbWUsIHRoaXMuZGF0YS5maWxlSWQsIHRoaXMuZGF0YS5maWxlVmVyc2lvbklkKVxuICAgICAgICAgICAgLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcnMuc3VjY2VzcyB8fCAhcnMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5wcmludChycy5kYXRhKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRvd25sb2FkKCkge1xuICAgICAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0R2VuZXJhdGVEb3dubG9hZExpbmtNb2RlbCgpO1xuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkTGluayhtb2RlbCk7XG4gICAgfVxuXG4gICAgZGVsZXRlRmlsZSgpIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKClcbiAgICAgICAgICAgIC50aGVuKHJzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9sZGVyU2VydmljZS5kZWxldGVNdWx0aXBsZShbdGhpcy5kYXRhXSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFTdWNjZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVNpZGViYXIobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5hbWVGaWxlKCkge1xuICAgICAgICB0aGlzLnJlbmFtZUZpbGVGb3JtLmhlYWRlciA9ICfEkOG7lWkgdMOqbiB0aMawIG3hu6VjJztcbiAgICAgICAgdGhpcy5yZW5hbWVGaWxlRm9ybS5mb3JtRGF0YS5kYXRhID0ge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZGF0YS5pZFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0uc2hvdyA9IHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TYXZlZFJlbmFtZUZpbGUoKSB7XG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0uc2hvdyA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWxlID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldERldGFpbCh0aGlzLmRhdGEuaWQpKS5kYXRhO1xuICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLm5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNhbmNlbFJlbmFtZUZpbGUoKSB7XG4gICAgICAgIHRoaXMucmVuYW1lRmlsZUZvcm0uc2hvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGVkaXRGaWxlKCkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQYW5nIGvhur90IG7hu5FpIG3hu58g4bupbmcgZOG7pW5nJyk7XG5cbiAgICAgICAgdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmNyZWF0ZU5ld01pbm9yVmVyc2lvbih0aGlzLmRhdGEuZmlsZUlkLCAnJywgZmFsc2UpXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVZlcnNpb24gPSA8RmlsZVZlcnNpb25EVE8+cmVzcG9uc2UuZGF0YTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVVcmwgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0RmlsZVZlcnNpb25Eb3dubG9hZFVybChmaWxlVmVyc2lvbi5pZCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kID0gbmV3IFRuQ2xpZW50Q29tbWFuZCgpO1xuICAgICAgICAgICAgICAgIGNvbW1hbmQuY29tbWFuZFR5cGUgPSBDb21tYW5kVHlwZS5FZGl0RmlsZTtcbiAgICAgICAgICAgICAgICBjb21tYW5kLmtleSA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5zaWduYWxyLmNsaWVudEtleTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRGaWxlQ29tbWFuZCA9IG5ldyBFZGl0RmlsZUNvbW1hbmQoKTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVNlcnZpY2VFbmRwb2ludCA9IHRoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50O1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC51cGxvYWRGaWxlQXBpID0gdGhpcy5fZmlsZVZlcnNpb25TZXJ2aWNlLmdldFVwbG9hZEZpbGVWZXJzaW9uQXBpVXJsKCk7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnJlbW92ZUZpbGVBcGkgPSB0aGlzLl9maWxlVmVyc2lvblNlcnZpY2UuZ2V0UmVtb3ZlRmlsZVZlcnNpb25BcGlVcmwoKTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVVybCA9IGZpbGVVcmw7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmlzRHJhZnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5ncm91cEZpbGVOYW1lID0gdGhpcy5kYXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLmZpbGVOYW1lID0gdGhpcy5kYXRhLm5hbWU7XG4gICAgICAgICAgICAgICAgZWRpdEZpbGVDb21tYW5kLnZlcnNpb24gPSBmaWxlVmVyc2lvbi52ZXJzaW9uTmFtZTtcbiAgICAgICAgICAgICAgICBlZGl0RmlsZUNvbW1hbmQuZmlsZVZlcnNpb25JZCA9IGZpbGVWZXJzaW9uLmlkO1xuICAgICAgICAgICAgICAgIGVkaXRGaWxlQ29tbWFuZC5hY2Nlc3NUb2tlbiA9IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBjb21tYW5kLmRhdGEgPSBlZGl0RmlsZUNvbW1hbmQ7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl90bkNsaWVudFNlcnZpY2Uuc2VuZENvbW1hbmQoY29tbWFuZCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKENvbW1vbkVycm9yQ29kZS5FUlJPUl9TRVJWSUNFX05PVF9SVU4gPT09IGVycm9yLnN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1Jlc3BvbnNlRXJyb3IoMCwgbnVsbCwgJ0ZpbGUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRklMRV9FWFBMT1JFUi5NRVNTQUdFX0VSUk9SX0hFQURFUicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0ZJTEVfRVhQTE9SRVIuTUVTU0FHRV9FUlJPUl9ERVRBSUwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpZmU6IDUwMDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJ5Q29ubmVjdFRvQ2xpZW50KCkge1xuXG4gICAgfVxuXG4gICAgaXNEZXNrdG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzRGVza3RvcCgpO1xuICAgIH1cblxuICAgIGlzRmlsZVR5cGUodHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmZpbGVUeXBlID09IHR5cGU7XG4gICAgfVxuICAgIGdldFN0eWxlQ2xhc3NCeURvY3VtZW50VHlwZShkb2NUeXBlKSB7XG4gICAgICAgIGxldCBzdHlsZUNsYXNzID0gdGhpcy5zdHlsZUNsYXNzO1xuICAgICAgICBpZiAoZG9jVHlwZSA9PT0gRklMRV9UWVBFUy5QREYpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZUNsYXNzICsgJyAnICsgJ3BkZi1jb250YWluZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHlsZUNsYXNzO1xuICAgIH1cblxuICAgIGFzeW5jIGt5U29IYW5kbGUoKSB7XG4gICAgICAgIHRoaXMuc2hvd1dhaXRCb3goJ8SQYW5nIHRo4buxYyBoaeG7h24ga8O9IHPhu5EsIHZ1aSBsw7JuZyBraeG7g20gdHJhIOG7qW5nIGThu6VuZyBTbWFydENBJyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmt5U29TbWFydENBKHRoaXMubW9kZWwuZGF0YSk7XG4gICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdUaOG7sWMgaGnhu4duIGvDvSBz4buRIHRow6BuaCBjw7RuZycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJlcy5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oaWRlV2FpdEJveCgpO1xuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICAvLyBBY2Nlc3MgdGhlIFBERi5qcyB2aWV3ZXIgaW5zdGFuY2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwZGZWaWV3ZXIgPSAod2luZG93IGFzIGFueSkuUERGVmlld2VyQXBwbGljYXRpb24/LnBkZlZpZXdlcjtcblxuICAgICAgICAgICAgaWYgKHBkZlZpZXdlcikge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBjbGljayBsaXN0ZW5lciB0byBlYWNoIHBhZ2UgY2FudmFzXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlckNvbnRhaW5lcicpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBhZ2VDbGljayhlIGFzIE1vdXNlRXZlbnQsIHBkZlZpZXdlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgIH1cblxuICAgIGhhbmRsZVBhZ2VDbGljayhldmVudDogTW91c2VFdmVudCwgcGRmVmlld2VyOiBhbnkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBtYXJrZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY3VzdG9tLW1hcmtlcmApO1xuICAgICAgICBpZiAobWFya2VyKSB7XG4gICAgICAgICAgICBtYXJrZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2NhbnZhc1dyYXBwZXInKSB8fFxuICAgICAgICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdDQU5WQVMnKSB7XG5cbiAgICAgICAgICAgIC8vIEdldCBwYWdlIG51bWJlciBhbmQgY29vcmRpbmF0ZXNcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VEaXYgPSB0YXJnZXQuY2xvc2VzdCgnLnBhZ2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBwYXJzZUludChwYWdlRGl2Py5nZXRBdHRyaWJ1dGUoJ2RhdGEtcGFnZS1udW1iZXInKSB8fCAnMScpO1xuXG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG4gICAgICAgICAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgV0lEVEggPSB0aGlzLm1vZGVsLmRhdGEud2lkdGggfHwgMTAwO1xuICAgICAgICAgICAgY29uc3QgSEVJR0hUID0gdGhpcy5tb2RlbC5kYXRhLmhlaWdodCB8fCAxMDA7XG5cbiAgICAgICAgICAgIC8vIENvbnZlcnQgcGl4ZWwgc2FuZyBwb2ludCBUUsav4buaQ1xuICAgICAgICAgICAgY29uc3QgY2xpY2tYUG9pbnQgPSB0aGlzLnBpeGVsVG9Qb2ludCh4KTtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrWVBvaW50ID0gdGhpcy5waXhlbFRvUG9pbnQoeSk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aFBvaW50ID0gdGhpcy5waXhlbFRvUG9pbnQoV0lEVEgpO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0UG9pbnQgPSB0aGlzLnBpeGVsVG9Qb2ludChIRUlHSFQpO1xuXG4gICAgICAgICAgICAvLyBTQVUgxJDDkyBt4bubaSB0w61uaCB0b8OhbiBuaMawIEMjXG4gICAgICAgICAgICBjb25zdCB4MSA9IGNsaWNrWFBvaW50O1xuICAgICAgICAgICAgY29uc3QgeTEgPSBjbGlja1lQb2ludCAtIGhlaWdodFBvaW50O1xuICAgICAgICAgICAgY29uc3QgeDIgPSBjbGlja1hQb2ludCArIHdpZHRoUG9pbnQ7XG4gICAgICAgICAgICBjb25zdCB5MiA9IGNsaWNrWVBvaW50O1xuXG4gICAgICAgICAgICBjb25zdCByZWN0YW5nbGUgPSBgJHt4MX0sJHt5MX0sJHt4Mn0sJHt5Mn1gO1xuXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGEuc2lnbmF0dXJlTG9jYXRpb24gPSByZWN0YW5nbGU7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU1hcmtlcih0YXJnZXQsIHgsIHksIHBhZ2VOdW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlTWFya2VyKHBhcmVudDogSFRNTEVsZW1lbnQsIHg6IG51bWJlciwgeTogbnVtYmVyLCBwYWdlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbWFya2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIG1hcmtlci5pZCA9ICdjdXN0b20tbWFya2VyJztcbiAgICAgICAgbWFya2VyLnN0eWxlLmNzc1RleHQgPSBgXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBsZWZ0OiAke3h9cHg7XG4gICAgICAgICAgICB0b3A6ICR7eX1weDtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSk7XG4gICAgICAgICAgICB3aWR0aDogJHt0aGlzLm1vZGVsLmRhdGEud2lkdGh9cHg7XG4gICAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5tb2RlbC5kYXRhLmhlaWdodH1weDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgke3RoaXMubW9kZWwuZGF0YS5maWxlQmFzZTY0Q29udGVudH0pO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47ICAgICAgICAvKiBGaXRzIHRoZSBpbWFnZSAqL1xuICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgICAgLyogTm8gdGlsaW5nICovXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wOyAvKiBQb3NpdGlvbmluZyAqL1xuICAgICAgICAgICAgei1pbmRleDogOTk5O1xuICAgICAgICBgO1xuICAgICAgICB0aGlzLm1vZGVsLmRhdGEucGFnZSA9IHBhZ2U7XG4gICAgICAgIGNvbnN0IHBhZ2VDb250YWluZXIgPSBwYXJlbnQuY2xvc2VzdCgnLnBhZ2UnKTtcbiAgICAgICAgcGFnZUNvbnRhaW5lcj8uYXBwZW5kQ2hpbGQobWFya2VyKTtcbiAgICB9XG5cbiAgICBwaXhlbFRvUG9pbnQocGl4ZWwsIGRwaSA9IDk2KSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHBpeGVsICogNzIgLyBkcGkgKiAxMDApOyAvLyBMw6BtIHRyw7JuIDIgY2jhu68gc+G7kSB0aOG6rXAgcGjDom5cbiAgICB9XG59XG4iXX0=
@@ -14,9 +14,11 @@ export class FileObjectService extends BaseService {
14
14
  this.thumborEndpoint = '';
15
15
  this.fileWithThumborEndpoint = '';
16
16
  this.filePathEndpoint = '';
17
+ this.version = '';
17
18
  this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.fileEndpoint;
18
19
  this.fileWithThumborEndpoint = _moduleConfigService.getConfig().environment.apiDomain.fileWithThumborEndpoint;
19
20
  this.thumborEndpoint = _moduleConfigService.getConfig().environment.apiDomain.thumbor;
21
+ this.version = _moduleConfigService.getConfig().environment.apiVersion;
20
22
  this.filePathEndpoint = _moduleConfigService.getConfig().environment.apiDomain.filePathEndpoint;
21
23
  }
22
24
  getFileUrlWithThumbor(fileId, width = 0, height = 0) {
@@ -196,6 +198,10 @@ export class FileObjectService extends BaseService {
196
198
  const url = `${this.serviceUri}/UploadWithByteArray`;
197
199
  return this._http.post(url, formData, { responseType: 'text' }).toPromise();
198
200
  }
201
+ kySoSmartCA(model) {
202
+ const url = `${this.endPoint}/${this.version}/KySoFile/SmartCASignFile`;
203
+ return this.defaultPost(url, model);
204
+ }
199
205
  }
200
206
  FileObjectService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileObjectService_Factory() { return new FileObjectService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i2.ModuleConfigService)); }, token: FileObjectService, providedIn: "root" });
201
207
  FileObjectService.decorators = [
@@ -208,4 +214,4 @@ FileObjectService.ctorParameters = () => [
208
214
  { type: Injector },
209
215
  { type: ModuleConfigService }
210
216
  ];
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1vYmplY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7OztBQUs5RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQUs5QyxZQUFZLElBQWdCLEVBQUUsUUFBa0IsRUFDcEMsb0JBQXlDO1FBQ2pELEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFEOUoseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUxyRCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBS2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNB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Q0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDakQ7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDeEQ7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBSTtRQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsc0JBQXNCLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEYsQ0FBQzs7OztZQTlOSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQVZRLFVBQVU7WUFDRSxRQUFRO1lBS3BCLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRklMRV9UWVBFUyB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IEV4dGVuc2lvbnNDb25zdCwgRmlsZUV4dGVuc2lvbnMsIEZpbGVUeXBlRmxhZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWxlLXR5cGUnO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVPYmplY3RTZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuICAgIHRodW1ib3JFbmRwb2ludCA9ICcnO1xuICAgIGZpbGVXaXRoVGh1bWJvckVuZHBvaW50ID0gJyc7XG4gICAgZmlsZVBhdGhFbmRwb2ludCA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IoaHR0cDogSHR0cENsaWVudCwgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L0ZpbGVPYmplY3RgKTtcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XG4gICAgICAgIHRoaXMuZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnQ7XG4gICAgICAgIHRoaXMudGh1bWJvckVuZHBvaW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLnRodW1ib3I7XG4gICAgICAgIHRoaXMuZmlsZVBhdGhFbmRwb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlUGF0aEVuZHBvaW50O1xuICAgIH1cblxuICAgIGdldEZpbGVVcmxXaXRoVGh1bWJvcihmaWxlSWQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnRodW1ib3JFbmRwb2ludH0vdW5zYWZlLyR7d2lkdGh9eCR7aGVpZ2h0fS9zbWFydC8ke3RoaXMuZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnR9L3Y1L0ZpbGVPYmplY3QvcHVibGljLyR7ZmlsZUlkfS9kb3dubG9hZGA7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgZ2V0VXJsSW1hZ2UoZmlsZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9wdWJsaWMvJHtmaWxlSWR9L0Rvd25sb2FkYDtcbiAgICB9XG5cbiAgICBjb3B5TXVsdGlwbGVGaWxlKGlkc0ZpbGU6IHN0cmluZ1tdLCBpZERlc0ZvbGRlcjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ29weU11bHRpcGxlRmlsZT9wYXJlbnRGb2xkZXJJZD0ke2lkRGVzRm9sZGVyfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgaWRzRmlsZSk7XG4gICAgfVxuXG4gICAgY29weUZpbGVCeUhhc2goaGFzaDogc3RyaW5nLCBwYXJlbnRGb2xkZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ29weUZpbGVGcm9tSGFzaD9oYXNoPSR7aGFzaH0mcGFyZW50Rm9sZGVySWQ9JHtwYXJlbnRGb2xkZXJJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0VXBsb2FkVXJsKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGxvYWRGaWxlSW50b0ZvbGRlcmA7XG4gICAgfVxuXG4gICAgZ2V0VXBsb2FkTXVsdGlwbGVVcmwoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VVcml9L1VwbG9hZEZpbGVzSW50b0ZvbGRlcmA7XG4gICAgfVxuXG4gICAgZ2V0VXBsb2FkSW50b1NoYXJlZEZvbGRlclVybCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9TaGFyZWRGb2xkZXJgO1xuICAgIH1cblxuICAgIGlzU3VwcG9ydGVkVmlld09ubGluZShmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVR5cGUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuXG4gICAgICAgIGlmICgoLyhnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKC8oZG9jfGRvY218ZG9jeHxkb3R8ZG90bXxkb3R4fGVwdWJ8Zm9kdHxodG18aHRtbHxtaHR8b2R0fG90dHxwZGZ8cnRmfHR4dHxkanZ1fHhwcykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoLyhjc3Z8Zm9kc3xvZHN8b3RzfHhsc3x4bHNtfHhsc3h8eGx0fHhsdG18eGx0eCkkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoLyhmb2RwfG9kcHxvdHB8cG90fHBvdG18cG90eHxwcHN8cHBzbXxwcHN4fHBwdHxwcHRtfHBwdHgpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKC8obXA0fG1vdnxhdml8d212fHZvYnxybXxhc2Z8M2dwKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgvKG1wM3x3bWF8d2F2fHdtdnxvZ2cpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGFyciA9IGZpbGVOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRGaWxlVHlwZShmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24pIHtcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoZmlsZUV4dGVuc2lvbi5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGZpbGVFeHRlbnNpb24uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoLyhnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuSU1BR0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoLyhkb2N8ZG9jbXxkb2N4fGRvdHxkb3RtfGRvdHh8ZXB1Ynxmb2R0fGh0bXxodG1sfG1odHxvZHR8b3R0fHJ0Znx0eHR8ZGp2dXx4cHMpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuVEVYVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCgvKHBkZikkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5QREY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoLyhjc3Z8Zm9kc3xvZHN8b3RzfHhsc3x4bHNtfHhsc3h8eGx0fHhsdG18eGx0eCkkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5TUFJFQURTSEVFVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCgvKGZvZHB8b2RwfG90cHxwb3R8cG90bXxwb3R4fHBwc3xwcHNtfHBwc3h8cHB0fHBwdG18cHB0eCkkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5QUkVTRU5UQVRJT047XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoLyhtcDR8bW92fGF2aXx3bXZ8dm9ifHJtfGFzZnwzZ3ApJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuVklERU87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoLyhtcDN8d21hfHdhdnx3bXZ8b2dnKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLkFVRElPO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpc1R5cGVGaWxlS3lTbyhmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBmaWxlRXh0ZW5zaW9uID0gdGhpcy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24pIHtcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoZmlsZUV4dGVuc2lvbi5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGZpbGVFeHRlbnNpb24uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoLyhwZGZ8ZG9jfGRvY3h8eGxzeHx4bHMpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzRmlsZVR5cGUoZmlsZUV4dGVuc2lvbjogc3RyaW5nLCB0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpbGVUeXBlKGZpbGVFeHRlbnNpb24pID09PSB0eXBlO1xuICAgIH1cblxuICAgIGNyZWF0ZUZpbGVJbnRvU2hhcmVkRm9sZGVyKGZvcm1EYXRhKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9TaGFyZWRGb2xkZXJgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIGdldEZpbGVJblNoYXJlZEZvbGRlcihtb2RlbCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEZpbGVJblNoYXJlZEZvbGRlcmA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBtb2RlbCk7XG4gICAgfVxuXG4gICAgZGVsZXRlRmlsZUZyb21TaGFyZWRGb2xkZXIobW9kZWwpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVGaWxlRnJvbVNoYXJlZEZvbGRlcmA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBtb2RlbCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU2VydmljZUZpbGUoc2VydmljZUZpbGVPYmplY3REVE86IEZvcm1EYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NyZWF0ZVNlcnZpY2VGaWxlYDtcblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHNlcnZpY2VGaWxlT2JqZWN0RFRPKTtcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVTZXJ2aWNlRmlsZShzZXJ2aWNlUmVxdWVzdE1vZGVsOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0U2luZ2xlU2VydmljZUZpbGVgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgc2VydmljZVJlcXVlc3RNb2RlbCk7XG4gICAgfVxuXG4gICAgZ2V0U2NhbkZpbGVVcGxvYWRFbmRwb2ludChjb3JyZWxhdGlvbklkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZUNvZGV9L0NyZWF0ZVNjYW5uZWRGaWxlLyR7Y29ycmVsYXRpb25JZH1gO1xuICAgIH1cblxuXG4gICAgZ2V0QWNjZXB0ZWRFeHRlbnNpb25zKGFjY2VwdEZpbGVUeXBlczogRmlsZVR5cGVGbGFnKSB7XG4gICAgICAgIGxldCBhY2NlcHQgPSAnJztcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuVklERU8pICE9PSAwKSB7XG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuVklERU8gKyAnLCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuSU1BR0UpICE9PSAwKSB7XG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuSU1BR0UgKyAnLCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuRE9DKSAhPT0gMCkge1xuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkRPQyArICcsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5BVURJTykgIT09IDApIHtcbiAgICAgICAgICAgIGFjY2VwdCArPSBGaWxlRXh0ZW5zaW9ucy5BVURJTyArICcsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5DT01QUkVTU0VEKSAhPT0gMCkge1xuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkNPTVBSRVNTRUQgKyAnLCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY2VwdDtcbiAgICB9XG5cbiAgICBnZXRBY2NlcHRlZEV4dGVuc2lvbnNBcnJheShhY2NlcHRGaWxlVHlwZXM6IEZpbGVUeXBlRmxhZykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuVklERU8pICE9PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuVmlkZW9FeHRlbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5JTUFHRSkgIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5JbWFnZUV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLkRPQykgIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5Eb2NFeHRlbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5BVURJTykgIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5BdWRpb0V4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLkNPTVBSRVNTRUQpICE9PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuQ29tcHJlc3NlZEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdXBsb2FkV2l0aEJ5dGVBcnJheShmaWxlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZXMnLCBmaWxlKTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGxvYWRXaXRoQnl0ZUFycmF5YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdCh1cmwsIGZvcm1EYXRhLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnRvUHJvbWlzZSgpO1xuICAgIH1cbn1cbiJdfQ==
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1vYmplY3Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7OztBQUs5RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBVztJQU05QyxZQUFZLElBQWdCLEVBQUUsUUFBa0IsRUFDcEMsb0JBQXlDO1FBQ2pELEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLElBQUksb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsYUFBYSxDQUFDLENBQUM7UUFEOUoseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQU5yRCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQiw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFLVCxJQUFJLENBQUMsUUFBUSxHQUFHLG9CQUFvQixDQUFDLFNB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VyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDOzs7O1lBck9KLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBVlEsVUFBVTtZQUNFLFFBQVE7WUFLcEIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGSUxFX1RZUEVTIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uc0NvbnN0LCBGaWxlRXh0ZW5zaW9ucywgRmlsZVR5cGVGbGFnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbGUtdHlwZSc7XG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlsZU9iamVjdFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG4gICAgdGh1bWJvckVuZHBvaW50ID0gJyc7XG4gICAgZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnQgPSAnJztcbiAgICBmaWxlUGF0aEVuZHBvaW50ID0gJyc7XG4gICAgdmVyc2lvbiA9ICcnO1xuXG4gICAgY29uc3RydWN0b3IoaHR0cDogSHR0cENsaWVudCwgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGh0dHAsIGluamVjdG9yLCBgJHtfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZUVuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L0ZpbGVPYmplY3RgKTtcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlRW5kcG9pbnQ7XG4gICAgICAgIHRoaXMuZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcGlEb21haW4uZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnQ7XG4gICAgICAgIHRoaXMudGh1bWJvckVuZHBvaW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLnRodW1ib3I7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb247XG4gICAgICAgIHRoaXMuZmlsZVBhdGhFbmRwb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5maWxlUGF0aEVuZHBvaW50O1xuICAgIH1cblxuICAgIGdldEZpbGVVcmxXaXRoVGh1bWJvcihmaWxlSWQsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnRodW1ib3JFbmRwb2ludH0vdW5zYWZlLyR7d2lkdGh9eCR7aGVpZ2h0fS9zbWFydC8ke3RoaXMuZmlsZVdpdGhUaHVtYm9yRW5kcG9pbnR9L3Y1L0ZpbGVPYmplY3QvcHVibGljLyR7ZmlsZUlkfS9kb3dubG9hZGA7XG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgZ2V0VXJsSW1hZ2UoZmlsZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9wdWJsaWMvJHtmaWxlSWR9L0Rvd25sb2FkYDtcbiAgICB9XG5cbiAgICBjb3B5TXVsdGlwbGVGaWxlKGlkc0ZpbGU6IHN0cmluZ1tdLCBpZERlc0ZvbGRlcjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ29weU11bHRpcGxlRmlsZT9wYXJlbnRGb2xkZXJJZD0ke2lkRGVzRm9sZGVyfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgaWRzRmlsZSk7XG4gICAgfVxuXG4gICAgY29weUZpbGVCeUhhc2goaGFzaDogc3RyaW5nLCBwYXJlbnRGb2xkZXJJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ29weUZpbGVGcm9tSGFzaD9oYXNoPSR7aGFzaH0mcGFyZW50Rm9sZGVySWQ9JHtwYXJlbnRGb2xkZXJJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0VXBsb2FkVXJsKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGxvYWRGaWxlSW50b0ZvbGRlcmA7XG4gICAgfVxuXG4gICAgZ2V0VXBsb2FkTXVsdGlwbGVVcmwoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlcnZpY2VVcml9L1VwbG9hZEZpbGVzSW50b0ZvbGRlcmA7XG4gICAgfVxuXG4gICAgZ2V0VXBsb2FkSW50b1NoYXJlZEZvbGRlclVybCgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9TaGFyZWRGb2xkZXJgO1xuICAgIH1cblxuICAgIGlzU3VwcG9ydGVkVmlld09ubGluZShmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChmaWxlTmFtZS5sYXN0SW5kZXhPZignLicpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVR5cGUgPSBmaWxlTmFtZS5zdWJzdHJpbmcoZmlsZU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuXG4gICAgICAgIGlmICgoLyhnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKC8oZG9jfGRvY218ZG9jeHxkb3R8ZG90bXxkb3R4fGVwdWJ8Zm9kdHxodG18aHRtbHxtaHR8b2R0fG90dHxwZGZ8cnRmfHR4dHxkanZ1fHhwcykkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoLyhjc3Z8Zm9kc3xvZHN8b3RzfHhsc3x4bHNtfHhsc3h8eGx0fHhsdG18eGx0eCkkL2kpLnRlc3QoZmlsZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoLyhmb2RwfG9kcHxvdHB8cG90fHBvdG18cG90eHxwcHN8cHBzbXxwcHN4fHBwdHxwcHRtfHBwdHgpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoKC8obXA0fG1vdnxhdml8d212fHZvYnxybXxhc2Z8M2dwKSQvaSkudGVzdChmaWxlVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgvKG1wM3x3bWF8d2F2fHdtdnxvZ2cpJC9pKS50ZXN0KGZpbGVUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0RmlsZUV4dGVuc2lvbihmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghZmlsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGFyciA9IGZpbGVOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRGaWxlVHlwZShmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24pIHtcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoZmlsZUV4dGVuc2lvbi5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGZpbGVFeHRlbnNpb24uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoLyhnaWZ8anBnfGpwZWd8dGlmZnxwbmcpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuSU1BR0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoLyhkb2N8ZG9jbXxkb2N4fGRvdHxkb3RtfGRvdHh8ZXB1Ynxmb2R0fGh0bXxodG1sfG1odHxvZHR8b3R0fHJ0Znx0eHR8ZGp2dXx4cHMpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuVEVYVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCgvKHBkZikkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5QREY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoLyhjc3Z8Zm9kc3xvZHN8b3RzfHhsc3x4bHNtfHhsc3h8eGx0fHhsdG18eGx0eCkkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5TUFJFQURTSEVFVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCgvKGZvZHB8b2RwfG90cHxwb3R8cG90bXxwb3R4fHBwc3xwcHNtfHBwc3h8cHB0fHBwdG18cHB0eCkkL2kpLnRlc3QoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRklMRV9UWVBFUy5QUkVTRU5UQVRJT047XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoLyhtcDR8bW92fGF2aXx3bXZ8dm9ifHJtfGFzZnwzZ3ApJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZJTEVfVFlQRVMuVklERU87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgoLyhtcDN8d21hfHdhdnx3bXZ8b2dnKSQvaSkudGVzdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBGSUxFX1RZUEVTLkFVRElPO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpc1R5cGVGaWxlS3lTbyhmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGxldCBmaWxlRXh0ZW5zaW9uID0gdGhpcy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVOYW1lKTtcbiAgICAgICAgaWYgKGZpbGVFeHRlbnNpb24pIHtcbiAgICAgICAgICAgIGZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoZmlsZUV4dGVuc2lvbi5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGZpbGVFeHRlbnNpb24uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9uID0gYXJyW2Fyci5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoLyhwZGZ8ZG9jfGRvY3h8eGxzeHx4bHMpJC9pKS50ZXN0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlzRmlsZVR5cGUoZmlsZUV4dGVuc2lvbjogc3RyaW5nLCB0eXBlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpbGVUeXBlKGZpbGVFeHRlbnNpb24pID09PSB0eXBlO1xuICAgIH1cblxuICAgIGNyZWF0ZUZpbGVJbnRvU2hhcmVkRm9sZGVyKGZvcm1EYXRhKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBsb2FkRmlsZUludG9TaGFyZWRGb2xkZXJgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZm9ybURhdGEpO1xuICAgIH1cblxuICAgIGdldEZpbGVJblNoYXJlZEZvbGRlcihtb2RlbCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEZpbGVJblNoYXJlZEZvbGRlcmA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBtb2RlbCk7XG4gICAgfVxuXG4gICAgZGVsZXRlRmlsZUZyb21TaGFyZWRGb2xkZXIobW9kZWwpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVGaWxlRnJvbVNoYXJlZEZvbGRlcmA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBtb2RlbCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU2VydmljZUZpbGUoc2VydmljZUZpbGVPYmplY3REVE86IEZvcm1EYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NyZWF0ZVNlcnZpY2VGaWxlYDtcblxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHNlcnZpY2VGaWxlT2JqZWN0RFRPKTtcbiAgICB9XG5cbiAgICBnZXRTaW5nbGVTZXJ2aWNlRmlsZShzZXJ2aWNlUmVxdWVzdE1vZGVsOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0U2luZ2xlU2VydmljZUZpbGVgO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgc2VydmljZVJlcXVlc3RNb2RlbCk7XG4gICAgfVxuXG4gICAgZ2V0U2NhbkZpbGVVcGxvYWRFbmRwb2ludChjb3JyZWxhdGlvbklkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VydmljZUNvZGV9L0NyZWF0ZVNjYW5uZWRGaWxlLyR7Y29ycmVsYXRpb25JZH1gO1xuICAgIH1cblxuXG4gICAgZ2V0QWNjZXB0ZWRFeHRlbnNpb25zKGFjY2VwdEZpbGVUeXBlczogRmlsZVR5cGVGbGFnKSB7XG4gICAgICAgIGxldCBhY2NlcHQgPSAnJztcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuVklERU8pICE9PSAwKSB7XG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuVklERU8gKyAnLCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuSU1BR0UpICE9PSAwKSB7XG4gICAgICAgICAgICBhY2NlcHQgKz0gRmlsZUV4dGVuc2lvbnMuSU1BR0UgKyAnLCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuRE9DKSAhPT0gMCkge1xuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkRPQyArICcsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5BVURJTykgIT09IDApIHtcbiAgICAgICAgICAgIGFjY2VwdCArPSBGaWxlRXh0ZW5zaW9ucy5BVURJTyArICcsJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5DT01QUkVTU0VEKSAhPT0gMCkge1xuICAgICAgICAgICAgYWNjZXB0ICs9IEZpbGVFeHRlbnNpb25zLkNPTVBSRVNTRUQgKyAnLCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY2VwdDtcbiAgICB9XG5cbiAgICBnZXRBY2NlcHRlZEV4dGVuc2lvbnNBcnJheShhY2NlcHRGaWxlVHlwZXM6IEZpbGVUeXBlRmxhZykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKChhY2NlcHRGaWxlVHlwZXMgJiBGaWxlVHlwZUZsYWcuVklERU8pICE9PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuVmlkZW9FeHRlbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5JTUFHRSkgIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5JbWFnZUV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLkRPQykgIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5Eb2NFeHRlbnNpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGFjY2VwdEZpbGVUeXBlcyAmIEZpbGVUeXBlRmxhZy5BVURJTykgIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLkV4dGVuc2lvbnNDb25zdC5BdWRpb0V4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoYWNjZXB0RmlsZVR5cGVzICYgRmlsZVR5cGVGbGFnLkNPTVBSRVNTRUQpICE9PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5FeHRlbnNpb25zQ29uc3QuQ29tcHJlc3NlZEV4dGVuc2lvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdXBsb2FkV2l0aEJ5dGVBcnJheShmaWxlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZXMnLCBmaWxlKTtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGxvYWRXaXRoQnl0ZUFycmF5YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdCh1cmwsIGZvcm1EYXRhLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGt5U29TbWFydENBKG1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW5kUG9pbnR9LyR7dGhpcy52ZXJzaW9ufS9LeVNvRmlsZS9TbWFydENBU2lnbkZpbGVgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcbiAgICB9XG59XG4iXX0=
@@ -26235,9 +26235,11 @@ class FileObjectService extends BaseService {
26235
26235
  this.thumborEndpoint = '';
26236
26236
  this.fileWithThumborEndpoint = '';
26237
26237
  this.filePathEndpoint = '';
26238
+ this.version = '';
26238
26239
  this.endPoint = _moduleConfigService.getConfig().environment.apiDomain.fileEndpoint;
26239
26240
  this.fileWithThumborEndpoint = _moduleConfigService.getConfig().environment.apiDomain.fileWithThumborEndpoint;
26240
26241
  this.thumborEndpoint = _moduleConfigService.getConfig().environment.apiDomain.thumbor;
26242
+ this.version = _moduleConfigService.getConfig().environment.apiVersion;
26241
26243
  this.filePathEndpoint = _moduleConfigService.getConfig().environment.apiDomain.filePathEndpoint;
26242
26244
  }
26243
26245
  getFileUrlWithThumbor(fileId, width = 0, height = 0) {
@@ -26417,6 +26419,10 @@ class FileObjectService extends BaseService {
26417
26419
  const url = `${this.serviceUri}/UploadWithByteArray`;
26418
26420
  return this._http.post(url, formData, { responseType: 'text' }).toPromise();
26419
26421
  }
26422
+ kySoSmartCA(model) {
26423
+ const url = `${this.endPoint}/${this.version}/KySoFile/SmartCASignFile`;
26424
+ return this.defaultPost(url, model);
26425
+ }
26420
26426
  }
26421
26427
  FileObjectService.ɵprov = i0.ɵɵdefineInjectable({ factory: function FileObjectService_Factory() { return new FileObjectService(i0.ɵɵinject(i1$1.HttpClient), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(ModuleConfigService)); }, token: FileObjectService, providedIn: "root" });
26422
26428
  FileObjectService.decorators = [
@@ -31164,6 +31170,7 @@ class FileManagerComponent extends DataListBase {
31164
31170
  command: () => {
31165
31171
  this.signFileSmartCA(item);
31166
31172
  },
31173
+ visible: item.extension == '.PDF'
31167
31174
  },
31168
31175
  {
31169
31176
  label: 'Ký số cá nhân (USB)', icon: 'fas fa-signature',
@@ -32112,7 +32119,10 @@ class FileManagerComponent extends DataListBase {
32112
32119
  entity: rowData.entity,
32113
32120
  entityKey: rowData.entityKey,
32114
32121
  fileBase64Content: dataKySo.fileBase64Content,
32122
+ userChuKySoId: dataKySo.id,
32115
32123
  showKySoButton: true,
32124
+ width: dataKySo.width,
32125
+ height: dataKySo.height,
32116
32126
  };
32117
32127
  this.forms.fileViewer.show = true;
32118
32128
  });
@@ -34046,6 +34056,18 @@ class FileViewerComponent extends ComponentBase {
34046
34056
  return styleClass;
34047
34057
  }
34048
34058
  kySoHandle() {
34059
+ return __awaiter(this, void 0, void 0, function* () {
34060
+ this.showWaitBox('Đang thực hiện ký số, vui lòng kiểm tra ứng dụng SmartCA');
34061
+ const res = yield this._fileObjectService.kySoSmartCA(this.model.data);
34062
+ if (res.success) {
34063
+ this._notifierService.showSuccess('Thực hiện ký số thành công');
34064
+ }
34065
+ else {
34066
+ this._notifierService.showWarning(res.error);
34067
+ }
34068
+ this.hideWaitBox();
34069
+ this.show = false;
34070
+ });
34049
34071
  }
34050
34072
  ngAfterViewInit() {
34051
34073
  // Access the PDF.js viewer instance
@@ -34075,7 +34097,20 @@ class FileViewerComponent extends ComponentBase {
34075
34097
  const rect = target.getBoundingClientRect();
34076
34098
  const x = event.clientX - rect.left;
34077
34099
  const y = event.clientY - rect.top;
34078
- // Create marker at this position
34100
+ const WIDTH = this.model.data.width || 100;
34101
+ const HEIGHT = this.model.data.height || 100;
34102
+ // Convert pixel sang point TRƯỚC
34103
+ const clickXPoint = this.pixelToPoint(x);
34104
+ const clickYPoint = this.pixelToPoint(y);
34105
+ const widthPoint = this.pixelToPoint(WIDTH);
34106
+ const heightPoint = this.pixelToPoint(HEIGHT);
34107
+ // SAU ĐÓ mới tính toán như C#
34108
+ const x1 = clickXPoint;
34109
+ const y1 = clickYPoint - heightPoint;
34110
+ const x2 = clickXPoint + widthPoint;
34111
+ const y2 = clickYPoint;
34112
+ const rectangle = `${x1},${y1},${x2},${y2}`;
34113
+ this.model.data.signatureLocation = rectangle;
34079
34114
  this.createMarker(target, x, y, pageNumber);
34080
34115
  }
34081
34116
  }
@@ -34086,8 +34121,9 @@ class FileViewerComponent extends ComponentBase {
34086
34121
  position: absolute;
34087
34122
  left: ${x}px;
34088
34123
  top: ${y}px;
34089
- width: 100px;
34090
- height: 100px;
34124
+ transform: translate(-50%,-50%);
34125
+ width: ${this.model.data.width}px;
34126
+ height: ${this.model.data.height}px;
34091
34127
  background-image: url(${this.model.data.fileBase64Content});
34092
34128
  pointer-events: none;
34093
34129
  background-size: contain; /* Fits the image */
@@ -34095,9 +34131,13 @@ class FileViewerComponent extends ComponentBase {
34095
34131
  background-position: center top; /* Positioning */
34096
34132
  z-index: 999;
34097
34133
  `;
34134
+ this.model.data.page = page;
34098
34135
  const pageContainer = parent.closest('.page');
34099
34136
  pageContainer === null || pageContainer === void 0 ? void 0 : pageContainer.appendChild(marker);
34100
34137
  }
34138
+ pixelToPoint(pixel, dpi = 96) {
34139
+ return Math.round(pixel * 72 / dpi * 100); // Làm tròn 2 chữ số thập phân
34140
+ }
34101
34141
  }
34102
34142
  FileViewerComponent.decorators = [
34103
34143
  { type: Component, args: [{