abp-ng2-module
Version:
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.0.7.
153 lines • 18.3 kB
JavaScript
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "../services/message/message.service";
import * as i2 from "../services/log/log.service";
export class AbpHttpConfigurationService {
_messageService;
_logService;
constructor(_messageService, _logService) {
this._messageService = _messageService;
this._logService = _logService;
}
defaultError = {
message: 'An error has occurred!',
details: 'Error details were not sent by server.'
};
defaultError401 = {
message: 'You are not authenticated!',
details: 'You should be authenticated (sign in) in order to perform this operation.'
};
defaultError403 = {
message: 'You are not authorized!',
details: 'You are not allowed to perform this operation.'
};
defaultError404 = {
message: 'Resource not found!',
details: 'The resource requested could not be found on the server.'
};
logError(error) {
this._logService.error(error);
}
showError(error) {
if (error.details) {
return this._messageService.error(error.details, error.message || this.defaultError.message);
}
else {
return this._messageService.error(error.message || this.defaultError.message);
}
}
handleTargetUrl(targetUrl) {
if (!targetUrl) {
location.href = '/';
}
else {
location.href = targetUrl;
}
}
handleUnAuthorizedRequest(messagePromise, targetUrl) {
const self = this;
if (messagePromise) {
messagePromise.done(() => {
this.handleTargetUrl(targetUrl || '/');
});
}
else {
self.handleTargetUrl(targetUrl || '/');
}
}
handleNonAbpErrorResponse(response) {
const self = this;
switch (response.status) {
case 401:
self.handleUnAuthorizedRequest(self.showError(self.defaultError401), '/');
break;
case 403:
self.showError(self.defaultError403);
break;
case 404:
self.showError(self.defaultError404);
break;
default:
self.showError(self.defaultError);
break;
}
}
handleAbpResponse(response, ajaxResponse) {
var newResponse;
if (ajaxResponse.success) {
newResponse = response.clone({
body: ajaxResponse.result
});
if (ajaxResponse.targetUrl) {
this.handleTargetUrl(ajaxResponse.targetUrl);
;
}
}
else {
newResponse = response.clone({
body: ajaxResponse.result
});
if (!ajaxResponse.error) {
ajaxResponse.error = this.defaultError;
}
this.logError(ajaxResponse.error);
this.showError(ajaxResponse.error);
if (response.status === 401) {
this.handleUnAuthorizedRequest(null, ajaxResponse.targetUrl);
}
}
return newResponse;
}
getAbpAjaxResponseOrNull(response) {
if (!response || !response.headers) {
return null;
}
var contentType = response.headers.get('Content-Type');
if (!contentType) {
this._logService.warn('Content-Type is not sent!');
return null;
}
if (contentType.indexOf("application/json") < 0) {
this._logService.warn('Content-Type is not application/json: ' + contentType);
return null;
}
var responseObj = JSON.parse(JSON.stringify(response.body));
if (!responseObj.__abp) {
return null;
}
return responseObj;
}
handleResponse(response) {
var ajaxResponse = this.getAbpAjaxResponseOrNull(response);
if (ajaxResponse == null) {
return response;
}
return this.handleAbpResponse(response, ajaxResponse);
}
blobToText(blob) {
return new Observable((observer) => {
if (!blob) {
observer.next("");
observer.complete();
}
else {
let reader = new FileReader();
reader.onload = function () {
observer.next(this.result);
observer.complete();
};
reader.readAsText(blob);
}
});
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: AbpHttpConfigurationService, deps: [{ token: i1.MessageService }, { token: i2.LogService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: AbpHttpConfigurationService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: AbpHttpConfigurationService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return [{ type: i1.MessageService }, { type: i2.LogService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJwLWh0dHAtY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWJwLW5nMi1tb2R1bGUvc3JjL2xpYi9pbnRlcmNlcHRvcnMvYWJwLWh0dHAtY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQVNsQyxNQUFNLE9BQU8sMkJBQTJCO0lBR3hCO0lBQ0E7SUFGWixZQUNZLGVBQStCLEVBQy9CLFdBQXVCO1FBRHZCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtJQUNuQyxDQUFDO0lBRUQsWUFBWSxHQUFlO1FBQ3ZCLE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsT0FBTyxFQUFFLHdDQUF3QztLQUNwRCxDQUFDO0lBRUYsZUFBZSxHQUFlO1FBQzFCLE9BQU8sRUFBRSw0QkFBNEI7UUFDckMsT0FBTyxFQUFFLDJFQUEyRTtLQUN2RixDQUFDO0lBRUYsZUFBZSxHQUFlO1FBQzFCLE9BQU8sRUFBRSx5QkFBeUI7UUFDbEMsT0FBTyxFQUFFLGdEQUFnRDtLQUM1RCxDQUFDO0lBRUYsZUFBZSxHQUFlO1FBQzFCLE9BQU8sRUFBRSxxQkFBcUI7UUFDOUIsT0FBTyxFQUFFLDBEQUEwRDtLQUN0RSxDQUFDO0lBRUYsUUFBUSxDQUFDLEtBQWlCO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtB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QUN2QjtpQkFBTTtnQkFDSCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixNQUFNLENBQUMsTUFBTSxHQUFHO29CQUNaLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMzQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQTtnQkFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO3VHQWpLUSwyQkFBMkI7MkdBQTNCLDJCQUEyQixjQUZ4QixNQUFNOzsyRkFFVCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWVzc2FnZS9tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9nL2xvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJRXJyb3JJbmZvLCBJQWpheFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWJwSHR0cENvbmZpZ3VyYXRpb25TZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbG9nU2VydmljZTogTG9nU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIGRlZmF1bHRFcnJvciA9IDxJRXJyb3JJbmZvPntcclxuICAgICAgICBtZXNzYWdlOiAnQW4gZXJyb3IgaGFzIG9jY3VycmVkIScsXHJcbiAgICAgICAgZGV0YWlsczogJ0Vycm9yIGRldGFpbHMgd2VyZSBub3Qgc2VudCBieSBzZXJ2ZXIuJ1xyXG4gICAgfTtcclxuXHJcbiAgICBkZWZhdWx0RXJyb3I0MDEgPSA8SUVycm9ySW5mbz57XHJcbiAgICAgICAgbWVzc2FnZTogJ1lvdSBhcmUgbm90IGF1dGhlbnRpY2F0ZWQhJyxcclxuICAgICAgICBkZXRhaWxzOiAnWW91IHNob3VsZCBiZSBhdXRoZW50aWNhdGVkIChzaWduIGluKSBpbiBvcmRlciB0byBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uLidcclxuICAgIH07XHJcblxyXG4gICAgZGVmYXVsdEVycm9yNDAzID0gPElFcnJvckluZm8+e1xyXG4gICAgICAgIG1lc3NhZ2U6ICdZb3UgYXJlIG5vdCBhdXRob3JpemVkIScsXHJcbiAgICAgICAgZGV0YWlsczogJ1lvdSBhcmUgbm90IGFsbG93ZWQgdG8gcGVyZm9ybSB0aGlzIG9wZXJhdGlvbi4nXHJcbiAgICB9O1xyXG5cclxuICAgIGRlZmF1bHRFcnJvcjQwNCA9IDxJRXJyb3JJbmZvPntcclxuICAgICAgICBtZXNzYWdlOiAnUmVzb3VyY2Ugbm90IGZvdW5kIScsXHJcbiAgICAgICAgZGV0YWlsczogJ1RoZSByZXNvdXJjZSByZXF1ZXN0ZWQgY291bGQgbm90IGJlIGZvdW5kIG9uIHRoZSBzZXJ2ZXIuJ1xyXG4gICAgfTtcclxuXHJcbiAgICBsb2dFcnJvcihlcnJvcjogSUVycm9ySW5mbyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2xvZ1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcihlcnJvcjogSUVycm9ySW5mbyk6IGFueSB7XHJcbiAgICAgICAgaWYgKGVycm9yLmRldGFpbHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVycm9yKGVycm9yLmRldGFpbHMsIGVycm9yLm1lc3NhZ2UgfHwgdGhpcy5kZWZhdWx0RXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UgfHwgdGhpcy5kZWZhdWx0RXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVRhcmdldFVybCh0YXJnZXRVcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGFyZ2V0VXJsKSB7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSAnLyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IHRhcmdldFVybDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlVW5BdXRob3JpemVkUmVxdWVzdChtZXNzYWdlUHJvbWlzZTogYW55LCB0YXJnZXRVcmw/OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKG1lc3NhZ2VQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VQcm9taXNlLmRvbmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVUYXJnZXRVcmwodGFyZ2V0VXJsIHx8ICcvJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlVGFyZ2V0VXJsKHRhcmdldFVybCB8fCAnLycpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVOb25BYnBFcnJvclJlc3BvbnNlKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55Pikge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xyXG4gICAgICAgICAgICBjYXNlIDQwMTpcclxuICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlVW5BdXRob3JpemVkUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNob3dFcnJvcihzZWxmLmRlZmF1bHRFcnJvcjQwMSksXHJcbiAgICAgICAgICAgICAgICAgICAgJy8nXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDAzOlxyXG4gICAgICAgICAgICAgICAgc2VsZi5zaG93RXJyb3Ioc2VsZi5kZWZhdWx0RXJyb3I0MDMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgNDA0OlxyXG4gICAgICAgICAgICAgICAgc2VsZi5zaG93RXJyb3Ioc2VsZi5kZWZhdWx0RXJyb3I0MDQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNob3dFcnJvcihzZWxmLmRlZmF1bHRFcnJvcik7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQWJwUmVzcG9uc2UocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+LCBhamF4UmVzcG9uc2U6IElBamF4UmVzcG9uc2UpOiBIdHRwUmVzcG9uc2U8YW55PiB7XHJcbiAgICAgICAgdmFyIG5ld1Jlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PjtcclxuXHJcbiAgICAgICAgaWYgKGFqYXhSZXNwb25zZS5zdWNjZXNzKSB7XHJcblxyXG4gICAgICAgICAgICBuZXdSZXNwb25zZSA9IHJlc3BvbnNlLmNsb25lKHtcclxuICAgICAgICAgICAgICAgIGJvZHk6IGFqYXhSZXNwb25zZS5yZXN1bHRcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWpheFJlc3BvbnNlLnRhcmdldFVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVUYXJnZXRVcmwoYWpheFJlc3BvbnNlLnRhcmdldFVybCk7O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIG5ld1Jlc3BvbnNlID0gcmVzcG9uc2UuY2xvbmUoe1xyXG4gICAgICAgICAgICAgICAgYm9keTogYWpheFJlc3BvbnNlLnJlc3VsdFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICghYWpheFJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBhamF4UmVzcG9uc2UuZXJyb3IgPSB0aGlzLmRlZmF1bHRFcnJvcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2dFcnJvcihhamF4UmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dFcnJvcihhamF4UmVzcG9uc2UuZXJyb3IpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVVuQXV0aG9yaXplZFJlcXVlc3QobnVsbCwgYWpheFJlc3BvbnNlLnRhcmdldFVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdSZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBYnBBamF4UmVzcG9uc2VPck51bGwocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+KTogSUFqYXhSZXNwb25zZSB8IG51bGwge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmhlYWRlcnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJyk7XHJcbiAgICAgICAgaWYgKCFjb250ZW50VHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dTZXJ2aWNlLndhcm4oJ0NvbnRlbnQtVHlwZSBpcyBub3Qgc2VudCEnKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZihcImFwcGxpY2F0aW9uL2pzb25cIikgPCAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ1NlcnZpY2Uud2FybignQ29udGVudC1UeXBlIGlzIG5vdCBhcHBsaWNhdGlvbi9qc29uOiAnICsgY29udGVudFR5cGUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZU9iaiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuYm9keSkpO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2VPYmouX19hYnApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2VPYmogYXMgSUFqYXhSZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSZXNwb25zZShyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4pOiBIdHRwUmVzcG9uc2U8YW55PiB7XHJcbiAgICAgICAgdmFyIGFqYXhSZXNwb25zZSA9IHRoaXMuZ2V0QWJwQWpheFJlc3BvbnNlT3JOdWxsKHJlc3BvbnNlKTtcclxuICAgICAgICBpZiAoYWpheFJlc3BvbnNlID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQWJwUmVzcG9uc2UocmVzcG9uc2UsIGFqYXhSZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmxvYlRvVGV4dChibG9iOiBhbnkpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghYmxvYikge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChcIlwiKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLnJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=