trm-tmpl 3.2.1 → 3.3.0

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 (68) hide show
  1. package/esm2022/lib/app/i18n/i18n-key.enum.mjs +2 -1
  2. package/esm2022/lib/app/i18n/keys.mjs +3 -2
  3. package/esm2022/lib/app/models/constants.mjs +4 -2
  4. package/esm2022/lib/app/pages/components/constructor-form/components/constructor-field-date/constructor-field-date.component.mjs +24 -38
  5. package/esm2022/lib/app/pages/components/constructor-form/components/constructor-field-iframe/card-sdk.service.mjs +41 -0
  6. package/esm2022/lib/app/pages/components/constructor-form/components/constructor-field-iframe/constructor-field-iframe.component.mjs +99 -117
  7. package/esm2022/lib/app/pages/components/constructor-form/components/constructor-field-iframe/iframe-validator-directive.directive.mjs +88 -0
  8. package/esm2022/lib/app/pages/components/constructor-form/components/constructor-field-select/constructor-field-select.component.mjs +15 -37
  9. package/esm2022/lib/app/pages/components/constructor-form/components/constructor-field-text/constructor-field-text.component.mjs +10 -4
  10. package/esm2022/lib/app/pages/components/constructor-form/components/index.mjs +3 -1
  11. package/esm2022/lib/app/pages/components/constructor-form/components/method-amount-hint/method-amount-hint.component.mjs +11 -7
  12. package/esm2022/lib/app/pages/components/constructor-form/components/ps-select/ps-select.component.mjs +20 -24
  13. package/esm2022/lib/app/pages/components/constructor-form/constructor-form.component.mjs +90 -64
  14. package/esm2022/lib/app/pages/components/constructor-form/models/field-template.mjs +2 -1
  15. package/esm2022/lib/app/pages/components/constructor-form/models/index.mjs +1 -2
  16. package/esm2022/lib/app/pages/components/constructor-form/models/payment-field-options.mjs +1 -1
  17. package/esm2022/lib/app/pages/components/constructor-form/models/payment-field.mjs +1 -1
  18. package/esm2022/lib/app/pages/components/constructor-form/services/constructor-form.service.mjs +40 -25
  19. package/esm2022/lib/app/pages/components/terminal-layout/terminal-layout.component.mjs +11 -9
  20. package/esm2022/lib/app/pages/directives/fee-template.directive.mjs +17 -0
  21. package/esm2022/lib/app/pages/directives/index.mjs +2 -1
  22. package/esm2022/lib/app/services/api-errors.service.mjs +16 -34
  23. package/esm2022/lib/app/services/csrf.resolver.mjs +6 -18
  24. package/esm2022/lib/app/services/error.interceptior.mjs +2 -2
  25. package/esm2022/lib/app/services/local-storage.mjs +70 -0
  26. package/esm2022/lib/app/services/script-loader.mjs +4 -7
  27. package/esm2022/lib/app/services/session.data-source.mjs +12 -11
  28. package/esm2022/lib/app/services/translation/translate-lang-storage.service.mjs +95 -79
  29. package/esm2022/lib/app/shared/components/terminal-lang-switcher/terminal-lang-switcher.component.mjs +10 -8
  30. package/esm2022/lib/app/shared/components/terminal-layout-tpl/terminal-layout-tpl.component.mjs +6 -6
  31. package/esm2022/lib/app/shared/components/trm-select/trm-select.component.mjs +1 -1
  32. package/esm2022/lib/app/terminal-tpl.component.mjs +13 -16
  33. package/esm2022/lib/app/terminal.module.mjs +43 -75
  34. package/fesm2022/trm-tmpl.mjs +936 -793
  35. package/fesm2022/trm-tmpl.mjs.map +1 -1
  36. package/lib/app/i18n/i18n-key.enum.d.ts +1 -0
  37. package/lib/app/models/constants.d.ts +3 -1
  38. package/lib/app/pages/components/constructor-form/components/constructor-field-date/constructor-field-date.component.d.ts +7 -10
  39. package/lib/app/pages/components/constructor-form/components/constructor-field-iframe/card-sdk.service.d.ts +18 -0
  40. package/lib/app/pages/components/constructor-form/components/constructor-field-iframe/constructor-field-iframe.component.d.ts +24 -27
  41. package/lib/app/pages/components/constructor-form/components/constructor-field-iframe/iframe-validator-directive.directive.d.ts +16 -0
  42. package/lib/app/pages/components/constructor-form/components/constructor-field-select/constructor-field-select.component.d.ts +6 -10
  43. package/lib/app/pages/components/constructor-form/components/constructor-field-text/constructor-field-text.component.d.ts +3 -3
  44. package/lib/app/pages/components/constructor-form/components/index.d.ts +2 -0
  45. package/lib/app/pages/components/constructor-form/components/method-amount-hint/method-amount-hint.component.d.ts +3 -0
  46. package/lib/app/pages/components/constructor-form/components/ps-select/ps-select.component.d.ts +4 -6
  47. package/lib/app/pages/components/constructor-form/constructor-form.component.d.ts +6 -9
  48. package/lib/app/pages/components/constructor-form/models/index.d.ts +0 -1
  49. package/lib/app/pages/components/constructor-form/models/payment-field-options.d.ts +1 -1
  50. package/lib/app/pages/components/constructor-form/models/payment-field.d.ts +1 -1
  51. package/lib/app/pages/components/constructor-form/services/constructor-form.service.d.ts +8 -5
  52. package/lib/app/pages/components/terminal-layout/terminal-layout.component.d.ts +1 -0
  53. package/lib/app/pages/directives/fee-template.directive.d.ts +7 -0
  54. package/lib/app/pages/directives/index.d.ts +1 -0
  55. package/lib/app/services/api-errors.service.d.ts +4 -10
  56. package/lib/app/services/csrf.resolver.d.ts +1 -4
  57. package/lib/app/services/local-storage.d.ts +24 -0
  58. package/lib/app/services/script-loader.d.ts +1 -2
  59. package/lib/app/services/session.data-source.d.ts +1 -1
  60. package/lib/app/services/translation/translate-lang-storage.service.d.ts +22 -23
  61. package/lib/app/shared/components/terminal-lang-switcher/terminal-lang-switcher.component.d.ts +4 -34
  62. package/lib/app/shared/components/terminal-layout-tpl/terminal-layout-tpl.component.d.ts +1 -2
  63. package/lib/app/shared/components/trm-select/trm-select.component.d.ts +1 -2
  64. package/lib/app/terminal-tpl.component.d.ts +2 -1
  65. package/lib/app/terminal.module.d.ts +26 -4
  66. package/package.json +1 -1
  67. package/esm2022/lib/app/pages/components/constructor-form/models/constants.mjs +0 -4
  68. package/lib/app/pages/components/constructor-form/models/constants.d.ts +0 -3
@@ -1,141 +1,123 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from '@angular/core';
2
- import { I18N_KEY } from './../../../../../i18n';
3
- import { TranslateService } from "@ngx-translate/core";
4
- import { takeUntil } from "rxjs/operators";
5
- import { Subject } from "rxjs";
6
- import { SessionDataSource } from "../../../../../services/session.data-source";
7
- import { ScriptLoader } from '../../../../../services';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, forwardRef, inject, Injector, Input, } from '@angular/core';
2
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
+ import { NG_VALUE_ACCESSOR, NgControl, } from '@angular/forms';
4
+ import { I18N_KEY } from '../../../../../i18n';
5
+ import { TranslateService } from '@ngx-translate/core';
8
6
  import { TranslateByKeyPipe } from '../../../../../shared/pipes/translate-by-key.pipe';
7
+ import { CardSdkService } from './card-sdk.service';
8
+ import { IframeValidatorDirectiveDirective } from './iframe-validator-directive.directive';
9
+ import { insertRemoveTrigger } from '../../../../../helpers';
9
10
  import { GmSkeletonComponent } from '@gmmoney/gm-ui-kit';
10
11
  import * as i0 from "@angular/core";
12
+ import * as i1 from "./iframe-validator-directive.directive";
13
+ const ID_CDE_CONTAINER = 'cde-container';
11
14
  export class ConstructorFieldIframeComponent {
12
- get finished() {
13
- return this._finished;
14
- }
15
15
  constructor() {
16
- this.translateSrv = inject(TranslateService);
17
- this.sessionSrv = inject(SessionDataSource);
18
- this.cd = inject(ChangeDetectorRef);
19
- this.scriptLoaderSrv = inject(ScriptLoader);
20
- this.ID_CDE_CONTAINER = 'cde-container';
21
- this.unSubscriber = new Subject();
22
- this.loading = true;
16
+ this._translateSrv = inject(TranslateService);
17
+ this._cd = inject(ChangeDetectorRef);
18
+ this._injector = inject(Injector);
19
+ this._destroyRef = inject(DestroyRef);
20
+ this.viewReady = false;
21
+ this.validator = inject(IframeValidatorDirectiveDirective);
22
+ this.cardSdkSrv = inject(CardSdkService);
23
+ this._loading = true;
23
24
  this.I18N_KEY = I18N_KEY;
24
- this.error = new EventEmitter();
25
- this.paid = new EventEmitter();
26
- this.ready = new EventEmitter();
27
- this._iframeOnLoadHandler = () => {
28
- this.loading = false;
29
- this.cd.detectChanges();
30
- };
31
- this._ready = false;
32
- this._finished = false;
33
- this.submitted = false;
25
+ this.ID_CDE_CONTAINER = ID_CDE_CONTAINER;
26
+ }
27
+ registerOnTouched(fn) { }
28
+ registerOnChange(fn) { }
29
+ writeValue() { }
30
+ get loading() {
31
+ return this._loading;
34
32
  }
35
33
  ngAfterViewInit() {
36
- this.scriptLoaderSrv
37
- .fetchScript('cde_sdk')
38
- .then(() => this._init(), () => this._onError());
34
+ this._control = this._injector.get(NgControl).control;
35
+ this.cardSdkSrv
36
+ .createCardTerminalSdk$(this._translateSrv.currentLang, this.ID_CDE_CONTAINER, this.tabIndex)
37
+ .pipe(takeUntilDestroyed(this._destroyRef))
38
+ .subscribe({
39
+ next: (sdk) => {
40
+ this._sdk = sdk;
41
+ this._destroyRef.onDestroy(() => this._sdk?.unsubscribe());
42
+ this.validator.registerSDK(sdk);
43
+ this._init();
44
+ },
45
+ error: () => {
46
+ this.validator.registerSDK();
47
+ this._updateValueAndValidity();
48
+ },
49
+ });
39
50
  }
40
- get lang() {
41
- return this.translateSrv.currentLang;
51
+ _updateValueAndValidity() {
52
+ this.cardSdkSrv.markAsReady();
53
+ this._control?.updateValueAndValidity({ onlySelf: true });
54
+ this._cd.detectChanges();
55
+ this.refreshHeight();
42
56
  }
43
- get iframe() {
44
- return this._sdk?.iframe;
57
+ refreshHeight() {
58
+ setTimeout(() => {
59
+ this._sdk?.refreshHeight();
60
+ this.viewReady = true;
61
+ this._cd.detectChanges();
62
+ }, 100);
45
63
  }
46
64
  _init() {
47
- this._sdk = this.sessionSrv.createCardTerminalSdk(this.lang, this.ID_CDE_CONTAINER, this.tabIndex);
48
- if (!this.iframe) {
49
- this._onError();
50
- return;
51
- }
52
- this.iframe
53
- .addEventListener('load', this._iframeOnLoadHandler);
54
- this._sdk
55
- .onError((code) => this._onError(code));
56
65
  this._sdk.onInputPending(() => {
57
- setTimeout(() => {
58
- this._sdk.refreshHeight();
59
- });
60
- this._ready = false;
66
+ this._loading = false;
67
+ this._updateValueAndValidity();
61
68
  });
62
- this._sdk.onInputReady(() => this._ready = true);
63
- this._sdk
64
- .onInputSubmitted(() => {
65
- this._finished = true;
66
- if (this.submitted) {
67
- this.status = I18N_KEY.CDE_CARD_PAID;
68
- this.paid.emit();
69
- }
70
- else {
71
- this.status = I18N_KEY.CDE_CARD_ERROR_ALREADY_PAID;
72
- }
73
- this.cd.detectChanges();
69
+ this._sdk.onInputReady(() => {
70
+ this._updateValueAndValidity();
74
71
  });
75
- this._sdk
76
- .onTimeout(() => this.error.emit(I18N_KEY.CDE_CARD_ERROR_504));
77
- this.translateSrv
78
- .onLangChange
79
- .pipe(takeUntil(this.unSubscriber))
80
- .subscribe((options) => {
81
- if (!options.lang) {
82
- return;
83
- }
84
- this._sdk.useLang(options.lang);
72
+ this._sdk.onInputSubmitted(() => {
73
+ this._loading = false;
74
+ this.cardSdkSrv.markAsSubmitted();
75
+ this.status = I18N_KEY.CDE_CARD_ERROR_ALREADY_PAID;
76
+ this._updateValueAndValidity();
85
77
  });
86
- }
87
- submit() {
88
- this.submitted = true;
89
- const subscriptions = [];
90
- return new Promise((resolve) => {
91
- if (!this._ready) {
92
- resolve(false);
93
- }
94
- else {
95
- subscriptions.push(this._sdk.onInputPending(() => resolve(false)));
96
- subscriptions.push(this._sdk.onError(() => resolve(false)));
97
- subscriptions.push(this._sdk.onInputSubmitted(() => resolve(true)));
98
- }
99
- this._sdk.submit();
100
- })
101
- .then((result) => {
102
- subscriptions.map(s => s.unsubscribe());
103
- return result;
78
+ this._sdk.onTimeout(() => {
79
+ this._updateValueAndValidity();
80
+ });
81
+ this._sdk.onError(() => {
82
+ this._loading = false;
83
+ this._updateValueAndValidity();
84
+ });
85
+ this._translateSrv.onLangChange
86
+ .pipe(takeUntilDestroyed(this._destroyRef))
87
+ .subscribe({
88
+ next: (options) => {
89
+ if (!options.lang) {
90
+ return;
91
+ }
92
+ this._sdk.useLang(options.lang);
93
+ },
104
94
  });
105
- }
106
- _onError(code) {
107
- let codeError = I18N_KEY.ERROR_OCCUR;
108
- if (code === 501) {
109
- codeError = I18N_KEY.CDE_CARD_ERROR_501;
110
- }
111
- else if (code === 500) {
112
- codeError = I18N_KEY.CDE_CARD_ERROR_500;
113
- }
114
- else if (code === 504) {
115
- codeError = I18N_KEY.CDE_CARD_ERROR_504;
116
- }
117
- this.loading = false;
118
- this.error.emit(codeError);
119
- }
120
- ngOnDestroy() {
121
- this.iframe?.removeEventListener('load', this._iframeOnLoadHandler);
122
- this.unSubscriber.next();
123
- this.unSubscriber.unsubscribe();
124
- this._sdk?.unsubscribe();
125
95
  }
126
96
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ConstructorFieldIframeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
127
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ConstructorFieldIframeComponent, isStandalone: true, selector: "app-constructor-field-iframe", inputs: { tabIndex: "tabIndex" }, outputs: { error: "error", paid: "paid", ready: "ready" }, ngImport: i0, template: "@if (!status) {\r\n <div [id]=\"ID_CDE_CONTAINER\"\r\n [hidden]=\"loading\"\r\n ></div>\r\n} @else {\r\n <p class=\"iframe-warning text--warn\"> {{ status | trans}}</p>\r\n}\r\n\r\n@if (loading) {\r\n <div class=\"trm-skeleton-fields\">\r\n @for (i of [1,2]; track i) {\r\n <div class=\"trm-skeleton-field\">\r\n <gm-skeleton [count]=\"1\" [shape]=\"'rect-md'\" [size]=\"18\"></gm-skeleton>\r\n <gm-skeleton [count]=\"1\" [size]=\"50\"></gm-skeleton>\r\n </div>\r\n }\r\n </div>\r\n}\r\n", styles: [".iframe-warning{font-weight:400;font-size:14px;line-height:22px;color:var(--color-base-350);margin-top:8px}\n"], dependencies: [{ kind: "pipe", type: TranslateByKeyPipe, name: "trans" }, { kind: "component", type: GmSkeletonComponent, selector: "gm-skeleton", inputs: ["shape", "orientation", "count", "size", "gap"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ConstructorFieldIframeComponent, isStandalone: true, selector: "app-constructor-field-iframe", inputs: { tabIndex: "tabIndex" }, providers: [
98
+ {
99
+ provide: NG_VALUE_ACCESSOR,
100
+ useExisting: forwardRef(() => ConstructorFieldIframeComponent),
101
+ multi: true,
102
+ },
103
+ CardSdkService,
104
+ ], hostDirectives: [{ directive: i1.IframeValidatorDirectiveDirective }], ngImport: i0, template: "@if (!status) {\r\n <div\r\n class=\"iframe-container\"\r\n [id]=\"ID_CDE_CONTAINER\"\r\n [hidden]=\"loading\"\r\n [class.iframe-container--ready]=\"viewReady\"\r\n ></div>\r\n} @else if (!loading) {\r\n <p class=\"iframe-warning text--warn\">{{ status | trans }}</p>\r\n}\r\n\r\n@if (loading) {\r\n <div class=\"trm-skeleton-fields\">\r\n @for (i of [1,2]; track i) {\r\n <div class=\"trm-skeleton-field\">\r\n <gm-skeleton [count]=\"1\" [shape]=\"'rect-md'\" [size]=\"18\"></gm-skeleton>\r\n <gm-skeleton [count]=\"1\" [size]=\"50\"></gm-skeleton>\r\n </div>\r\n }\r\n </div>\r\n}\r\n", styles: [":host{position:relative}.iframe-container{position:absolute;width:100%;visibility:hidden}.iframe-container--ready{position:relative;visibility:visible}.iframe-warning{font-weight:400;font-size:14px;line-height:22px;color:var(--color-base-350);margin-top:8px}\n"], dependencies: [{ kind: "pipe", type: TranslateByKeyPipe, name: "trans" }, { kind: "component", type: GmSkeletonComponent, selector: "gm-skeleton", inputs: ["shape", "orientation", "count", "size", "gap"] }], animations: [insertRemoveTrigger], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
128
105
  }
129
106
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ConstructorFieldIframeComponent, decorators: [{
130
107
  type: Component,
131
- args: [{ selector: 'app-constructor-field-iframe', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [TranslateByKeyPipe, GmSkeletonComponent], template: "@if (!status) {\r\n <div [id]=\"ID_CDE_CONTAINER\"\r\n [hidden]=\"loading\"\r\n ></div>\r\n} @else {\r\n <p class=\"iframe-warning text--warn\"> {{ status | trans}}</p>\r\n}\r\n\r\n@if (loading) {\r\n <div class=\"trm-skeleton-fields\">\r\n @for (i of [1,2]; track i) {\r\n <div class=\"trm-skeleton-field\">\r\n <gm-skeleton [count]=\"1\" [shape]=\"'rect-md'\" [size]=\"18\"></gm-skeleton>\r\n <gm-skeleton [count]=\"1\" [size]=\"50\"></gm-skeleton>\r\n </div>\r\n }\r\n </div>\r\n}\r\n", styles: [".iframe-warning{font-weight:400;font-size:14px;line-height:22px;color:var(--color-base-350);margin-top:8px}\n"] }]
132
- }], ctorParameters: () => [], propDecorators: { error: [{
133
- type: Output
134
- }], paid: [{
135
- type: Output
136
- }], ready: [{
137
- type: Output
138
- }], tabIndex: [{
108
+ args: [{ selector: 'app-constructor-field-iframe', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, animations: [insertRemoveTrigger], providers: [
109
+ {
110
+ provide: NG_VALUE_ACCESSOR,
111
+ useExisting: forwardRef(() => ConstructorFieldIframeComponent),
112
+ multi: true,
113
+ },
114
+ CardSdkService,
115
+ ], imports: [TranslateByKeyPipe, GmSkeletonComponent], hostDirectives: [
116
+ {
117
+ directive: IframeValidatorDirectiveDirective,
118
+ },
119
+ ], template: "@if (!status) {\r\n <div\r\n class=\"iframe-container\"\r\n [id]=\"ID_CDE_CONTAINER\"\r\n [hidden]=\"loading\"\r\n [class.iframe-container--ready]=\"viewReady\"\r\n ></div>\r\n} @else if (!loading) {\r\n <p class=\"iframe-warning text--warn\">{{ status | trans }}</p>\r\n}\r\n\r\n@if (loading) {\r\n <div class=\"trm-skeleton-fields\">\r\n @for (i of [1,2]; track i) {\r\n <div class=\"trm-skeleton-field\">\r\n <gm-skeleton [count]=\"1\" [shape]=\"'rect-md'\" [size]=\"18\"></gm-skeleton>\r\n <gm-skeleton [count]=\"1\" [size]=\"50\"></gm-skeleton>\r\n </div>\r\n }\r\n </div>\r\n}\r\n", styles: [":host{position:relative}.iframe-container{position:absolute;width:100%;visibility:hidden}.iframe-container--ready{position:relative;visibility:visible}.iframe-warning{font-weight:400;font-size:14px;line-height:22px;color:var(--color-base-350);margin-top:8px}\n"] }]
120
+ }], propDecorators: { tabIndex: [{
139
121
  type: Input
140
122
  }] } });
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItZmllbGQtaWZyYW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlcm1pbmFsLXRlbXBsYXRlL3NyYy9saWIvYXBwL3BhZ2VzL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZm9ybS9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZS9jb25zdHJ1Y3Rvci1maWVsZC1pZnJhbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVybWluYWwtdGVtcGxhdGUvc3JjL2xpYi9hcHAvcGFnZXMvY29tcG9uZW50cy9jb25zdHJ1Y3Rvci1mb3JtL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtaWZyYW1lL2NvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxt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QUM7SUFDL0IsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQWpJUSwrQkFBK0I7a0dBQS9CLCtCQUErQixxTEM5QjVDLCtnQkFrQkEsa0tEVVksa0JBQWtCLDhDQUFFLG1CQUFtQjs7MkZBRXRDLCtCQUErQjtrQkFSM0MsU0FBUzsrQkFDSSw4QkFBOEIsbUJBR3ZCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNULENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUM7d0RBY3RDLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNFLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJMThOX0tFWSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vLi4vaTE4bic7XHJcbmltcG9ydCB7IExhbmdDaGFuZ2VFdmVudCwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgU2Vzc2lvbkRhdGFTb3VyY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvc2Vzc2lvbi5kYXRhLXNvdXJjZVwiO1xyXG5pbXBvcnQgeyBDZGVUZXJtaW5hbFNkayB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFNjcmlwdExvYWRlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZUJ5S2V5UGlwZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9waXBlcy90cmFuc2xhdGUtYnkta2V5LnBpcGUnO1xyXG5pbXBvcnQgeyBHbVNrZWxldG9uQ29tcG9uZW50IH0gZnJvbSAnQGdtbW9uZXkvZ20tdWkta2l0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtY29uc3RydWN0b3ItZmllbGQtaWZyYW1lJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25zdHJ1Y3Rvci1maWVsZC1pZnJhbWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uc3RydWN0b3ItZmllbGQtaWZyYW1lLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1RyYW5zbGF0ZUJ5S2V5UGlwZSwgR21Ta2VsZXRvbkNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnN0cnVjdG9yRmllbGRJZnJhbWVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTcnYgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHNlc3Npb25TcnYgPSBpbmplY3QoU2Vzc2lvbkRhdGFTb3VyY2UpO1xyXG4gICAgcHJpdmF0ZSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICBwcml2YXRlIHNjcmlwdExvYWRlclNydiA9IGluamVjdChTY3JpcHRMb2FkZXIpO1xyXG5cclxuICAgIHJlYWRvbmx5IElEX0NERV9DT05UQUlORVIgPSAnY2RlLWNvbnRhaW5lcic7XHJcbiAgICBwcml2YXRlIF9zZGs6IENkZVRlcm1pbmFsU2RrO1xyXG4gICAgcHJpdmF0ZSB1blN1YnNjcmliZXIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgbG9hZGluZyA9IHRydWU7XHJcbiAgICBzdGF0dXM6IEkxOE5fS0VZO1xyXG4gICAgSTE4Tl9LRVkgPSBJMThOX0tFWTtcclxuICAgIEBPdXRwdXQoKSBlcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8STE4Tl9LRVk+KCk7XHJcbiAgICBAT3V0cHV0KCkgcGFpZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIEBPdXRwdXQoKSByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICAgIEBJbnB1dCgpIHRhYkluZGV4O1xyXG4gICAgcHJpdmF0ZSBfaWZyYW1lT25Mb2FkSGFuZGxlcjogKCkgPT4gdm9pZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3JlYWR5ID0gZmFsc2U7XHJcblxyXG4gICAgcHJpdmF0ZSBfZmluaXNoZWQgPSBmYWxzZTtcclxuICAgIGdldCBmaW5pc2hlZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZmluaXNoZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICB0aGlzLnNjcmlwdExvYWRlclNydlxyXG4gICAgICAgIC5mZXRjaFNjcmlwdCgnY2RlX3NkaycpXHJcbiAgICAgICAgLnRoZW4oXHJcbiAgICAgICAgICAoKSA9PiB0aGlzLl9pbml0KCksXHJcbiAgICAgICAgICAoKSA9PiB0aGlzLl9vbkVycm9yKClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsYW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNydi5jdXJyZW50TGFuZztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldCBpZnJhbWUoKTogSFRNTElGcmFtZUVsZW1lbnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZGs/LmlmcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9pbml0KCkge1xyXG4gICAgICAgIHRoaXMuX3NkayA9IHRoaXMuc2Vzc2lvblNydi5jcmVhdGVDYXJkVGVybWluYWxTZGsodGhpcy5sYW5nLCB0aGlzLklEX0NERV9DT05UQUlORVIsIHRoaXMudGFiSW5kZXgpO1xyXG4gICAgICAgIGlmICghdGhpcy5pZnJhbWUpIHtcclxuICAgICAgICAgIHRoaXMuX29uRXJyb3IoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZnJhbWVcclxuICAgICAgICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzLl9pZnJhbWVPbkxvYWRIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLl9zZGtcclxuICAgICAgICAgICAgLm9uRXJyb3IoKGNvZGUpID0+IHRoaXMuX29uRXJyb3IoY29kZSkpO1xyXG4gICAgICAgIHRoaXMuX3Nkay5vbklucHV0UGVuZGluZygoKSA9PiB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fc2RrLnJlZnJlc2hIZWlnaHQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9zZGsub25JbnB1dFJlYWR5KCgpID0+IHRoaXMuX3JlYWR5ID0gdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fc2RrXHJcbiAgICAgICAgICAgIC5vbklucHV0U3VibWl0dGVkKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmlzaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1pdHRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gSTE4Tl9LRVkuQ0RFX0NBUkRfUEFJRDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaWQuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IEkxOE5fS0VZLkNERV9DQVJEX0VSUk9SX0FMUkVBRFlfUEFJRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLl9zZGtcclxuICAgICAgICAgICAgLm9uVGltZW91dCgoKSA9PiB0aGlzLmVycm9yLmVtaXQoSTE4Tl9LRVkuQ0RFX0NBUkRfRVJST1JfNTA0KSk7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTcnZcclxuICAgICAgICAgICAgLm9uTGFuZ0NoYW5nZVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuU3Vic2NyaWJlcilcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChvcHRpb25zOiBMYW5nQ2hhbmdlRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5sYW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2RrLnVzZUxhbmcob3B0aW9ucy5sYW5nKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJtaXR0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBzdWJtaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnM6IHt1bnN1YnNjcmliZTogKCkgPT4gdm9pZH1bXSA9IFtdO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9yZWFkeSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9zZGsub25JbnB1dFBlbmRpbmcoKCkgPT4gcmVzb2x2ZShmYWxzZSkpKTtcclxuICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX3Nkay5vbkVycm9yKCgpID0+IHJlc29sdmUoZmFsc2UpKSk7XHJcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9zZGsub25JbnB1dFN1Ym1pdHRlZCgoKSA9PiByZXNvbHZlKHRydWUpKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLl9zZGsuc3VibWl0KCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5tYXAocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfb25FcnJvcihjb2RlPzogNTAwIHwgNTAxIHwgNTA0KSB7XHJcbiAgICAgICAgbGV0IGNvZGVFcnJvciA9IEkxOE5fS0VZLkVSUk9SX09DQ1VSO1xyXG4gICAgICAgIGlmIChjb2RlID09PSA1MDEpIHtcclxuICAgICAgICAgIGNvZGVFcnJvciA9IEkxOE5fS0VZLkNERV9DQVJEX0VSUk9SXzUwMTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDUwMCkge1xyXG4gICAgICAgICAgY29kZUVycm9yID0gSTE4Tl9LRVkuQ0RFX0NBUkRfRVJST1JfNTAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gNTA0KSB7XHJcbiAgICAgICAgICBjb2RlRXJyb3IgPSBJMThOX0tFWS5DREVfQ0FSRF9FUlJPUl81MDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZXJyb3IuZW1pdChjb2RlRXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuaWZyYW1lPy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpcy5faWZyYW1lT25Mb2FkSGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy51blN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAgIHRoaXMudW5TdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5fc2RrPy51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsIkBpZiAoIXN0YXR1cykge1xyXG4gIDxkaXYgW2lkXT1cIklEX0NERV9DT05UQUlORVJcIlxyXG4gICAgW2hpZGRlbl09XCJsb2FkaW5nXCJcclxuICA+PC9kaXY+XHJcbn0gQGVsc2Uge1xyXG4gIDxwIGNsYXNzPVwiaWZyYW1lLXdhcm5pbmcgdGV4dC0td2FyblwiPiB7eyBzdGF0dXMgfCB0cmFuc319PC9wPlxyXG59XHJcblxyXG5AaWYgKGxvYWRpbmcpIHtcclxuICA8ZGl2IGNsYXNzPVwidHJtLXNrZWxldG9uLWZpZWxkc1wiPlxyXG4gICAgQGZvciAoaSBvZiBbMSwyXTsgdHJhY2sgaSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJtLXNrZWxldG9uLWZpZWxkXCI+XHJcbiAgICAgICAgPGdtLXNrZWxldG9uIFtjb3VudF09XCIxXCIgW3NoYXBlXT1cIidyZWN0LW1kJ1wiIFtzaXplXT1cIjE4XCI+PC9nbS1za2VsZXRvbj5cclxuICAgICAgICA8Z20tc2tlbGV0b24gW2NvdW50XT1cIjFcIiBbc2l6ZV09XCI1MFwiPjwvZ20tc2tlbGV0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG59XHJcbiJdfQ==
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItZmllbGQtaWZyYW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlcm1pbmFsLXRlbXBsYXRlL3NyYy9saWIvYXBwL3BhZ2VzL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZm9ybS9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZS9jb25zdHJ1Y3Rvci1maWVsZC1pZnJhbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVybWluYWwtdGVtcGxhdGUvc3JjL2xpYi9hcHAvcGFnZXMvY29tcG9uZW50cy9jb25zdHJ1Y3Rvci1mb3JtL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtaWZyYW1lL2NvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQXlDLGlCQUFpQixFQUFFLFNBQVMsR0FBRyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHdD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SUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBMUdVLCtCQUErQjtrR0FBL0IsK0JBQStCLDZHQWYvQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsK0JBQStCLENBQUM7Z0JBQzlELEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRCxjQUFjO1NBQ2YsaUdDdENILDJuQkFxQkEseVREa0JZLGtCQUFrQiw4Q0FBRSxtQkFBbUIsb0dBVHJDLENBQUMsbUJBQW1CLENBQUM7OzJGQWdCdEIsK0JBQStCO2tCQXRCM0MsU0FBUzsrQkFDRSw4QkFBOEIsbUJBR3ZCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxjQUNKLENBQUMsbUJBQW1CLENBQUMsYUFDdEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0NBQWdDLENBQUM7NEJBQzlELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNELGNBQWM7cUJBQ2YsV0FDUSxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLGtCQUNsQzt3QkFDZDs0QkFDRSxTQUFTLEVBQUUsaUNBQWlDO3lCQUM3QztxQkFDRjs4QkFZUSxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBEZXN0cm95UmVmLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgaW5qZWN0LFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJMThOX0tFWSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2kxOG4nO1xyXG5pbXBvcnQgeyBMYW5nQ2hhbmdlRXZlbnQsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL3BpcGVzL3RyYW5zbGF0ZS1ieS1rZXkucGlwZSc7XHJcbmltcG9ydCB7IENhcmRTZGtTZXJ2aWNlIH0gZnJvbSAnLi9jYXJkLXNkay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWZyYW1lVmFsaWRhdG9yRGlyZWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi9pZnJhbWUtdmFsaWRhdG9yLWRpcmVjdGl2ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBpbnNlcnRSZW1vdmVUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaGVscGVycyc7XHJcbmltcG9ydCB7IEdtU2tlbGV0b25Db21wb25lbnQgfSBmcm9tICdAZ21tb25leS9nbS11aS1raXQnO1xyXG5pbXBvcnQgeyBDZGVUZXJtaW5hbFNkayB9IGZyb20gJy4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2NkZS10ZXJtaW5hbC1zZGsnO1xyXG5cclxuY29uc3QgSURfQ0RFX0NPTlRBSU5FUiA9ICdjZGUtY29udGFpbmVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnN0cnVjdG9yLWZpZWxkLWlmcmFtZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29uc3RydWN0b3ItZmllbGQtaWZyYW1lLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBhbmltYXRpb25zOiBbaW5zZXJ0UmVtb3ZlVHJpZ2dlcl0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb25zdHJ1Y3RvckZpZWxkSWZyYW1lQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAgQ2FyZFNka1NlcnZpY2UsXHJcbiAgXSxcclxuICBpbXBvcnRzOiBbVHJhbnNsYXRlQnlLZXlQaXBlLCBHbVNrZWxldG9uQ29tcG9uZW50XSxcclxuICBob3N0RGlyZWN0aXZlczogW1xyXG4gICAge1xyXG4gICAgICBkaXJlY3RpdmU6IElmcmFtZVZhbGlkYXRvckRpcmVjdGl2ZURpcmVjdGl2ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnN0cnVjdG9yRmllbGRJZnJhbWVDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yXHJcbntcclxuICBwcml2YXRlIF90cmFuc2xhdGVTcnY6IFRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIF9jb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuICBwcml2YXRlIF9kZXN0cm95UmVmOiBEZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gIHZpZXdSZWFkeSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSB0YWJJbmRleDogbnVtYmVyO1xyXG5cclxuICBwcml2YXRlIHZhbGlkYXRvcjogSWZyYW1lVmFsaWRhdG9yRGlyZWN0aXZlRGlyZWN0aXZlID0gaW5qZWN0KFxyXG4gICAgSWZyYW1lVmFsaWRhdG9yRGlyZWN0aXZlRGlyZWN0aXZlLFxyXG4gICk7XHJcblxyXG4gIHByaXZhdGUgX3NkazogQ2RlVGVybWluYWxTZGs7XHJcbiAgcHJpdmF0ZSBjYXJkU2RrU3J2OiBDYXJkU2RrU2VydmljZSA9IGluamVjdChDYXJkU2RrU2VydmljZSk7XHJcblxyXG4gIHByaXZhdGUgX2xvYWRpbmcgPSB0cnVlO1xyXG4gIHN0YXR1czogSTE4Tl9LRVk7XHJcbiAgcmVhZG9ubHkgSTE4Tl9LRVkgPSBJMThOX0tFWTtcclxuXHJcbiAgcmVhZG9ubHkgSURfQ0RFX0NPTlRBSU5FUiA9IElEX0NERV9DT05UQUlORVI7XHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge31cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHt9XHJcbiAgd3JpdGVWYWx1ZSgpOiB2b2lkIHt9XHJcblxyXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5nQ29udHJvbCkuY29udHJvbDtcclxuICAgIHRoaXMuY2FyZFNka1NydlxyXG4gICAgICAuY3JlYXRlQ2FyZFRlcm1pbmFsU2RrJChcclxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTcnYuY3VycmVudExhbmcsXHJcbiAgICAgICAgdGhpcy5JRF9DREVfQ09OVEFJTkVSLFxyXG4gICAgICAgIHRoaXMudGFiSW5kZXhcclxuICAgICAgKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChzZGs6IENkZVRlcm1pbmFsU2RrKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9zZGsgPSBzZGs7XHJcbiAgICAgICAgICB0aGlzLl9kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLl9zZGs/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgICAgdGhpcy52YWxpZGF0b3IucmVnaXN0ZXJTREsoc2RrKTtcclxuICAgICAgICAgIHRoaXMuX2luaXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRvci5yZWdpc3RlclNESygpO1xyXG4gICAgICAgICAgdGhpcy5fdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FyZFNka1Nydi5tYXJrQXNSZWFkeSgpO1xyXG4gICAgdGhpcy5fY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5yZWZyZXNoSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3Nkaz8ucmVmcmVzaEhlaWdodCgpO1xyXG4gICAgICB0aGlzLnZpZXdSZWFkeSA9IHRydWU7XHJcbiAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2RrLm9uSW5wdXRQZW5kaW5nKCgpID0+IHtcclxuICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl91cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zZGsub25JbnB1dFJlYWR5KCgpID0+IHtcclxuICAgICAgdGhpcy5fdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc2RrLm9uSW5wdXRTdWJtaXR0ZWQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FyZFNka1Nydi5tYXJrQXNTdWJtaXR0ZWQoKTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBJMThOX0tFWS5DREVfQ0FSRF9FUlJPUl9BTFJFQURZX1BBSUQ7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3Nkay5vblRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl91cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zZGsub25FcnJvcigoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5fdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fdHJhbnNsYXRlU3J2Lm9uTGFuZ0NoYW5nZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChvcHRpb25zOiBMYW5nQ2hhbmdlRXZlbnQpID0+IHtcclxuICAgICAgICAgIGlmICghb3B0aW9ucy5sYW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuX3Nkay51c2VMYW5nKG9wdGlvbnMubGFuZyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoIXN0YXR1cykge1xyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiaWZyYW1lLWNvbnRhaW5lclwiXHJcbiAgICBbaWRdPVwiSURfQ0RFX0NPTlRBSU5FUlwiXHJcbiAgICBbaGlkZGVuXT1cImxvYWRpbmdcIlxyXG4gICAgW2NsYXNzLmlmcmFtZS1jb250YWluZXItLXJlYWR5XT1cInZpZXdSZWFkeVwiXHJcbiAgPjwvZGl2PlxyXG59IEBlbHNlIGlmICghbG9hZGluZykge1xyXG4gIDxwIGNsYXNzPVwiaWZyYW1lLXdhcm5pbmcgdGV4dC0td2FyblwiPnt7IHN0YXR1cyB8IHRyYW5zIH19PC9wPlxyXG59XHJcblxyXG5AaWYgKGxvYWRpbmcpIHtcclxuICA8ZGl2IGNsYXNzPVwidHJtLXNrZWxldG9uLWZpZWxkc1wiPlxyXG4gICAgQGZvciAoaSBvZiBbMSwyXTsgdHJhY2sgaSkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidHJtLXNrZWxldG9uLWZpZWxkXCI+XHJcbiAgICAgICAgPGdtLXNrZWxldG9uIFtjb3VudF09XCIxXCIgW3NoYXBlXT1cIidyZWN0LW1kJ1wiIFtzaXplXT1cIjE4XCI+PC9nbS1za2VsZXRvbj5cclxuICAgICAgICA8Z20tc2tlbGV0b24gW2NvdW50XT1cIjFcIiBbc2l6ZV09XCI1MFwiPjwvZ20tc2tlbGV0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIDwvZGl2PlxyXG59XHJcbiJdfQ==
@@ -0,0 +1,88 @@
1
+ import { Directive, forwardRef, inject } from '@angular/core';
2
+ import { NG_ASYNC_VALIDATORS, } from '@angular/forms';
3
+ import { I18N_KEY } from './../../../../../i18n/i18n-key.enum';
4
+ import { of, Subject } from 'rxjs';
5
+ import { CardSdkService } from './card-sdk.service';
6
+ import * as i0 from "@angular/core";
7
+ export class IframeValidatorDirectiveDirective {
8
+ constructor() {
9
+ this.cardSdkSrv = inject(CardSdkService);
10
+ this.submitting$ = new Subject();
11
+ this._validationSdkError = false;
12
+ }
13
+ registerSDK(sdk) {
14
+ if (!sdk) {
15
+ this._fatalError = I18N_KEY.ERROR_OCCUR_SDK;
16
+ }
17
+ else {
18
+ this._sdk = sdk;
19
+ this.handleSubmitting();
20
+ }
21
+ }
22
+ handleSubmitting() {
23
+ this._sdk.onInputPending(() => {
24
+ this._validationSdkError = true;
25
+ });
26
+ this._sdk.onError((code) => {
27
+ this._validationSdkError = false;
28
+ let codeError = I18N_KEY.ERROR_OCCUR;
29
+ if (code === 501) {
30
+ codeError = I18N_KEY.CDE_CARD_ERROR_501;
31
+ }
32
+ else if (code === 500) {
33
+ codeError = I18N_KEY.CDE_CARD_ERROR_500;
34
+ }
35
+ else if (code === 504) {
36
+ codeError = I18N_KEY.CDE_CARD_ERROR_504;
37
+ }
38
+ this._fatalError = codeError;
39
+ });
40
+ this._sdk.onInputReady(() => {
41
+ this._validationSdkError = false;
42
+ this.submitting$.next(null);
43
+ });
44
+ this._sdk.onInputSubmitted(() => {
45
+ this._validationSdkError = false;
46
+ this.submitting$.next(null);
47
+ });
48
+ this._sdk.onTimeout(() => {
49
+ this._validationSdkError = false;
50
+ this._fatalError = I18N_KEY.CDE_CARD_ERROR_504;
51
+ });
52
+ }
53
+ validate(control) {
54
+ if (this._fatalError) {
55
+ return of({ cde_error: this._fatalError });
56
+ }
57
+ if (this._validationSdkError) {
58
+ return of({ cde_validation_error: true });
59
+ }
60
+ if (this.cardSdkSrv.pending) {
61
+ return this.submitting$.asObservable();
62
+ }
63
+ return of(null);
64
+ }
65
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: IframeValidatorDirectiveDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
66
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: IframeValidatorDirectiveDirective, isStandalone: true, selector: "[appIframeValidatorDirective]", providers: [
67
+ {
68
+ provide: NG_ASYNC_VALIDATORS,
69
+ useExisting: forwardRef(() => IframeValidatorDirectiveDirective),
70
+ multi: true,
71
+ },
72
+ ], ngImport: i0 }); }
73
+ }
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: IframeValidatorDirectiveDirective, decorators: [{
75
+ type: Directive,
76
+ args: [{
77
+ selector: '[appIframeValidatorDirective]',
78
+ standalone: true,
79
+ providers: [
80
+ {
81
+ provide: NG_ASYNC_VALIDATORS,
82
+ useExisting: forwardRef(() => IframeValidatorDirectiveDirective),
83
+ multi: true,
84
+ },
85
+ ],
86
+ }]
87
+ }] });
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZyYW1lLXZhbGlkYXRvci1kaXJlY3RpdmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVybWluYWwtdGVtcGxhdGUvc3JjL2xpYi9hcHAvcGFnZXMvY29tcG9uZW50cy9jb25zdHJ1Y3Rvci1mb3JtL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtaWZyYW1lL2lmcmFtZS12YWxpZGF0b3ItZGlyZWN0aXZlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUdMLG1CQUFtQixHQUVwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBY3BELE1BQU0sT0FBTyxpQ0FBaUM7SUFYOUM7UUFZVSxlQUFVLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUdwRCxnQkFBVyxHQUFxQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRzlELHdCQUFtQixHQUFHLEtBQUssQ0FBQztLQXVEckM7SUFyREMsV0FBVyxDQUFDLEdBQW9CO1FBQzlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUM5QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdC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b3J0IHsgRGlyZWN0aXZlLCBmb3J3YXJkUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgQXN5bmNWYWxpZGF0b3IsXHJcbiAgTkdfQVNZTkNfVkFMSURBVE9SUyxcclxuICBWYWxpZGF0aW9uRXJyb3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSTE4Tl9LRVkgfSBmcm9tICcuLy4uLy4uLy4uLy4uLy4uL2kxOG4vaTE4bi1rZXkuZW51bSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENhcmRTZGtTZXJ2aWNlIH0gZnJvbSAnLi9jYXJkLXNkay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2RlVGVybWluYWxTZGsgfSBmcm9tICcuLy4uLy4uLy4uLy4uLy4uL21vZGVscy9jZGUtdGVybWluYWwtc2RrJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcElmcmFtZVZhbGlkYXRvckRpcmVjdGl2ZV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX0FTWU5DX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElmcmFtZVZhbGlkYXRvckRpcmVjdGl2ZURpcmVjdGl2ZSksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSWZyYW1lVmFsaWRhdG9yRGlyZWN0aXZlRGlyZWN0aXZlIGltcGxlbWVudHMgQXN5bmNWYWxpZGF0b3Ige1xyXG4gIHByaXZhdGUgY2FyZFNka1NydjogQ2FyZFNka1NlcnZpY2UgPSBpbmplY3QoQ2FyZFNka1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgX3NkazogQ2RlVGVybWluYWxTZGs7XHJcblxyXG4gIHByaXZhdGUgc3VibWl0dGluZyQ6IFN1YmplY3Q8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZmF0YWxFcnJvcjogSTE4Tl9LRVk7XHJcbiAgcHJpdmF0ZSBfdmFsaWRhdGlvblNka0Vycm9yID0gZmFsc2U7XHJcblxyXG4gIHJlZ2lzdGVyU0RLKHNkaz86IENkZVRlcm1pbmFsU2RrKTogdm9pZCB7XHJcbiAgICBpZiAoIXNkaykge1xyXG4gICAgICB0aGlzLl9mYXRhbEVycm9yID0gSTE4Tl9LRVkuRVJST1JfT0NDVVJfU0RLO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2RrID0gc2RrO1xyXG4gICAgICB0aGlzLmhhbmRsZVN1Ym1pdHRpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0dGluZygpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Nkay5vbklucHV0UGVuZGluZygoKSA9PiB7XHJcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb25TZGtFcnJvciA9IHRydWU7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3Nkay5vbkVycm9yKChjb2RlKSA9PiB7XHJcbiAgICAgIHRoaXMuX3ZhbGlkYXRpb25TZGtFcnJvciA9IGZhbHNlO1xyXG4gICAgICBsZXQgY29kZUVycm9yID0gSTE4Tl9LRVkuRVJST1JfT0NDVVI7XHJcbiAgICAgIGlmIChjb2RlID09PSA1MDEpIHtcclxuICAgICAgICBjb2RlRXJyb3IgPSBJMThOX0tFWS5DREVfQ0FSRF9FUlJPUl81MDE7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gNTAwKSB7XHJcbiAgICAgICAgY29kZUVycm9yID0gSTE4Tl9LRVkuQ0RFX0NBUkRfRVJST1JfNTAwO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDUwNCkge1xyXG4gICAgICAgIGNvZGVFcnJvciA9IEkxOE5fS0VZLkNERV9DQVJEX0VSUk9SXzUwNDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9mYXRhbEVycm9yID0gY29kZUVycm9yO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zZGsub25JbnB1dFJlYWR5KCgpID0+IHtcclxuICAgICAgdGhpcy5fdmFsaWRhdGlvblNka0Vycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3VibWl0dGluZyQubmV4dChudWxsKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc2RrLm9uSW5wdXRTdWJtaXR0ZWQoKCkgPT4ge1xyXG4gICAgICB0aGlzLl92YWxpZGF0aW9uU2RrRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdWJtaXR0aW5nJC5uZXh0KG51bGwpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zZGsub25UaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5fdmFsaWRhdGlvblNka0Vycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX2ZhdGFsRXJyb3IgPSBJMThOX0tFWS5DREVfQ0FSRF9FUlJPUl81MDQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKFxyXG4gICAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxyXG4gICk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4ge1xyXG4gICAgaWYgKHRoaXMuX2ZhdGFsRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG9mKHsgY2RlX2Vycm9yOiB0aGlzLl9mYXRhbEVycm9yIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3ZhbGlkYXRpb25TZGtFcnJvcikge1xyXG4gICAgICByZXR1cm4gb2YoeyBjZGVfdmFsaWRhdGlvbl9lcnJvcjogdHJ1ZSB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNhcmRTZGtTcnYucGVuZGluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXR0aW5nJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,6 +1,5 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, inject, Injector, Input } from '@angular/core';
2
- import { FormControlName, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
3
- import { Subject } from 'rxjs';
2
+ import { FormsModule, NG_VALUE_ACCESSOR, NgControl, ReactiveFormsModule } from '@angular/forms';
4
3
  import { insertRemoveTrigger } from './../../../../../helpers/insertRemoveTrigger';
5
4
  import { I18N_KEY } from './../../../../../i18n';
6
5
  import { TrmSelectComponent } from '../../../../../shared/components/trm-select/trm-select.component';
@@ -8,6 +7,15 @@ import { TranslateByKeyPipe } from '../../../../../shared/pipes/translate-by-key
8
7
  import * as i0 from "@angular/core";
9
8
  import * as i1 from "@angular/forms";
10
9
  export class ConstructorFieldSelectComponent {
10
+ constructor() {
11
+ this.cd = inject(ChangeDetectorRef);
12
+ this.injector = inject(Injector);
13
+ this.I18N_KEY = I18N_KEY;
14
+ this.onChange = (_value) => {
15
+ };
16
+ this.onTouch = () => {
17
+ };
18
+ }
11
19
  get data() {
12
20
  if (!this.items) {
13
21
  return [];
@@ -24,17 +32,6 @@ export class ConstructorFieldSelectComponent {
24
32
  }
25
33
  });
26
34
  }
27
- constructor() {
28
- this.cd = inject(ChangeDetectorRef);
29
- this.injector = inject(Injector);
30
- this.unsub = new Subject();
31
- this.I18N_KEY = I18N_KEY;
32
- this.onChange = (value) => {
33
- };
34
- this.onTouch = () => {
35
- };
36
- this.cd.detach();
37
- }
38
35
  registerOnChange(fn) {
39
36
  this.onChange = fn;
40
37
  }
@@ -52,27 +49,8 @@ export class ConstructorFieldSelectComponent {
52
49
  return this.control?.getError('error');
53
50
  }
54
51
  ngAfterViewInit() {
55
- this.control = this.injector.get(FormControlName).control;
56
- this.cd.reattach();
52
+ this.control = this.injector.get(NgControl).control;
57
53
  this.cd.detectChanges();
58
- this.ngDoCheck();
59
- }
60
- ngDoCheck() {
61
- if (!this.control) {
62
- return;
63
- }
64
- if (this.control.dirty) {
65
- this.control.markAsDirty();
66
- this.cd.detectChanges();
67
- }
68
- if (this.control.touched) {
69
- this.control.markAsTouched();
70
- this.cd.detectChanges();
71
- }
72
- }
73
- ngOnDestroy() {
74
- this.unsub.next();
75
- this.unsub.unsubscribe();
76
54
  }
77
55
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ConstructorFieldSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
78
56
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: ConstructorFieldSelectComponent, isStandalone: true, selector: "app-constructor-field-select", inputs: { config: "config", items: "items", tabIndex: "tabIndex" }, providers: [
@@ -81,7 +59,7 @@ export class ConstructorFieldSelectComponent {
81
59
  useExisting: forwardRef(() => ConstructorFieldSelectComponent),
82
60
  multi: true
83
61
  }
84
- ], ngImport: i0, template: "<app-trm-select [data]=\"data\"\r\n [placeholder]=\"config.placeholder | trans\"\r\n [label]=\"config.label | trans\"\r\n [name]=\"config.name\"\r\n (search)=\"search($event)\"\r\n (open)=\"onTouch()\"\r\n [formControl]=\"control\"\r\n [tabIndex] = \"tabIndex\"\r\n class=\"c-field-select trm-form-field\"\r\n></app-trm-select>\r\n@if (control.hasError('required') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ I18N_KEY.VALIDATION_REQUIRED | trans }}\r\n </div>\r\n}\r\n@if (control.hasError('error') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ apiError | trans }}\r\n </div>\r\n}\r\n\r\n@if (control.hasError('custom_error') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ control.getError('custom_error') | trans }}\r\n </div>\r\n}\r\n", styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "component", type: TrmSelectComponent, selector: "app-trm-select", inputs: ["label", "hasBorder", "data", "tabIndex", "name", "placeholder", "searchable", "hasScrollbar", "nameId", "nameLabel"], outputs: ["open", "search"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: TranslateByKeyPipe, name: "trans" }], animations: [insertRemoveTrigger], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
62
+ ], ngImport: i0, template: "@if (control) {\r\n <app-trm-select [data]=\"data\"\r\n [placeholder]=\"config.placeholder | trans\"\r\n [label]=\"config.label | trans\"\r\n [name]=\"config.name\"\r\n (search)=\"search($event)\"\r\n (open)=\"onTouch()\"\r\n [formControl]=\"control\"\r\n [tabIndex]=\"tabIndex\"\r\n class=\"c-field-select trm-form-field\"\r\n ></app-trm-select>\r\n @if (control.hasError('required') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ I18N_KEY.VALIDATION_REQUIRED | trans }}\r\n </div>\r\n }\r\n @if (control.hasError('error') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ apiError | trans }}\r\n </div>\r\n }\r\n\r\n @if (control.hasError('custom_error') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ control.getError('custom_error') | trans }}\r\n </div>\r\n }\r\n\r\n}\r\n", styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "component", type: TrmSelectComponent, selector: "app-trm-select", inputs: ["label", "hasBorder", "data", "tabIndex", "name", "placeholder", "searchable", "hasScrollbar", "nameId", "nameLabel"], outputs: ["open", "search"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: TranslateByKeyPipe, name: "trans" }], animations: [insertRemoveTrigger], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
85
63
  }
86
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: ConstructorFieldSelectComponent, decorators: [{
87
65
  type: Component,
@@ -91,12 +69,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
91
69
  useExisting: forwardRef(() => ConstructorFieldSelectComponent),
92
70
  multi: true
93
71
  }
94
- ], standalone: true, imports: [TrmSelectComponent, FormsModule, ReactiveFormsModule, TranslateByKeyPipe], template: "<app-trm-select [data]=\"data\"\r\n [placeholder]=\"config.placeholder | trans\"\r\n [label]=\"config.label | trans\"\r\n [name]=\"config.name\"\r\n (search)=\"search($event)\"\r\n (open)=\"onTouch()\"\r\n [formControl]=\"control\"\r\n [tabIndex] = \"tabIndex\"\r\n class=\"c-field-select trm-form-field\"\r\n></app-trm-select>\r\n@if (control.hasError('required') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ I18N_KEY.VALIDATION_REQUIRED | trans }}\r\n </div>\r\n}\r\n@if (control.hasError('error') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ apiError | trans }}\r\n </div>\r\n}\r\n\r\n@if (control.hasError('custom_error') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ control.getError('custom_error') | trans }}\r\n </div>\r\n}\r\n", styles: [":host{display:block;width:100%}\n"] }]
95
- }], ctorParameters: () => [], propDecorators: { config: [{
72
+ ], standalone: true, imports: [TrmSelectComponent, FormsModule, ReactiveFormsModule, TranslateByKeyPipe], template: "@if (control) {\r\n <app-trm-select [data]=\"data\"\r\n [placeholder]=\"config.placeholder | trans\"\r\n [label]=\"config.label | trans\"\r\n [name]=\"config.name\"\r\n (search)=\"search($event)\"\r\n (open)=\"onTouch()\"\r\n [formControl]=\"control\"\r\n [tabIndex]=\"tabIndex\"\r\n class=\"c-field-select trm-form-field\"\r\n ></app-trm-select>\r\n @if (control.hasError('required') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ I18N_KEY.VALIDATION_REQUIRED | trans }}\r\n </div>\r\n }\r\n @if (control.hasError('error') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ apiError | trans }}\r\n </div>\r\n }\r\n\r\n @if (control.hasError('custom_error') && control.touched && control.dirty) {\r\n <div class=\"trm-error\"\r\n @insertRemove\r\n >\r\n {{ control.getError('custom_error') | trans }}\r\n </div>\r\n }\r\n\r\n}\r\n", styles: [":host{display:block;width:100%}\n"] }]
73
+ }], propDecorators: { config: [{
96
74
  type: Input
97
75
  }], items: [{
98
76
  type: Input
99
77
  }], tabIndex: [{
100
78
  type: Input
101
79
  }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItZmllbGQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlcm1pbmFsLXRlbXBsYXRlL3NyYy9saWIvYXBwL3BhZ2VzL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZm9ybS9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZpZWxkLXNlbGVjdC9jb25zdHJ1Y3Rvci1maWVsZC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVybWluYWwtdGVtcGxhdGUvc3JjL2xpYi9hcHAvcGFnZXMvY29tcG9uZW50cy9jb25zdHJ1Y3Rvci1mb3JtL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtc2VsZWN0L2NvbnN0cnVjdG9yLWZpZWxkLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUVOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTCxlQUFlLEVBQ2YsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUV0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBa0J2RixNQUFNLE9BQU8sK0JBQStC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SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QixDQUFDOzhHQXJGUSwrQkFBK0I7a0dBQS9CLCtCQUErQiwrSUFWN0I7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLCtCQUErQixDQUFDO2dCQUM5RCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osMEJDdkNMLDI2QkFnQ0EsMkZEU2Msa0JBQWtCLHVOQUFFLFdBQVcsc0lBQUUsbUJBQW1CLDZNQUFFLGtCQUFrQixnQ0FUdEUsQ0FBQyxtQkFBbUIsQ0FBQzs7MkZBV3hCLCtCQUErQjtrQkFoQjNDLFNBQVM7K0JBQ0ksOEJBQThCLG1CQUd2Qix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLENBQUMsbUJBQW1CLENBQUMsYUFDdEI7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0NBQWdDLENBQUM7NEJBQzlELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKLGNBQ1csSUFBSSxXQUNQLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDO3dEQU8xRSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIERvQ2hlY2ssXHJcbiAgZm9yd2FyZFJlZixcclxuICBpbmplY3QsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBheW1lbnRGaWVsZCwgUGF5bWVudEZpZWxkT3B0aW9uc0l0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQge1xyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIEZvcm1Db250cm9sTmFtZSxcclxuICBGb3Jtc01vZHVsZSxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGluc2VydFJlbW92ZVRyaWdnZXIgfSBmcm9tICcuLy4uLy4uLy4uLy4uLy4uL2hlbHBlcnMvaW5zZXJ0UmVtb3ZlVHJpZ2dlcic7XHJcbmltcG9ydCB7IEkxOE5fS0VZIH0gZnJvbSAnLi8uLi8uLi8uLi8uLi8uLi9pMThuJztcclxuaW1wb3J0IHsgVHJtU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvdHJtLXNlbGVjdC90cm0tc2VsZWN0LmNvbXBvbmVudCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xhdGVCeUtleVBpcGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvcGlwZXMvdHJhbnNsYXRlLWJ5LWtleS5waXBlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdhcHAtY29uc3RydWN0b3ItZmllbGQtc2VsZWN0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25zdHJ1Y3Rvci1maWVsZC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uc3RydWN0b3ItZmllbGQtc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGFuaW1hdGlvbnM6IFtpbnNlcnRSZW1vdmVUcmlnZ2VyXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbnN0cnVjdG9yRmllbGRTZWxlY3RDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1RybVNlbGVjdENvbXBvbmVudCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFRyYW5zbGF0ZUJ5S2V5UGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnN0cnVjdG9yRmllbGRTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIHtcclxuICAgIHByaXZhdGUgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XHJcblxyXG4gICAgcHJpdmF0ZSB1bnN1YjogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBASW5wdXQoKSBjb25maWc6IFBheW1lbnRGaWVsZDtcclxuICAgIEBJbnB1dCgpIGl0ZW1zOiBQYXltZW50RmllbGRPcHRpb25zSXRlbVtdO1xyXG4gICAgQElucHV0KCkgdGFiSW5kZXg6IG51bWJlcjtcclxuICAgIHNlYXJjaFN0cmluZzogc3RyaW5nO1xyXG4gICAgSTE4Tl9LRVkgPSBJMThOX0tFWTtcclxuXHJcbiAgICBvbkNoYW5nZSA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgfTtcclxuICAgIG9uVG91Y2ggPSAoKSA9PiB7XHJcbiAgICB9O1xyXG4gICAgY29udHJvbDtcclxuXHJcbiAgICBnZXQgZGF0YSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChvcHRpb246IFBheW1lbnRGaWVsZE9wdGlvbnNJdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlOiBzdHJpbmcgPSBvcHRpb24ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGl0bGUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJyAnKS5zb21lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHMgPT4gdGhpcy5zZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpLnNvbWUocyA9PiB0cy5pbmNsdWRlcyhzKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmNkLmRldGFjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoKHNlYXJjaFN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyaW5nO1xyXG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYXBpRXJyb3IoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sPy5nZXRFcnJvcignZXJyb3InKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoRm9ybUNvbnRyb2xOYW1lKS5jb250cm9sO1xyXG4gICAgICAgIHRoaXMuY2QucmVhdHRhY2goKTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLm5nRG9DaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nRG9DaGVjaygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZGlydHkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnRvdWNoZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMudW5zdWIubmV4dCgpO1xyXG4gICAgICAgIHRoaXMudW5zdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxufVxyXG4iLCI8YXBwLXRybS1zZWxlY3QgW2RhdGFdPVwiZGF0YVwiXHJcbiAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy5wbGFjZWhvbGRlciB8IHRyYW5zXCJcclxuICBbbGFiZWxdPVwiY29uZmlnLmxhYmVsIHwgdHJhbnNcIlxyXG4gIFtuYW1lXT1cImNvbmZpZy5uYW1lXCJcclxuICAoc2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICAob3Blbik9XCJvblRvdWNoKClcIlxyXG4gIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcclxuICBbdGFiSW5kZXhdID0gXCJ0YWJJbmRleFwiXHJcbiAgY2xhc3M9XCJjLWZpZWxkLXNlbGVjdCB0cm0tZm9ybS1maWVsZFwiXHJcbj48L2FwcC10cm0tc2VsZWN0PlxyXG5AaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZGlydHkpIHtcclxuICA8ZGl2IGNsYXNzPVwidHJtLWVycm9yXCJcclxuICAgIEBpbnNlcnRSZW1vdmVcclxuICAgID5cclxuICAgIHt7IEkxOE5fS0VZLlZBTElEQVRJT05fUkVRVUlSRUQgfCB0cmFucyB9fVxyXG4gIDwvZGl2PlxyXG59XHJcbkBpZiAoY29udHJvbC5oYXNFcnJvcignZXJyb3InKSAmJiBjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5kaXJ0eSkge1xyXG4gIDxkaXYgY2xhc3M9XCJ0cm0tZXJyb3JcIlxyXG4gICAgQGluc2VydFJlbW92ZVxyXG4gICAgPlxyXG4gICAge3sgYXBpRXJyb3IgfCB0cmFucyB9fVxyXG4gIDwvZGl2PlxyXG59XHJcblxyXG5AaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ2N1c3RvbV9lcnJvcicpICYmIGNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmRpcnR5KSB7XHJcbiAgPGRpdiBjbGFzcz1cInRybS1lcnJvclwiXHJcbiAgICBAaW5zZXJ0UmVtb3ZlXHJcbiAgICA+XHJcbiAgICB7eyBjb250cm9sLmdldEVycm9yKCdjdXN0b21fZXJyb3InKSB8IHRyYW5zIH19XHJcbiAgPC9kaXY+XHJcbn1cclxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItZmllbGQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rlcm1pbmFsLXRlbXBsYXRlL3NyYy9saWIvYXBwL3BhZ2VzL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZm9ybS9jb21wb25lbnRzL2NvbnN0cnVjdG9yLWZpZWxkLXNlbGVjdC9jb25zdHJ1Y3Rvci1maWVsZC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGVybWluYWwtdGVtcGxhdGUvc3JjL2xpYi9hcHAvcGFnZXMvY29tcG9uZW50cy9jb25zdHJ1Y3Rvci1mb3JtL2NvbXBvbmVudHMvY29uc3RydWN0b3ItZmllbGQtc2VsZWN0L2NvbnN0cnVjdG9yLWZpZWxkLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFHTCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxtQkFBbUIsRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFFdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbURBQW1ELENBQUM7OztBQWtCdkYsTUFBTSxPQUFPLCtCQUErQjtJQWhCNUM7UUFpQlUsT0FBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIs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QUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgZm9yd2FyZFJlZixcclxuICBpbmplY3QsXHJcbiAgSW5qZWN0b3IsXHJcbiAgSW5wdXRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGF5bWVudEZpZWxkLCBQYXltZW50RmllbGRPcHRpb25zSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIEZvcm1zTW9kdWxlLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIE5nQ29udHJvbCxcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBpbnNlcnRSZW1vdmVUcmlnZ2VyIH0gZnJvbSAnLi8uLi8uLi8uLi8uLi8uLi9oZWxwZXJzL2luc2VydFJlbW92ZVRyaWdnZXInO1xyXG5pbXBvcnQgeyBJMThOX0tFWSB9IGZyb20gJy4vLi4vLi4vLi4vLi4vLi4vaTE4bic7XHJcbmltcG9ydCB7IFRybVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL3RybS1zZWxlY3QvdHJtLXNlbGVjdC5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL3BpcGVzL3RyYW5zbGF0ZS1ieS1rZXkucGlwZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jb25zdHJ1Y3Rvci1maWVsZC1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25zdHJ1Y3Rvci1maWVsZC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbnN0cnVjdG9yLWZpZWxkLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGFuaW1hdGlvbnM6IFtpbnNlcnRSZW1vdmVUcmlnZ2VyXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbnN0cnVjdG9yRmllbGRTZWxlY3RDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbVHJtU2VsZWN0Q29tcG9uZW50LCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVHJhbnNsYXRlQnlLZXlQaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uc3RydWN0b3JGaWVsZFNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcclxuICBwcml2YXRlIGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcclxuICBASW5wdXQoKSBjb25maWc6IFBheW1lbnRGaWVsZDtcclxuICBASW5wdXQoKSBpdGVtczogUGF5bWVudEZpZWxkT3B0aW9uc0l0ZW1bXTtcclxuICBASW5wdXQoKSB0YWJJbmRleDogbnVtYmVyO1xyXG4gIHNlYXJjaFN0cmluZzogc3RyaW5nO1xyXG4gIEkxOE5fS0VZID0gSTE4Tl9LRVk7XHJcblxyXG4gIG9uQ2hhbmdlID0gKF92YWx1ZTogYW55KSA9PiB7XHJcbiAgfTtcclxuICBvblRvdWNoID0gKCkgPT4ge1xyXG4gIH07XHJcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xyXG5cclxuICBnZXQgZGF0YSgpIHtcclxuICAgIGlmICghdGhpcy5pdGVtcykge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xyXG4gICAgICAuZmlsdGVyKChvcHRpb246IFBheW1lbnRGaWVsZE9wdGlvbnNJdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlYXJjaFN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHRpdGxlOiBzdHJpbmcgPSBvcHRpb24ubmFtZTtcclxuICAgICAgICAgIHJldHVybiB0aXRsZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5zcGxpdCgnICcpLnNvbWUoXHJcbiAgICAgICAgICAgICAgdHMgPT4gdGhpcy5zZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpLnNvbWUocyA9PiB0cy5pbmNsdWRlcyhzKSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoKHNlYXJjaFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNlYXJjaFN0cmluZyA9IHNlYXJjaFN0cmluZztcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXBpRXJyb3IoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2w/LmdldEVycm9yKCdlcnJvcicpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sKS5jb250cm9sO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZiAoY29udHJvbCkge1xyXG4gIDxhcHAtdHJtLXNlbGVjdCBbZGF0YV09XCJkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbmZpZy5wbGFjZWhvbGRlciB8IHRyYW5zXCJcclxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbmZpZy5sYWJlbCB8IHRyYW5zXCJcclxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29uZmlnLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKG9wZW4pPVwib25Ub3VjaCgpXCJcclxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImMtZmllbGQtc2VsZWN0IHRybS1mb3JtLWZpZWxkXCJcclxuICA+PC9hcHAtdHJtLXNlbGVjdD5cclxuICBAaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZGlydHkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ0cm0tZXJyb3JcIlxyXG4gICAgICAgICBAaW5zZXJ0UmVtb3ZlXHJcbiAgICA+XHJcbiAgICAgIHt7IEkxOE5fS0VZLlZBTElEQVRJT05fUkVRVUlSRUQgfCB0cmFucyB9fVxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG4gIEBpZiAoY29udHJvbC5oYXNFcnJvcignZXJyb3InKSAmJiBjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5kaXJ0eSkge1xyXG4gICAgPGRpdiBjbGFzcz1cInRybS1lcnJvclwiXHJcbiAgICAgICAgIEBpbnNlcnRSZW1vdmVcclxuICAgID5cclxuICAgICAge3sgYXBpRXJyb3IgfCB0cmFucyB9fVxyXG4gICAgPC9kaXY+XHJcbiAgfVxyXG5cclxuICBAaWYgKGNvbnRyb2wuaGFzRXJyb3IoJ2N1c3RvbV9lcnJvcicpICYmIGNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmRpcnR5KSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwidHJtLWVycm9yXCJcclxuICAgICAgICAgQGluc2VydFJlbW92ZVxyXG4gICAgPlxyXG4gICAgICB7eyBjb250cm9sLmdldEVycm9yKCdjdXN0b21fZXJyb3InKSB8IHRyYW5zIH19XHJcbiAgICA8L2Rpdj5cclxuICB9XHJcblxyXG59XHJcbiJdfQ==