@kontur.candy/tools 2.168.0 → 2.170.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +27 -7
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +8 -2
- package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +1 -1
- package/distr/Common/FormPathUtils.js +14 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -3
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +3 -3
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +3 -3
- package/distr/Tools/src/BuildTasks/ReadFormSource.js +3 -2
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +3 -4
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +13 -9
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +59 -115
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +17 -3
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +2 -2
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +69 -25
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +3 -6
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +181 -17
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/WellKnownDirectories.js +11 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +7 -1
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +21 -11
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +4 -2
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +3 -2
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +5 -2
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +8 -4
- package/distr/Tools/src/Commons/FormGlobsUtils.js +80 -2
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +12 -4
- package/distr/Tools/src/Commons/TasksCore/Observe.js +5 -1
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +5 -6
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +60 -47
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +42 -29
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +2 -2
|
@@ -10,45 +10,36 @@ var _fs = require("fs");
|
|
|
10
10
|
var path = _interopRequireWildcard(require("path"));
|
|
11
11
|
var _fsExtra = require("fs-extra");
|
|
12
12
|
var _lodash = require("lodash");
|
|
13
|
-
var _ExtractGfvsFromFileName = require("../../../Commons/ExtractGfvsFromFileName");
|
|
14
|
-
var _FsUtils = require("../../../Commons/FsUtils");
|
|
15
13
|
var _Methods = require("../../../Commons/HttpServer/AttributeRouting/Methods");
|
|
16
14
|
var _NotFoundWebError = require("../../../Commons/HttpServer/AttributeRouting/NotFoundWebError");
|
|
17
15
|
var _Params = require("../../../Commons/HttpServer/AttributeRouting/Params");
|
|
18
16
|
var _Results = require("../../../Commons/HttpServer/AttributeRouting/Results");
|
|
19
17
|
var _StreamResultHandler = require("../../../Commons/HttpServer/AttributeRouting/Results/StreamResultHandler");
|
|
20
18
|
var _SingletonController = require("../../../Commons/HttpServer/ExpressWrapper/SingletonController");
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _class;
|
|
19
|
+
var _FarmDirectory = require("./Directories/FarmDirectory");
|
|
20
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _class;
|
|
24
21
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
22
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
26
|
-
let BuildServerBackendResourcesController = (_dec = (0, _Methods.httpGet)("/gfvs", _Results.httpReturn.Json), _dec2 = (0, _Methods.httpGet)("/picklists", _Results.httpReturn.PlainText), _dec3 = (0, _Methods.httpGet)("/picklists/:picklistFilename", _Results.httpReturn.StreamWithMime("application/json"), (0, _Params.httpUrlParam)("picklistFilename", _Params.httpType.String)), _dec4 = (0, _Methods.httpGet)("/converters", _Results.httpReturn.PlainText), _dec5 = (0, _Methods.httpGet)("/converters/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec6 = (0, _Methods.httpGet)("/mergers", _Results.httpReturn.PlainText), _dec7 = (0, _Methods.httpGet)("/mergers/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec8 = (0, _Methods.httpGet)("
|
|
23
|
+
let BuildServerBackendResourcesController = (_dec = (0, _Methods.httpGet)("/gfvs", _Results.httpReturn.Json), _dec2 = (0, _Methods.httpGet)("/picklists", _Results.httpReturn.PlainText), _dec3 = (0, _Methods.httpGet)("/picklists/:picklistFilename", _Results.httpReturn.StreamWithMime("application/json"), (0, _Params.httpUrlParam)("picklistFilename", _Params.httpType.String)), _dec4 = (0, _Methods.httpGet)("/converters", _Results.httpReturn.PlainText), _dec5 = (0, _Methods.httpGet)("/converters/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec6 = (0, _Methods.httpGet)("/mergers", _Results.httpReturn.PlainText), _dec7 = (0, _Methods.httpGet)("/mergers/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec8 = (0, _Methods.httpGet)("/schemas", _Results.httpReturn.PlainText), _dec9 = (0, _Methods.httpGet)("/schemas/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("filename", _Params.httpType.String)), _dec10 = (0, _Methods.httpGet)("/presentations", _Results.httpReturn.PlainText), _dec11 = (0, _Methods.httpGet)("/presentations/:gfv.presentations.json", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec12 = (0, _Methods.httpGet)("/normalize", _Results.httpReturn.PlainText), _dec13 = (0, _Methods.httpGet)("/normalize/:gfv.xml", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec14 = (0, _Methods.httpGet)("/normalize/:gfv.normalize", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec15 = (0, _Methods.httpGet)("/attachmentpaths", _Results.httpReturn.PlainText), _dec16 = (0, _Methods.httpGet)("/attachmentpaths/:gfv.json", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec17 = (0, _Methods.httpGet)("/unmap", _Results.httpReturn.PlainText), _dec18 = (0, _Methods.httpGet)("/unmap/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec19 = (0, _Methods.httpGet)("/map", _Results.httpReturn.PlainText), _dec20 = (0, _Methods.httpGet)("/map/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), _dec21 = (0, _Methods.httpGet)("/patch", _Results.httpReturn.PlainText), _dec22 = (0, _Methods.httpGet)("/patch/:filename", _Results.httpReturn.Stream, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), (_class = class BuildServerBackendResourcesController extends _SingletonController.SingletonController {
|
|
27
24
|
constructor(allFarmConfig, flangNormalizationSourcesProvider) {
|
|
28
25
|
super();
|
|
29
|
-
this.allFarmConfig = void 0;
|
|
30
26
|
this.generatedServerSideSourcesProvider = void 0;
|
|
31
27
|
this.allSchemasFiles = void 0;
|
|
32
28
|
this.resetAllSchemaFilesDebounced = void 0;
|
|
29
|
+
this.allFarmDirectories = void 0;
|
|
30
|
+
this.allFarmConfig = void 0;
|
|
33
31
|
this.generatedServerSideSourcesProvider = flangNormalizationSourcesProvider;
|
|
34
32
|
this.allFarmConfig = allFarmConfig;
|
|
33
|
+
this.allFarmDirectories = allFarmConfig.map(i => new _FarmDirectory.FarmDirectory(i.farmDirectory));
|
|
35
34
|
this.resetAllSchemaFilesDebounced = (0, _lodash.debounce)(() => {
|
|
36
35
|
this.allSchemasFiles = undefined;
|
|
37
36
|
}, 5000);
|
|
38
37
|
}
|
|
39
38
|
async getAllGfvs() {
|
|
40
|
-
|
|
41
|
-
cwd: path.join(i.farmDirectory)
|
|
42
|
-
}));
|
|
43
|
-
const gfvs = (await Promise.all(promises)).flat();
|
|
44
|
-
return gfvs.map(x => x.replace("forms/", ""));
|
|
39
|
+
return (await Promise.all(this.allFarmDirectories.map(x => x.getAllGfvs()))).flat();
|
|
45
40
|
}
|
|
46
41
|
async getAllPicklists() {
|
|
47
|
-
|
|
48
|
-
cwd: path.join(i.farmDirectory)
|
|
49
|
-
}));
|
|
50
|
-
const files = (await Promise.all(promises)).flat();
|
|
51
|
-
return files.map(x => x.replace("picklists/", "")).join("\n");
|
|
42
|
+
return (await Promise.all(this.allFarmDirectories.map(x => x.getAllPicklists()))).flat().join("\n");
|
|
52
43
|
}
|
|
53
44
|
async getPicklists(picklistFilename) {
|
|
54
45
|
const allFilePath = this.allFarmConfig.map(i => path.join(i.farmDirectory, "picklists", picklistFilename));
|
|
@@ -60,105 +51,70 @@ let BuildServerBackendResourcesController = (_dec = (0, _Methods.httpGet)("/gfvs
|
|
|
60
51
|
throw Error(`not found picklistFilename ${picklistFilename}`);
|
|
61
52
|
}
|
|
62
53
|
async getAllConvertersFiles() {
|
|
63
|
-
|
|
64
|
-
cwd: path.join(i.farmDirectory)
|
|
65
|
-
}));
|
|
66
|
-
const files = (await Promise.all(promises)).flat();
|
|
67
|
-
return files.map(x => path.basename(x)).join("\n");
|
|
54
|
+
return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllConverterFilePaths()))).flat().map(x => path.basename(x)).join("\n");
|
|
68
55
|
}
|
|
69
56
|
async getConverterFile(filename) {
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
for (const filePath of possibleFilePaths) {
|
|
74
|
-
if (await (0, _fsExtra.pathExists)(filePath)) {
|
|
57
|
+
for (const farmDirectory of this.allFarmDirectories) {
|
|
58
|
+
const filePath = await farmDirectory.getConverterFilePathByFileNameOrUndefined(filename);
|
|
59
|
+
if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
|
|
75
60
|
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
76
61
|
}
|
|
77
62
|
}
|
|
78
63
|
throw new _NotFoundWebError.NotFoundWebError("File not found", false);
|
|
79
64
|
}
|
|
80
65
|
async getAllMergersFiles() {
|
|
81
|
-
|
|
82
|
-
cwd: path.join(i.farmDirectory)
|
|
83
|
-
}));
|
|
84
|
-
const files = (await Promise.all(promises)).flat();
|
|
85
|
-
return files.map(x => path.basename(x)).join("\n");
|
|
66
|
+
return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllMergersFilePaths()))).flat().map(x => path.basename(x)).join("\n");
|
|
86
67
|
}
|
|
87
68
|
async getMergerFile(filename) {
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
for (const filePath of possibleFilePaths) {
|
|
92
|
-
if (await (0, _fsExtra.pathExists)(filePath)) {
|
|
69
|
+
for (const farmDirectory of this.allFarmDirectories) {
|
|
70
|
+
const filePath = await farmDirectory.getMergersFilePathByFileNameOrUndefined(filename);
|
|
71
|
+
if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
|
|
93
72
|
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
94
73
|
}
|
|
95
74
|
}
|
|
96
75
|
throw new _NotFoundWebError.NotFoundWebError("File not found", false);
|
|
97
76
|
}
|
|
98
|
-
async getXsltTemplate(filename) {
|
|
99
|
-
const xsltTemplatesPaths = this.allFarmConfig.map(i => path.join(i.farmDirectory, "xsltTemplates", filename));
|
|
100
|
-
for (const filePath of xsltTemplatesPaths) {
|
|
101
|
-
if (await (0, _fsExtra.pathExists)(filePath)) {
|
|
102
|
-
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
throw new _NotFoundWebError.NotFoundWebError(`XSLT template not found: ${filename}`, false);
|
|
106
|
-
}
|
|
107
77
|
async getAllSchemasFiles() {
|
|
108
78
|
if (this.allSchemasFiles === undefined) {
|
|
109
|
-
|
|
110
|
-
cwd: path.join(i.farmDirectory)
|
|
111
|
-
}));
|
|
112
|
-
const files = (await Promise.all(promises)).flat();
|
|
113
|
-
this.allSchemasFiles = files.map(x => path.basename(x)).join("\n");
|
|
79
|
+
this.allSchemasFiles = (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllSchemasFilePaths()))).flat().map(x => path.basename(x)).join("\n");
|
|
114
80
|
}
|
|
115
81
|
this.resetAllSchemaFilesDebounced();
|
|
116
82
|
return this.allSchemasFiles;
|
|
117
83
|
}
|
|
118
84
|
async getFormSchemas(filename) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
for (const file of filePath) {
|
|
124
|
-
if (await (0, _fsExtra.pathExists)(file)) {
|
|
125
|
-
return new _StreamResultHandler.FileStreamResult(file);
|
|
85
|
+
for (const farmDirectory of this.allFarmDirectories) {
|
|
86
|
+
const filePath = await farmDirectory.getSchemaFilePathByFileNameOrUndefined(filename);
|
|
87
|
+
if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
|
|
88
|
+
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
126
89
|
}
|
|
127
90
|
}
|
|
128
91
|
throw new _NotFoundWebError.NotFoundWebError("File not found", false);
|
|
129
92
|
}
|
|
130
93
|
async getAllFormPresentations() {
|
|
131
|
-
|
|
132
|
-
cwd: path.join(i.farmDirectory)
|
|
133
|
-
}));
|
|
134
|
-
const files = (await Promise.all(promises)).flat();
|
|
135
|
-
return files.map(x => x.replace("forms/", "").replace("/", ".")).join("\n");
|
|
94
|
+
return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllPresentationsFileNames()))).flat().map(x => path.basename(x)).join("\n");
|
|
136
95
|
}
|
|
137
96
|
async getFormPresentations(gfv) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if (await (0, _fsExtra.pathExists)(
|
|
141
|
-
return new _StreamResultHandler.FileStreamResult(
|
|
97
|
+
for (const farmDirectory of this.allFarmDirectories) {
|
|
98
|
+
const filePath = await farmDirectory.getPresentationsFilePathByGfvOrUndefined(gfv);
|
|
99
|
+
if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
|
|
100
|
+
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
142
101
|
}
|
|
143
102
|
}
|
|
144
|
-
throw
|
|
103
|
+
throw new _NotFoundWebError.NotFoundWebError("File not found", false);
|
|
145
104
|
}
|
|
146
105
|
async getAllNormalizeFiles() {
|
|
147
|
-
const
|
|
148
|
-
cwd: path.join(i.farmDirectory)
|
|
149
|
-
}));
|
|
150
|
-
const files = (await Promise.all(promises)).flat();
|
|
106
|
+
const files = (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllNormalizeFilePaths()))).flat();
|
|
151
107
|
const flangFiles = await this.generatedServerSideSourcesProvider.getAllNormalizationFileNames();
|
|
152
108
|
return [...files.map(x => path.basename(x)), ...flangFiles].join("\n");
|
|
153
109
|
}
|
|
154
110
|
async getNormalizeFile(gfv) {
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
if (await (0, _fsExtra.pathExists)(
|
|
158
|
-
return new _StreamResultHandler.FileStreamResult(
|
|
111
|
+
for (const farmDirectory of this.allFarmDirectories) {
|
|
112
|
+
const filePath = await farmDirectory.getNormalizeFilePathByFileNameOrUndefined(`${gfv}.xml`);
|
|
113
|
+
if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
|
|
114
|
+
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
159
115
|
}
|
|
160
116
|
}
|
|
161
|
-
throw
|
|
117
|
+
throw new _NotFoundWebError.NotFoundWebError("File not found", false);
|
|
162
118
|
}
|
|
163
119
|
async getFLangNormalizeFile(gfv) {
|
|
164
120
|
return new _StreamResultHandler.StreamResult(await this.generatedServerSideSourcesProvider.getNormalizationFileContent(gfv));
|
|
@@ -171,53 +127,41 @@ let BuildServerBackendResourcesController = (_dec = (0, _Methods.httpGet)("/gfvs
|
|
|
171
127
|
return new _StreamResultHandler.StreamResult(await this.generatedServerSideSourcesProvider.getAttachmentPathsFileContent(gfv));
|
|
172
128
|
}
|
|
173
129
|
async getAllUnmapFiles() {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const allFilePath = this.allFarmConfig.map(i => path.join(i.farmDirectory, "forms", gfv, "unmap", `${gfv}.xml`));
|
|
182
|
-
for (const pathFile of allFilePath) {
|
|
183
|
-
if (await (0, _fsExtra.pathExists)(pathFile)) {
|
|
184
|
-
return new _StreamResultHandler.FileStreamResult(pathFile);
|
|
130
|
+
return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllUnmapFilePaths()))).flat().map(x => path.basename(x)).join("\n");
|
|
131
|
+
}
|
|
132
|
+
async getUnmapFile(filename) {
|
|
133
|
+
for (const farmDirectory of this.allFarmDirectories) {
|
|
134
|
+
const filePath = await farmDirectory.getUnmapFilePathByFileNameOrUndefined(filename);
|
|
135
|
+
if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
|
|
136
|
+
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
185
137
|
}
|
|
186
138
|
}
|
|
187
|
-
throw
|
|
139
|
+
throw new _NotFoundWebError.NotFoundWebError("File not found", false);
|
|
188
140
|
}
|
|
189
141
|
async getAllMapFiles() {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const allFilePath = this.allFarmConfig.map(i => path.join(i.farmDirectory, "forms", gfv, "map", `${gfv}.xml`));
|
|
198
|
-
for (const pathFile of allFilePath) {
|
|
199
|
-
if (await (0, _fsExtra.pathExists)(pathFile)) {
|
|
200
|
-
return new _StreamResultHandler.FileStreamResult(pathFile);
|
|
142
|
+
return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllMapFilePaths()))).flat().map(x => path.basename(x)).join("\n");
|
|
143
|
+
}
|
|
144
|
+
async getMapFile(filename) {
|
|
145
|
+
for (const farmDirectory of this.allFarmDirectories) {
|
|
146
|
+
const filePath = await farmDirectory.getMapFilePathByFileNameOrUndefined(filename);
|
|
147
|
+
if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
|
|
148
|
+
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
201
149
|
}
|
|
202
150
|
}
|
|
203
|
-
throw
|
|
151
|
+
throw new _NotFoundWebError.NotFoundWebError("File not found", false);
|
|
204
152
|
}
|
|
205
153
|
async getAllPatchFiles() {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const allFilePath = this.allFarmConfig.map(i => path.join(i.farmDirectory, "forms", gfv, "patch", `${gfv}.xslt`));
|
|
214
|
-
for (const pathFile of allFilePath) {
|
|
215
|
-
if (await (0, _fsExtra.pathExists)(pathFile)) {
|
|
216
|
-
return new _StreamResultHandler.FileStreamResult(pathFile);
|
|
154
|
+
return (await Promise.all(this.allFarmDirectories.flatMap(x => x.getAllPatchFilePaths()))).flat().map(x => path.basename(x)).join("\n");
|
|
155
|
+
}
|
|
156
|
+
async getPatchFile(filename) {
|
|
157
|
+
for (const farmDirectory of this.allFarmDirectories) {
|
|
158
|
+
const filePath = await farmDirectory.getPatchFilePathByFileNameOrUndefined(filename);
|
|
159
|
+
if (filePath != null && (await (0, _fsExtra.pathExists)(filePath))) {
|
|
160
|
+
return new _StreamResultHandler.FileStreamResult(filePath);
|
|
217
161
|
}
|
|
218
162
|
}
|
|
219
|
-
throw
|
|
163
|
+
throw new _NotFoundWebError.NotFoundWebError("File not found", false);
|
|
220
164
|
}
|
|
221
|
-
}, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllGfvs", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getAllGfvs"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllPicklists", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getAllPicklists"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getPicklists", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "getPicklists"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllConvertersFiles", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, "getAllConvertersFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getConverterFile", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, "getConverterFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllMergersFiles", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, "getAllMergersFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getMergerFile", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, "getMergerFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "
|
|
165
|
+
}, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllGfvs", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getAllGfvs"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllPicklists", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getAllPicklists"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getPicklists", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "getPicklists"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllConvertersFiles", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, "getAllConvertersFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getConverterFile", [_dec5], Object.getOwnPropertyDescriptor(_class.prototype, "getConverterFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllMergersFiles", [_dec6], Object.getOwnPropertyDescriptor(_class.prototype, "getAllMergersFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getMergerFile", [_dec7], Object.getOwnPropertyDescriptor(_class.prototype, "getMergerFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllSchemasFiles", [_dec8], Object.getOwnPropertyDescriptor(_class.prototype, "getAllSchemasFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormSchemas", [_dec9], Object.getOwnPropertyDescriptor(_class.prototype, "getFormSchemas"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllFormPresentations", [_dec10], Object.getOwnPropertyDescriptor(_class.prototype, "getAllFormPresentations"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormPresentations", [_dec11], Object.getOwnPropertyDescriptor(_class.prototype, "getFormPresentations"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllNormalizeFiles", [_dec12], Object.getOwnPropertyDescriptor(_class.prototype, "getAllNormalizeFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getNormalizeFile", [_dec13], Object.getOwnPropertyDescriptor(_class.prototype, "getNormalizeFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFLangNormalizeFile", [_dec14], Object.getOwnPropertyDescriptor(_class.prototype, "getFLangNormalizeFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllAttachmentPathsFileNames", [_dec15], Object.getOwnPropertyDescriptor(_class.prototype, "getAllAttachmentPathsFileNames"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAttachmentPathFile", [_dec16], Object.getOwnPropertyDescriptor(_class.prototype, "getAttachmentPathFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllUnmapFiles", [_dec17], Object.getOwnPropertyDescriptor(_class.prototype, "getAllUnmapFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getUnmapFile", [_dec18], Object.getOwnPropertyDescriptor(_class.prototype, "getUnmapFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllMapFiles", [_dec19], Object.getOwnPropertyDescriptor(_class.prototype, "getAllMapFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getMapFile", [_dec20], Object.getOwnPropertyDescriptor(_class.prototype, "getMapFile"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllPatchFiles", [_dec21], Object.getOwnPropertyDescriptor(_class.prototype, "getAllPatchFiles"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getPatchFile", [_dec22], Object.getOwnPropertyDescriptor(_class.prototype, "getPatchFile"), _class.prototype)), _class));
|
|
222
166
|
exports.BuildServerBackendResourcesController = BuildServerBackendResourcesController;
|
|
223
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwicGF0aCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2ZzRXh0cmEiLCJfbG9kYXNoIiwiX0V4dHJhY3RHZnZzRnJvbUZpbGVOYW1lIiwiX0ZzVXRpbHMiLCJfTWV0aG9kcyIsIl9Ob3RGb3VuZFdlYkVycm9yIiwiX1BhcmFtcyIsIl9SZXN1bHRzIiwiX1N0cmVhbVJlc3VsdEhhbmRsZXIiLCJfU2luZ2xldG9uQ29udHJvbGxlciIsIl9QYXRoUGF0dGVybiIsIl9UeXBpbmdVdGlscyIsIl9kZWMiLCJfZGVjMiIsIl9kZWMzIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiX2RlYzIzIiwiX2NsYXNzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIkJ1aWxkU2VydmVyQmFja2VuZFJlc291cmNlc0NvbnRyb2xsZXIiLCJodHRwR2V0IiwiaHR0cFJldHVybiIsIkpzb24iLCJQbGFpblRleHQiLCJTdHJlYW1XaXRoTWltZSIsImh0dHBVcmxQYXJhbSIsImh0dHBUeXBlIiwiU3RyaW5nIiwiU3RyZWFtIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImZsYW5nTm9ybWFsaXphdGlvblNvdXJjZXNQcm92aWRlciIsImdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIiLCJhbGxTY2hlbWFzRmlsZXMiLCJyZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkIiwiZGVib3VuY2UiLCJ1bmRlZmluZWQiLCJnZXRBbGxHZnZzIiwicHJvbWlzZXMiLCJtYXAiLCJpIiwiZ2xvYkFzeW5jIiwiY3dkIiwiam9pbiIsImZhcm1EaXJlY3RvcnkiLCJnZnZzIiwiUHJvbWlzZSIsImFsbCIsImZsYXQiLCJ4IiwicmVwbGFjZSIsImdldEFsbFBpY2tsaXN0cyIsImZpbGVzIiwiZ2V0UGlja2xpc3RzIiwicGlja2xpc3RGaWxlbmFtZSIsImFsbEZpbGVQYXRoIiwicGF0aEZpbGUiLCJwYXRoRXhpc3RzIiwiY3JlYXRlUmVhZFN0cmVhbSIsIkVycm9yIiwiZ2V0QWxsQ29udmVydGVyc0ZpbGVzIiwiYmFzZW5hbWUiLCJnZXRDb252ZXJ0ZXJGaWxlIiwiZmlsZW5hbWUiLCJhbGxGYXJtRGlyZWN0b3JpZXMiLCJmb3JtRGlyUGF0aCIsInB0aCIsInBvc3NpYmxlRmlsZVBhdGhzIiwiZXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUiLCJnZnYiLCJmaWxlUGF0aCIsIkZpbGVTdHJlYW1SZXN1bHQiLCJOb3RGb3VuZFdlYkVycm9yIiwiZ2V0QWxsTWVyZ2Vyc0ZpbGVzIiwiZ2V0TWVyZ2VyRmlsZSIsImdldFhzbHRUZW1wbGF0ZSIsInhzbHRUZW1wbGF0ZXNQYXRocyIsImdldEFsbFNjaGVtYXNGaWxlcyIsImdldEZvcm1TY2hlbWFzIiwiX2ZpbGVQYXR0ZXJuJGV4ZWNTdHJpIiwiZmlsZVBhdHRlcm4iLCJQYXRoUGF0dGVybiIsImV4ZWNTdHJpY3QiLCJyZWplY3QiLCJmaWxlIiwiZ2V0QWxsRm9ybVByZXNlbnRhdGlvbnMiLCJnZXRGb3JtUHJlc2VudGF0aW9ucyIsImdldEFsbE5vcm1hbGl6ZUZpbGVzIiwiZmxhbmdGaWxlcyIsImdldEFsbE5vcm1hbGl6YXRpb25GaWxlTmFtZXMiLCJnZXROb3JtYWxpemVGaWxlIiwiZ2V0RkxhbmdOb3JtYWxpemVGaWxlIiwiU3RyZWFtUmVzdWx0IiwiZ2V0Tm9ybWFsaXphdGlvbkZpbGVDb250ZW50IiwiZ2V0QWxsQXR0YWNobWVudFBhdGhzRmlsZU5hbWVzIiwiZ2V0QWxsQXR0YWNobWVudFBhdGhGaWxlTmFtZXMiLCJnZXRBdHRhY2htZW50UGF0aEZpbGUiLCJnZXRBdHRhY2htZW50UGF0aHNGaWxlQ29udGVudCIsImdldEFsbFVubWFwRmlsZXMiLCJnZXRVbm1hcEZpbGUiLCJnZXRBbGxNYXBGaWxlcyIsImdldE1hcEZpbGUiLCJnZXRBbGxQYXRjaEZpbGVzIiwiZ2V0UGF0Y2hGaWxlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcjIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0J1aWxkU2VydmVyQmFja2VuZFJlc291cmNlc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVhZFN0cmVhbSwgUmVhZFN0cmVhbSB9IGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgXywgeyBkZWJvdW5jZSB9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IEZhcm1Db25maWcgfSBmcm9tIFwiVG9vbHMvc3JjL0NhbmR5Q0xJXCI7XG5cbmltcG9ydCB7IGV4dHJhY3RHZnZzRnJvbUZpbGVOYW1lIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvRXh0cmFjdEdmdnNGcm9tRmlsZU5hbWVcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0ZzVXRpbHNcIjtcbmltcG9ydCB7IGh0dHBHZXQgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTWV0aG9kc1wiO1xuaW1wb3J0IHsgTm90Rm91bmRXZWJFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9Ob3RGb3VuZFdlYkVycm9yXCI7XG5pbXBvcnQgeyBodHRwVHlwZSwgaHR0cFVybFBhcmFtIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1BhcmFtc1wiO1xuaW1wb3J0IHsgaHR0cFJldHVybiB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9SZXN1bHRzXCI7XG5pbXBvcnQge1xuICAgIEZpbGVTdHJlYW1SZXN1bHQsXG4gICAgU3RyZWFtUmVzdWx0LFxufSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0cy9TdHJlYW1SZXN1bHRIYW5kbGVyXCI7XG5pbXBvcnQgeyBTaW5nbGV0b25Db250cm9sbGVyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9FeHByZXNzV3JhcHBlci9TaW5nbGV0b25Db250cm9sbGVyXCI7XG5pbXBvcnQgeyBQYXRoUGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL1BhdGhQYXR0ZXJuXCI7XG5pbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5cbmltcG9ydCB7IElHZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyIH0gZnJvbSBcIi4vSUdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXJcIjtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkU2VydmVyQmFja2VuZFJlc291cmNlc0NvbnRyb2xsZXIgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXI6IElHZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyO1xuXG4gICAgcHJpdmF0ZSBhbGxTY2hlbWFzRmlsZXM6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc2V0QWxsU2NoZW1hRmlsZXNEZWJvdW5jZWQ6ICgpID0+IHZvaWQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXSxcbiAgICAgICAgZmxhbmdOb3JtYWxpemF0aW9uU291cmNlc1Byb3ZpZGVyOiBJR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlclxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIgPSBmbGFuZ05vcm1hbGl6YXRpb25Tb3VyY2VzUHJvdmlkZXI7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMucmVzZXRBbGxTY2hlbWFGaWxlc0RlYm91bmNlZCA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxsU2NoZW1hc0ZpbGVzID0gdW5kZWZpbmVkO1xuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9nZnZzXCIsIGh0dHBSZXR1cm4uSnNvbilcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsR2Z2cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IGdsb2JBc3luYyhcImZvcm1zLypcIiwgeyBjd2Q6IHBhdGguam9pbihpLmZhcm1EaXJlY3RvcnkpIH0pKTtcbiAgICAgICAgY29uc3QgZ2Z2cyA9IChhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykpLmZsYXQoKTtcbiAgICAgICAgcmV0dXJuIGdmdnMubWFwKHggPT4geC5yZXBsYWNlKFwiZm9ybXMvXCIsIFwiXCIpKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9waWNrbGlzdHNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFBpY2tsaXN0cygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoaSA9PiBnbG9iQXN5bmMoXCJwaWNrbGlzdHMvKlwiLCB7IGN3ZDogcGF0aC5qb2luKGkuZmFybURpcmVjdG9yeSkgfSkpO1xuICAgICAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykpLmZsYXQoKTtcbiAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCh4ID0+IHgucmVwbGFjZShcInBpY2tsaXN0cy9cIiwgXCJcIikpLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXG4gICAgICAgIFwiL3BpY2tsaXN0cy86cGlja2xpc3RGaWxlbmFtZVwiLFxuICAgICAgICBodHRwUmV0dXJuLlN0cmVhbVdpdGhNaW1lKFwiYXBwbGljYXRpb24vanNvblwiKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwicGlja2xpc3RGaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpXG4gICAgKVxuICAgIHB1YmxpYyBhc3luYyBnZXRQaWNrbGlzdHMocGlja2xpc3RGaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZWFkU3RyZWFtPiB7XG4gICAgICAgIGNvbnN0IGFsbEZpbGVQYXRoID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IHBhdGguam9pbihpLmZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIsIHBpY2tsaXN0RmlsZW5hbWUpKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoRmlsZSBvZiBhbGxGaWxlUGF0aCkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMocGF0aEZpbGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlYWRTdHJlYW0ocGF0aEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKGBub3QgZm91bmQgcGlja2xpc3RGaWxlbmFtZSAke3BpY2tsaXN0RmlsZW5hbWV9YCk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvY29udmVydGVyc1wiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQ29udmVydGVyc0ZpbGVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+XG4gICAgICAgICAgICBnbG9iQXN5bmMoXCJmb3Jtcy8qL2NvbnZlcnRlcnMvKlwiLCB7IGN3ZDogcGF0aC5qb2luKGkuZmFybURpcmVjdG9yeSkgfSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSAoYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpKS5mbGF0KCk7XG4gICAgICAgIHJldHVybiBmaWxlcy5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKS5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2NvbnZlcnRlcnMvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRDb252ZXJ0ZXJGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYWxsRmFybURpcmVjdG9yaWVzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IGkuZmFybURpcmVjdG9yeSkuZmxhdCgpO1xuICAgICAgICBjb25zdCBmb3JtRGlyUGF0aCA9IGFsbEZhcm1EaXJlY3Rvcmllcy5tYXAocHRoID0+IHBhdGguam9pbihwdGgpKTtcblxuICAgICAgICBjb25zdCBwb3NzaWJsZUZpbGVQYXRocyA9IGZvcm1EaXJQYXRoXG4gICAgICAgICAgICAubWFwKGkgPT4gZXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUoZmlsZW5hbWUpLm1hcChnZnYgPT4gcGF0aC5qb2luKGksIGBmb3Jtcy8ke2dmdn0vY29udmVydGVycy8ke2ZpbGVuYW1lfWApKSlcbiAgICAgICAgICAgIC5mbGF0KCk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgcG9zc2libGVGaWxlUGF0aHMpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWVyZ2Vyc1wiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsTWVyZ2Vyc0ZpbGVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+XG4gICAgICAgICAgICBnbG9iQXN5bmMoXCJmb3Jtcy8qL21lcmdlcnMvKlwiLCB7IGN3ZDogcGF0aC5qb2luKGkuZmFybURpcmVjdG9yeSkgfSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSAoYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpKS5mbGF0KCk7XG4gICAgICAgIHJldHVybiBmaWxlcy5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKS5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL21lcmdlcnMvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJmaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRNZXJnZXJGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYWxsRmFybURpcmVjdG9yaWVzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IGkuZmFybURpcmVjdG9yeSkuZmxhdCgpO1xuICAgICAgICBjb25zdCBmb3JtRGlyUGF0aCA9IGFsbEZhcm1EaXJlY3Rvcmllcy5tYXAocHRoID0+IHBhdGguam9pbihwdGgpKTtcblxuICAgICAgICBjb25zdCBwb3NzaWJsZUZpbGVQYXRocyA9IGZvcm1EaXJQYXRoXG4gICAgICAgICAgICAubWFwKGkgPT4gZXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUoZmlsZW5hbWUpLm1hcChnZnYgPT4gcGF0aC5qb2luKGksIGBmb3Jtcy8ke2dmdn0vbWVyZ2Vycy8ke2ZpbGVuYW1lfWApKSlcbiAgICAgICAgICAgIC5mbGF0KCk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgcG9zc2libGVGaWxlUGF0aHMpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIqL3hzbHRUZW1wbGF0ZXMqLzpmaWxlbmFtZVwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZmlsZW5hbWVcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0WHNsdFRlbXBsYXRlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgeHNsdFRlbXBsYXRlc1BhdGhzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IHBhdGguam9pbihpLmZhcm1EaXJlY3RvcnksIFwieHNsdFRlbXBsYXRlc1wiLCBmaWxlbmFtZSkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZVBhdGggb2YgeHNsdFRlbXBsYXRlc1BhdGhzKSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoYFhTTFQgdGVtcGxhdGUgbm90IGZvdW5kOiAke2ZpbGVuYW1lfWAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9zY2hlbWFzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxTY2hlbWFzRmlsZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKHRoaXMuYWxsU2NoZW1hc0ZpbGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+XG4gICAgICAgICAgICAgICAgZ2xvYkFzeW5jKFwiZm9ybXMvKi9zY2hlbWFzLypcIiwgeyBjd2Q6IHBhdGguam9pbihpLmZhcm1EaXJlY3RvcnkpIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSAoYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpKS5mbGF0KCk7XG4gICAgICAgICAgICB0aGlzLmFsbFNjaGVtYXNGaWxlcyA9IGZpbGVzLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbFNjaGVtYXNGaWxlcztcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9zY2hlbWFzLzpmaWxlbmFtZVwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZmlsZW5hbWVcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybVNjaGVtYXMoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0dGVybiA9IG5ldyBQYXRoUGF0dGVybihcIntnZnZ9LioueG1sXCIpO1xuICAgICAgICBjb25zdCBnZnY6IHN0cmluZyA9IGZpbGVQYXR0ZXJuLmV4ZWNTdHJpY3QoZmlsZW5hbWUpLmdmdiA/PyByZWplY3QoKTtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmFsbEZhcm1Db25maWdcbiAgICAgICAgICAgIC5tYXAoaSA9PiBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJzY2hlbWFzXCIsIGZpbGVuYW1lKSlcbiAgICAgICAgICAgIC5mbGF0KCk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlUGF0aCkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcHJlc2VudGF0aW9uc1wiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsRm9ybVByZXNlbnRhdGlvbnMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGkgPT5cbiAgICAgICAgICAgIGdsb2JBc3luYyhcImZvcm1zLyovcHJlc2VudGF0aW9ucy5qc29uXCIsIHsgY3dkOiBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5KSB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykpLmZsYXQoKTtcbiAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCh4ID0+IHgucmVwbGFjZShcImZvcm1zL1wiLCBcIlwiKS5yZXBsYWNlKFwiL1wiLCBcIi5cIikpLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcHJlc2VudGF0aW9ucy86Z2Z2LnByZXNlbnRhdGlvbnMuanNvblwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZ2Z2XCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldEZvcm1QcmVzZW50YXRpb25zKGdmdjogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFsbEZpbGVQYXRoID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IHBhdGguam9pbihpLmZhcm1EaXJlY3RvcnksIFwiZm9ybXNcIiwgZ2Z2LCBcInByZXNlbnRhdGlvbnMuanNvblwiKSk7XG4gICAgICAgIGZvciAoY29uc3QgcGF0aEZpbGUgb2YgYWxsRmlsZVBhdGgpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKHBhdGhGaWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChwYXRoRmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgRXJyb3IoYG5vdCBmb3VuZCB1bm1hcCAke2dmdn0ueG1sYCk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbm9ybWFsaXplXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxOb3JtYWxpemVGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoaSA9PlxuICAgICAgICAgICAgZ2xvYkFzeW5jKFwiZm9ybXMvKi9ub3JtYWxpemUvKi54bWxcIiwgeyBjd2Q6IHBhdGguam9pbihpLmZhcm1EaXJlY3RvcnkpIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gKGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKSkuZmxhdCgpO1xuICAgICAgICBjb25zdCBmbGFuZ0ZpbGVzID0gYXdhaXQgdGhpcy5nZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyLmdldEFsbE5vcm1hbGl6YXRpb25GaWxlTmFtZXMoKTtcbiAgICAgICAgcmV0dXJuIFsuLi5maWxlcy5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKSwgLi4uZmxhbmdGaWxlc10uam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9ub3JtYWxpemUvOmdmdi54bWxcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXROb3JtYWxpemVGaWxlKGdmdjogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFsbEZpbGVQYXRoID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+XG4gICAgICAgICAgICBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJub3JtYWxpemVcIiwgYCR7Z2Z2fS54bWxgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGhGaWxlIG9mIGFsbEZpbGVQYXRoKSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhwYXRoRmlsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQocGF0aEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKGBub3QgZm91bmQgdW5tYXAgJHtnZnZ9LnhtbGApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL25vcm1hbGl6ZS86Z2Z2Lm5vcm1hbGl6ZVwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZ2Z2XCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldEZMYW5nTm9ybWFsaXplRmlsZShnZnY6IHN0cmluZyk6IFByb21pc2U8U3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgU3RyZWFtUmVzdWx0KGF3YWl0IHRoaXMuZ2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlci5nZXROb3JtYWxpemF0aW9uRmlsZUNvbnRlbnQoZ2Z2KSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvYXR0YWNobWVudHBhdGhzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxBdHRhY2htZW50UGF0aHNGaWxlTmFtZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZmxhbmdGaWxlcyA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlci5nZXRBbGxBdHRhY2htZW50UGF0aEZpbGVOYW1lcygpO1xuICAgICAgICByZXR1cm4gZmxhbmdGaWxlcy5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2F0dGFjaG1lbnRwYXRocy86Z2Z2Lmpzb25cIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRBdHRhY2htZW50UGF0aEZpbGUoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVJlc3VsdChhd2FpdCB0aGlzLmdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIuZ2V0QXR0YWNobWVudFBhdGhzRmlsZUNvbnRlbnQoZ2Z2KSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvdW5tYXBcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFVubWFwRmlsZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGkgPT5cbiAgICAgICAgICAgIGdsb2JBc3luYyhcImZvcm1zLyovdW5tYXAvKi54bWxcIiwgeyBjd2Q6IHBhdGguam9pbihpLmZhcm1EaXJlY3RvcnkpIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gKGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKSkuZmxhdCgpO1xuICAgICAgICByZXR1cm4gZmlsZXMubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSkuam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi91bm1hcC86Z2Z2LnhtbFwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZ2Z2XCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldFVubWFwRmlsZShnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhbGxGaWxlUGF0aCA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoaSA9PlxuICAgICAgICAgICAgcGF0aC5qb2luKGkuZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiLCBnZnYsIFwidW5tYXBcIiwgYCR7Z2Z2fS54bWxgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGhGaWxlIG9mIGFsbEZpbGVQYXRoKSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhwYXRoRmlsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQocGF0aEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKGBub3QgZm91bmQgdW5tYXAgJHtnZnZ9LnhtbGApO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL21hcFwiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsTWFwRmlsZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGkgPT5cbiAgICAgICAgICAgIGdsb2JBc3luYyhcImZvcm1zLyovbWFwLyoueG1sXCIsIHsgY3dkOiBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5KSB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykpLmZsYXQoKTtcbiAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWFwLzpnZnYueG1sXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWFwRmlsZShnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhbGxGaWxlUGF0aCA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoaSA9PiBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJtYXBcIiwgYCR7Z2Z2fS54bWxgKSk7XG4gICAgICAgIGZvciAoY29uc3QgcGF0aEZpbGUgb2YgYWxsRmlsZVBhdGgpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKHBhdGhGaWxlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChwYXRoRmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgRXJyb3IoYG5vdCBmb3VuZCB1bm1hcCAke2dmdn0ueG1sYCk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcGF0Y2hcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFBhdGNoRmlsZXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGkgPT5cbiAgICAgICAgICAgIGdsb2JBc3luYyhcImZvcm1zLyovcGF0Y2gvKi54c2x0XCIsIHsgY3dkOiBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5KSB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmaWxlcyA9IChhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcykpLmZsYXQoKTtcbiAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcGF0Y2gvOmdmdi54c2x0XCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGF0Y2hGaWxlKGdmdjogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFsbEZpbGVQYXRoID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+XG4gICAgICAgICAgICBwYXRoLmpvaW4oaS5mYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJwYXRjaFwiLCBgJHtnZnZ9LnhzbHRgKVxuICAgICAgICApO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGhGaWxlIG9mIGFsbEZpbGVQYXRoKSB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhwYXRoRmlsZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQocGF0aEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKGBub3QgZm91bmQgdW5tYXAgJHtnZnZ9LnhtbGApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxHQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxJQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFHQSxJQUFBSyx3QkFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsaUJBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLE9BQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFFBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLG9CQUFBLEdBQUFYLE9BQUE7QUFJQSxJQUFBWSxvQkFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsWUFBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsWUFBQSxHQUFBZCxPQUFBO0FBQTJELElBQUFlLElBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEs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
|
|
167
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwicGF0aCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2ZzRXh0cmEiLCJfbG9kYXNoIiwiX01ldGhvZHMiLCJfTm90Rm91bmRXZWJFcnJvciIsIl9QYXJhbXMiLCJfUmVzdWx0cyIsIl9TdHJlYW1SZXN1bHRIYW5kbGVyIiwiX1NpbmdsZXRvbkNvbnRyb2xsZXIiLCJfRmFybURpcmVjdG9yeSIsIl9kZWMiLCJfZGVjMiIsIl9kZWMzIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiX2RlYzE0IiwiX2RlYzE1IiwiX2RlYzE2IiwiX2RlYzE3IiwiX2RlYzE4IiwiX2RlYzE5IiwiX2RlYzIwIiwiX2RlYzIxIiwiX2RlYzIyIiwiX2NsYXNzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIkJ1aWxkU2VydmVyQmFja2VuZFJlc291cmNlc0NvbnRyb2xsZXIiLCJodHRwR2V0IiwiaHR0cFJldHVybiIsIkpzb24iLCJQbGFpblRleHQiLCJTdHJlYW1XaXRoTWltZSIsImh0dHBVcmxQYXJhbSIsImh0dHBUeXBlIiwiU3RyaW5nIiwiU3RyZWFtIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImZsYW5nTm9ybWFsaXphdGlvblNvdXJjZXNQcm92aWRlciIsImdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIiLCJhbGxTY2hlbWFzRmlsZXMiLCJyZXNldEFsbFNjaGVtYUZpbGVzRGVib3VuY2VkIiwiYWxsRmFybURpcmVjdG9yaWVzIiwibWFwIiwiaSIsIkZhcm1EaXJlY3RvcnkiLCJmYXJtRGlyZWN0b3J5IiwiZGVib3VuY2UiLCJ1bmRlZmluZWQiLCJnZXRBbGxHZnZzIiwiUHJvbWlzZSIsImFsbCIsIngiLCJmbGF0IiwiZ2V0QWxsUGlja2xpc3RzIiwiam9pbiIsImdldFBpY2tsaXN0cyIsInBpY2tsaXN0RmlsZW5hbWUiLCJhbGxGaWxlUGF0aCIsInBhdGhGaWxlIiwicGF0aEV4aXN0cyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJFcnJvciIsImdldEFsbENvbnZlcnRlcnNGaWxlcyIsImZsYXRNYXAiLCJnZXRBbGxDb252ZXJ0ZXJGaWxlUGF0aHMiLCJiYXNlbmFtZSIsImdldENvbnZlcnRlckZpbGUiLCJmaWxlbmFtZSIsImZpbGVQYXRoIiwiZ2V0Q29udmVydGVyRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJGaWxlU3RyZWFtUmVzdWx0IiwiTm90Rm91bmRXZWJFcnJvciIsImdldEFsbE1lcmdlcnNGaWxlcyIsImdldEFsbE1lcmdlcnNGaWxlUGF0aHMiLCJnZXRNZXJnZXJGaWxlIiwiZ2V0TWVyZ2Vyc0ZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsU2NoZW1hc0ZpbGVzIiwiZ2V0QWxsU2NoZW1hc0ZpbGVQYXRocyIsImdldEZvcm1TY2hlbWFzIiwiZ2V0U2NoZW1hRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxGb3JtUHJlc2VudGF0aW9ucyIsImdldEFsbFByZXNlbnRhdGlvbnNGaWxlTmFtZXMiLCJnZXRGb3JtUHJlc2VudGF0aW9ucyIsImdmdiIsImdldFByZXNlbnRhdGlvbnNGaWxlUGF0aEJ5R2Z2T3JVbmRlZmluZWQiLCJnZXRBbGxOb3JtYWxpemVGaWxlcyIsImZpbGVzIiwiZ2V0QWxsTm9ybWFsaXplRmlsZVBhdGhzIiwiZmxhbmdGaWxlcyIsImdldEFsbE5vcm1hbGl6YXRpb25GaWxlTmFtZXMiLCJnZXROb3JtYWxpemVGaWxlIiwiZ2V0Tm9ybWFsaXplRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRGTGFuZ05vcm1hbGl6ZUZpbGUiLCJTdHJlYW1SZXN1bHQiLCJnZXROb3JtYWxpemF0aW9uRmlsZUNvbnRlbnQiLCJnZXRBbGxBdHRhY2htZW50UGF0aHNGaWxlTmFtZXMiLCJnZXRBbGxBdHRhY2htZW50UGF0aEZpbGVOYW1lcyIsImdldEF0dGFjaG1lbnRQYXRoRmlsZSIsImdldEF0dGFjaG1lbnRQYXRoc0ZpbGVDb250ZW50IiwiZ2V0QWxsVW5tYXBGaWxlcyIsImdldEFsbFVubWFwRmlsZVBhdGhzIiwiZ2V0VW5tYXBGaWxlIiwiZ2V0VW5tYXBGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsImdldEFsbE1hcEZpbGVzIiwiZ2V0QWxsTWFwRmlsZVBhdGhzIiwiZ2V0TWFwRmlsZSIsImdldE1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsUGF0Y2hGaWxlcyIsImdldEFsbFBhdGNoRmlsZVBhdGhzIiwiZ2V0UGF0Y2hGaWxlIiwiZ2V0UGF0Y2hGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IyIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9CdWlsZFNlcnZlckJhY2tlbmRSZXNvdXJjZXNDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0sIFJlYWRTdHJlYW0gfSBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IF8sIHsgZGVib3VuY2UgfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgeyBGYXJtQ29uZmlnIH0gZnJvbSBcIlRvb2xzL3NyYy9DYW5keUNMSVwiO1xuXG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IE5vdEZvdW5kV2ViRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTm90Rm91bmRXZWJFcnJvclwiO1xuaW1wb3J0IHsgaHR0cFR5cGUsIGh0dHBVcmxQYXJhbSB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9QYXJhbXNcIjtcbmltcG9ydCB7IGh0dHBSZXR1cm4gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0c1wiO1xuaW1wb3J0IHtcbiAgICBGaWxlU3RyZWFtUmVzdWx0LFxuICAgIFN0cmVhbVJlc3VsdCxcbn0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHMvU3RyZWFtUmVzdWx0SGFuZGxlclwiO1xuaW1wb3J0IHsgU2luZ2xldG9uQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvRXhwcmVzc1dyYXBwZXIvU2luZ2xldG9uQ29udHJvbGxlclwiO1xuXG5pbXBvcnQgeyBJR2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlciB9IGZyb20gXCIuL0lHZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBGYXJtRGlyZWN0b3J5IH0gZnJvbSBcIi4vRGlyZWN0b3JpZXMvRmFybURpcmVjdG9yeVwiO1xuXG5leHBvcnQgY2xhc3MgQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlcjogSUdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXI7XG4gICAgcHJpdmF0ZSBhbGxTY2hlbWFzRmlsZXM6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc2V0QWxsU2NoZW1hRmlsZXNEZWJvdW5jZWQ6ICgpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxGYXJtRGlyZWN0b3JpZXM6IEZhcm1EaXJlY3RvcnlbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgYWxsRmFybUNvbmZpZzogRmFybUNvbmZpZ1tdLFxuICAgICAgICBmbGFuZ05vcm1hbGl6YXRpb25Tb3VyY2VzUHJvdmlkZXI6IElHZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlciA9IGZsYW5nTm9ybWFsaXphdGlvblNvdXJjZXNQcm92aWRlcjtcbiAgICAgICAgdGhpcy5hbGxGYXJtQ29uZmlnID0gYWxsRmFybUNvbmZpZztcbiAgICAgICAgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMgPSBhbGxGYXJtQ29uZmlnLm1hcChpID0+IG5ldyBGYXJtRGlyZWN0b3J5KGkuZmFybURpcmVjdG9yeSkpO1xuICAgICAgICB0aGlzLnJlc2V0QWxsU2NoZW1hRmlsZXNEZWJvdW5jZWQgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbFNjaGVtYXNGaWxlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvZ2Z2c1wiLCBodHRwUmV0dXJuLkpzb24pXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEdmdnMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLm1hcCh4ID0+IHguZ2V0QWxsR2Z2cygpKSkpLmZsYXQoKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9waWNrbGlzdHNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFBpY2tsaXN0cygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLm1hcCh4ID0+IHguZ2V0QWxsUGlja2xpc3RzKCkpKSkuZmxhdCgpLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXG4gICAgICAgIFwiL3BpY2tsaXN0cy86cGlja2xpc3RGaWxlbmFtZVwiLFxuICAgICAgICBodHRwUmV0dXJuLlN0cmVhbVdpdGhNaW1lKFwiYXBwbGljYXRpb24vanNvblwiKSxcbiAgICAgICAgaHR0cFVybFBhcmFtKFwicGlja2xpc3RGaWxlbmFtZVwiLCBodHRwVHlwZS5TdHJpbmcpXG4gICAgKVxuICAgIHB1YmxpYyBhc3luYyBnZXRQaWNrbGlzdHMocGlja2xpc3RGaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZWFkU3RyZWFtPiB7XG4gICAgICAgIGNvbnN0IGFsbEZpbGVQYXRoID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IHBhdGguam9pbihpLmZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIsIHBpY2tsaXN0RmlsZW5hbWUpKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoRmlsZSBvZiBhbGxGaWxlUGF0aCkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMocGF0aEZpbGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlYWRTdHJlYW0ocGF0aEZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IEVycm9yKGBub3QgZm91bmQgcGlja2xpc3RGaWxlbmFtZSAke3BpY2tsaXN0RmlsZW5hbWV9YCk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvY29udmVydGVyc1wiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQ29udmVydGVyc0ZpbGVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMuZmxhdE1hcCh4ID0+IHguZ2V0QWxsQ29udmVydGVyRmlsZVBhdGhzKCkpKSlcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvY29udmVydGVycy86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImZpbGVuYW1lXCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldENvbnZlcnRlckZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRDb252ZXJ0ZXJGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCAmJiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgZmFsc2UpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL21lcmdlcnNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbE1lcmdlcnNGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbE1lcmdlcnNGaWxlUGF0aHMoKSkpKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpXG4gICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9tZXJnZXJzLzpmaWxlbmFtZVwiLCBodHRwUmV0dXJuLlN0cmVhbSwgaHR0cFVybFBhcmFtKFwiZmlsZW5hbWVcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWVyZ2VyRmlsZShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxGaWxlU3RyZWFtUmVzdWx0PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmFybURpcmVjdG9yeSBvZiB0aGlzLmFsbEZhcm1EaXJlY3Rvcmllcykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBhd2FpdCBmYXJtRGlyZWN0b3J5LmdldE1lcmdlcnNGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCAmJiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgZmFsc2UpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3NjaGVtYXNcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFNjaGVtYXNGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy5hbGxTY2hlbWFzRmlsZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5hbGxTY2hlbWFzRmlsZXMgPSAoYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMuZmxhdE1hcCh4ID0+IHguZ2V0QWxsU2NoZW1hc0ZpbGVQYXRocygpKSkpXG4gICAgICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRBbGxTY2hlbWFGaWxlc0RlYm91bmNlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxTY2hlbWFzRmlsZXM7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvc2NoZW1hcy86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImZpbGVuYW1lXCIsIGh0dHBUeXBlLlN0cmluZykpXG4gICAgcHVibGljIGFzeW5jIGdldEZvcm1TY2hlbWFzKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRGlyZWN0b3J5IG9mIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IGZhcm1EaXJlY3RvcnkuZ2V0U2NoZW1hRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwgJiYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wcmVzZW50YXRpb25zXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxGb3JtUHJlc2VudGF0aW9ucygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbFByZXNlbnRhdGlvbnNGaWxlTmFtZXMoKSkpKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpXG4gICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wcmVzZW50YXRpb25zLzpnZnYucHJlc2VudGF0aW9ucy5qc29uXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybVByZXNlbnRhdGlvbnMoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRGlyZWN0b3J5IG9mIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IGZhcm1EaXJlY3RvcnkuZ2V0UHJlc2VudGF0aW9uc0ZpbGVQYXRoQnlHZnZPclVuZGVmaW5lZChnZnYpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwgJiYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9ub3JtYWxpemVcIiwgaHR0cFJldHVybi5QbGFpblRleHQpXG4gICAgcHVibGljIGFzeW5jIGdldEFsbE5vcm1hbGl6ZUZpbGVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGZpbGVzID0gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbE5vcm1hbGl6ZUZpbGVQYXRocygpKSkpLmZsYXQoKTtcbiAgICAgICAgY29uc3QgZmxhbmdGaWxlcyA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVkU2VydmVyU2lkZVNvdXJjZXNQcm92aWRlci5nZXRBbGxOb3JtYWxpemF0aW9uRmlsZU5hbWVzKCk7XG4gICAgICAgIHJldHVybiBbLi4uZmlsZXMubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSksIC4uLmZsYW5nRmlsZXNdLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbm9ybWFsaXplLzpnZnYueG1sXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Tm9ybWFsaXplRmlsZShnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXROb3JtYWxpemVGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChgJHtnZnZ9LnhtbGApO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwgJiYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9ub3JtYWxpemUvOmdmdi5ub3JtYWxpemVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGTGFuZ05vcm1hbGl6ZUZpbGUoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPFN0cmVhbVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFN0cmVhbVJlc3VsdChhd2FpdCB0aGlzLmdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIuZ2V0Tm9ybWFsaXphdGlvbkZpbGVDb250ZW50KGdmdikpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL2F0dGFjaG1lbnRwYXRoc1wiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudFBhdGhzRmlsZU5hbWVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGZsYW5nRmlsZXMgPSBhd2FpdCB0aGlzLmdlbmVyYXRlZFNlcnZlclNpZGVTb3VyY2VzUHJvdmlkZXIuZ2V0QWxsQXR0YWNobWVudFBhdGhGaWxlTmFtZXMoKTtcbiAgICAgICAgcmV0dXJuIGZsYW5nRmlsZXMuam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9hdHRhY2htZW50cGF0aHMvOmdmdi5qc29uXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXR0YWNobWVudFBhdGhGaWxlKGdmdjogc3RyaW5nKTogUHJvbWlzZTxTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW1SZXN1bHQoYXdhaXQgdGhpcy5nZW5lcmF0ZWRTZXJ2ZXJTaWRlU291cmNlc1Byb3ZpZGVyLmdldEF0dGFjaG1lbnRQYXRoc0ZpbGVDb250ZW50KGdmdikpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3VubWFwXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxVbm1hcEZpbGVzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiAoYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMuZmxhdE1hcCh4ID0+IHguZ2V0QWxsVW5tYXBGaWxlUGF0aHMoKSkpKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLm1hcCh4ID0+IHBhdGguYmFzZW5hbWUoeCkpXG4gICAgICAgICAgICAuam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi91bm1hcC86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRVbm1hcEZpbGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZVN0cmVhbVJlc3VsdD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZhcm1EaXJlY3Rvcnkgb2YgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgZmFybURpcmVjdG9yeS5nZXRVbm1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsICYmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoZmlsZVBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kV2ViRXJyb3IoXCJGaWxlIG5vdCBmb3VuZFwiLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvbWFwXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxNYXBGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbE1hcEZpbGVQYXRocygpKSkpXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAubWFwKHggPT4gcGF0aC5iYXNlbmFtZSh4KSlcbiAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL21hcC86ZmlsZW5hbWVcIiwgaHR0cFJldHVybi5TdHJlYW0sIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRNYXBGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRGlyZWN0b3J5IG9mIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IGZhcm1EaXJlY3RvcnkuZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwgJiYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChmaWxlUGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRXZWJFcnJvcihcIkZpbGUgbm90IGZvdW5kXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wYXRjaFwiLCBodHRwUmV0dXJuLlBsYWluVGV4dClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsUGF0Y2hGaWxlcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLmZsYXRNYXAoeCA9PiB4LmdldEFsbFBhdGNoRmlsZVBhdGhzKCkpKSlcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoeCA9PiBwYXRoLmJhc2VuYW1lKHgpKVxuICAgICAgICAgICAgLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcGF0Y2gvOmZpbGVuYW1lXCIsIGh0dHBSZXR1cm4uU3RyZWFtLCBodHRwVXJsUGFyYW0oXCJnZnZcIiwgaHR0cFR5cGUuU3RyaW5nKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGF0Y2hGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVTdHJlYW1SZXN1bHQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBmYXJtRGlyZWN0b3J5IG9mIHRoaXMuYWxsRmFybURpcmVjdG9yaWVzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGF3YWl0IGZhcm1EaXJlY3RvcnkuZ2V0UGF0Y2hGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCAmJiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KGZpbGVQYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBOb3RGb3VuZFdlYkVycm9yKFwiRmlsZSBub3QgZm91bmRcIiwgZmFsc2UpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxHQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxJQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFHQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsUUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsb0JBQUEsR0FBQVQsT0FBQTtBQUlBLElBQUFVLG9CQUFBLEdBQUFWLE9BQUE7QUFHQSxJQUFBVyxjQUFBLEdBQUFYLE9BQUE7QUFBNEQsSUFBQVksSUFBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFBLEVBQUFDLE1BQUEsRUFBQUMsTUFBQSxFQUFBQyxNQUFB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
|