@rangertechnologies/ngnxt 2.1.253 → 2.1.255-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/fesm2022/rangertechnologies-ngnxt.mjs +258 -433
  2. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  3. package/lib/components/datatable/datatable.component.d.ts +0 -1
  4. package/lib/components/pick-location/pick-location.component.d.ts +0 -1
  5. package/lib/model/bookletWrapper.d.ts +0 -1
  6. package/lib/pages/booklet/booklet.component.d.ts +0 -2
  7. package/lib/pages/builder/element/element.component.d.ts +0 -3
  8. package/lib/pages/builder/properties/properties.component.d.ts +6 -2
  9. package/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.d.ts +0 -3
  10. package/lib/pages/questionbook/questionbook.component.d.ts +0 -1
  11. package/lib/pages/questionnaire/questionnaire.component.d.ts +0 -1
  12. package/lib/pipe/custom-translate.pipe.d.ts +1 -1
  13. package/lib/pipe/svg/svg.pipe.d.ts +10 -0
  14. package/lib/services/form-builder/form-builder.service.d.ts +1 -0
  15. package/lib/services/translation/translation.service.d.ts +1 -1
  16. package/package.json +4 -6
  17. package/rangertechnologies-ngnxt-2.1.255-beta.tgz +0 -0
  18. package/esm2022/environments/version.mjs +0 -15
  19. package/esm2022/lib/components/button/nxt-button.component.mjs +0 -154
  20. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -360
  21. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -263
  22. package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -53
  23. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -156
  24. package/esm2022/lib/components/datatable/datatable.component.mjs +0 -1757
  25. package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -292
  26. package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +0 -105
  27. package/esm2022/lib/components/image-cropper/component/cropper.state.mjs +0 -208
  28. package/esm2022/lib/components/image-cropper/component/image-cropper.component.mjs +0 -562
  29. package/esm2022/lib/components/image-cropper/interfaces/basic-event.interface.mjs +0 -2
  30. package/esm2022/lib/components/image-cropper/interfaces/cropper-options.interface.mjs +0 -2
  31. package/esm2022/lib/components/image-cropper/interfaces/cropper-position.interface.mjs +0 -2
  32. package/esm2022/lib/components/image-cropper/interfaces/dimensions.interface.mjs +0 -2
  33. package/esm2022/lib/components/image-cropper/interfaces/exif-transform.interface.mjs +0 -2
  34. package/esm2022/lib/components/image-cropper/interfaces/image-cropped-event.interface.mjs +0 -2
  35. package/esm2022/lib/components/image-cropper/interfaces/image-transform.interface.mjs +0 -2
  36. package/esm2022/lib/components/image-cropper/interfaces/index.mjs +0 -2
  37. package/esm2022/lib/components/image-cropper/interfaces/loaded-image.interface.mjs +0 -2
  38. package/esm2022/lib/components/image-cropper/interfaces/move-start.interface.mjs +0 -8
  39. package/esm2022/lib/components/image-cropper/services/crop.service.mjs +0 -139
  40. package/esm2022/lib/components/image-cropper/services/load-image.service.mjs +0 -194
  41. package/esm2022/lib/components/image-cropper/utils/cropper-position.utils.mjs +0 -239
  42. package/esm2022/lib/components/image-cropper/utils/exif.utils.mjs +0 -79
  43. package/esm2022/lib/components/image-cropper/utils/keyboard.utils.mjs +0 -40
  44. package/esm2022/lib/components/image-cropper/utils/percentage.utils.mjs +0 -4
  45. package/esm2022/lib/components/image-cropper/utils/resize.utils.mjs +0 -75
  46. package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +0 -392
  47. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +0 -2972
  48. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -105
  49. package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -220
  50. package/esm2022/lib/components/search-box/search-box.component.mjs +0 -470
  51. package/esm2022/lib/country.json +0 -43237
  52. package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
  53. package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
  54. package/esm2022/lib/model/bookletWrapper.mjs +0 -9
  55. package/esm2022/lib/model/changeWrapper.mjs +0 -10
  56. package/esm2022/lib/model/errorWrapper.mjs +0 -6
  57. package/esm2022/lib/nxt-app.component.mjs +0 -22
  58. package/esm2022/lib/nxt-app.module.mjs +0 -115
  59. package/esm2022/lib/nxt-app.service.mjs +0 -14
  60. package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -658
  61. package/esm2022/lib/pages/builder/element/element.component.mjs +0 -508
  62. package/esm2022/lib/pages/builder/form/form.component.mjs +0 -48
  63. package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +0 -97
  64. package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -1089
  65. package/esm2022/lib/pages/builder/templates/templates.component.mjs +0 -35
  66. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +0 -681
  67. package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +0 -1118
  68. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -801
  69. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2219
  70. package/esm2022/lib/pipe/button-styles.pipe.mjs +0 -26
  71. package/esm2022/lib/pipe/custom-translate.pipe.mjs +0 -36
  72. package/esm2022/lib/pipe/get-value.pipe.mjs +0 -54
  73. package/esm2022/lib/pipe/question-by-row.pipe.mjs +0 -51
  74. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -40
  75. package/esm2022/lib/sample.mjs +0 -3715
  76. package/esm2022/lib/services/change/change.service.mjs +0 -46
  77. package/esm2022/lib/services/country/country.service.mjs +0 -135
  78. package/esm2022/lib/services/data/data.service.mjs +0 -100
  79. package/esm2022/lib/services/form-builder/form-builder.service.mjs +0 -500
  80. package/esm2022/lib/services/pdf-designer/pdf-designer.service.mjs +0 -398
  81. package/esm2022/lib/services/salesforce/salesforce.service.mjs +0 -41
  82. package/esm2022/lib/services/shared/shared.service.mjs +0 -100
  83. package/esm2022/lib/services/storage/storage.service.mjs +0 -59
  84. package/esm2022/lib/services/template/template.service.mjs +0 -351
  85. package/esm2022/lib/services/translation/translation.service.mjs +0 -121
  86. package/esm2022/lib/wrapper.mjs +0 -175
  87. package/esm2022/public-api.mjs +0 -22
  88. package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
  89. package/rangertechnologies-ngnxt-2.1.253.tgz +0 -0
@@ -1,105 +0,0 @@
1
- //MSM10JUL25
2
- import { Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import { FormsModule } from '@angular/forms';
5
- import { MatTooltipModule } from '@angular/material/tooltip';
6
- import { NxtCustomTranslatePipe } from "../../pipe/custom-translate.pipe";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/platform-browser";
9
- import * as i2 from "@angular/common";
10
- import * as i3 from "@angular/forms";
11
- import * as i4 from "@angular/material/tooltip";
12
- export class IconSelectorComponent {
13
- sanitizer;
14
- allIcons;
15
- themeColor = '#ff0000'; // Default theme color
16
- height = '300px'; // Default height
17
- tooltipPosition = "above"; // above, below, left, right, before, after
18
- selectedIcon; // Selected icon name
19
- cdnIconURL = ""; // CDN URL for icons
20
- label = ''; // Input label
21
- labelFont = ''; // Input label font
22
- labelWeight = ''; // Input label Weight
23
- inputWeight = ''; // Input Weight
24
- labelSize = ''; // Input label Size
25
- labelColor = ''; // Input label Color
26
- showLabel = ''; // Input label Color
27
- required = false; // Required validation
28
- mode = 'edit'; // New mode input
29
- question = {};
30
- options = []; // For radio buttons
31
- iconSelected = new EventEmitter(); // Event emitter for selected icon
32
- filteredIcons = [];
33
- searchQuery = '';
34
- showDropdown = false;
35
- constructor(sanitizer) {
36
- this.sanitizer = sanitizer;
37
- }
38
- ngOnInit() {
39
- this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];
40
- }
41
- filterIcons() {
42
- if (!this.searchQuery) {
43
- this.filteredIcons = this.allIcons != null && this.allIcons.length > 0 ? [...this.allIcons] : [];
44
- return;
45
- }
46
- this.filteredIcons = this.allIcons?.filter((icon) => icon?.name?.toLowerCase().includes(this.searchQuery?.toLowerCase()));
47
- }
48
- selectIcon(icon) {
49
- const iconSVG = this.getSVG(icon.svg);
50
- this.selectedIcon = iconSVG;
51
- this.iconSelected.emit(icon);
52
- }
53
- toggleDropdown() {
54
- this.showDropdown = !this.showDropdown;
55
- }
56
- getSVG(icon) {
57
- if (typeof icon === 'object') {
58
- return this.sanitizer.bypassSecurityTrustHtml(icon.changingThisBreaksApplicationSecurity || '');
59
- }
60
- return this.sanitizer.bypassSecurityTrustHtml(icon);
61
- }
62
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IconSelectorComponent, deps: [{ token: i1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
63
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: IconSelectorComponent, isStandalone: true, selector: "nxt-icon-selector", inputs: { allIcons: "allIcons", themeColor: "themeColor", height: "height", tooltipPosition: "tooltipPosition", selectedIcon: "selectedIcon", cdnIconURL: "cdnIconURL", label: "label", labelFont: "labelFont", labelWeight: "labelWeight", inputWeight: "inputWeight", labelSize: "labelSize", labelColor: "labelColor", showLabel: "showLabel", required: "required", mode: "mode", question: "question", options: "options" }, outputs: { iconSelected: "iconSelected" }, ngImport: i0, template: "<!-- MSM10JUL25 for icon selector UI -->\n<div class=\"icon-selector\">\n <div class=\"selected-icon\" (click)=\"toggleDropdown()\">\n <span *ngIf=\"!selectedIcon\">{{ 'CHOOSE_ICON' | nxtCustomTranslate : 'Choose Icon' }}</span>\n <div *ngIf=\"selectedIcon\" [innerHTML]=\"selectedIcon\" class=\"svg-container\"></div><span\n class=\"material-icons\">arrow_drop_down</span>\n </div>\n\n <div class=\"icon-selector-container\" [style.height]=\"height\" *ngIf=\"showDropdown\">\n <div class=\"search-container\">\n <div class=\"search-box\">\n <input type=\"text\" [(ngModel)]=\"searchQuery\" (input)=\"filterIcons()\" [placeholder]=\"('SEARCH_ICONS' | nxtCustomTranslate : 'Search icons...')\"\n class=\"search-input\">\n </div>\n </div>\n\n <div class=\"icon-grid-container\" [style.max-height]=\"'calc(' + height + ' - 120px)'\">\n <div *ngIf=\"filteredIcons.length === 0\" class=\"no-results\">\n {{ 'NO_ICONS_FOUND' | nxtCustomTranslate : 'No icons found matching' }} \"{{searchQuery}}\"\n </div>\n\n <div class=\"icon-grid\">\n <div *ngFor=\"let icon of filteredIcons\" class=\"icon-option\" [matTooltip]=icon.name\n [matTooltipPosition]=tooltipPosition>\n <div class=\"icon-option\">\n <div class=\"click-overlay\" (click)=\"selectIcon(icon); toggleDropdown()\"></div>\n <div [innerHTML]=\"getSVG(icon.svg)\" class=\"svg-container\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".icon-item svg{color:red}.icon-selector-container{padding:16px;max-width:400px;margin:0 auto;display:flex;flex-direction:column;border-radius:8px;box-shadow:0 2px 10px #0000001a;background-color:#fff;overflow:hidden}.search-container{margin:8px 0 16px}.icon-grid-container{overflow-y:scroll!important;padding-right:4px}.icon-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:5px}.icon-option{display:flex;align-items:center;justify-content:center;padding:6px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:#f5f5f5;aspect-ratio:1/1}.icon-option:hover{background-color:#e0e0e0;transform:scale(1.05)}.icon-option.selected{background-color:#e3f2fd;border:2px solid #2196f3}.no-results{text-align:center;padding:20px;color:#757575;font-style:italic}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}::-webkit-scrollbar-thumb{background:#888;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#555}.icon-selector{position:relative;display:inline-block}.selected-icon{display:flex;align-items:center;gap:4px;cursor:pointer;padding:3px;border:1px solid #ccc;border-radius:4px}.icon-dropdown{position:absolute;top:100%;left:0;z-index:1000;background:#fff;border:1px solid #ccc;border-radius:4px;max-height:200px;overflow-y:auto;display:grid;grid-template-columns:repeat(8,1fr);gap:5px;padding:3px}.icon-option{padding:3px;cursor:pointer;border-radius:4px;display:flex;justify-content:center}.icon-option:hover{background-color:#f0f0f0}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1}svg{width:20px!important;height:20px!important}.click-overlay{position:absolute;inset:0;z-index:1}.icon-option{position:relative;cursor:pointer}.svg-container{display:flex;align-items:center;justify-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }] });
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IconSelectorComponent, decorators: [{
66
- type: Component,
67
- args: [{ selector: 'nxt-icon-selector', imports: [CommonModule, FormsModule, MatTooltipModule, NxtCustomTranslatePipe], standalone: true, template: "<!-- MSM10JUL25 for icon selector UI -->\n<div class=\"icon-selector\">\n <div class=\"selected-icon\" (click)=\"toggleDropdown()\">\n <span *ngIf=\"!selectedIcon\">{{ 'CHOOSE_ICON' | nxtCustomTranslate : 'Choose Icon' }}</span>\n <div *ngIf=\"selectedIcon\" [innerHTML]=\"selectedIcon\" class=\"svg-container\"></div><span\n class=\"material-icons\">arrow_drop_down</span>\n </div>\n\n <div class=\"icon-selector-container\" [style.height]=\"height\" *ngIf=\"showDropdown\">\n <div class=\"search-container\">\n <div class=\"search-box\">\n <input type=\"text\" [(ngModel)]=\"searchQuery\" (input)=\"filterIcons()\" [placeholder]=\"('SEARCH_ICONS' | nxtCustomTranslate : 'Search icons...')\"\n class=\"search-input\">\n </div>\n </div>\n\n <div class=\"icon-grid-container\" [style.max-height]=\"'calc(' + height + ' - 120px)'\">\n <div *ngIf=\"filteredIcons.length === 0\" class=\"no-results\">\n {{ 'NO_ICONS_FOUND' | nxtCustomTranslate : 'No icons found matching' }} \"{{searchQuery}}\"\n </div>\n\n <div class=\"icon-grid\">\n <div *ngFor=\"let icon of filteredIcons\" class=\"icon-option\" [matTooltip]=icon.name\n [matTooltipPosition]=tooltipPosition>\n <div class=\"icon-option\">\n <div class=\"click-overlay\" (click)=\"selectIcon(icon); toggleDropdown()\"></div>\n <div [innerHTML]=\"getSVG(icon.svg)\" class=\"svg-container\"></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".icon-item svg{color:red}.icon-selector-container{padding:16px;max-width:400px;margin:0 auto;display:flex;flex-direction:column;border-radius:8px;box-shadow:0 2px 10px #0000001a;background-color:#fff;overflow:hidden}.search-container{margin:8px 0 16px}.icon-grid-container{overflow-y:scroll!important;padding-right:4px}.icon-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:5px}.icon-option{display:flex;align-items:center;justify-content:center;padding:6px;border-radius:8px;cursor:pointer;transition:all .2s ease;background-color:#f5f5f5;aspect-ratio:1/1}.icon-option:hover{background-color:#e0e0e0;transform:scale(1.05)}.icon-option.selected{background-color:#e3f2fd;border:2px solid #2196f3}.no-results{text-align:center;padding:20px;color:#757575;font-style:italic}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}::-webkit-scrollbar-thumb{background:#888;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#555}.icon-selector{position:relative;display:inline-block}.selected-icon{display:flex;align-items:center;gap:4px;cursor:pointer;padding:3px;border:1px solid #ccc;border-radius:4px}.icon-dropdown{position:absolute;top:100%;left:0;z-index:1000;background:#fff;border:1px solid #ccc;border-radius:4px;max-height:200px;overflow-y:auto;display:grid;grid-template-columns:repeat(8,1fr);gap:5px;padding:3px}.icon-option{padding:3px;cursor:pointer;border-radius:4px;display:flex;justify-content:center}.icon-option:hover{background-color:#f0f0f0}.material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:24px;line-height:1}svg{width:20px!important;height:20px!important}.click-overlay{position:absolute;inset:0;z-index:1}.icon-option{position:relative;cursor:pointer}.svg-container{display:flex;align-items:center;justify-content:center}\n"] }]
68
- }], ctorParameters: () => [{ type: i1.DomSanitizer }], propDecorators: { allIcons: [{
69
- type: Input
70
- }], themeColor: [{
71
- type: Input
72
- }], height: [{
73
- type: Input
74
- }], tooltipPosition: [{
75
- type: Input
76
- }], selectedIcon: [{
77
- type: Input
78
- }], cdnIconURL: [{
79
- type: Input
80
- }], label: [{
81
- type: Input
82
- }], labelFont: [{
83
- type: Input
84
- }], labelWeight: [{
85
- type: Input
86
- }], inputWeight: [{
87
- type: Input
88
- }], labelSize: [{
89
- type: Input
90
- }], labelColor: [{
91
- type: Input
92
- }], showLabel: [{
93
- type: Input
94
- }], required: [{
95
- type: Input
96
- }], mode: [{
97
- type: Input
98
- }], question: [{
99
- type: Input
100
- }], options: [{
101
- type: Input
102
- }], iconSelected: [{
103
- type: Output
104
- }] } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9pY29uLXNlbGVjdG9yL2ljb24tc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvaWNvbi1zZWxlY3Rvci9pY29uLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFDWixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7OztBQVMxRSxNQUFNLE9BQU8scUJBQXFCO0lBeUJ0QjtJQXhCRCxRQUFRLENBQUs7SUFDYixVQUFVLEdBQVcsU0FBUyxDQUFDLENBQUMsc0JBQXNCO0lBQ3RELE1BQU0sR0FBVyxPQUFPLENBQUMsQ0FBQyxpQkFBaUI7SUFDM0MsZUFBZSxHQUFXLE9BQU8sQ0FBQyxDQUFDLDJDQUEyQztJQUM5RSxZQUFZLENBQU0sQ0FBQyxxQkFBcUI7SUFDeEMsVUFBVSxHQUFXLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQjtJQUU3QyxLQUFLLEdBQVcsRUFBRSxDQUFDLENBQUUsY0FBYztJQUNuQyxTQUFTLEdBQVcsRUFBRSxDQUFDLENBQUUsbUJBQW1CO0lBQzVDLFdBQVcsR0FBVyxFQUFFLENBQUMsQ0FBRSxxQkFBcUI7SUFDaEQs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QUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLy9NU00xMEpVTDI1XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOeHRDdXN0b21UcmFuc2xhdGVQaXBlIH0gZnJvbSBcIi4uLy4uL3BpcGUvY3VzdG9tLXRyYW5zbGF0ZS5waXBlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1pY29uLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ljb24tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgTWF0VG9vbHRpcE1vZHVsZSwgTnh0Q3VzdG9tVHJhbnNsYXRlUGlwZV0sXG4gIHN0eWxlVXJsczogWycuL2ljb24tc2VsZWN0b3IuY29tcG9uZW50LmNzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJY29uU2VsZWN0b3JDb21wb25lbnQge1xuICBASW5wdXQoKSBhbGxJY29uczogW107XG4gIEBJbnB1dCgpIHRoZW1lQ29sb3I6IHN0cmluZyA9ICcjZmYwMDAwJzsgLy8gRGVmYXVsdCB0aGVtZSBjb2xvclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9ICczMDBweCc7IC8vIERlZmF1bHQgaGVpZ2h0XG4gIEBJbnB1dCgpIHRvb2x0aXBQb3NpdGlvbjogc3RyaW5nID0gXCJhYm92ZVwiOyAvLyBhYm92ZSwgYmVsb3csIGxlZnQsIHJpZ2h0LCBiZWZvcmUsIGFmdGVyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSWNvbjogYW55OyAvLyBTZWxlY3RlZCBpY29uIG5hbWVcbiAgQElucHV0KCkgY2RuSWNvblVSTDogc3RyaW5nID0gXCJcIjsgLy8gQ0ROIFVSTCBmb3IgaWNvbnNcblxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBsYWJlbFxuICBASW5wdXQoKSBsYWJlbEZvbnQ6IHN0cmluZyA9ICcnOyAgLy8gSW5wdXQgbGFiZWwgZm9udFxuICBASW5wdXQoKSBsYWJlbFdlaWdodDogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBsYWJlbCBXZWlnaHRcbiAgQElucHV0KCkgaW5wdXRXZWlnaHQ6IHN0cmluZyA9ICcnOyAgLy8gSW5wdXQgV2VpZ2h0XG4gIEBJbnB1dCgpIGxhYmVsU2l6ZTogc3RyaW5nID0gJyc7ICAvLyBJbnB1dCBsYWJlbCBTaXplXG4gIEBJbnB1dCgpIGxhYmVsQ29sb3I6IHN0cmluZyA9ICcnOyAgLy8gSW5wdXQgbGFiZWwgQ29sb3JcbiAgQElucHV0KCkgc2hvd0xhYmVsOiBzdHJpbmcgPSAnJzsgIC8vIElucHV0IGxhYmVsIENvbG9yXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7ICAvLyBSZXF1aXJlZCB2YWxpZGF0aW9uXG4gIEBJbnB1dCgpIG1vZGU6ICd2aWV3JyB8ICdlZGl0JyB8ICdwcmludCcgPSAnZWRpdCc7IC8vIE5ldyBtb2RlIGlucHV0XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fVxuICBASW5wdXQoKSBvcHRpb25zOiBhbnlbXSA9IFtdOyAvLyBGb3IgcmFkaW8gYnV0dG9uc1xuXG4gIEBPdXRwdXQoKSBpY29uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTsgLy8gRXZlbnQgZW1pdHRlciBmb3Igc2VsZWN0ZWQgaWNvblxuICBmaWx0ZXJlZEljb25zOiBhbnlbXSA9IFtdO1xuICBzZWFyY2hRdWVyeSA9ICcnO1xuICBzaG93RHJvcGRvd24gPSBmYWxzZTtcbiAgIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7fVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZpbHRlcmVkSWNvbnMgPSB0aGlzLmFsbEljb25zICE9IG51bGwgJiYgdGhpcy5hbGxJY29ucy5sZW5ndGggPiAwID8gWy4uLnRoaXMuYWxsSWNvbnNdIDogW107XG4gIH1cbiAgZmlsdGVySWNvbnMoKSB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFF1ZXJ5KSB7XG4gICAgICB0aGlzLmZpbHRlcmVkSWNvbnMgPSB0aGlzLmFsbEljb25zICE9IG51bGwgJiYgdGhpcy5hbGxJY29ucy5sZW5ndGggPiAwID8gWy4uLnRoaXMuYWxsSWNvbnNdIDogW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyZWRJY29ucyA9IHRoaXMuYWxsSWNvbnM/LmZpbHRlcigoaWNvbjogYW55KSA9PlxuICAgICAgaWNvbj8ubmFtZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFF1ZXJ5Py50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gIH1cblxuICBzZWxlY3RJY29uKGljb246IGFueSkge1xuICAgIGNvbnN0IGljb25TVkcgPSB0aGlzLmdldFNWRyhpY29uLnN2Zyk7XG4gICAgdGhpcy5zZWxlY3RlZEljb24gPSBpY29uU1ZHO1xuICAgIHRoaXMuaWNvblNlbGVjdGVkLmVtaXQoaWNvbik7XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEcm9wZG93biA9ICF0aGlzLnNob3dEcm9wZG93bjtcbiAgfVxuXG4gIGdldFNWRyhpY29uOiBhbnkpIHtcbiAgICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgICAgaWNvbi5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5IHx8ICcnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaWNvbik7XG4gIH1cbn1cbiIsIjwhLS0gTVNNMTBKVUwyNSBmb3IgaWNvbiBzZWxlY3RvciBVSSAtLT5cbjxkaXYgY2xhc3M9XCJpY29uLXNlbGVjdG9yXCI+XG4gIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1pY29uXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKClcIj5cbiAgICA8c3BhbiAqbmdJZj1cIiFzZWxlY3RlZEljb25cIj57eyAnQ0hPT1NFX0lDT04nIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ0Nob29zZSBJY29uJyB9fTwvc3Bhbj5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRJY29uXCIgW2lubmVySFRNTF09XCJzZWxlY3RlZEljb25cIiBjbGFzcz1cInN2Zy1jb250YWluZXJcIj48L2Rpdj48c3BhblxuICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmFycm93X2Ryb3BfZG93bjwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImljb24tc2VsZWN0b3ItY29udGFpbmVyXCIgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIiAqbmdJZj1cInNob3dEcm9wZG93blwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWJveFwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFF1ZXJ5XCIgKGlucHV0KT1cImZpbHRlckljb25zKClcIiBbcGxhY2Vob2xkZXJdPVwiKCdTRUFSQ0hfSUNPTlMnIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ1NlYXJjaCBpY29ucy4uLicpXCJcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ncmlkLWNvbnRhaW5lclwiIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIidjYWxjKCcgKyBoZWlnaHQgKyAnIC0gMTIwcHgpJ1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkSWNvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJuby1yZXN1bHRzXCI+XG4gICAgICAgIHt7ICdOT19JQ09OU19GT1VORCcgfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnTm8gaWNvbnMgZm91bmQgbWF0Y2hpbmcnIH19IFwie3tzZWFyY2hRdWVyeX19XCJcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1ncmlkXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGljb24gb2YgZmlsdGVyZWRJY29uc1wiIGNsYXNzPVwiaWNvbi1vcHRpb25cIiBbbWF0VG9vbHRpcF09aWNvbi5uYW1lXG4gICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09dG9vbHRpcFBvc2l0aW9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLW9wdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrLW92ZXJsYXlcIiAoY2xpY2spPVwic2VsZWN0SWNvbihpY29uKTsgdG9nZ2xlRHJvcGRvd24oKVwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFNWRyhpY29uLnN2ZylcIiBjbGFzcz1cInN2Zy1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
@@ -1,208 +0,0 @@
1
- import { checkCropperPosition } from '../utils/cropper-position.utils';
2
- export class CropperState {
3
- options = {
4
- format: 'png',
5
- output: 'blob',
6
- autoCrop: true,
7
- maintainAspectRatio: true,
8
- aspectRatio: 1,
9
- resetCropOnAspectRatioChange: true,
10
- resizeToWidth: 0,
11
- resizeToHeight: 0,
12
- cropperMinWidth: 0,
13
- cropperMinHeight: 0,
14
- cropperMaxHeight: 0,
15
- cropperMaxWidth: 0,
16
- cropperStaticWidth: 0,
17
- cropperStaticHeight: 0,
18
- canvasRotation: 0,
19
- roundCropper: false,
20
- onlyScaleDown: false,
21
- imageQuality: 92,
22
- backgroundColor: null,
23
- containWithinAspectRatio: false,
24
- hideResizeSquares: false,
25
- alignImage: 'center',
26
- cropperFrameAriaLabel: undefined,
27
- checkImageType: true,
28
- };
29
- loadedImage;
30
- maxSize;
31
- cropper = { x1: 0, x2: 0, y1: 0, y2: 0 };
32
- transform = {};
33
- // Internal
34
- cropperScaledMinWidth = 20;
35
- cropperScaledMinHeight = 20;
36
- cropperScaledMaxWidth = 20;
37
- cropperScaledMaxHeight = 20;
38
- stepSize = 3;
39
- setOptionsFromChanges(changes) {
40
- if (changes['options']?.currentValue) {
41
- this.setOptions(changes['options'].currentValue);
42
- }
43
- const options = Object.entries(changes)
44
- .filter(([key]) => key in this.options)
45
- .reduce((acc, [key, change]) => ({
46
- ...acc,
47
- [key]: change.currentValue,
48
- }), {});
49
- if (Object.keys(options).length > 0) {
50
- this.setOptions(options);
51
- }
52
- }
53
- setOptions(options) {
54
- this.options = {
55
- ...this.options,
56
- ...(options || {}),
57
- };
58
- this.validateOptions();
59
- if (!this.loadedImage?.transformed.image.complete || !this.maxSize) {
60
- return;
61
- }
62
- let positionPossiblyChanged = false;
63
- if ((this.options.maintainAspectRatio && options['aspectRatio']) ||
64
- options['maintainAspectRatio']) {
65
- this.setCropperScaledMinSize();
66
- this.setCropperScaledMaxSize();
67
- if (this.options.maintainAspectRatio &&
68
- (this.options.resetCropOnAspectRatioChange ||
69
- !this.aspectRatioIsCorrect())) {
70
- this.cropper = this.maxSizeCropperPosition();
71
- positionPossiblyChanged = true;
72
- }
73
- }
74
- else {
75
- if (options['cropperMinWidth'] || options['cropperMinHeight']) {
76
- this.setCropperScaledMinSize();
77
- positionPossiblyChanged = true;
78
- }
79
- if (options['cropperMaxWidth'] || options['cropperMaxHeight']) {
80
- this.setCropperScaledMaxSize();
81
- positionPossiblyChanged = true;
82
- }
83
- if (options['cropperStaticWidth'] || options['cropperStaticHeight']) {
84
- positionPossiblyChanged = true;
85
- }
86
- }
87
- if (positionPossiblyChanged) {
88
- this.cropper = checkCropperPosition(this.cropper, this, false);
89
- }
90
- }
91
- validateOptions() {
92
- if (this.options.maintainAspectRatio && !this.options.aspectRatio) {
93
- throw new Error('`aspectRatio` should > 0 when `maintainAspectRatio` is enabled');
94
- }
95
- }
96
- setMaxSize(width, height) {
97
- this.maxSize = { width, height };
98
- this.setCropperScaledMinSize();
99
- this.setCropperScaledMaxSize();
100
- }
101
- setCropperScaledMinSize() {
102
- if (this.loadedImage?.transformed.size) {
103
- this.setCropperScaledMinWidth();
104
- this.setCropperScaledMinHeight();
105
- }
106
- else {
107
- this.cropperScaledMinWidth = 20;
108
- this.cropperScaledMinHeight = 20;
109
- }
110
- }
111
- setCropperScaledMinWidth() {
112
- this.cropperScaledMinWidth =
113
- this.options.cropperMinWidth > 0
114
- ? Math.max(20, (this.options.cropperMinWidth /
115
- this.loadedImage.transformed.size.width) *
116
- this.maxSize.width)
117
- : 20;
118
- }
119
- setCropperScaledMinHeight() {
120
- if (this.options.maintainAspectRatio) {
121
- this.cropperScaledMinHeight = Math.max(20, this.cropperScaledMinWidth / this.options.aspectRatio);
122
- }
123
- else if (this.options.cropperMinHeight > 0) {
124
- this.cropperScaledMinHeight = Math.max(20, (this.options.cropperMinHeight /
125
- this.loadedImage.transformed.size.height) *
126
- this.maxSize.height);
127
- }
128
- else {
129
- this.cropperScaledMinHeight = 20;
130
- }
131
- }
132
- setCropperScaledMaxSize() {
133
- if (this.loadedImage?.transformed.size) {
134
- const ratio = this.loadedImage.transformed.size.width / this.maxSize.width;
135
- this.cropperScaledMaxWidth =
136
- this.options.cropperMaxWidth > 20
137
- ? this.options.cropperMaxWidth / ratio
138
- : this.maxSize.width;
139
- this.cropperScaledMaxHeight =
140
- this.options.cropperMaxHeight > 20
141
- ? this.options.cropperMaxHeight / ratio
142
- : this.maxSize.height;
143
- if (this.options.maintainAspectRatio) {
144
- if (this.cropperScaledMaxWidth >
145
- this.cropperScaledMaxHeight * this.options.aspectRatio) {
146
- this.cropperScaledMaxWidth =
147
- this.cropperScaledMaxHeight * this.options.aspectRatio;
148
- }
149
- else if (this.cropperScaledMaxWidth <
150
- this.cropperScaledMaxHeight * this.options.aspectRatio) {
151
- this.cropperScaledMaxHeight =
152
- this.cropperScaledMaxWidth / this.options.aspectRatio;
153
- }
154
- }
155
- }
156
- else {
157
- this.cropperScaledMaxWidth = this.maxSize.width;
158
- this.cropperScaledMaxHeight = this.maxSize.height;
159
- }
160
- }
161
- equalsCropperPosition(cropper) {
162
- return ((this.cropper == null && cropper == null) ||
163
- (this.cropper != null &&
164
- cropper != null &&
165
- this.cropper.x1.toFixed(3) === cropper.x1.toFixed(3) &&
166
- this.cropper.y1.toFixed(3) === cropper.y1.toFixed(3) &&
167
- this.cropper.x2.toFixed(3) === cropper.x2.toFixed(3) &&
168
- this.cropper.y2.toFixed(3) === cropper.y2.toFixed(3)));
169
- }
170
- equalsTransformTranslate(transform) {
171
- return ((this.transform.translateH ?? 0) === (transform.translateH ?? 0) &&
172
- (this.transform.translateV ?? 0) === (transform.translateV ?? 0));
173
- }
174
- equalsTransform(transform) {
175
- return (this.equalsTransformTranslate(transform) &&
176
- (this.transform.scale ?? 1) === (transform.scale ?? 1) &&
177
- (this.transform.rotate ?? 0) === (transform.rotate ?? 0) &&
178
- (this.transform.flipH ?? false) === (transform.flipH ?? false) &&
179
- (this.transform.flipV ?? false) === (transform.flipV ?? false));
180
- }
181
- aspectRatioIsCorrect() {
182
- const currentCropAspectRatio = (this.cropper.x2 - this.cropper.x1) / (this.cropper.y2 - this.cropper.y1);
183
- return currentCropAspectRatio === this.options.aspectRatio;
184
- }
185
- resizeCropperPosition(oldMaxSize) {
186
- if (!this.cropper) {
187
- return;
188
- }
189
- if (oldMaxSize.width !== this.maxSize.width ||
190
- oldMaxSize.height !== this.maxSize.height) {
191
- this.cropper = {
192
- x1: (this.cropper.x1 * this.maxSize.width) / oldMaxSize.width,
193
- x2: (this.cropper.x2 * this.maxSize.width) / oldMaxSize.width,
194
- y1: (this.cropper.y1 * this.maxSize.height) / oldMaxSize.height,
195
- y2: (this.cropper.y2 * this.maxSize.height) / oldMaxSize.height,
196
- };
197
- }
198
- }
199
- maxSizeCropperPosition() {
200
- return {
201
- x1: 0,
202
- y1: 0,
203
- x2: this.maxSize.width,
204
- y2: this.maxSize.height,
205
- };
206
- }
207
- }
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JvcHBlci5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvY29tcG9uZW50L2Nyb3BwZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdkUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsT0FBTyxHQUFtQjtRQUN4QixNQUFNLEVBQUUsS0FBSztRQUNiLE1BQU0sRUFBRSxNQUFNO1FBQ2QsUUFBUSxFQUFFLElBQUk7UUFDZCxtQkFBbUIsRUFBRSxJQUFJO1FBQ3pCLFdBQVcsRUFBRSxDQUFDO1FBQ2QsNEJBQTRCLEVBQUUsSUFBSTtRQUNsQyxhQUFhLEVBQUUsQ0FBQztRQUNoQixjQUFjLEVBQUUsQ0FBQztRQUNqQixlQUFlLEVBQUUsQ0FBQztRQUNsQixnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGdCQUFnQixFQUFFLENBQUM7UUFDbkIsZUFBZSxFQUFFLENBQUM7UUFDbEIsa0JBQWtCLEVBQUUsQ0FBQztRQUNyQixtQkFBbUIsRUFBRSxDQUFDO1FBQ3RCLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLFlBQVksRUFBRSxLQUFLO1FBQ25CLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLFlBQVksRUFBRSxFQUFFO1FBQ2hCLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLHdCQUF3QixFQUFFLEtBQUs7UUFDL0IsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixVQUFVLEVBQUUsUUFBUTtRQUNwQixxQkFBcUIsRUFBRSxTQUFTO1FBQ2hDLGNBQWMsRUFBRSxJQUFJO0tBQ3JCLENBQUM7SUFFRixXQUFXLENBQWU7SUFDMUIsT0FBTyxDQUFjO0lBQ3JCLE9BQU8sR0FBb0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxF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QUFDLE9BQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSztnQkFDOUQsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSztnQkFDOUQsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTTtnQkFDaEUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTTthQUNqRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsT0FBTztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsRUFBRSxFQUFFLENBQUM7WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQVEsQ0FBQyxLQUFLO1lBQ3ZCLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBUSxDQUFDLE1BQU07U0FDekIsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENyb3BwZXJPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jcm9wcGVyLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENyb3BwZXJQb3NpdGlvbixcbiAgRGltZW5zaW9ucyxcbiAgSW1hZ2VUcmFuc2Zvcm0sXG4gIExvYWRlZEltYWdlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNoZWNrQ3JvcHBlclBvc2l0aW9uIH0gZnJvbSAnLi4vdXRpbHMvY3JvcHBlci1wb3NpdGlvbi51dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDcm9wcGVyU3RhdGUge1xuICBvcHRpb25zOiBDcm9wcGVyT3B0aW9ucyA9IHtcbiAgICBmb3JtYXQ6ICdwbmcnLFxuICAgIG91dHB1dDogJ2Jsb2InLFxuICAgIGF1dG9Dcm9wOiB0cnVlLFxuICAgIG1haW50YWluQXNwZWN0UmF0aW86IHRydWUsXG4gICAgYXNwZWN0UmF0aW86IDEsXG4gICAgcmVzZXRDcm9wT25Bc3BlY3RSYXRpb0NoYW5nZTogdHJ1ZSxcbiAgICByZXNpemVUb1dpZHRoOiAwLFxuICAgIHJlc2l6ZVRvSGVpZ2h0OiAwLFxuICAgIGNyb3BwZXJNaW5XaWR0aDogMCxcbiAgICBjcm9wcGVyTWluSGVpZ2h0OiAwLFxuICAgIGNyb3BwZXJNYXhIZWlnaHQ6IDAsXG4gICAgY3JvcHBlck1heFdpZHRoOiAwLFxuICAgIGNyb3BwZXJTdGF0aWNXaWR0aDogMCxcbiAgICBjcm9wcGVyU3RhdGljSGVpZ2h0OiAwLFxuICAgIGNhbnZhc1JvdGF0aW9uOiAwLFxuICAgIHJvdW5kQ3JvcHBlcjogZmFsc2UsXG4gICAgb25seVNjYWxlRG93bjogZmFsc2UsXG4gICAgaW1hZ2VRdWFsaXR5OiA5MixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwsXG4gICAgY29udGFpbldpdGhpbkFzcGVjdFJhdGlvOiBmYWxzZSxcbiAgICBoaWRlUmVzaXplU3F1YXJlczogZmFsc2UsXG4gICAgYWxpZ25JbWFnZTogJ2NlbnRlcicsXG4gICAgY3JvcHBlckZyYW1lQXJpYUxhYmVsOiB1bmRlZmluZWQsXG4gICAgY2hlY2tJbWFnZVR5cGU6IHRydWUsXG4gIH07XG5cbiAgbG9hZGVkSW1hZ2U/OiBMb2FkZWRJbWFnZTtcbiAgbWF4U2l6ZT86IERpbWVuc2lvbnM7XG4gIGNyb3BwZXI6IENyb3BwZXJQb3NpdGlvbiA9IHsgeDE6IDAsIHgyOiAwLCB5MTogMCwgeTI6IDAgfTtcbiAgdHJhbnNmb3JtOiBJbWFnZVRyYW5zZm9ybSA9IHt9O1xuXG4gIC8vIEludGVybmFsXG4gIGNyb3BwZXJTY2FsZWRNaW5XaWR0aCA9IDIwO1xuICBjcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gMjA7XG4gIGNyb3BwZXJTY2FsZWRNYXhXaWR0aCA9IDIwO1xuICBjcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID0gMjA7XG4gIHN0ZXBTaXplID0gMztcblxuICBzZXRPcHRpb25zRnJvbUNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKGNoYW5nZXNbJ29wdGlvbnMnXS5jdXJyZW50VmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmVudHJpZXMoY2hhbmdlcylcbiAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgaW4gdGhpcy5vcHRpb25zKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2tleSwgY2hhbmdlXSkgPT4gKHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgW2tleV06IGNoYW5nZS5jdXJyZW50VmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICB7fSBhcyBQYXJ0aWFsPENyb3BwZXJPcHRpb25zPlxuICAgICAgKTtcbiAgICBpZiAoT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogUGFydGlhbDxDcm9wcGVyT3B0aW9ucz4pOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAuLi4ob3B0aW9ucyB8fCB7fSksXG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlT3B0aW9ucygpO1xuXG4gICAgaWYgKCF0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5pbWFnZS5jb21wbGV0ZSB8fCAhdGhpcy5tYXhTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmIG9wdGlvbnNbJ2FzcGVjdFJhdGlvJ10pIHx8XG4gICAgICBvcHRpb25zWydtYWludGFpbkFzcGVjdFJhdGlvJ11cbiAgICApIHtcbiAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTtcbiAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1heFNpemUoKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8gJiZcbiAgICAgICAgKHRoaXMub3B0aW9ucy5yZXNldENyb3BPbkFzcGVjdFJhdGlvQ2hhbmdlIHx8XG4gICAgICAgICAgIXRoaXMuYXNwZWN0UmF0aW9Jc0NvcnJlY3QoKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNyb3BwZXIgPSB0aGlzLm1heFNpemVDcm9wcGVyUG9zaXRpb24oKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9uc1snY3JvcHBlck1pbldpZHRoJ10gfHwgb3B0aW9uc1snY3JvcHBlck1pbkhlaWdodCddKSB7XG4gICAgICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1pblNpemUoKTtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnNbJ2Nyb3BwZXJNYXhXaWR0aCddIHx8IG9wdGlvbnNbJ2Nyb3BwZXJNYXhIZWlnaHQnXSkge1xuICAgICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk7XG4gICAgICAgIHBvc2l0aW9uUG9zc2libHlDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zWydjcm9wcGVyU3RhdGljV2lkdGgnXSB8fCBvcHRpb25zWydjcm9wcGVyU3RhdGljSGVpZ2h0J10pIHtcbiAgICAgICAgcG9zaXRpb25Qb3NzaWJseUNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3NpdGlvblBvc3NpYmx5Q2hhbmdlZCkge1xuICAgICAgdGhpcy5jcm9wcGVyID0gY2hlY2tDcm9wcGVyUG9zaXRpb24odGhpcy5jcm9wcGVyLCB0aGlzLCBmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYWludGFpbkFzcGVjdFJhdGlvICYmICF0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2Bhc3BlY3RSYXRpb2Agc2hvdWxkID4gMCB3aGVuIGBtYWludGFpbkFzcGVjdFJhdGlvYCBpcyBlbmFibGVkJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzZXRNYXhTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXhTaXplID0geyB3aWR0aCwgaGVpZ2h0IH07XG4gICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluU2l6ZSgpO1xuICAgIHRoaXMuc2V0Q3JvcHBlclNjYWxlZE1heFNpemUoKTtcbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNaW5TaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5zaXplKSB7XG4gICAgICB0aGlzLnNldENyb3BwZXJTY2FsZWRNaW5XaWR0aCgpO1xuICAgICAgdGhpcy5zZXRDcm9wcGVyU2NhbGVkTWluSGVpZ2h0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbldpZHRoID0gMjA7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5IZWlnaHQgPSAyMDtcbiAgICB9XG4gIH1cblxuICBzZXRDcm9wcGVyU2NhbGVkTWluV2lkdGgoKTogdm9pZCB7XG4gICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluV2lkdGggPVxuICAgICAgdGhpcy5vcHRpb25zLmNyb3BwZXJNaW5XaWR0aCA+IDBcbiAgICAgICAgPyBNYXRoLm1heChcbiAgICAgICAgICAgIDIwLFxuICAgICAgICAgICAgKHRoaXMub3B0aW9ucy5jcm9wcGVyTWluV2lkdGggL1xuICAgICAgICAgICAgICB0aGlzLmxvYWRlZEltYWdlIS50cmFuc2Zvcm1lZC5zaXplLndpZHRoKSAqXG4gICAgICAgICAgICAgIHRoaXMubWF4U2l6ZSEud2lkdGhcbiAgICAgICAgICApXG4gICAgICAgIDogMjA7XG4gIH1cblxuICBzZXRDcm9wcGVyU2NhbGVkTWluSGVpZ2h0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMubWFpbnRhaW5Bc3BlY3RSYXRpbykge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIDIwLFxuICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNaW5XaWR0aCAvIHRoaXMub3B0aW9ucy5hc3BlY3RSYXRpb1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jcm9wcGVyTWluSGVpZ2h0ID4gMCkge1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWluSGVpZ2h0ID0gTWF0aC5tYXgoXG4gICAgICAgIDIwLFxuICAgICAgICAodGhpcy5vcHRpb25zLmNyb3BwZXJNaW5IZWlnaHQgL1xuICAgICAgICAgIHRoaXMubG9hZGVkSW1hZ2UhLnRyYW5zZm9ybWVkLnNpemUuaGVpZ2h0KSAqXG4gICAgICAgICAgdGhpcy5tYXhTaXplIS5oZWlnaHRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1pbkhlaWdodCA9IDIwO1xuICAgIH1cbiAgfVxuXG4gIHNldENyb3BwZXJTY2FsZWRNYXhTaXplKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRlZEltYWdlPy50cmFuc2Zvcm1lZC5zaXplKSB7XG4gICAgICBjb25zdCByYXRpbyA9XG4gICAgICAgIHRoaXMubG9hZGVkSW1hZ2UudHJhbnNmb3JtZWQuc2l6ZS53aWR0aCAvIHRoaXMubWF4U2l6ZSEud2lkdGg7XG4gICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhXaWR0aCA9XG4gICAgICAgIHRoaXMub3B0aW9ucy5jcm9wcGVyTWF4V2lkdGggPiAyMFxuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhXaWR0aCAvIHJhdGlvXG4gICAgICAgICAgOiB0aGlzLm1heFNpemUhLndpZHRoO1xuICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID1cbiAgICAgICAgdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhIZWlnaHQgPiAyMFxuICAgICAgICAgID8gdGhpcy5vcHRpb25zLmNyb3BwZXJNYXhIZWlnaHQgLyByYXRpb1xuICAgICAgICAgIDogdGhpcy5tYXhTaXplIS5oZWlnaHQ7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm1haW50YWluQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID5cbiAgICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW9cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4V2lkdGggPVxuICAgICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ICogdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoIDxcbiAgICAgICAgICB0aGlzLmNyb3BwZXJTY2FsZWRNYXhIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXNwZWN0UmF0aW9cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jcm9wcGVyU2NhbGVkTWF4SGVpZ2h0ID1cbiAgICAgICAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoIC8gdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heFdpZHRoID0gdGhpcy5tYXhTaXplIS53aWR0aDtcbiAgICAgIHRoaXMuY3JvcHBlclNjYWxlZE1heEhlaWdodCA9IHRoaXMubWF4U2l6ZSEuaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIGVxdWFsc0Nyb3BwZXJQb3NpdGlvbihjcm9wcGVyPzogQ3JvcHBlclBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmNyb3BwZXIgPT0gbnVsbCAmJiBjcm9wcGVyID09IG51bGwpIHx8XG4gICAgICAodGhpcy5jcm9wcGVyICE9IG51bGwgJiZcbiAgICAgICAgY3JvcHBlciAhPSBudWxsICYmXG4gICAgICAgIHRoaXMuY3JvcHBlci54MS50b0ZpeGVkKDMpID09PSBjcm9wcGVyLngxLnRvRml4ZWQoMykgJiZcbiAgICAgICAgdGhpcy5jcm9wcGVyLnkxLnRvRml4ZWQoMykgPT09IGNyb3BwZXIueTEudG9GaXhlZCgzKSAmJlxuICAgICAgICB0aGlzLmNyb3BwZXIueDIudG9GaXhlZCgzKSA9PT0gY3JvcHBlci54Mi50b0ZpeGVkKDMpICYmXG4gICAgICAgIHRoaXMuY3JvcHBlci55Mi50b0ZpeGVkKDMpID09PSBjcm9wcGVyLnkyLnRvRml4ZWQoMykpXG4gICAgKTtcbiAgfVxuXG4gIGVxdWFsc1RyYW5zZm9ybVRyYW5zbGF0ZSh0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZUggPz8gMCkgJiZcbiAgICAgICh0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWID8/IDApID09PSAodHJhbnNmb3JtLnRyYW5zbGF0ZVYgPz8gMClcbiAgICApO1xuICB9XG5cbiAgZXF1YWxzVHJhbnNmb3JtKHRyYW5zZm9ybTogSW1hZ2VUcmFuc2Zvcm0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5lcXVhbHNUcmFuc2Zvcm1UcmFuc2xhdGUodHJhbnNmb3JtKSAmJlxuICAgICAgKHRoaXMudHJhbnNmb3JtLnNjYWxlID8/IDEpID09PSAodHJhbnNmb3JtLnNjYWxlID8/IDEpICYmXG4gICAgICAodGhpcy50cmFuc2Zvcm0ucm90YXRlID8/IDApID09PSAodHJhbnNmb3JtLnJvdGF0ZSA/PyAwKSAmJlxuICAgICAgKHRoaXMudHJhbnNmb3JtLmZsaXBIID8/IGZhbHNlKSA9PT0gKHRyYW5zZm9ybS5mbGlwSCA/PyBmYWxzZSkgJiZcbiAgICAgICh0aGlzLnRyYW5zZm9ybS5mbGlwViA/PyBmYWxzZSkgPT09ICh0cmFuc2Zvcm0uZmxpcFYgPz8gZmFsc2UpXG4gICAgKTtcbiAgfVxuXG4gIGFzcGVjdFJhdGlvSXNDb3JyZWN0KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRDcm9wQXNwZWN0UmF0aW8gPVxuICAgICAgKHRoaXMuY3JvcHBlci54MiAtIHRoaXMuY3JvcHBlci54MSkgLyAodGhpcy5jcm9wcGVyLnkyIC0gdGhpcy5jcm9wcGVyLnkxKTtcbiAgICByZXR1cm4gY3VycmVudENyb3BBc3BlY3RSYXRpbyA9PT0gdGhpcy5vcHRpb25zLmFzcGVjdFJhdGlvO1xuICB9XG5cbiAgcmVzaXplQ3JvcHBlclBvc2l0aW9uKG9sZE1heFNpemU6IERpbWVuc2lvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY3JvcHBlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBvbGRNYXhTaXplLndpZHRoICE9PSB0aGlzLm1heFNpemUhLndpZHRoIHx8XG4gICAgICBvbGRNYXhTaXplLmhlaWdodCAhPT0gdGhpcy5tYXhTaXplIS5oZWlnaHRcbiAgICApIHtcbiAgICAgIHRoaXMuY3JvcHBlciA9IHtcbiAgICAgICAgeDE6ICh0aGlzLmNyb3BwZXIueDEgKiB0aGlzLm1heFNpemUhLndpZHRoKSAvIG9sZE1heFNpemUud2lkdGgsXG4gICAgICAgIHgyOiAodGhpcy5jcm9wcGVyLngyICogdGhpcy5tYXhTaXplIS53aWR0aCkgLyBvbGRNYXhTaXplLndpZHRoLFxuICAgICAgICB5MTogKHRoaXMuY3JvcHBlci55MSAqIHRoaXMubWF4U2l6ZSEuaGVpZ2h0KSAvIG9sZE1heFNpemUuaGVpZ2h0LFxuICAgICAgICB5MjogKHRoaXMuY3JvcHBlci55MiAqIHRoaXMubWF4U2l6ZSEuaGVpZ2h0KSAvIG9sZE1heFNpemUuaGVpZ2h0LFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBtYXhTaXplQ3JvcHBlclBvc2l0aW9uKCk6IENyb3BwZXJQb3NpdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHgxOiAwLFxuICAgICAgeTE6IDAsXG4gICAgICB4MjogdGhpcy5tYXhTaXplIS53aWR0aCxcbiAgICAgIHkyOiB0aGlzLm1heFNpemUhLmhlaWdodCxcbiAgICB9O1xuICB9XG59XG4iXX0=