specmatic 2.0.37 → 2.0.41
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/dist/core/index.js +13 -2
- package/dist/downloadSpecmaticJar.js +29 -0
- package/dist/lib/express-list-endpoints/index.d.js +4 -0
- package/dist/lib/express-list-endpoints/index.js +139 -0
- package/package.json +3 -5
- package/specmatic.jar +0 -0
- package/src/core/__tests__/set.expectation.ts +24 -0
- package/src/core/index.ts +13 -3
- package/src/lib/express-list-endpoints/index.d.ts +15 -0
- package/src/lib/express-list-endpoints/index.js +128 -0
package/dist/core/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var _fastXmlParser = require("fast-xml-parser");
|
|
|
10
10
|
var _fs = _interopRequireDefault(require("fs"));
|
|
11
11
|
var _logger = _interopRequireDefault(require("../common/logger"));
|
|
12
12
|
var _runner = require("../common/runner");
|
|
13
|
-
var _expressListEndpoints = _interopRequireDefault(require("express-list-endpoints"));
|
|
13
|
+
var _expressListEndpoints = _interopRequireDefault(require("../lib/express-list-endpoints"));
|
|
14
14
|
var _http = _interopRequireDefault(require("http"));
|
|
15
15
|
var _shutdownUtils = require("./shutdownUtils");
|
|
16
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
@@ -205,7 +205,18 @@ var setExpectationJson = exports.setExpectationJson = function setExpectationJso
|
|
|
205
205
|
_logger["default"].info('Set Expectations: Finished');
|
|
206
206
|
resolve();
|
|
207
207
|
})["catch"](function (err) {
|
|
208
|
+
var _err$response;
|
|
208
209
|
var setExpectationsErrorMessage = "Set Expectations: Failed with error ".concat(err);
|
|
210
|
+
// Check if the response data is in text format
|
|
211
|
+
if (err && ((_err$response = err.response) === null || _err$response === void 0 ? void 0 : _err$response.headers['content-type']) === 'text/plain') {
|
|
212
|
+
try {
|
|
213
|
+
// Use a check to handle text content
|
|
214
|
+
var errorText = typeof err.response.data === 'string' ? err.response.data : "Error text not available";
|
|
215
|
+
setExpectationsErrorMessage += " - ".concat(errorText);
|
|
216
|
+
} catch (e) {
|
|
217
|
+
_logger["default"].error("Failed to retrieve text error message.");
|
|
218
|
+
}
|
|
219
|
+
}
|
|
209
220
|
_logger["default"].error(setExpectationsErrorMessage);
|
|
210
221
|
reject(setExpectationsErrorMessage);
|
|
211
222
|
});
|
|
@@ -295,4 +306,4 @@ var convertEndpointToSpringSyntax = function convertEndpointToSpringSyntax(path)
|
|
|
295
306
|
var removeRegexFromPath = function removeRegexFromPath(path) {
|
|
296
307
|
return path.replace(/\([^()]*\)/g, '');
|
|
297
308
|
};
|
|
298
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2Zhc3RYbWxQYXJzZXIiLCJfZnMiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9leHByZXNzTGlzdEVuZHBvaW50cyIsIl9odHRwIiwiX3NodXRkb3duVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsIk9iamVjdCIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIlN0dWIiLCJleHBvcnRzIiwiaG9zdCIsInBvcnQiLCJ1cmwiLCJwcm9jZXNzIiwic3RhcnRTdHViIiwiYXJncyIsImNtZCIsImNvbmNhdCIsImpvaW4iLCJsb2dnZXIiLCJpbmZvIiwiZGVidWciLCJyZWplY3QiLCJqYXZhUHJvY2VzcyIsImNhbGxDb3JlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5kZXhPZiIsInN0dWJJbmZvIiwic3BsaXQiLCJfdXJsSW5mbyRsZW5ndGgiLCJ0cmltIiwidXJsSW5mbyIsImV4ZWMiLCJwYXJzZUludCIsInN0b3BTdHViIiwiX3JlZiIsIl9jYWxsZWUiLCJzdHViIiwiX2phdmFQcm9jZXNzJHN0ZG91dCIsIl9qYXZhUHJvY2VzcyRzdGRlcnIiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic3Rkb3V0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RkZXJyIiwiZ3JhY2VmdWxTaHV0ZG93biIsIl94IiwidGVzdFdpdGhBcGlDb3ZlcmFnZSIsIl9yZWYyIiwiX2NhbGxlZTMiLCJleHByZXNzQXBwIiwiY29udHJhY3RQYXRoIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiX3JlZjMiLCJfY2FsbGVlMiIsIl9yZWplY3QiLCJhcGlDb3ZlcmFnZVNlcnZlciIsInJlc3VsdHMiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJzdGFydEFwaUNvdmVyYWdlU2VydmVyIiwidGVzdCIsImNsb3NlIiwiX3g3IiwiX3g4IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2Iiwic3BlY3NQYXRoIiwicGF0aCIsInJlcG9ydERpciIsImZzIiwicm1TeW5jIiwicmVjdXJzaXZlIiwiZm9yY2UiLCJ0ZXN0Q2FzZXMiLCJwYXJzZUp1bml0WE1MIiwidG90YWwiLCJmYWlsdXJlIiwiZmlsdGVyIiwidGVzdGNhc2UiLCJzdWNjZXNzIiwicmVzdWx0IiwiY29uc29sZSIsImxvZyIsInNob3dUZXN0UmVzdWx0cyIsInRlc3RGbiIsIm1hcCIsIm5hbWVUZW1wQXJyIiwicmVwbGFjZSIsInNraXBwZWQiLCJzZXRFeHBlY3RhdGlvbnMiLCJzdHViUGF0aCIsInN0dWJTZXJ2ZXJCYXNlVXJsIiwic3R1YlJlc3BvbnNlIiwic2V0RXhwZWN0YXRpb25Kc29uIiwiYXhpb3MiLCJwb3N0IiwicmVzcG9uc2UiLCJkYXRhIiwic2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlIiwicHJpbnRKYXJWZXJzaW9uIiwiYXBwIiwiaHR0cCIsImNyZWF0ZVNlcnZlciIsIl9yZXEiLCJyZXMiLCJ3cml0ZUhlYWQiLCJlbmRQb2ludHMiLCJKU09OIiwic3RyaW5naWZ5IiwiZXh0cmFjdEVuZFBvaW50cyIsImVuZCIsIm9uIiwibGlzdGVuIiwiYWRkcmVzcyIsImVudiIsInJlcG9ydFBhdGgiLCJyZWFkRmlsZVN5bmMiLCJwYXJzZXIiLCJYTUxQYXJzZXIiLCJyZXN1bHRYbWwiLCJwYXJzZSIsInRlc3RzdWl0ZSIsIkFycmF5IiwiaXNBcnJheSIsImxpc3RFbmRQb2ludHMiLCJkZXRhaWxzIiwibGlzdEV4cHJlc3NFbmRwb2ludHMiLCJhcGlEZXRhaWwiLCJtZXRob2RzIiwic3ByaW5nQWN0dWF0b3JQYXlsb2FkIiwiY29udGV4dHMiLCJhcHBsaWNhdGlvbiIsIm1hcHBpbmdzIiwiZGlzcGF0Y2hlclNlcnZsZXRzIiwiZGlzcGF0Y2hlclNlcnZsZXQiLCJzb3J0IiwicmVxdWVzdE1hcHBpbmdDb25kaXRpb25zIiwicGF0dGVybnMiLCJjb252ZXJ0RW5kcG9pbnRUb1NwcmluZ1N5bnRheCIsInJlbW92ZVJlZ2V4RnJvbVBhdGgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcbmltcG9ydCB7IFhNTFBhcnNlciB9IGZyb20gJ2Zhc3QteG1sLXBhcnNlcidcbmltcG9ydCBmcyBmcm9tICdmcydcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vY29tbW9uL2xvZ2dlcidcbmltcG9ydCB7IGNhbGxDb3JlIH0gZnJvbSAnLi4vY29tbW9uL3J1bm5lcidcbmltcG9ydCBsaXN0RXhwcmVzc0VuZHBvaW50cyBmcm9tICdleHByZXNzLWxpc3QtZW5kcG9pbnRzJ1xuaW1wb3J0IGh0dHAgZnJvbSAnaHR0cCdcbmltcG9ydCB7IEFkZHJlc3NJbmZvIH0gZnJvbSAnbmV0J1xuaW1wb3J0IHsgZ3JhY2VmdWxTaHV0ZG93biB9IGZyb20gJy4vc2h1dGRvd25VdGlscydcblxuZXhwb3J0IGNsYXNzIFN0dWIge1xuICAgIGhvc3Q6IHN0cmluZ1xuICAgIHBvcnQ6IG51bWJlclxuICAgIHVybDogc3RyaW5nXG4gICAgcHJvY2VzczogQ2hpbGRQcm9jZXNzXG4gICAgY29uc3RydWN0b3IoaG9zdDogc3RyaW5nLCBwb3J0OiBudW1iZXIsIHVybDogc3RyaW5nLCBwcm9jZXNzOiBDaGlsZFByb2Nlc3MpIHtcbiAgICAgICAgdGhpcy5ob3N0ID0gaG9zdFxuICAgICAgICB0aGlzLnBvcnQgPSBwb3J0XG4gICAgICAgIHRoaXMudXJsID0gdXJsXG4gICAgICAgIHRoaXMucHJvY2VzcyA9IHByb2Nlc3NcbiAgICB9XG59XG5cbmNvbnN0IHN0YXJ0U3R1YiA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBhcmdzPzogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8U3R1Yj4gPT4ge1xuICAgIHZhciBjbWQgPSBgc3R1YmBcbiAgICBpZiAoaG9zdCkgY21kICs9IGAgLS1ob3N0PSR7aG9zdH1gXG4gICAgaWYgKHBvcnQpIGNtZCArPSBgIC0tcG9ydD0ke3BvcnR9YFxuICAgIGlmIChhcmdzKSBjbWQgKz0gJyAnICsgYXJncy5qb2luKCcgJylcblxuICAgIGxvZ2dlci5pbmZvKCdTdHViOiBTdGFydGluZyBzZXJ2ZXInKVxuICAgIGxvZ2dlci5kZWJ1ZyhgU3R1YjogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgamF2YVByb2Nlc3MgPSBjYWxsQ29yZShcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTdHViOiBFeGl0ZWQgd2l0aCBlcnJvciAke2Vycn1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluZGV4T2YoJ1N0dWIgc2VydmVyIGlzIHJ1bm5pbmcnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbyhgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHViSW5mbyA9IG1lc3NhZ2Uuc3BsaXQoJ29uJylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHViSW5mby5sZW5ndGggPCAyKSByZWplY3QoJ0Nhbm5vdCBkZXRlcm1pbmUgdXJsIGZyb20gc3R1YiBvdXRwdXQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gc3R1YkluZm9bMV0udHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsSW5mbyA9IC8oLio/KTpcXC9cXC8oLio/KTooWzAtOV0rKS8uZXhlYyh1cmwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1cmxJbmZvPy5sZW5ndGggPz8gMCkgPCA0KSByZWplY3QoJ0Nhbm5vdCBkZXRlcm1pbmUgaG9zdCBhbmQgcG9ydCBmcm9tIHN0dWIgb3V0cHV0JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJlc29sdmUobmV3IFN0dWIodXJsSW5mbyFbMl0sIHBhcnNlSW50KHVybEluZm8hWzNdKSwgdXJsSW5mbyFbMF0sIGphdmFQcm9jZXNzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmluZGV4T2YoJ0FkZHJlc3MgYWxyZWFkeSBpbiB1c2UnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFN0dWI6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCdBZGRyZXNzIGFscmVhZHkgaW4gdXNlJylcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU3R1YjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoYFN0dWI6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgIH0pXG59XG5cbmNvbnN0IHN0b3BTdHViID0gYXN5bmMgKHN0dWI6IFN0dWIpID0+IHtcbiAgICBsb2dnZXIuZGVidWcoYFN0dWI6IFN0b3BwaW5nIHNlcnZlciBhdCAke3N0dWIudXJsfWApXG4gICAgY29uc3QgamF2YVByb2Nlc3MgPSBzdHViLnByb2Nlc3NcbiAgICBqYXZhUHJvY2Vzcy5zdGRvdXQ/LnJlbW92ZUFsbExpc3RlbmVycygpXG4gICAgamF2YVByb2Nlc3Muc3RkZXJyPy5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgIGphdmFQcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycygnY2xvc2UnKVxuICAgIGxvZ2dlci5kZWJ1ZygnVHJ5aW5nIHRvIHN0b3Agc3R1YiBwcm9jZXNzIGdyYWNlZnVsbHkgLi4uJylcbiAgICBhd2FpdCBncmFjZWZ1bFNodXRkb3duKGphdmFQcm9jZXNzKVxuICAgIGxvZ2dlci5kZWJ1ZygnQ29tcGxldGVkIGdyYWNlZnVsIHRlcm1pbmF0aW9uIG9mIHRoZSBzdHViIHByb2Nlc3MnKVxuICAgIGxvZ2dlci5pbmZvKGBTdHViOiBTdG9wcGVkIHNlcnZlciBhdCAke3N0dWIudXJsfWApXG59XG5cbmNvbnN0IHRlc3RXaXRoQXBpQ292ZXJhZ2UgPSBhc3luYyAoXG4gICAgZXhwcmVzc0FwcDogYW55LFxuICAgIGhvc3Q/OiBzdHJpbmcsXG4gICAgcG9ydD86IG51bWJlcixcbiAgICBjb250cmFjdFBhdGg/OiBzdHJpbmcsXG4gICAgYXJncz86IChzdHJpbmcgfCBudW1iZXIpW11cbik6IFByb21pc2U8eyBbazogc3RyaW5nXTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIF9yZWplY3QpID0+IHtcbiAgICAgICAgbGV0IGFwaUNvdmVyYWdlU2VydmVyID0gYXdhaXQgc3RhcnRBcGlDb3ZlcmFnZVNlcnZlcihleHByZXNzQXBwKVxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGVzdChob3N0LCBwb3J0LCBjb250cmFjdFBhdGgsIGFyZ3MpXG4gICAgICAgIGFwaUNvdmVyYWdlU2VydmVyLmNsb3NlKCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0cylcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCB0ZXN0ID0gKGhvc3Q/OiBzdHJpbmcsIHBvcnQ/OiBudW1iZXIsIGNvbnRyYWN0UGF0aD86IHN0cmluZywgYXJncz86IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPHsgW2s6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgY29uc3Qgc3BlY3NQYXRoID0gcGF0aC5yZXNvbHZlKGNvbnRyYWN0UGF0aCArICcnKVxuXG4gICAgdmFyIGNtZCA9IGB0ZXN0YFxuICAgIGlmIChjb250cmFjdFBhdGgpIGNtZCArPSBgICR7c3BlY3NQYXRofWBcbiAgICBjbWQgKz0gJyAtLWp1bml0UmVwb3J0RGlyPWRpc3QvdGVzdC1yZXBvcnQnXG4gICAgaWYgKGhvc3QpIGNtZCArPSBgIC0taG9zdD0ke2hvc3R9YFxuICAgIGlmIChwb3J0KSBjbWQgKz0gYCAtLXBvcnQ9JHtwb3J0fWBcbiAgICBpZiAoYXJncykgY21kICs9ICcgJyArIGFyZ3Muam9pbignICcpXG5cbiAgICBsb2dnZXIuaW5mbygnVGVzdDogUnVubmluZycpXG4gICAgbG9nZ2VyLmRlYnVnKGBUZXN0OiBFeGVjdXRpbmcgXCIke2NtZH1cImApXG5cbiAgICBjb25zdCByZXBvcnREaXIgPSBwYXRoLnJlc29sdmUoJ2Rpc3QvdGVzdC1yZXBvcnQnKVxuICAgIGZzLnJtU3luYyhyZXBvcnREaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgIGNhbGxDb3JlKFxuICAgICAgICAgICAgY21kLFxuICAgICAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikgbG9nZ2VyLmVycm9yKGBUZXN0OiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKVxuICAgICAgICAgICAgICAgIHZhciB0ZXN0Q2FzZXMgPSBwYXJzZUp1bml0WE1MKClcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IHRlc3RDYXNlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsdXJlID0gdGVzdENhc2VzLmZpbHRlcigodGVzdGNhc2U6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkgPT4gdGVzdGNhc2VbJ2ZhaWx1cmUnXSB8fCB0ZXN0Y2FzZVsnc2tpcHBlZCddKS5sZW5ndGhcbiAgICAgICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gdG90YWwgLSBmYWlsdXJlXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHsgdG90YWwsIHN1Y2Nlc3MsIGZhaWx1cmUgfVxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChtZXNzYWdlLCBlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLmluZGV4T2YoJ0FQSSBDT1ZFUkFHRSBTVU1NQVJZJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKSAvL0xvZyBhbHdheXMgZm9yIGFsbCBsb2cgbGV2ZWxzXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyW2Vycm9yID8gJ2Vycm9yJyA6ICdkZWJ1ZyddKGBUZXN0OiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICB9KVxufVxuXG5jb25zdCBzaG93VGVzdFJlc3VsdHMgPSAodGVzdEZuOiAobmFtZTogc3RyaW5nLCBjYjogKCkgPT4gdm9pZCkgPT4gdm9pZCkgPT4ge1xuICAgIHZhciB0ZXN0Q2FzZXMgPSBwYXJzZUp1bml0WE1MKClcbiAgICB0ZXN0Q2FzZXMubWFwKGZ1bmN0aW9uICh0ZXN0Y2FzZTogeyBbaWQ6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICAgIHZhciBuYW1lID0gJ05vIE5hbWUnXG4gICAgICAgIGlmICh0ZXN0Y2FzZVsnc3lzdGVtLW91dCddKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lVGVtcEFyciA9IHRlc3RjYXNlWydzeXN0ZW0tb3V0J11cbiAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnJylcbiAgICAgICAgICAgICAgICAuc3BsaXQoL2Rpc3BsYXktbmFtZTouKlNjZW5hcmlvOiAvKVxuICAgICAgICAgICAgaWYgKG5hbWVUZW1wQXJyLmxlbmd0aCA+IDEpIG5hbWUgPSBuYW1lVGVtcEFyclsxXS50cmltKClcbiAgICAgICAgfVxuICAgICAgICB0ZXN0Rm4obmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRlc3RjYXNlLmZhaWx1cmUgfHwgdGVzdGNhc2Uuc2tpcHBlZCkgdGhyb3cgbmV3IEVycm9yKCdEaWQgbm90IHBhc3MnKVxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHNldEV4cGVjdGF0aW9ucyA9IChzdHViUGF0aDogc3RyaW5nLCBzdHViU2VydmVyQmFzZVVybD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHN0dWJSZXNwb25zZSA9IHJlcXVpcmUocGF0aC5yZXNvbHZlKHN0dWJQYXRoKSlcbiAgICByZXR1cm4gc2V0RXhwZWN0YXRpb25Kc29uKHN0dWJSZXNwb25zZSwgc3R1YlNlcnZlckJhc2VVcmwpXG59XG5cbmNvbnN0IHNldEV4cGVjdGF0aW9uSnNvbiA9IChzdHViUmVzcG9uc2U6IGFueSwgc3R1YlNlcnZlckJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBzdHViU2VydmVyQmFzZVVybCA9IHN0dWJTZXJ2ZXJCYXNlVXJsIHx8ICdodHRwOi8vbG9jYWxob3N0OjkwMDAnXG5cbiAgICBsb2dnZXIuaW5mbyhgU2V0IEV4cGVjdGF0aW9uczogU3R1YiB1cmwgaXMgJHtzdHViU2VydmVyQmFzZVVybH1gKVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgYXhpb3NcbiAgICAgICAgICAgIC5wb3N0KGAke3N0dWJTZXJ2ZXJCYXNlVXJsfS9fc3BlY21hdGljL2V4cGVjdGF0aW9uc2AsIHN0dWJSZXNwb25zZSlcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFNldCBFeHBlY3RhdGlvbnM6ICR7cmVzcG9uc2UuZGF0YX1gKVxuICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdTZXQgRXhwZWN0YXRpb25zOiBGaW5pc2hlZCcpXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlID0gYFNldCBFeHBlY3RhdGlvbnM6IEZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWBcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlKVxuICAgICAgICAgICAgICAgIHJlamVjdChzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UpXG4gICAgICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHByaW50SmFyVmVyc2lvbiA9ICgpID0+IHtcbiAgICBjb25zdCBjbWQgPSBgLS12ZXJzaW9uYFxuICAgIGxvZ2dlci5pbmZvKCdQcmludCBKYXIgVmVyc2lvbjogUnVubmluZycpXG4gICAgbG9nZ2VyLmRlYnVnKGBQcmludCBKYXIgVmVyc2lvbjogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgY2FsbENvcmUoXG4gICAgICAgIGNtZCxcbiAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSBsb2dnZXIuZXJyb3IoYFByaW50IEphciBWZXJzaW9uOiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKVxuICAgICAgICB9LFxuICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikgbG9nZ2VyLmVycm9yKGBQcmludCBKYXIgVmVyc2lvbjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICBlbHNlIGNvbnNvbGUubG9nKGAke21lc3NhZ2V9YClcbiAgICAgICAgfVxuICAgIClcbn1cblxuY29uc3Qgc3RhcnRBcGlDb3ZlcmFnZVNlcnZlciA9IChleHByZXNzQXBwOiBhbnkpOiBQcm9taXNlPGh0dHAuU2VydmVyPiA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBSZWdpc3RlcmluZyBBUEkgZW5kcG9pbnQgZm9yIGNvdmVyYWdlYClcbiAgICBsZXQgYXBwID0gaHR0cC5jcmVhdGVTZXJ2ZXIoKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMud3JpdGVIZWFkKDIwMCwgeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG4gICAgICAgIGNvbnN0IGVuZFBvaW50cyA9IEpTT04uc3RyaW5naWZ5KGV4dHJhY3RFbmRQb2ludHMoZXhwcmVzc0FwcCkpXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRW5kcG9pbnRzOiAke2VuZFBvaW50c31gKVxuICAgICAgICByZXMuZW5kKGVuZFBvaW50cylcbiAgICB9KVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxodHRwLlNlcnZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBhcHAub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc3RhcnRpbmcgZW5kIHBvaW50cyBzZXJ2ZXIgZm9yIGFwaSBjb3ZlcmFnZScsIGVycilcbiAgICAgICAgICAgIHJlamVjdCgnRXJyb3Igd2hpbGUgc3RhcnRpbmcgZW5kIHBvaW50cyBzZXJ2ZXIgZm9yIGFwaSBjb3ZlcmFnZScpXG4gICAgICAgIH0pXG4gICAgICAgIGFwcC5saXN0ZW4oeyBob3N0OiAnMTI3LjAuMC4xJywgcG9ydDogMCB9LCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gYXBwLmFkZHJlc3MoKSBhcyBBZGRyZXNzSW5mbyB8IG51bGxcbiAgICAgICAgICAgIHByb2Nlc3MuZW52WydlbmRwb2ludHNBUEknXSA9IGBodHRwOi8vJHthZGRyZXNzPy5hZGRyZXNzfToke2FkZHJlc3M/LnBvcnR9YFxuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYEVuZHBvaW50cyBBUEkgcmVnaXN0ZXJlZCBhdCAke3Byb2Nlc3MuZW52WydlbmRwb2ludHNBUEknXX1gKVxuICAgICAgICAgICAgcmVzb2x2ZShhcHApXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgcGFyc2VKdW5pdFhNTCA9ICgpID0+IHtcbiAgICBjb25zdCByZXBvcnRQYXRoID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0L1RFU1QtanVuaXQtanVwaXRlci54bWwnKVxuICAgIHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHJlcG9ydFBhdGgpXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFhNTFBhcnNlcigpXG4gICAgdmFyIHJlc3VsdFhtbCA9IHBhcnNlci5wYXJzZShkYXRhKVxuICAgIHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UgPSBBcnJheS5pc0FycmF5KHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UpID8gcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZSA6IFtyZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlXVxuICAgIHJldHVybiByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlXG59XG5cbmNvbnN0IGxpc3RFbmRQb2ludHMgPSAoZXhwcmVzc0FwcDogYW55KTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0+IHtcbiAgICBjb25zdCBkZXRhaWxzID0gbGlzdEV4cHJlc3NFbmRwb2ludHMoZXhwcmVzc0FwcClcbiAgICBsZXQgZW5kUG9pbnRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fVxuICAgIGRldGFpbHMubWFwKGFwaURldGFpbCA9PiB7XG4gICAgICAgIGVuZFBvaW50c1thcGlEZXRhaWwucGF0aF0gPSBhcGlEZXRhaWwubWV0aG9kc1xuICAgIH0pXG4gICAgZGVsZXRlIGVuZFBvaW50c1snKiddXG4gICAgcmV0dXJuIGVuZFBvaW50c1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RW5kUG9pbnRzKGV4cHJlc3NBcHA6IGFueSkge1xuICAgIGxldCBlbmRQb2ludHMgPSBsaXN0RW5kUG9pbnRzKGV4cHJlc3NBcHApXG4gICAgbGV0IHNwcmluZ0FjdHVhdG9yUGF5bG9hZCA9IHtcbiAgICAgICAgY29udGV4dHM6IHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlclNlcnZsZXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyU2VydmxldDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfVxuICAgIE9iamVjdC5rZXlzKGVuZFBvaW50cylcbiAgICAgICAgLnNvcnQoKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgc3ByaW5nQWN0dWF0b3JQYXlsb2FkLmNvbnRleHRzLmFwcGxpY2F0aW9uLm1hcHBpbmdzLmRpc3BhdGNoZXJTZXJ2bGV0cy5kaXNwYXRjaGVyU2VydmxldC5wdXNoKHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kczogZW5kUG9pbnRzW3BhdGhdLnNvcnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5zOiBbY29udmVydEVuZHBvaW50VG9TcHJpbmdTeW50YXgocGF0aCldLm1hcChyZW1vdmVSZWdleEZyb21QYXRoKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IGFzIG5ldmVyKVxuICAgICAgICB9KVxuICAgIHJldHVybiBzcHJpbmdBY3R1YXRvclBheWxvYWRcbn1cblxuY29uc3QgY29udmVydEVuZHBvaW50VG9TcHJpbmdTeW50YXggPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvOihbXi9dKykvZywgJ3skMX0nKS5yZXBsYWNlKC9cXFxcL2csICcnKVxufVxuXG5jb25zdCByZW1vdmVSZWdleEZyb21QYXRoID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcKFteKCldKlxcKS9nLCAnJylcbn1cblxuZXhwb3J0IHsgc3RhcnRTdHViLCBzdG9wU3R1YiwgdGVzdCwgdGVzdFdpdGhBcGlDb3ZlcmFnZSwgc2V0RXhwZWN0YXRpb25zLCBzZXRFeHBlY3RhdGlvbkpzb24sIHByaW50SmFyVmVyc2lvbiwgc2hvd1Rlc3RSZXN1bHRzIH1cbmV4cG9ydCB7IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIgfVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxjQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxHQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxxQkFBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sS0FBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQVEsY0FBQSxHQUFBUixPQUFBO0FBQWtELFNBQUFELHVCQUFBVSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLG9CQUFBLGtCQVRsRCxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQVIsQ0FBQSxTQUFBUyxDQUFBLEVBQUFULENBQUEsT0FBQVUsQ0FBQSxHQUFBQyxNQUFBLENBQUFKLFNBQUEsRUFBQUssQ0FBQSxHQUFBRixDQUFBLENBQUFHLGNBQUEsRUFBQVYsQ0FBQSxHQUFBUSxNQUFBLENBQUFHLGNBQUEsY0FBQUwsQ0FBQSxFQUFBVCxDQUFBLEVBQUFVLENBQUEsSUFBQUQsQ0FBQSxDQUFBVCxDQUFBLElBQUFVLENBQUEsQ0FBQUssS0FBQSxLQUFBQyxDQUFBLHdCQUFBWixNQUFBLEdBQUFBLE1BQUEsT0FBQWEsQ0FBQSxHQUFBRCxDQUFBLENBQUFYLFFBQUEsa0JBQUFhLENBQUEsR0FBQUYsQ0FBQSxDQUFBRyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFKLENBQUEsQ0FBQUssV0FBQSw4QkFBQUMsT0FBQWIsQ0FBQSxFQUFBVCxDQUFBLEVBQUFVLENBQUEsV0FBQUMsTUFBQSxDQUFBRyxjQUFBLENBQUFMLENBQUEsRUFBQVQsQ0FBQSxJQUFBZSxLQUFBLEVBQUFMLENBQUEsRUFBQWEsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsU0FBQWhCLENBQUEsQ0FBQVQsQ0FBQSxXQUFBc0IsTUFBQSxtQkFBQWIsQ0FBQSxJQUFBYSxNQUFBLFlBQUFBLE9BQUFiLENBQUEsRUFBQVQsQ0FBQSxFQUFBVSxDQUFBLFdBQUFELENBQUEsQ0FBQVQsQ0FBQSxJQUFBVSxDQUFBLGdCQUFBZ0IsS0FBQWpCLENBQUEsRUFBQVQsQ0FBQSxFQUFBVSxDQUFBLEVBQUFFLENBQUEsUUFBQUksQ0FBQSxHQUFBaEIsQ0FBQSxJQUFBQSxDQUFBLENBQUFPLFNBQUEsWUFBQW9CLFNBQUEsR0FBQTNCLENBQUEsR0FBQTJCLFNBQUEsRUFBQVYsQ0FBQSxHQUFBTixNQUFBLENBQUFpQixNQUFBLENBQUFaLENBQUEsQ0FBQVQsU0FBQSxHQUFBVyxDQUFBLE9BQUFXLE9BQUEsQ0FBQWpCLENBQUEsZ0JBQUFULENBQUEsQ0FBQWMsQ0FBQSxlQUFBRixLQUFBLEVBQUFlLGdCQUFBLENBQUFyQixDQUFBLEVBQUFDLENBQUEsRUFBQVEsQ0FBQSxNQUFBRCxDQUFBLGFBQUFjLFNBQUF0QixDQUFBLEVBQUFULENBQUEsRUFBQVUsQ0FBQSxtQkFBQXNCLElBQUEsWUFBQUMsR0FBQSxFQUFBeEIsQ0FBQSxDQUFBeUIsSUFBQSxDQUFBbEMsQ0FBQSxFQUFBVSxDQUFBLGNBQUFELENBQUEsYUFBQXVCLElBQUEsV0FBQUMsR0FBQSxFQUFBeEIsQ0FBQSxRQUFBVCxDQUFBLENBQUEwQixJQUFBLEdBQUFBLElBQUEsTUFBQVMsQ0FBQSxxQkFBQUMsQ0FBQSxxQkFBQUMsQ0FBQSxnQkFBQUMsQ0FBQSxnQkFBQUMsQ0FBQSxnQkFBQVosVUFBQSxjQUFBYSxrQkFBQSxjQUFBQywyQkFBQSxTQUFBQyxDQUFBLE9BQUFwQixNQUFBLENBQUFvQixDQUFBLEVBQUF6QixDQUFBLHFDQUFBMEIsQ0FBQSxHQUFBaEMsTUFBQSxDQUFBaUMsY0FBQSxFQUFBQyxDQUFBLEdBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBQSxDQUFBLENBQUFHLE1BQUEsUUFBQUQsQ0FBQSxJQUFBQSxDQUFBLEtBQUFuQyxDQUFBLElBQUFFLENBQUEsQ0FBQXNCLElBQUEsQ0FBQVcsQ0FBQSxFQUFBNUIsQ0FBQSxNQUFBeUIsQ0FBQSxHQUFBRyxDQUFBLE9BQUFFLENBQUEsR0FBQU4sMEJBQUEsQ0FBQWxDLFNBQUEsR0FBQW9CLFNBQUEsQ0FBQXBCLFNBQUEsR0FBQUksTUFBQSxDQUFBaUIsTUFBQSxDQUFBYyxDQUFBLFlBQUFNLHNCQUFBdkMsQ0FBQSxnQ0FBQXdDLE9BQUEsV0FBQWpELENBQUEsSUFBQXNCLE1BQUEsQ0FBQWIsQ0FBQSxFQUFBVCxDQUFBLFlBQUFTLENBQUEsZ0JBQUF5QyxPQUFBLENBQUFsRCxDQUFBLEVBQUFTLENBQUEsc0JBQUEwQyxjQUFBMUMsQ0FBQSxFQUFBVCxDQUFBLGFBQUFvRCxPQUFBMUMsQ0FBQSxFQUFBUCxDQUFBLEVBQUFhLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFhLFFBQUEsQ0FBQXRCLENBQUEsQ0FBQUMsQ0FBQSxHQUFBRCxDQUFBLEVBQUFOLENBQUEsbUJBQUFlLENBQUEsQ0FBQWMsSUFBQSxRQUFBWixDQUFBLEdBQUFGLENBQUEsQ0FBQWUsR0FBQSxFQUFBRSxDQUFBLEdBQUFmLENBQUEsQ0FBQUwsS0FBQSxTQUFBb0IsQ0FBQSxnQkFBQWpDLE9BQUEsQ0FBQWlDLENBQUEsS0FBQXZCLENBQUEsQ0FBQXNCLElBQUEsQ0FBQUMsQ0FBQSxlQUFBbkMsQ0FBQSxDQUFBcUQsT0FBQSxDQUFBbEIsQ0FBQSxDQUFBbUIsT0FBQSxFQUFBQyxJQUFBLFdBQUE5QyxDQUFBLElBQUEyQyxNQUFBLFNBQUEzQyxDQUFBLEVBQUFPLENBQUEsRUFBQUMsQ0FBQSxnQkFBQVIsQ0FBQSxJQUFBMkMsTUFBQSxVQUFBM0MsQ0FBQSxFQUFBTyxDQUFBLEVBQUFDLENBQUEsUUFBQWpCLENBQUEsQ0FBQXFELE9BQUEsQ0FBQWxCLENBQUEsRUFBQW9CLElBQUEsV0FBQTlDLENBQUEsSUFBQVcsQ0FBQSxDQUFBTCxLQUFBLEdBQUFOLENBQUEsRUFBQU8sQ0FBQSxDQUFBSSxDQUFBLGdCQUFBWCxDQUFBLFdBQUEyQyxNQUFBLFVBQUEzQyxDQUFBLEVBQUFPLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLENBQUFDLENBQUEsQ0FBQWUsR0FBQSxTQUFBdkIsQ0FBQSxFQUFBUCxDQUFBLG9CQUFBWSxLQUFBLFdBQUFBLE1BQUFOLENBQUEsRUFBQUcsQ0FBQSxhQUFBNEMsMkJBQUEsZUFBQXhELENBQUEsV0FBQUEsQ0FBQSxFQUFBVSxDQUFBLElBQUEwQyxNQUFBLENBQUEzQyxDQUFBLEVBQUFHLENBQUEsRUFBQVosQ0FBQSxFQUFBVSxDQUFBLGdCQUFBQSxDQUFBLEdBQUFBLENBQUEsR0FBQUEsQ0FBQSxDQUFBNkMsSUFBQSxDQUFBQywwQkFBQSxFQUFBQSwwQkFBQSxJQUFBQSwwQkFBQSxxQkFBQTFCLGlCQUFBOUIsQ0FBQSxFQUFBVSxDQUFBLEVBQUFFLENBQUEsUUFBQVQsQ0FBQSxHQUFBZ0MsQ0FBQSxtQkFBQW5CLENBQUEsRUFBQUMsQ0FBQSxRQUFBZCxDQUFBLEtBQUFrQyxDQUFBLFFBQUFvQixLQUFBLHNDQUFBdEQsQ0FBQSxLQUFBbUMsQ0FBQSxvQkFBQXRCLENBQUEsUUFBQUMsQ0FBQSxXQUFBRixLQUFBLEVBQUFOLENBQUEsRUFBQWlELElBQUEsZUFBQTlDLENBQUEsQ0FBQStDLE1BQUEsR0FBQTNDLENBQUEsRUFBQUosQ0FBQSxDQUFBcUIsR0FBQSxHQUFBaEIsQ0FBQSxVQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQWdELFFBQUEsTUFBQTFDLENBQUEsUUFBQUUsQ0FBQSxHQUFBeUMsbUJBQUEsQ0FBQTNDLENBQUEsRUFBQU4sQ0FBQSxPQUFBUSxDQUFBLFFBQUFBLENBQUEsS0FBQW1CLENBQUEsbUJBQUFuQixDQUFBLHFCQUFBUixDQUFBLENBQUErQyxNQUFBLEVBQUEvQyxDQUFBLENBQUFrRCxJQUFBLEdBQUFsRCxDQUFBLENBQUFtRCxLQUFBLEdBQUFuRCxDQUFBLENBQUFxQixHQUFBLHNCQUFBckIsQ0FBQSxDQUFBK0MsTUFBQSxRQUFBeEQsQ0FBQSxLQUFBZ0MsQ0FBQSxRQUFBaEMsQ0FBQSxHQUFBbUMsQ0FBQSxFQUFBMUIsQ0FBQSxDQUFBcUIsR0FBQSxFQUFBckIsQ0FBQSxDQUFBb0QsaUJBQUEsQ0FBQXBELENBQUEsQ0FBQXFCLEdBQUEsdUJBQUFyQixDQUFBLENBQUErQyxNQUFBLElBQUEvQyxDQUFBLENBQUFxRCxNQUFBLFdBQUFyRCxDQUFBLENBQUFxQixHQUFBLEdBQUE5QixDQUFBLEdBQUFrQyxDQUFBLE1BQUFLLENBQUEsR0FBQVgsUUFBQSxDQUFBL0IsQ0FBQSxFQUFBVSxDQUFBLEVBQUFFLENBQUEsb0JBQUE4QixDQUFBLENBQUFWLElBQUEsUUFBQTdCLENBQUEsR0FBQVMsQ0FBQSxDQUFBOEMsSUFBQSxHQUFBcEIsQ0FBQSxHQUFBRixDQUFBLEVBQUFNLENBQUEsQ0FBQVQsR0FBQSxLQUFBTSxDQUFBLHFCQUFBeEIsS0FBQSxFQUFBMkIsQ0FBQSxDQUFBVCxHQUFBLEVBQUF5QixJQUFBLEVBQUE5QyxDQUFBLENBQUE4QyxJQUFBLGtCQUFBaEIsQ0FBQSxDQUFBVixJQUFBLEtBQUE3QixDQUFBLEdBQUFtQyxDQUFBLEVBQUExQixDQUFBLENBQUErQyxNQUFBLFlBQUEvQyxDQUFBLENBQUFxQixHQUFBLEdBQUFTLENBQUEsQ0FBQVQsR0FBQSxtQkFBQTRCLG9CQUFBN0QsQ0FBQSxFQUFBVSxDQUFBLFFBQUFFLENBQUEsR0FBQUYsQ0FBQSxDQUFBaUQsTUFBQSxFQUFBeEQsQ0FBQSxHQUFBSCxDQUFBLENBQUFLLFFBQUEsQ0FBQU8sQ0FBQSxPQUFBVCxDQUFBLEtBQUFNLENBQUEsU0FBQUMsQ0FBQSxDQUFBa0QsUUFBQSxxQkFBQWhELENBQUEsSUFBQVosQ0FBQSxDQUFBSyxRQUFBLGVBQUFLLENBQUEsQ0FBQWlELE1BQUEsYUFBQWpELENBQUEsQ0FBQXVCLEdBQUEsR0FBQXhCLENBQUEsRUFBQW9ELG1CQUFBLENBQUE3RCxDQUFBLEVBQUFVLENBQUEsZUFBQUEsQ0FBQSxDQUFBaUQsTUFBQSxrQkFBQS9DLENBQUEsS0FBQUYsQ0FBQSxDQUFBaUQsTUFBQSxZQUFBakQsQ0FBQSxDQUFBdUIsR0FBQSxPQUFBaUMsU0FBQSx1Q0FBQXRELENBQUEsaUJBQUEyQixDQUFBLE1BQUF2QixDQUFBLEdBQUFlLFFBQUEsQ0FBQTVCLENBQUEsRUFBQUgsQ0FBQSxDQUFBSyxRQUFBLEVBQUFLLENBQUEsQ0FBQXVCLEdBQUEsbUJBQUFqQixDQUFBLENBQUFnQixJQUFBLFNBQUF0QixDQUFBLENBQUFpRCxNQUFBLFlBQUFqRCxDQUFBLENBQUF1QixHQUFBLEdBQUFqQixDQUFBLENBQUFpQixHQUFBLEVBQUF2QixDQUFBLENBQUFrRCxRQUFBLFNBQUFyQixDQUFBLE1BQUF0QixDQUFBLEdBQUFELENBQUEsQ0FBQWlCLEdBQUEsU0FBQWhCLENBQUEsR0FBQUEsQ0FBQSxDQUFBeUMsSUFBQSxJQUFBaEQsQ0FBQSxDQUFBVixDQUFBLENBQUFtRSxVQUFBLElBQUFsRCxDQUFBLENBQUFGLEtBQUEsRUFBQUwsQ0FBQSxDQUFBMEQsSUFBQSxHQUFBcEUsQ0FBQSxDQUFBcUUsT0FBQSxlQUFBM0QsQ0FBQSxDQUFBaUQsTUFBQSxLQUFBakQsQ0FBQSxDQUFBaUQsTUFBQSxXQUFBakQsQ0FBQSxDQUFBdUIsR0FBQSxHQUFBeEIsQ0FBQSxHQUFBQyxDQUFBLENBQUFrRCxRQUFBLFNBQUFyQixDQUFBLElBQUF0QixDQUFBLElBQUFQLENBQUEsQ0FBQWlELE1BQUEsWUFBQWpELENBQUEsQ0FBQXVCLEdBQUEsT0FBQWlDLFNBQUEsc0NBQUF4RCxDQUFBLENBQUFrRCxRQUFBLFNBQUFyQixDQUFBLGNBQUErQixhQUFBN0QsQ0FBQSxRQUFBVCxDQUFBLEtBQUF1RSxNQUFBLEVBQUE5RCxDQUFBLFlBQUFBLENBQUEsS0FBQVQsQ0FBQSxDQUFBd0UsUUFBQSxHQUFBL0QsQ0FBQSxXQUFBQSxDQUFBLEtBQUFULENBQUEsQ0FBQXlFLFVBQUEsR0FBQWhFLENBQUEsS0FBQVQsQ0FBQSxDQUFBMEUsUUFBQSxHQUFBakUsQ0FBQSxXQUFBa0UsVUFBQSxDQUFBQyxJQUFBLENBQUE1RSxDQUFBLGNBQUE2RSxjQUFBcEUsQ0FBQSxRQUFBVCxDQUFBLEdBQUFTLENBQUEsQ0FBQXFFLFVBQUEsUUFBQTlFLENBQUEsQ0FBQWdDLElBQUEsb0JBQUFoQyxDQUFBLENBQUFpQyxHQUFBLEVBQUF4QixDQUFBLENBQUFxRSxVQUFBLEdBQUE5RSxDQUFBLGFBQUE2QixRQUFBcEIsQ0FBQSxTQUFBa0UsVUFBQSxNQUFBSixNQUFBLGFBQUE5RCxDQUFBLENBQUF3QyxPQUFBLENBQUFxQixZQUFBLGNBQUFTLEtBQUEsaUJBQUFqQyxPQUFBOUMsQ0FBQSxRQUFBQSxDQUFBLFdBQUFBLENBQUEsUUFBQVUsQ0FBQSxHQUFBVixDQUFBLENBQUFpQixDQUFBLE9BQUFQLENBQUEsU0FBQUEsQ0FBQSxDQUFBd0IsSUFBQSxDQUFBbEMsQ0FBQSw0QkFBQUEsQ0FBQSxDQUFBb0UsSUFBQSxTQUFBcEUsQ0FBQSxPQUFBZ0YsS0FBQSxDQUFBaEYsQ0FBQSxDQUFBaUYsTUFBQSxTQUFBOUUsQ0FBQSxPQUFBYSxDQUFBLFlBQUFvRCxLQUFBLGFBQUFqRSxDQUFBLEdBQUFILENBQUEsQ0FBQWlGLE1BQUEsT0FBQXJFLENBQUEsQ0FBQXNCLElBQUEsQ0FBQWxDLENBQUEsRUFBQUcsQ0FBQSxVQUFBaUUsSUFBQSxDQUFBckQsS0FBQSxHQUFBZixDQUFBLENBQUFHLENBQUEsR0FBQWlFLElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFNBQUFBLElBQUEsQ0FBQXJELEtBQUEsR0FBQU4sQ0FBQSxFQUFBMkQsSUFBQSxDQUFBVixJQUFBLE9BQUFVLElBQUEsWUFBQXBELENBQUEsQ0FBQW9ELElBQUEsR0FBQXBELENBQUEsZ0JBQUFrRCxTQUFBLENBQUFoRSxPQUFBLENBQUFGLENBQUEsa0NBQUF3QyxpQkFBQSxDQUFBakMsU0FBQSxHQUFBa0MsMEJBQUEsRUFBQXRDLENBQUEsQ0FBQTRDLENBQUEsbUJBQUFoQyxLQUFBLEVBQUEwQiwwQkFBQSxFQUFBakIsWUFBQSxTQUFBckIsQ0FBQSxDQUFBc0MsMEJBQUEsbUJBQUExQixLQUFBLEVBQUF5QixpQkFBQSxFQUFBaEIsWUFBQSxTQUFBZ0IsaUJBQUEsQ0FBQTBDLFdBQUEsR0FBQTVELE1BQUEsQ0FBQW1CLDBCQUFBLEVBQUFyQixDQUFBLHdCQUFBcEIsQ0FBQSxDQUFBbUYsbUJBQUEsYUFBQTFFLENBQUEsUUFBQVQsQ0FBQSx3QkFBQVMsQ0FBQSxJQUFBQSxDQUFBLENBQUFILFdBQUEsV0FBQU4sQ0FBQSxLQUFBQSxDQUFBLEtBQUF3QyxpQkFBQSw2QkFBQXhDLENBQUEsQ0FBQWtGLFdBQUEsSUFBQWxGLENBQUEsQ0FBQW9GLElBQUEsT0FBQXBGLENBQUEsQ0FBQXFGLElBQUEsYUFBQTVFLENBQUEsV0FBQUUsTUFBQSxDQUFBMkUsY0FBQSxHQUFBM0UsTUFBQSxDQUFBMkUsY0FBQSxDQUFBN0UsQ0FBQSxFQUFBZ0MsMEJBQUEsS0FBQWhDLENBQUEsQ0FBQThFLFNBQUEsR0FBQTlDLDBCQUFBLEVBQUFuQixNQUFBLENBQUFiLENBQUEsRUFBQVcsQ0FBQSx5QkFBQVgsQ0FBQSxDQUFBRixTQUFBLEdBQUFJLE1BQUEsQ0FBQWlCLE1BQUEsQ0FBQW1CLENBQUEsR0FBQXRDLENBQUEsS0FBQVQsQ0FBQSxDQUFBd0YsS0FBQSxhQUFBL0UsQ0FBQSxhQUFBNkMsT0FBQSxFQUFBN0MsQ0FBQSxPQUFBdUMscUJBQUEsQ0FBQUcsYUFBQSxDQUFBNUMsU0FBQSxHQUFBZSxNQUFBLENBQUE2QixhQUFBLENBQUE1QyxTQUFBLEVBQUFXLENBQUEsaUNBQUFsQixDQUFBLENBQUFtRCxhQUFBLEdBQUFBLGFBQUEsRUFBQW5ELENBQUEsQ0FBQXlGLEtBQUEsYUFBQWhGLENBQUEsRUFBQUMsQ0FBQSxFQUFBRSxDQUFBLEVBQUFULENBQUEsRUFBQWEsQ0FBQSxlQUFBQSxDQUFBLEtBQUFBLENBQUEsR0FBQTBFLE9BQUEsT0FBQXpFLENBQUEsT0FBQWtDLGFBQUEsQ0FBQXpCLElBQUEsQ0FBQWpCLENBQUEsRUFBQUMsQ0FBQSxFQUFBRSxDQUFBLEVBQUFULENBQUEsR0FBQWEsQ0FBQSxVQUFBaEIsQ0FBQSxDQUFBbUYsbUJBQUEsQ0FBQXpFLENBQUEsSUFBQU8sQ0FBQSxHQUFBQSxDQUFBLENBQUFtRCxJQUFBLEdBQUFiLElBQUEsV0FBQTlDLENBQUEsV0FBQUEsQ0FBQSxDQUFBaUQsSUFBQSxHQUFBakQsQ0FBQSxDQUFBTSxLQUFBLEdBQUFFLENBQUEsQ0FBQW1ELElBQUEsV0FBQXBCLHFCQUFBLENBQUFELENBQUEsR0FBQXpCLE1BQUEsQ0FBQXlCLENBQUEsRUFBQTNCLENBQUEsZ0JBQUFFLE1BQUEsQ0FBQXlCLENBQUEsRUFBQTlCLENBQUEsaUNBQUFLLE1BQUEsQ0FBQXlCLENBQUEsNkRBQUEvQyxDQUFBLENBQUEyRixJQUFBLGFBQUFsRixDQUFBLFFBQUFULENBQUEsR0FBQVcsTUFBQSxDQUFBRixDQUFBLEdBQUFDLENBQUEsZ0JBQUFFLENBQUEsSUFBQVosQ0FBQSxFQUFBVSxDQUFBLENBQUFrRSxJQUFBLENBQUFoRSxDQUFBLFVBQUFGLENBQUEsQ0FBQWtGLE9BQUEsYUFBQXhCLEtBQUEsV0FBQTFELENBQUEsQ0FBQXVFLE1BQUEsU0FBQXhFLENBQUEsR0FBQUMsQ0FBQSxDQUFBbUYsR0FBQSxRQUFBcEYsQ0FBQSxJQUFBVCxDQUFBLFNBQUFvRSxJQUFBLENBQUFyRCxLQUFBLEdBQUFOLENBQUEsRUFBQTJELElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFdBQUFBLElBQUEsQ0FBQVYsSUFBQSxPQUFBVSxJQUFBLFFBQUFwRSxDQUFBLENBQUE4QyxNQUFBLEdBQUFBLE1BQUEsRUFBQWpCLE9BQUEsQ0FBQXRCLFNBQUEsS0FBQUQsV0FBQSxFQUFBdUIsT0FBQSxFQUFBa0QsS0FBQSxXQUFBQSxNQUFBL0UsQ0FBQSxhQUFBOEYsSUFBQSxXQUFBMUIsSUFBQSxXQUFBTixJQUFBLFFBQUFDLEtBQUEsR0FBQXRELENBQUEsT0FBQWlELElBQUEsWUFBQUUsUUFBQSxjQUFBRCxNQUFBLGdCQUFBMUIsR0FBQSxHQUFBeEIsQ0FBQSxPQUFBa0UsVUFBQSxDQUFBMUIsT0FBQSxDQUFBNEIsYUFBQSxJQUFBN0UsQ0FBQSxXQUFBVSxDQUFBLGtCQUFBQSxDQUFBLENBQUFxRixNQUFBLE9BQUFuRixDQUFBLENBQUFzQixJQUFBLE9BQUF4QixDQUFBLE1BQUFzRSxLQUFBLEVBQUF0RSxDQUFBLENBQUFzRixLQUFBLGNBQUF0RixDQUFBLElBQUFELENBQUEsTUFBQXdGLElBQUEsV0FBQUEsS0FBQSxTQUFBdkMsSUFBQSxXQUFBakQsQ0FBQSxRQUFBa0UsVUFBQSxJQUFBRyxVQUFBLGtCQUFBckUsQ0FBQSxDQUFBdUIsSUFBQSxRQUFBdkIsQ0FBQSxDQUFBd0IsR0FBQSxjQUFBaUUsSUFBQSxLQUFBbEMsaUJBQUEsV0FBQUEsa0JBQUFoRSxDQUFBLGFBQUEwRCxJQUFBLFFBQUExRCxDQUFBLE1BQUFVLENBQUEsa0JBQUF5RixPQUFBdkYsQ0FBQSxFQUFBVCxDQUFBLFdBQUFjLENBQUEsQ0FBQWUsSUFBQSxZQUFBZixDQUFBLENBQUFnQixHQUFBLEdBQUFqQyxDQUFBLEVBQUFVLENBQUEsQ0FBQTBELElBQUEsR0FBQXhELENBQUEsRUFBQVQsQ0FBQSxLQUFBTyxDQUFBLENBQUFpRCxNQUFBLFdBQUFqRCxDQUFBLENBQUF1QixHQUFBLEdBQUF4QixDQUFBLEtBQUFOLENBQUEsYUFBQUEsQ0FBQSxRQUFBd0UsVUFBQSxDQUFBTSxNQUFBLE1BQUE5RSxDQUFBLFNBQUFBLENBQUEsUUFBQWEsQ0FBQSxRQUFBMkQsVUFBQSxDQUFBeEUsQ0FBQSxHQUFBYyxDQUFBLEdBQUFELENBQUEsQ0FBQThELFVBQUEsaUJBQUE5RCxDQUFBLENBQUF1RCxNQUFBLFNBQUE0QixNQUFBLGFBQUFuRixDQUFBLENBQUF1RCxNQUFBLFNBQUF1QixJQUFBLFFBQUE1RSxDQUFBLEdBQUFOLENBQUEsQ0FBQXNCLElBQUEsQ0FBQWxCLENBQUEsZUFBQUksQ0FBQSxHQUFBUixDQUFBLENBQUFzQixJQUFBLENBQUFsQixDQUFBLHFCQUFBRSxDQUFBLElBQUFFLENBQUEsYUFBQTBFLElBQUEsR0FBQTlFLENBQUEsQ0FBQXdELFFBQUEsU0FBQTJCLE1BQUEsQ0FBQW5GLENBQUEsQ0FBQXdELFFBQUEsZ0JBQUFzQixJQUFBLEdBQUE5RSxDQUFBLENBQUF5RCxVQUFBLFNBQUEwQixNQUFBLENBQUFuRixDQUFBLENBQUF5RCxVQUFBLGNBQUF2RCxDQUFBLGFBQUE0RSxJQUFBLEdBQUE5RSxDQUFBLENBQUF3RCxRQUFBLFNBQUEyQixNQUFBLENBQUFuRixDQUFBLENBQUF3RCxRQUFBLHFCQUFBcEQsQ0FBQSxRQUFBcUMsS0FBQSxxREFBQXFDLElBQUEsR0FBQTlFLENBQUEsQ0FBQXlELFVBQUEsU0FBQTBCLE1BQUEsQ0FBQW5GLENBQUEsQ0FBQXlELFVBQUEsWUFBQVIsTUFBQSxXQUFBQSxPQUFBeEQsQ0FBQSxFQUFBVCxDQUFBLGFBQUFVLENBQUEsUUFBQWlFLFVBQUEsQ0FBQU0sTUFBQSxNQUFBdkUsQ0FBQSxTQUFBQSxDQUFBLFFBQUFQLENBQUEsUUFBQXdFLFVBQUEsQ0FBQWpFLENBQUEsT0FBQVAsQ0FBQSxDQUFBb0UsTUFBQSxTQUFBdUIsSUFBQSxJQUFBbEYsQ0FBQSxDQUFBc0IsSUFBQSxDQUFBL0IsQ0FBQSx3QkFBQTJGLElBQUEsR0FBQTNGLENBQUEsQ0FBQXNFLFVBQUEsUUFBQXpELENBQUEsR0FBQWIsQ0FBQSxhQUFBYSxDQUFBLGlCQUFBUCxDQUFBLG1CQUFBQSxDQUFBLEtBQUFPLENBQUEsQ0FBQXVELE1BQUEsSUFBQXZFLENBQUEsSUFBQUEsQ0FBQSxJQUFBZ0IsQ0FBQSxDQUFBeUQsVUFBQSxLQUFBekQsQ0FBQSxjQUFBQyxDQUFBLEdBQUFELENBQUEsR0FBQUEsQ0FBQSxDQUFBOEQsVUFBQSxjQUFBN0QsQ0FBQSxDQUFBZSxJQUFBLEdBQUF2QixDQUFBLEVBQUFRLENBQUEsQ0FBQWdCLEdBQUEsR0FBQWpDLENBQUEsRUFBQWdCLENBQUEsU0FBQTJDLE1BQUEsZ0JBQUFTLElBQUEsR0FBQXBELENBQUEsQ0FBQXlELFVBQUEsRUFBQWxDLENBQUEsU0FBQTZELFFBQUEsQ0FBQW5GLENBQUEsTUFBQW1GLFFBQUEsV0FBQUEsU0FBQTNGLENBQUEsRUFBQVQsQ0FBQSxvQkFBQVMsQ0FBQSxDQUFBdUIsSUFBQSxRQUFBdkIsQ0FBQSxDQUFBd0IsR0FBQSxxQkFBQXhCLENBQUEsQ0FBQXVCLElBQUEsbUJBQUF2QixDQUFBLENBQUF1QixJQUFBLFFBQUFvQyxJQUFBLEdBQUEzRCxDQUFBLENBQUF3QixHQUFBLGdCQUFBeEIsQ0FBQSxDQUFBdUIsSUFBQSxTQUFBa0UsSUFBQSxRQUFBakUsR0FBQSxHQUFBeEIsQ0FBQSxDQUFBd0IsR0FBQSxPQUFBMEIsTUFBQSxrQkFBQVMsSUFBQSx5QkFBQTNELENBQUEsQ0FBQXVCLElBQUEsSUFBQWhDLENBQUEsVUFBQW9FLElBQUEsR0FBQXBFLENBQUEsR0FBQXVDLENBQUEsS0FBQThELE1BQUEsV0FBQUEsT0FBQTVGLENBQUEsYUFBQVQsQ0FBQSxRQUFBMkUsVUFBQSxDQUFBTSxNQUFBLE1BQUFqRixDQUFBLFNBQUFBLENBQUEsUUFBQVUsQ0FBQSxRQUFBaUUsVUFBQSxDQUFBM0UsQ0FBQSxPQUFBVSxDQUFBLENBQUErRCxVQUFBLEtBQUFoRSxDQUFBLGNBQUEyRixRQUFBLENBQUExRixDQUFBLENBQUFvRSxVQUFBLEVBQUFwRSxDQUFBLENBQUFnRSxRQUFBLEdBQUFHLGFBQUEsQ0FBQW5FLENBQUEsR0FBQTZCLENBQUEseUJBQUErRCxPQUFBN0YsQ0FBQSxhQUFBVCxDQUFBLFFBQUEyRSxVQUFBLENBQUFNLE1BQUEsTUFBQWpGLENBQUEsU0FBQUEsQ0FBQSxRQUFBVSxDQUFBLFFBQUFpRSxVQUFBLENBQUEzRSxDQUFBLE9BQUFVLENBQUEsQ0FBQTZELE1BQUEsS0FBQTlELENBQUEsUUFBQUcsQ0FBQSxHQUFBRixDQUFBLENBQUFvRSxVQUFBLGtCQUFBbEUsQ0FBQSxDQUFBb0IsSUFBQSxRQUFBN0IsQ0FBQSxHQUFBUyxDQUFBLENBQUFxQixHQUFBLEVBQUE0QyxhQUFBLENBQUFuRSxDQUFBLFlBQUFQLENBQUEsWUFBQXNELEtBQUEsOEJBQUE4QyxhQUFBLFdBQUFBLGNBQUF2RyxDQUFBLEVBQUFVLENBQUEsRUFBQUUsQ0FBQSxnQkFBQWdELFFBQUEsS0FBQXZELFFBQUEsRUFBQXlDLE1BQUEsQ0FBQTlDLENBQUEsR0FBQW1FLFVBQUEsRUFBQXpELENBQUEsRUFBQTJELE9BQUEsRUFBQXpELENBQUEsb0JBQUErQyxNQUFBLFVBQUExQixHQUFBLEdBQUF4QixDQUFBLEdBQUE4QixDQUFBLE9BQUF2QyxDQUFBO0FBQUEsU0FBQXdHLG1CQUFBNUYsQ0FBQSxFQUFBSCxDQUFBLEVBQUFULENBQUEsRUFBQVUsQ0FBQSxFQUFBUCxDQUFBLEVBQUFjLENBQUEsRUFBQUMsQ0FBQSxjQUFBRixDQUFBLEdBQUFKLENBQUEsQ0FBQUssQ0FBQSxFQUFBQyxDQUFBLEdBQUFFLENBQUEsR0FBQUosQ0FBQSxDQUFBRCxLQUFBLFdBQUFILENBQUEsZ0JBQUFaLENBQUEsQ0FBQVksQ0FBQSxLQUFBSSxDQUFBLENBQUEwQyxJQUFBLEdBQUFqRCxDQUFBLENBQUFXLENBQUEsSUFBQXNFLE9BQUEsQ0FBQXJDLE9BQUEsQ0FBQWpDLENBQUEsRUFBQW1DLElBQUEsQ0FBQTdDLENBQUEsRUFBQVAsQ0FBQTtBQUFBLFNBQUFzRyxrQkFBQTdGLENBQUEsNkJBQUFILENBQUEsU0FBQVQsQ0FBQSxHQUFBMEcsU0FBQSxhQUFBaEIsT0FBQSxXQUFBaEYsQ0FBQSxFQUFBUCxDQUFBLFFBQUFjLENBQUEsR0FBQUwsQ0FBQSxDQUFBK0YsS0FBQSxDQUFBbEcsQ0FBQSxFQUFBVCxDQUFBLFlBQUE0RyxNQUFBaEcsQ0FBQSxJQUFBNEYsa0JBQUEsQ0FBQXZGLENBQUEsRUFBQVAsQ0FBQSxFQUFBUCxDQUFBLEVBQUF5RyxLQUFBLEVBQUFDLE1BQUEsVUFBQWpHLENBQUEsY0FBQWlHLE9BQUFqRyxDQUFBLElBQUE0RixrQkFBQSxDQUFBdkYsQ0FBQSxFQUFBUCxDQUFBLEVBQUFQLENBQUEsRUFBQXlHLEtBQUEsRUFBQUMsTUFBQSxXQUFBakcsQ0FBQSxLQUFBZ0csS0FBQTtBQUFBLFNBQUFFLGtCQUFBOUcsQ0FBQSxFQUFBVSxDQUFBLGFBQUFELENBQUEsTUFBQUEsQ0FBQSxHQUFBQyxDQUFBLENBQUF1RSxNQUFBLEVBQUF4RSxDQUFBLFVBQUFOLENBQUEsR0FBQU8sQ0FBQSxDQUFBRCxDQUFBLEdBQUFOLENBQUEsQ0FBQW9CLFVBQUEsR0FBQXBCLENBQUEsQ0FBQW9CLFVBQUEsUUFBQXBCLENBQUEsQ0FBQXFCLFlBQUEsa0JBQUFyQixDQUFBLEtBQUFBLENBQUEsQ0FBQXNCLFFBQUEsUUFBQWQsTUFBQSxDQUFBRyxjQUFBLENBQUFkLENBQUEsRUFBQStHLGNBQUEsQ0FBQTVHLENBQUEsQ0FBQTZHLEdBQUEsR0FBQTdHLENBQUE7QUFBQSxTQUFBOEcsYUFBQWpILENBQUEsRUFBQVUsQ0FBQSxFQUFBRCxDQUFBLFdBQUFDLENBQUEsSUFBQW9HLGlCQUFBLENBQUE5RyxDQUFBLENBQUFPLFNBQUEsRUFBQUcsQ0FBQSxHQUFBRCxDQUFBLElBQUFxRyxpQkFBQSxDQUFBOUcsQ0FBQSxFQUFBUyxDQUFBLEdBQUFFLE1BQUEsQ0FBQUcsY0FBQSxDQUFBZCxDQUFBLGlCQUFBeUIsUUFBQSxTQUFBekIsQ0FBQTtBQUFBLFNBQUFrSCxnQkFBQWpHLENBQUEsRUFBQUwsQ0FBQSxVQUFBSyxDQUFBLFlBQUFMLENBQUEsYUFBQXNELFNBQUE7QUFBQSxTQUFBaUQsZ0JBQUFuSCxDQUFBLEVBQUFVLENBQUEsRUFBQUQsQ0FBQSxZQUFBQyxDQUFBLEdBQUFxRyxjQUFBLENBQUFyRyxDQUFBLE1BQUFWLENBQUEsR0FBQVcsTUFBQSxDQUFBRyxjQUFBLENBQUFkLENBQUEsRUFBQVUsQ0FBQSxJQUFBSyxLQUFBLEVBQUFOLENBQUEsRUFBQWMsVUFBQSxNQUFBQyxZQUFBLE1BQUFDLFFBQUEsVUFBQXpCLENBQUEsQ0FBQVUsQ0FBQSxJQUFBRCxDQUFBLEVBQUFULENBQUE7QUFBQSxTQUFBK0csZUFBQXRHLENBQUEsUUFBQU8sQ0FBQSxHQUFBb0csWUFBQSxDQUFBM0csQ0FBQSxnQ0FBQVAsT0FBQSxDQUFBYyxDQUFBLElBQUFBLENBQUEsR0FBQUEsQ0FBQTtBQUFBLFNBQUFvRyxhQUFBM0csQ0FBQSxFQUFBQyxDQUFBLG9CQUFBUixPQUFBLENBQUFPLENBQUEsTUFBQUEsQ0FBQSxTQUFBQSxDQUFBLE1BQUFULENBQUEsR0FBQVMsQ0FBQSxDQUFBTCxNQUFBLENBQUFpSCxXQUFBLGtCQUFBckgsQ0FBQSxRQUFBZ0IsQ0FBQSxHQUFBaEIsQ0FBQSxDQUFBa0MsSUFBQSxDQUFBekIsQ0FBQSxFQUFBQyxDQUFBLGdDQUFBUixPQUFBLENBQUFjLENBQUEsVUFBQUEsQ0FBQSxZQUFBa0QsU0FBQSx5RUFBQXhELENBQUEsR0FBQTRHLE1BQUEsR0FBQUMsTUFBQSxFQUFBOUcsQ0FBQTtBQUFBLElBV2ErRyxJQUFJLEdBQUFDLE9BQUEsQ0FBQUQsSUFBQSxnQkFBQVAsWUFBQSxDQUtiLFNBQUFPLEtBQVlFLElBQVksRUFBRUMsSUFBWSxFQUFFQyxHQUFXLEVBQUVDLE9BQXFCLEVBQUU7RUFBQVgsZUFBQSxPQUFBTSxJQUFBO0VBQUFMLGVBQUE7RUFBQUEsZUFBQTtFQUFBQSxlQUFBO0VBQUFBLGVBQUE7RUFDeEUsSUFBSSxDQUFDTyxJQUFJLEdBQUdBLElBQUk7RUFDaEIsSUFBSSxDQUFDQyxJQUFJLEdBQUdBLElBQUk7RUFDaEIsSUFBSSxDQUFDQyxHQUFHLEdBQUdBLEdBQUc7RUFDZCxJQUFJLENBQUNDLE9BQU8sR0FBR0EsT0FBTztBQUMxQixDQUFDO0FBR0wsSUFBTUMsU0FBUyxHQUFBTCxPQUFBLENBQUFLLFNBQUEsR0FBRyxTQUFaQSxTQUFTQSxDQUFJSixJQUFhLEVBQUVDLElBQWEsRUFBRUksSUFBMEIsRUFBb0I7RUFDM0YsSUFBSUMsR0FBRyxTQUFTO0VBQ2hCLElBQUlOLElBQUksRUFBRU0sR0FBRyxlQUFBQyxNQUFBLENBQWVQLElBQUksQ0FBRTtFQUNsQyxJQUFJQyxJQUFJLEVBQUVLLEdBQUcsZUFBQUMsTUFBQSxDQUFlTixJQUFJLENBQUU7RUFDbEMsSUFBSUksSUFBSSxFQUFFQyxHQUFHLElBQUksR0FBRyxHQUFHRCxJQUFJLENBQUNHLElBQUksQ0FBQyxHQUFHLENBQUM7RUFFckNDLGtCQUFNLENBQUNDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztFQUNwQ0Qsa0JBQU0sQ0FBQ0UsS0FBSyxzQkFBQUosTUFBQSxDQUFxQkQsR0FBRyxPQUFHLENBQUM7RUFFeEMsT0FBTyxJQUFJdEMsT0FBTyxDQUFDLFVBQUNyQyxPQUFPLEVBQUVpRixNQUFNLEVBQUs7SUFDcEMsSUFBTUMsV0FBVyxHQUFHLElBQUFDLGdCQUFRLEVBQ3hCUixHQUFHLEVBQ0gsVUFBQ1MsR0FBUSxFQUFLO01BQ1YsSUFBSUEsR0FBRyxFQUFFO1FBQ0xOLGtCQUFNLENBQUNPLEtBQUssNEJBQUFULE1BQUEsQ0FBNEJRLEdBQUcsQ0FBRSxDQUFDO01BQ2xEO0lBQ0osQ0FBQyxFQUNELFVBQUNFLE9BQU8sRUFBRUQsS0FBSyxFQUFLO01BQ2hCLElBQUksQ0FBQ0EsS0FBSyxFQUFFO1FBQ1IsSUFBSUMsT0FBTyxDQUFDQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtVQUNoRFQsa0JBQU0sQ0FBQ0MsSUFBSSxVQUFBSCxNQUFBLENBQVVVLE9BQU8sQ0FBRSxDQUFDO1VBQy9CLElBQU1FLFFBQVEsR0FBR0YsT0FBTyxDQUFDRyxLQUFLLENBQUMsSUFBSSxDQUFDO1VBQ3BDLElBQUlELFFBQVEsQ0FBQzVELE1BQU0sR0FBRyxDQUFDLEVBQUVxRCxNQUFNLENBQUMsdUNBQXVDLENBQUMsTUFDbkU7WUFBQSxJQUFBUyxlQUFBO1lBQ0QsSUFBTW5CLEdBQUcsR0FBR2lCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0csSUFBSSxDQUFDLENBQUM7WUFDOUIsSUFBTUMsT0FBTyxHQUFHLDBCQUEwQixDQUFDQyxJQUFJLENBQUN0QixHQUFHLENBQUM7WUFDcEQsSUFBSSxFQUFBbUIsZUFBQSxHQUFDRSxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRWhFLE1BQU0sY0FBQThELGVBQUEsY0FBQUEsZUFBQSxHQUFJLENBQUMsSUFBSSxDQUFDLEVBQUVULE1BQU0sQ0FBQyxpREFBaUQsQ0FBQyxNQUNwRmpGLE9BQU8sQ0FBQyxJQUFJbUUsSUFBSSxDQUFDeUIsT0FBTyxDQUFFLENBQUMsQ0FBQyxFQUFFRSxRQUFRLENBQUNGLE9BQU8sQ0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFQSxPQUFPLENBQUUsQ0FBQyxDQUFDLEVBQUVWLFdBQVcsQ0FBQyxDQUFDO1VBQ3hGO1FBQ0osQ0FBQyxNQUFNLElBQUlJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDdkRULGtCQUFNLENBQUNPLEtBQUssVUFBQVQsTUFBQSxDQUFVVSxPQUFPLENBQUUsQ0FBQztVQUNoQ0wsTUFBTSxDQUFDLHdCQUF3QixDQUFDO1FBQ3BDLENBQUMsTUFBTTtVQUNISCxrQkFBTSxDQUFDRSxLQUFLLFVBQUFKLE1BQUEsQ0FBVVUsT0FBTyxDQUFFLENBQUM7UUFDcEM7TUFDSixDQUFDLE1BQU07UUFDSFIsa0JBQU0sQ0FBQ08sS0FBSyxVQUFBVCxNQUFBLENBQVVVLE9BQU8sQ0FBRSxDQUFDO01BQ3BDO0lBQ0osQ0FDSixDQUFDO0VBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELElBQU1TLFFBQVEsR0FBQTNCLE9BQUEsQ0FBQTJCLFFBQUE7RUFBQSxJQUFBQyxJQUFBLEdBQUE1QyxpQkFBQSxjQUFBakcsbUJBQUEsR0FBQTZFLElBQUEsQ0FBRyxTQUFBaUUsUUFBT0MsSUFBVTtJQUFBLElBQUFDLG1CQUFBLEVBQUFDLG1CQUFBO0lBQUEsSUFBQWxCLFdBQUE7SUFBQSxPQUFBL0gsbUJBQUEsR0FBQWtCLElBQUEsVUFBQWdJLFNBQUFDLFFBQUE7TUFBQSxrQkFBQUEsUUFBQSxDQUFBN0QsSUFBQSxHQUFBNkQsUUFBQSxDQUFBdkYsSUFBQTtRQUFBO1VBQzlCK0Qsa0JBQU0sQ0FBQ0UsS0FBSyw2QkFBQUosTUFBQSxDQUE2QnNCLElBQUksQ0FBQzNCLEdBQUcsQ0FBRSxDQUFDO1VBQzlDVyxXQUFXLEdBQUdnQixJQUFJLENBQUMxQixPQUFPO1VBQ2hDLENBQUEyQixtQkFBQSxHQUFBakIsV0FBVyxDQUFDcUIsTUFBTSxjQUFBSixtQkFBQSxlQUFsQkEsbUJBQUEsQ0FBb0JLLGtCQUFrQixDQUFDLENBQUM7VUFDeEMsQ0FBQUosbUJBQUEsR0FBQWxCLFdBQVcsQ0FBQ3VCLE1BQU0sY0FBQUwsbUJBQUEsZUFBbEJBLG1CQUFBLENBQW9CSSxrQkFBa0IsQ0FBQyxDQUFDO1VBQ3hDdEIsV0FBVyxDQUFDc0Isa0JBQWtCLENBQUMsT0FBTyxDQUFDO1VBQ3ZDMUIsa0JBQU0sQ0FBQ0UsS0FBSyxDQUFDLDRDQUE0QyxDQUFDO1VBQUFzQixRQUFBLENBQUF2RixJQUFBO1VBQUEsT0FDcEQsSUFBQTJGLCtCQUFnQixFQUFDeEIsV0FBVyxDQUFDO1FBQUE7VUFDbkNKLGtCQUFNLENBQUNFLEtBQUssQ0FBQyxvREFBb0QsQ0FBQztVQUNsRUYsa0JBQU0sQ0FBQ0MsSUFBSSw0QkFBQUgsTUFBQSxDQUE0QnNCLElBQUksQ0FBQzNCLEdBQUcsQ0FBRSxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUErQixRQUFBLENBQUExRCxJQUFBO01BQUE7SUFBQSxHQUFBcUQsT0FBQTtFQUFBLENBQ3JEO0VBQUEsZ0JBVktGLFFBQVFBLENBQUFZLEVBQUE7SUFBQSxPQUFBWCxJQUFBLENBQUExQyxLQUFBLE9BQUFELFNBQUE7RUFBQTtBQUFBLEdBVWI7QUFFRCxJQUFNdUQsbUJBQW1CLEdBQUF4QyxPQUFBLENBQUF3QyxtQkFBQTtFQUFBLElBQUFDLEtBQUEsR0FBQXpELGlCQUFBLGNBQUFqRyxtQkFBQSxHQUFBNkUsSUFBQSxDQUFHLFNBQUE4RSxTQUN4QkMsVUFBZSxFQUNmMUMsSUFBYSxFQUNiQyxJQUFhLEVBQ2IwQyxZQUFxQixFQUNyQnRDLElBQTBCO0lBQUEsT0FBQXZILG1CQUFBLEdBQUFrQixJQUFBLFVBQUE0SSxVQUFBQyxTQUFBO01BQUEsa0JBQUFBLFNBQUEsQ0FBQXpFLElBQUEsR0FBQXlFLFNBQUEsQ0FBQW5HLElBQUE7UUFBQTtVQUFBLE9BQUFtRyxTQUFBLENBQUF0RyxNQUFBLFdBRW5CLElBQUl5QixPQUFPO1lBQUEsSUFBQThFLEtBQUEsR0FBQS9ELGlCQUFBLGNBQUFqRyxtQkFBQSxHQUFBNkUsSUFBQSxDQUFDLFNBQUFvRixTQUFPcEgsT0FBTyxFQUFFcUgsT0FBTztjQUFBLElBQUFDLGlCQUFBLEVBQUFDLE9BQUE7Y0FBQSxPQUFBcEssbUJBQUEsR0FBQWtCLElBQUEsVUFBQW1KLFVBQUFDLFNBQUE7Z0JBQUEsa0JBQUFBLFNBQUEsQ0FBQWhGLElBQUEsR0FBQWdGLFNBQUEsQ0FBQTFHLElBQUE7a0JBQUE7b0JBQUEwRyxTQUFBLENBQUExRyxJQUFBO29CQUFBLE9BQ1IyRyxzQkFBc0IsQ0FBQ1gsVUFBVSxDQUFDO2tCQUFBO29CQUE1RE8saUJBQWlCLEdBQUFHLFNBQUEsQ0FBQWhILElBQUE7b0JBQUFnSCxTQUFBLENBQUExRyxJQUFBO29CQUFBLE9BQ0M0RyxJQUFJLENBQUN0RCxJQUFJLEVBQUVDLElBQUksRUFBRTBDLFlBQVksRUFBRXRDLElBQUksQ0FBQztrQkFBQTtvQkFBcEQ2QyxPQUFPLEdBQUFFLFNBQUEsQ0FBQWhILElBQUE7b0JBQ2I2RyxpQkFBaUIsQ0FBQ00sS0FBSyxDQUFDLFlBQU07c0JBQzFCNUgsT0FBTyxDQUFDdUgsT0FBTyxDQUFDO29CQUNwQixDQUFDLENBQUM7a0JBQUE7a0JBQUE7b0JBQUEsT0FBQUUsU0FBQSxDQUFBN0UsSUFBQTtnQkFBQTtjQUFBLEdBQUF3RSxRQUFBO1lBQUEsQ0FDTDtZQUFBLGlCQUFBUyxHQUFBLEVBQUFDLEdBQUE7Y0FBQSxPQUFBWCxLQUFBLENBQUE3RCxLQUFBLE9BQUFELFNBQUE7WUFBQTtVQUFBLElBQUM7UUFBQTtRQUFBO1VBQUEsT0FBQTZELFNBQUEsQ0FBQXRFLElBQUE7TUFBQTtJQUFBLEdBQUFrRSxRQUFBO0VBQUEsQ0FDTDtFQUFBLGdCQWRLRixtQkFBbUJBLENBQUFtQixHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUE7SUFBQSxPQUFBdEIsS0FBQSxDQUFBdkQsS0FBQSxPQUFBRCxTQUFBO0VBQUE7QUFBQSxHQWN4QjtBQUVELElBQU1zRSxJQUFJLEdBQUF2RCxPQUFBLENBQUF1RCxJQUFBLEdBQUcsU0FBUEEsSUFBSUEsQ0FBSXRELElBQWEsRUFBRUMsSUFBYSxFQUFFMEMsWUFBcUIsRUFBRXRDLElBQTBCLEVBQW1EO0VBQzVJLElBQU0wRCxTQUFTLEdBQUdDLGdCQUFJLENBQUNySSxPQUFPLENBQUNnSCxZQUFZLEdBQUcsRUFBRSxDQUFDO0VBRWpELElBQUlyQyxHQUFHLFNBQVM7RUFDaEIsSUFBSXFDLFlBQVksRUFBRXJDLEdBQUcsUUFBQUMsTUFBQSxDQUFRd0QsU0FBUyxDQUFFO0VBQ3hDekQsR0FBRyxJQUFJLG9DQUFvQztFQUMzQyxJQUFJTixJQUFJLEVBQUVNLEdBQUcsZUFBQUMsTUFBQSxDQUFlUCxJQUFJLENBQUU7RUFDbEMsSUFBSUMsSUFBSSxFQUFFSyxHQUFHLGVBQUFDLE1BQUEsQ0FBZU4sSUFBSSxDQUFFO0VBQ2xDLElBQUlJLElBQUksRUFBRUMsR0FBRyxJQUFJLEdBQUcsR0FBR0QsSUFBSSxDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDO0VBRXJDQyxrQkFBTSxDQUFDQyxJQUFJLENBQUMsZUFBZSxDQUFDO0VBQzVCRCxrQkFBTSxDQUFDRSxLQUFLLHNCQUFBSixNQUFBLENBQXFCRCxHQUFHLE9BQUcsQ0FBQztFQUV4QyxJQUFNMkQsU0FBUyxHQUFHRCxnQkFBSSxDQUFDckksT0FBTyxDQUFDLGtCQUFrQixDQUFDO0VBQ2xEdUksY0FBRSxDQUFDQyxNQUFNLENBQUNGLFNBQVMsRUFBRTtJQUFFRyxTQUFTLEVBQUUsSUFBSTtJQUFFQyxLQUFLLEVBQUU7RUFBSyxDQUFDLENBQUM7RUFFdEQsT0FBTyxJQUFJckcsT0FBTyxDQUFDLFVBQUNyQyxPQUFPLEVBQUVxSCxPQUFPLEVBQUs7SUFDckMsSUFBQWxDLGdCQUFRLEVBQ0pSLEdBQUcsRUFDSCxVQUFDUyxHQUFRLEVBQUs7TUFDVixJQUFJQSxHQUFHLEVBQUVOLGtCQUFNLENBQUNPLEtBQUssNEJBQUFULE1BQUEsQ0FBNEJRLEdBQUcsQ0FBRSxDQUFDO01BQ3ZELElBQUl1RCxTQUFTLEdBQUdDLGFBQWEsQ0FBQyxDQUFDO01BQy9CLElBQU1DLEtBQUssR0FBR0YsU0FBUyxDQUFDL0csTUFBTTtNQUM5QixJQUFNa0gsT0FBTyxHQUFHSCxTQUFTLENBQUNJLE1BQU0sQ0FBQyxVQUFDQyxRQUErQjtRQUFBLE9BQUtBLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSUEsUUFBUSxDQUFDLFNBQVMsQ0FBQztNQUFBLEVBQUMsQ0FBQ3BILE1BQU07TUFDeEgsSUFBTXFILE9BQU8sR0FBR0osS0FBSyxHQUFHQyxPQUFPO01BQy9CLElBQUlJLE1BQU0sR0FBRztRQUFFTCxLQUFLLEVBQUxBLEtBQUs7UUFBRUksT0FBTyxFQUFQQSxPQUFPO1FBQUVILE9BQU8sRUFBUEE7TUFBUSxDQUFDO01BQ3hDOUksT0FBTyxDQUFDa0osTUFBTSxDQUFDO0lBQ25CLENBQUMsRUFDRCxVQUFDNUQsT0FBTyxFQUFFRCxLQUFLLEVBQUs7TUFDaEIsSUFBSUMsT0FBTyxDQUFDQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUM5QzRELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDOUQsT0FBTyxDQUFDLEVBQUM7TUFDekIsQ0FBQyxNQUFNO1FBQ0hSLGtCQUFNLENBQUNPLEtBQUssR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQUFULE1BQUEsQ0FBVVUsT0FBTyxDQUFFLENBQUM7TUFDekQ7SUFDSixDQUNKLENBQUM7RUFDTCxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsSUFBTStELGVBQWUsR0FBQWpGLE9BQUEsQ0FBQWlGLGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBSUMsTUFBOEMsRUFBSztFQUN4RSxJQUFJWCxTQUFTLEdBQUdDLGFBQWEsQ0FBQyxDQUFDO0VBQy9CRCxTQUFTLENBQUNZLEdBQUcsQ0FBQyxVQUFVUCxRQUErQixFQUFFO0lBQ3JELElBQUlqSCxJQUFJLEdBQUcsU0FBUztJQUNwQixJQUFJaUgsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO01BQ3hCLElBQU1RLFdBQVcsR0FBR1IsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUNyQ3JELElBQUksQ0FBQyxDQUFDLENBQ044RCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUNsQmhFLEtBQUssQ0FBQywyQkFBMkIsQ0FBQztNQUN2QyxJQUFJK0QsV0FBVyxDQUFDNUgsTUFBTSxHQUFHLENBQUMsRUFBRUcsSUFBSSxHQUFHeUgsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDN0QsSUFBSSxDQUFDLENBQUM7SUFDNUQ7SUFDQTJELE1BQU0sQ0FBQ3ZILElBQUksRUFBRSxZQUFNO01BQ2YsSUFBSWlILFFBQVEsQ0FBQ0YsT0FBTyxJQUFJRSxRQUFRLENBQUNVLE9BQU8sRUFBRSxNQUFNLElBQUl0SixLQUFLLENBQUMsY0FBYyxDQUFDO0lBQzdFLENBQUMsQ0FBQztFQUNOLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxJQUFNdUosZUFBZSxHQUFBdkYsT0FBQSxDQUFBdUYsZUFBQSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJQyxRQUFnQixFQUFFQyxpQkFBMEIsRUFBb0I7RUFDckYsSUFBTUMsWUFBWSxHQUFHNU4sT0FBTyxDQUFDbU0sZ0JBQUksQ0FBQ3JJLE9BQU8sQ0FBQzRKLFFBQVEsQ0FBQyxDQUFDO0VBQ3BELE9BQU9HLGtCQUFrQixDQUFDRCxZQUFZLEVBQUVELGlCQUFpQixDQUFDO0FBQzlELENBQUM7QUFFRCxJQUFNRSxrQkFBa0IsR0FBQTNGLE9BQUEsQ0FBQTJGLGtCQUFBLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUQsWUFBaUIsRUFBRUQsaUJBQTBCLEVBQW9CO0VBQ3pGQSxpQkFBaUIsR0FBR0EsaUJBQWlCLElBQUksdUJBQXVCO0VBRWhFL0Usa0JBQU0sQ0FBQ0MsSUFBSSxrQ0FBQUgsTUFBQSxDQUFrQ2lGLGlCQUFpQixDQUFFLENBQUM7RUFFakUsT0FBTyxJQUFJeEgsT0FBTyxDQUFDLFVBQUNyQyxPQUFPLEVBQUVpRixNQUFNLEVBQUs7SUFDcEMrRSxpQkFBSyxDQUNBQyxJQUFJLElBQUFyRixNQUFBLENBQUlpRixpQkFBaUIsK0JBQTRCQyxZQUFZLENBQUMsQ0FDbEU1SixJQUFJLENBQUMsVUFBQWdLLFFBQVEsRUFBSTtNQUNkcEYsa0JBQU0sQ0FBQ0UsS0FBSyxzQkFBQUosTUFBQSxDQUFzQnNGLFFBQVEsQ0FBQ0MsSUFBSSxDQUFFLENBQUM7TUFDbERyRixrQkFBTSxDQUFDQyxJQUFJLENBQUMsNEJBQTRCLENBQUM7TUFDekMvRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQW9GLEdBQUcsRUFBSTtNQUNWLElBQU1nRiwyQkFBMkIsMENBQUF4RixNQUFBLENBQTBDUSxHQUFHLENBQUU7TUFDaEZOLGtCQUFNLENBQUNPLEtBQUssQ0FBQytFLDJCQUEyQixDQUFDO01BQ3pDbkYsTUFBTSxDQUFDbUYsMkJBQTJCLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0VBQ1YsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELElBQU1DLGVBQWUsR0FBQWpHLE9BQUEsQ0FBQWlHLGVBQUEsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQSxFQUFTO0VBQzFCLElBQU0xRixHQUFHLGNBQWM7RUFDdkJHLGtCQUFNLENBQUNDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztFQUN6Q0Qsa0JBQU0sQ0FBQ0UsS0FBSyxtQ0FBQUosTUFBQSxDQUFrQ0QsR0FBRyxPQUFHLENBQUM7RUFFckQsSUFBQVEsZ0JBQVEsRUFDSlIsR0FBRyxFQUNILFVBQUNTLEdBQVEsRUFBSztJQUNWLElBQUlBLEdBQUcsRUFBRU4sa0JBQU0sQ0FBQ08sS0FBSyx5Q0FBQVQsTUFBQSxDQUF5Q1EsR0FBRyxDQUFFLENBQUM7RUFDeEUsQ0FBQyxFQUNELFVBQUNFLE9BQU8sRUFBRUQsS0FBSyxFQUFLO0lBQ2hCLElBQUlBLEtBQUssRUFBRVAsa0JBQU0sQ0FBQ08sS0FBSyx1QkFBQVQsTUFBQSxDQUF1QlUsT0FBTyxDQUFFLENBQUMsTUFDbkQ2RCxPQUFPLENBQUNDLEdBQUcsSUFBQXhFLE1BQUEsQ0FBSVUsT0FBTyxDQUFFLENBQUM7RUFDbEMsQ0FDSixDQUFDO0FBQ0wsQ0FBQztBQUVELElBQU1vQyxzQkFBc0IsR0FBQXRELE9BQUEsQ0FBQXNELHNCQUFBLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSVgsVUFBZSxFQUEyQjtFQUN0RWpDLGtCQUFNLENBQUNFLEtBQUssd0NBQXdDLENBQUM7RUFDckQsSUFBSXNGLEdBQUcsR0FBR0MsZ0JBQUksQ0FBQ0MsWUFBWSxDQUFDLFVBQUNDLElBQUksRUFBRUMsR0FBRyxFQUFLO0lBQ3ZDQSxHQUFHLENBQUNDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7TUFBRSxjQUFjLEVBQUU7SUFBbUIsQ0FBQyxDQUFDO0lBQzFELElBQU1DLFNBQVMsR0FBR0MsSUFBSSxDQUFDQyxTQUFTLENBQUNDLGdCQUFnQixDQUFDaEUsVUFBVSxDQUFDLENBQUM7SUFDOURqQyxrQkFBTSxDQUFDRSxLQUFLLGVBQUFKLE1BQUEsQ0FBZWdHLFNBQVMsQ0FBRSxDQUFDO0lBQ3ZDRixHQUFHLENBQUNNLEdBQUcsQ0FBQ0osU0FBUyxDQUFDO0VBQ3RCLENBQUMsQ0FBQztFQUNGLE9BQU8sSUFBSXZJLE9BQU8sQ0FBYyxVQUFDckMsT0FBTyxFQUFFaUYsTUFBTSxFQUFLO0lBQ2pEcUYsR0FBRyxDQUFDVyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQUE3RixHQUFHLEVBQUk7TUFDbkJOLGtCQUFNLENBQUNPLEtBQUssQ0FBQyx5REFBeUQsRUFBRUQsR0FBRyxDQUFDO01BQzVFSCxNQUFNLENBQUMseURBQXlELENBQUM7SUFDckUsQ0FBQyxDQUFDO0lBQ0ZxRixHQUFHLENBQUNZLE1BQU0sQ0FBQztNQUFFN0csSUFBSSxFQUFFLFdBQVc7TUFBRUMsSUFBSSxFQUFFO0lBQUUsQ0FBQyxFQUFFLFlBQU07TUFDN0MsSUFBTTZHLE9BQU8sR0FBR2IsR0FBRyxDQUFDYSxPQUFPLENBQUMsQ0FBdUI7TUFDbkQzRyxPQUFPLENBQUM0RyxHQUFHLENBQUMsY0FBYyxDQUFDLGFBQUF4RyxNQUFBLENBQWF1RyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUEsT0FBTyxPQUFBdkcsTUFBQSxDQUFJdUcsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU3RyxJQUFJLENBQUU7TUFDM0VRLGtCQUFNLENBQUNDLElBQUksZ0NBQUFILE1BQUEsQ0FBZ0NKLE9BQU8sQ0FBQzRHLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBRSxDQUFDO01BQ3pFcEwsT0FBTyxDQUFDc0ssR0FBRyxDQUFDO0lBQ2hCLENBQUMsQ0FBQztFQUNOLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxJQUFNMUIsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFBLEVBQVM7RUFDeEIsSUFBTXlDLFVBQVUsR0FBR2hELGdCQUFJLENBQUNySSxPQUFPLENBQUMseUNBQXlDLENBQUM7RUFDMUUsSUFBSW1LLElBQUksR0FBRzVCLGNBQUUsQ0FBQytDLFlBQVksQ0FBQ0QsVUFBVSxDQUFDO0VBQ3RDLElBQU1FLE1BQU0sR0FBRyxJQUFJQyx3QkFBUyxDQUFDLENBQUM7RUFDOUIsSUFBSUMsU0FBUyxHQUFHRixNQUFNLENBQUNHLEtBQUssQ0FBQ3ZCLElBQUksQ0FBQztFQUNsQ3NCLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDM0MsUUFBUSxHQUFHNEMsS0FBSyxDQUFDQyxPQUFPLENBQUNKLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDM0MsUUFBUSxDQUFDLEdBQUd5QyxTQUFTLENBQUNFLFNBQVMsQ0FBQzNDLFFBQVEsR0FBRyxDQUFDeUMsU0FBUyxDQUFDRSxTQUFTLENBQUMzQyxRQUFRLENBQUM7RUFDMUksT0FBT3lDLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDM0MsUUFBUTtBQUN2QyxDQUFDO0FBRUQsSUFBTThDLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSS9FLFVBQWUsRUFBa0M7RUFDcEUsSUFBTWdGLE9BQU8sR0FBRyxJQUFBQyxnQ0FBb0IsRUFBQ2pGLFVBQVUsQ0FBQztFQUNoRCxJQUFJNkQsU0FBc0MsR0FBRyxDQUFDLENBQUM7RUFDL0NtQixPQUFPLENBQUN4QyxHQUFHLENBQUMsVUFBQTBDLFNBQVMsRUFBSTtJQUNyQnJCLFNBQVMsQ0FBQ3FCLFNBQVMsQ0FBQzVELElBQUksQ0FBQyxHQUFHNEQsU0FBUyxDQUFDQyxPQUFPO0VBQ2pELENBQUMsQ0FBQztFQUNGLE9BQU90QixTQUFTLENBQUMsR0FBRyxDQUFDO0VBQ3JCLE9BQU9BLFNBQVM7QUFDcEIsQ0FBQztBQUVELFNBQVNHLGdCQUFnQkEsQ0FBQ2hFLFVBQWUsRUFBRTtFQUN2QyxJQUFJNkQsU0FBUyxHQUFHa0IsYUFBYSxDQUFDL0UsVUFBVSxDQUFDO0VBQ3pDLElBQUlvRixxQkFBcUIsR0FBRztJQUN4QkMsUUFBUSxFQUFFO01BQ05DLFdBQVcsRUFBRTtRQUNUQyxRQUFRLEVBQUU7VUFDTkMsa0JBQWtCLEVBQUU7WUFDaEJDLGlCQUFpQixFQUFFO1VBQ3ZCO1FBQ0o7TUFDSjtJQUNKO0VBQ0osQ0FBQztFQUNEbFAsTUFBTSxDQUFDZ0YsSUFBSSxDQUFDc0ksU0FBUyxDQUFDLENBQ2pCNkIsSUFBSSxDQUFDLENBQUMsQ0FDTmxELEdBQUcsQ0FBQyxVQUFBbEIsSUFBSSxFQUFJO0lBQ1Q4RCxxQkFBcUIsQ0FBQ0MsUUFBUSxDQUFDQyxXQUFXLENBQUNDLFFBQVEsQ0FBQ0Msa0JBQWtCLENBQUNDLGlCQUFpQixDQUFDakwsSUFBSSxDQUFDO01BQzFGd0ssT0FBTyxFQUFFO1FBQ0xXLHdCQUF3QixFQUFFO1VBQ3RCUixPQUFPLEVBQUV0QixTQUFTLENBQUN2QyxJQUFJLENBQUMsQ0FBQ29FLElBQUksQ0FBQyxDQUFDO1VBQy9CRSxRQUFRLEVBQUUsQ0FBQ0MsNkJBQTZCLENBQUN2RSxJQUFJLENBQUMsQ0FBQyxDQUFDa0IsR0FBRyxDQUFDc0QsbUJBQW1CO1FBQzNFO01BQ0o7SUFDSixDQUFVLENBQUM7RUFDZixDQUFDLENBQUM7RUFDTixPQUFPVixxQkFBcUI7QUFDaEM7QUFFQSxJQUFNUyw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQTZCQSxDQUFJdkUsSUFBWSxFQUFLO0VBQ3BELE9BQU9BLElBQUksQ0FBQ29CLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUNBLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0FBQy9ELENBQUM7QUFFRCxJQUFNb0QsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSXhFLElBQVksRUFBSztFQUMxQyxPQUFPQSxJQUFJLENBQUNvQixPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztBQUMxQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
309
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wYXRoIiwiX2Zhc3RYbWxQYXJzZXIiLCJfZnMiLCJfbG9nZ2VyIiwiX3J1bm5lciIsIl9leHByZXNzTGlzdEVuZHBvaW50cyIsIl9odHRwIiwiX3NodXRkb3duVXRpbHMiLCJlIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsIk9iamVjdCIsIm4iLCJoYXNPd25Qcm9wZXJ0eSIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiYSIsImMiLCJhc3luY0l0ZXJhdG9yIiwidSIsInRvU3RyaW5nVGFnIiwiZGVmaW5lIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwid3JhcCIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJ0eXBlIiwiYXJnIiwiY2FsbCIsImgiLCJsIiwiZiIsInMiLCJ5IiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsInAiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwidmFsdWVzIiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsImZvckVhY2giLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibmFtZSIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXN5bmMiLCJQcm9taXNlIiwia2V5cyIsInJldmVyc2UiLCJwb3AiLCJwcmV2IiwiY2hhckF0Iiwic2xpY2UiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJrZXkiLCJfY3JlYXRlQ2xhc3MiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIlN0dWIiLCJleHBvcnRzIiwiaG9zdCIsInBvcnQiLCJ1cmwiLCJwcm9jZXNzIiwic3RhcnRTdHViIiwiYXJncyIsImNtZCIsImNvbmNhdCIsImpvaW4iLCJsb2dnZXIiLCJpbmZvIiwiZGVidWciLCJyZWplY3QiLCJqYXZhUHJvY2VzcyIsImNhbGxDb3JlIiwiZXJyIiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5kZXhPZiIsInN0dWJJbmZvIiwic3BsaXQiLCJfdXJsSW5mbyRsZW5ndGgiLCJ0cmltIiwidXJsSW5mbyIsImV4ZWMiLCJwYXJzZUludCIsInN0b3BTdHViIiwiX3JlZiIsIl9jYWxsZWUiLCJzdHViIiwiX2phdmFQcm9jZXNzJHN0ZG91dCIsIl9qYXZhUHJvY2VzcyRzdGRlcnIiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic3Rkb3V0IiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwic3RkZXJyIiwiZ3JhY2VmdWxTaHV0ZG93biIsIl94IiwidGVzdFdpdGhBcGlDb3ZlcmFnZSIsIl9yZWYyIiwiX2NhbGxlZTMiLCJleHByZXNzQXBwIiwiY29udHJhY3RQYXRoIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiX3JlZjMiLCJfY2FsbGVlMiIsIl9yZWplY3QiLCJhcGlDb3ZlcmFnZVNlcnZlciIsInJlc3VsdHMiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJzdGFydEFwaUNvdmVyYWdlU2VydmVyIiwidGVzdCIsImNsb3NlIiwiX3g3IiwiX3g4IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2Iiwic3BlY3NQYXRoIiwicGF0aCIsInJlcG9ydERpciIsImZzIiwicm1TeW5jIiwicmVjdXJzaXZlIiwiZm9yY2UiLCJ0ZXN0Q2FzZXMiLCJwYXJzZUp1bml0WE1MIiwidG90YWwiLCJmYWlsdXJlIiwiZmlsdGVyIiwidGVzdGNhc2UiLCJzdWNjZXNzIiwicmVzdWx0IiwiY29uc29sZSIsImxvZyIsInNob3dUZXN0UmVzdWx0cyIsInRlc3RGbiIsIm1hcCIsIm5hbWVUZW1wQXJyIiwicmVwbGFjZSIsInNraXBwZWQiLCJzZXRFeHBlY3RhdGlvbnMiLCJzdHViUGF0aCIsInN0dWJTZXJ2ZXJCYXNlVXJsIiwic3R1YlJlc3BvbnNlIiwic2V0RXhwZWN0YXRpb25Kc29uIiwiYXhpb3MiLCJwb3N0IiwicmVzcG9uc2UiLCJkYXRhIiwiX2VyciRyZXNwb25zZSIsInNldEV4cGVjdGF0aW9uc0Vycm9yTWVzc2FnZSIsImhlYWRlcnMiLCJlcnJvclRleHQiLCJwcmludEphclZlcnNpb24iLCJhcHAiLCJodHRwIiwiY3JlYXRlU2VydmVyIiwiX3JlcSIsInJlcyIsIndyaXRlSGVhZCIsImVuZFBvaW50cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJleHRyYWN0RW5kUG9pbnRzIiwiZW5kIiwib24iLCJsaXN0ZW4iLCJhZGRyZXNzIiwiZW52IiwicmVwb3J0UGF0aCIsInJlYWRGaWxlU3luYyIsInBhcnNlciIsIlhNTFBhcnNlciIsInJlc3VsdFhtbCIsInBhcnNlIiwidGVzdHN1aXRlIiwiQXJyYXkiLCJpc0FycmF5IiwibGlzdEVuZFBvaW50cyIsImRldGFpbHMiLCJsaXN0RXhwcmVzc0VuZHBvaW50cyIsImFwaURldGFpbCIsIm1ldGhvZHMiLCJzcHJpbmdBY3R1YXRvclBheWxvYWQiLCJjb250ZXh0cyIsImFwcGxpY2F0aW9uIiwibWFwcGluZ3MiLCJkaXNwYXRjaGVyU2VydmxldHMiLCJkaXNwYXRjaGVyU2VydmxldCIsInNvcnQiLCJyZXF1ZXN0TWFwcGluZ0NvbmRpdGlvbnMiLCJwYXR0ZXJucyIsImNvbnZlcnRFbmRwb2ludFRvU3ByaW5nU3ludGF4IiwicmVtb3ZlUmVnZXhGcm9tUGF0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBDaGlsZFByb2Nlc3MgfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHsgWE1MUGFyc2VyIH0gZnJvbSAnZmFzdC14bWwtcGFyc2VyJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9jb21tb24vbG9nZ2VyJ1xuaW1wb3J0IHsgY2FsbENvcmUgfSBmcm9tICcuLi9jb21tb24vcnVubmVyJ1xuaW1wb3J0IGxpc3RFeHByZXNzRW5kcG9pbnRzIGZyb20gJy4uL2xpYi9leHByZXNzLWxpc3QtZW5kcG9pbnRzJztcbmltcG9ydCBodHRwIGZyb20gJ2h0dHAnXG5pbXBvcnQgeyBBZGRyZXNzSW5mbyB9IGZyb20gJ25ldCdcbmltcG9ydCB7IGdyYWNlZnVsU2h1dGRvd24gfSBmcm9tICcuL3NodXRkb3duVXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBTdHViIHtcbiAgICBob3N0OiBzdHJpbmdcbiAgICBwb3J0OiBudW1iZXJcbiAgICB1cmw6IHN0cmluZ1xuICAgIHByb2Nlc3M6IENoaWxkUHJvY2Vzc1xuICAgIGNvbnN0cnVjdG9yKGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCB1cmw6IHN0cmluZywgcHJvY2VzczogQ2hpbGRQcm9jZXNzKSB7XG4gICAgICAgIHRoaXMuaG9zdCA9IGhvc3RcbiAgICAgICAgdGhpcy5wb3J0ID0gcG9ydFxuICAgICAgICB0aGlzLnVybCA9IHVybFxuICAgICAgICB0aGlzLnByb2Nlc3MgPSBwcm9jZXNzXG4gICAgfVxufVxuXG5jb25zdCBzdGFydFN0dWIgPSAoaG9zdD86IHN0cmluZywgcG9ydD86IG51bWJlciwgYXJncz86IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPFN0dWI+ID0+IHtcbiAgICB2YXIgY21kID0gYHN0dWJgXG4gICAgaWYgKGhvc3QpIGNtZCArPSBgIC0taG9zdD0ke2hvc3R9YFxuICAgIGlmIChwb3J0KSBjbWQgKz0gYCAtLXBvcnQ9JHtwb3J0fWBcbiAgICBpZiAoYXJncykgY21kICs9ICcgJyArIGFyZ3Muam9pbignICcpXG5cbiAgICBsb2dnZXIuaW5mbygnU3R1YjogU3RhcnRpbmcgc2VydmVyJylcbiAgICBsb2dnZXIuZGVidWcoYFN0dWI6IEV4ZWN1dGluZyBcIiR7Y21kfVwiYClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGphdmFQcm9jZXNzID0gY2FsbENvcmUoXG4gICAgICAgICAgICBjbWQsXG4gICAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgU3R1YjogRXhpdGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKG1lc3NhZ2UsIGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdTdHViIHNlcnZlciBpcyBydW5uaW5nJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFN0dWI6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R1YkluZm8gPSBtZXNzYWdlLnNwbGl0KCdvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R1YkluZm8ubGVuZ3RoIDwgMikgcmVqZWN0KCdDYW5ub3QgZGV0ZXJtaW5lIHVybCBmcm9tIHN0dWIgb3V0cHV0JylcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHN0dWJJbmZvWzFdLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEluZm8gPSAvKC4qPyk6XFwvXFwvKC4qPyk6KFswLTldKykvLmV4ZWModXJsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodXJsSW5mbz8ubGVuZ3RoID8/IDApIDwgNCkgcmVqZWN0KCdDYW5ub3QgZGV0ZXJtaW5lIGhvc3QgYW5kIHBvcnQgZnJvbSBzdHViIG91dHB1dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXNvbHZlKG5ldyBTdHViKHVybEluZm8hWzJdLCBwYXJzZUludCh1cmxJbmZvIVszXSksIHVybEluZm8hWzBdLCBqYXZhUHJvY2VzcykpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZS5pbmRleE9mKCdBZGRyZXNzIGFscmVhZHkgaW4gdXNlJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgnQWRkcmVzcyBhbHJlYWR5IGluIHVzZScpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoYFN0dWI6ICR7bWVzc2FnZX1gKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBTdHViOiAke21lc3NhZ2V9YClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICB9KVxufVxuXG5jb25zdCBzdG9wU3R1YiA9IGFzeW5jIChzdHViOiBTdHViKSA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBTdHViOiBTdG9wcGluZyBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxuICAgIGNvbnN0IGphdmFQcm9jZXNzID0gc3R1Yi5wcm9jZXNzXG4gICAgamF2YVByb2Nlc3Muc3Rkb3V0Py5yZW1vdmVBbGxMaXN0ZW5lcnMoKVxuICAgIGphdmFQcm9jZXNzLnN0ZGVycj8ucmVtb3ZlQWxsTGlzdGVuZXJzKClcbiAgICBqYXZhUHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2Nsb3NlJylcbiAgICBsb2dnZXIuZGVidWcoJ1RyeWluZyB0byBzdG9wIHN0dWIgcHJvY2VzcyBncmFjZWZ1bGx5IC4uLicpXG4gICAgYXdhaXQgZ3JhY2VmdWxTaHV0ZG93bihqYXZhUHJvY2VzcylcbiAgICBsb2dnZXIuZGVidWcoJ0NvbXBsZXRlZCBncmFjZWZ1bCB0ZXJtaW5hdGlvbiBvZiB0aGUgc3R1YiBwcm9jZXNzJylcbiAgICBsb2dnZXIuaW5mbyhgU3R1YjogU3RvcHBlZCBzZXJ2ZXIgYXQgJHtzdHViLnVybH1gKVxufVxuXG5jb25zdCB0ZXN0V2l0aEFwaUNvdmVyYWdlID0gYXN5bmMgKFxuICAgIGV4cHJlc3NBcHA6IGFueSxcbiAgICBob3N0Pzogc3RyaW5nLFxuICAgIHBvcnQ/OiBudW1iZXIsXG4gICAgY29udHJhY3RQYXRoPzogc3RyaW5nLFxuICAgIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4pOiBQcm9taXNlPHsgW2s6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBhcGlDb3ZlcmFnZVNlcnZlciA9IGF3YWl0IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIoZXhwcmVzc0FwcClcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRlc3QoaG9zdCwgcG9ydCwgY29udHJhY3RQYXRoLCBhcmdzKVxuICAgICAgICBhcGlDb3ZlcmFnZVNlcnZlci5jbG9zZSgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdHMpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgdGVzdCA9IChob3N0Pzogc3RyaW5nLCBwb3J0PzogbnVtYmVyLCBjb250cmFjdFBhdGg/OiBzdHJpbmcsIGFyZ3M/OiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTx7IFtrOiBzdHJpbmddOiBudW1iZXIgfSB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIGNvbnN0IHNwZWNzUGF0aCA9IHBhdGgucmVzb2x2ZShjb250cmFjdFBhdGggKyAnJylcblxuICAgIHZhciBjbWQgPSBgdGVzdGBcbiAgICBpZiAoY29udHJhY3RQYXRoKSBjbWQgKz0gYCAke3NwZWNzUGF0aH1gXG4gICAgY21kICs9ICcgLS1qdW5pdFJlcG9ydERpcj1kaXN0L3Rlc3QtcmVwb3J0J1xuICAgIGlmIChob3N0KSBjbWQgKz0gYCAtLWhvc3Q9JHtob3N0fWBcbiAgICBpZiAocG9ydCkgY21kICs9IGAgLS1wb3J0PSR7cG9ydH1gXG4gICAgaWYgKGFyZ3MpIGNtZCArPSAnICcgKyBhcmdzLmpvaW4oJyAnKVxuXG4gICAgbG9nZ2VyLmluZm8oJ1Rlc3Q6IFJ1bm5pbmcnKVxuICAgIGxvZ2dlci5kZWJ1ZyhgVGVzdDogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgY29uc3QgcmVwb3J0RGlyID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0JylcbiAgICBmcy5ybVN5bmMocmVwb3J0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSlcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICBjYWxsQ29yZShcbiAgICAgICAgICAgIGNtZCxcbiAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIGxvZ2dlci5lcnJvcihgVGVzdDogRmFpbGVkIHdpdGggZXJyb3IgJHtlcnJ9YClcbiAgICAgICAgICAgICAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWwgPSB0ZXN0Q2FzZXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3QgZmFpbHVyZSA9IHRlc3RDYXNlcy5maWx0ZXIoKHRlc3RjYXNlOiB7IFtpZDogc3RyaW5nXTogYW55IH0pID0+IHRlc3RjYXNlWydmYWlsdXJlJ10gfHwgdGVzdGNhc2VbJ3NraXBwZWQnXSkubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IHRvdGFsIC0gZmFpbHVyZVxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7IHRvdGFsLCBzdWNjZXNzLCBmYWlsdXJlIH1cbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5pbmRleE9mKCdBUEkgQ09WRVJBR0UgU1VNTUFSWScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZSkgLy9Mb2cgYWx3YXlzIGZvciBhbGwgbG9nIGxldmVsc1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcltlcnJvciA/ICdlcnJvcicgOiAnZGVidWcnXShgVGVzdDogJHttZXNzYWdlfWApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgfSlcbn1cblxuY29uc3Qgc2hvd1Rlc3RSZXN1bHRzID0gKHRlc3RGbjogKG5hbWU6IHN0cmluZywgY2I6ICgpID0+IHZvaWQpID0+IHZvaWQpID0+IHtcbiAgICB2YXIgdGVzdENhc2VzID0gcGFyc2VKdW5pdFhNTCgpXG4gICAgdGVzdENhc2VzLm1hcChmdW5jdGlvbiAodGVzdGNhc2U6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICB2YXIgbmFtZSA9ICdObyBOYW1lJ1xuICAgICAgICBpZiAodGVzdGNhc2VbJ3N5c3RlbS1vdXQnXSkge1xuICAgICAgICAgICAgY29uc3QgbmFtZVRlbXBBcnIgPSB0ZXN0Y2FzZVsnc3lzdGVtLW91dCddXG4gICAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgJycpXG4gICAgICAgICAgICAgICAgLnNwbGl0KC9kaXNwbGF5LW5hbWU6LipTY2VuYXJpbzogLylcbiAgICAgICAgICAgIGlmIChuYW1lVGVtcEFyci5sZW5ndGggPiAxKSBuYW1lID0gbmFtZVRlbXBBcnJbMV0udHJpbSgpXG4gICAgICAgIH1cbiAgICAgICAgdGVzdEZuKG5hbWUsICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0Y2FzZS5mYWlsdXJlIHx8IHRlc3RjYXNlLnNraXBwZWQpIHRocm93IG5ldyBFcnJvcignRGlkIG5vdCBwYXNzJylcbiAgICAgICAgfSlcbiAgICB9KVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbnMgPSAoc3R1YlBhdGg6IHN0cmluZywgc3R1YlNlcnZlckJhc2VVcmw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzdHViUmVzcG9uc2UgPSByZXF1aXJlKHBhdGgucmVzb2x2ZShzdHViUGF0aCkpXG4gICAgcmV0dXJuIHNldEV4cGVjdGF0aW9uSnNvbihzdHViUmVzcG9uc2UsIHN0dWJTZXJ2ZXJCYXNlVXJsKVxufVxuXG5jb25zdCBzZXRFeHBlY3RhdGlvbkpzb24gPSAoc3R1YlJlc3BvbnNlOiBhbnksIHN0dWJTZXJ2ZXJCYXNlVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgc3R1YlNlcnZlckJhc2VVcmwgPSBzdHViU2VydmVyQmFzZVVybCB8fCAnaHR0cDovL2xvY2FsaG9zdDo5MDAwJ1xuICAgIFxuICAgIGxvZ2dlci5pbmZvKGBTZXQgRXhwZWN0YXRpb25zOiBTdHViIHVybCBpcyAke3N0dWJTZXJ2ZXJCYXNlVXJsfWApXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBheGlvc1xuICAgICAgICAgICAgLnBvc3QoYCR7c3R1YlNlcnZlckJhc2VVcmx9L19zcGVjbWF0aWMvZXhwZWN0YXRpb25zYCwgc3R1YlJlc3BvbnNlKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgU2V0IEV4cGVjdGF0aW9uczogJHtyZXNwb25zZS5kYXRhfWApXG4gICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1NldCBFeHBlY3RhdGlvbnM6IEZpbmlzaGVkJylcbiAgICAgICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlID0gYFNldCBFeHBlY3RhdGlvbnM6IEZhaWxlZCB3aXRoIGVycm9yICR7ZXJyfWBcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgZGF0YSBpcyBpbiB0ZXh0IGZvcm1hdFxuICAgICAgICAgICAgICAgIGlmIChlcnIgJiYgZXJyLnJlc3BvbnNlPy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ3RleHQvcGxhaW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgYSBjaGVjayB0byBoYW5kbGUgdGV4dCBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSB0eXBlb2YgZXJyLnJlc3BvbnNlLmRhdGEgPT09ICdzdHJpbmcnID8gZXJyLnJlc3BvbnNlLmRhdGEgOiBcIkVycm9yIHRleHQgbm90IGF2YWlsYWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlICs9IGAgLSAke2Vycm9yVGV4dH1gO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoXCJGYWlsZWQgdG8gcmV0cmlldmUgdGV4dCBlcnJvciBtZXNzYWdlLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2V0RXhwZWN0YXRpb25zRXJyb3JNZXNzYWdlKVxuICAgICAgICAgICAgICAgIHJlamVjdChzZXRFeHBlY3RhdGlvbnNFcnJvck1lc3NhZ2UpXG4gICAgICAgICAgICB9KVxuICAgIH0pXG59XG5cbmNvbnN0IHByaW50SmFyVmVyc2lvbiA9ICgpID0+IHtcbiAgICBjb25zdCBjbWQgPSBgLS12ZXJzaW9uYFxuICAgIGxvZ2dlci5pbmZvKCdQcmludCBKYXIgVmVyc2lvbjogUnVubmluZycpXG4gICAgbG9nZ2VyLmRlYnVnKGBQcmludCBKYXIgVmVyc2lvbjogRXhlY3V0aW5nIFwiJHtjbWR9XCJgKVxuXG4gICAgY2FsbENvcmUoXG4gICAgICAgIGNtZCxcbiAgICAgICAgKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSBsb2dnZXIuZXJyb3IoYFByaW50IEphciBWZXJzaW9uOiBGYWlsZWQgd2l0aCBlcnJvciAke2Vycn1gKVxuICAgICAgICB9LFxuICAgICAgICAobWVzc2FnZSwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikgbG9nZ2VyLmVycm9yKGBQcmludCBKYXIgVmVyc2lvbjogJHttZXNzYWdlfWApXG4gICAgICAgICAgICBlbHNlIGNvbnNvbGUubG9nKGAke21lc3NhZ2V9YClcbiAgICAgICAgfVxuICAgIClcbn1cblxuY29uc3Qgc3RhcnRBcGlDb3ZlcmFnZVNlcnZlciA9IChleHByZXNzQXBwOiBhbnkpOiBQcm9taXNlPGh0dHAuU2VydmVyPiA9PiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBSZWdpc3RlcmluZyBBUEkgZW5kcG9pbnQgZm9yIGNvdmVyYWdlYClcbiAgICBsZXQgYXBwID0gaHR0cC5jcmVhdGVTZXJ2ZXIoKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMud3JpdGVIZWFkKDIwMCwgeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG4gICAgICAgIGNvbnN0IGVuZFBvaW50cyA9IEpTT04uc3RyaW5naWZ5KGV4dHJhY3RFbmRQb2ludHMoZXhwcmVzc0FwcCkpXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRW5kcG9pbnRzOiAke2VuZFBvaW50c31gKVxuICAgICAgICByZXMuZW5kKGVuZFBvaW50cylcbiAgICB9KVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxodHRwLlNlcnZlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBhcHAub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3Igd2hpbGUgc3RhcnRpbmcgZW5kIHBvaW50cyBzZXJ2ZXIgZm9yIGFwaSBjb3ZlcmFnZScsIGVycilcbiAgICAgICAgICAgIHJlamVjdCgnRXJyb3Igd2hpbGUgc3RhcnRpbmcgZW5kIHBvaW50cyBzZXJ2ZXIgZm9yIGFwaSBjb3ZlcmFnZScpXG4gICAgICAgIH0pXG4gICAgICAgIGFwcC5saXN0ZW4oeyBob3N0OiAnMTI3LjAuMC4xJywgcG9ydDogMCB9LCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gYXBwLmFkZHJlc3MoKSBhcyBBZGRyZXNzSW5mbyB8IG51bGxcbiAgICAgICAgICAgIHByb2Nlc3MuZW52WydlbmRwb2ludHNBUEknXSA9IGBodHRwOi8vJHthZGRyZXNzPy5hZGRyZXNzfToke2FkZHJlc3M/LnBvcnR9YFxuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYEVuZHBvaW50cyBBUEkgcmVnaXN0ZXJlZCBhdCAke3Byb2Nlc3MuZW52WydlbmRwb2ludHNBUEknXX1gKVxuICAgICAgICAgICAgcmVzb2x2ZShhcHApXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuY29uc3QgcGFyc2VKdW5pdFhNTCA9ICgpID0+IHtcbiAgICBjb25zdCByZXBvcnRQYXRoID0gcGF0aC5yZXNvbHZlKCdkaXN0L3Rlc3QtcmVwb3J0L1RFU1QtanVuaXQtanVwaXRlci54bWwnKVxuICAgIHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHJlcG9ydFBhdGgpXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFhNTFBhcnNlcigpXG4gICAgdmFyIHJlc3VsdFhtbCA9IHBhcnNlci5wYXJzZShkYXRhKVxuICAgIHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UgPSBBcnJheS5pc0FycmF5KHJlc3VsdFhtbC50ZXN0c3VpdGUudGVzdGNhc2UpID8gcmVzdWx0WG1sLnRlc3RzdWl0ZS50ZXN0Y2FzZSA6IFtyZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlXVxuICAgIHJldHVybiByZXN1bHRYbWwudGVzdHN1aXRlLnRlc3RjYXNlXG59XG5cbmNvbnN0IGxpc3RFbmRQb2ludHMgPSAoZXhwcmVzc0FwcDogYW55KTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0+IHtcbiAgICBjb25zdCBkZXRhaWxzID0gbGlzdEV4cHJlc3NFbmRwb2ludHMoZXhwcmVzc0FwcClcbiAgICBsZXQgZW5kUG9pbnRzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fVxuICAgIGRldGFpbHMubWFwKGFwaURldGFpbCA9PiB7XG4gICAgICAgIGVuZFBvaW50c1thcGlEZXRhaWwucGF0aF0gPSBhcGlEZXRhaWwubWV0aG9kc1xuICAgIH0pXG4gICAgZGVsZXRlIGVuZFBvaW50c1snKiddXG4gICAgcmV0dXJuIGVuZFBvaW50c1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RW5kUG9pbnRzKGV4cHJlc3NBcHA6IGFueSkge1xuICAgIGxldCBlbmRQb2ludHMgPSBsaXN0RW5kUG9pbnRzKGV4cHJlc3NBcHApXG4gICAgbGV0IHNwcmluZ0FjdHVhdG9yUGF5bG9hZCA9IHtcbiAgICAgICAgY29udGV4dHM6IHtcbiAgICAgICAgICAgIGFwcGxpY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlclNlcnZsZXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyU2VydmxldDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfVxuICAgIE9iamVjdC5rZXlzKGVuZFBvaW50cylcbiAgICAgICAgLnNvcnQoKVxuICAgICAgICAubWFwKHBhdGggPT4ge1xuICAgICAgICAgICAgc3ByaW5nQWN0dWF0b3JQYXlsb2FkLmNvbnRleHRzLmFwcGxpY2F0aW9uLm1hcHBpbmdzLmRpc3BhdGNoZXJTZXJ2bGV0cy5kaXNwYXRjaGVyU2VydmxldC5wdXNoKHtcbiAgICAgICAgICAgICAgICBkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nQ29uZGl0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kczogZW5kUG9pbnRzW3BhdGhdLnNvcnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5zOiBbY29udmVydEVuZHBvaW50VG9TcHJpbmdTeW50YXgocGF0aCldLm1hcChyZW1vdmVSZWdleEZyb21QYXRoKVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IGFzIG5ldmVyKVxuICAgICAgICB9KVxuICAgIHJldHVybiBzcHJpbmdBY3R1YXRvclBheWxvYWRcbn1cblxuY29uc3QgY29udmVydEVuZHBvaW50VG9TcHJpbmdTeW50YXggPSAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvOihbXi9dKykvZywgJ3skMX0nKS5yZXBsYWNlKC9cXFxcL2csICcnKVxufVxuXG5jb25zdCByZW1vdmVSZWdleEZyb21QYXRoID0gKHBhdGg6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBwYXRoLnJlcGxhY2UoL1xcKFteKCldKlxcKS9nLCAnJylcbn1cblxuZXhwb3J0IHsgc3RhcnRTdHViLCBzdG9wU3R1YiwgdGVzdCwgdGVzdFdpdGhBcGlDb3ZlcmFnZSwgc2V0RXhwZWN0YXRpb25zLCBzZXRFeHBlY3RhdGlvbkpzb24sIHByaW50SmFyVmVyc2lvbiwgc2hvd1Rlc3RSZXN1bHRzIH1cbmV4cG9ydCB7IHN0YXJ0QXBpQ292ZXJhZ2VTZXJ2ZXIgfVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRSxjQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxHQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENB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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var axios = require('axios');
|
|
4
|
+
var fs = require('fs');
|
|
5
|
+
var path = require('path');
|
|
6
|
+
var packageJson = require('../package.json'); // Import the package.json file
|
|
7
|
+
|
|
8
|
+
var specmaticVersion = packageJson.specmaticVersion;
|
|
9
|
+
var jarUrl = "https://repo1.maven.org/maven2/io/specmatic/specmatic-executable/".concat(specmaticVersion, "/specmatic-executable-").concat(specmaticVersion, "-all.jar");
|
|
10
|
+
var jarFilename = 'specmatic.jar'; // Specify the desired filename for the JAR
|
|
11
|
+
|
|
12
|
+
var downloadPath = path.resolve(__dirname, '..', jarFilename);
|
|
13
|
+
if (fs.existsSync(downloadPath)) {
|
|
14
|
+
console.log("Deleting existing jar ...");
|
|
15
|
+
fs.unlinkSync(downloadPath);
|
|
16
|
+
}
|
|
17
|
+
console.log("Downloading Specmatic jar version: " + specmaticVersion + " ...");
|
|
18
|
+
axios({
|
|
19
|
+
method: 'get',
|
|
20
|
+
url: jarUrl,
|
|
21
|
+
responseType: 'stream'
|
|
22
|
+
}).then(function (response) {
|
|
23
|
+
response.data.pipe(fs.createWriteStream(downloadPath));
|
|
24
|
+
console.log("Finished downloading Specmatic jar");
|
|
25
|
+
})["catch"](function (error) {
|
|
26
|
+
console.error('Error downloading Specmatic Core JAR file version: ' + specmaticVersion, error);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJheGlvcyIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJwYWNrYWdlSnNvbiIsInNwZWNtYXRpY1ZlcnNpb24iLCJqYXJVcmwiLCJjb25jYXQiLCJqYXJGaWxlbmFtZSIsImRvd25sb2FkUGF0aCIsInJlc29sdmUiLCJfX2Rpcm5hbWUiLCJleGlzdHNTeW5jIiwiY29uc29sZSIsImxvZyIsInVubGlua1N5bmMiLCJtZXRob2QiLCJ1cmwiLCJyZXNwb25zZVR5cGUiLCJ0aGVuIiwicmVzcG9uc2UiLCJkYXRhIiwicGlwZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kb3dubG9hZFNwZWNtYXRpY0phci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgcGFja2FnZUpzb24gPSByZXF1aXJlKCcuLi9wYWNrYWdlLmpzb24nKTsgLy8gSW1wb3J0IHRoZSBwYWNrYWdlLmpzb24gZmlsZVxuXG5jb25zdCBzcGVjbWF0aWNWZXJzaW9uID0gcGFja2FnZUpzb24uc3BlY21hdGljVmVyc2lvbjtcbmNvbnN0IGphclVybCA9IGBodHRwczovL3JlcG8xLm1hdmVuLm9yZy9tYXZlbjIvaW8vc3BlY21hdGljL3NwZWNtYXRpYy1leGVjdXRhYmxlLyR7c3BlY21hdGljVmVyc2lvbn0vc3BlY21hdGljLWV4ZWN1dGFibGUtJHtzcGVjbWF0aWNWZXJzaW9ufS1hbGwuamFyYDtcbmNvbnN0IGphckZpbGVuYW1lID0gJ3NwZWNtYXRpYy5qYXInOyAvLyBTcGVjaWZ5IHRoZSBkZXNpcmVkIGZpbGVuYW1lIGZvciB0aGUgSkFSXG5cbmNvbnN0IGRvd25sb2FkUGF0aCA9IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLicsIGphckZpbGVuYW1lKTtcblxuaWYgKGZzLmV4aXN0c1N5bmMoZG93bmxvYWRQYXRoKSkge1xuICBjb25zb2xlLmxvZyhgRGVsZXRpbmcgZXhpc3RpbmcgamFyIC4uLmApO1xuICBmcy51bmxpbmtTeW5jKGRvd25sb2FkUGF0aCk7XG59XG5cbmNvbnNvbGUubG9nKFwiRG93bmxvYWRpbmcgU3BlY21hdGljIGphciB2ZXJzaW9uOiBcIiArIHNwZWNtYXRpY1ZlcnNpb24gKyBcIiAuLi5cIik7XG5heGlvcyh7XG4gIG1ldGhvZDogJ2dldCcsXG4gIHVybDogamFyVXJsLFxuICByZXNwb25zZVR5cGU6ICdzdHJlYW0nLFxufSlcbiAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgcmVzcG9uc2UuZGF0YS5waXBlKGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGRvd25sb2FkUGF0aCkpO1xuICAgIGNvbnNvbGUubG9nKFwiRmluaXNoZWQgZG93bmxvYWRpbmcgU3BlY21hdGljIGphclwiKTtcbiAgfSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIFNwZWNtYXRpYyBDb3JlIEpBUiBmaWxlIHZlcnNpb246ICcgKyBzcGVjbWF0aWNWZXJzaW9uLCBlcnJvcik7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTsiXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBTUEsS0FBSyxHQUFHQyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzlCLElBQU1DLEVBQUUsR0FBR0QsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixJQUFNRSxJQUFJLEdBQUdGLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDNUIsSUFBTUcsV0FBVyxHQUFHSCxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDOztBQUVoRCxJQUFNSSxnQkFBZ0IsR0FBR0QsV0FBVyxDQUFDQyxnQkFBZ0I7QUFDckQsSUFBTUMsTUFBTSx1RUFBQUMsTUFBQSxDQUF1RUYsZ0JBQWdCLDRCQUFBRSxNQUFBLENBQXlCRixnQkFBZ0IsYUFBVTtBQUN0SixJQUFNRyxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUM7O0FBRXJDLElBQU1DLFlBQVksR0FBR04sSUFBSSxDQUFDTyxPQUFPLENBQUNDLFNBQVMsRUFBRSxJQUFJLEVBQUVILFdBQVcsQ0FBQztBQUUvRCxJQUFJTixFQUFFLENBQUNVLFVBQVUsQ0FBQ0gsWUFBWSxDQUFDLEVBQUU7RUFDL0JJLE9BQU8sQ0FBQ0MsR0FBRyw0QkFBNEIsQ0FBQztFQUN4Q1osRUFBRSxDQUFDYSxVQUFVLENBQUNOLFlBQVksQ0FBQztBQUM3QjtBQUVBSSxPQUFPLENBQUNDLEdBQUcsQ0FBQyxxQ0FBcUMsR0FBR1QsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBQzlFTCxLQUFLLENBQUM7RUFDSmdCLE1BQU0sRUFBRSxLQUFLO0VBQ2JDLEdBQUcsRUFBRVgsTUFBTTtFQUNYWSxZQUFZLEVBQUU7QUFDaEIsQ0FBQyxDQUFDLENBQ0NDLElBQUksQ0FBQyxVQUFDQyxRQUFRLEVBQUs7RUFDbEJBLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxJQUFJLENBQUNwQixFQUFFLENBQUNxQixpQkFBaUIsQ0FBQ2QsWUFBWSxDQUFDLENBQUM7RUFDdERJLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLG9DQUFvQyxDQUFDO0FBQ25ELENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQ1UsS0FBSyxFQUFLO0VBQ2hCWCxPQUFPLENBQUNXLEtBQUssQ0FBQyxxREFBcUQsR0FBR25CLGdCQUFnQixFQUFFbUIsS0FBSyxDQUFDO0VBQzlGQyxPQUFPLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
module.exports = expressListEndpoints;
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHByZXNzTGlzdEVuZHBvaW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZXhwcmVzcy1saXN0LWVuZHBvaW50cy9pbmRleC5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCA9IGV4cHJlc3NMaXN0RW5kcG9pbnRzO1xuZGVjbGFyZSBmdW5jdGlvbiBleHByZXNzTGlzdEVuZHBvaW50cyhhcHA6IGltcG9ydCgnZXhwcmVzcycpLkV4cHJlc3MgfCBpbXBvcnQoJ2V4cHJlc3MnKS5Sb3V0ZXIgfCBhbnkpOiBFbmRwb2ludFtdO1xuZGVjbGFyZSBuYW1lc3BhY2UgZXhwcmVzc0xpc3RFbmRwb2ludHMge1xuICAgIGV4cG9ydCB7IFJvdXRlLCBFbmRwb2ludCB9O1xufVxudHlwZSBFbmRwb2ludCA9IHtcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgbWV0aG9kczogc3RyaW5nW107XG4gICAgbWlkZGxld2FyZXM6IHN0cmluZ1tdO1xufTtcbnR5cGUgUm91dGUgPSB7XG4gICAgbWV0aG9kczogT2JqZWN0O1xuICAgIHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHN0YWNrOiBhbnlbXTtcbn07XG4iXSwibWFwcGluZ3MiOiI7O2lCQUFTQSxvQkFBb0IiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
4
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
5
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
6
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
7
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
8
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
9
|
+
Object.defineProperty(exports, "__esModule", {
|
|
10
|
+
value: true
|
|
11
|
+
});
|
|
12
|
+
var regExpToParseExpressPathRegExp = /^\/\^\\?\/?(?:(:?[\w\\.-]*(?:\\\/:?[\w\\.-]*)*)|(\(\?:\\?\/?\([^)]+\)\)))\\\/.*/;
|
|
13
|
+
var regExpToReplaceExpressPathRegExpParams = /\(\?:\\?\/?\([^)]+\)\)/;
|
|
14
|
+
var regexpExpressParamRegexp = /\(\?:\\?\\?\/?\([^)]+\)\)/g;
|
|
15
|
+
var regexpExpressPathParamRegexp = /(:[^)]+)\([^)]+\)/g;
|
|
16
|
+
var EXPRESS_ROOT_PATH_REGEXP_VALUE = '/^\\/?(?=\\/|$)/i';
|
|
17
|
+
var STACK_ITEM_VALID_NAMES = ['router', 'bound dispatch', 'mounted_app'];
|
|
18
|
+
var getRouteMethods = function getRouteMethods(route) {
|
|
19
|
+
var methods = Object.keys(route.methods);
|
|
20
|
+
methods = methods.filter(function (method) {
|
|
21
|
+
return method !== '_all';
|
|
22
|
+
});
|
|
23
|
+
methods = methods.map(function (method) {
|
|
24
|
+
return method.toUpperCase();
|
|
25
|
+
});
|
|
26
|
+
return methods;
|
|
27
|
+
};
|
|
28
|
+
var getRouteMiddlewares = function getRouteMiddlewares(route) {
|
|
29
|
+
return route.stack.map(function (item) {
|
|
30
|
+
return item.handle.name || 'anonymous';
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
var hasParams = function hasParams(expressPathRegExp) {
|
|
34
|
+
return regexpExpressParamRegexp.test(expressPathRegExp);
|
|
35
|
+
};
|
|
36
|
+
function combinePaths(base, path) {
|
|
37
|
+
return (base + path).replace(/\/+/g, "/").replace(/\/$/, "") || "/";
|
|
38
|
+
}
|
|
39
|
+
var parseExpressRoute = function parseExpressRoute(route, basePath) {
|
|
40
|
+
var paths = [];
|
|
41
|
+
if (Array.isArray(route.path)) {
|
|
42
|
+
paths.push.apply(paths, _toConsumableArray(route.path));
|
|
43
|
+
} else {
|
|
44
|
+
paths.push(route.path);
|
|
45
|
+
}
|
|
46
|
+
var endpoints = paths.map(function (path) {
|
|
47
|
+
var completePath = combinePaths(basePath, path);
|
|
48
|
+
var endpoint = {
|
|
49
|
+
path: completePath.replace(regexpExpressPathParamRegexp, '$1'),
|
|
50
|
+
methods: getRouteMethods(route),
|
|
51
|
+
middlewares: getRouteMiddlewares(route)
|
|
52
|
+
};
|
|
53
|
+
return endpoint;
|
|
54
|
+
});
|
|
55
|
+
return endpoints;
|
|
56
|
+
};
|
|
57
|
+
var parseExpressPath = function parseExpressPath(expressPathRegExp, params) {
|
|
58
|
+
var parsedRegExp = expressPathRegExp.toString();
|
|
59
|
+
var expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
|
|
60
|
+
var paramIndex = 0;
|
|
61
|
+
var _loop = function _loop() {
|
|
62
|
+
var paramName = params[paramIndex].name;
|
|
63
|
+
var paramId = ":".concat(paramName);
|
|
64
|
+
parsedRegExp = parsedRegExp.replace(regExpToReplaceExpressPathRegExpParams, function (str) {
|
|
65
|
+
if (str.startsWith('(?:\\/')) {
|
|
66
|
+
return "\\/".concat(paramId);
|
|
67
|
+
}
|
|
68
|
+
return paramId;
|
|
69
|
+
});
|
|
70
|
+
paramIndex++;
|
|
71
|
+
};
|
|
72
|
+
while (hasParams(parsedRegExp)) {
|
|
73
|
+
_loop();
|
|
74
|
+
}
|
|
75
|
+
if (parsedRegExp !== expressPathRegExp.toString()) {
|
|
76
|
+
expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
|
|
77
|
+
}
|
|
78
|
+
var parsedPath = expressPathRegExpExec[1].replace(/\\\//g, '/');
|
|
79
|
+
return parsedPath;
|
|
80
|
+
};
|
|
81
|
+
var parseEndpoints = function parseEndpoints(app, basePath, endpoints) {
|
|
82
|
+
var stack = app.stack || app._router && app._router.stack;
|
|
83
|
+
endpoints = endpoints || [];
|
|
84
|
+
basePath = basePath || '';
|
|
85
|
+
if (!stack) {
|
|
86
|
+
if (endpoints.length) {
|
|
87
|
+
endpoints = addEndpoints(endpoints, [{
|
|
88
|
+
path: basePath,
|
|
89
|
+
methods: [],
|
|
90
|
+
middlewares: []
|
|
91
|
+
}]);
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
endpoints = parseStack(stack, basePath, endpoints);
|
|
95
|
+
}
|
|
96
|
+
return endpoints;
|
|
97
|
+
};
|
|
98
|
+
var addEndpoints = function addEndpoints(currentEndpoints, endpointsToAdd) {
|
|
99
|
+
endpointsToAdd.forEach(function (newEndpoint) {
|
|
100
|
+
var existingEndpoint = currentEndpoints.find(function (endpoint) {
|
|
101
|
+
return endpoint.path === newEndpoint.path;
|
|
102
|
+
});
|
|
103
|
+
if (existingEndpoint !== undefined) {
|
|
104
|
+
var newMethods = newEndpoint.methods.filter(function (method) {
|
|
105
|
+
return !existingEndpoint.methods.includes(method);
|
|
106
|
+
});
|
|
107
|
+
existingEndpoint.methods = existingEndpoint.methods.concat(newMethods);
|
|
108
|
+
} else {
|
|
109
|
+
currentEndpoints.push(newEndpoint);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return currentEndpoints;
|
|
113
|
+
};
|
|
114
|
+
var parseStack = function parseStack(stack, basePath, endpoints) {
|
|
115
|
+
stack.forEach(function (stackItem) {
|
|
116
|
+
if (stackItem.route) {
|
|
117
|
+
var newEndpoints = parseExpressRoute(stackItem.route, basePath);
|
|
118
|
+
endpoints = addEndpoints(endpoints, newEndpoints);
|
|
119
|
+
} else if (STACK_ITEM_VALID_NAMES.includes(stackItem.name)) {
|
|
120
|
+
var isExpressPathRegexp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
|
|
121
|
+
var newBasePath = basePath;
|
|
122
|
+
if (isExpressPathRegexp) {
|
|
123
|
+
var parsedPath = parseExpressPath(stackItem.regexp, stackItem.keys);
|
|
124
|
+
newBasePath += "/".concat(parsedPath);
|
|
125
|
+
} else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
|
|
126
|
+
var regExpPath = " RegExp(".concat(stackItem.regexp, ") ");
|
|
127
|
+
newBasePath += "/".concat(regExpPath);
|
|
128
|
+
}
|
|
129
|
+
endpoints = parseEndpoints(stackItem.handle, newBasePath, endpoints);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
return endpoints;
|
|
133
|
+
};
|
|
134
|
+
var expressListEndpoints = function expressListEndpoints(app) {
|
|
135
|
+
var endpoints = parseEndpoints(app);
|
|
136
|
+
return endpoints;
|
|
137
|
+
};
|
|
138
|
+
module.exports = expressListEndpoints;
|
|
139
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9Db25zdW1hYmxlQXJyYXkiLCJyIiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIlR5cGVFcnJvciIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInQiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJTeW1ib2wiLCJpdGVyYXRvciIsImlzQXJyYXkiLCJsZW5ndGgiLCJlIiwibiIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZXhwb3J0cyIsInZhbHVlIiwicmVnRXhwVG9QYXJzZUV4cHJlc3NQYXRoUmVnRXhwIiwicmVnRXhwVG9SZXBsYWNlRXhwcmVzc1BhdGhSZWdFeHBQYXJhbXMiLCJyZWdleHBFeHByZXNzUGFyYW1SZWdleHAiLCJyZWdleHBFeHByZXNzUGF0aFBhcmFtUmVnZXhwIiwiRVhQUkVTU19ST09UX1BBVEhfUkVHRVhQX1ZBTFVFIiwiU1RBQ0tfSVRFTV9WQUxJRF9OQU1FUyIsImdldFJvdXRlTWV0aG9kcyIsInJvdXRlIiwibWV0aG9kcyIsImtleXMiLCJmaWx0ZXIiLCJtZXRob2QiLCJtYXAiLCJ0b1VwcGVyQ2FzZSIsImdldFJvdXRlTWlkZGxld2FyZXMiLCJzdGFjayIsIml0ZW0iLCJoYW5kbGUiLCJoYXNQYXJhbXMiLCJleHByZXNzUGF0aFJlZ0V4cCIsImNvbWJpbmVQYXRocyIsImJhc2UiLCJwYXRoIiwicmVwbGFjZSIsInBhcnNlRXhwcmVzc1JvdXRlIiwiYmFzZVBhdGgiLCJwYXRocyIsInB1c2giLCJhcHBseSIsImVuZHBvaW50cyIsImNvbXBsZXRlUGF0aCIsImVuZHBvaW50IiwibWlkZGxld2FyZXMiLCJwYXJzZUV4cHJlc3NQYXRoIiwicGFyYW1zIiwicGFyc2VkUmVnRXhwIiwiZXhwcmVzc1BhdGhSZWdFeHBFeGVjIiwiZXhlYyIsInBhcmFtSW5kZXgiLCJfbG9vcCIsInBhcmFtTmFtZSIsInBhcmFtSWQiLCJjb25jYXQiLCJzdHIiLCJzdGFydHNXaXRoIiwicGFyc2VkUGF0aCIsInBhcnNlRW5kcG9pbnRzIiwiYXBwIiwiX3JvdXRlciIsImFkZEVuZHBvaW50cyIsInBhcnNlU3RhY2siLCJjdXJyZW50RW5kcG9pbnRzIiwiZW5kcG9pbnRzVG9BZGQiLCJmb3JFYWNoIiwibmV3RW5kcG9pbnQiLCJleGlzdGluZ0VuZHBvaW50IiwiZmluZCIsInVuZGVmaW5lZCIsIm5ld01ldGhvZHMiLCJpbmNsdWRlcyIsInN0YWNrSXRlbSIsIm5ld0VuZHBvaW50cyIsImlzRXhwcmVzc1BhdGhSZWdleHAiLCJyZWdleHAiLCJuZXdCYXNlUGF0aCIsInJlZ0V4cFBhdGgiLCJleHByZXNzTGlzdEVuZHBvaW50cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZXhwcmVzcy1saXN0LWVuZHBvaW50cy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHJlZ0V4cFRvUGFyc2VFeHByZXNzUGF0aFJlZ0V4cCA9IC9eXFwvXFxeXFxcXD9cXC8/KD86KDo/W1xcd1xcXFwuLV0qKD86XFxcXFxcLzo/W1xcd1xcXFwuLV0qKSopfChcXChcXD86XFxcXD9cXC8/XFwoW14pXStcXClcXCkpKVxcXFxcXC8uKi87XG5jb25zdCByZWdFeHBUb1JlcGxhY2VFeHByZXNzUGF0aFJlZ0V4cFBhcmFtcyA9IC9cXChcXD86XFxcXD9cXC8/XFwoW14pXStcXClcXCkvO1xuY29uc3QgcmVnZXhwRXhwcmVzc1BhcmFtUmVnZXhwID0gL1xcKFxcPzpcXFxcP1xcXFw/XFwvP1xcKFteKV0rXFwpXFwpL2c7XG5jb25zdCByZWdleHBFeHByZXNzUGF0aFBhcmFtUmVnZXhwID0gLyg6W14pXSspXFwoW14pXStcXCkvZztcbmNvbnN0IEVYUFJFU1NfUk9PVF9QQVRIX1JFR0VYUF9WQUxVRSA9ICcvXlxcXFwvPyg/PVxcXFwvfCQpL2knO1xuY29uc3QgU1RBQ0tfSVRFTV9WQUxJRF9OQU1FUyA9IFtcbiAgICAncm91dGVyJyxcbiAgICAnYm91bmQgZGlzcGF0Y2gnLFxuICAgICdtb3VudGVkX2FwcCdcbl07XG5jb25zdCBnZXRSb3V0ZU1ldGhvZHMgPSBmdW5jdGlvbiAocm91dGUpIHtcbiAgICBsZXQgbWV0aG9kcyA9IE9iamVjdC5rZXlzKHJvdXRlLm1ldGhvZHMpO1xuICAgIG1ldGhvZHMgPSBtZXRob2RzLmZpbHRlcigobWV0aG9kKSA9PiBtZXRob2QgIT09ICdfYWxsJyk7XG4gICAgbWV0aG9kcyA9IG1ldGhvZHMubWFwKChtZXRob2QpID0+IG1ldGhvZC50b1VwcGVyQ2FzZSgpKTtcbiAgICByZXR1cm4gbWV0aG9kcztcbn07XG5jb25zdCBnZXRSb3V0ZU1pZGRsZXdhcmVzID0gZnVuY3Rpb24gKHJvdXRlKSB7XG4gICAgcmV0dXJuIHJvdXRlLnN0YWNrLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5oYW5kbGUubmFtZSB8fCAnYW5vbnltb3VzJztcbiAgICB9KTtcbn07XG5jb25zdCBoYXNQYXJhbXMgPSBmdW5jdGlvbiAoZXhwcmVzc1BhdGhSZWdFeHApIHtcbiAgICByZXR1cm4gcmVnZXhwRXhwcmVzc1BhcmFtUmVnZXhwLnRlc3QoZXhwcmVzc1BhdGhSZWdFeHApO1xufTtcbmZ1bmN0aW9uIGNvbWJpbmVQYXRocyhiYXNlLCBwYXRoKSB7XG4gICAgcmV0dXJuIChiYXNlICsgcGF0aCkucmVwbGFjZSgvXFwvKy9nLCBcIi9cIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpIHx8IFwiL1wiO1xufVxuY29uc3QgcGFyc2VFeHByZXNzUm91dGUgPSBmdW5jdGlvbiAocm91dGUsIGJhc2VQYXRoKSB7XG4gICAgY29uc3QgcGF0aHMgPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZS5wYXRoKSkge1xuICAgICAgICBwYXRocy5wdXNoKC4uLnJvdXRlLnBhdGgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcGF0aHMucHVzaChyb3V0ZS5wYXRoKTtcbiAgICB9XG4gICAgY29uc3QgZW5kcG9pbnRzID0gcGF0aHMubWFwKChwYXRoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRlUGF0aCA9IGNvbWJpbmVQYXRocyhiYXNlUGF0aCwgcGF0aCk7XG4gICAgICAgIGNvbnN0IGVuZHBvaW50ID0ge1xuICAgICAgICAgICAgcGF0aDogY29tcGxldGVQYXRoLnJlcGxhY2UocmVnZXhwRXhwcmVzc1BhdGhQYXJhbVJlZ2V4cCwgJyQxJyksXG4gICAgICAgICAgICBtZXRob2RzOiBnZXRSb3V0ZU1ldGhvZHMocm91dGUpLFxuICAgICAgICAgICAgbWlkZGxld2FyZXM6IGdldFJvdXRlTWlkZGxld2FyZXMocm91dGUpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBlbmRwb2ludDtcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kcG9pbnRzO1xufTtcbmNvbnN0IHBhcnNlRXhwcmVzc1BhdGggPSBmdW5jdGlvbiAoZXhwcmVzc1BhdGhSZWdFeHAsIHBhcmFtcykge1xuICAgIGxldCBwYXJzZWRSZWdFeHAgPSBleHByZXNzUGF0aFJlZ0V4cC50b1N0cmluZygpO1xuICAgIGxldCBleHByZXNzUGF0aFJlZ0V4cEV4ZWMgPSByZWdFeHBUb1BhcnNlRXhwcmVzc1BhdGhSZWdFeHAuZXhlYyhwYXJzZWRSZWdFeHApO1xuICAgIGxldCBwYXJhbUluZGV4ID0gMDtcbiAgICB3aGlsZSAoaGFzUGFyYW1zKHBhcnNlZFJlZ0V4cCkpIHtcbiAgICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW1zW3BhcmFtSW5kZXhdLm5hbWU7XG4gICAgICAgIGNvbnN0IHBhcmFtSWQgPSBgOiR7cGFyYW1OYW1lfWA7XG4gICAgICAgIHBhcnNlZFJlZ0V4cCA9IHBhcnNlZFJlZ0V4cFxuICAgICAgICAgICAgLnJlcGxhY2UocmVnRXhwVG9SZXBsYWNlRXhwcmVzc1BhdGhSZWdFeHBQYXJhbXMsIChzdHIpID0+IHtcbiAgICAgICAgICAgIGlmIChzdHIuc3RhcnRzV2l0aCgnKD86XFxcXC8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgXFxcXC8ke3BhcmFtSWR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJhbUlkO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyYW1JbmRleCsrO1xuICAgIH1cbiAgICBpZiAocGFyc2VkUmVnRXhwICE9PSBleHByZXNzUGF0aFJlZ0V4cC50b1N0cmluZygpKSB7XG4gICAgICAgIGV4cHJlc3NQYXRoUmVnRXhwRXhlYyA9IHJlZ0V4cFRvUGFyc2VFeHByZXNzUGF0aFJlZ0V4cC5leGVjKHBhcnNlZFJlZ0V4cCk7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZFBhdGggPSBleHByZXNzUGF0aFJlZ0V4cEV4ZWNbMV0ucmVwbGFjZSgvXFxcXFxcLy9nLCAnLycpO1xuICAgIHJldHVybiBwYXJzZWRQYXRoO1xufTtcbmNvbnN0IHBhcnNlRW5kcG9pbnRzID0gZnVuY3Rpb24gKGFwcCwgYmFzZVBhdGgsIGVuZHBvaW50cykge1xuICAgIGNvbnN0IHN0YWNrID0gYXBwLnN0YWNrIHx8IChhcHAuX3JvdXRlciAmJiBhcHAuX3JvdXRlci5zdGFjayk7XG4gICAgZW5kcG9pbnRzID0gZW5kcG9pbnRzIHx8IFtdO1xuICAgIGJhc2VQYXRoID0gYmFzZVBhdGggfHwgJyc7XG4gICAgaWYgKCFzdGFjaykge1xuICAgICAgICBpZiAoZW5kcG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZW5kcG9pbnRzID0gYWRkRW5kcG9pbnRzKGVuZHBvaW50cywgW3tcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogYmFzZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZHM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBtaWRkbGV3YXJlczogW11cbiAgICAgICAgICAgICAgICB9XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVuZHBvaW50cyA9IHBhcnNlU3RhY2soc3RhY2ssIGJhc2VQYXRoLCBlbmRwb2ludHMpO1xuICAgIH1cbiAgICByZXR1cm4gZW5kcG9pbnRzO1xufTtcbmNvbnN0IGFkZEVuZHBvaW50cyA9IGZ1bmN0aW9uIChjdXJyZW50RW5kcG9pbnRzLCBlbmRwb2ludHNUb0FkZCkge1xuICAgIGVuZHBvaW50c1RvQWRkLmZvckVhY2goKG5ld0VuZHBvaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW5kcG9pbnQgPSBjdXJyZW50RW5kcG9pbnRzLmZpbmQoKGVuZHBvaW50KSA9PiBlbmRwb2ludC5wYXRoID09PSBuZXdFbmRwb2ludC5wYXRoKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nRW5kcG9pbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3TWV0aG9kcyA9IG5ld0VuZHBvaW50Lm1ldGhvZHMuZmlsdGVyKChtZXRob2QpID0+ICFleGlzdGluZ0VuZHBvaW50Lm1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSk7XG4gICAgICAgICAgICBleGlzdGluZ0VuZHBvaW50Lm1ldGhvZHMgPSBleGlzdGluZ0VuZHBvaW50Lm1ldGhvZHMuY29uY2F0KG5ld01ldGhvZHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudEVuZHBvaW50cy5wdXNoKG5ld0VuZHBvaW50KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjdXJyZW50RW5kcG9pbnRzO1xufTtcbmNvbnN0IHBhcnNlU3RhY2sgPSBmdW5jdGlvbiAoc3RhY2ssIGJhc2VQYXRoLCBlbmRwb2ludHMpIHtcbiAgICBzdGFjay5mb3JFYWNoKChzdGFja0l0ZW0pID0+IHtcbiAgICAgICAgaWYgKHN0YWNrSXRlbS5yb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RW5kcG9pbnRzID0gcGFyc2VFeHByZXNzUm91dGUoc3RhY2tJdGVtLnJvdXRlLCBiYXNlUGF0aCk7XG4gICAgICAgICAgICBlbmRwb2ludHMgPSBhZGRFbmRwb2ludHMoZW5kcG9pbnRzLCBuZXdFbmRwb2ludHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFNUQUNLX0lURU1fVkFMSURfTkFNRVMuaW5jbHVkZXMoc3RhY2tJdGVtLm5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBpc0V4cHJlc3NQYXRoUmVnZXhwID0gcmVnRXhwVG9QYXJzZUV4cHJlc3NQYXRoUmVnRXhwLnRlc3Qoc3RhY2tJdGVtLnJlZ2V4cCk7XG4gICAgICAgICAgICBsZXQgbmV3QmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgICAgIGlmIChpc0V4cHJlc3NQYXRoUmVnZXhwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUGF0aCA9IHBhcnNlRXhwcmVzc1BhdGgoc3RhY2tJdGVtLnJlZ2V4cCwgc3RhY2tJdGVtLmtleXMpO1xuICAgICAgICAgICAgICAgIG5ld0Jhc2VQYXRoICs9IGAvJHtwYXJzZWRQYXRofWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghc3RhY2tJdGVtLnBhdGggJiYgc3RhY2tJdGVtLnJlZ2V4cCAmJiBzdGFja0l0ZW0ucmVnZXhwLnRvU3RyaW5nKCkgIT09IEVYUFJFU1NfUk9PVF9QQVRIX1JFR0VYUF9WQUxVRSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZ0V4cFBhdGggPSBgIFJlZ0V4cCgke3N0YWNrSXRlbS5yZWdleHB9KSBgO1xuICAgICAgICAgICAgICAgIG5ld0Jhc2VQYXRoICs9IGAvJHtyZWdFeHBQYXRofWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRwb2ludHMgPSBwYXJzZUVuZHBvaW50cyhzdGFja0l0ZW0uaGFuZGxlLCBuZXdCYXNlUGF0aCwgZW5kcG9pbnRzKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludHM7XG59O1xuY29uc3QgZXhwcmVzc0xpc3RFbmRwb2ludHMgPSBmdW5jdGlvbiAoYXBwKSB7XG4gICAgY29uc3QgZW5kcG9pbnRzID0gcGFyc2VFbmRwb2ludHMoYXBwKTtcbiAgICByZXR1cm4gZW5kcG9pbnRzO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZXhwcmVzc0xpc3RFbmRwb2ludHM7XG4iXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7O0FBQUMsU0FBQUEsbUJBQUFDLENBQUEsV0FBQUMsa0JBQUEsQ0FBQUQsQ0FBQSxLQUFBRSxnQkFBQSxDQUFBRixDQUFBLEtBQUFHLDJCQUFBLENBQUFILENBQUEsS0FBQUksa0JBQUE7QUFBQSxTQUFBQSxtQkFBQSxjQUFBQyxTQUFBO0FBQUEsU0FBQUYsNEJBQUFILENBQUEsRUFBQU0sQ0FBQSxRQUFBTixDQUFBLDJCQUFBQSxDQUFBLFNBQUFPLGlCQUFBLENBQUFQLENBQUEsRUFBQU0sQ0FBQSxPQUFBRSxDQUFBLE1BQUFDLFFBQUEsQ0FBQUMsSUFBQSxDQUFBVixDQUFBLEVBQUFXLEtBQUEsNkJBQUFILENBQUEsSUFBQVIsQ0FBQSxDQUFBWSxXQUFBLEtBQUFKLENBQUEsR0FBQVIsQ0FBQSxDQUFBWSxXQUFBLENBQUFDLElBQUEsYUFBQUwsQ0FBQSxjQUFBQSxDQUFBLEdBQUFNLEtBQUEsQ0FBQUMsSUFBQSxDQUFBZixDQUFBLG9CQUFBUSxDQUFBLCtDQUFBUSxJQUFBLENBQUFSLENBQUEsSUFBQUQsaUJBQUEsQ0FBQVAsQ0FBQSxFQUFBTSxDQUFBO0FBQUEsU0FBQUosaUJBQUFGLENBQUEsOEJBQUFpQixNQUFBLFlBQUFqQixDQUFBLENBQUFpQixNQUFBLENBQUFDLFFBQUEsYUFBQWxCLENBQUEsdUJBQUFjLEtBQUEsQ0FBQUMsSUFBQSxDQUFBZixDQUFBO0FBQUEsU0FBQUMsbUJBQUFELENBQUEsUUFBQWMsS0FBQSxDQUFBSyxPQUFBLENBQUFuQixDQUFBLFVBQUFPLGlCQUFBLENBQUFQLENBQUE7QUFBQSxT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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specmatic",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"specmaticVersion": "2.0.
|
|
3
|
+
"version": "2.0.41",
|
|
4
|
+
"specmaticVersion": "2.0.41",
|
|
5
5
|
"description": "Node wrapper for Specmatic",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"scripts": {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"type-check:watch": "npm run type-check -- --watch",
|
|
10
10
|
"build": "npm test && rimraf dist && npm run build:types && npm run build:js",
|
|
11
11
|
"build:types": "tsc --emitDeclarationOnly",
|
|
12
|
-
"build:js": "babel src --out-dir dist --ignore 'src/**/__tests__/**/*.ts' --extensions \".ts,.tsx\"
|
|
12
|
+
"build:js": "babel src --out-dir dist --ignore 'src/**/__tests__/**/*.ts' --extensions \".ts,.js,.tsx\" --source-maps inline",
|
|
13
13
|
"test": "rimraf coverage && jest --coverage",
|
|
14
14
|
"prepack": "node src/downloadSpecmaticJar.js",
|
|
15
15
|
"prepare": "npm run prepack && npm run build:types && npm run build:js"
|
|
@@ -48,7 +48,6 @@
|
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
50
|
"axios": "^1.7.7",
|
|
51
|
-
"express-list-endpoints": "github:znsio/express-list-endpoints#21c92d15159abffd772acb27027ab84fcec1a6ac",
|
|
52
51
|
"fast-xml-parser": "^4.5.0",
|
|
53
52
|
"terminate": "^2.8.0",
|
|
54
53
|
"tree-kill": "^1.2.2",
|
|
@@ -61,7 +60,6 @@
|
|
|
61
60
|
"@babel/preset-env": "^7.25.4",
|
|
62
61
|
"@babel/preset-typescript": "^7.24.7",
|
|
63
62
|
"@types/express": "^5.0.0",
|
|
64
|
-
"@types/express-list-endpoints": "github:znsio/express-list-endpoints#21c92d15159abffd772acb27027ab84fcec1a6ac",
|
|
65
63
|
"@types/jest": "^29.5.13",
|
|
66
64
|
"@types/jest-when": "^3.5.5",
|
|
67
65
|
"@types/node": "^22.7.2",
|
package/specmatic.jar
CHANGED
|
Binary file
|
|
@@ -76,3 +76,27 @@ test('setExpectations notifies as failure when status code is not 200', async ()
|
|
|
76
76
|
expect(axios.post.mock.calls[0][0]).toBe(`${stubServerBaseUrl}/_specmatic/expectations`);
|
|
77
77
|
expect(axios.post.mock.calls[0][1]).toMatchObject(mockStub);
|
|
78
78
|
});
|
|
79
|
+
|
|
80
|
+
test('setExpectations prints proper error message from specmatic when status code is not 200', async () => {
|
|
81
|
+
const errorMessage = {
|
|
82
|
+
code: 'ERR_BAD_REQUEST', // This is often the code for HTTP 400 errors in Axios
|
|
83
|
+
message: 'Request failed with status code 400', // A summary of the error
|
|
84
|
+
response: {
|
|
85
|
+
data: "No match was found. Key named status in the stub was not in the contract",
|
|
86
|
+
status: 400, // HTTP status code
|
|
87
|
+
statusText: 'Bad Request', // Status text corresponding to 400
|
|
88
|
+
headers: {
|
|
89
|
+
'content-type': 'text/plain' // Header indicating the response type is plain text
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
axios.post.mockReturnValue(Promise.reject(errorMessage));
|
|
95
|
+
const stubServerBaseUrl = 'http://localhost:8000';
|
|
96
|
+
|
|
97
|
+
await expect(specmatic.setExpectations(path.resolve(STUB_PATH), stubServerBaseUrl)).rejects.toContain('No match was found. Key named status in the stub was not in the contract');
|
|
98
|
+
|
|
99
|
+
expect(axios.post).toHaveBeenCalledTimes(1);
|
|
100
|
+
expect(axios.post.mock.calls[0][0]).toBe(`${stubServerBaseUrl}/_specmatic/expectations`);
|
|
101
|
+
expect(axios.post.mock.calls[0][1]).toMatchObject(mockStub);
|
|
102
|
+
});
|
package/src/core/index.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { XMLParser } from 'fast-xml-parser'
|
|
|
5
5
|
import fs from 'fs'
|
|
6
6
|
import logger from '../common/logger'
|
|
7
7
|
import { callCore } from '../common/runner'
|
|
8
|
-
import listExpressEndpoints from 'express-list-endpoints'
|
|
8
|
+
import listExpressEndpoints from '../lib/express-list-endpoints';
|
|
9
9
|
import http from 'http'
|
|
10
10
|
import { AddressInfo } from 'net'
|
|
11
11
|
import { gracefulShutdown } from './shutdownUtils'
|
|
@@ -157,7 +157,7 @@ const setExpectations = (stubPath: string, stubServerBaseUrl?: string): Promise<
|
|
|
157
157
|
|
|
158
158
|
const setExpectationJson = (stubResponse: any, stubServerBaseUrl?: string): Promise<void> => {
|
|
159
159
|
stubServerBaseUrl = stubServerBaseUrl || 'http://localhost:9000'
|
|
160
|
-
|
|
160
|
+
|
|
161
161
|
logger.info(`Set Expectations: Stub url is ${stubServerBaseUrl}`)
|
|
162
162
|
|
|
163
163
|
return new Promise((resolve, reject) => {
|
|
@@ -169,7 +169,17 @@ const setExpectationJson = (stubResponse: any, stubServerBaseUrl?: string): Prom
|
|
|
169
169
|
resolve()
|
|
170
170
|
})
|
|
171
171
|
.catch(err => {
|
|
172
|
-
|
|
172
|
+
var setExpectationsErrorMessage = `Set Expectations: Failed with error ${err}`
|
|
173
|
+
// Check if the response data is in text format
|
|
174
|
+
if (err && err.response?.headers['content-type'] === 'text/plain') {
|
|
175
|
+
try {
|
|
176
|
+
// Use a check to handle text content
|
|
177
|
+
const errorText = typeof err.response.data === 'string' ? err.response.data : "Error text not available";
|
|
178
|
+
setExpectationsErrorMessage += ` - ${errorText}`;
|
|
179
|
+
} catch (e) {
|
|
180
|
+
logger.error("Failed to retrieve text error message.");
|
|
181
|
+
}
|
|
182
|
+
}
|
|
173
183
|
logger.error(setExpectationsErrorMessage)
|
|
174
184
|
reject(setExpectationsErrorMessage)
|
|
175
185
|
})
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export = expressListEndpoints;
|
|
2
|
+
declare function expressListEndpoints(app: import('express').Express | import('express').Router | any): Endpoint[];
|
|
3
|
+
declare namespace expressListEndpoints {
|
|
4
|
+
export { Route, Endpoint };
|
|
5
|
+
}
|
|
6
|
+
type Endpoint = {
|
|
7
|
+
path: string;
|
|
8
|
+
methods: string[];
|
|
9
|
+
middlewares: string[];
|
|
10
|
+
};
|
|
11
|
+
type Route = {
|
|
12
|
+
methods: Object;
|
|
13
|
+
path: string | string[];
|
|
14
|
+
stack: any[];
|
|
15
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const regExpToParseExpressPathRegExp = /^\/\^\\?\/?(?:(:?[\w\\.-]*(?:\\\/:?[\w\\.-]*)*)|(\(\?:\\?\/?\([^)]+\)\)))\\\/.*/;
|
|
4
|
+
const regExpToReplaceExpressPathRegExpParams = /\(\?:\\?\/?\([^)]+\)\)/;
|
|
5
|
+
const regexpExpressParamRegexp = /\(\?:\\?\\?\/?\([^)]+\)\)/g;
|
|
6
|
+
const regexpExpressPathParamRegexp = /(:[^)]+)\([^)]+\)/g;
|
|
7
|
+
const EXPRESS_ROOT_PATH_REGEXP_VALUE = '/^\\/?(?=\\/|$)/i';
|
|
8
|
+
const STACK_ITEM_VALID_NAMES = [
|
|
9
|
+
'router',
|
|
10
|
+
'bound dispatch',
|
|
11
|
+
'mounted_app'
|
|
12
|
+
];
|
|
13
|
+
const getRouteMethods = function (route) {
|
|
14
|
+
let methods = Object.keys(route.methods);
|
|
15
|
+
methods = methods.filter((method) => method !== '_all');
|
|
16
|
+
methods = methods.map((method) => method.toUpperCase());
|
|
17
|
+
return methods;
|
|
18
|
+
};
|
|
19
|
+
const getRouteMiddlewares = function (route) {
|
|
20
|
+
return route.stack.map((item) => {
|
|
21
|
+
return item.handle.name || 'anonymous';
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
const hasParams = function (expressPathRegExp) {
|
|
25
|
+
return regexpExpressParamRegexp.test(expressPathRegExp);
|
|
26
|
+
};
|
|
27
|
+
function combinePaths(base, path) {
|
|
28
|
+
return (base + path).replace(/\/+/g, "/").replace(/\/$/, "") || "/";
|
|
29
|
+
}
|
|
30
|
+
const parseExpressRoute = function (route, basePath) {
|
|
31
|
+
const paths = [];
|
|
32
|
+
if (Array.isArray(route.path)) {
|
|
33
|
+
paths.push(...route.path);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
paths.push(route.path);
|
|
37
|
+
}
|
|
38
|
+
const endpoints = paths.map((path) => {
|
|
39
|
+
const completePath = combinePaths(basePath, path);
|
|
40
|
+
const endpoint = {
|
|
41
|
+
path: completePath.replace(regexpExpressPathParamRegexp, '$1'),
|
|
42
|
+
methods: getRouteMethods(route),
|
|
43
|
+
middlewares: getRouteMiddlewares(route)
|
|
44
|
+
};
|
|
45
|
+
return endpoint;
|
|
46
|
+
});
|
|
47
|
+
return endpoints;
|
|
48
|
+
};
|
|
49
|
+
const parseExpressPath = function (expressPathRegExp, params) {
|
|
50
|
+
let parsedRegExp = expressPathRegExp.toString();
|
|
51
|
+
let expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
|
|
52
|
+
let paramIndex = 0;
|
|
53
|
+
while (hasParams(parsedRegExp)) {
|
|
54
|
+
const paramName = params[paramIndex].name;
|
|
55
|
+
const paramId = `:${paramName}`;
|
|
56
|
+
parsedRegExp = parsedRegExp
|
|
57
|
+
.replace(regExpToReplaceExpressPathRegExpParams, (str) => {
|
|
58
|
+
if (str.startsWith('(?:\\/')) {
|
|
59
|
+
return `\\/${paramId}`;
|
|
60
|
+
}
|
|
61
|
+
return paramId;
|
|
62
|
+
});
|
|
63
|
+
paramIndex++;
|
|
64
|
+
}
|
|
65
|
+
if (parsedRegExp !== expressPathRegExp.toString()) {
|
|
66
|
+
expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
|
|
67
|
+
}
|
|
68
|
+
const parsedPath = expressPathRegExpExec[1].replace(/\\\//g, '/');
|
|
69
|
+
return parsedPath;
|
|
70
|
+
};
|
|
71
|
+
const parseEndpoints = function (app, basePath, endpoints) {
|
|
72
|
+
const stack = app.stack || (app._router && app._router.stack);
|
|
73
|
+
endpoints = endpoints || [];
|
|
74
|
+
basePath = basePath || '';
|
|
75
|
+
if (!stack) {
|
|
76
|
+
if (endpoints.length) {
|
|
77
|
+
endpoints = addEndpoints(endpoints, [{
|
|
78
|
+
path: basePath,
|
|
79
|
+
methods: [],
|
|
80
|
+
middlewares: []
|
|
81
|
+
}]);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
endpoints = parseStack(stack, basePath, endpoints);
|
|
86
|
+
}
|
|
87
|
+
return endpoints;
|
|
88
|
+
};
|
|
89
|
+
const addEndpoints = function (currentEndpoints, endpointsToAdd) {
|
|
90
|
+
endpointsToAdd.forEach((newEndpoint) => {
|
|
91
|
+
const existingEndpoint = currentEndpoints.find((endpoint) => endpoint.path === newEndpoint.path);
|
|
92
|
+
if (existingEndpoint !== undefined) {
|
|
93
|
+
const newMethods = newEndpoint.methods.filter((method) => !existingEndpoint.methods.includes(method));
|
|
94
|
+
existingEndpoint.methods = existingEndpoint.methods.concat(newMethods);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
currentEndpoints.push(newEndpoint);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
return currentEndpoints;
|
|
101
|
+
};
|
|
102
|
+
const parseStack = function (stack, basePath, endpoints) {
|
|
103
|
+
stack.forEach((stackItem) => {
|
|
104
|
+
if (stackItem.route) {
|
|
105
|
+
const newEndpoints = parseExpressRoute(stackItem.route, basePath);
|
|
106
|
+
endpoints = addEndpoints(endpoints, newEndpoints);
|
|
107
|
+
}
|
|
108
|
+
else if (STACK_ITEM_VALID_NAMES.includes(stackItem.name)) {
|
|
109
|
+
const isExpressPathRegexp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
|
|
110
|
+
let newBasePath = basePath;
|
|
111
|
+
if (isExpressPathRegexp) {
|
|
112
|
+
const parsedPath = parseExpressPath(stackItem.regexp, stackItem.keys);
|
|
113
|
+
newBasePath += `/${parsedPath}`;
|
|
114
|
+
}
|
|
115
|
+
else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
|
|
116
|
+
const regExpPath = ` RegExp(${stackItem.regexp}) `;
|
|
117
|
+
newBasePath += `/${regExpPath}`;
|
|
118
|
+
}
|
|
119
|
+
endpoints = parseEndpoints(stackItem.handle, newBasePath, endpoints);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
return endpoints;
|
|
123
|
+
};
|
|
124
|
+
const expressListEndpoints = function (app) {
|
|
125
|
+
const endpoints = parseEndpoints(app);
|
|
126
|
+
return endpoints;
|
|
127
|
+
};
|
|
128
|
+
module.exports = expressListEndpoints;
|