Repository URL to install this package:
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { DomainsService, ApplicationsService, } from '@wa-motif-open-api/platform-service';
import { ContextsService as RESTContextService } from '@wa-motif-open-api/rest-content-service';
import { ContextsService } from '@wa-motif-open-api/context-service';
import { Observable } from 'rxjs';
import { NGXLogger } from 'web-console-core';
/** @type {?} */
const LOG_TAG = '[RESTContextCatalogService]';
export class RESTContextCatalogService {
/**
* @param {?} domainService
* @param {?} applicationService
* @param {?} restContextService
* @param {?} contextService
* @param {?} logger
*/
constructor(domainService, applicationService, restContextService, contextService, logger) {
this.domainService = domainService;
this.applicationService = applicationService;
this.restContextService = restContextService;
this.contextService = contextService;
this.logger = logger;
}
/**
* @param {?} domain
* @param {?} application
* @param {?} contextName
* @return {?}
*/
deleteRESTContext(domain, application, contextName) {
return this.restContextService.deleteContext(domain, application, contextName);
}
/**
* @param {?} domain
* @param {?} application
* @param {?} contextName
* @param {?} url
* @return {?}
*/
createRESTContext(domain, application, contextName, url) {
this.logger.debug(LOG_TAG, 'createRESTContext called for ', domain, application, contextName, url);
/** @type {?} */
let createObj = {
context: contextName,
url: url
};
return this.restContextService.createContext(domain, application, createObj);
}
/**
* @param {?} domain
* @param {?} application
* @param {?} contextName
* @param {?} enabled
* @return {?}
*/
enableRESTContext(domain, application, contextName, enabled) {
this.logger.debug(LOG_TAG, 'enableRESTContext called for ', domain, application, contextName, enabled);
if (enabled) {
return this.contextService.enableContext(domain, application, contextName);
}
else {
return this.contextService.disableContext(domain, application, contextName);
}
}
/**
* @param {?} domain
* @param {?} application
* @param {?} contextName
* @param {?} url
* @return {?}
*/
updateRESTContext(domain, application, contextName, url) {
this.logger.debug(LOG_TAG, 'updateRESTContext called for ', domain, application, contextName, url);
/** @type {?} */
let updateObj = {
url: url
};
return this.restContextService.updateContext(domain, application, contextName, updateObj);
}
/**
* Returns a JSON with the Service Catalog Structure
* @return {?}
*/
getRESTContextCatalog() {
return new Observable((/**
* @param {?} observer
* @return {?}
*/
(observer) => {
this.logger.debug(LOG_TAG, 'getRESTContextCatalog called');
/** @type {?} */
var restContextCatalog = [];
// Get all domains
this.domainService.getDomains().subscribe((/**
* @param {?} domains
* @return {?}
*/
(domains) => {
/** @type {?} */
const domainsCount = domains.length;
/** @type {?} */
let processedDomains = 0;
for (const domain of domains) {
this.applicationService.getApplications(domain.name).subscribe((/**
* @param {?} applications
* @return {?}
*/
(applications) => {
/** @type {?} */
const appCount = applications.length;
/** @type {?} */
let processedApps = 0;
if (appCount === 0) {
processedDomains++;
if (processedDomains === domainsCount) {
observer.next(restContextCatalog);
observer.complete();
this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
}
}
for (const application of applications) {
/** @type {?} */
const applicationInfo = application;
this.restContextService.getContexts(domain.name, application.name).subscribe((/**
* @param {?} contexts
* @return {?}
*/
(contexts) => {
this.logger.debug(LOG_TAG, 'getRESTContextCatalog contexts[' + application.name + '@' + domain.name + ']:', contexts);
restContextCatalog = restContextCatalog.concat(contexts);
processedApps++;
if (processedApps === appCount) {
processedDomains++;
if (processedDomains === domainsCount) {
observer.next(restContextCatalog);
observer.complete();
this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
}
}
}), (/**
* @param {?} error
* @return {?}
*/
(error) => {
processedApps++;
if (processedApps === appCount) {
processedDomains++;
if (processedDomains === domainsCount) {
observer.next(restContextCatalog);
observer.complete();
this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
}
}
this.logger.error(LOG_TAG, 'getRESTContextCatalog error:', error);
observer.error(error);
}), (/**
* @return {?}
*/
() => {
if (processedDomains === domainsCount) {
observer.next(restContextCatalog);
observer.complete();
this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
}
}));
}
}), (/**
* @param {?} error
* @return {?}
*/
(error) => {
this.logger.error(LOG_TAG, 'getRESTContextCatalog error:', error);
observer.error(error);
}));
if (processedDomains === domainsCount) {
observer.next(restContextCatalog);
observer.complete();
this.logger.debug(LOG_TAG, 'getRESTContextCatalog completed');
}
}
}), (/**
* @param {?} error
* @return {?}
*/
(error) => {
this.logger.error(LOG_TAG, 'getRESTContextCatalog error:', error);
observer.error(error);
}));
}));
}
/**
* @param {?} domain
* @param {?} application
* @return {?}
*/
getRESTContextCatalogFor(domain, application) {
return this.restContextService.getContexts(domain, application);
}
}
RESTContextCatalogService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
RESTContextCatalogService.ctorParameters = () => [
{ type: DomainsService },
{ type: ApplicationsService },
{ type: RESTContextService },
{ type: ContextsService },
{ type: NGXLogger }
];
if (false) {
/**
* @type {?}
* @private
*/
RESTContextCatalogService.prototype.domainsList;
/**
* @type {?}
* @private
*/
RESTContextCatalogService.prototype.domainService;
/**
* @type {?}
* @private
*/
RESTContextCatalogService.prototype.applicationService;
/**
* @type {?}
* @private
*/
RESTContextCatalogService.prototype.restContextService;
/**
* @type {?}
* @private
*/
RESTContextCatalogService.prototype.contextService;
/**
* @type {?}
* @private
*/
RESTContextCatalogService.prototype.logger;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUkVTVENvbnRleHRDYXRhbG9nU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vdGlmLXdlYi1hZG1pbi1jb3JlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL1JFU1RDb250ZXh0Q2F0YWxvZ1NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFFZCxtQkFBbUIsR0FFakIsTUFBTSxxQ0FBcUMsQ0FBQztBQU12RCxPQUFPLEVBQUUsZUFBZSxJQUFJLGtCQUFrQixFQUF3RCxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7TUFFdkMsT0FBTyxHQUFHLDZCQUE2QjtBQUk3QyxNQUFNLE9BQU8seUJBQXlCOzs7Ozs7OztJQUlsQyxZQUFvQixhQUE2QixFQUNyQyxrQkFBdUMsRUFDdkMsa0JBQXNDLEVBQ3RDLGNBQStCLEVBQy9CLE1BQWlCO1FBSlQsa0JBQWEsR0FBYixhQUFhLENBQWdCO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBaUI7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBVztJQUM3QixDQUFDOzs7Ozs7O0lBR00saUJBQWlCLENBQUMsTUFBYSxFQUFFLFdBQWtCLEVBQUUsV0FBa0I7UUFDMUUsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbkYsQ0FBQzs7Ozs7Ozs7SUFFTSxpQkFBaUIsQ0FBQyxNQUFh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SSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDcEUsQ0FBQzs7O1lBM0lKLFVBQVU7Ozs7WUFuQkYsY0FBYztZQUVkLG1CQUFtQjtZQVFBLGtCQUFrQjtZQUNyQyxlQUFlO1lBR2YsU0FBUzs7Ozs7OztJQVFkLGdEQUFtQzs7Ozs7SUFFdkIsa0RBQXFDOzs7OztJQUM3Qyx1REFBK0M7Ozs7O0lBQy9DLHVEQUE4Qzs7Ozs7SUFDOUMsbURBQXVDOzs7OztJQUN2QywyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21haW5zU2VydmljZSxcbiAgICAgICAgIERvbWFpbixcbiAgICAgICAgIEFwcGxpY2F0aW9uc1NlcnZpY2UsXG4gICAgICAgICBBcHBsaWNhdGlvbixcbiAgICAgICAgICB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9wbGF0Zm9ybS1zZXJ2aWNlJztcbmltcG9ydCB7IFNlcnZpY2VzU2VydmljZSxcbiAgICBTZXJ2aWNlLFxuICAgIFNlcnZpY2VDcmVhdGUsXG4gICAgT3BlcmF0aW9uc1NlcnZpY2UsXG4gICAgU2VydmljZU9wZXJhdGlvbiB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9jYXRhbG9nLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGV4dHNTZXJ2aWNlIGFzIFJFU1RDb250ZXh0U2VydmljZSwgU2VydmljZUNvbnRleHQsIFJlc3RDb250ZXh0Q3JlYXRlLCBSZXN0Q29udGV4dFVwZGF0ZSB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9yZXN0LWNvbnRlbnQtc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0c1NlcnZpY2UgfSBmcm9tICdAd2EtbW90aWYtb3Blbi1hcGkvY29udGV4dC1zZXJ2aWNlJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTkdYTG9nZ2VyIH0gZnJvbSAnd2ViLWNvbnNvbGUtY29yZSc7XG5cbmNvbnN0IExPR19UQUcgPSAnW1JFU1RDb250ZXh0Q2F0YWxvZ1NlcnZpY2VdJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUkVTVENvbnRleHRDYXRhbG9nU2VydmljZSB7XG5cbiAgICBwcml2YXRlIGRvbWFpbnNMaXN0OiBBcnJheTxEb21haW4+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkb21haW5TZXJ2aWNlOiBEb21haW5zU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVzdENvbnRleHRTZXJ2aWNlOiBSRVNUQ29udGV4dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2dnZXI6IE5HWExvZ2dlcikge1xuICAgIH1cblxuXG4gICAgcHVibGljIGRlbGV0ZVJFU1RDb250ZXh0KGRvbWFpbjpzdHJpbmcsIGFwcGxpY2F0aW9uOnN0cmluZywgY29udGV4dE5hbWU6c3RyaW5nKSA6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3RDb250ZXh0U2VydmljZS5kZWxldGVDb250ZXh0KGRvbWFpbiwgYXBwbGljYXRpb24sIGNvbnRleHROYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUkVTVENvbnRleHQoZG9tYWluOnN0cmluZywgYXBwbGljYXRpb246c3RyaW5nLCBjb250ZXh0TmFtZTpzdHJpbmcsIHVybDpzdHJpbmcpIDogT2JzZXJ2YWJsZTxTZXJ2aWNlQ29udGV4dD4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnY3JlYXRlUkVTVENvbnRleHQgY2FsbGVkIGZvciAnLCBkb21haW4sIGFwcGxpY2F0aW9uLCBjb250ZXh0TmFtZSwgdXJsICk7XG4gICAgICAgIGxldCBjcmVhdGVPYmo6IFJlc3RDb250ZXh0Q3JlYXRlID0ge1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dE5hbWUsXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5yZXN0Q29udGV4dFNlcnZpY2UuY3JlYXRlQ29udGV4dChkb21haW4sIGFwcGxpY2F0aW9uLCBjcmVhdGVPYmopO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVSRVNUQ29udGV4dChkb21haW46c3RyaW5nLCBhcHBsaWNhdGlvbjpzdHJpbmcsIGNvbnRleHROYW1lOnN0cmluZywgZW5hYmxlZDogYm9vbGVhbikgOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZW5hYmxlUkVTVENvbnRleHQgY2FsbGVkIGZvciAnLCBkb21haW4sIGFwcGxpY2F0aW9uLCBjb250ZXh0TmFtZSwgZW5hYmxlZCApO1xuICAgICAgICBpZiAoZW5hYmxlZCl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZS5lbmFibGVDb250ZXh0KGRvbWFpbiwgYXBwbGljYXRpb24sIGNvbnRleHROYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRTZXJ2aWNlLmRpc2FibGVDb250ZXh0KGRvbWFpbiwgYXBwbGljYXRpb24sIGNvbnRleHROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSRVNUQ29udGV4dChkb21haW46c3RyaW5nLCBhcHBsaWNhdGlvbjpzdHJpbmcsIGNvbnRleHROYW1lOnN0cmluZywgdXJsOnN0cmluZykgOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAndXBkYXRlUkVTVENvbnRleHQgY2FsbGVkIGZvciAnLCBkb21haW4sIGFwcGxpY2F0aW9uLCBjb250ZXh0TmFtZSwgdXJsICk7XG4gICAgICAgIGxldCB1cGRhdGVPYmo6IFJlc3RDb250ZXh0VXBkYXRlID0ge1xuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdENvbnRleHRTZXJ2aWNlLnVwZGF0ZUNvbnRleHQoZG9tYWluLCBhcHBsaWNhdGlvbiwgY29udGV4dE5hbWUsIHVwZGF0ZU9iaik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIEpTT04gd2l0aCB0aGUgU2VydmljZSBDYXRhbG9nIFN0cnVjdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSRVNUQ29udGV4dENhdGFsb2coKTogT2JzZXJ2YWJsZTxBcnJheTxTZXJ2aWNlQ29udGV4dD4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGNhbGxlZCcgKTtcblxuICAgICAgICAgICAgdmFyIHJlc3RDb250ZXh0Q2F0YWxvZyA9IFtdO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBHZXQgYWxsIGRvbWFpbnNcbiAgICAgICAgICAgIHRoaXMuZG9tYWluU2VydmljZS5nZXREb21haW5zKCkuc3Vic2NyaWJlKCggZG9tYWluczogQXJyYXk8RG9tYWluPiApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21haW5zQ291bnQgPSBkb21haW5zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgcHJvY2Vzc2VkRG9tYWlucyA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkb21haW4gb2YgZG9tYWlucykge1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcGxpY2F0aW9ucyhkb21haW4ubmFtZSkuc3Vic2NyaWJlKCggYXBwbGljYXRpb25zOiBBcnJheTxBcHBsaWNhdGlvbj4gKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcENvdW50ID0gYXBwbGljYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9jZXNzZWRBcHBzID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkRG9tYWlucysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvY2Vzc2VkRG9tYWlucyA9PT0gZG9tYWluc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoIHJlc3RDb250ZXh0Q2F0YWxvZyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGNvbXBsZXRlZCcgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXBwbGljYXRpb24gb2YgYXBwbGljYXRpb25zICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcGxpY2F0aW9uSW5mbzogYW55ID0gYXBwbGljYXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RDb250ZXh0U2VydmljZS5nZXRDb250ZXh0cyhkb21haW4ubmFtZSwgYXBwbGljYXRpb24ubmFtZSkuc3Vic2NyaWJlKChjb250ZXh0czpBcnJheTxTZXJ2aWNlQ29udGV4dD4pPT57XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ2dldFJFU1RDb250ZXh0Q2F0YWxvZyBjb250ZXh0c1snICsgYXBwbGljYXRpb24ubmFtZSArICdAJyArIGRvbWFpbi5uYW1lICsgJ106JywgY29udGV4dHMgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdENvbnRleHRDYXRhbG9nID0gcmVzdENvbnRleHRDYXRhbG9nLmNvbmNhdChjb250ZXh0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRBcHBzKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWRBcHBzID09PSBhcHBDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkRG9tYWlucysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBwcm9jZXNzZWREb21haW5zID09PSBkb21haW5zQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCByZXN0Q29udGV4dENhdGFsb2cgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdnZXRSRVNUQ29udGV4dENhdGFsb2cgY29tcGxldGVkJyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAoZXJyb3IpPT57XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkQXBwcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkQXBwcyA9PT0gYXBwQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZERvbWFpbnMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvY2Vzc2VkRG9tYWlucyA9PT0gZG9tYWluc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCggcmVzdENvbnRleHRDYXRhbG9nICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGNvbXBsZXRlZCcgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGVycm9yOicgLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggcHJvY2Vzc2VkRG9tYWlucyA9PT0gZG9tYWluc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCByZXN0Q29udGV4dENhdGFsb2cgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGNvbXBsZXRlZCcgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfSwgKCBlcnJvciApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKExPR19UQUcsICdnZXRSRVNUQ29udGV4dENhdGFsb2cgZXJyb3I6JyAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCBwcm9jZXNzZWREb21haW5zID09PSBkb21haW5zQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoIHJlc3RDb250ZXh0Q2F0YWxvZyApO1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdnZXRSRVNUQ29udGV4dENhdGFsb2cgY29tcGxldGVkJyApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnZ2V0UkVTVENvbnRleHRDYXRhbG9nIGVycm9yOicgLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UkVTVENvbnRleHRDYXRhbG9nRm9yKGRvbWFpbjpzdHJpbmcsIGFwcGxpY2F0aW9uOnN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8U2VydmljZUNvbnRleHQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3RDb250ZXh0U2VydmljZS5nZXRDb250ZXh0cyhkb21haW4sIGFwcGxpY2F0aW9uKTtcbiAgICB9XG5cbn1cbiJdfQ==