618 lines
66 KiB
JavaScript
618 lines
66 KiB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
|
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
module.exports = factory(require("jQuery"));
|
|
else if(typeof define === 'function' && define.amd)
|
|
define(["jQuery"], factory);
|
|
else if(typeof exports === 'object')
|
|
exports["api"] = factory(require("jQuery"));
|
|
else
|
|
root["ntt"] = root["ntt"] || {}, root["ntt"]["smartit"] = root["ntt"]["smartit"] || {}, root["ntt"]["smartit"]["api"] = factory(root["jQuery"]);
|
|
})(window, function(__WEBPACK_EXTERNAL_MODULE_jquery__) {
|
|
return /******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/
|
|
/******/ // create a fake namespace object
|
|
/******/ // mode & 1: value is a module id, require it
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
/******/ // mode & 4: return value when already ns object
|
|
/******/ // mode & 8|1: behave like require
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
/******/ if(mode & 8) return value;
|
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
/******/ var ns = Object.create(null);
|
|
/******/ __webpack_require__.r(ns);
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
/******/ return ns;
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = "./src/customApi/index.js");
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ "./src/customApi/ICustomModule.js":
|
|
/*!****************************************!*\
|
|
!*** ./src/customApi/ICustomModule.js ***!
|
|
\****************************************/
|
|
/*! exports provided: ICustomModule */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ICustomModule", function() { return ICustomModule; });
|
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
|
|
var ICustomModule = function ICustomModule() {
|
|
_classCallCheck(this, ICustomModule);
|
|
};
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/customApi/index.js":
|
|
/*!********************************!*\
|
|
!*** ./src/customApi/index.js ***!
|
|
\********************************/
|
|
/*! exports provided: nttSmartitModules, angularServices, ICustomModule */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nttSmartitModules", function() { return nttSmartitModules; });
|
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "angularServices", function() { return angularServices; });
|
|
/* harmony import */ var _ICustomModule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ICustomModule */ "./src/customApi/ICustomModule.js");
|
|
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ICustomModule", function() { return _ICustomModule__WEBPACK_IMPORTED_MODULE_0__["ICustomModule"]; });
|
|
|
|
|
|
var nttSmartitModules = [];
|
|
|
|
__webpack_require__(/*! ./ntt-generic-service */ "./src/customApi/ntt-generic-service.js");
|
|
|
|
var modulesPath = "NTTDATA/modules/"; //override bootstrap method
|
|
|
|
var bootstrapOld = angular.bootstrap;
|
|
|
|
angular.bootstrap = function () {
|
|
bootstrapOld.apply(bootstrapOld, arguments);
|
|
startNttBootstrap();
|
|
};
|
|
|
|
function startNttBootstrap() {
|
|
getAngularServices();
|
|
mergeI18nlocales();
|
|
}
|
|
|
|
var angularServices;
|
|
|
|
function getAngularServices() {
|
|
angularServices = allServices();
|
|
|
|
function allServices() {
|
|
var injector = angular.element(document).injector();
|
|
var originalHasOwnProperty = Object.prototype.hasOwnProperty;
|
|
|
|
Object.prototype.hasOwnProperty = function () {
|
|
return true;
|
|
};
|
|
|
|
Object.defineProperty(Object.prototype, '__self__', {
|
|
configurable: true,
|
|
enumerable: false,
|
|
get: function get() {
|
|
return this;
|
|
}
|
|
});
|
|
var cache = injector.get('__self__');
|
|
Object.prototype.hasOwnProperty = originalHasOwnProperty;
|
|
return cache;
|
|
}
|
|
}
|
|
|
|
var startAppNTT = function startAppNTT(data) {
|
|
angularServices.i18nService.dictionary = $.extend(angularServices.i18nService.dictionary, data);
|
|
};
|
|
/*function mergeI18nlocales() {
|
|
|
|
$.when($.getJSON('NTT/scripts/i18n/ntt-resources-locale_' + myitsmLocale + '.json'))
|
|
.fail(function (err) {
|
|
return $.when($.getJSON('NTT/scripts/i18n/ntt-resources-locale_' + myitsmLocale + '.json')).then(startAppNTT);
|
|
})
|
|
.then(startAppNTT);
|
|
}*/
|
|
|
|
|
|
function mergeI18nlocales() {
|
|
for (var i = 0; i < nttSmartitModules.length; i++) {
|
|
var modulePath = modulesPath + nttSmartitModules[i].name() + "/";
|
|
var tmpModuleLocales = nttSmartitModules[i].i18nLocales();
|
|
|
|
for (var x = 0; x < tmpModuleLocales.length; x++) {
|
|
$.when($.getJSON(modulePath + tmpModuleLocales[x].path)).then(startAppNTT);
|
|
}
|
|
} //Override i18n locale
|
|
|
|
/*$.when($.getJSON('NTT/scripts/i18n/ntt-resources-locale_' + myitsmLocale + '.json'))
|
|
.fail(function (err) {
|
|
return $.when($.getJSON('NTT/scripts/i18n/ntt-resources-locale_' + myitsmLocale + '.json')).then(startAppNTT);
|
|
})
|
|
.then(startAppNTT);*/
|
|
|
|
}
|
|
|
|
angular.module("myitsmApp").run(["$rootScope", "$templateCache", "$templateRequest", "i18nService", function ($rootScope, $templateCache, $templateRequest, i18nService) {
|
|
for (var i = 0; i < nttSmartitModules.length; i++) {
|
|
var tmpModule = nttSmartitModules[i];
|
|
var modulePath = modulesPath + tmpModule.name() + "/";
|
|
var count = tmpModule.templates().length; //add Template, add snipped or override
|
|
|
|
for (var x = 0; x < tmpModule.templates().length; x++) {
|
|
var tmpTemplate = tmpModule.templates()[x];
|
|
setTemplateCache($templateRequest, $templateCache, tmpTemplate, modulePath);
|
|
/*var tRequest = $templateRequest(modulePath+tmpTemplate.template);
|
|
Promise.resolve(tRequest).then(function (value,tmpModule) {
|
|
if(typeof tmpTemplate.origin == "undefined")
|
|
tmpTemplate.origin = tmpTemplate.template;
|
|
$templateCache.put(tmpTemplate.origin, value);
|
|
});*/
|
|
}
|
|
}
|
|
}]);
|
|
|
|
function setTemplateCache($templateRequest, $templateCache, tmpTemplate, modulePath) {
|
|
//var tmpTemplate = tmpModule.templates()[x];
|
|
var path = modulePath + tmpTemplate.template;
|
|
var tRequest = $templateRequest(path);
|
|
Promise.resolve(tRequest).then(function (value) {
|
|
if (typeof tmpTemplate.origin == "undefined") tmpTemplate.origin = tmpTemplate.template;
|
|
$templateCache.put(tmpTemplate.origin, value);
|
|
});
|
|
}
|
|
/*angular.module("myitsmApp").run(["$rootScope", "$templateCache", "$templateRequest", "i18nService", function ($rootScope, $templateCache, $templateRequest, i18nService) {
|
|
for(var i = 0; i < nttSmartitModules.length; i++) {
|
|
var tmpModule= nttSmartitModules[i];
|
|
var modulePath = modulesPath+tmpModule.name()+"/";
|
|
|
|
//var count = tmpModule.templates().length;
|
|
let promises = [];
|
|
|
|
//add Template, add snipped or override
|
|
for(var x = 0; x < tmpModule.templates().length; x++) {
|
|
var tmpTemplate = tmpModule.templates()[x];
|
|
promises.push($templateRequest(modulePath+tmpTemplate.template));
|
|
}
|
|
|
|
Promise.all(promises).then((result)=>{
|
|
console.log(result);
|
|
})
|
|
|
|
}
|
|
|
|
}]);*/
|
|
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery")))
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./src/customApi/ntt-generic-service.js":
|
|
/*!**********************************************!*\
|
|
!*** ./src/customApi/ntt-generic-service.js ***!
|
|
\**********************************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports, __webpack_require__) {
|
|
|
|
"use strict";
|
|
|
|
|
|
(function () {
|
|
'use strict';
|
|
|
|
angular.module('myitsmApp').service('nttGenericService', ['$resource', '$http', 'systemAlertService', '$q', 'slaCalculatorService', 'approvalService', '$filter', '$state', function ($resource, $http, systemAlertService, $q, slaCalculatorService, approvalService, $filter, $state) {
|
|
return $resource('', {
|
|
form: '@form',
|
|
qual: '@qual'
|
|
}, {
|
|
getArEntriesByForm: {
|
|
url: '/smartit/rest/ntt/v1/generic/:form',
|
|
method: 'GET',
|
|
isArray: false
|
|
},
|
|
getArEntriesByFormAndQual: {
|
|
url: '/smartit/rest/ntt/v1/generic/:form/:qual',
|
|
method: 'GET',
|
|
isArray: false
|
|
}
|
|
});
|
|
/*this.getArEntries = function(formname,qual, params) {
|
|
|
|
if(typeof qual == 'undefined')
|
|
return resource.getArEntriesByForm({form:formname, params});
|
|
else
|
|
return resource.getArEntriesByFormAndQual({form:formname,qual:qual,params});
|
|
}*/
|
|
|
|
/*this.getGroupMembers = function (id, params) {
|
|
return resource.getGroupMembers({
|
|
groupId: id,
|
|
params: params,
|
|
thumbnail: true
|
|
}).$promise.then(function (result) {
|
|
return handleSupportGroupPersons(result[0].items[0].objects, true);
|
|
});
|
|
};
|
|
this.getAssigneeSupportGroupPersons = function (company, organization, personName, personLoginId, role, chunkSize, customerCompany, locationCompany, ownerCompany, primaryCompany, authorCompany, available, fromBlade) {
|
|
var inputParams = {
|
|
companyName: company
|
|
}, urlParams = {};
|
|
//inputParams.thumbnail = true; //to be enabled when thumbnail is supported
|
|
if (organization) {
|
|
inputParams.organization = organization;
|
|
}
|
|
if (personName) {
|
|
urlParams.searchText = personName;
|
|
}
|
|
if (personLoginId) {
|
|
inputParams.personLoginId = personLoginId;
|
|
}
|
|
if (role) {
|
|
inputParams.role = role;
|
|
}
|
|
if (chunkSize) {
|
|
urlParams.chunkInfo = { startIndex: 0, chunkSize: chunkSize };
|
|
}
|
|
if (customerCompany) {
|
|
inputParams.customerCompany = customerCompany;
|
|
}
|
|
if (locationCompany) {
|
|
inputParams.locationCompany = locationCompany;
|
|
}
|
|
if (angular.isDefined(ownerCompany)) {
|
|
inputParams.ownerCompany = ownerCompany;
|
|
}
|
|
if (primaryCompany) {
|
|
inputParams.primaryCompany = primaryCompany;
|
|
}
|
|
if (authorCompany) {
|
|
inputParams.authorCompany = authorCompany;
|
|
}
|
|
inputParams.available = available;
|
|
return resource.getAssigneeSupportGroupPersons(urlParams, inputParams).$promise
|
|
.then(function (result) {
|
|
var unique = (personName && personName.length) || !result[0].items[0].exceedsChunkSize;
|
|
// return unique record only if user is doing typeahead search or result is smaller than chuckSize
|
|
if (!_.isUndefined(fromBlade) && fromBlade) {
|
|
return handleSupportGroupPersonsForBlade(result[0].items[0].objects, result[0].items[0].totalMatches, unique, result[0].items[0].exceedsChunkSize);
|
|
}
|
|
return handleSupportGroupPersons(result[0].items[0].objects, unique, result[0].items[0].exceedsChunkSize);
|
|
});
|
|
};
|
|
this.getPersonsBySupportCompanyAndOrg = function (company, organization, personName, role, chunkSize, customerCompany, locationCompany, ownerCompany, primaryCompany, fromBlade) {
|
|
var inputParams = {
|
|
companyName: company,
|
|
thumbnail: true
|
|
};
|
|
if (organization) {
|
|
inputParams.organization = organization;
|
|
}
|
|
if (personName) {
|
|
inputParams.personText = personName;
|
|
}
|
|
if (role) {
|
|
inputParams.role = role;
|
|
}
|
|
if (chunkSize) {
|
|
inputParams.chunkInfo = { startIndex: 0, chunkSize: chunkSize };
|
|
}
|
|
if (customerCompany) {
|
|
inputParams.customerCompany = customerCompany;
|
|
}
|
|
if (locationCompany) {
|
|
inputParams.locationCompany = locationCompany;
|
|
}
|
|
if (angular.isDefined(ownerCompany)) {
|
|
inputParams.ownerCompany = ownerCompany;
|
|
}
|
|
if (primaryCompany) {
|
|
inputParams.primaryCompany = primaryCompany;
|
|
}
|
|
return resource.getSupportGroupPersons(inputParams).$promise
|
|
.then(function (result) {
|
|
var unique = (personName && personName.length) || result[0].items[0].objects.length < chunkSize;
|
|
// return unique record only if user is doing typeahead search or result is smaller than chuckSize
|
|
if (!_.isUndefined(fromBlade) && fromBlade) {
|
|
return handleSupportGroupPersonsForBlade(result[0].items[0].objects, result[0].items[0].totalMatches, unique, result[0].items[0].exceedsChunkSize);
|
|
}
|
|
else {
|
|
return handleSupportGroupPersons(result[0].items[0].objects, unique, result[0].items[0].exceedsChunkSize);
|
|
}
|
|
});
|
|
};
|
|
this.getAssigneeBySupportGroupId = function (supportGroupId, personName, personLoginId, customerCompany, role, chunkSize, available, locationCompany, ownerCompany, authorCompany, fromBlade) {
|
|
var inputParams = {
|
|
supportGroupId: supportGroupId
|
|
}, urlParams = {};
|
|
//inputParams.thumbnail = true //to be enabled when thumbnail is supported
|
|
if (personName) {
|
|
urlParams.searchText = personName;
|
|
}
|
|
if (personLoginId) {
|
|
inputParams.personLoginId = personLoginId;
|
|
}
|
|
if (customerCompany) {
|
|
inputParams.customerCompany = customerCompany;
|
|
}
|
|
if (locationCompany) {
|
|
inputParams.locationCompany = locationCompany;
|
|
}
|
|
if (angular.isDefined(ownerCompany)) {
|
|
inputParams.ownerCompany = ownerCompany;
|
|
}
|
|
if (angular.isDefined(authorCompany)) {
|
|
inputParams.authorCompany = authorCompany;
|
|
}
|
|
if (role) {
|
|
inputParams.role = role;
|
|
}
|
|
if (chunkSize) {
|
|
urlParams.chunkInfo = { startIndex: 0, chunkSize: chunkSize };
|
|
}
|
|
inputParams.available = available;
|
|
return resource.getAssigneeSupportGroupPersons(urlParams, inputParams).$promise
|
|
.then(function (result) {
|
|
var unique = (personName && personName.length) || result[0].items[0].objects.length < chunkSize;
|
|
if (!_.isUndefined(fromBlade) && fromBlade) {
|
|
return handleSupportGroupPersonsForBlade(result[0].items[0].objects, result[0].items[0].totalMatches, unique, result[0].items[0].exceedsChunkSize);
|
|
}
|
|
return handleSupportGroupPersons(result[0].items[0].objects, unique, result[0].items[0].exceedsChunkSize);
|
|
});
|
|
};
|
|
this.getPersonsBySupportGroupId = function (supportGroupId, personName, role, chunkSize, fromBlade) {
|
|
var inputParams = {
|
|
supportGroupId: supportGroupId,
|
|
thumbnail: true
|
|
};
|
|
if (personName) {
|
|
inputParams.personText = personName;
|
|
}
|
|
if (role) {
|
|
inputParams.role = role;
|
|
}
|
|
if (chunkSize) {
|
|
inputParams.chunkInfo = { startIndex: 0, chunkSize: chunkSize };
|
|
}
|
|
return resource.getSupportGroupPersons(inputParams).$promise
|
|
.then(function (result) {
|
|
var unique = (personName && personName.length) || result[0].items[0].objects.length < chunkSize;
|
|
if (!_.isUndefined(fromBlade) && fromBlade) {
|
|
return handleSupportGroupPersonsForBlade(result[0].items[0].objects, result[0].items[0].totalMatches, unique, result[0].items[0].exceedsChunkSize);
|
|
}
|
|
return handleSupportGroupPersons(result[0].items[0].objects, unique, result[0].items[0].exceedsChunkSize);
|
|
});
|
|
};
|
|
function handleSupportGroupPersonsForBlade(result, totalMatches, unique, exceedsChunkSize) {
|
|
var supportPersonList = result.map(function (person) {
|
|
return new PersonVO().build(person);
|
|
});
|
|
var results;
|
|
if (unique) {
|
|
results = _.unique(supportPersonList, function (supportPerson) {
|
|
return supportPerson.loginId + '*' + supportPerson.supportGroupId;
|
|
});
|
|
}
|
|
else {
|
|
results = supportPersonList;
|
|
}
|
|
var searchResult = {};
|
|
searchResult.results = results;
|
|
searchResult.totalMatches = totalMatches;
|
|
searchResult.exceedsChunkSize = exceedsChunkSize;
|
|
return searchResult;
|
|
}
|
|
function handleSupportGroupPersons(result, unique, exceedsChunkSize) {
|
|
var supportPersonList = result.map(function (person) {
|
|
return new PersonVO().build(person);
|
|
});
|
|
var results;
|
|
if (unique) {
|
|
results = _.unique(supportPersonList, function (supportPerson) {
|
|
return supportPerson.loginId + '*' + supportPerson.supportGroupId;
|
|
});
|
|
}
|
|
else {
|
|
results = supportPersonList;
|
|
}
|
|
var searchResult = {};
|
|
searchResult.results = results;
|
|
searchResult.exceedsChunkSize = exceedsChunkSize;
|
|
return searchResult;
|
|
}
|
|
this.applyAction = function (id, type, action, data) {
|
|
return resource.applyAction({ id: id, type: type, action: action }, data).$promise;
|
|
};
|
|
this.getAvailableStatuses = function (id, type) {
|
|
return resource.getAvailableStatuses({ id: id, type: type }).$promise.then(function (response) {
|
|
return response[0].items || [];
|
|
});
|
|
};
|
|
this.getTaskPhases = function (params) {
|
|
return resource.getTaskPhases(params).$promise
|
|
.then(function (response) {
|
|
return response[0].items;
|
|
});
|
|
};
|
|
this.getDraftForRelated = function (type, fromType, id, templateId) {
|
|
//passing empty data to POST call - for params to get replaced in the url
|
|
var params = {
|
|
id: id,
|
|
fromType: fromType,
|
|
type: type
|
|
};
|
|
if (templateId) {
|
|
params.templateId = templateId;
|
|
}
|
|
return resource.getDraftForRelated(params, {}).$promise.then(function (response) {
|
|
return transformResponse(type, response[0].items[0]);
|
|
});
|
|
};
|
|
this.getRelatedDraftFromAsset = function (type, asset, templateId) {
|
|
var params = {
|
|
type: type
|
|
};
|
|
if (templateId) {
|
|
params.templateId = templateId;
|
|
}
|
|
delete asset.accessMappings;
|
|
delete asset.allCategories;
|
|
delete asset.lifecycleDates;
|
|
return resource.getRelatedDraftFromAsset(params, asset).$promise.then(function (response) {
|
|
return transformResponse(type, response[0].items[0]);
|
|
});
|
|
};
|
|
this.saveImpactedAreas = function (id, type, params) {
|
|
return resource.saveImpactedAreas({ id: id, type: type }, params).$promise;
|
|
};
|
|
this.deleteImpactedAreas = function (id, type, params) {
|
|
return $http({
|
|
method: 'DELETE',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
url: '/smartit/rest/impactedarea/' + type + '/' + id,
|
|
data: params
|
|
})
|
|
.catch(function (err) {
|
|
systemAlertService.error({
|
|
text: err.data && (err.data.defaultMessage || err.data.error),
|
|
clear: false
|
|
});
|
|
return $q.reject(err);
|
|
});
|
|
};
|
|
this.getRootCause = function (params) {
|
|
return resource
|
|
.getRootCause({ criteria: params })
|
|
.$promise.then(function (response) {
|
|
var rootCause = [];
|
|
for (var i = 0; i < response[0].items[0].length; i++) {
|
|
rootCause.push({
|
|
name: response[0].items[0][i],
|
|
label: response[0].items[0][i]
|
|
});
|
|
}
|
|
return rootCause;
|
|
});
|
|
};
|
|
this.getImpactAnalysisVisualisationData = function (type, id) {
|
|
return resource.getImpactAnalysis({ id: id, type: type }).$promise;
|
|
//return resource.getImpactAnalysisMock().$promise;
|
|
};
|
|
this.getImpactAnalysisStatus = function (id, type) {
|
|
return resource.getImpactAnalysisStatus({ id: id, type: type }).$promise.then(function (response) {
|
|
return response[0].items[0] || [];
|
|
});
|
|
};
|
|
this.impactAnalysisAction = function (id, type, params) {
|
|
return resource.impactAnalysisAction({ id: id, type: type }, params).$promise.then(function (response) {
|
|
return response[0].items[0] || [];
|
|
});
|
|
};
|
|
this.getRecentlyUsedChangeTemplates = function (templateList) {
|
|
return resource.getRecentlyUsedChangeTemplates({ 'templateList': templateList }).$promise;
|
|
};
|
|
this.getRecentlyUsedReleaseTemplates = function (templateList) {
|
|
return resource.getRecentlyUsedReleaseTemplates({ 'templateList': templateList }).$promise;
|
|
};
|
|
this.getURLforTaskFlow = function (id, params) {
|
|
return resource.getURLforTaskFlow({ id: id }, params).$promise;
|
|
};
|
|
this.getVendorInfo = function (displayId, type) {
|
|
return resource.getVendorInfo({ displayId: displayId, type: type }).$promise.then(function (response) {
|
|
return response && response.tickets || [];
|
|
});
|
|
};
|
|
this.copyChange = function (ticketId, params) {
|
|
return resource.copyChange({ ticketId: ticketId }, params).$promise.then(function (response) {
|
|
return transformResponse('change', response[0].items[0]);
|
|
});
|
|
};
|
|
*/
|
|
}]);
|
|
})();
|
|
|
|
/***/ }),
|
|
|
|
/***/ "jquery":
|
|
/*!*************************!*\
|
|
!*** external "jQuery" ***!
|
|
\*************************/
|
|
/*! no static exports found */
|
|
/***/ (function(module, exports) {
|
|
|
|
module.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
});
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9udHQuc21hcnRpdC5bbmFtZV0vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL250dC5zbWFydGl0LltuYW1lXS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9udHQuc21hcnRpdC5bbmFtZV0vLi9zcmMvY3VzdG9tQXBpL0lDdXN0b21Nb2R1bGUuanMiLCJ3ZWJwYWNrOi8vbnR0LnNtYXJ0aXQuW25hbWVdLy4vc3JjL2N1c3RvbUFwaS9pbmRleC5qcyIsIndlYnBhY2s6Ly9udHQuc21hcnRpdC5bbmFtZV0vLi9zcmMvY3VzdG9tQXBpL250dC1nZW5lcmljLXNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vbnR0LnNtYXJ0aXQuW25hbWVdL2V4dGVybmFsIFwialF1ZXJ5XCIiXSwibmFtZXMiOlsiSUN1c3RvbU1vZHVsZSIsIm50dFNtYXJ0aXRNb2R1bGVzIiwicmVxdWlyZSIsIm1vZHVsZXNQYXRoIiwiYm9vdHN0cmFwT2xkIiwiYW5ndWxhciIsImJvb3RzdHJhcCIsImFwcGx5IiwiYXJndW1lbnRzIiwic3RhcnROdHRCb290c3RyYXAiLCJnZXRBbmd1bGFyU2VydmljZXMiLCJtZXJnZUkxOG5sb2NhbGVzIiwiYW5ndWxhclNlcnZpY2VzIiwiYWxsU2VydmljZXMiLCJpbmplY3RvciIsImVsZW1lbnQiLCJkb2N1bWVudCIsIm9yaWdpbmFsSGFzT3duUHJvcGVydHkiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsImNhY2hlIiwic3RhcnRBcHBOVFQiLCJkYXRhIiwiaTE4blNlcnZpY2UiLCJkaWN0aW9uYXJ5IiwiJCIsImV4dGVuZCIsImkiLCJsZW5ndGgiLCJtb2R1bGVQYXRoIiwibmFtZSIsInRtcE1vZHVsZUxvY2FsZXMiLCJpMThuTG9jYWxlcyIsIngiLCJ3aGVuIiwiZ2V0SlNPTiIsInBhdGgiLCJ0aGVuIiwibW9kdWxlIiwicnVuIiwiJHJvb3RTY29wZSIsIiR0ZW1wbGF0ZUNhY2hlIiwiJHRlbXBsYXRlUmVxdWVzdCIsInRtcE1vZHVsZSIsImNvdW50IiwidGVtcGxhdGVzIiwidG1wVGVtcGxhdGUiLCJzZXRUZW1wbGF0ZUNhY2hlIiwidGVtcGxhdGUiLCJ0UmVxdWVzdCIsIlByb21pc2UiLCJyZXNvbHZlIiwidmFsdWUiLCJvcmlnaW4iLCJwdXQiLCJzZXJ2aWNlIiwiJHJlc291cmNlIiwiJGh0dHAiLCJzeXN0ZW1BbGVydFNlcnZpY2UiLCIkcSIsInNsYUNhbGN1bGF0b3JTZXJ2aWNlIiwiYXBwcm92YWxTZXJ2aWNlIiwiJGZpbHRlciIsIiRzdGF0ZSIsImZvcm0iLCJxdWFsIiwiZ2V0QXJFbnRyaWVzQnlGb3JtIiwidXJsIiwibWV0aG9kIiwiaXNBcnJheSIsImdldEFyRW50cmllc0J5Rm9ybUFuZFF1YWwiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsdURBQXVEO0FBQ3hGLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrREFBMEMsZ0NBQWdDO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0VBQXdELGtCQUFrQjtBQUMxRTtBQUNBLHlEQUFpRCxjQUFjO0FBQy9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBeUMsaUNBQWlDO0FBQzFFLHdIQUFnSCxtQkFBbUIsRUFBRTtBQUNySTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOzs7QUFHQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGTyxJQUFNQSxhQUFiO0FBQUE7QUFBQSxFOzs7Ozs7Ozs7Ozs7QUNBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNPLElBQUlDLGlCQUFpQixHQUFHLEVBQXhCOztBQUNQQyxtQkFBTyxDQUFDLHFFQUFELENBQVA7O0FBR0EsSUFBTUMsV0FBVyxHQUFHLGtCQUFwQixDLENBRUE7O0FBQ0EsSUFBSUMsWUFBWSxHQUFHQyxPQUFPLENBQUNDLFNBQTNCOztBQUVBRCxPQUFPLENBQUNDLFNBQVIsR0FBb0IsWUFBWTtBQUU5QkYsY0FBWSxDQUFDRyxLQUFiLENBQW1CSCxZQUFuQixFQUFpQ0ksU0FBakM7QUFDQUMsbUJBQWlCO0FBQ2xCLENBSkQ7O0FBTUEsU0FBU0EsaUJBQVQsR0FBNkI7QUFDMUJDLG9CQUFrQjtBQUNsQkMsa0JBQWdCO0FBQ2xCOztBQUVNLElBQUlDLGVBQUo7O0FBQ1AsU0FBU0Ysa0JBQVQsR0FBOEI7QUFFdkJFLGlCQUFlLEdBQUdDLFdBQVcsRUFBN0I7O0FBRUQsV0FBU0EsV0FBVCxHQUF1QjtBQUNyQixRQUFNQyxRQUFRLEdBQUdULE9BQU8sQ0FBQ1UsT0FBUixDQUFnQkMsUUFBaEIsRUFBMEJGLFFBQTFCLEVBQWpCO0FBQ0EsUUFBTUcsc0JBQXNCLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBaEQ7O0FBQ0FGLFVBQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsR0FBa0M7QUFBQSxhQUFNLElBQU47QUFBQSxLQUFsQzs7QUFDQUYsVUFBTSxDQUFDRyxjQUFQLENBQXNCSCxNQUFNLENBQUNDLFNBQTdCLEVBQXdDLFVBQXhDLEVBQW9EO0FBQUVHLGtCQUFZLEVBQUUsSUFBaEI7QUFBc0JDLGdCQUFVLEVBQUUsS0FBbEM7QUFBeUNDLFNBQXpDLGlCQUErQztBQUFFLGVBQU8sSUFBUDtBQUFhO0FBQTlELEtBQXBEO0FBQ0EsUUFBTUMsS0FBSyxHQUFHWCxRQUFRLENBQUNVLEdBQVQsQ0FBYSxVQUFiLENBQWQ7QUFDQU4sVUFBTSxDQUFDQyxTQUFQLENBQWlCQyxjQUFqQixHQUFrQ0gsc0JBQWxDO0FBQ0EsV0FBT1EsS0FBUDtBQUNEO0FBQ047O0FBRUQsSUFBSUMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBVUMsSUFBVixFQUFnQjtBQUNoQ2YsaUJBQWUsQ0FBQ2dCLFdBQWhCLENBQTRCQyxVQUE1QixHQUF5Q0MsQ0FBQyxDQUFDQyxNQUFGLENBQVNuQixlQUFlLENBQUNnQixXQUFoQixDQUE0QkMsVUFBckMsRUFBaURGLElBQWpELENBQXpDO0FBQ0QsQ0FGRDtBQUlBOzs7Ozs7Ozs7O0FBU0EsU0FBU2hCLGdCQUFULEdBQTRCO0FBRzFCLE9BQUksSUFBSXFCLENBQUMsR0FBRyxDQUFaLEVBQWVBLENBQUMsR0FBRy9CLGlCQUFpQixDQUFDZ0MsTUFBckMsRUFBNkNELENBQUMsRUFBOUMsRUFBa0Q7QUFDOUMsUUFBSUUsVUFBVSxHQUFHL0IsV0FBVyxHQUFDRixpQkFBaUIsQ0FBQytCLENBQUQsQ0FBakIsQ0FBcUJHLElBQXJCLEVBQVosR0FBd0MsR0FBekQ7QUFDQSxRQUFJQyxnQkFBZ0IsR0FBR25DLGlCQUFpQixDQUFDK0IsQ0FBRCxDQUFqQixDQUFxQkssV0FBckIsRUFBdkI7O0FBRUEsU0FBSSxJQUFJQyxDQUFDLEdBQUcsQ0FBWixFQUFlQSxDQUFDLEdBQUdGLGdCQUFnQixDQUFDSCxNQUFwQyxFQUE0Q0ssQ0FBQyxFQUE3QyxFQUFpRDtBQUMvQ1IsT0FBQyxDQUFDUyxJQUFGLENBQU9ULENBQUMsQ0FBQ1UsT0FBRixDQUFVTixVQUFVLEdBQUNFLGdCQUFnQixDQUFDRSxDQUFELENBQWhCLENBQW9CRyxJQUF6QyxDQUFQLEVBQXVEQyxJQUF2RCxDQUE0RGhCLFdBQTVEO0FBQ0Q7QUFHSixHQVp5QixDQWExQjs7QUFJQTs7Ozs7O0FBS0Q7O0FBRURyQixPQUFPLENBQUNzQyxNQUFSLENBQWUsV0FBZixFQUE0QkMsR0FBNUIsQ0FBZ0MsQ0FBQyxZQUFELEVBQWUsZ0JBQWYsRUFBaUMsa0JBQWpDLEVBQXFELGFBQXJELEVBQW9FLFVBQVVDLFVBQVYsRUFBc0JDLGNBQXRCLEVBQXNDQyxnQkFBdEMsRUFBd0RuQixXQUF4RCxFQUFxRTtBQUV2SyxPQUFJLElBQUlJLENBQUMsR0FBRyxDQUFaLEVBQWVBLENBQUMsR0FBRy9CLGlCQUFpQixDQUFDZ0MsTUFBckMsRUFBNkNELENBQUMsRUFBOUMsRUFBa0Q7QUFDaEQsUUFBSWdCLFNBQVMsR0FBRS9DLGlCQUFpQixDQUFDK0IsQ0FBRCxDQUFoQztBQUNBLFFBQUlFLFVBQVUsR0FBRy9CLFdBQVcsR0FBQzZDLFNBQVMsQ0FBQ2IsSUFBVixFQUFaLEdBQTZCLEdBQTlDO0FBRUEsUUFBSWMsS0FBSyxHQUFHRCxTQUFTLENBQUNFLFNBQVYsR0FBc0JqQixNQUFsQyxDQUpnRCxDQU1oRDs7QUFDQSxTQUFJLElBQUlLLENBQUMsR0FBRyxDQUFaLEVBQWVBLENBQUMsR0FBR1UsU0FBUyxDQUFDRSxTQUFWLEdBQXNCakIsTUFBekMsRUFBaURLLENBQUMsRUFBbEQsRUFBc0Q7QUFDcEQsVUFBSWEsV0FBVyxHQUFHSCxTQUFTLENBQUNFLFNBQVYsR0FBc0JaLENBQXRCLENBQWxCO0FBQ0FjLHNCQUFnQixDQUFDTCxnQkFBRCxFQUFrQkQsY0FBbEIsRUFBaUNLLFdBQWpDLEVBQTZDakIsVUFBN0MsQ0FBaEI7QUFDQTs7Ozs7O0FBUUQ7QUFDRjtBQUVGLENBdkIrQixDQUFoQzs7QUF5QkUsU0FBU2tCLGdCQUFULENBQTBCTCxnQkFBMUIsRUFBMkNELGNBQTNDLEVBQTBESyxXQUExRCxFQUFzRWpCLFVBQXRFLEVBQWtGO0FBRTlFO0FBQ0EsTUFBSU8sSUFBSSxHQUFHUCxVQUFVLEdBQUNpQixXQUFXLENBQUNFLFFBQWxDO0FBQ0EsTUFBSUMsUUFBUSxHQUFHUCxnQkFBZ0IsQ0FBQ04sSUFBRCxDQUEvQjtBQUVBYyxTQUFPLENBQUNDLE9BQVIsQ0FBZ0JGLFFBQWhCLEVBQTBCWixJQUExQixDQUErQixVQUFVZSxLQUFWLEVBQWlCO0FBQzlDLFFBQUcsT0FBT04sV0FBVyxDQUFDTyxNQUFuQixJQUE2QixXQUFoQyxFQUNNUCxXQUFXLENBQUNPLE1BQVosR0FBcUJQLFdBQVcsQ0FBQ0UsUUFBakM7QUFFTlAsa0JBQWMsQ0FBQ2EsR0FBZixDQUFtQlIsV0FBVyxDQUFDTyxNQUEvQixFQUF1Q0QsS0FBdkM7QUFDRCxHQUxEO0FBTUg7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDakhXOztBQUNaLGFBQVk7QUFDVDs7QUFDQXBELFNBQU8sQ0FBQ3NDLE1BQVIsQ0FBZSxXQUFmLEVBQ0tpQixPQURMLENBQ2EsbUJBRGIsRUFDa0MsQ0FBQyxXQUFELEVBQWMsT0FBZCxFQUF1QixvQkFBdkIsRUFBNkMsSUFBN0MsRUFBbUQsc0JBQW5ELEVBQTJFLGlCQUEzRSxFQUE4RixTQUE5RixFQUF5RyxRQUF6RyxFQUM5QixVQUFVQyxTQUFWLEVBQXFCQyxLQUFyQixFQUE0QkMsa0JBQTVCLEVBQWdEQyxFQUFoRCxFQUFvREMsb0JBQXBELEVBQTBFQyxlQUExRSxFQUEyRkMsT0FBM0YsRUFBb0dDLE1BQXBHLEVBQTRHO0FBQ3hHLFdBQVFQLFNBQVMsQ0FBQyxFQUFELEVBQUs7QUFDbEJRLFVBQUksRUFBRSxPQURZO0FBRWxCQyxVQUFJLEVBQUU7QUFGWSxLQUFMLEVBR2Q7QUFDQ0Msd0JBQWtCLEVBQUM7QUFBQ0MsV0FBRyxFQUFFLG9DQUFOO0FBQTJDQyxjQUFNLEVBQUMsS0FBbEQ7QUFBd0RDLGVBQU8sRUFBQztBQUFoRSxPQURwQjtBQUVDQywrQkFBeUIsRUFBQztBQUFDSCxXQUFHLEVBQUUsMENBQU47QUFBaURDLGNBQU0sRUFBQyxLQUF4RDtBQUErREMsZUFBTyxFQUFDO0FBQXZFO0FBRjNCLEtBSGMsQ0FBakI7QUFVQTs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK1NILEdBclU2QixDQURsQztBQXVVSCxDQXpVQSxHQUFELEM7Ozs7Ozs7Ozs7O0FDREEsb0QiLCJmaWxlIjoibnR0LnNtYXJ0aXQuYXBpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwialF1ZXJ5XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcImpRdWVyeVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJhcGlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJqUXVlcnlcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm50dFwiXSA9IHJvb3RbXCJudHRcIl0gfHwge30sIHJvb3RbXCJudHRcIl1bXCJzbWFydGl0XCJdID0gcm9vdFtcIm50dFwiXVtcInNtYXJ0aXRcIl0gfHwge30sIHJvb3RbXCJudHRcIl1bXCJzbWFydGl0XCJdW1wiYXBpXCJdID0gZmFjdG9yeShyb290W1wialF1ZXJ5XCJdKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9qcXVlcnlfXykge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2N1c3RvbUFwaS9pbmRleC5qc1wiKTtcbiIsImV4cG9ydCBjbGFzcyBJQ3VzdG9tTW9kdWxlIHtcclxuXHJcbiAgLyogZ2V0VGVtcGxhdGVzKCkge1xyXG4gICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzKCk7XHJcbiAgIH0qL1xyXG5cclxuICAgLypnZXRJMThuTG9jYWxlcyhsb2NhbGUpIHsgICBcclxuICAgICB2YXIgaTE4bG9jYWxlcyA9IGkxOG5Mb2NhbGVzKCk7XHJcbiAgICAgXHJcbiAgICAgXHJcblxyXG4gICB9Ki9cclxuXHJcbn0iLCJleHBvcnQgKiBmcm9tICcuL0lDdXN0b21Nb2R1bGUnO1xyXG5leHBvcnQgdmFyIG50dFNtYXJ0aXRNb2R1bGVzID0gW107XHJcbnJlcXVpcmUoJy4vbnR0LWdlbmVyaWMtc2VydmljZScpO1xyXG5cclxuXHJcbmNvbnN0IG1vZHVsZXNQYXRoID0gXCJOVFREQVRBL21vZHVsZXMvXCI7XHJcblxyXG4vL292ZXJyaWRlIGJvb3RzdHJhcCBtZXRob2RcclxudmFyIGJvb3RzdHJhcE9sZCA9IGFuZ3VsYXIuYm9vdHN0cmFwO1xyXG5cclxuYW5ndWxhci5ib290c3RyYXAgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIGJvb3RzdHJhcE9sZC5hcHBseShib290c3RyYXBPbGQsIGFyZ3VtZW50cyk7XHJcbiAgc3RhcnROdHRCb290c3RyYXAoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gc3RhcnROdHRCb290c3RyYXAoKSB7XHJcbiAgIGdldEFuZ3VsYXJTZXJ2aWNlcygpO1xyXG4gICBtZXJnZUkxOG5sb2NhbGVzKCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgYW5ndWxhclNlcnZpY2VzO1xyXG5mdW5jdGlvbiBnZXRBbmd1bGFyU2VydmljZXMoKSB7XHJcbiAgICAgXHJcbiAgICAgICBhbmd1bGFyU2VydmljZXMgPSBhbGxTZXJ2aWNlcygpO1xyXG5cclxuICAgICAgZnVuY3Rpb24gYWxsU2VydmljZXMoKSB7XHJcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBhbmd1bGFyLmVsZW1lbnQoZG9jdW1lbnQpLmluamVjdG9yKCk7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxIYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcclxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5ID0gKCkgPT4gdHJ1ZVxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCAnX19zZWxmX18nLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGdldCgpIHsgcmV0dXJuIHRoaXMgfSB9KVxyXG4gICAgICAgIGNvbnN0IGNhY2hlID0gaW5qZWN0b3IuZ2V0KCdfX3NlbGZfXycpXHJcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSA9IG9yaWdpbmFsSGFzT3duUHJvcGVydHlcclxuICAgICAgICByZXR1cm4gY2FjaGVcclxuICAgICAgfVxyXG59XHJcblxyXG52YXIgc3RhcnRBcHBOVFQgPSBmdW5jdGlvbiAoZGF0YSkge1xyXG4gIGFuZ3VsYXJTZXJ2aWNlcy5pMThuU2VydmljZS5kaWN0aW9uYXJ5ID0gJC5leHRlbmQoYW5ndWxhclNlcnZpY2VzLmkxOG5TZXJ2aWNlLmRpY3Rpb25hcnksIGRhdGEpO1xyXG59XHJcblxyXG4vKmZ1bmN0aW9uIG1lcmdlSTE4bmxvY2FsZXMoKSB7XHJcblxyXG4gICQud2hlbigkLmdldEpTT04oJ05UVC9zY3JpcHRzL2kxOG4vbnR0LXJlc291cmNlcy1sb2NhbGVfJyArIG15aXRzbUxvY2FsZSArICcuanNvbicpKVxyXG4gICAgLmZhaWwoZnVuY3Rpb24gKGVycikge1xyXG4gICAgICByZXR1cm4gJC53aGVuKCQuZ2V0SlNPTignTlRUL3NjcmlwdHMvaTE4bi9udHQtcmVzb3VyY2VzLWxvY2FsZV8nICsgbXlpdHNtTG9jYWxlICsgJy5qc29uJykpLnRoZW4oc3RhcnRBcHBOVFQpO1xyXG4gICAgfSlcclxuICAgIC50aGVuKHN0YXJ0QXBwTlRUKTtcclxufSovXHJcblxyXG5mdW5jdGlvbiBtZXJnZUkxOG5sb2NhbGVzKCkge1xyXG4gXHJcblxyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBudHRTbWFydGl0TW9kdWxlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgbW9kdWxlUGF0aCA9IG1vZHVsZXNQYXRoK250dFNtYXJ0aXRNb2R1bGVzW2ldLm5hbWUoKStcIi9cIjtcclxuICAgICAgdmFyIHRtcE1vZHVsZUxvY2FsZXMgPSBudHRTbWFydGl0TW9kdWxlc1tpXS5pMThuTG9jYWxlcygpO1xyXG4gICAgICBcclxuICAgICAgZm9yKHZhciB4ID0gMDsgeCA8IHRtcE1vZHVsZUxvY2FsZXMubGVuZ3RoOyB4KyspIHtcclxuICAgICAgICAkLndoZW4oJC5nZXRKU09OKG1vZHVsZVBhdGgrdG1wTW9kdWxlTG9jYWxlc1t4XS5wYXRoKSkudGhlbihzdGFydEFwcE5UVCk7ICAgICAgICBcclxuICAgICAgfVxyXG4gICAgICAgICBcclxuXHJcbiAgfVxyXG4gIC8vT3ZlcnJpZGUgaTE4biBsb2NhbGVcclxuXHJcblxyXG5cclxuICAvKiQud2hlbigkLmdldEpTT04oJ05UVC9zY3JpcHRzL2kxOG4vbnR0LXJlc291cmNlcy1sb2NhbGVfJyArIG15aXRzbUxvY2FsZSArICcuanNvbicpKVxyXG4gICAgLmZhaWwoZnVuY3Rpb24gKGVycikge1xyXG4gICAgICByZXR1cm4gJC53aGVuKCQuZ2V0SlNPTignTlRUL3NjcmlwdHMvaTE4bi9udHQtcmVzb3VyY2VzLWxvY2FsZV8nICsgbXlpdHNtTG9jYWxlICsgJy5qc29uJykpLnRoZW4oc3RhcnRBcHBOVFQpO1xyXG4gICAgfSlcclxuICAgIC50aGVuKHN0YXJ0QXBwTlRUKTsqL1xyXG59XHJcblxyXG5hbmd1bGFyLm1vZHVsZShcIm15aXRzbUFwcFwiKS5ydW4oW1wiJHJvb3RTY29wZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHRlbXBsYXRlUmVxdWVzdFwiLCBcImkxOG5TZXJ2aWNlXCIsIGZ1bmN0aW9uICgkcm9vdFNjb3BlLCAkdGVtcGxhdGVDYWNoZSwgJHRlbXBsYXRlUmVxdWVzdCwgaTE4blNlcnZpY2UpIHtcclxuXHJcbiAgZm9yKHZhciBpID0gMDsgaSA8IG50dFNtYXJ0aXRNb2R1bGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICB2YXIgdG1wTW9kdWxlPSBudHRTbWFydGl0TW9kdWxlc1tpXTtcclxuICAgIHZhciBtb2R1bGVQYXRoID0gbW9kdWxlc1BhdGgrdG1wTW9kdWxlLm5hbWUoKStcIi9cIjtcclxuXHJcbiAgICB2YXIgY291bnQgPSB0bXBNb2R1bGUudGVtcGxhdGVzKCkubGVuZ3RoO1xyXG5cclxuICAgIC8vYWRkIFRlbXBsYXRlLCBhZGQgc25pcHBlZCBvciBvdmVycmlkZVxyXG4gICAgZm9yKHZhciB4ID0gMDsgeCA8IHRtcE1vZHVsZS50ZW1wbGF0ZXMoKS5sZW5ndGg7IHgrKykge1xyXG4gICAgICB2YXIgdG1wVGVtcGxhdGUgPSB0bXBNb2R1bGUudGVtcGxhdGVzKClbeF07XHJcbiAgICAgIHNldFRlbXBsYXRlQ2FjaGUoJHRlbXBsYXRlUmVxdWVzdCwkdGVtcGxhdGVDYWNoZSx0bXBUZW1wbGF0ZSxtb2R1bGVQYXRoKTtcclxuICAgICAgLyp2YXIgdFJlcXVlc3QgPSAkdGVtcGxhdGVSZXF1ZXN0KG1vZHVsZVBhdGgrdG1wVGVtcGxhdGUudGVtcGxhdGUpO1xyXG5cclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKHRSZXF1ZXN0KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSx0bXBNb2R1bGUpIHtcclxuICAgICAgICBpZih0eXBlb2YgdG1wVGVtcGxhdGUub3JpZ2luID09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgICAgdG1wVGVtcGxhdGUub3JpZ2luID0gdG1wVGVtcGxhdGUudGVtcGxhdGU7XHJcblxyXG4gICAgICAgICR0ZW1wbGF0ZUNhY2hlLnB1dCh0bXBUZW1wbGF0ZS5vcmlnaW4sIHZhbHVlKTtcclxuICAgICAgfSk7Ki9cclxuICAgIH1cclxuICB9ICBcclxuXHJcbn1dKTtcclxuXHJcbiAgZnVuY3Rpb24gc2V0VGVtcGxhdGVDYWNoZSgkdGVtcGxhdGVSZXF1ZXN0LCR0ZW1wbGF0ZUNhY2hlLHRtcFRlbXBsYXRlLG1vZHVsZVBhdGgpIHtcclxuXHJcbiAgICAgIC8vdmFyIHRtcFRlbXBsYXRlID0gdG1wTW9kdWxlLnRlbXBsYXRlcygpW3hdO1xyXG4gICAgICBsZXQgcGF0aCA9IG1vZHVsZVBhdGgrdG1wVGVtcGxhdGUudGVtcGxhdGU7XHJcbiAgICAgIGxldCB0UmVxdWVzdCA9ICR0ZW1wbGF0ZVJlcXVlc3QocGF0aCk7XHJcblxyXG4gICAgICBQcm9taXNlLnJlc29sdmUodFJlcXVlc3QpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYodHlwZW9mIHRtcFRlbXBsYXRlLm9yaWdpbiA9PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICAgIHRtcFRlbXBsYXRlLm9yaWdpbiA9IHRtcFRlbXBsYXRlLnRlbXBsYXRlO1xyXG5cclxuICAgICAgICAkdGVtcGxhdGVDYWNoZS5wdXQodG1wVGVtcGxhdGUub3JpZ2luLCB2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyphbmd1bGFyLm1vZHVsZShcIm15aXRzbUFwcFwiKS5ydW4oW1wiJHJvb3RTY29wZVwiLCBcIiR0ZW1wbGF0ZUNhY2hlXCIsIFwiJHRlbXBsYXRlUmVxdWVzdFwiLCBcImkxOG5TZXJ2aWNlXCIsIGZ1bmN0aW9uICgkcm9vdFNjb3BlLCAkdGVtcGxhdGVDYWNoZSwgJHRlbXBsYXRlUmVxdWVzdCwgaTE4blNlcnZpY2UpIHtcclxuXHJcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgbnR0U21hcnRpdE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIHRtcE1vZHVsZT0gbnR0U21hcnRpdE1vZHVsZXNbaV07XHJcbiAgICAgIHZhciBtb2R1bGVQYXRoID0gbW9kdWxlc1BhdGgrdG1wTW9kdWxlLm5hbWUoKStcIi9cIjtcclxuICBcclxuICAgICAgLy92YXIgY291bnQgPSB0bXBNb2R1bGUudGVtcGxhdGVzKCkubGVuZ3RoO1xyXG5cclxuICAgICAgbGV0IHByb21pc2VzID0gW107XHJcbiAgXHJcbiAgICAgIC8vYWRkIFRlbXBsYXRlLCBhZGQgc25pcHBlZCBvciBvdmVycmlkZVxyXG4gICAgICBmb3IodmFyIHggPSAwOyB4IDwgdG1wTW9kdWxlLnRlbXBsYXRlcygpLmxlbmd0aDsgeCsrKSB7XHJcbiAgICAgICAgdmFyIHRtcFRlbXBsYXRlID0gdG1wTW9kdWxlLnRlbXBsYXRlcygpW3hdO1xyXG4gICAgICAgIHByb21pc2VzLnB1c2goJHRlbXBsYXRlUmVxdWVzdChtb2R1bGVQYXRoK3RtcFRlbXBsYXRlLnRlbXBsYXRlKSk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKHJlc3VsdCk9PntcclxuICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICB9KVxyXG4gICAgXHJcbiAgICAgIH1cclxuICAgICBcclxuXHJcbn1dKTsqL1xyXG5cclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XHJcbihmdW5jdGlvbiAoKSB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcbiAgICBhbmd1bGFyLm1vZHVsZSgnbXlpdHNtQXBwJylcclxuICAgICAgICAuc2VydmljZSgnbnR0R2VuZXJpY1NlcnZpY2UnLCBbJyRyZXNvdXJjZScsICckaHR0cCcsICdzeXN0ZW1BbGVydFNlcnZpY2UnLCAnJHEnLCAnc2xhQ2FsY3VsYXRvclNlcnZpY2UnLCAnYXBwcm92YWxTZXJ2aWNlJywgJyRmaWx0ZXInLCAnJHN0YXRlJyxcclxuICAgICAgICBmdW5jdGlvbiAoJHJlc291cmNlLCAkaHR0cCwgc3lzdGVtQWxlcnRTZXJ2aWNlLCAkcSwgc2xhQ2FsY3VsYXRvclNlcnZpY2UsIGFwcHJvdmFsU2VydmljZSwgJGZpbHRlciwgJHN0YXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAgJHJlc291cmNlKCcnLCB7XHJcbiAgICAgICAgICAgICAgICBmb3JtOiAnQGZvcm0nLFxyXG4gICAgICAgICAgICAgICAgcXVhbDogJ0BxdWFsJ1xyXG4gICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICBnZXRBckVudHJpZXNCeUZvcm06e3VybDogJy9zbWFydGl0L3Jlc3QvbnR0L3YxL2dlbmVyaWMvOmZvcm0nLG1ldGhvZDonR0VUJyxpc0FycmF5OmZhbHNlfSxcclxuICAgICAgICAgICAgICAgIGdldEFyRW50cmllc0J5Rm9ybUFuZFF1YWw6e3VybDogJy9zbWFydGl0L3Jlc3QvbnR0L3YxL2dlbmVyaWMvOmZvcm0vOnF1YWwnLG1ldGhvZDonR0VUJywgaXNBcnJheTpmYWxzZX1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgLyp0aGlzLmdldEFyRW50cmllcyA9IGZ1bmN0aW9uKGZvcm1uYW1lLHF1YWwsIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBxdWFsID09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZS5nZXRBckVudHJpZXNCeUZvcm0oe2Zvcm06Zm9ybW5hbWUsIHBhcmFtc30pO1xyXG4gICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gICAgcmVzb3VyY2UuZ2V0QXJFbnRyaWVzQnlGb3JtQW5kUXVhbCh7Zm9ybTpmb3JtbmFtZSxxdWFsOnF1YWwscGFyYW1zfSk7XHJcblxyXG4gICAgICAgICAgICB9Ki9cclxuXHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8qdGhpcy5nZXRHcm91cE1lbWJlcnMgPSBmdW5jdGlvbiAoaWQsIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlLmdldEdyb3VwTWVtYmVycyh7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGh1bWJuYWlsOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9KS4kcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlU3VwcG9ydEdyb3VwUGVyc29ucyhyZXN1bHRbMF0uaXRlbXNbMF0ub2JqZWN0cywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5nZXRBc3NpZ25lZVN1cHBvcnRHcm91cFBlcnNvbnMgPSBmdW5jdGlvbiAoY29tcGFueSwgb3JnYW5pemF0aW9uLCBwZXJzb25OYW1lLCBwZXJzb25Mb2dpbklkLCByb2xlLCBjaHVua1NpemUsIGN1c3RvbWVyQ29tcGFueSwgbG9jYXRpb25Db21wYW55LCBvd25lckNvbXBhbnksIHByaW1hcnlDb21wYW55LCBhdXRob3JDb21wYW55LCBhdmFpbGFibGUsIGZyb21CbGFkZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlucHV0UGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhbnlOYW1lOiBjb21wYW55XHJcbiAgICAgICAgICAgICAgICB9LCB1cmxQYXJhbXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIC8vaW5wdXRQYXJhbXMudGh1bWJuYWlsID0gdHJ1ZTtcdFx0Ly90byBiZSBlbmFibGVkIHdoZW4gdGh1bWJuYWlsIGlzIHN1cHBvcnRlZFxyXG4gICAgICAgICAgICAgICAgaWYgKG9yZ2FuaXphdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLm9yZ2FuaXphdGlvbiA9IG9yZ2FuaXphdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwZXJzb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW1zLnNlYXJjaFRleHQgPSBwZXJzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBlcnNvbkxvZ2luSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5wZXJzb25Mb2dpbklkID0gcGVyc29uTG9naW5JZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyb2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQYXJhbXMucm9sZSA9IHJvbGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY2h1bmtTaXplKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW1zLmNodW5rSW5mbyA9IHsgc3RhcnRJbmRleDogMCwgY2h1bmtTaXplOiBjaHVua1NpemUgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXN0b21lckNvbXBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5jdXN0b21lckNvbXBhbnkgPSBjdXN0b21lckNvbXBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25Db21wYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQYXJhbXMubG9jYXRpb25Db21wYW55ID0gbG9jYXRpb25Db21wYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKG93bmVyQ29tcGFueSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5vd25lckNvbXBhbnkgPSBvd25lckNvbXBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJpbWFyeUNvbXBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5wcmltYXJ5Q29tcGFueSA9IHByaW1hcnlDb21wYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGF1dGhvckNvbXBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5hdXRob3JDb21wYW55ID0gYXV0aG9yQ29tcGFueTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLmF2YWlsYWJsZSA9IGF2YWlsYWJsZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZS5nZXRBc3NpZ25lZVN1cHBvcnRHcm91cFBlcnNvbnModXJsUGFyYW1zLCBpbnB1dFBhcmFtcykuJHByb21pc2VcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaXF1ZSA9IChwZXJzb25OYW1lICYmIHBlcnNvbk5hbWUubGVuZ3RoKSB8fCAhcmVzdWx0WzBdLml0ZW1zWzBdLmV4Y2VlZHNDaHVua1NpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHVuaXF1ZSByZWNvcmQgb25seSBpZiB1c2VyIGlzIGRvaW5nIHR5cGVhaGVhZCBzZWFyY2ggb3IgcmVzdWx0IGlzIHNtYWxsZXIgdGhhbiBjaHVja1NpemVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZnJvbUJsYWRlKSAmJiBmcm9tQmxhZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN1cHBvcnRHcm91cFBlcnNvbnNGb3JCbGFkZShyZXN1bHRbMF0uaXRlbXNbMF0ub2JqZWN0cywgcmVzdWx0WzBdLml0ZW1zWzBdLnRvdGFsTWF0Y2hlcywgdW5pcXVlLCByZXN1bHRbMF0uaXRlbXNbMF0uZXhjZWVkc0NodW5rU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdXBwb3J0R3JvdXBQZXJzb25zKHJlc3VsdFswXS5pdGVtc1swXS5vYmplY3RzLCB1bmlxdWUsIHJlc3VsdFswXS5pdGVtc1swXS5leGNlZWRzQ2h1bmtTaXplKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmdldFBlcnNvbnNCeVN1cHBvcnRDb21wYW55QW5kT3JnID0gZnVuY3Rpb24gKGNvbXBhbnksIG9yZ2FuaXphdGlvbiwgcGVyc29uTmFtZSwgcm9sZSwgY2h1bmtTaXplLCBjdXN0b21lckNvbXBhbnksIGxvY2F0aW9uQ29tcGFueSwgb3duZXJDb21wYW55LCBwcmltYXJ5Q29tcGFueSwgZnJvbUJsYWRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5wdXRQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGFueU5hbWU6IGNvbXBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgdGh1bWJuYWlsOiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKG9yZ2FuaXphdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLm9yZ2FuaXphdGlvbiA9IG9yZ2FuaXphdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwZXJzb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQYXJhbXMucGVyc29uVGV4dCA9IHBlcnNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocm9sZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLnJvbGUgPSByb2xlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLmNodW5rSW5mbyA9IHsgc3RhcnRJbmRleDogMCwgY2h1bmtTaXplOiBjaHVua1NpemUgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXN0b21lckNvbXBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5jdXN0b21lckNvbXBhbnkgPSBjdXN0b21lckNvbXBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25Db21wYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRQYXJhbXMubG9jYXRpb25Db21wYW55ID0gbG9jYXRpb25Db21wYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKG93bmVyQ29tcGFueSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5vd25lckNvbXBhbnkgPSBvd25lckNvbXBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocHJpbWFyeUNvbXBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5wcmltYXJ5Q29tcGFueSA9IHByaW1hcnlDb21wYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlLmdldFN1cHBvcnRHcm91cFBlcnNvbnMoaW5wdXRQYXJhbXMpLiRwcm9taXNlXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmlxdWUgPSAocGVyc29uTmFtZSAmJiBwZXJzb25OYW1lLmxlbmd0aCkgfHwgcmVzdWx0WzBdLml0ZW1zWzBdLm9iamVjdHMubGVuZ3RoIDwgY2h1bmtTaXplO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB1bmlxdWUgcmVjb3JkIG9ubHkgaWYgdXNlciBpcyBkb2luZyB0eXBlYWhlYWQgc2VhcmNoIG9yIHJlc3VsdCBpcyBzbWFsbGVyIHRoYW4gY2h1Y2tTaXplXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGZyb21CbGFkZSkgJiYgZnJvbUJsYWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdXBwb3J0R3JvdXBQZXJzb25zRm9yQmxhZGUocmVzdWx0WzBdLml0ZW1zWzBdLm9iamVjdHMsIHJlc3VsdFswXS5pdGVtc1swXS50b3RhbE1hdGNoZXMsIHVuaXF1ZSwgcmVzdWx0WzBdLml0ZW1zWzBdLmV4Y2VlZHNDaHVua1NpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN1cHBvcnRHcm91cFBlcnNvbnMocmVzdWx0WzBdLml0ZW1zWzBdLm9iamVjdHMsIHVuaXF1ZSwgcmVzdWx0WzBdLml0ZW1zWzBdLmV4Y2VlZHNDaHVua1NpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmdldEFzc2lnbmVlQnlTdXBwb3J0R3JvdXBJZCA9IGZ1bmN0aW9uIChzdXBwb3J0R3JvdXBJZCwgcGVyc29uTmFtZSwgcGVyc29uTG9naW5JZCwgY3VzdG9tZXJDb21wYW55LCByb2xlLCBjaHVua1NpemUsIGF2YWlsYWJsZSwgbG9jYXRpb25Db21wYW55LCBvd25lckNvbXBhbnksIGF1dGhvckNvbXBhbnksIGZyb21CbGFkZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlucHV0UGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRHcm91cElkOiBzdXBwb3J0R3JvdXBJZFxyXG4gICAgICAgICAgICAgICAgfSwgdXJsUGFyYW1zID0ge307XHJcbiAgICAgICAgICAgICAgICAvL2lucHV0UGFyYW1zLnRodW1ibmFpbCA9IHRydWUgICAgLy90byBiZSBlbmFibGVkIHdoZW4gdGh1bWJuYWlsIGlzIHN1cHBvcnRlZFxyXG4gICAgICAgICAgICAgICAgaWYgKHBlcnNvbk5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXMuc2VhcmNoVGV4dCA9IHBlcnNvbk5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGVyc29uTG9naW5JZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLnBlcnNvbkxvZ2luSWQgPSBwZXJzb25Mb2dpbklkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGN1c3RvbWVyQ29tcGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLmN1c3RvbWVyQ29tcGFueSA9IGN1c3RvbWVyQ29tcGFueTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbkNvbXBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5sb2NhdGlvbkNvbXBhbnkgPSBsb2NhdGlvbkNvbXBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3duZXJDb21wYW55KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLm93bmVyQ29tcGFueSA9IG93bmVyQ29tcGFueTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChhdXRob3JDb21wYW55KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLmF1dGhvckNvbXBhbnkgPSBhdXRob3JDb21wYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJvbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5yb2xlID0gcm9sZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaHVua1NpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXMuY2h1bmtJbmZvID0geyBzdGFydEluZGV4OiAwLCBjaHVua1NpemU6IGNodW5rU2l6ZSB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaW5wdXRQYXJhbXMuYXZhaWxhYmxlID0gYXZhaWxhYmxlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlLmdldEFzc2lnbmVlU3VwcG9ydEdyb3VwUGVyc29ucyh1cmxQYXJhbXMsIGlucHV0UGFyYW1zKS4kcHJvbWlzZVxyXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdW5pcXVlID0gKHBlcnNvbk5hbWUgJiYgcGVyc29uTmFtZS5sZW5ndGgpIHx8IHJlc3VsdFswXS5pdGVtc1swXS5vYmplY3RzLmxlbmd0aCA8IGNodW5rU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZnJvbUJsYWRlKSAmJiBmcm9tQmxhZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN1cHBvcnRHcm91cFBlcnNvbnNGb3JCbGFkZShyZXN1bHRbMF0uaXRlbXNbMF0ub2JqZWN0cywgcmVzdWx0WzBdLml0ZW1zWzBdLnRvdGFsTWF0Y2hlcywgdW5pcXVlLCByZXN1bHRbMF0uaXRlbXNbMF0uZXhjZWVkc0NodW5rU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdXBwb3J0R3JvdXBQZXJzb25zKHJlc3VsdFswXS5pdGVtc1swXS5vYmplY3RzLCB1bmlxdWUsIHJlc3VsdFswXS5pdGVtc1swXS5leGNlZWRzQ2h1bmtTaXplKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmdldFBlcnNvbnNCeVN1cHBvcnRHcm91cElkID0gZnVuY3Rpb24gKHN1cHBvcnRHcm91cElkLCBwZXJzb25OYW1lLCByb2xlLCBjaHVua1NpemUsIGZyb21CbGFkZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlucHV0UGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRHcm91cElkOiBzdXBwb3J0R3JvdXBJZCxcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYm5haWw6IHRydWVcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAocGVyc29uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0UGFyYW1zLnBlcnNvblRleHQgPSBwZXJzb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJvbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5yb2xlID0gcm9sZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjaHVua1NpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFBhcmFtcy5jaHVua0luZm8gPSB7IHN0YXJ0SW5kZXg6IDAsIGNodW5rU2l6ZTogY2h1bmtTaXplIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2UuZ2V0U3VwcG9ydEdyb3VwUGVyc29ucyhpbnB1dFBhcmFtcykuJHByb21pc2VcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuaXF1ZSA9IChwZXJzb25OYW1lICYmIHBlcnNvbk5hbWUubGVuZ3RoKSB8fCByZXN1bHRbMF0uaXRlbXNbMF0ub2JqZWN0cy5sZW5ndGggPCBjaHVua1NpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGZyb21CbGFkZSkgJiYgZnJvbUJsYWRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdXBwb3J0R3JvdXBQZXJzb25zRm9yQmxhZGUocmVzdWx0WzBdLml0ZW1zWzBdLm9iamVjdHMsIHJlc3VsdFswXS5pdGVtc1swXS50b3RhbE1hdGNoZXMsIHVuaXF1ZSwgcmVzdWx0WzBdLml0ZW1zWzBdLmV4Y2VlZHNDaHVua1NpemUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlU3VwcG9ydEdyb3VwUGVyc29ucyhyZXN1bHRbMF0uaXRlbXNbMF0ub2JqZWN0cywgdW5pcXVlLCByZXN1bHRbMF0uaXRlbXNbMF0uZXhjZWVkc0NodW5rU2l6ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlU3VwcG9ydEdyb3VwUGVyc29uc0ZvckJsYWRlKHJlc3VsdCwgdG90YWxNYXRjaGVzLCB1bmlxdWUsIGV4Y2VlZHNDaHVua1NpemUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0UGVyc29uTGlzdCA9IHJlc3VsdC5tYXAoZnVuY3Rpb24gKHBlcnNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGVyc29uVk8oKS5idWlsZChwZXJzb24pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0cztcclxuICAgICAgICAgICAgICAgIGlmICh1bmlxdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gXy51bmlxdWUoc3VwcG9ydFBlcnNvbkxpc3QsIGZ1bmN0aW9uIChzdXBwb3J0UGVyc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0UGVyc29uLmxvZ2luSWQgKyAnKicgKyBzdXBwb3J0UGVyc29uLnN1cHBvcnRHcm91cElkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHN1cHBvcnRQZXJzb25MaXN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHNlYXJjaFJlc3VsdCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0LnJlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoUmVzdWx0LnRvdGFsTWF0Y2hlcyA9IHRvdGFsTWF0Y2hlcztcclxuICAgICAgICAgICAgICAgIHNlYXJjaFJlc3VsdC5leGNlZWRzQ2h1bmtTaXplID0gZXhjZWVkc0NodW5rU2l6ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzZWFyY2hSZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlU3VwcG9ydEdyb3VwUGVyc29ucyhyZXN1bHQsIHVuaXF1ZSwgZXhjZWVkc0NodW5rU2l6ZSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHN1cHBvcnRQZXJzb25MaXN0ID0gcmVzdWx0Lm1hcChmdW5jdGlvbiAocGVyc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQZXJzb25WTygpLmJ1aWxkKHBlcnNvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHRzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaXF1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBfLnVuaXF1ZShzdXBwb3J0UGVyc29uTGlzdCwgZnVuY3Rpb24gKHN1cHBvcnRQZXJzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cHBvcnRQZXJzb24ubG9naW5JZCArICcqJyArIHN1cHBvcnRQZXJzb24uc3VwcG9ydEdyb3VwSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gc3VwcG9ydFBlcnNvbkxpc3Q7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgc2VhcmNoUmVzdWx0ID0ge307XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQucmVzdWx0cyA9IHJlc3VsdHM7XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQuZXhjZWVkc0NodW5rU2l6ZSA9IGV4Y2VlZHNDaHVua1NpemU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VhcmNoUmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBY3Rpb24gPSBmdW5jdGlvbiAoaWQsIHR5cGUsIGFjdGlvbiwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlLmFwcGx5QWN0aW9uKHsgaWQ6IGlkLCB0eXBlOiB0eXBlLCBhY3Rpb246IGFjdGlvbiB9LCBkYXRhKS4kcHJvbWlzZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5nZXRBdmFpbGFibGVTdGF0dXNlcyA9IGZ1bmN0aW9uIChpZCwgdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlLmdldEF2YWlsYWJsZVN0YXR1c2VzKHsgaWQ6IGlkLCB0eXBlOiB0eXBlIH0pLiRwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlWzBdLml0ZW1zIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VGFza1BoYXNlcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZS5nZXRUYXNrUGhhc2VzKHBhcmFtcykuJHByb21pc2VcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VbMF0uaXRlbXM7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5nZXREcmFmdEZvclJlbGF0ZWQgPSBmdW5jdGlvbiAodHlwZSwgZnJvbVR5cGUsIGlkLCB0ZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAvL3Bhc3NpbmcgZW1wdHkgZGF0YSB0byBQT1NUIGNhbGwgLSBmb3IgcGFyYW1zIHRvIGdldCByZXBsYWNlZCBpbiB0aGUgdXJsXHJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tVHlwZTogZnJvbVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRlbXBsYXRlSWQgPSB0ZW1wbGF0ZUlkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlLmdldERyYWZ0Rm9yUmVsYXRlZChwYXJhbXMsIHt9KS4kcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1SZXNwb25zZSh0eXBlLCByZXNwb25zZVswXS5pdGVtc1swXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5nZXRSZWxhdGVkRHJhZnRGcm9tQXNzZXQgPSBmdW5jdGlvbiAodHlwZSwgYXNzZXQsIHRlbXBsYXRlSWQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRlbXBsYXRlSWQgPSB0ZW1wbGF0ZUlkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFzc2V0LmFjY2Vzc01hcHBpbmdzO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGFzc2V0LmFsbENhdGVnb3JpZXM7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgYXNzZXQubGlmZWN5Y2xlRGF0ZXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2UuZ2V0UmVsYXRlZERyYWZ0RnJvbUFzc2V0KHBhcmFtcywgYXNzZXQpLiRwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVJlc3BvbnNlKHR5cGUsIHJlc3BvbnNlWzBdLml0ZW1zWzBdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNhdmVJbXBhY3RlZEFyZWFzID0gZnVuY3Rpb24gKGlkLCB0eXBlLCBwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZS5zYXZlSW1wYWN0ZWRBcmVhcyh7IGlkOiBpZCwgdHlwZTogdHlwZSB9LCBwYXJhbXMpLiRwcm9taXNlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUltcGFjdGVkQXJlYXMgPSBmdW5jdGlvbiAoaWQsIHR5cGUsIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICRodHRwKHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJy9zbWFydGl0L3Jlc3QvaW1wYWN0ZWRhcmVhLycgKyB0eXBlICsgJy8nICsgaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyYW1zXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3lzdGVtQWxlcnRTZXJ2aWNlLmVycm9yKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXJyLmRhdGEgJiYgKGVyci5kYXRhLmRlZmF1bHRNZXNzYWdlIHx8IGVyci5kYXRhLmVycm9yKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRxLnJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Um9vdENhdXNlID0gZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldFJvb3RDYXVzZSh7IGNyaXRlcmlhOiBwYXJhbXMgfSlcclxuICAgICAgICAgICAgICAgICAgICAuJHByb21pc2UudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdENhdXNlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNwb25zZVswXS5pdGVtc1swXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb290Q2F1c2UucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXNwb25zZVswXS5pdGVtc1swXVtpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiByZXNwb25zZVswXS5pdGVtc1swXVtpXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RDYXVzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmdldEltcGFjdEFuYWx5c2lzVmlzdWFsaXNhdGlvbkRhdGEgPSBmdW5jdGlvbiAodHlwZSwgaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZS5nZXRJbXBhY3RBbmFseXNpcyh7IGlkOiBpZCwgdHlwZTogdHlwZSB9KS4kcHJvbWlzZTtcclxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIHJlc291cmNlLmdldEltcGFjdEFuYWx5c2lzTW9jaygpLiRwcm9taXNlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmdldEltcGFjdEFuYWx5c2lzU3RhdHVzID0gZnVuY3Rpb24gKGlkLCB0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2UuZ2V0SW1wYWN0QW5hbHlzaXNTdGF0dXMoeyBpZDogaWQsIHR5cGU6IHR5cGUgfSkuJHByb21pc2UudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VbMF0uaXRlbXNbMF0gfHwgW107XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5pbXBhY3RBbmFseXNpc0FjdGlvbiA9IGZ1bmN0aW9uIChpZCwgdHlwZSwgcGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2UuaW1wYWN0QW5hbHlzaXNBY3Rpb24oeyBpZDogaWQsIHR5cGU6IHR5cGUgfSwgcGFyYW1zKS4kcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZVswXS5pdGVtc1swXSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmdldFJlY2VudGx5VXNlZENoYW5nZVRlbXBsYXRlcyA9IGZ1bmN0aW9uICh0ZW1wbGF0ZUxpc3QpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZS5nZXRSZWNlbnRseVVzZWRDaGFuZ2VUZW1wbGF0ZXMoeyAndGVtcGxhdGVMaXN0JzogdGVtcGxhdGVMaXN0IH0pLiRwcm9taXNlO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmdldFJlY2VudGx5VXNlZFJlbGVhc2VUZW1wbGF0ZXMgPSBmdW5jdGlvbiAodGVtcGxhdGVMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2UuZ2V0UmVjZW50bHlVc2VkUmVsZWFzZVRlbXBsYXRlcyh7ICd0ZW1wbGF0ZUxpc3QnOiB0ZW1wbGF0ZUxpc3QgfSkuJHByb21pc2U7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VVJMZm9yVGFza0Zsb3cgPSBmdW5jdGlvbiAoaWQsIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlLmdldFVSTGZvclRhc2tGbG93KHsgaWQ6IGlkIH0sIHBhcmFtcykuJHByb21pc2U7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0VmVuZG9ySW5mbyA9IGZ1bmN0aW9uIChkaXNwbGF5SWQsIHR5cGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZS5nZXRWZW5kb3JJbmZvKHsgZGlzcGxheUlkOiBkaXNwbGF5SWQsIHR5cGU6IHR5cGUgfSkuJHByb21pc2UudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UgJiYgcmVzcG9uc2UudGlja2V0cyB8fCBbXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNvcHlDaGFuZ2UgPSBmdW5jdGlvbiAodGlja2V0SWQsIHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlLmNvcHlDaGFuZ2UoeyB0aWNrZXRJZDogdGlja2V0SWQgfSwgcGFyYW1zKS4kcHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1SZXNwb25zZSgnY2hhbmdlJywgcmVzcG9uc2VbMF0uaXRlbXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfV0pO1xyXG59KCkpO1xyXG4iLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfanF1ZXJ5X187Il0sInNvdXJjZVJvb3QiOiIifQ==
|