tas-uell-sdk 0.2.0 → 0.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.
- package/README.md +2 -0
- package/esm2020/lib/components/tas-btn/tas-btn.component.mjs +2 -13
- package/esm2020/lib/components/tas-feedback-modal/tas-feedback-modal.component.mjs +229 -0
- package/esm2020/lib/components/tas-floating-call/tas-floating-call.component.mjs +38 -3
- package/esm2020/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.mjs +46 -8
- package/esm2020/lib/components/tas-videocall/tas-videocall.component.mjs +41 -6
- package/esm2020/lib/components/tas-waiting-room/tas-waiting-room.component.mjs +18 -3
- package/esm2020/lib/interfaces/tas.interfaces.mjs +6 -1
- package/esm2020/lib/services/tas.service.mjs +40 -1
- package/esm2020/lib/tas-uell-sdk.module.mjs +8 -3
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/tas-uell-sdk.mjs +421 -36
- package/fesm2015/tas-uell-sdk.mjs.map +1 -1
- package/fesm2020/tas-uell-sdk.mjs +416 -36
- package/fesm2020/tas-uell-sdk.mjs.map +1 -1
- package/lib/components/tas-btn/tas-btn.component.d.ts +1 -2
- package/lib/components/tas-feedback-modal/tas-feedback-modal.component.d.ts +101 -0
- package/lib/components/tas-floating-call/tas-floating-call.component.d.ts +5 -0
- package/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.d.ts +12 -1
- package/lib/components/tas-videocall/tas-videocall.component.d.ts +8 -2
- package/lib/components/tas-waiting-room/tas-waiting-room.component.d.ts +9 -0
- package/lib/interfaces/tas.interfaces.d.ts +17 -0
- package/lib/services/tas.service.d.ts +15 -1
- package/lib/tas-uell-sdk.module.d.ts +5 -4
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/src/lib/styles/tas-global.scss +17 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Component, Input, ViewChild, } from '@angular/core';
|
|
2
|
+
import { TasFeedbackModalComponent } from '../tas-feedback-modal/tas-feedback-modal.component';
|
|
2
3
|
import { CallState, ViewMode, TasBusinessRole, UserCallAction, GeoStatus, } from '../../interfaces/tas.interfaces';
|
|
3
4
|
import { TAS_ICONS } from '../../icons/tas-icons';
|
|
4
5
|
import { Subscription } from 'rxjs';
|
|
@@ -20,11 +21,12 @@ export var UserGeoViewState;
|
|
|
20
21
|
UserGeoViewState["DENIED"] = "DENIED";
|
|
21
22
|
})(UserGeoViewState || (UserGeoViewState = {}));
|
|
22
23
|
export class TasVideocallComponent {
|
|
23
|
-
constructor(activeModal, tasService, geolocationService, sanitizer) {
|
|
24
|
+
constructor(activeModal, tasService, geolocationService, sanitizer, modalService) {
|
|
24
25
|
this.activeModal = activeModal;
|
|
25
26
|
this.tasService = tasService;
|
|
26
27
|
this.geolocationService = geolocationService;
|
|
27
28
|
this.sanitizer = sanitizer;
|
|
29
|
+
this.modalService = modalService;
|
|
28
30
|
this.participantName = '';
|
|
29
31
|
this.tenant = '';
|
|
30
32
|
this.businessRole = TasBusinessRole.USER;
|
|
@@ -48,6 +50,7 @@ export class TasVideocallComponent {
|
|
|
48
50
|
this.UserGeoViewState = UserGeoViewState; // Expose enum to template
|
|
49
51
|
this.devModeEnabled = false; // Enable dev controls for testing
|
|
50
52
|
this.geoPanelDismissed = false; // Track if owner manually closed the panel
|
|
53
|
+
this.feedbackShown = false; // Track if feedback modal has been shown
|
|
51
54
|
this.subscriptions = new Subscription();
|
|
52
55
|
this.homeIcon = this.sanitizer.bypassSecurityTrustHtml(TAS_ICONS.home);
|
|
53
56
|
}
|
|
@@ -75,6 +78,37 @@ export class TasVideocallComponent {
|
|
|
75
78
|
hangUp() {
|
|
76
79
|
this.tasService.disconnectSession();
|
|
77
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Open feedback modal when call ends
|
|
83
|
+
*/
|
|
84
|
+
openFeedbackModal() {
|
|
85
|
+
// Prevent opening feedback modal multiple times
|
|
86
|
+
if (this.feedbackShown) {
|
|
87
|
+
this.activeModal.close('hangup');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Get videoCallId from input or service
|
|
91
|
+
const videoCallId = this.videoCallId ?? this.tasService.videoCallId;
|
|
92
|
+
// If no videoCallId, skip feedback and close directly
|
|
93
|
+
if (!videoCallId) {
|
|
94
|
+
this.activeModal.close('hangup');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
this.feedbackShown = true;
|
|
98
|
+
const modalRef = this.modalService.open(TasFeedbackModalComponent, {
|
|
99
|
+
centered: true,
|
|
100
|
+
backdrop: true,
|
|
101
|
+
keyboard: true,
|
|
102
|
+
windowClass: 'tas-feedback-modal-wrapper',
|
|
103
|
+
});
|
|
104
|
+
modalRef.componentInstance.videoCallId = videoCallId;
|
|
105
|
+
modalRef.componentInstance.tenant = this.tenant;
|
|
106
|
+
modalRef.componentInstance.businessRole = this.businessRole;
|
|
107
|
+
// Close videocall modal after feedback modal is closed/dismissed
|
|
108
|
+
modalRef.result.finally(() => {
|
|
109
|
+
this.activeModal.close('hangup');
|
|
110
|
+
});
|
|
111
|
+
}
|
|
78
112
|
toggleMute() {
|
|
79
113
|
this.tasService.toggleMute();
|
|
80
114
|
}
|
|
@@ -200,7 +234,7 @@ export class TasVideocallComponent {
|
|
|
200
234
|
this.subscriptions.add(this.tasService.callState$.subscribe((state) => {
|
|
201
235
|
this.callState = state;
|
|
202
236
|
if (state === CallState.DISCONNECTED) {
|
|
203
|
-
this.
|
|
237
|
+
this.openFeedbackModal();
|
|
204
238
|
}
|
|
205
239
|
// Track if we have an active video stream
|
|
206
240
|
this.hasVideoStream = state === CallState.CONNECTED;
|
|
@@ -227,8 +261,9 @@ export class TasVideocallComponent {
|
|
|
227
261
|
// Owner left subscription - disconnect non-owners
|
|
228
262
|
this.subscriptions.add(this.tasService.ownerHasLeft$.subscribe((hasLeft) => {
|
|
229
263
|
if (hasLeft && !this.canAdmitUsers) { // Non-owner user
|
|
264
|
+
// hangUp() triggers DISCONNECTED state, which opens feedback modal
|
|
265
|
+
// then closes videocall modal after feedback is done
|
|
230
266
|
this.hangUp();
|
|
231
|
-
this.activeModal.close('owner_left');
|
|
232
267
|
}
|
|
233
268
|
}));
|
|
234
269
|
// ActivateGeo subscription - only for non-owners (users)
|
|
@@ -414,12 +449,12 @@ export class TasVideocallComponent {
|
|
|
414
449
|
});
|
|
415
450
|
}
|
|
416
451
|
}
|
|
417
|
-
TasVideocallComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasVideocallComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.TasService }, { token: i3.GeolocationService }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
452
|
+
TasVideocallComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasVideocallComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.TasService }, { token: i3.GeolocationService }, { token: i4.DomSanitizer }, { token: i1.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
|
|
418
453
|
TasVideocallComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TasVideocallComponent, selector: "tas-videocall", inputs: { sessionId: "sessionId", token: "token", appointmentId: "appointmentId", videoCallId: "videoCallId", userId: "userId", participantName: "participantName", tenant: "tenant", businessRole: "businessRole", isReturningFromPip: "isReturningFromPip" }, viewQueries: [{ propertyName: "publisherContainer", first: true, predicate: ["publisherContainer"], descendants: true }, { propertyName: "subscriberContainer", first: true, predicate: ["subscriberContainer"], descendants: true }], ngImport: i0, template: "<div class=\"tas-videocall-wrapper\">\n <div class=\"tas-videocall-container\">\n <!-- Subscriber video (large, background) -->\n <div\n id=\"subscriber-container\"\n [class.subscriber-view]=\"isPublisherSmall\"\n [class.publisher-view]=\"!isPublisherSmall\"\n #subscriberContainer\n (dblclick)=\"onDoubleClick()\"\n ></div>\n\n <!-- Publisher video (small, overlay) -->\n <div\n id=\"publisher-container\"\n [class.publisher-view]=\"isPublisherSmall\"\n [class.subscriber-view]=\"!isPublisherSmall\"\n #publisherContainer\n (dblclick)=\"onDoubleClick()\"\n ></div>\n\n <!-- Centered avatar (shown when no video stream) -->\n <div class=\"avatar-container\" *ngIf=\"!hasVideoStream\">\n <tas-avatar [name]=\"participantName\" [size]=\"80\"></tas-avatar>\n </div>\n\n <!-- Controls -->\n <div class=\"controls-container\">\n <button\n class=\"btn control-btn mute-btn\"\n [class.muted]=\"isMuted\"\n (click)=\"toggleMute()\"\n [title]=\"isMuted ? 'Activar micr\u00F3fono' : 'Silenciar micr\u00F3fono'\"\n [attr.aria-label]=\"isMuted ? 'Activar micr\u00F3fono' : 'Silenciar micr\u00F3fono'\"\n >\n <i\n class=\"fa\"\n [class.fa-microphone]=\"!isMuted\"\n [class.fa-microphone-slash]=\"isMuted\"\n ></i>\n </button>\n <button\n class=\"btn control-btn swap-btn\"\n (click)=\"toggleSwap()\"\n title=\"Intercambiar vista\"\n aria-label=\"Intercambiar vista\"\n >\n <i class=\"fa fa-refresh\"></i>\n </button>\n <button\n class=\"btn control-btn pip-btn\"\n (click)=\"minimize()\"\n title=\"Minimizar (Picture in Picture)\"\n aria-label=\"Minimizar videollamada\"\n >\n <i class=\"fa fa-compress\"></i>\n </button>\n <button\n class=\"btn control-btn hangup-btn\"\n (click)=\"hangUp()\"\n title=\"Finalizar llamada\"\n aria-label=\"Finalizar llamada\"\n >\n <i class=\"fa fa-phone\"></i>\n </button>\n </div>\n\n <!-- Waiting room notification (shown for OWNER/BACKOFFICE only) -->\n <div\n class=\"waiting-notification\"\n *ngIf=\"waitingRoomUsers.length > 0 && canAdmitUsers\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n <span class=\"waiting-text\">\n {{ waitingRoomUsers[0].name }} est\u00E1 en la sala de espera.\n </span>\n <button\n class=\"admit-btn\"\n (click)=\"admitUser(waitingRoomUsers[0].userId)\"\n aria-label=\"Admitir usuario\"\n >\n Admitir\n </button>\n <button\n class=\"dismiss-btn\"\n (click)=\"dismissWaitingNotification(waitingRoomUsers[0].userId)\"\n aria-label=\"Cerrar notificaci\u00F3n\"\n >\n \u00D7\n </button>\n </div>\n </div>\n\n <!-- Owner geolocation panel (for owners to request user location) -->\n <div class=\"user-geo-panel\" *ngIf=\"shouldShowUserGeoPanel || devModeEnabled\">\n <div class=\"user-geo-header\">\n <div class=\"header-title-row\">\n <i class=\"fa fa-map-marker header-icon\" *ngIf=\"userGeoViewState !== UserGeoViewState.INITIAL\"></i>\n <h3>Ubicaci\u00F3n del colaborador</h3>\n </div>\n <button class=\"close-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.HIDDEN)\" aria-label=\"Cerrar\">\u00D7</button>\n </div>\n\n <div class=\"user-geo-description\" *ngIf=\"userGeoViewState !== UserGeoViewState.VERIFIED && userGeoViewState !== UserGeoViewState.DENIED\">\n <p>El colaborador tiene la ubicaci\u00F3n desactivada, solicita que la active.</p>\n <p>Esta acci\u00F3n nos permitir\u00E1 disponibilizar algunas alertas.</p>\n </div>\n\n <div class=\"user-geo-content\">\n <!-- INITIAL state: just the button -->\n <ng-container *ngIf=\"userGeoViewState === UserGeoViewState.INITIAL\">\n <!-- spacer -->\n </ng-container>\n\n <!-- VERIFYING state: spinner + loading message -->\n <ng-container *ngIf=\"userGeoViewState === UserGeoViewState.VERIFYING\">\n <div class=\"user-geo-verifying\">\n <div class=\"geo-spinner-large\"></div>\n <p class=\"verifying-title\">Verificando ubicaci\u00F3n...</p>\n <p class=\"verifying-subtitle\">Esto puede tardar unos segundos.</p>\n </div>\n </ng-container>\n\n <!-- VERIFIED state: home icon with sparkles -->\n <ng-container *ngIf=\"userGeoViewState === UserGeoViewState.VERIFIED\">\n <div class=\"user-geo-verified\">\n <div class=\"verified-icon-container\">\n <span class=\"home-icon\" [innerHTML]=\"homeIcon\"></span>\n </div>\n <p class=\"verified-title\">La ubicaci\u00F3n fue verificada</p>\n </div>\n </ng-container>\n\n <!-- DENIED state: error icon and message -->\n <ng-container *ngIf=\"userGeoViewState === UserGeoViewState.DENIED\">\n <div class=\"user-geo-denied\">\n <div class=\"denied-icon-container\">\n <i class=\"fa fa-times-circle\"></i>\n </div>\n <p class=\"denied-title\">La ubicaci\u00F3n fue rechazada</p>\n <p class=\"denied-subtitle\">El colaborador no permiti\u00F3 el acceso a su ubicaci\u00F3n.</p>\n </div>\n </ng-container>\n </div>\n\n <!-- Button (hidden in verified and denied states) -->\n <button \n class=\"user-geo-btn\" \n *ngIf=\"userGeoViewState !== UserGeoViewState.VERIFIED && userGeoViewState !== UserGeoViewState.DENIED\"\n [class.disabled]=\"userGeoViewState === UserGeoViewState.VERIFYING\"\n [disabled]=\"userGeoViewState === UserGeoViewState.VERIFYING\"\n (click)=\"requestUserLocation()\">\n Verificar ubicaci\u00F3n\n </button>\n\n <!-- Dev controls -->\n <div class=\"dev-controls\" *ngIf=\"devModeEnabled\">\n <span class=\"dev-label\">Dev:</span>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.INITIAL)\">Initial</button>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.VERIFYING)\">Verifying</button>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.VERIFIED)\">Verified</button>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.DENIED)\">Denied</button>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.HIDDEN)\">Hide</button>\n </div>\n </div>\n</div>\n\n", styles: ["@charset \"UTF-8\";:host{display:flex;width:100vw;height:100vh;box-sizing:border-box;padding:2rem;background:linear-gradient(281deg,rgba(29,164,177,.2) 6.96%,rgba(0,0,0,0) 70.44%),#212532}.tas-videocall-wrapper{display:flex;flex:1;gap:1rem;height:100%}.tas-videocall-container{position:relative;flex:1;height:100%;overflow:hidden;border-radius:8px;border:1px solid var(--Neutral-GreyLight, #dadfe9);background:linear-gradient(180deg,#e5f1f7 0%,#0072ac 100%)}.tas-videocall-container ::ng-deep .OT_edge-bar-item,.tas-videocall-container ::ng-deep .OT_mute,.tas-videocall-container ::ng-deep .OT_audio-level-meter,.tas-videocall-container ::ng-deep .OT_bar,.tas-videocall-container ::ng-deep .OT_name{display:none!important}.tas-videocall-container .subscriber-view{width:100%;height:100%;z-index:1}.tas-videocall-container .publisher-view{position:absolute;top:20px;right:20px;width:200px;height:150px;z-index:2;border:2px solid #fff;border-radius:8px;background-color:#0000004d;overflow:hidden}.tas-videocall-container .avatar-container{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1;display:flex;align-items:center;justify-content:center}.tas-videocall-container .controls-container{display:flex;flex-direction:row;gap:12px;position:absolute;bottom:30px;left:50%;transform:translate(-50%);z-index:3;background-color:#33475bb3;padding:12px 20px;border-radius:30px;backdrop-filter:blur(8px)}.tas-videocall-container .controls-container .control-btn{width:44px;height:44px;border-radius:20px;display:flex;align-items:center;justify-content:center;font-size:18px;border:none;background:transparent;cursor:pointer;transition:all .2s ease}.tas-videocall-container .controls-container .control-btn i{color:#fff}.tas-videocall-container .controls-container .control-btn:hover{transform:scale(1.05);filter:brightness(1.1)}.tas-videocall-container .controls-container .control-btn:focus{outline:2px solid #fff;outline-offset:2px}.tas-videocall-container .controls-container .hangup-btn{background:#f44336}.tas-videocall-container .controls-container .hangup-btn i{transform:rotate(135deg)}.tas-videocall-container .controls-container .hangup-btn:hover{background:#d32f2f}.tas-videocall-container .controls-container .swap-btn,.tas-videocall-container .controls-container .pip-btn,.tas-videocall-container .controls-container .mute-btn{background:transparent}.tas-videocall-container .controls-container .swap-btn:hover,.tas-videocall-container .controls-container .pip-btn:hover,.tas-videocall-container .controls-container .mute-btn:hover{background:rgba(255,255,255,.15)}.tas-videocall-container .waiting-notification{position:absolute;bottom:100px;left:16px;display:flex;align-items:center;gap:12px;background-color:#33475be6;padding:10px 16px;border-radius:8px;z-index:4;backdrop-filter:blur(4px);max-width:calc(100% - 32px)}.tas-videocall-container .waiting-notification .waiting-text{color:#fff;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tas-videocall-container .waiting-notification .admit-btn{background:var(--Primary-Uell, #1da4b1);color:#fff;border:none;border-radius:4px;padding:6px 16px;font-size:14px;font-weight:500;cursor:pointer;transition:background .2s ease;white-space:nowrap}.tas-videocall-container .waiting-notification .admit-btn:hover{background:#178e99}.tas-videocall-container .waiting-notification .admit-btn:focus{outline:2px solid #fff;outline-offset:2px}.tas-videocall-container .waiting-notification .dismiss-btn{background:transparent;color:#fff;border:none;font-size:20px;line-height:1;cursor:pointer;padding:0 4px;opacity:.7;transition:opacity .2s ease}.tas-videocall-container .waiting-notification .dismiss-btn:hover{opacity:1}.tas-videocall-container .waiting-notification .dismiss-btn:focus{outline:2px solid #fff;outline-offset:2px}.location-panel{width:280px;height:100%;background:#212532;border-radius:8px;padding:1.5rem;display:flex;flex-direction:column;color:#fff}.location-panel .location-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1rem}.location-panel .location-header h3{font-size:16px;font-weight:600;margin:0;color:#fff}.location-panel .location-header .close-btn{background:transparent;border:none;color:#fff;font-size:20px;cursor:pointer;padding:0;line-height:1;opacity:.7}.location-panel .location-header .close-btn:hover{opacity:1}.location-panel .location-description{font-size:14px;color:#fffc;line-height:1.5;margin-bottom:.5rem}.location-panel .location-description p{margin:0 0 .5rem}.location-panel .location-user-list{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem;max-height:200px;overflow-y:auto}.location-panel .location-user-list .user-geo-item{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;background:rgba(255,255,255,.05);border-radius:6px}.location-panel .location-user-list .user-geo-item .user-icon{color:#fff9;font-size:14px}.location-panel .location-user-list .user-geo-item .user-name{flex:1;font-size:14px;color:#fff}.location-panel .location-user-list .user-geo-item .geo-status{display:flex;align-items:center;gap:.35rem;font-size:12px;padding:2px 8px;border-radius:12px}.location-panel .location-user-list .user-geo-item .geo-status.pending{color:#ffc107;background:rgba(255,193,7,.15)}.location-panel .location-user-list .user-geo-item .geo-status.granted{color:#4caf50;background:rgba(76,175,80,.15)}.location-panel .location-user-list .user-geo-item .geo-status.denied{color:#f44336;background:rgba(244,67,54,.15)}.location-panel .location-user-list .user-geo-item .geo-status i{font-size:10px}.location-panel .geo-denied-warning{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:rgba(244,67,54,.15);border-radius:6px;margin-bottom:1rem;color:#f44336;font-size:13px}.location-panel .geo-denied-warning i{font-size:14px}.location-panel .location-content{flex:1;display:flex;flex-direction:column;justify-content:flex-end}.location-panel .verify-location-btn{width:100%;padding:12px 24px;background:var(--Primary-Uell, #1da4b1);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:background .2s ease;margin-bottom:1rem}.location-panel .verify-location-btn:hover{background:#178e99}.location-panel .verify-location-btn:disabled{background:rgba(29,164,177,.5);cursor:not-allowed}.location-panel .location-footer{display:flex;justify-content:flex-end;gap:.5rem;padding-top:.5rem;border-top:1px solid rgba(255,255,255,.1)}.location-panel .location-footer .footer-icon{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.1);color:#fff;font-size:14px}.location-panel .location-footer .footer-icon.location-icon{background:var(--Primary-Uell, #1da4b1)}.location-panel .header-icon{color:#fff;font-size:16px}.location-panel .geo-loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 0}.location-panel .geo-loading-container .geo-spinner{width:64px;height:64px;border:4px solid rgba(29,164,177,.2);border-top-color:var(--Primary-Uell, #1da4b1);border-radius:50%;animation:geo-spin 1s linear infinite}.location-panel .geo-loading-container .loading-title{color:#fff;font-size:16px;font-weight:600;margin:1.5rem 0 .25rem}.location-panel .geo-loading-container .loading-subtitle{color:#ffffffb3;font-size:14px;margin:0}.location-panel .geo-success-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 0}.location-panel .geo-success-container .success-icon{width:80px;height:80px;border-radius:50%;background:var(--Primary-Uell, #1da4b1);display:flex;align-items:center;justify-content:center;position:relative}.location-panel .geo-success-container .success-icon i{color:#fff;font-size:32px}.location-panel .geo-success-container .success-icon:before,.location-panel .geo-success-container .success-icon:after{content:\"\\2726\";position:absolute;color:#fff;font-size:10px}.location-panel .geo-success-container .success-icon:before{top:-8px;right:-4px}.location-panel .geo-success-container .success-icon:after{bottom:-4px;left:-8px}.location-panel .geo-success-container .success-title{color:#fff;font-size:16px;font-weight:600;margin:1.5rem 0 0}.location-panel .verify-location-btn.disabled{background:rgba(29,164,177,.5);cursor:not-allowed}@keyframes geo-spin{to{transform:rotate(360deg)}}.user-geo-panel{width:360px;height:100%;background:#212532;border-radius:8px;padding:1.5rem;display:flex;flex-direction:column;color:#fff}.user-geo-panel .user-geo-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2.5rem;padding-top:2rem}.user-geo-panel .user-geo-header .header-title-row{display:flex;align-items:center;gap:.5rem}.user-geo-panel .user-geo-header .header-title-row .header-icon{font-size:16px;color:#fff}.user-geo-panel .user-geo-header .header-title-row h3{font-size:18px;font-weight:600;margin:0;color:#fff}.user-geo-panel .user-geo-header .close-btn{background:transparent;border:none;color:#fff;font-size:20px;cursor:pointer;padding:0;line-height:1;opacity:.7}.user-geo-panel .user-geo-header .close-btn:hover{opacity:1}.user-geo-panel .user-geo-description{font-size:14px;color:#fffc;line-height:1.6;margin-bottom:1rem}.user-geo-panel .user-geo-description p{margin:0 0 .75rem}.user-geo-panel .user-geo-content{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.user-geo-panel .user-geo-verifying{display:flex;flex-direction:column;align-items:center;text-align:center}.user-geo-panel .user-geo-verifying .geo-spinner-large{width:80px;height:80px;border:4px solid rgba(29,164,177,.2);border-top-color:var(--Primary-Uell, #1da4b1);border-radius:50%;animation:geo-spin 1s linear infinite;margin-bottom:1.5rem}.user-geo-panel .user-geo-verifying .verifying-title{color:#fff;font-size:16px;font-weight:600;margin:0 0 .25rem}.user-geo-panel .user-geo-verifying .verifying-subtitle{color:#fff9;font-size:14px;margin:0}.user-geo-panel .user-geo-verified{display:flex;flex-direction:column;align-items:center;text-align:center}.user-geo-panel .user-geo-verified .verified-icon-container{margin-bottom:1rem}.user-geo-panel .user-geo-verified .verified-icon-container .home-icon{display:block}.user-geo-panel .user-geo-verified .verified-icon-container .home-icon svg{width:120px;height:100px}.user-geo-panel .user-geo-verified .verified-title{color:#fff;font-size:16px;font-weight:600;margin:0}.user-geo-panel .user-geo-denied{display:flex;flex-direction:column;align-items:center;text-align:center}.user-geo-panel .user-geo-denied .denied-icon-container{width:100px;height:100px;border-radius:50%;background:rgba(244,67,54,.2);display:flex;align-items:center;justify-content:center;margin-bottom:1.5rem}.user-geo-panel .user-geo-denied .denied-icon-container i{font-size:48px;color:#f44336}.user-geo-panel .user-geo-denied .denied-title{color:#fff;font-size:16px;font-weight:600;margin:0 0 .5rem}.user-geo-panel .user-geo-denied .denied-subtitle{color:#fff9;font-size:14px;margin:0}.user-geo-panel .user-geo-btn{width:100%;padding:14px 24px;background:var(--Primary-Uell, #1da4b1);color:#fff;border:none;border-radius:24px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease;margin-top:auto;margin-bottom:1rem}.user-geo-panel .user-geo-btn:hover:not(.disabled){background:#178e99}.user-geo-panel .user-geo-btn.disabled{background:rgba(29,164,177,.5);cursor:not-allowed}.user-geo-panel .dev-controls{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:rgba(0,0,0,.3);border-radius:6px;margin-bottom:1rem;flex-wrap:wrap}.user-geo-panel .dev-controls .dev-label{font-size:12px;color:#fff9;font-weight:600}.user-geo-panel .dev-controls .dev-btn{padding:4px 8px;font-size:11px;background:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;cursor:pointer;transition:all .2s ease}.user-geo-panel .dev-controls .dev-btn:hover{background:rgba(255,255,255,.2)}.user-geo-panel .user-geo-footer{display:flex;justify-content:center;gap:.75rem;padding-top:.5rem}.user-geo-panel .user-geo-footer .footer-icon{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.1);color:#fff9;font-size:16px}.user-geo-panel .user-geo-footer .footer-icon.active{background:var(--Primary-Uell, #1da4b1);color:#fff}\n"], components: [{ type: i5.TasAvatarComponent, selector: "tas-avatar", inputs: ["name", "size"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
419
454
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasVideocallComponent, decorators: [{
|
|
420
455
|
type: Component,
|
|
421
456
|
args: [{ selector: 'tas-videocall', template: "<div class=\"tas-videocall-wrapper\">\n <div class=\"tas-videocall-container\">\n <!-- Subscriber video (large, background) -->\n <div\n id=\"subscriber-container\"\n [class.subscriber-view]=\"isPublisherSmall\"\n [class.publisher-view]=\"!isPublisherSmall\"\n #subscriberContainer\n (dblclick)=\"onDoubleClick()\"\n ></div>\n\n <!-- Publisher video (small, overlay) -->\n <div\n id=\"publisher-container\"\n [class.publisher-view]=\"isPublisherSmall\"\n [class.subscriber-view]=\"!isPublisherSmall\"\n #publisherContainer\n (dblclick)=\"onDoubleClick()\"\n ></div>\n\n <!-- Centered avatar (shown when no video stream) -->\n <div class=\"avatar-container\" *ngIf=\"!hasVideoStream\">\n <tas-avatar [name]=\"participantName\" [size]=\"80\"></tas-avatar>\n </div>\n\n <!-- Controls -->\n <div class=\"controls-container\">\n <button\n class=\"btn control-btn mute-btn\"\n [class.muted]=\"isMuted\"\n (click)=\"toggleMute()\"\n [title]=\"isMuted ? 'Activar micr\u00F3fono' : 'Silenciar micr\u00F3fono'\"\n [attr.aria-label]=\"isMuted ? 'Activar micr\u00F3fono' : 'Silenciar micr\u00F3fono'\"\n >\n <i\n class=\"fa\"\n [class.fa-microphone]=\"!isMuted\"\n [class.fa-microphone-slash]=\"isMuted\"\n ></i>\n </button>\n <button\n class=\"btn control-btn swap-btn\"\n (click)=\"toggleSwap()\"\n title=\"Intercambiar vista\"\n aria-label=\"Intercambiar vista\"\n >\n <i class=\"fa fa-refresh\"></i>\n </button>\n <button\n class=\"btn control-btn pip-btn\"\n (click)=\"minimize()\"\n title=\"Minimizar (Picture in Picture)\"\n aria-label=\"Minimizar videollamada\"\n >\n <i class=\"fa fa-compress\"></i>\n </button>\n <button\n class=\"btn control-btn hangup-btn\"\n (click)=\"hangUp()\"\n title=\"Finalizar llamada\"\n aria-label=\"Finalizar llamada\"\n >\n <i class=\"fa fa-phone\"></i>\n </button>\n </div>\n\n <!-- Waiting room notification (shown for OWNER/BACKOFFICE only) -->\n <div\n class=\"waiting-notification\"\n *ngIf=\"waitingRoomUsers.length > 0 && canAdmitUsers\"\n role=\"alert\"\n aria-live=\"polite\"\n >\n <span class=\"waiting-text\">\n {{ waitingRoomUsers[0].name }} est\u00E1 en la sala de espera.\n </span>\n <button\n class=\"admit-btn\"\n (click)=\"admitUser(waitingRoomUsers[0].userId)\"\n aria-label=\"Admitir usuario\"\n >\n Admitir\n </button>\n <button\n class=\"dismiss-btn\"\n (click)=\"dismissWaitingNotification(waitingRoomUsers[0].userId)\"\n aria-label=\"Cerrar notificaci\u00F3n\"\n >\n \u00D7\n </button>\n </div>\n </div>\n\n <!-- Owner geolocation panel (for owners to request user location) -->\n <div class=\"user-geo-panel\" *ngIf=\"shouldShowUserGeoPanel || devModeEnabled\">\n <div class=\"user-geo-header\">\n <div class=\"header-title-row\">\n <i class=\"fa fa-map-marker header-icon\" *ngIf=\"userGeoViewState !== UserGeoViewState.INITIAL\"></i>\n <h3>Ubicaci\u00F3n del colaborador</h3>\n </div>\n <button class=\"close-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.HIDDEN)\" aria-label=\"Cerrar\">\u00D7</button>\n </div>\n\n <div class=\"user-geo-description\" *ngIf=\"userGeoViewState !== UserGeoViewState.VERIFIED && userGeoViewState !== UserGeoViewState.DENIED\">\n <p>El colaborador tiene la ubicaci\u00F3n desactivada, solicita que la active.</p>\n <p>Esta acci\u00F3n nos permitir\u00E1 disponibilizar algunas alertas.</p>\n </div>\n\n <div class=\"user-geo-content\">\n <!-- INITIAL state: just the button -->\n <ng-container *ngIf=\"userGeoViewState === UserGeoViewState.INITIAL\">\n <!-- spacer -->\n </ng-container>\n\n <!-- VERIFYING state: spinner + loading message -->\n <ng-container *ngIf=\"userGeoViewState === UserGeoViewState.VERIFYING\">\n <div class=\"user-geo-verifying\">\n <div class=\"geo-spinner-large\"></div>\n <p class=\"verifying-title\">Verificando ubicaci\u00F3n...</p>\n <p class=\"verifying-subtitle\">Esto puede tardar unos segundos.</p>\n </div>\n </ng-container>\n\n <!-- VERIFIED state: home icon with sparkles -->\n <ng-container *ngIf=\"userGeoViewState === UserGeoViewState.VERIFIED\">\n <div class=\"user-geo-verified\">\n <div class=\"verified-icon-container\">\n <span class=\"home-icon\" [innerHTML]=\"homeIcon\"></span>\n </div>\n <p class=\"verified-title\">La ubicaci\u00F3n fue verificada</p>\n </div>\n </ng-container>\n\n <!-- DENIED state: error icon and message -->\n <ng-container *ngIf=\"userGeoViewState === UserGeoViewState.DENIED\">\n <div class=\"user-geo-denied\">\n <div class=\"denied-icon-container\">\n <i class=\"fa fa-times-circle\"></i>\n </div>\n <p class=\"denied-title\">La ubicaci\u00F3n fue rechazada</p>\n <p class=\"denied-subtitle\">El colaborador no permiti\u00F3 el acceso a su ubicaci\u00F3n.</p>\n </div>\n </ng-container>\n </div>\n\n <!-- Button (hidden in verified and denied states) -->\n <button \n class=\"user-geo-btn\" \n *ngIf=\"userGeoViewState !== UserGeoViewState.VERIFIED && userGeoViewState !== UserGeoViewState.DENIED\"\n [class.disabled]=\"userGeoViewState === UserGeoViewState.VERIFYING\"\n [disabled]=\"userGeoViewState === UserGeoViewState.VERIFYING\"\n (click)=\"requestUserLocation()\">\n Verificar ubicaci\u00F3n\n </button>\n\n <!-- Dev controls -->\n <div class=\"dev-controls\" *ngIf=\"devModeEnabled\">\n <span class=\"dev-label\">Dev:</span>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.INITIAL)\">Initial</button>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.VERIFYING)\">Verifying</button>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.VERIFIED)\">Verified</button>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.DENIED)\">Denied</button>\n <button class=\"dev-btn\" (click)=\"setUserGeoViewState(UserGeoViewState.HIDDEN)\">Hide</button>\n </div>\n </div>\n</div>\n\n", styles: ["@charset \"UTF-8\";:host{display:flex;width:100vw;height:100vh;box-sizing:border-box;padding:2rem;background:linear-gradient(281deg,rgba(29,164,177,.2) 6.96%,rgba(0,0,0,0) 70.44%),#212532}.tas-videocall-wrapper{display:flex;flex:1;gap:1rem;height:100%}.tas-videocall-container{position:relative;flex:1;height:100%;overflow:hidden;border-radius:8px;border:1px solid var(--Neutral-GreyLight, #dadfe9);background:linear-gradient(180deg,#e5f1f7 0%,#0072ac 100%)}.tas-videocall-container ::ng-deep .OT_edge-bar-item,.tas-videocall-container ::ng-deep .OT_mute,.tas-videocall-container ::ng-deep .OT_audio-level-meter,.tas-videocall-container ::ng-deep .OT_bar,.tas-videocall-container ::ng-deep .OT_name{display:none!important}.tas-videocall-container .subscriber-view{width:100%;height:100%;z-index:1}.tas-videocall-container .publisher-view{position:absolute;top:20px;right:20px;width:200px;height:150px;z-index:2;border:2px solid #fff;border-radius:8px;background-color:#0000004d;overflow:hidden}.tas-videocall-container .avatar-container{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:1;display:flex;align-items:center;justify-content:center}.tas-videocall-container .controls-container{display:flex;flex-direction:row;gap:12px;position:absolute;bottom:30px;left:50%;transform:translate(-50%);z-index:3;background-color:#33475bb3;padding:12px 20px;border-radius:30px;backdrop-filter:blur(8px)}.tas-videocall-container .controls-container .control-btn{width:44px;height:44px;border-radius:20px;display:flex;align-items:center;justify-content:center;font-size:18px;border:none;background:transparent;cursor:pointer;transition:all .2s ease}.tas-videocall-container .controls-container .control-btn i{color:#fff}.tas-videocall-container .controls-container .control-btn:hover{transform:scale(1.05);filter:brightness(1.1)}.tas-videocall-container .controls-container .control-btn:focus{outline:2px solid #fff;outline-offset:2px}.tas-videocall-container .controls-container .hangup-btn{background:#f44336}.tas-videocall-container .controls-container .hangup-btn i{transform:rotate(135deg)}.tas-videocall-container .controls-container .hangup-btn:hover{background:#d32f2f}.tas-videocall-container .controls-container .swap-btn,.tas-videocall-container .controls-container .pip-btn,.tas-videocall-container .controls-container .mute-btn{background:transparent}.tas-videocall-container .controls-container .swap-btn:hover,.tas-videocall-container .controls-container .pip-btn:hover,.tas-videocall-container .controls-container .mute-btn:hover{background:rgba(255,255,255,.15)}.tas-videocall-container .waiting-notification{position:absolute;bottom:100px;left:16px;display:flex;align-items:center;gap:12px;background-color:#33475be6;padding:10px 16px;border-radius:8px;z-index:4;backdrop-filter:blur(4px);max-width:calc(100% - 32px)}.tas-videocall-container .waiting-notification .waiting-text{color:#fff;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tas-videocall-container .waiting-notification .admit-btn{background:var(--Primary-Uell, #1da4b1);color:#fff;border:none;border-radius:4px;padding:6px 16px;font-size:14px;font-weight:500;cursor:pointer;transition:background .2s ease;white-space:nowrap}.tas-videocall-container .waiting-notification .admit-btn:hover{background:#178e99}.tas-videocall-container .waiting-notification .admit-btn:focus{outline:2px solid #fff;outline-offset:2px}.tas-videocall-container .waiting-notification .dismiss-btn{background:transparent;color:#fff;border:none;font-size:20px;line-height:1;cursor:pointer;padding:0 4px;opacity:.7;transition:opacity .2s ease}.tas-videocall-container .waiting-notification .dismiss-btn:hover{opacity:1}.tas-videocall-container .waiting-notification .dismiss-btn:focus{outline:2px solid #fff;outline-offset:2px}.location-panel{width:280px;height:100%;background:#212532;border-radius:8px;padding:1.5rem;display:flex;flex-direction:column;color:#fff}.location-panel .location-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1rem}.location-panel .location-header h3{font-size:16px;font-weight:600;margin:0;color:#fff}.location-panel .location-header .close-btn{background:transparent;border:none;color:#fff;font-size:20px;cursor:pointer;padding:0;line-height:1;opacity:.7}.location-panel .location-header .close-btn:hover{opacity:1}.location-panel .location-description{font-size:14px;color:#fffc;line-height:1.5;margin-bottom:.5rem}.location-panel .location-description p{margin:0 0 .5rem}.location-panel .location-user-list{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem;max-height:200px;overflow-y:auto}.location-panel .location-user-list .user-geo-item{display:flex;align-items:center;gap:.75rem;padding:.5rem .75rem;background:rgba(255,255,255,.05);border-radius:6px}.location-panel .location-user-list .user-geo-item .user-icon{color:#fff9;font-size:14px}.location-panel .location-user-list .user-geo-item .user-name{flex:1;font-size:14px;color:#fff}.location-panel .location-user-list .user-geo-item .geo-status{display:flex;align-items:center;gap:.35rem;font-size:12px;padding:2px 8px;border-radius:12px}.location-panel .location-user-list .user-geo-item .geo-status.pending{color:#ffc107;background:rgba(255,193,7,.15)}.location-panel .location-user-list .user-geo-item .geo-status.granted{color:#4caf50;background:rgba(76,175,80,.15)}.location-panel .location-user-list .user-geo-item .geo-status.denied{color:#f44336;background:rgba(244,67,54,.15)}.location-panel .location-user-list .user-geo-item .geo-status i{font-size:10px}.location-panel .geo-denied-warning{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:rgba(244,67,54,.15);border-radius:6px;margin-bottom:1rem;color:#f44336;font-size:13px}.location-panel .geo-denied-warning i{font-size:14px}.location-panel .location-content{flex:1;display:flex;flex-direction:column;justify-content:flex-end}.location-panel .verify-location-btn{width:100%;padding:12px 24px;background:var(--Primary-Uell, #1da4b1);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:background .2s ease;margin-bottom:1rem}.location-panel .verify-location-btn:hover{background:#178e99}.location-panel .verify-location-btn:disabled{background:rgba(29,164,177,.5);cursor:not-allowed}.location-panel .location-footer{display:flex;justify-content:flex-end;gap:.5rem;padding-top:.5rem;border-top:1px solid rgba(255,255,255,.1)}.location-panel .location-footer .footer-icon{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.1);color:#fff;font-size:14px}.location-panel .location-footer .footer-icon.location-icon{background:var(--Primary-Uell, #1da4b1)}.location-panel .header-icon{color:#fff;font-size:16px}.location-panel .geo-loading-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 0}.location-panel .geo-loading-container .geo-spinner{width:64px;height:64px;border:4px solid rgba(29,164,177,.2);border-top-color:var(--Primary-Uell, #1da4b1);border-radius:50%;animation:geo-spin 1s linear infinite}.location-panel .geo-loading-container .loading-title{color:#fff;font-size:16px;font-weight:600;margin:1.5rem 0 .25rem}.location-panel .geo-loading-container .loading-subtitle{color:#ffffffb3;font-size:14px;margin:0}.location-panel .geo-success-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem 0}.location-panel .geo-success-container .success-icon{width:80px;height:80px;border-radius:50%;background:var(--Primary-Uell, #1da4b1);display:flex;align-items:center;justify-content:center;position:relative}.location-panel .geo-success-container .success-icon i{color:#fff;font-size:32px}.location-panel .geo-success-container .success-icon:before,.location-panel .geo-success-container .success-icon:after{content:\"\\2726\";position:absolute;color:#fff;font-size:10px}.location-panel .geo-success-container .success-icon:before{top:-8px;right:-4px}.location-panel .geo-success-container .success-icon:after{bottom:-4px;left:-8px}.location-panel .geo-success-container .success-title{color:#fff;font-size:16px;font-weight:600;margin:1.5rem 0 0}.location-panel .verify-location-btn.disabled{background:rgba(29,164,177,.5);cursor:not-allowed}@keyframes geo-spin{to{transform:rotate(360deg)}}.user-geo-panel{width:360px;height:100%;background:#212532;border-radius:8px;padding:1.5rem;display:flex;flex-direction:column;color:#fff}.user-geo-panel .user-geo-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2.5rem;padding-top:2rem}.user-geo-panel .user-geo-header .header-title-row{display:flex;align-items:center;gap:.5rem}.user-geo-panel .user-geo-header .header-title-row .header-icon{font-size:16px;color:#fff}.user-geo-panel .user-geo-header .header-title-row h3{font-size:18px;font-weight:600;margin:0;color:#fff}.user-geo-panel .user-geo-header .close-btn{background:transparent;border:none;color:#fff;font-size:20px;cursor:pointer;padding:0;line-height:1;opacity:.7}.user-geo-panel .user-geo-header .close-btn:hover{opacity:1}.user-geo-panel .user-geo-description{font-size:14px;color:#fffc;line-height:1.6;margin-bottom:1rem}.user-geo-panel .user-geo-description p{margin:0 0 .75rem}.user-geo-panel .user-geo-content{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center}.user-geo-panel .user-geo-verifying{display:flex;flex-direction:column;align-items:center;text-align:center}.user-geo-panel .user-geo-verifying .geo-spinner-large{width:80px;height:80px;border:4px solid rgba(29,164,177,.2);border-top-color:var(--Primary-Uell, #1da4b1);border-radius:50%;animation:geo-spin 1s linear infinite;margin-bottom:1.5rem}.user-geo-panel .user-geo-verifying .verifying-title{color:#fff;font-size:16px;font-weight:600;margin:0 0 .25rem}.user-geo-panel .user-geo-verifying .verifying-subtitle{color:#fff9;font-size:14px;margin:0}.user-geo-panel .user-geo-verified{display:flex;flex-direction:column;align-items:center;text-align:center}.user-geo-panel .user-geo-verified .verified-icon-container{margin-bottom:1rem}.user-geo-panel .user-geo-verified .verified-icon-container .home-icon{display:block}.user-geo-panel .user-geo-verified .verified-icon-container .home-icon svg{width:120px;height:100px}.user-geo-panel .user-geo-verified .verified-title{color:#fff;font-size:16px;font-weight:600;margin:0}.user-geo-panel .user-geo-denied{display:flex;flex-direction:column;align-items:center;text-align:center}.user-geo-panel .user-geo-denied .denied-icon-container{width:100px;height:100px;border-radius:50%;background:rgba(244,67,54,.2);display:flex;align-items:center;justify-content:center;margin-bottom:1.5rem}.user-geo-panel .user-geo-denied .denied-icon-container i{font-size:48px;color:#f44336}.user-geo-panel .user-geo-denied .denied-title{color:#fff;font-size:16px;font-weight:600;margin:0 0 .5rem}.user-geo-panel .user-geo-denied .denied-subtitle{color:#fff9;font-size:14px;margin:0}.user-geo-panel .user-geo-btn{width:100%;padding:14px 24px;background:var(--Primary-Uell, #1da4b1);color:#fff;border:none;border-radius:24px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s ease;margin-top:auto;margin-bottom:1rem}.user-geo-panel .user-geo-btn:hover:not(.disabled){background:#178e99}.user-geo-panel .user-geo-btn.disabled{background:rgba(29,164,177,.5);cursor:not-allowed}.user-geo-panel .dev-controls{display:flex;align-items:center;gap:.5rem;padding:.75rem;background:rgba(0,0,0,.3);border-radius:6px;margin-bottom:1rem;flex-wrap:wrap}.user-geo-panel .dev-controls .dev-label{font-size:12px;color:#fff9;font-weight:600}.user-geo-panel .dev-controls .dev-btn{padding:4px 8px;font-size:11px;background:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.2);border-radius:4px;cursor:pointer;transition:all .2s ease}.user-geo-panel .dev-controls .dev-btn:hover{background:rgba(255,255,255,.2)}.user-geo-panel .user-geo-footer{display:flex;justify-content:center;gap:.75rem;padding-top:.5rem}.user-geo-panel .user-geo-footer .footer-icon{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,255,255,.1);color:#fff9;font-size:16px}.user-geo-panel .user-geo-footer .footer-icon.active{background:var(--Primary-Uell, #1da4b1);color:#fff}\n"] }]
|
|
422
|
-
}], ctorParameters: function () { return [{ type: i1.NgbActiveModal }, { type: i2.TasService }, { type: i3.GeolocationService }, { type: i4.DomSanitizer }]; }, propDecorators: { sessionId: [{
|
|
457
|
+
}], ctorParameters: function () { return [{ type: i1.NgbActiveModal }, { type: i2.TasService }, { type: i3.GeolocationService }, { type: i4.DomSanitizer }, { type: i1.NgbModal }]; }, propDecorators: { sessionId: [{
|
|
423
458
|
type: Input
|
|
424
459
|
}], token: [{
|
|
425
460
|
type: Input
|
|
@@ -444,4 +479,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
444
479
|
type: ViewChild,
|
|
445
480
|
args: ['subscriberContainer']
|
|
446
481
|
}] } });
|
|
447
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXZpZGVvY2FsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFDTCxTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUdmLGNBQWMsRUFHZCxTQUFTLEdBQ1YsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVVwQyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7O0FBUmxDLHlDQUF5QztBQUN6QyxNQUFNLENBQU4sSUFBWSxnQkFNWDtBQU5ELFdBQVksZ0JBQWdCO0lBQzFCLHFDQUFpQixDQUFBO0lBQ2pCLHVDQUFtQixDQUFBO0lBQ25CLDJDQUF1QixDQUFBO0lBQ3ZCLHlDQUFxQixDQUFBO0lBQ3JCLHFDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCO0FBUUQsTUFBTSxPQUFPLHFCQUFxQjtJQXVDaEMsWUFDUyxXQUEyQixFQUMxQixVQUFzQixFQUN0QixrQkFBc0MsRUFDdEMsU0FBdUI7UUFIeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsdUJB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RSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUN0RDtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7bUhBaGdCVSxxQkFBcUI7dUdBQXJCLHFCQUFxQiw0aEJDMUNsQyw2Nk1BdUtBOzRGRDdIYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsZUFBZTswTEFLaEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFMkIsa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQjtnQkFDRyxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFRhc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YXMuc2VydmljZSc7XG5pbXBvcnQgeyBHZW9sb2NhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW9sb2NhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENhbGxTdGF0ZSxcbiAgVmlld01vZGUsXG4gIFRhc0J1c2luZXNzUm9sZSxcbiAgV2FpdGluZ1Jvb21Vc2VyLFxuICBSb29tVXNlclN0YXR1cyxcbiAgVXNlckNhbGxBY3Rpb24sXG4gIFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCxcbiAgVXNlckdlb0luZm8sXG4gIEdlb1N0YXR1cyxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUQVNfSUNPTlMgfSBmcm9tICcuLi8uLi9pY29ucy90YXMtaWNvbnMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8qKiBVc2VyIGdlb2xvY2F0aW9uIHBhbmVsIHZpZXcgc3RhdGVzICovXG5leHBvcnQgZW51bSBVc2VyR2VvVmlld1N0YXRlIHtcbiAgSElEREVOID0gJ0hJRERFTicsXG4gIElOSVRJQUwgPSAnSU5JVElBTCcsXG4gIFZFUklGWUlORyA9ICdWRVJJRllJTkcnLFxuICBWRVJJRklFRCA9ICdWRVJJRklFRCcsXG4gIERFTklFRCA9ICdERU5JRUQnLFxufVxuaW1wb3J0IGludGVyYWN0IGZyb20gJ2ludGVyYWN0anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0YXMtdmlkZW9jYWxsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rhcy12aWRlb2NhbGwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YXMtdmlkZW9jYWxsLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhc1ZpZGVvY2FsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgc2Vzc2lvbklkITogc3RyaW5nO1xuICBASW5wdXQoKSB0b2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgYXBwb2ludG1lbnRJZD86IG51bWJlcjtcbiAgQElucHV0KCkgdmlkZW9DYWxsSWQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHVzZXJJZD86IG51bWJlcjsgLy8gQ3VycmVudCB1c2VyJ3MgSUQgZm9yIGdlbyByZXBvcnRpbmdcbiAgQElucHV0KCkgcGFydGljaXBhbnROYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdGVuYW50OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgYnVzaW5lc3NSb2xlOiBUYXNCdXNpbmVzc1JvbGUgPSBUYXNCdXNpbmVzc1JvbGUuVVNFUjtcbiAgQElucHV0KCkgaXNSZXR1cm5pbmdGcm9tUGlwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgncHVibGlzaGVyQ29udGFpbmVyJykgcHVibGlzaGVyQ29udGFpbmVyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3Vic2NyaWJlckNvbnRhaW5lcicpIHN1YnNjcmliZXJDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIHB1YmxpYyBpc1B1Ymxpc2hlclNtYWxsID0gdHJ1ZTtcbiAgcHVibGljIGNhbGxTdGF0ZSA9IENhbGxTdGF0ZS5JRExFO1xuICBwdWJsaWMgaXNNdXRlZCA9IGZhbHNlO1xuICBwdWJsaWMgd2FpdGluZ1Jvb21Vc2VyczogV2FpdGluZ1Jvb21Vc2VyW10gPSBbXTtcbiAgcHVibGljIG93bmVySGFzSm9pbmVkID0gZmFsc2U7XG4gIHB1YmxpYyBoYXNWaWRlb1N0cmVhbSA9IGZhbHNlO1xuICBwdWJsaWMgZGlzbWlzc2VkVXNlcnM6IG51bWJlcltdID0gW107XG4gIHB1YmxpYyBzaG93TG9jYXRpb25QYW5lbCA9IHRydWU7IC8vIFNob3cgYnkgZGVmYXVsdCBmb3Igb3duZXJzLCB3aWxsIGJlIHVwZGF0ZWQgYmFzZWQgb24gdXNlcidzIGxvY2F0aW9uIHN0YXR1c1xuICBwdWJsaWMgdXNlckhhc0xvY2F0aW9uID0gZmFsc2U7IC8vIFRyYWNrcyBpZiB0aGUgdXNlciBoYXMgc2hhcmVkIHRoZWlyIGxvY2F0aW9uXG4gIHB1YmxpYyBnZW9Mb2NhdGlvblN0YXR1czogJ3Vua25vd24nIHwgJ2FjdGl2ZScgfCAnZGVuaWVkJyA9ICd1bmtub3duJztcbiAgXG4gIC8vIEdlbyBwYW5lbCBzdGF0ZXMgZm9yIG93bmVyXG4gIHB1YmxpYyBnZW9SZXF1ZXN0QWN0aXZlID0gZmFsc2U7IC8vIE93bmVyIHNlbnQgcmVxdWVzdCwgd2FpdGluZyBmb3IgdXNlclxuICBwdWJsaWMgYWxsR2VvR3JhbnRlZCA9IGZhbHNlOyAvLyBBbGwgdXNlcnMgcmVzcG9uZGVkIHdpdGggZ2VvXG4gIHB1YmxpYyB1c2VyR2VvSW5mbzogVXNlckdlb0luZm9bXSA9IFtdOyAvLyBJbmRpdmlkdWFsIHVzZXIgZ2VvIHN0YXR1c1xuXG4gIC8vIFVzZXIgZ2VvIHBhbmVsIHN0YXRlIChmb3Igb3duZXJzKVxuICBwdWJsaWMgdXNlckdlb1ZpZXdTdGF0ZTogVXNlckdlb1ZpZXdTdGF0ZSA9IFVzZXJHZW9WaWV3U3RhdGUuSElEREVOO1xuICBwdWJsaWMgVXNlckdlb1ZpZXdTdGF0ZSA9IFVzZXJHZW9WaWV3U3RhdGU7IC8vIEV4cG9zZSBlbnVtIHRvIHRlbXBsYXRlXG4gIHB1YmxpYyBob21lSWNvbjogU2FmZUh0bWw7XG4gIHB1YmxpYyBkZXZNb2RlRW5hYmxlZCA9IGZhbHNlOyAvLyBFbmFibGUgZGV2IGNvbnRyb2xzIGZvciB0ZXN0aW5nXG4gIHByaXZhdGUgZ2VvUGFuZWxEaXNtaXNzZWQgPSBmYWxzZTsgLy8gVHJhY2sgaWYgb3duZXIgbWFudWFsbHkgY2xvc2VkIHRoZSBwYW5lbFxuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxuICAgIHByaXZhdGUgdGFzU2VydmljZTogVGFzU2VydmljZSxcbiAgICBwcml2YXRlIGdlb2xvY2F0aW9uU2VydmljZTogR2VvbG9jYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7XG4gICAgdGhpcy5ob21lSWNvbiA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFRBU19JQ09OUy5ob21lKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBTdWJzY3JpcHRpb25zKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ2FsbCgpO1xuICAgIFxuICAgIC8vIEZvciBvd25lcnM6IHNob3cgdGhlIGdlbyBwYW5lbCB0byByZXF1ZXN0IHVzZXIgbG9jYXRpb24gKHVubGVzcyBkaXNtaXNzZWQpXG4gICAgaWYgKHRoaXMuY2FuQWRtaXRVc2VycyAmJiAhdGhpcy5nZW9QYW5lbERpc21pc3NlZCkge1xuICAgICAgdGhpcy51c2VyR2VvVmlld1N0YXRlID0gVXNlckdlb1ZpZXdTdGF0ZS5JTklUSUFMO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRJbnRlcmFjdCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy50YXNTZXJ2aWNlLnJlc2V0UG9sbGluZ1N0YXRlKCk7XG5cbiAgICAvLyBPbmx5IGRpc2Nvbm5lY3QgaWYgbm90IGluIFBpUCBtb2RlIChrZWVwIHNlc3Npb24gYWxpdmUgZm9yIGZsb2F0aW5nIHdpbmRvdylcbiAgICBpZiAoIXRoaXMudGFzU2VydmljZS5pc1BpcE1vZGUoKSkge1xuICAgICAgdGhpcy50YXNTZXJ2aWNlLmRpc2Nvbm5lY3RTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgaW50ZXJhY3QoJy5wdWJsaXNoZXItdmlldycpLnVuc2V0KCk7XG4gIH1cblxuICAvLyBQdWJsaWMgTWV0aG9kc1xuICBoYW5nVXAoKTogdm9pZCB7XG4gICAgdGhpcy50YXNTZXJ2aWNlLmRpc2Nvbm5lY3RTZXNzaW9uKCk7XG4gIH1cblxuICB0b2dnbGVNdXRlKCk6IHZvaWQge1xuICAgIHRoaXMudGFzU2VydmljZS50b2dnbGVNdXRlKCk7XG4gIH1cblxuICBtaW5pbWl6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhc1NlcnZpY2UubW92ZU1haW5WaWRlb1RvKCdwaXAtbWFpbi12aWRlbycpO1xuICAgIC8vIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSB2aWRlbyBpcyBtb3ZlZCBiZWZvcmUgY2xvc2luZyBtb2RhbFxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy50YXNTZXJ2aWNlLmVudGVyUGlwTW9kZSgpLCA1MCk7XG4gIH1cblxuICB0b2dnbGVTd2FwKCk6IHZvaWQge1xuICAgIHRoaXMuaXNQdWJsaXNoZXJTbWFsbCA9ICF0aGlzLmlzUHVibGlzaGVyU21hbGw7XG4gICAgdGhpcy5yZXNldFZpZGVvUG9zaXRpb25zKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmluaXRJbnRlcmFjdCgpKTtcbiAgfVxuXG4gIG9uRG91YmxlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVTd2FwKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY3VycmVudCB1c2VyIGNhbiBhZG1pdCBvdGhlcnMgKE9XTkVSLCBCQUNLT0ZGSUNFLCBvciBNT0RFUkFUT1IpXG4gICAqL1xuICBnZXQgY2FuQWRtaXRVc2VycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5idXNpbmVzc1JvbGUgPT09IFRhc0J1c2luZXNzUm9sZS5CQUNLT0ZGSUNFIHx8XG4gICAgICB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVGFzQnVzaW5lc3NSb2xlLkFETUlOX01BTkFHRVIgfHxcbiAgICAgIHRoaXMuYnVzaW5lc3NSb2xlID09PSBUYXNCdXNpbmVzc1JvbGUuTUFOQUdFUlxuICAgICk7XG4gIH1cblxuICAvKiogVXNlcnMgd2l0aCBwZW5kaW5nIGdlbyBzdGF0dXMgKi9cbiAgZ2V0IHBlbmRpbmdVc2VycygpOiBVc2VyR2VvSW5mb1tdIHtcbiAgICByZXR1cm4gdGhpcy51c2VyR2VvSW5mby5maWx0ZXIodSA9PiB1Lmdlb1N0YXR1cyA9PT0gR2VvU3RhdHVzLlBFTkRJTkcpO1xuICB9XG5cbiAgLyoqIFVzZXJzIHdobyBncmFudGVkIGdlbyAqL1xuICBnZXQgZ3JhbnRlZFVzZXJzKCk6IFVzZXJHZW9JbmZvW10ge1xuICAgIHJldHVybiB0aGlzLnVzZXJHZW9JbmZvLmZpbHRlcih1ID0+IHUuZ2VvU3RhdHVzID09PSBHZW9TdGF0dXMuR1JBTlRFRCk7XG4gIH1cblxuICAvKiogVXNlcnMgd2hvIGRlbmllZCBnZW8gKi9cbiAgZ2V0IGRlbmllZFVzZXJzKCk6IFVzZXJHZW9JbmZvW10ge1xuICAgIHJldHVybiB0aGlzLnVzZXJHZW9JbmZvLmZpbHRlcih1ID0+IHUuZ2VvU3RhdHVzID09PSBHZW9TdGF0dXMuREVOSUVEKTtcbiAgfVxuXG4gIC8qKiBTaG93IGxvY2F0aW9uIHBhbmVsIG9ubHkgaWYgb3duZXIgYW5kIHRoZXJlIGFyZSB1c2VycyB3aG8gaGF2ZW4ndCBncmFudGVkICovXG4gIGdldCBzaG91bGRTaG93TG9jYXRpb25QYW5lbCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FuQWRtaXRVc2VycyB8fCB0aGlzLnVzZXJHZW9JbmZvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBIaWRlIGlmIGFsbCB1c2VycyBoYXZlIGdyYW50ZWRcbiAgICBjb25zdCBhbGxHcmFudGVkID0gdGhpcy51c2VyR2VvSW5mby5ldmVyeSh1ID0+IHUuZ2VvU3RhdHVzID09PSBHZW9TdGF0dXMuR1JBTlRFRCk7XG4gICAgcmV0dXJuICFhbGxHcmFudGVkO1xuICB9XG5cbiAgLyoqIENoZWNrIGlmIGFueSB1c2VyIGhhcyBkZW5pZWQgZ2VvICovXG4gIGdldCBoYXNBbnlEZW5pZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVuaWVkVXNlcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKiBTaG93IHVzZXIgZ2VvIHBhbmVsIGZvciBvd25lcnMgd2hlbiBub3QgaGlkZGVuICovXG4gIGdldCBzaG91bGRTaG93VXNlckdlb1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhbkFkbWl0VXNlcnMgJiYgdGhpcy51c2VyR2VvVmlld1N0YXRlICE9PSBVc2VyR2VvVmlld1N0YXRlLkhJRERFTjtcbiAgfVxuXG4gIC8qKiBTZXQgdXNlciBnZW8gdmlldyBzdGF0ZSAoZm9yIGRldiBjb250cm9scyBvciBjbG9zZSBidXR0b24pICovXG4gIHNldFVzZXJHZW9WaWV3U3RhdGUoc3RhdGU6IFVzZXJHZW9WaWV3U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJHZW9WaWV3U3RhdGUgPSBzdGF0ZTtcbiAgICAvLyBUcmFjayBpZiBvd25lciBtYW51YWxseSBkaXNtaXNzZWQgdGhlIHBhbmVsXG4gICAgaWYgKHN0YXRlID09PSBVc2VyR2VvVmlld1N0YXRlLkhJRERFTikge1xuICAgICAgdGhpcy5nZW9QYW5lbERpc21pc3NlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkbWl0IGEgdXNlciBmcm9tIHRoZSB3YWl0aW5nIHJvb21cbiAgICovXG4gIGFkbWl0VXNlcih1c2VySWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy52aWRlb0NhbGxJZCkge1xuICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IGFkbWl0IHVzZXI6IHZpZGVvQ2FsbElkIG5vdCBzZXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRhc1NlcnZpY2VcbiAgICAgIC5tb2RpZnlQcm94eVZpZGVvVXNlcih7XG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgdmlkZW9DYWxsSWQ6IHRoaXMudmlkZW9DYWxsSWQsXG4gICAgICAgIGFjdGlvbjogVXNlckNhbGxBY3Rpb24uV0FJVElOR19ST09NX0xFQVZFLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgLy8gUmVtb3ZlIHVzZXIgZnJvbSB3YWl0aW5nIGxpc3QgYWZ0ZXIgc3VjY2Vzc2Z1bCBhZG1pdFxuICAgICAgICAgIHRoaXMud2FpdGluZ1Jvb21Vc2VycyA9IHRoaXMud2FpdGluZ1Jvb21Vc2Vycy5maWx0ZXIoXG4gICAgICAgICAgICAodSkgPT4gdS51c2VySWQgIT09IHVzZXJJZFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRtaXR0aW5nIHVzZXI6JywgZXJyKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc21pc3MgdGhlIHdhaXRpbmcgcm9vbSBub3RpZmljYXRpb24gZm9yIGEgdXNlclxuICAgKi9cbiAgZGlzbWlzc1dhaXRpbmdOb3RpZmljYXRpb24odXNlcklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmRpc21pc3NlZFVzZXJzLnB1c2godXNlcklkKTtcbiAgICB0aGlzLndhaXRpbmdSb29tVXNlcnMgPSB0aGlzLndhaXRpbmdSb29tVXNlcnMuZmlsdGVyKFxuICAgICAgKHUpID0+IHUudXNlcklkICE9PSB1c2VySWRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSBsb2NhdGlvbiBwYW5lbFxuICAgKi9cbiAgY2xvc2VMb2NhdGlvblBhbmVsKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0xvY2F0aW9uUGFuZWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSB1c2VyIHRvIHNoYXJlIHRoZWlyIGxvY2F0aW9uIChjYWxsZWQgYnkgb3duZXIpXG4gICAqL1xuICByZXF1ZXN0VXNlckxvY2F0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52aWRlb0NhbGxJZCkge1xuICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHJlcXVlc3QgbG9jYXRpb246IHZpZGVvQ2FsbElkIG5vdCBzZXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYm9keTogUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0ID0ge1xuICAgICAgdmlkZW9DYWxsSWQ6IHRoaXMudmlkZW9DYWxsSWQsXG4gICAgICBhY3Rpb246IFVzZXJDYWxsQWN0aW9uLlJFUVVFU1RfR0VPTE9DQUxJWkFUSU9OLFxuICAgIH07XG5cbiAgICB0aGlzLnRhc1NlcnZpY2UubW9kaWZ5UHJveHlWaWRlb1VzZXIoYm9keSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0xvY2F0aW9uIHJlcXVlc3Qgc2VudCcpO1xuICAgICAgICAvLyBTZXQgcGFuZWwgdG8gdmVyaWZ5aW5nIHN0YXRlIHdoaWxlIHdhaXRpbmcgZm9yIHVzZXIgcmVzcG9uc2VcbiAgICAgICAgdGhpcy51c2VyR2VvVmlld1N0YXRlID0gVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRllJTkc7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlcXVlc3RpbmcgbG9jYXRpb246JywgZXJyKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFByaXZhdGUgTWV0aG9kc1xuICBwcml2YXRlIHNldHVwU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICAvLyBDYWxsIHN0YXRlIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2UuY2FsbFN0YXRlJC5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMuY2FsbFN0YXRlID0gc3RhdGU7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gQ2FsbFN0YXRlLkRJU0NPTk5FQ1RFRCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ2hhbmd1cCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIGlmIHdlIGhhdmUgYW4gYWN0aXZlIHZpZGVvIHN0cmVhbVxuICAgICAgICB0aGlzLmhhc1ZpZGVvU3RyZWFtID0gc3RhdGUgPT09IENhbGxTdGF0ZS5DT05ORUNURUQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBWaWV3IG1vZGUgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS52aWV3TW9kZSQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XG4gICAgICAgIGlmIChtb2RlID09PSBWaWV3TW9kZS5QSVApIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdwaXAnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTXV0ZSBzdGF0ZSBzdWJzY3JpcHRpb25cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmlzTXV0ZWQkLnN1YnNjcmliZSgobXV0ZWQpID0+IHtcbiAgICAgICAgdGhpcy5pc011dGVkID0gbXV0ZWQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBXYWl0aW5nIHJvb20gdXNlcnMgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS53YWl0aW5nUm9vbVVzZXJzJC5zdWJzY3JpYmUoKHVzZXJzKSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgZGlzbWlzc2VkIHVzZXJzXG4gICAgICAgIHRoaXMud2FpdGluZ1Jvb21Vc2VycyA9IHVzZXJzLmZpbHRlcihcbiAgICAgICAgICAodSkgPT4gIXRoaXMuZGlzbWlzc2VkVXNlcnMuaW5jbHVkZXModS51c2VySWQpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBPd25lciBqb2luIHN0YXR1cyBzdWJzY3JpcHRpb25cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLm93bmVySGFzSm9pbmVkJC5zdWJzY3JpYmUoKGpvaW5lZCkgPT4ge1xuICAgICAgICB0aGlzLm93bmVySGFzSm9pbmVkID0gam9pbmVkO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gT3duZXIgbGVmdCBzdWJzY3JpcHRpb24gLSBkaXNjb25uZWN0IG5vbi1vd25lcnNcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLm93bmVySGFzTGVmdCQuc3Vic2NyaWJlKChoYXNMZWZ0KSA9PiB7XG4gICAgICAgIGlmIChoYXNMZWZ0ICYmICF0aGlzLmNhbkFkbWl0VXNlcnMpIHsgLy8gTm9uLW93bmVyIHVzZXJcblxuICAgICAgICAgIHRoaXMuaGFuZ1VwKCk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnb3duZXJfbGVmdCcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBBY3RpdmF0ZUdlbyBzdWJzY3JpcHRpb24gLSBvbmx5IGZvciBub24tb3duZXJzICh1c2VycylcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmFjdGl2YXRlR2VvJC5zdWJzY3JpYmUoKGFjdGl2YXRlR2VvKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmF0ZUdlbyAmJiAhdGhpcy5jYW5BZG1pdFVzZXJzKSB7XG5cbiAgICAgICAgICB0aGlzLmhhbmRsZUFjdGl2YXRlR2VvKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdlb1JlcXVlc3RBY3RpdmUgc3Vic2NyaXB0aW9uIC0gZm9yIG93bmVyc1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2UuZ2VvUmVxdWVzdEFjdGl2ZSQuc3Vic2NyaWJlKChhY3RpdmUpID0+IHtcblxuICAgICAgICB0aGlzLmdlb1JlcXVlc3RBY3RpdmUgPSBhY3RpdmU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBBbGxHZW9HcmFudGVkIHN1YnNjcmlwdGlvbiAtIGZvciBvd25lcnMgdG8gdXBkYXRlIHBhbmVsIHN0YXRlXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS5hbGxHZW9HcmFudGVkJC5zdWJzY3JpYmUoKGdyYW50ZWQpID0+IHtcbiAgICAgICAgdGhpcy5hbGxHZW9HcmFudGVkID0gZ3JhbnRlZDtcbiAgICAgICAgXG4gICAgICAgIC8vIEZvciBvd25lcnM6IHVwZGF0ZSBwYW5lbCBzdGF0ZSBiYXNlZCBvbiBnZW8gc3RhdHVzXG4gICAgICAgIGlmICh0aGlzLmNhbkFkbWl0VXNlcnMgJiYgZ3JhbnRlZCkge1xuICAgICAgICAgIHRoaXMudXNlckdlb1ZpZXdTdGF0ZSA9IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZJRUQ7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFVzZXJHZW9JbmZvIHN1YnNjcmlwdGlvbiAtIGZvciBvd25lciBnZW8gcGFuZWxcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLnVzZXJHZW9JbmZvJC5zdWJzY3JpYmUoKGluZm8pID0+IHtcbiAgICAgICAgdGhpcy51c2VyR2VvSW5mbyA9IGluZm87XG4gICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IGF1dG8tc3dpdGNoIHRvIERFTklFRCBoZXJlIC0gdGhhdCBvbmx5IGhhcHBlbnMgXG4gICAgICAgIC8vIGFmdGVyIG93bmVyIHJlcXVlc3RzIGFuZCB1c2VyIGRlbmllcyAodmlhIGdlb1JlcXVlc3RBY3RpdmUgZmxvdylcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWN0aXZhdGVHZW8gcmVxdWVzdCBmcm9tIGJhY2tlbmQgKGZvciBub24tb3duZXIgdXNlcnMpLlxuICAgKiBEaXJlY3RseSBwcm9tcHRzIGJyb3dzZXIgZm9yIGdlb2xvY2F0aW9uIC0gbm8gcGFuZWwgZm9yIHVzZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBY3RpdmF0ZUdlbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDbGVhciBhbnkgY2FjaGVkIHBvc2l0aW9uIHRvIGZvcmNlIHJlLXByb21wdGluZ1xuICAgIHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmNsZWFyQ2FjaGUoKTtcbiAgICBcbiAgICAvLyBSZXF1ZXN0IGdlb2xvY2F0aW9uIGZyb20gdXNlciAoYnJvd3NlciB3aWxsIHByb21wdClcbiAgICBjb25zdCBwb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRQb3NpdGlvbigpO1xuICAgIFxuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgdGhpcy5nZW9Mb2NhdGlvblN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgdGhpcy5yZXBvcnRHZW9TdGF0dXMocG9zaXRpb24ubGF0aXR1ZGUsIHBvc2l0aW9uLmxvbmdpdHVkZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2VvTG9jYXRpb25TdGF0dXMgPSAnZGVuaWVkJztcbiAgICAgIHRoaXMuZGVueUdlb0xvY2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXJ0IGdlb2xvY2F0aW9uIHZlcmlmaWNhdGlvbiAoY2FsbGVkIGZyb20gdGVtcGxhdGUgYnV0dG9uKSAqL1xuICBwdWJsaWMgYXN5bmMgc3RhcnRHZW9WZXJpZmljYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy51c2VyR2VvVmlld1N0YXRlID0gVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRllJTkc7XG5cbiAgICAvLyBDbGVhciBhbnkgY2FjaGVkIHBvc2l0aW9uIHRvIGZvcmNlIHJlLXByb21wdGluZ1xuICAgIHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmNsZWFyQ2FjaGUoKTtcbiAgICBcbiAgICAvLyBSZXF1ZXN0IGdlb2xvY2F0aW9uIGZyb20gdXNlciAoYnJvd3NlciB3aWxsIHByb21wdClcbiAgICBjb25zdCBwb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRQb3NpdGlvbigpO1xuICAgIFxuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgdGhpcy5nZW9Mb2NhdGlvblN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgdGhpcy51c2VyR2VvVmlld1N0YXRlID0gVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRklFRDtcbiAgICAgIHRoaXMucmVwb3J0R2VvU3RhdHVzKHBvc2l0aW9uLmxhdGl0dWRlLCBwb3NpdGlvbi5sb25naXR1ZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdlb0xvY2F0aW9uU3RhdHVzID0gJ2RlbmllZCc7XG4gICAgICB0aGlzLnVzZXJHZW9WaWV3U3RhdGUgPSBVc2VyR2VvVmlld1N0YXRlLkRFTklFRDtcbiAgICAgIHRoaXMuZGVueUdlb0xvY2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBncmFudGVkIGdlb2xvY2F0aW9uIHRvIGJhY2tlbmQuXG4gICAqIElNUE9SVEFOVDogT25seSBjYWxsIHdpdGggdmFsaWQgY29vcmRpbmF0ZXMuXG4gICAqL1xuICBwcml2YXRlIHJlcG9ydEdlb1N0YXR1cyhsYXRpdHVkZTogbnVtYmVyLCBsb25naXR1ZGU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy52aWRlb0NhbGxJZCkge1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY29vcmRpbmF0ZXMgYXJlIHByZXNlbnRcbiAgICBpZiAobGF0aXR1ZGUgPT09IHVuZGVmaW5lZCB8fCBsYXRpdHVkZSA9PT0gbnVsbCB8fCBsb25naXR1ZGUgPT09IHVuZGVmaW5lZCB8fCBsb25naXR1ZGUgPT09IG51bGwpIHtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHk6IFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCA9IHtcbiAgICAgIHVzZXJJZDogdGhpcy51c2VySWQsXG4gICAgICB2aWRlb0NhbGxJZDogdGhpcy52aWRlb0NhbGxJZCxcbiAgICAgIGFjdGlvbjogVXNlckNhbGxBY3Rpb24uQUNUSVZBVEVfR0VPTE9DQVRJT04sXG4gICAgICBsYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZSxcbiAgICB9O1xuXG5cbiAgICB0aGlzLnRhc1NlcnZpY2UubW9kaWZ5UHJveHlWaWRlb1VzZXIoYm9keSkuc3Vic2NyaWJlKHtcblxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBkZW5pZWQgZ2VvbG9jYXRpb24gdG8gYmFja2VuZC5cbiAgICovXG4gIHByaXZhdGUgZGVueUdlb0xvY2F0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52aWRlb0NhbGxJZCkge1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9keTogUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0ID0ge1xuICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcbiAgICAgIHZpZGVvQ2FsbElkOiB0aGlzLnZpZGVvQ2FsbElkLFxuICAgICAgYWN0aW9uOiBVc2VyQ2FsbEFjdGlvbi5ERU5ZX0dFT0xPQ0FUSU9OLFxuICAgIH07XG5cblxuICAgIHRoaXMudGFzU2VydmljZS5tb2RpZnlQcm94eVZpZGVvVXNlcihib2R5KS5zdWJzY3JpYmUoe1xuXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDYWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmV0dXJuaW5nRnJvbVBpcCkge1xuICAgICAgLy8gUmV0dXJuaW5nIGZyb20gUGlQIC0ganVzdCBtb3ZlIHZpZGVvcyBiYWNrXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudGFzU2VydmljZS5tb3ZlVmlkZW9zVG9GdWxsc2NyZWVuKCksIDEwMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlc3Npb25JZCAmJiB0aGlzLnRva2VuKSB7XG4gICAgICAvLyBOZXcgY2FsbCAtIGNvbm5lY3QgdG8gc2Vzc2lvblxuICAgICAgdGhpcy50YXNTZXJ2aWNlXG4gICAgICAgIC5jb25uZWN0U2Vzc2lvbihcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICB0aGlzLnRva2VuLFxuICAgICAgICAgICdwdWJsaXNoZXItY29udGFpbmVyJyxcbiAgICAgICAgICAnc3Vic2NyaWJlci1jb250YWluZXInLFxuICAgICAgICAgIHRoaXMuYnVzaW5lc3NSb2xlXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb25uZWN0aW5nIHRvIHZpZGVvIGNhbGw6JywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFN0YXJ0IHN0YXR1cyBwb2xsaW5nIHdpdGggc2hvcnRlciBpbnRlcnZhbCAoNXMpIHRvIGRldGVjdCBvd25lciBsZWF2aW5nL2xvY2F0aW9uIHJlcXVlc3RzXG4gICAgICBpZiAodGhpcy5hcHBvaW50bWVudElkKSB7XG4gICAgICAgIHRoaXMudGFzU2VydmljZS5zdGFydFN0YXR1c1BvbGxpbmcoe1xuICAgICAgICAgIGFwcG9pbnRtZW50SWQ6IHRoaXMuYXBwb2ludG1lbnRJZCxcbiAgICAgICAgICB0ZW5hbnQ6IHRoaXMudGVuYW50LFxuICAgICAgICAgIGJ1c2luZXNzUm9sZTogdGhpcy5idXNpbmVzc1JvbGUsXG4gICAgICAgICAgcm9vbVR5cGU6IHVuZGVmaW5lZCwgLy8gUm9vbVR5cGUgbWlnaHQgYmUgbmVlZGVkIGlmIGF2YWlsYWJsZVxuICAgICAgICAgIGVudGl0eUlkOiB1bmRlZmluZWQsIC8vIEVudGl0eUlkIG1pZ2h0IGJlIG5lZWRlZCBpZiBhdmFpbGFibGVcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkXG4gICAgICAgIH0sIDUwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRWaWRlb1Bvc2l0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBwdWJsaXNoZXJFbCA9IHRoaXMucHVibGlzaGVyQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHN1YnNjcmliZXJFbCA9IHRoaXMuc3Vic2NyaWJlckNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChwdWJsaXNoZXJFbCkge1xuICAgICAgcHVibGlzaGVyRWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgcHVibGlzaGVyRWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXgnKTtcbiAgICAgIHB1Ymxpc2hlckVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS15Jyk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnNjcmliZXJFbCkge1xuICAgICAgc3Vic2NyaWJlckVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIHN1YnNjcmliZXJFbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEteCcpO1xuICAgICAgc3Vic2NyaWJlckVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS15Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0SW50ZXJhY3QoKTogdm9pZCB7XG4gICAgaW50ZXJhY3QoJy5wdWJsaXNoZXItdmlldycpLnVuc2V0KCk7XG5cbiAgICBpbnRlcmFjdCgnLnB1Ymxpc2hlci12aWV3JylcbiAgICAgIC5kcmFnZ2FibGUoe1xuICAgICAgICBpbmVydGlhOiB0cnVlLFxuICAgICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgICBpbnRlcmFjdC5tb2RpZmllcnMucmVzdHJpY3RSZWN0KHtcbiAgICAgICAgICAgIHJlc3RyaWN0aW9uOiAncGFyZW50JyxcbiAgICAgICAgICAgIGVuZE9ubHk6IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGF1dG9TY3JvbGw6IHRydWUsXG4gICAgICAgIGxpc3RlbmVyczoge1xuICAgICAgICAgIG1vdmU6IChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgY29uc3QgeCA9IChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteCcpKSB8fCAwKSArIGV2ZW50LmR4O1xuICAgICAgICAgICAgY29uc3QgeSA9IChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteScpKSB8fCAwKSArIGV2ZW50LmR5O1xuXG4gICAgICAgICAgICB0YXJnZXQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICAgICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS14JywgU3RyaW5nKHgpKTtcbiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteScsIFN0cmluZyh5KSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucmVzaXphYmxlKHtcbiAgICAgICAgZWRnZXM6IHsgbGVmdDogZmFsc2UsIHJpZ2h0OiB0cnVlLCBib3R0b206IHRydWUsIHRvcDogZmFsc2UgfSxcbiAgICAgICAgbGlzdGVuZXJzOiB7XG4gICAgICAgICAgbW92ZTogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBsZXQgeCA9IHBhcnNlRmxvYXQodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS14JykpIHx8IDA7XG4gICAgICAgICAgICBsZXQgeSA9IHBhcnNlRmxvYXQodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS15JykpIHx8IDA7XG5cbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS53aWR0aCA9IGAke2V2ZW50LnJlY3Qud2lkdGh9cHhgO1xuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IGAke2V2ZW50LnJlY3QuaGVpZ2h0fXB4YDtcblxuICAgICAgICAgICAgeCArPSBldmVudC5kZWx0YVJlY3QubGVmdDtcbiAgICAgICAgICAgIHkgKz0gZXZlbnQuZGVsdGFSZWN0LnRvcDtcblxuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgpYDtcbiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteCcsIFN0cmluZyh4KSk7XG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLXknLCBTdHJpbmcoeSkpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdEVkZ2VzKHsgb3V0ZXI6ICdwYXJlbnQnIH0pLFxuICAgICAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdFNpemUoeyBtaW46IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxMDAgfSB9KSxcbiAgICAgICAgICBpbnRlcmFjdC5tb2RpZmllcnMuYXNwZWN0UmF0aW8oeyByYXRpbzogJ3ByZXNlcnZlJyB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgaW5lcnRpYTogdHJ1ZSxcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFzLXZpZGVvY2FsbC13cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ0YXMtdmlkZW9jYWxsLWNvbnRhaW5lclwiPlxuICAgIDwhLS0gU3Vic2NyaWJlciB2aWRlbyAobGFyZ2UsIGJhY2tncm91bmQpIC0tPlxuICAgIDxkaXZcbiAgICAgIGlkPVwic3Vic2NyaWJlci1jb250YWluZXJcIlxuICAgICAgW2NsYXNzLnN1YnNjcmliZXItdmlld109XCJpc1B1Ymxpc2hlclNtYWxsXCJcbiAgICAgIFtjbGFzcy5wdWJsaXNoZXItdmlld109XCIhaXNQdWJsaXNoZXJTbWFsbFwiXG4gICAgICAjc3Vic2NyaWJlckNvbnRhaW5lclxuICAgICAgKGRibGNsaWNrKT1cIm9uRG91YmxlQ2xpY2soKVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPCEtLSBQdWJsaXNoZXIgdmlkZW8gKHNtYWxsLCBvdmVybGF5KSAtLT5cbiAgICA8ZGl2XG4gICAgICBpZD1cInB1Ymxpc2hlci1jb250YWluZXJcIlxuICAgICAgW2NsYXNzLnB1Ymxpc2hlci12aWV3XT1cImlzUHVibGlzaGVyU21hbGxcIlxuICAgICAgW2NsYXNzLnN1YnNjcmliZXItdmlld109XCIhaXNQdWJsaXNoZXJTbWFsbFwiXG4gICAgICAjcHVibGlzaGVyQ29udGFpbmVyXG4gICAgICAoZGJsY2xpY2spPVwib25Eb3VibGVDbGljaygpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8IS0tIENlbnRlcmVkIGF2YXRhciAoc2hvd24gd2hlbiBubyB2aWRlbyBzdHJlYW0pIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY29udGFpbmVyXCIgKm5nSWY9XCIhaGFzVmlkZW9TdHJlYW1cIj5cbiAgICAgIDx0YXMtYXZhdGFyIFtuYW1lXT1cInBhcnRpY2lwYW50TmFtZVwiIFtzaXplXT1cIjgwXCI+PC90YXMtYXZhdGFyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDb250cm9scyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbHMtY29udGFpbmVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGNvbnRyb2wtYnRuIG11dGUtYnRuXCJcbiAgICAgICAgW2NsYXNzLm11dGVkXT1cImlzTXV0ZWRcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlTXV0ZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cImlzTXV0ZWQgPyAnQWN0aXZhciBtaWNyw7Nmb25vJyA6ICdTaWxlbmNpYXIgbWljcsOzZm9ubydcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzTXV0ZWQgPyAnQWN0aXZhciBtaWNyw7Nmb25vJyA6ICdTaWxlbmNpYXIgbWljcsOzZm9ubydcIlxuICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiZmFcIlxuICAgICAgICAgIFtjbGFzcy5mYS1taWNyb3Bob25lXT1cIiFpc011dGVkXCJcbiAgICAgICAgICBbY2xhc3MuZmEtbWljcm9waG9uZS1zbGFzaF09XCJpc011dGVkXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBjb250cm9sLWJ0biBzd2FwLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTd2FwKClcIlxuICAgICAgICB0aXRsZT1cIkludGVyY2FtYmlhciB2aXN0YVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJJbnRlcmNhbWJpYXIgdmlzdGFcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gY29udHJvbC1idG4gcGlwLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJtaW5pbWl6ZSgpXCJcbiAgICAgICAgdGl0bGU9XCJNaW5pbWl6YXIgKFBpY3R1cmUgaW4gUGljdHVyZSlcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiTWluaW1pemFyIHZpZGVvbGxhbWFkYVwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29tcHJlc3NcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gY29udHJvbC1idG4gaGFuZ3VwLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJoYW5nVXAoKVwiXG4gICAgICAgIHRpdGxlPVwiRmluYWxpemFyIGxsYW1hZGFcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiRmluYWxpemFyIGxsYW1hZGFcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBob25lXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFdhaXRpbmcgcm9vbSBub3RpZmljYXRpb24gKHNob3duIGZvciBPV05FUi9CQUNLT0ZGSUNFIG9ubHkpIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwid2FpdGluZy1ub3RpZmljYXRpb25cIlxuICAgICAgKm5nSWY9XCJ3YWl0aW5nUm9vbVVzZXJzLmxlbmd0aCA+IDAgJiYgY2FuQWRtaXRVc2Vyc1wiXG4gICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cIndhaXRpbmctdGV4dFwiPlxuICAgICAgICB7eyB3YWl0aW5nUm9vbVVzZXJzWzBdLm5hbWUgfX0gZXN0w6EgZW4gbGEgc2FsYSBkZSBlc3BlcmEuXG4gICAgICA8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYWRtaXQtYnRuXCJcbiAgICAgICAgKGNsaWNrKT1cImFkbWl0VXNlcih3YWl0aW5nUm9vbVVzZXJzWzBdLnVzZXJJZClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQWRtaXRpciB1c3VhcmlvXCJcbiAgICAgID5cbiAgICAgICAgQWRtaXRpclxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiZGlzbWlzcy1idG5cIlxuICAgICAgICAoY2xpY2spPVwiZGlzbWlzc1dhaXRpbmdOb3RpZmljYXRpb24od2FpdGluZ1Jvb21Vc2Vyc1swXS51c2VySWQpXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNlcnJhciBub3RpZmljYWNpw7NuXCJcbiAgICAgID5cbiAgICAgICAgw5dcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIE93bmVyIGdlb2xvY2F0aW9uIHBhbmVsIChmb3Igb3duZXJzIHRvIHJlcXVlc3QgdXNlciBsb2NhdGlvbikgLS0+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWdlby1wYW5lbFwiICpuZ0lmPVwic2hvdWxkU2hvd1VzZXJHZW9QYW5lbCB8fCBkZXZNb2RlRW5hYmxlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdlby1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtcm93XCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbWFwLW1hcmtlciBoZWFkZXItaWNvblwiICpuZ0lmPVwidXNlckdlb1ZpZXdTdGF0ZSAhPT0gVXNlckdlb1ZpZXdTdGF0ZS5JTklUSUFMXCI+PC9pPlxuICAgICAgICA8aDM+VWJpY2FjacOzbiBkZWwgY29sYWJvcmFkb3I8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cInNldFVzZXJHZW9WaWV3U3RhdGUoVXNlckdlb1ZpZXdTdGF0ZS5ISURERU4pXCIgYXJpYS1sYWJlbD1cIkNlcnJhclwiPsOXPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1nZW8tZGVzY3JpcHRpb25cIiAqbmdJZj1cInVzZXJHZW9WaWV3U3RhdGUgIT09IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZJRUQgJiYgdXNlckdlb1ZpZXdTdGF0ZSAhPT0gVXNlckdlb1ZpZXdTdGF0ZS5ERU5JRURcIj5cbiAgICAgIDxwPkVsIGNvbGFib3JhZG9yIHRpZW5lIGxhIHViaWNhY2nDs24gZGVzYWN0aXZhZGEsIHNvbGljaXRhIHF1ZSBsYSBhY3RpdmUuPC9wPlxuICAgICAgPHA+RXN0YSBhY2Npw7NuIG5vcyBwZXJtaXRpcsOhIGRpc3BvbmliaWxpemFyIGFsZ3VuYXMgYWxlcnRhcy48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1nZW8tY29udGVudFwiPlxuICAgICAgPCEtLSBJTklUSUFMIHN0YXRlOiBqdXN0IHRoZSBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckdlb1ZpZXdTdGF0ZSA9PT0gVXNlckdlb1ZpZXdTdGF0ZS5JTklUSUFMXCI+XG4gICAgICAgIDwhLS0gc3BhY2VyIC0tPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gVkVSSUZZSU5HIHN0YXRlOiBzcGlubmVyICsgbG9hZGluZyBtZXNzYWdlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJHZW9WaWV3U3RhdGUgPT09IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZZSU5HXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdlby12ZXJpZnlpbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvLXNwaW5uZXItbGFyZ2VcIj48L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cInZlcmlmeWluZy10aXRsZVwiPlZlcmlmaWNhbmRvIHViaWNhY2nDs24uLi48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ2ZXJpZnlpbmctc3VidGl0bGVcIj5Fc3RvIHB1ZWRlIHRhcmRhciB1bm9zIHNlZ3VuZG9zLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBWRVJJRklFRCBzdGF0ZTogaG9tZSBpY29uIHdpdGggc3BhcmtsZXMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckdlb1ZpZXdTdGF0ZSA9PT0gVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRklFRFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1nZW8tdmVyaWZpZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVyaWZpZWQtaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaG9tZS1pY29uXCIgW2lubmVySFRNTF09XCJob21lSWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cInZlcmlmaWVkLXRpdGxlXCI+TGEgdWJpY2FjacOzbiBmdWUgdmVyaWZpY2FkYTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBERU5JRUQgc3RhdGU6IGVycm9yIGljb24gYW5kIG1lc3NhZ2UgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckdlb1ZpZXdTdGF0ZSA9PT0gVXNlckdlb1ZpZXdTdGF0ZS5ERU5JRURcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZ2VvLWRlbmllZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW5pZWQtaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZGVuaWVkLXRpdGxlXCI+TGEgdWJpY2FjacOzbiBmdWUgcmVjaGF6YWRhPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZGVuaWVkLXN1YnRpdGxlXCI+RWwgY29sYWJvcmFkb3Igbm8gcGVybWl0acOzIGVsIGFjY2VzbyBhIHN1IHViaWNhY2nDs24uPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBCdXR0b24gKGhpZGRlbiBpbiB2ZXJpZmllZCBhbmQgZGVuaWVkIHN0YXRlcykgLS0+XG4gICAgPGJ1dHRvbiBcbiAgICAgIGNsYXNzPVwidXNlci1nZW8tYnRuXCIgXG4gICAgICAqbmdJZj1cInVzZXJHZW9WaWV3U3RhdGUgIT09IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZJRUQgJiYgdXNlckdlb1ZpZXdTdGF0ZSAhPT0gVXNlckdlb1ZpZXdTdGF0ZS5ERU5JRURcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInVzZXJHZW9WaWV3U3RhdGUgPT09IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZZSU5HXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ1c2VyR2VvVmlld1N0YXRlID09PSBVc2VyR2VvVmlld1N0YXRlLlZFUklGWUlOR1wiXG4gICAgICAoY2xpY2spPVwicmVxdWVzdFVzZXJMb2NhdGlvbigpXCI+XG4gICAgICBWZXJpZmljYXIgdWJpY2FjacOzblxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBEZXYgY29udHJvbHMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldi1jb250cm9sc1wiICpuZ0lmPVwiZGV2TW9kZUVuYWJsZWRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZGV2LWxhYmVsXCI+RGV2Ojwvc3Bhbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJkZXYtYnRuXCIgKGNsaWNrKT1cInNldFVzZXJHZW9WaWV3U3RhdGUoVXNlckdlb1ZpZXdTdGF0ZS5JTklUSUFMKVwiPkluaXRpYWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJkZXYtYnRuXCIgKGNsaWNrKT1cInNldFVzZXJHZW9WaWV3U3RhdGUoVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRllJTkcpXCI+VmVyaWZ5aW5nPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZGV2LWJ0blwiIChjbGljayk9XCJzZXRVc2VyR2VvVmlld1N0YXRlKFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZJRUQpXCI+VmVyaWZpZWQ8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJkZXYtYnRuXCIgKGNsaWNrKT1cInNldFVzZXJHZW9WaWV3U3RhdGUoVXNlckdlb1ZpZXdTdGF0ZS5ERU5JRUQpXCI+RGVuaWVkPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZGV2LWJ0blwiIChjbGljayk9XCJzZXRVc2VyR2VvVmlld1N0YXRlKFVzZXJHZW9WaWV3U3RhdGUuSElEREVOKVwiPkhpZGU8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXZpZGVvY2FsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULEtBQUssRUFDTCxTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFHL0YsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUdmLGNBQWMsRUFHZCxTQUFTLEdBQ1YsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVVwQyxPQUFPLFFBQVEsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7O0FBUmxDLHlDQUF5QztBQUN6QyxNQUFNLENBQU4sSUFBWSxnQkFNWDtBQU5ELFdBQVksZ0JBQWdCO0lBQzFCLHFDQUFpQixDQUFBO0lBQ2pCLHVDQUFtQixDQUFBO0lBQ25CLDJDQUF1QixDQUFBO0lBQ3ZCLHlDQUFxQixDQUFBO0lBQ3JCLHFDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCO0FBUUQsTUFBTSxPQUFPLHFCQUFxQjtJQXdDaEMsWUFDUyxXQUEyQixFQUMxQixVQUFzQixFQUN0QixrQkFBc0MsRUFDdEMsU0FBdUIsRUFDdkIsWUFBc0I7UUFKdkIs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Z0JBQ3JFLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO2FBQ3REO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDOzttSEF4aUJVLHFCQUFxQjt1R0FBckIscUJBQXFCLDRoQkMzQ2xDLDY2TUF1S0E7NEZENUhhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxlQUFlO2lOQUtoQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUUyQixrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNHLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFRhc0ZlZWRiYWNrTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi90YXMtZmVlZGJhY2stbW9kYWwvdGFzLWZlZWRiYWNrLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VvbG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZ2VvbG9jYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBDYWxsU3RhdGUsXG4gIFZpZXdNb2RlLFxuICBUYXNCdXNpbmVzc1JvbGUsXG4gIFdhaXRpbmdSb29tVXNlcixcbiAgUm9vbVVzZXJTdGF0dXMsXG4gIFVzZXJDYWxsQWN0aW9uLFxuICBQcm94eVZpZGVvVXNlck1vZGlmeVJlcXVlc3QsXG4gIFVzZXJHZW9JbmZvLFxuICBHZW9TdGF0dXMsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGFzLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgVEFTX0lDT05TIH0gZnJvbSAnLi4vLi4vaWNvbnMvdGFzLWljb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG4vKiogVXNlciBnZW9sb2NhdGlvbiBwYW5lbCB2aWV3IHN0YXRlcyAqL1xuZXhwb3J0IGVudW0gVXNlckdlb1ZpZXdTdGF0ZSB7XG4gIEhJRERFTiA9ICdISURERU4nLFxuICBJTklUSUFMID0gJ0lOSVRJQUwnLFxuICBWRVJJRllJTkcgPSAnVkVSSUZZSU5HJyxcbiAgVkVSSUZJRUQgPSAnVkVSSUZJRUQnLFxuICBERU5JRUQgPSAnREVOSUVEJyxcbn1cbmltcG9ydCBpbnRlcmFjdCBmcm9tICdpbnRlcmFjdGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFzLXZpZGVvY2FsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXMtdmlkZW9jYWxsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFzLXZpZGVvY2FsbC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNWaWRlb2NhbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHNlc3Npb25JZCE6IHN0cmluZztcbiAgQElucHV0KCkgdG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcG9pbnRtZW50SWQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIHZpZGVvQ2FsbElkPzogbnVtYmVyO1xuICBASW5wdXQoKSB1c2VySWQ/OiBudW1iZXI7IC8vIEN1cnJlbnQgdXNlcidzIElEIGZvciBnZW8gcmVwb3J0aW5nXG4gIEBJbnB1dCgpIHBhcnRpY2lwYW50TmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHRlbmFudDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGJ1c2luZXNzUm9sZTogVGFzQnVzaW5lc3NSb2xlID0gVGFzQnVzaW5lc3NSb2xlLlVTRVI7XG4gIEBJbnB1dCgpIGlzUmV0dXJuaW5nRnJvbVBpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3B1Ymxpc2hlckNvbnRhaW5lcicpIHB1Ymxpc2hlckNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3N1YnNjcmliZXJDb250YWluZXInKSBzdWJzY3JpYmVyQ29udGFpbmVyITogRWxlbWVudFJlZjtcblxuICBwdWJsaWMgaXNQdWJsaXNoZXJTbWFsbCA9IHRydWU7XG4gIHB1YmxpYyBjYWxsU3RhdGUgPSBDYWxsU3RhdGUuSURMRTtcbiAgcHVibGljIGlzTXV0ZWQgPSBmYWxzZTtcbiAgcHVibGljIHdhaXRpbmdSb29tVXNlcnM6IFdhaXRpbmdSb29tVXNlcltdID0gW107XG4gIHB1YmxpYyBvd25lckhhc0pvaW5lZCA9IGZhbHNlO1xuICBwdWJsaWMgaGFzVmlkZW9TdHJlYW0gPSBmYWxzZTtcbiAgcHVibGljIGRpc21pc3NlZFVzZXJzOiBudW1iZXJbXSA9IFtdO1xuICBwdWJsaWMgc2hvd0xvY2F0aW9uUGFuZWwgPSB0cnVlOyAvLyBTaG93IGJ5IGRlZmF1bHQgZm9yIG93bmVycywgd2lsbCBiZSB1cGRhdGVkIGJhc2VkIG9uIHVzZXIncyBsb2NhdGlvbiBzdGF0dXNcbiAgcHVibGljIHVzZXJIYXNMb2NhdGlvbiA9IGZhbHNlOyAvLyBUcmFja3MgaWYgdGhlIHVzZXIgaGFzIHNoYXJlZCB0aGVpciBsb2NhdGlvblxuICBwdWJsaWMgZ2VvTG9jYXRpb25TdGF0dXM6ICd1bmtub3duJyB8ICdhY3RpdmUnIHwgJ2RlbmllZCcgPSAndW5rbm93bic7XG4gIFxuICAvLyBHZW8gcGFuZWwgc3RhdGVzIGZvciBvd25lclxuICBwdWJsaWMgZ2VvUmVxdWVzdEFjdGl2ZSA9IGZhbHNlOyAvLyBPd25lciBzZW50IHJlcXVlc3QsIHdhaXRpbmcgZm9yIHVzZXJcbiAgcHVibGljIGFsbEdlb0dyYW50ZWQgPSBmYWxzZTsgLy8gQWxsIHVzZXJzIHJlc3BvbmRlZCB3aXRoIGdlb1xuICBwdWJsaWMgdXNlckdlb0luZm86IFVzZXJHZW9JbmZvW10gPSBbXTsgLy8gSW5kaXZpZHVhbCB1c2VyIGdlbyBzdGF0dXNcblxuICAvLyBVc2VyIGdlbyBwYW5lbCBzdGF0ZSAoZm9yIG93bmVycylcbiAgcHVibGljIHVzZXJHZW9WaWV3U3RhdGU6IFVzZXJHZW9WaWV3U3RhdGUgPSBVc2VyR2VvVmlld1N0YXRlLkhJRERFTjtcbiAgcHVibGljIFVzZXJHZW9WaWV3U3RhdGUgPSBVc2VyR2VvVmlld1N0YXRlOyAvLyBFeHBvc2UgZW51bSB0byB0ZW1wbGF0ZVxuICBwdWJsaWMgaG9tZUljb246IFNhZmVIdG1sO1xuICBwdWJsaWMgZGV2TW9kZUVuYWJsZWQgPSBmYWxzZTsgLy8gRW5hYmxlIGRldiBjb250cm9scyBmb3IgdGVzdGluZ1xuICBwcml2YXRlIGdlb1BhbmVsRGlzbWlzc2VkID0gZmFsc2U7IC8vIFRyYWNrIGlmIG93bmVyIG1hbnVhbGx5IGNsb3NlZCB0aGUgcGFuZWxcbiAgcHJpdmF0ZSBmZWVkYmFja1Nob3duID0gZmFsc2U7IC8vIFRyYWNrIGlmIGZlZWRiYWNrIG1vZGFsIGhhcyBiZWVuIHNob3duXG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXG4gICAgcHJpdmF0ZSB0YXNTZXJ2aWNlOiBUYXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2VvbG9jYXRpb25TZXJ2aWNlOiBHZW9sb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcbiAgKSB7XG4gICAgdGhpcy5ob21lSWNvbiA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFRBU19JQ09OUy5ob21lKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0dXBTdWJzY3JpcHRpb25zKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ2FsbCgpO1xuICAgIFxuICAgIC8vIEZvciBvd25lcnM6IHNob3cgdGhlIGdlbyBwYW5lbCB0byByZXF1ZXN0IHVzZXIgbG9jYXRpb24gKHVubGVzcyBkaXNtaXNzZWQpXG4gICAgaWYgKHRoaXMuY2FuQWRtaXRVc2VycyAmJiAhdGhpcy5nZW9QYW5lbERpc21pc3NlZCkge1xuICAgICAgdGhpcy51c2VyR2VvVmlld1N0YXRlID0gVXNlckdlb1ZpZXdTdGF0ZS5JTklUSUFMO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRJbnRlcmFjdCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy50YXNTZXJ2aWNlLnJlc2V0UG9sbGluZ1N0YXRlKCk7XG5cbiAgICAvLyBPbmx5IGRpc2Nvbm5lY3QgaWYgbm90IGluIFBpUCBtb2RlIChrZWVwIHNlc3Npb24gYWxpdmUgZm9yIGZsb2F0aW5nIHdpbmRvdylcbiAgICBpZiAoIXRoaXMudGFzU2VydmljZS5pc1BpcE1vZGUoKSkge1xuICAgICAgdGhpcy50YXNTZXJ2aWNlLmRpc2Nvbm5lY3RTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgaW50ZXJhY3QoJy5wdWJsaXNoZXItdmlldycpLnVuc2V0KCk7XG4gIH1cblxuICAvLyBQdWJsaWMgTWV0aG9kc1xuICBoYW5nVXAoKTogdm9pZCB7XG4gICAgdGhpcy50YXNTZXJ2aWNlLmRpc2Nvbm5lY3RTZXNzaW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBmZWVkYmFjayBtb2RhbCB3aGVuIGNhbGwgZW5kc1xuICAgKi9cbiAgcHJpdmF0ZSBvcGVuRmVlZGJhY2tNb2RhbCgpOiB2b2lkIHtcbiAgICAvLyBQcmV2ZW50IG9wZW5pbmcgZmVlZGJhY2sgbW9kYWwgbXVsdGlwbGUgdGltZXNcbiAgICBpZiAodGhpcy5mZWVkYmFja1Nob3duKSB7XG4gICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdoYW5ndXAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgdmlkZW9DYWxsSWQgZnJvbSBpbnB1dCBvciBzZXJ2aWNlXG4gICAgY29uc3QgdmlkZW9DYWxsSWQgPSB0aGlzLnZpZGVvQ2FsbElkID8/IHRoaXMudGFzU2VydmljZS52aWRlb0NhbGxJZDtcblxuICAgIC8vIElmIG5vIHZpZGVvQ2FsbElkLCBza2lwIGZlZWRiYWNrIGFuZCBjbG9zZSBkaXJlY3RseVxuICAgIGlmICghdmlkZW9DYWxsSWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoJ2hhbmd1cCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmVlZGJhY2tTaG93biA9IHRydWU7XG5cbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGFzRmVlZGJhY2tNb2RhbENvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICBiYWNrZHJvcDogdHJ1ZSxcbiAgICAgIGtleWJvYXJkOiB0cnVlLFxuICAgICAgd2luZG93Q2xhc3M6ICd0YXMtZmVlZGJhY2stbW9kYWwtd3JhcHBlcicsXG4gICAgfSk7XG5cbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS52aWRlb0NhbGxJZCA9IHZpZGVvQ2FsbElkO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRlbmFudCA9IHRoaXMudGVuYW50O1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmJ1c2luZXNzUm9sZSA9IHRoaXMuYnVzaW5lc3NSb2xlO1xuXG4gICAgLy8gQ2xvc2UgdmlkZW9jYWxsIG1vZGFsIGFmdGVyIGZlZWRiYWNrIG1vZGFsIGlzIGNsb3NlZC9kaXNtaXNzZWRcbiAgICBtb2RhbFJlZi5yZXN1bHQuZmluYWxseSgoKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdoYW5ndXAnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZU11dGUoKTogdm9pZCB7XG4gICAgdGhpcy50YXNTZXJ2aWNlLnRvZ2dsZU11dGUoKTtcbiAgfVxuXG4gIG1pbmltaXplKCk6IHZvaWQge1xuICAgIHRoaXMudGFzU2VydmljZS5tb3ZlTWFpblZpZGVvVG8oJ3BpcC1tYWluLXZpZGVvJyk7XG4gICAgLy8gU21hbGwgZGVsYXkgdG8gZW5zdXJlIHZpZGVvIGlzIG1vdmVkIGJlZm9yZSBjbG9zaW5nIG1vZGFsXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnRhc1NlcnZpY2UuZW50ZXJQaXBNb2RlKCksIDUwKTtcbiAgfVxuXG4gIHRvZ2dsZVN3YXAoKTogdm9pZCB7XG4gICAgdGhpcy5pc1B1Ymxpc2hlclNtYWxsID0gIXRoaXMuaXNQdWJsaXNoZXJTbWFsbDtcbiAgICB0aGlzLnJlc2V0VmlkZW9Qb3NpdGlvbnMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5pdEludGVyYWN0KCkpO1xuICB9XG5cbiAgb25Eb3VibGVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZVN3YXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjdXJyZW50IHVzZXIgY2FuIGFkbWl0IG90aGVycyAoT1dORVIsIEJBQ0tPRkZJQ0UsIG9yIE1PREVSQVRPUilcbiAgICovXG4gIGdldCBjYW5BZG1pdFVzZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVGFzQnVzaW5lc3NSb2xlLkJBQ0tPRkZJQ0UgfHxcbiAgICAgIHRoaXMuYnVzaW5lc3NSb2xlID09PSBUYXNCdXNpbmVzc1JvbGUuQURNSU5fTUFOQUdFUiB8fFxuICAgICAgdGhpcy5idXNpbmVzc1JvbGUgPT09IFRhc0J1c2luZXNzUm9sZS5NQU5BR0VSXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBVc2VycyB3aXRoIHBlbmRpbmcgZ2VvIHN0YXR1cyAqL1xuICBnZXQgcGVuZGluZ1VzZXJzKCk6IFVzZXJHZW9JbmZvW10ge1xuICAgIHJldHVybiB0aGlzLnVzZXJHZW9JbmZvLmZpbHRlcih1ID0+IHUuZ2VvU3RhdHVzID09PSBHZW9TdGF0dXMuUEVORElORyk7XG4gIH1cblxuICAvKiogVXNlcnMgd2hvIGdyYW50ZWQgZ2VvICovXG4gIGdldCBncmFudGVkVXNlcnMoKTogVXNlckdlb0luZm9bXSB7XG4gICAgcmV0dXJuIHRoaXMudXNlckdlb0luZm8uZmlsdGVyKHUgPT4gdS5nZW9TdGF0dXMgPT09IEdlb1N0YXR1cy5HUkFOVEVEKTtcbiAgfVxuXG4gIC8qKiBVc2VycyB3aG8gZGVuaWVkIGdlbyAqL1xuICBnZXQgZGVuaWVkVXNlcnMoKTogVXNlckdlb0luZm9bXSB7XG4gICAgcmV0dXJuIHRoaXMudXNlckdlb0luZm8uZmlsdGVyKHUgPT4gdS5nZW9TdGF0dXMgPT09IEdlb1N0YXR1cy5ERU5JRUQpO1xuICB9XG5cbiAgLyoqIFNob3cgbG9jYXRpb24gcGFuZWwgb25seSBpZiBvd25lciBhbmQgdGhlcmUgYXJlIHVzZXJzIHdobyBoYXZlbid0IGdyYW50ZWQgKi9cbiAgZ2V0IHNob3VsZFNob3dMb2NhdGlvblBhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5jYW5BZG1pdFVzZXJzIHx8IHRoaXMudXNlckdlb0luZm8ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEhpZGUgaWYgYWxsIHVzZXJzIGhhdmUgZ3JhbnRlZFxuICAgIGNvbnN0IGFsbEdyYW50ZWQgPSB0aGlzLnVzZXJHZW9JbmZvLmV2ZXJ5KHUgPT4gdS5nZW9TdGF0dXMgPT09IEdlb1N0YXR1cy5HUkFOVEVEKTtcbiAgICByZXR1cm4gIWFsbEdyYW50ZWQ7XG4gIH1cblxuICAvKiogQ2hlY2sgaWYgYW55IHVzZXIgaGFzIGRlbmllZCBnZW8gKi9cbiAgZ2V0IGhhc0FueURlbmllZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZW5pZWRVc2Vycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgLyoqIFNob3cgdXNlciBnZW8gcGFuZWwgZm9yIG93bmVycyB3aGVuIG5vdCBoaWRkZW4gKi9cbiAgZ2V0IHNob3VsZFNob3dVc2VyR2VvUGFuZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FuQWRtaXRVc2VycyAmJiB0aGlzLnVzZXJHZW9WaWV3U3RhdGUgIT09IFVzZXJHZW9WaWV3U3RhdGUuSElEREVOO1xuICB9XG5cbiAgLyoqIFNldCB1c2VyIGdlbyB2aWV3IHN0YXRlIChmb3IgZGV2IGNvbnRyb2xzIG9yIGNsb3NlIGJ1dHRvbikgKi9cbiAgc2V0VXNlckdlb1ZpZXdTdGF0ZShzdGF0ZTogVXNlckdlb1ZpZXdTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMudXNlckdlb1ZpZXdTdGF0ZSA9IHN0YXRlO1xuICAgIC8vIFRyYWNrIGlmIG93bmVyIG1hbnVhbGx5IGRpc21pc3NlZCB0aGUgcGFuZWxcbiAgICBpZiAoc3RhdGUgPT09IFVzZXJHZW9WaWV3U3RhdGUuSElEREVOKSB7XG4gICAgICB0aGlzLmdlb1BhbmVsRGlzbWlzc2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRtaXQgYSB1c2VyIGZyb20gdGhlIHdhaXRpbmcgcm9vbVxuICAgKi9cbiAgYWRtaXRVc2VyKHVzZXJJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpZGVvQ2FsbElkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgYWRtaXQgdXNlcjogdmlkZW9DYWxsSWQgbm90IHNldCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudGFzU2VydmljZVxuICAgICAgLm1vZGlmeVByb3h5VmlkZW9Vc2VyKHtcbiAgICAgICAgdXNlcklkLFxuICAgICAgICB2aWRlb0NhbGxJZDogdGhpcy52aWRlb0NhbGxJZCxcbiAgICAgICAgYWN0aW9uOiBVc2VyQ2FsbEFjdGlvbi5XQUlUSU5HX1JPT01fTEVBVkUsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAvLyBSZW1vdmUgdXNlciBmcm9tIHdhaXRpbmcgbGlzdCBhZnRlciBzdWNjZXNzZnVsIGFkbWl0XG4gICAgICAgICAgdGhpcy53YWl0aW5nUm9vbVVzZXJzID0gdGhpcy53YWl0aW5nUm9vbVVzZXJzLmZpbHRlcihcbiAgICAgICAgICAgICh1KSA9PiB1LnVzZXJJZCAhPT0gdXNlcklkXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZG1pdHRpbmcgdXNlcjonLCBlcnIpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzcyB0aGUgd2FpdGluZyByb29tIG5vdGlmaWNhdGlvbiBmb3IgYSB1c2VyXG4gICAqL1xuICBkaXNtaXNzV2FpdGluZ05vdGlmaWNhdGlvbih1c2VySWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGlzbWlzc2VkVXNlcnMucHVzaCh1c2VySWQpO1xuICAgIHRoaXMud2FpdGluZ1Jvb21Vc2VycyA9IHRoaXMud2FpdGluZ1Jvb21Vc2Vycy5maWx0ZXIoXG4gICAgICAodSkgPT4gdS51c2VySWQgIT09IHVzZXJJZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGhlIGxvY2F0aW9uIHBhbmVsXG4gICAqL1xuICBjbG9zZUxvY2F0aW9uUGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93TG9jYXRpb25QYW5lbCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgdGhlIHVzZXIgdG8gc2hhcmUgdGhlaXIgbG9jYXRpb24gKGNhbGxlZCBieSBvd25lcilcbiAgICovXG4gIHJlcXVlc3RVc2VyTG9jYXRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpZGVvQ2FsbElkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3QgcmVxdWVzdCBsb2NhdGlvbjogdmlkZW9DYWxsSWQgbm90IHNldCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBib2R5OiBQcm94eVZpZGVvVXNlck1vZGlmeVJlcXVlc3QgPSB7XG4gICAgICB2aWRlb0NhbGxJZDogdGhpcy52aWRlb0NhbGxJZCxcbiAgICAgIGFjdGlvbjogVXNlckNhbGxBY3Rpb24uUkVRVUVTVF9HRU9MT0NBTElaQVRJT04sXG4gICAgfTtcblxuICAgIHRoaXMudGFzU2VydmljZS5tb2RpZnlQcm94eVZpZGVvVXNlcihib2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnTG9jYXRpb24gcmVxdWVzdCBzZW50Jyk7XG4gICAgICAgIC8vIFNldCBwYW5lbCB0byB2ZXJpZnlpbmcgc3RhdGUgd2hpbGUgd2FpdGluZyBmb3IgdXNlciByZXNwb25zZVxuICAgICAgICB0aGlzLnVzZXJHZW9WaWV3U3RhdGUgPSBVc2VyR2VvVmlld1N0YXRlLlZFUklGWUlORztcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3IgcmVxdWVzdGluZyBsb2NhdGlvbjonLCBlcnIpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBNZXRob2RzXG4gIHByaXZhdGUgc2V0dXBTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgIC8vIENhbGwgc3RhdGUgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS5jYWxsU3RhdGUkLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy5jYWxsU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDYWxsU3RhdGUuRElTQ09OTkVDVEVEKSB7XG4gICAgICAgICAgdGhpcy5vcGVuRmVlZGJhY2tNb2RhbCgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYWNrIGlmIHdlIGhhdmUgYW4gYWN0aXZlIHZpZGVvIHN0cmVhbVxuICAgICAgICB0aGlzLmhhc1ZpZGVvU3RyZWFtID0gc3RhdGUgPT09IENhbGxTdGF0ZS5DT05ORUNURUQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBWaWV3IG1vZGUgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS52aWV3TW9kZSQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XG4gICAgICAgIGlmIChtb2RlID09PSBWaWV3TW9kZS5QSVApIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdwaXAnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTXV0ZSBzdGF0ZSBzdWJzY3JpcHRpb25cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmlzTXV0ZWQkLnN1YnNjcmliZSgobXV0ZWQpID0+IHtcbiAgICAgICAgdGhpcy5pc011dGVkID0gbXV0ZWQ7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBXYWl0aW5nIHJvb20gdXNlcnMgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS53YWl0aW5nUm9vbVVzZXJzJC5zdWJzY3JpYmUoKHVzZXJzKSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgZGlzbWlzc2VkIHVzZXJzXG4gICAgICAgIHRoaXMud2FpdGluZ1Jvb21Vc2VycyA9IHVzZXJzLmZpbHRlcihcbiAgICAgICAgICAodSkgPT4gIXRoaXMuZGlzbWlzc2VkVXNlcnMuaW5jbHVkZXModS51c2VySWQpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBPd25lciBqb2luIHN0YXR1cyBzdWJzY3JpcHRpb25cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLm93bmVySGFzSm9pbmVkJC5zdWJzY3JpYmUoKGpvaW5lZCkgPT4ge1xuICAgICAgICB0aGlzLm93bmVySGFzSm9pbmVkID0gam9pbmVkO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gT3duZXIgbGVmdCBzdWJzY3JpcHRpb24gLSBkaXNjb25uZWN0IG5vbi1vd25lcnNcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLm93bmVySGFzTGVmdCQuc3Vic2NyaWJlKChoYXNMZWZ0KSA9PiB7XG4gICAgICAgIGlmIChoYXNMZWZ0ICYmICF0aGlzLmNhbkFkbWl0VXNlcnMpIHsgLy8gTm9uLW93bmVyIHVzZXJcbiAgICAgICAgICAvLyBoYW5nVXAoKSB0cmlnZ2VycyBESVNDT05ORUNURUQgc3RhdGUsIHdoaWNoIG9wZW5zIGZlZWRiYWNrIG1vZGFsXG4gICAgICAgICAgLy8gdGhlbiBjbG9zZXMgdmlkZW9jYWxsIG1vZGFsIGFmdGVyIGZlZWRiYWNrIGlzIGRvbmVcbiAgICAgICAgICB0aGlzLmhhbmdVcCgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBBY3RpdmF0ZUdlbyBzdWJzY3JpcHRpb24gLSBvbmx5IGZvciBub24tb3duZXJzICh1c2VycylcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmFjdGl2YXRlR2VvJC5zdWJzY3JpYmUoKGFjdGl2YXRlR2VvKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmF0ZUdlbyAmJiAhdGhpcy5jYW5BZG1pdFVzZXJzKSB7XG5cbiAgICAgICAgICB0aGlzLmhhbmRsZUFjdGl2YXRlR2VvKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEdlb1JlcXVlc3RBY3RpdmUgc3Vic2NyaXB0aW9uIC0gZm9yIG93bmVyc1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2UuZ2VvUmVxdWVzdEFjdGl2ZSQuc3Vic2NyaWJlKChhY3RpdmUpID0+IHtcblxuICAgICAgICB0aGlzLmdlb1JlcXVlc3RBY3RpdmUgPSBhY3RpdmU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBBbGxHZW9HcmFudGVkIHN1YnNjcmlwdGlvbiAtIGZvciBvd25lcnMgdG8gdXBkYXRlIHBhbmVsIHN0YXRlXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS5hbGxHZW9HcmFudGVkJC5zdWJzY3JpYmUoKGdyYW50ZWQpID0+IHtcbiAgICAgICAgdGhpcy5hbGxHZW9HcmFudGVkID0gZ3JhbnRlZDtcbiAgICAgICAgXG4gICAgICAgIC8vIEZvciBvd25lcnM6IHVwZGF0ZSBwYW5lbCBzdGF0ZSBiYXNlZCBvbiBnZW8gc3RhdHVzXG4gICAgICAgIGlmICh0aGlzLmNhbkFkbWl0VXNlcnMgJiYgZ3JhbnRlZCkge1xuICAgICAgICAgIHRoaXMudXNlckdlb1ZpZXdTdGF0ZSA9IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZJRUQ7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFVzZXJHZW9JbmZvIHN1YnNjcmlwdGlvbiAtIGZvciBvd25lciBnZW8gcGFuZWxcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLnVzZXJHZW9JbmZvJC5zdWJzY3JpYmUoKGluZm8pID0+IHtcbiAgICAgICAgdGhpcy51c2VyR2VvSW5mbyA9IGluZm87XG4gICAgICAgIC8vIE5vdGU6IFdlIGRvbid0IGF1dG8tc3dpdGNoIHRvIERFTklFRCBoZXJlIC0gdGhhdCBvbmx5IGhhcHBlbnMgXG4gICAgICAgIC8vIGFmdGVyIG93bmVyIHJlcXVlc3RzIGFuZCB1c2VyIGRlbmllcyAodmlhIGdlb1JlcXVlc3RBY3RpdmUgZmxvdylcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWN0aXZhdGVHZW8gcmVxdWVzdCBmcm9tIGJhY2tlbmQgKGZvciBub24tb3duZXIgdXNlcnMpLlxuICAgKiBEaXJlY3RseSBwcm9tcHRzIGJyb3dzZXIgZm9yIGdlb2xvY2F0aW9uIC0gbm8gcGFuZWwgZm9yIHVzZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBY3RpdmF0ZUdlbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDbGVhciBhbnkgY2FjaGVkIHBvc2l0aW9uIHRvIGZvcmNlIHJlLXByb21wdGluZ1xuICAgIHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmNsZWFyQ2FjaGUoKTtcbiAgICBcbiAgICAvLyBSZXF1ZXN0IGdlb2xvY2F0aW9uIGZyb20gdXNlciAoYnJvd3NlciB3aWxsIHByb21wdClcbiAgICBjb25zdCBwb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRQb3NpdGlvbigpO1xuICAgIFxuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgdGhpcy5nZW9Mb2NhdGlvblN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgdGhpcy5yZXBvcnRHZW9TdGF0dXMocG9zaXRpb24ubGF0aXR1ZGUsIHBvc2l0aW9uLmxvbmdpdHVkZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2VvTG9jYXRpb25TdGF0dXMgPSAnZGVuaWVkJztcbiAgICAgIHRoaXMuZGVueUdlb0xvY2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXJ0IGdlb2xvY2F0aW9uIHZlcmlmaWNhdGlvbiAoY2FsbGVkIGZyb20gdGVtcGxhdGUgYnV0dG9uKSAqL1xuICBwdWJsaWMgYXN5bmMgc3RhcnRHZW9WZXJpZmljYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy51c2VyR2VvVmlld1N0YXRlID0gVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRllJTkc7XG5cbiAgICAvLyBDbGVhciBhbnkgY2FjaGVkIHBvc2l0aW9uIHRvIGZvcmNlIHJlLXByb21wdGluZ1xuICAgIHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmNsZWFyQ2FjaGUoKTtcbiAgICBcbiAgICAvLyBSZXF1ZXN0IGdlb2xvY2F0aW9uIGZyb20gdXNlciAoYnJvd3NlciB3aWxsIHByb21wdClcbiAgICBjb25zdCBwb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRQb3NpdGlvbigpO1xuICAgIFxuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgdGhpcy5nZW9Mb2NhdGlvblN0YXR1cyA9ICdhY3RpdmUnO1xuICAgICAgdGhpcy51c2VyR2VvVmlld1N0YXRlID0gVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRklFRDtcbiAgICAgIHRoaXMucmVwb3J0R2VvU3RhdHVzKHBvc2l0aW9uLmxhdGl0dWRlLCBwb3NpdGlvbi5sb25naXR1ZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdlb0xvY2F0aW9uU3RhdHVzID0gJ2RlbmllZCc7XG4gICAgICB0aGlzLnVzZXJHZW9WaWV3U3RhdGUgPSBVc2VyR2VvVmlld1N0YXRlLkRFTklFRDtcbiAgICAgIHRoaXMuZGVueUdlb0xvY2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBncmFudGVkIGdlb2xvY2F0aW9uIHRvIGJhY2tlbmQuXG4gICAqIElNUE9SVEFOVDogT25seSBjYWxsIHdpdGggdmFsaWQgY29vcmRpbmF0ZXMuXG4gICAqL1xuICBwcml2YXRlIHJlcG9ydEdlb1N0YXR1cyhsYXRpdHVkZTogbnVtYmVyLCBsb25naXR1ZGU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy52aWRlb0NhbGxJZCkge1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY29vcmRpbmF0ZXMgYXJlIHByZXNlbnRcbiAgICBpZiAobGF0aXR1ZGUgPT09IHVuZGVmaW5lZCB8fCBsYXRpdHVkZSA9PT0gbnVsbCB8fCBsb25naXR1ZGUgPT09IHVuZGVmaW5lZCB8fCBsb25naXR1ZGUgPT09IG51bGwpIHtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHk6IFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCA9IHtcbiAgICAgIHVzZXJJZDogdGhpcy51c2VySWQsXG4gICAgICB2aWRlb0NhbGxJZDogdGhpcy52aWRlb0NhbGxJZCxcbiAgICAgIGFjdGlvbjogVXNlckNhbGxBY3Rpb24uQUNUSVZBVEVfR0VPTE9DQVRJT04sXG4gICAgICBsYXRpdHVkZSxcbiAgICAgIGxvbmdpdHVkZSxcbiAgICB9O1xuXG5cbiAgICB0aGlzLnRhc1NlcnZpY2UubW9kaWZ5UHJveHlWaWRlb1VzZXIoYm9keSkuc3Vic2NyaWJlKHtcblxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydCBkZW5pZWQgZ2VvbG9jYXRpb24gdG8gYmFja2VuZC5cbiAgICovXG4gIHByaXZhdGUgZGVueUdlb0xvY2F0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52aWRlb0NhbGxJZCkge1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYm9keTogUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0ID0ge1xuICAgICAgdXNlcklkOiB0aGlzLnVzZXJJZCxcbiAgICAgIHZpZGVvQ2FsbElkOiB0aGlzLnZpZGVvQ2FsbElkLFxuICAgICAgYWN0aW9uOiBVc2VyQ2FsbEFjdGlvbi5ERU5ZX0dFT0xPQ0FUSU9OLFxuICAgIH07XG5cblxuICAgIHRoaXMudGFzU2VydmljZS5tb2RpZnlQcm94eVZpZGVvVXNlcihib2R5KS5zdWJzY3JpYmUoe1xuXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDYWxsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmV0dXJuaW5nRnJvbVBpcCkge1xuICAgICAgLy8gUmV0dXJuaW5nIGZyb20gUGlQIC0ganVzdCBtb3ZlIHZpZGVvcyBiYWNrXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudGFzU2VydmljZS5tb3ZlVmlkZW9zVG9GdWxsc2NyZWVuKCksIDEwMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlc3Npb25JZCAmJiB0aGlzLnRva2VuKSB7XG4gICAgICAvLyBOZXcgY2FsbCAtIGNvbm5lY3QgdG8gc2Vzc2lvblxuICAgICAgdGhpcy50YXNTZXJ2aWNlXG4gICAgICAgIC5jb25uZWN0U2Vzc2lvbihcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCxcbiAgICAgICAgICB0aGlzLnRva2VuLFxuICAgICAgICAgICdwdWJsaXNoZXItY29udGFpbmVyJyxcbiAgICAgICAgICAnc3Vic2NyaWJlci1jb250YWluZXInLFxuICAgICAgICAgIHRoaXMuYnVzaW5lc3NSb2xlXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb25uZWN0aW5nIHRvIHZpZGVvIGNhbGw6JywgZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIFN0YXJ0IHN0YXR1cyBwb2xsaW5nIHdpdGggc2hvcnRlciBpbnRlcnZhbCAoNXMpIHRvIGRldGVjdCBvd25lciBsZWF2aW5nL2xvY2F0aW9uIHJlcXVlc3RzXG4gICAgICBpZiAodGhpcy5hcHBvaW50bWVudElkKSB7XG4gICAgICAgIHRoaXMudGFzU2VydmljZS5zdGFydFN0YXR1c1BvbGxpbmcoe1xuICAgICAgICAgIGFwcG9pbnRtZW50SWQ6IHRoaXMuYXBwb2ludG1lbnRJZCxcbiAgICAgICAgICB0ZW5hbnQ6IHRoaXMudGVuYW50LFxuICAgICAgICAgIGJ1c2luZXNzUm9sZTogdGhpcy5idXNpbmVzc1JvbGUsXG4gICAgICAgICAgcm9vbVR5cGU6IHVuZGVmaW5lZCwgLy8gUm9vbVR5cGUgbWlnaHQgYmUgbmVlZGVkIGlmIGF2YWlsYWJsZVxuICAgICAgICAgIGVudGl0eUlkOiB1bmRlZmluZWQsIC8vIEVudGl0eUlkIG1pZ2h0IGJlIG5lZWRlZCBpZiBhdmFpbGFibGVcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkXG4gICAgICAgIH0sIDUwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRWaWRlb1Bvc2l0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBwdWJsaXNoZXJFbCA9IHRoaXMucHVibGlzaGVyQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHN1YnNjcmliZXJFbCA9IHRoaXMuc3Vic2NyaWJlckNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmIChwdWJsaXNoZXJFbCkge1xuICAgICAgcHVibGlzaGVyRWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgcHVibGlzaGVyRWwucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXgnKTtcbiAgICAgIHB1Ymxpc2hlckVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS15Jyk7XG4gICAgfVxuXG4gICAgaWYgKHN1YnNjcmliZXJFbCkge1xuICAgICAgc3Vic2NyaWJlckVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIHN1YnNjcmliZXJFbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEteCcpO1xuICAgICAgc3Vic2NyaWJlckVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS15Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0SW50ZXJhY3QoKTogdm9pZCB7XG4gICAgaW50ZXJhY3QoJy5wdWJsaXNoZXItdmlldycpLnVuc2V0KCk7XG5cbiAgICBpbnRlcmFjdCgnLnB1Ymxpc2hlci12aWV3JylcbiAgICAgIC5kcmFnZ2FibGUoe1xuICAgICAgICBpbmVydGlhOiB0cnVlLFxuICAgICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgICBpbnRlcmFjdC5tb2RpZmllcnMucmVzdHJpY3RSZWN0KHtcbiAgICAgICAgICAgIHJlc3RyaWN0aW9uOiAncGFyZW50JyxcbiAgICAgICAgICAgIGVuZE9ubHk6IHRydWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGF1dG9TY3JvbGw6IHRydWUsXG4gICAgICAgIGxpc3RlbmVyczoge1xuICAgICAgICAgIG1vdmU6IChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICAgICAgY29uc3QgeCA9IChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteCcpKSB8fCAwKSArIGV2ZW50LmR4O1xuICAgICAgICAgICAgY29uc3QgeSA9IChwYXJzZUZsb2F0KHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEteScpKSB8fCAwKSArIGV2ZW50LmR5O1xuXG4gICAgICAgICAgICB0YXJnZXQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke3h9cHgsICR7eX1weClgO1xuICAgICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS14JywgU3RyaW5nKHgpKTtcbiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteScsIFN0cmluZyh5KSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucmVzaXphYmxlKHtcbiAgICAgICAgZWRnZXM6IHsgbGVmdDogZmFsc2UsIHJpZ2h0OiB0cnVlLCBib3R0b206IHRydWUsIHRvcDogZmFsc2UgfSxcbiAgICAgICAgbGlzdGVuZXJzOiB7XG4gICAgICAgICAgbW92ZTogKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBsZXQgeCA9IHBhcnNlRmxvYXQodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS14JykpIHx8IDA7XG4gICAgICAgICAgICBsZXQgeSA9IHBhcnNlRmxvYXQodGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS15JykpIHx8IDA7XG5cbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS53aWR0aCA9IGAke2V2ZW50LnJlY3Qud2lkdGh9cHhgO1xuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IGAke2V2ZW50LnJlY3QuaGVpZ2h0fXB4YDtcblxuICAgICAgICAgICAgeCArPSBldmVudC5kZWx0YVJlY3QubGVmdDtcbiAgICAgICAgICAgIHkgKz0gZXZlbnQuZGVsdGFSZWN0LnRvcDtcblxuICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgpYDtcbiAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2RhdGEteCcsIFN0cmluZyh4KSk7XG4gICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdkYXRhLXknLCBTdHJpbmcoeSkpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdEVkZ2VzKHsgb3V0ZXI6ICdwYXJlbnQnIH0pLFxuICAgICAgICAgIGludGVyYWN0Lm1vZGlmaWVycy5yZXN0cmljdFNpemUoeyBtaW46IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxMDAgfSB9KSxcbiAgICAgICAgICBpbnRlcmFjdC5tb2RpZmllcnMuYXNwZWN0UmF0aW8oeyByYXRpbzogJ3ByZXNlcnZlJyB9KSxcbiAgICAgICAgXSxcbiAgICAgICAgaW5lcnRpYTogdHJ1ZSxcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFzLXZpZGVvY2FsbC13cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ0YXMtdmlkZW9jYWxsLWNvbnRhaW5lclwiPlxuICAgIDwhLS0gU3Vic2NyaWJlciB2aWRlbyAobGFyZ2UsIGJhY2tncm91bmQpIC0tPlxuICAgIDxkaXZcbiAgICAgIGlkPVwic3Vic2NyaWJlci1jb250YWluZXJcIlxuICAgICAgW2NsYXNzLnN1YnNjcmliZXItdmlld109XCJpc1B1Ymxpc2hlclNtYWxsXCJcbiAgICAgIFtjbGFzcy5wdWJsaXNoZXItdmlld109XCIhaXNQdWJsaXNoZXJTbWFsbFwiXG4gICAgICAjc3Vic2NyaWJlckNvbnRhaW5lclxuICAgICAgKGRibGNsaWNrKT1cIm9uRG91YmxlQ2xpY2soKVwiXG4gICAgPjwvZGl2PlxuXG4gICAgPCEtLSBQdWJsaXNoZXIgdmlkZW8gKHNtYWxsLCBvdmVybGF5KSAtLT5cbiAgICA8ZGl2XG4gICAgICBpZD1cInB1Ymxpc2hlci1jb250YWluZXJcIlxuICAgICAgW2NsYXNzLnB1Ymxpc2hlci12aWV3XT1cImlzUHVibGlzaGVyU21hbGxcIlxuICAgICAgW2NsYXNzLnN1YnNjcmliZXItdmlld109XCIhaXNQdWJsaXNoZXJTbWFsbFwiXG4gICAgICAjcHVibGlzaGVyQ29udGFpbmVyXG4gICAgICAoZGJsY2xpY2spPVwib25Eb3VibGVDbGljaygpXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8IS0tIENlbnRlcmVkIGF2YXRhciAoc2hvd24gd2hlbiBubyB2aWRlbyBzdHJlYW0pIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY29udGFpbmVyXCIgKm5nSWY9XCIhaGFzVmlkZW9TdHJlYW1cIj5cbiAgICAgIDx0YXMtYXZhdGFyIFtuYW1lXT1cInBhcnRpY2lwYW50TmFtZVwiIFtzaXplXT1cIjgwXCI+PC90YXMtYXZhdGFyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDb250cm9scyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbHMtY29udGFpbmVyXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGNvbnRyb2wtYnRuIG11dGUtYnRuXCJcbiAgICAgICAgW2NsYXNzLm11dGVkXT1cImlzTXV0ZWRcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlTXV0ZSgpXCJcbiAgICAgICAgW3RpdGxlXT1cImlzTXV0ZWQgPyAnQWN0aXZhciBtaWNyw7Nmb25vJyA6ICdTaWxlbmNpYXIgbWljcsOzZm9ubydcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzTXV0ZWQgPyAnQWN0aXZhciBtaWNyw7Nmb25vJyA6ICdTaWxlbmNpYXIgbWljcsOzZm9ubydcIlxuICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIGNsYXNzPVwiZmFcIlxuICAgICAgICAgIFtjbGFzcy5mYS1taWNyb3Bob25lXT1cIiFpc011dGVkXCJcbiAgICAgICAgICBbY2xhc3MuZmEtbWljcm9waG9uZS1zbGFzaF09XCJpc011dGVkXCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBjb250cm9sLWJ0biBzd2FwLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTd2FwKClcIlxuICAgICAgICB0aXRsZT1cIkludGVyY2FtYmlhciB2aXN0YVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJJbnRlcmNhbWJpYXIgdmlzdGFcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gY29udHJvbC1idG4gcGlwLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJtaW5pbWl6ZSgpXCJcbiAgICAgICAgdGl0bGU9XCJNaW5pbWl6YXIgKFBpY3R1cmUgaW4gUGljdHVyZSlcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiTWluaW1pemFyIHZpZGVvbGxhbWFkYVwiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29tcHJlc3NcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gY29udHJvbC1idG4gaGFuZ3VwLWJ0blwiXG4gICAgICAgIChjbGljayk9XCJoYW5nVXAoKVwiXG4gICAgICAgIHRpdGxlPVwiRmluYWxpemFyIGxsYW1hZGFcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiRmluYWxpemFyIGxsYW1hZGFcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBob25lXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFdhaXRpbmcgcm9vbSBub3RpZmljYXRpb24gKHNob3duIGZvciBPV05FUi9CQUNLT0ZGSUNFIG9ubHkpIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwid2FpdGluZy1ub3RpZmljYXRpb25cIlxuICAgICAgKm5nSWY9XCJ3YWl0aW5nUm9vbVVzZXJzLmxlbmd0aCA+IDAgJiYgY2FuQWRtaXRVc2Vyc1wiXG4gICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cIndhaXRpbmctdGV4dFwiPlxuICAgICAgICB7eyB3YWl0aW5nUm9vbVVzZXJzWzBdLm5hbWUgfX0gZXN0w6EgZW4gbGEgc2FsYSBkZSBlc3BlcmEuXG4gICAgICA8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYWRtaXQtYnRuXCJcbiAgICAgICAgKGNsaWNrKT1cImFkbWl0VXNlcih3YWl0aW5nUm9vbVVzZXJzWzBdLnVzZXJJZClcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQWRtaXRpciB1c3VhcmlvXCJcbiAgICAgID5cbiAgICAgICAgQWRtaXRpclxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiZGlzbWlzcy1idG5cIlxuICAgICAgICAoY2xpY2spPVwiZGlzbWlzc1dhaXRpbmdOb3RpZmljYXRpb24od2FpdGluZ1Jvb21Vc2Vyc1swXS51c2VySWQpXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNlcnJhciBub3RpZmljYWNpw7NuXCJcbiAgICAgID5cbiAgICAgICAgw5dcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIE93bmVyIGdlb2xvY2F0aW9uIHBhbmVsIChmb3Igb3duZXJzIHRvIHJlcXVlc3QgdXNlciBsb2NhdGlvbikgLS0+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWdlby1wYW5lbFwiICpuZ0lmPVwic2hvdWxkU2hvd1VzZXJHZW9QYW5lbCB8fCBkZXZNb2RlRW5hYmxlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdlby1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGUtcm93XCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbWFwLW1hcmtlciBoZWFkZXItaWNvblwiICpuZ0lmPVwidXNlckdlb1ZpZXdTdGF0ZSAhPT0gVXNlckdlb1ZpZXdTdGF0ZS5JTklUSUFMXCI+PC9pPlxuICAgICAgICA8aDM+VWJpY2FjacOzbiBkZWwgY29sYWJvcmFkb3I8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY2xvc2UtYnRuXCIgKGNsaWNrKT1cInNldFVzZXJHZW9WaWV3U3RhdGUoVXNlckdlb1ZpZXdTdGF0ZS5ISURERU4pXCIgYXJpYS1sYWJlbD1cIkNlcnJhclwiPsOXPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1nZW8tZGVzY3JpcHRpb25cIiAqbmdJZj1cInVzZXJHZW9WaWV3U3RhdGUgIT09IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZJRUQgJiYgdXNlckdlb1ZpZXdTdGF0ZSAhPT0gVXNlckdlb1ZpZXdTdGF0ZS5ERU5JRURcIj5cbiAgICAgIDxwPkVsIGNvbGFib3JhZG9yIHRpZW5lIGxhIHViaWNhY2nDs24gZGVzYWN0aXZhZGEsIHNvbGljaXRhIHF1ZSBsYSBhY3RpdmUuPC9wPlxuICAgICAgPHA+RXN0YSBhY2Npw7NuIG5vcyBwZXJtaXRpcsOhIGRpc3BvbmliaWxpemFyIGFsZ3VuYXMgYWxlcnRhcy48L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1nZW8tY29udGVudFwiPlxuICAgICAgPCEtLSBJTklUSUFMIHN0YXRlOiBqdXN0IHRoZSBidXR0b24gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckdlb1ZpZXdTdGF0ZSA9PT0gVXNlckdlb1ZpZXdTdGF0ZS5JTklUSUFMXCI+XG4gICAgICAgIDwhLS0gc3BhY2VyIC0tPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gVkVSSUZZSU5HIHN0YXRlOiBzcGlubmVyICsgbG9hZGluZyBtZXNzYWdlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJHZW9WaWV3U3RhdGUgPT09IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZZSU5HXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWdlby12ZXJpZnlpbmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2VvLXNwaW5uZXItbGFyZ2VcIj48L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cInZlcmlmeWluZy10aXRsZVwiPlZlcmlmaWNhbmRvIHViaWNhY2nDs24uLi48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ2ZXJpZnlpbmctc3VidGl0bGVcIj5Fc3RvIHB1ZWRlIHRhcmRhciB1bm9zIHNlZ3VuZG9zLjwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBWRVJJRklFRCBzdGF0ZTogaG9tZSBpY29uIHdpdGggc3BhcmtsZXMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckdlb1ZpZXdTdGF0ZSA9PT0gVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRklFRFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1nZW8tdmVyaWZpZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVyaWZpZWQtaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaG9tZS1pY29uXCIgW2lubmVySFRNTF09XCJob21lSWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cInZlcmlmaWVkLXRpdGxlXCI+TGEgdWJpY2FjacOzbiBmdWUgdmVyaWZpY2FkYTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBERU5JRUQgc3RhdGU6IGVycm9yIGljb24gYW5kIG1lc3NhZ2UgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckdlb1ZpZXdTdGF0ZSA9PT0gVXNlckdlb1ZpZXdTdGF0ZS5ERU5JRURcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZ2VvLWRlbmllZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZW5pZWQtaWNvbi1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZGVuaWVkLXRpdGxlXCI+TGEgdWJpY2FjacOzbiBmdWUgcmVjaGF6YWRhPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZGVuaWVkLXN1YnRpdGxlXCI+RWwgY29sYWJvcmFkb3Igbm8gcGVybWl0acOzIGVsIGFjY2VzbyBhIHN1IHViaWNhY2nDs24uPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBCdXR0b24gKGhpZGRlbiBpbiB2ZXJpZmllZCBhbmQgZGVuaWVkIHN0YXRlcykgLS0+XG4gICAgPGJ1dHRvbiBcbiAgICAgIGNsYXNzPVwidXNlci1nZW8tYnRuXCIgXG4gICAgICAqbmdJZj1cInVzZXJHZW9WaWV3U3RhdGUgIT09IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZJRUQgJiYgdXNlckdlb1ZpZXdTdGF0ZSAhPT0gVXNlckdlb1ZpZXdTdGF0ZS5ERU5JRURcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInVzZXJHZW9WaWV3U3RhdGUgPT09IFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZZSU5HXCJcbiAgICAgIFtkaXNhYmxlZF09XCJ1c2VyR2VvVmlld1N0YXRlID09PSBVc2VyR2VvVmlld1N0YXRlLlZFUklGWUlOR1wiXG4gICAgICAoY2xpY2spPVwicmVxdWVzdFVzZXJMb2NhdGlvbigpXCI+XG4gICAgICBWZXJpZmljYXIgdWJpY2FjacOzblxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBEZXYgY29udHJvbHMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRldi1jb250cm9sc1wiICpuZ0lmPVwiZGV2TW9kZUVuYWJsZWRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZGV2LWxhYmVsXCI+RGV2Ojwvc3Bhbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJkZXYtYnRuXCIgKGNsaWNrKT1cInNldFVzZXJHZW9WaWV3U3RhdGUoVXNlckdlb1ZpZXdTdGF0ZS5JTklUSUFMKVwiPkluaXRpYWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJkZXYtYnRuXCIgKGNsaWNrKT1cInNldFVzZXJHZW9WaWV3U3RhdGUoVXNlckdlb1ZpZXdTdGF0ZS5WRVJJRllJTkcpXCI+VmVyaWZ5aW5nPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZGV2LWJ0blwiIChjbGljayk9XCJzZXRVc2VyR2VvVmlld1N0YXRlKFVzZXJHZW9WaWV3U3RhdGUuVkVSSUZJRUQpXCI+VmVyaWZpZWQ8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJkZXYtYnRuXCIgKGNsaWNrKT1cInNldFVzZXJHZW9WaWV3U3RhdGUoVXNlckdlb1ZpZXdTdGF0ZS5ERU5JRUQpXCI+RGVuaWVkPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZGV2LWJ0blwiIChjbGljayk9XCJzZXRVc2VyR2VvVmlld1N0YXRlKFVzZXJHZW9WaWV3U3RhdGUuSElEREVOKVwiPkhpZGU8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|