@crodriguezdominguez/ion-intl-tel-input 2.1.1 → 2.2.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 (25) hide show
  1. package/crodriguezdominguez-ion-intl-tel-input-2.2.0.tgz +0 -0
  2. package/esm2022/lib/ion-intl-tel-input/ion-intl-tel-code.component.mjs +86 -0
  3. package/esm2022/lib/ion-intl-tel-input/ion-intl-tel-input.component.mjs +758 -0
  4. package/{esm2020 → esm2022}/lib/ion-intl-tel-input.directive.mjs +12 -11
  5. package/esm2022/lib/ion-intl-tel-input.module.mjs +56 -0
  6. package/esm2022/lib/ion-intl-tel-input.service.mjs +20 -0
  7. package/esm2022/lib/pipes/country-placeholder.mjs +39 -0
  8. package/{fesm2020 → fesm2022}/crodriguezdominguez-ion-intl-tel-input.mjs +372 -356
  9. package/{fesm2020 → fesm2022}/crodriguezdominguez-ion-intl-tel-input.mjs.map +1 -1
  10. package/lib/ion-intl-tel-input/ion-intl-tel-code.component.d.ts +1 -1
  11. package/lib/ion-intl-tel-input/ion-intl-tel-input.component.d.ts +1 -1
  12. package/package.json +5 -11
  13. package/crodriguezdominguez-ion-intl-tel-input-2.1.1.tgz +0 -0
  14. package/esm2020/lib/ion-intl-tel-input/ion-intl-tel-code.component.mjs +0 -73
  15. package/esm2020/lib/ion-intl-tel-input/ion-intl-tel-input.component.mjs +0 -752
  16. package/esm2020/lib/ion-intl-tel-input.module.mjs +0 -55
  17. package/esm2020/lib/ion-intl-tel-input.service.mjs +0 -20
  18. package/esm2020/lib/pipes/country-placeholder.mjs +0 -38
  19. package/fesm2015/crodriguezdominguez-ion-intl-tel-input.mjs +0 -3264
  20. package/fesm2015/crodriguezdominguez-ion-intl-tel-input.mjs.map +0 -1
  21. /package/{esm2020 → esm2022}/crodriguezdominguez-ion-intl-tel-input.mjs +0 -0
  22. /package/{esm2020 → esm2022}/lib/data/countries.mjs +0 -0
  23. /package/{esm2020 → esm2022}/lib/models/country.model.mjs +0 -0
  24. /package/{esm2020 → esm2022}/lib/util/util.mjs +0 -0
  25. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -0,0 +1,86 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { IonSearchbar, ModalController } from '@ionic/angular';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ionic/angular";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/cdk/scrolling";
7
+ class IonIntTelCodeComponent {
8
+ modalCtrl;
9
+ country;
10
+ canSearch;
11
+ closeButtonText = 'Close';
12
+ closeButtonSlot = 'end';
13
+ countries;
14
+ searchFailText;
15
+ searchPlaceholder;
16
+ shouldFocusSearchbar;
17
+ title;
18
+ dialCode;
19
+ sbar;
20
+ allCountries;
21
+ notFound;
22
+ constructor(modalCtrl) {
23
+ this.modalCtrl = modalCtrl;
24
+ }
25
+ ngOnInit() {
26
+ this.allCountries = this.countries;
27
+ }
28
+ ionViewDidEnter() {
29
+ if (this.sbar && this.shouldFocusSearchbar) {
30
+ setTimeout(() => { this.sbar.setFocus(); }, 400);
31
+ }
32
+ }
33
+ search(ev) {
34
+ let search = ev.detail.value;
35
+ this.notFound = false;
36
+ if (search === '' || search === null) {
37
+ this.countries = this.allCountries;
38
+ }
39
+ else {
40
+ search = search.toLocaleLowerCase();
41
+ this.countries = this.allCountries.filter(r => {
42
+ return (r.name && r.name.toLocaleLowerCase().indexOf(search) !== -1);
43
+ });
44
+ if (this.countries.length === 0) {
45
+ this.notFound = true;
46
+ }
47
+ }
48
+ }
49
+ itemTapped(c) {
50
+ this.modalCtrl.dismiss(c);
51
+ }
52
+ closeModal() {
53
+ this.modalCtrl.dismiss(null);
54
+ }
55
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IonIntTelCodeComponent, deps: [{ token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component });
56
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: IonIntTelCodeComponent, selector: "ion-intl-tel-code", inputs: { country: "country", canSearch: "canSearch", closeButtonText: "closeButtonText", closeButtonSlot: "closeButtonSlot", countries: "countries", searchFailText: "searchFailText", searchPlaceholder: "searchPlaceholder", shouldFocusSearchbar: "shouldFocusSearchbar", title: "title", dialCode: "dialCode" }, viewQueries: [{ propertyName: "sbar", first: true, predicate: ["searchBar"], descendants: true }], ngImport: i0, template: "<ion-header>\n <ion-toolbar>\n <ion-title class=\"ion-text-center\">\n {{title}}\n </ion-title>\n\n <ion-buttons [slot]=\"closeButtonSlot\">\n <ion-button (click)=\"closeModal()\">{{closeButtonText}}</ion-button>\n </ion-buttons>\n\n </ion-toolbar>\n <ion-searchbar #searchBar *ngIf=\"canSearch\" placeholder=\"{{searchPlaceholder}}\" [debounce]=\"400\"\n (keyup.enter)=\"$event.target.blur()\" (ionChange)=\"search($event)\"></ion-searchbar>\n</ion-header>\n\n<ion-content>\n <cdk-virtual-scroll-viewport style=\"width: 100%; height: 100%;\" itemSize=\"56\" minBufferPx=\"900\" maxBufferPx=\"1350\">\n <ion-list>\n <ion-radio-group [value]=\"country.isoCode\">\n <ion-item style=\"white-space:normal\" *cdkVirtualFor=\"let c of countries\">\n <ion-radio labelPlacement=\"end\" [value]=\"c.isoCode\" slot=\"start\" color=\"primary\" (click)=\"itemTapped(c)\">\n <span class=\"fi fi-{{c.flagClass}}\"></span>&nbsp;&nbsp;{{c.name}} <span *ngIf=\"dialCode\">{{dialCode}}{{c.displayDialCode}}</span>\n </ion-radio>\n </ion-item>\n </ion-radio-group>\n <ion-item lines=\"none\" *ngIf=\"notFound\">\n <ion-text>{{searchFailText}}</ion-text>\n </ion-item>\n </ion-list>\n </cdk-virtual-scroll-viewport>\n</ion-content>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonRadio, selector: "ion-radio", inputs: ["alignment", "color", "disabled", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "component", type: i1.IonRadioGroup, selector: "ion-radio-group", inputs: ["allowEmptySelection", "name", "value"] }, { kind: "component", type: i1.IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1.RadioValueAccessor, selector: "ion-radio" }, { kind: "directive", type: i1.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "directive", type: i1.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }] });
57
+ }
58
+ export { IonIntTelCodeComponent };
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: IonIntTelCodeComponent, decorators: [{
60
+ type: Component,
61
+ args: [{ selector: 'ion-intl-tel-code', template: "<ion-header>\n <ion-toolbar>\n <ion-title class=\"ion-text-center\">\n {{title}}\n </ion-title>\n\n <ion-buttons [slot]=\"closeButtonSlot\">\n <ion-button (click)=\"closeModal()\">{{closeButtonText}}</ion-button>\n </ion-buttons>\n\n </ion-toolbar>\n <ion-searchbar #searchBar *ngIf=\"canSearch\" placeholder=\"{{searchPlaceholder}}\" [debounce]=\"400\"\n (keyup.enter)=\"$event.target.blur()\" (ionChange)=\"search($event)\"></ion-searchbar>\n</ion-header>\n\n<ion-content>\n <cdk-virtual-scroll-viewport style=\"width: 100%; height: 100%;\" itemSize=\"56\" minBufferPx=\"900\" maxBufferPx=\"1350\">\n <ion-list>\n <ion-radio-group [value]=\"country.isoCode\">\n <ion-item style=\"white-space:normal\" *cdkVirtualFor=\"let c of countries\">\n <ion-radio labelPlacement=\"end\" [value]=\"c.isoCode\" slot=\"start\" color=\"primary\" (click)=\"itemTapped(c)\">\n <span class=\"fi fi-{{c.flagClass}}\"></span>&nbsp;&nbsp;{{c.name}} <span *ngIf=\"dialCode\">{{dialCode}}{{c.displayDialCode}}</span>\n </ion-radio>\n </ion-item>\n </ion-radio-group>\n <ion-item lines=\"none\" *ngIf=\"notFound\">\n <ion-text>{{searchFailText}}</ion-text>\n </ion-item>\n </ion-list>\n </cdk-virtual-scroll-viewport>\n</ion-content>\n" }]
62
+ }], ctorParameters: function () { return [{ type: i1.ModalController }]; }, propDecorators: { country: [{
63
+ type: Input
64
+ }], canSearch: [{
65
+ type: Input
66
+ }], closeButtonText: [{
67
+ type: Input
68
+ }], closeButtonSlot: [{
69
+ type: Input
70
+ }], countries: [{
71
+ type: Input
72
+ }], searchFailText: [{
73
+ type: Input
74
+ }], searchPlaceholder: [{
75
+ type: Input
76
+ }], shouldFocusSearchbar: [{
77
+ type: Input
78
+ }], title: [{
79
+ type: Input
80
+ }], dialCode: [{
81
+ type: Input
82
+ }], sbar: [{
83
+ type: ViewChild,
84
+ args: ['searchBar']
85
+ }] } });
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uLWludGwtdGVsLWNvZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW9uLWludGwtdGVsLWlucHV0L3NyYy9saWIvaW9uLWludGwtdGVsLWlucHV0L2lvbi1pbnRsLXRlbC1jb2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvbi1pbnRsLXRlbC1pbnB1dC9zcmMvbGliL2lvbi1pbnRsLXRlbC1pbnB1dC9pb24taW50bC10ZWwtY29kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFHL0QsTUFNYSxzQkFBc0I7SUFvQnJCO0lBbEJILE9BQU8sQ0FBVztJQUNsQixTQUFTLENBQVU7SUFDbkIsZUFBZSxHQUFHLE9BQU8sQ0FBQztJQUMxQixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLFNBQVMsQ0FBYTtJQUN0QixjQUFjLENBQVM7SUFDdkIsaUJBQWlCLENBQVM7SUFDMUIsb0JBQW9CLENBQVU7SUFDOUIsS0FBSyxDQUFTO0lBQ2QsUUFBUSxDQUFTO0lBRUYsSUFBSSxDQUFlO0lBRW5DLFlBQVksQ0FBYTtJQUUxQixRQUFRLENBQUM7SUFFaEIsWUFDWSxTQUEwQjtRQUExQixjQUFTLEdBQVQsU0FBUyxDQUFpQjtJQUd0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDMUMsVUFBVSxDQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQUU7UUFDUCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLE1BQU0sS0FBSyxFQUFFLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtZQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDcEM7YUFBTTtZQUNMLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUM3QyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkUsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDdEI7U0FDRjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBQztRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQzswSEF6RFUsc0JBQXNCOzhHQUF0QixzQkFBc0Isa2RDVm5DLHN6Q0ErQkE7O1NEckJhLHNCQUFzQjsyRkFBdEIsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUVFLG1CQUFtQjtzR0FNcEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVrQixJQUFJO3NCQUEzQixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uU2VhcmNoYmFyLCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBDb3VudHJ5SSB9IGZyb20gJy4uL21vZGVscy9jb3VudHJ5Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdpb24taW50bC10ZWwtY29kZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9pb24taW50bC10ZWwtY29kZS5jb21wb25lbnQuaHRtbCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBJb25JbnRUZWxDb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBjb3VudHJ5OiBDb3VudHJ5STtcbiAgQElucHV0KCkgY2FuU2VhcmNoOiBib29sZWFuO1xuICBASW5wdXQoKSBjbG9zZUJ1dHRvblRleHQgPSAnQ2xvc2UnO1xuICBASW5wdXQoKSBjbG9zZUJ1dHRvblNsb3QgPSAnZW5kJztcbiAgQElucHV0KCkgY291bnRyaWVzOiBDb3VudHJ5SVtdO1xuICBASW5wdXQoKSBzZWFyY2hGYWlsVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzaG91bGRGb2N1c1NlYXJjaGJhcjogYm9vbGVhbjtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgZGlhbENvZGU6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdzZWFyY2hCYXInKSBzYmFyOiBJb25TZWFyY2hiYXI7XG5cbiAgcHJpdmF0ZSBhbGxDb3VudHJpZXM6IENvdW50cnlJW107XG5cbiAgcHVibGljIG5vdEZvdW5kO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlclxuICApIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hbGxDb3VudHJpZXMgPSB0aGlzLmNvdW50cmllcztcbiAgfVxuXG4gIGlvblZpZXdEaWRFbnRlcigpIHtcbiAgICBpZiAodGhpcy5zYmFyICYmIHRoaXMuc2hvdWxkRm9jdXNTZWFyY2hiYXIpIHtcbiAgICAgIHNldFRpbWVvdXQoICgpID0+IHsgdGhpcy5zYmFyLnNldEZvY3VzKCk7IH0sIDQwMCk7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoKGV2KSB7XG4gICAgbGV0IHNlYXJjaCA9IGV2LmRldGFpbC52YWx1ZTtcbiAgICB0aGlzLm5vdEZvdW5kID0gZmFsc2U7XG4gICAgaWYgKHNlYXJjaCA9PT0gJycgfHwgc2VhcmNoID09PSBudWxsKSB7XG4gICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMuYWxsQ291bnRyaWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgIHRoaXMuY291bnRyaWVzID0gdGhpcy5hbGxDb3VudHJpZXMuZmlsdGVyKCByID0+IHtcbiAgICAgICAgcmV0dXJuIChyLm5hbWUgJiYgci5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpICE9PSAtMSk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmNvdW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5ub3RGb3VuZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXRlbVRhcHBlZChjKSB7XG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhjKTtcbiAgfVxuXG4gIGNsb3NlTW9kYWwoKSB7XG4gICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhudWxsKTtcbiAgfVxuXG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyPlxuICAgIDxpb24tdGl0bGUgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIj5cbiAgICAgIHt7dGl0bGV9fVxuICAgIDwvaW9uLXRpdGxlPlxuXG4gICAgPGlvbi1idXR0b25zIFtzbG90XT1cImNsb3NlQnV0dG9uU2xvdFwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiPnt7Y2xvc2VCdXR0b25UZXh0fX08L2lvbi1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cblxuICA8L2lvbi10b29sYmFyPlxuICA8aW9uLXNlYXJjaGJhciAjc2VhcmNoQmFyICpuZ0lmPVwiY2FuU2VhcmNoXCIgcGxhY2Vob2xkZXI9XCJ7e3NlYXJjaFBsYWNlaG9sZGVyfX1cIiBbZGVib3VuY2VdPVwiNDAwXCJcbiAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cIiRldmVudC50YXJnZXQuYmx1cigpXCIgKGlvbkNoYW5nZSk9XCJzZWFyY2goJGV2ZW50KVwiPjwvaW9uLXNlYXJjaGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50PlxuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTtcIiBpdGVtU2l6ZT1cIjU2XCIgbWluQnVmZmVyUHg9XCI5MDBcIiBtYXhCdWZmZXJQeD1cIjEzNTBcIj5cbiAgICA8aW9uLWxpc3Q+XG4gICAgICA8aW9uLXJhZGlvLWdyb3VwIFt2YWx1ZV09XCJjb3VudHJ5Lmlzb0NvZGVcIj5cbiAgICAgICAgPGlvbi1pdGVtIHN0eWxlPVwid2hpdGUtc3BhY2U6bm9ybWFsXCIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgYyBvZiBjb3VudHJpZXNcIj5cbiAgICAgICAgICA8aW9uLXJhZGlvIGxhYmVsUGxhY2VtZW50PVwiZW5kXCIgW3ZhbHVlXT1cImMuaXNvQ29kZVwiIHNsb3Q9XCJzdGFydFwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJpdGVtVGFwcGVkKGMpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpIGZpLXt7Yy5mbGFnQ2xhc3N9fVwiPjwvc3Bhbj4mbmJzcDsmbmJzcDt7e2MubmFtZX19IDxzcGFuICpuZ0lmPVwiZGlhbENvZGVcIj57e2RpYWxDb2RlfX17e2MuZGlzcGxheURpYWxDb2RlfX08L3NwYW4+XG4gICAgICAgICAgPC9pb24tcmFkaW8+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICA8L2lvbi1yYWRpby1ncm91cD5cbiAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiAqbmdJZj1cIm5vdEZvdW5kXCI+XG4gICAgICAgIDxpb24tdGV4dD57e3NlYXJjaEZhaWxUZXh0fX08L2lvbi10ZXh0PlxuICAgICAgPC9pb24taXRlbT5cbiAgICA8L2lvbi1saXN0PlxuICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=