@recursyve/nestjs-data-filter 8.3.1 → 8.3.4
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/lib/data-filter.repository.js +4 -1
- package/lib/filter/filter.service.d.ts +2 -0
- package/lib/filter/filter.service.js +69 -46
- package/lib/filter/filters/geo-bounds.filter.js +2 -2
- package/lib/models/distance.model.d.ts +11 -3
- package/lib/models/distance.model.js +12 -3
- package/lib/models/filter.model.d.ts +2 -1
- package/lib/models/filter.model.js +1 -1
- package/lib/scanners/sequelize-model.scanner.js +2 -2
- package/package.json +1 -1
|
@@ -262,6 +262,9 @@ let DataFilterRepository = class DataFilterRepository {
|
|
|
262
262
|
if (!options.where) {
|
|
263
263
|
options.where = { [sequelize_1.Op.and]: [] };
|
|
264
264
|
}
|
|
265
|
+
else {
|
|
266
|
+
options.where = { [sequelize_1.Op.and]: [options.where] };
|
|
267
|
+
}
|
|
265
268
|
const where = options.where;
|
|
266
269
|
const generateFieldsObject = searchValue => this.getSearchAttributes()
|
|
267
270
|
.map(a => {
|
|
@@ -343,4 +346,4 @@ DataFilterRepository = __decorate([
|
|
|
343
346
|
], DataFilterRepository);
|
|
344
347
|
exports.DataFilterRepository = DataFilterRepository;
|
|
345
348
|
|
|
346
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBb0c7QUFDcEcseUNBQW1GO0FBR25GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxpREFBNkM7QUFDN0MsbURBQStDO0FBRy9DLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBUTdCLFlBQ1ksT0FBWSxFQUNaLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUw1QixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUVwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQWJELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFpQixDQUFDO0lBQzFDLENBQUM7SUFhTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjtRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNqRCxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDdkMsR0FBRyxDQUFDLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxNQUF5QixDQUFDO1NBQ3BD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dUNBQWlCO1FBQ2IsK0NBQXFCO1FBQ3RCLCtCQUFvQjtRQUN4QiwyQkFBZ0I7UUFDbkIsd0JBQWE7R0FkL0Isb0JBQW9CLENBc1loQztBQXRZWSxvREFBb0IiLCJmaWxlIjoibGliL2RhdGEtZmlsdGVyLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBGaW5kT3B0aW9ucywgSWRlbnRpZmllciwgSW5jbHVkZU9wdGlvbnMsIE1vZGVsLCBPcCwgVXRpbHMsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLCBFeHBvcnRBZGFwdGVyLCBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4vYWRhcHRlcnNcIjtcbmltcG9ydCB7IEF0dHJpYnV0ZXNDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlckNvbmZpZyB9IGZyb20gXCIuL21vZGVscy9kYXRhLWZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZXMgfSBmcm9tIFwiLi9tb2RlbHMvZXhwb3J0LXR5cGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBPcmRlck1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHsgUGF0aE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3BhdGgubW9kZWxcIjtcbmltcG9ydCB7IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zZWFyY2gtYXR0cmlidXRlcy5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuL21vZGVscy91c2VyLm1vZGVsXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL2RhdGEtZmlsdGVyLnNjYW5uZXJcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyXCI7XG5pbXBvcnQgeyBNLCBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgQ3N2VXRpbHMgfSBmcm9tIFwiLi91dGlscy9jc3YudXRpbHNcIjtcbmltcG9ydCB7IFhsc3hVdGlscyB9IGZyb20gXCIuL3V0aWxzL3hsc3gudXRpbHNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+IHtcbiAgICBwcml2YXRlIF9jb25maWc6IERhdGFGaWx0ZXJDb25maWc7XG4gICAgcHJpdmF0ZSBfZGVmaW5pdGlvbnM6IEF0dHJpYnV0ZXNDb25maWdbXTtcblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKTogdHlwZW9mIE0ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnLm1vZGVsIGFzIHR5cGVvZiBNO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRhdGFEZWY6IGFueSxcbiAgICAgICAgcHJpdmF0ZSBkYXRhRmlsdGVyU2Nhbm5lcjogRGF0YUZpbHRlclNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgc2VxdWVsaXplTW9kZWxTY2FubmVyOiBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgYWNjZXNzQ29udHJvbEFkYXB0ZXI6IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgZXhwb3J0QWRhcHRlcjogRXhwb3J0QWRhcHRlclxuICAgICkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEJ5UGsoaWRlbnRpZmllcjogSWRlbnRpZmllciwgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEJ5UGsoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMgPz8ge30pXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlT2JqZWN0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRCeVBrRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgaWRlbnRpZmllcjogSWRlbnRpZmllciwgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlcyh0aGlzLl9jb25maWcubW9kZWwgYXMgYW55LCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHM/LmluY2x1ZGVzKGlkZW50aWZpZXIgYXMgbnVtYmVyKSB8fCByZXNvdXJjZXMuYWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQnlQayhpZGVudGlmaWVyLCBjb25kaXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRPbmUoe1xuICAgICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbdGhpcy5fY29uZmlnLm1vZGVsLnByaW1hcnlLZXlBdHRyaWJ1dGVdOiBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy53aGVyZSA/PyB7fVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgY29uZGl0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRPbmUob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZE9uZSh7XG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucyksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucyA/PyB7fSlcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yZWR1Y2VPYmplY3QocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZE9uZUZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zID0ge30sIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGE+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZE9uZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBhd2FpdCB0aGlzLm1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbihvcHRpb25zLndoZXJlID8/IHt9LCB1c2VyKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbChvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwoe1xuICAgICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMgPz8ge30pXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YVtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4gdGhpcy5yZWR1Y2VPYmplY3QoeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQWxsRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRBbGwoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB3aGVyZTogYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24ob3B0aW9ucy53aGVyZSA/PyB7fSwgdXNlcilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25kaXRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvdW50KHdoZXJlPzogV2hlcmVPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIHdoZXJlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmNvdW50KG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2goc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmRPcHRpb25zID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbmRPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLCBmaW5kT3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQWxsKGZpbmRPcHRpb25zKTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoRnJvbVVzZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmRPcHRpb25zID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbmRPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLCBmaW5kT3B0aW9ucyk7XG5cbiAgICAgICAgZmluZE9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLm1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbihmaW5kT3B0aW9ucy53aGVyZSwgdXNlcik7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucz86IG9iamVjdCk6IEZpbmRPcHRpb25zIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZmluaXRpb25zLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXgucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB4LnRyYW5zZm9ybVBhdGhDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHgudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSB4LnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCBwYXRoLCBhZGRpdGlvbmFsSW5jbHVkZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi50aGlzLl9jb25maWcuZ2V0Q3VzdG9tQXR0cmlidXRlc0luY2x1ZGVzKCkubWFwKHggPT4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJhbm9pZDogeC5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICBzdWJRdWVyeTogeC5zdWJRdWVyeVxuICAgICAgICAgICAgfSwgW10sIHguYXR0cmlidXRlcykpXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMuX2NvbmZpZy50cmFuc2Zvcm1BdHRyaWJ1dGVzQ29uZmlnKGNvbmRpdGlvbnMpO1xuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMoaW5jbHVkZXMpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluY2x1ZGU6IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZU9yZGVySW5jbHVkZShvcmRlcjogT3JkZXJNb2RlbCk6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIW9yZGVyIHx8ICFvcmRlci5jb2x1bW4gfHwgb3JkZXIuZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0T3JkZXJJbmNsdWRlcyh0aGlzLm1vZGVsLCBvcmRlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZHVjZU9iamVjdChyZXN1bHQ6IGFueSk6IERhdGEge1xuICAgICAgICBjb25zdCByID0gcmVzdWx0IGluc3RhbmNlb2YgTW9kZWwgPyByZXN1bHQudG9KU09OKCkgOiByZXN1bHQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgdGhpcy5kYXRhRGVmLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcih7fSwgeyBpc05ld1JlY29yZDogZmFsc2UgfSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgcik7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgIChkYXRhIGFzIGFueSkuZGF0YVZhbHVlcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5yXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBkZWYgb2YgdGhpcy5fZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChkZWYucGF0aCkge1xuICAgICAgICAgICAgICAgIGRhdGFbZGVmLmtleV0gPSBTZXF1ZWxpemVVdGlscy5yZWR1Y2VNb2RlbEZyb21QYXRoKHJlc3VsdCwgZGVmLnBhdGgucGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBNb2RlbCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnNldERhdGFWYWx1ZShkZWYua2V5IGFzIGFueSwgU2VxdWVsaXplVXRpbHMucmVkdWNlTW9kZWxGcm9tUGF0aChyZXN1bHQsIGRlZi5wYXRoLnBhdGgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGFbZGVmLmtleV0gPSByZXN1bHRbZGVmLmtleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VhcmNoQXR0cmlidXRlcygpOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbFtdID0gW107XG4gICAgICAgIGNvbnN0IG1vZGVsQXR0ciA9IHRoaXMuX2NvbmZpZy5nZXRTZWFyY2hhYmxlQXR0cmlidXRlcygpO1xuICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICAuLi5tb2RlbEF0dHIubWFwKGEgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhLFxuICAgICAgICAgICAgICAgIGtleTogYSxcbiAgICAgICAgICAgICAgICBpc0pzb246IFNlcXVlbGl6ZVV0aWxzLmlzQ29sdW1uSnNvbih0aGlzLm1vZGVsLCBhKVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIHRoaXMuX2RlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIWRlZmluaXRpb24ucGF0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhdHRyID0gZGVmaW5pdGlvbi5pZ25vcmVJblNlYXJjaCA/IFtdIDogZGVmaW5pdGlvbi5zZWFyY2hhYmxlQXR0cmlidXRlcyA/PyBkZWZpbml0aW9uLmF0dHJpYnV0ZXM7XG4gICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsSW5jbHVkZXMgPSBkZWZpbml0aW9uLnRyYW5zZm9ybUluY2x1ZGVzQ29uZmlnKHt9KTtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRBdHRyaWJ1dGVzKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uLnBhdGggYXMgUGF0aE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsSW5jbHVkZXMsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShkYXRhOiBEYXRhW10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz47XG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10sIHR5cGU6IEV4cG9ydFR5cGVzLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz47XG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgZGF0YU9ySGVhZGVyczogRGF0YVtdIHwgc3RyaW5nW10sXG4gICAgICAgIHR5cGVPckRhdGE6IEV4cG9ydFR5cGVzIHwgYW55W10sXG4gICAgICAgIGxhbmdPclR5cGU6IHN0cmluZyB8IEV4cG9ydFR5cGVzLFxuICAgICAgICBvcHRpb25zT3JMYW5nPzogYW55IHwgc3RyaW5nLFxuICAgICAgICBvcHRpb25zPzogYW55XG4gICAgKTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+IHtcbiAgICAgICAgbGV0IHR5cGU6IEV4cG9ydFR5cGVzO1xuICAgICAgICBsZXQgaGVhZGVyczogc3RyaW5nW107XG4gICAgICAgIGxldCBkYXRhOiBhbnlbXTtcbiAgICAgICAgbGV0IGxhbmc6IHN0cmluZztcblxuICAgICAgICBpZiAodHlwZW9mIHR5cGVPckRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlT3JEYXRhO1xuICAgICAgICAgICAgbGFuZyA9IGxhbmdPclR5cGU7XG4gICAgICAgICAgICBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRzSGVhZGVyKGxhbmcsIHRoaXMuX2NvbmZpZy5leHBvcnRDb2x1bW5zID8/IFtdKTtcbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmdldEV4cG9ydERhdGEoZGF0YU9ySGVhZGVycyBhcyBEYXRhW10pO1xuICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnNPckxhbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYW5nID0gb3B0aW9uc09yTGFuZyBhcyBzdHJpbmc7XG4gICAgICAgICAgICBoZWFkZXJzID0gYXdhaXQgdGhpcy5nZXRFeHBvcnRzSGVhZGVyKGxhbmcsIGRhdGFPckhlYWRlcnMgYXMgc3RyaW5nW10pO1xuICAgICAgICAgICAgZGF0YSA9IHR5cGVPckRhdGE7XG4gICAgICAgICAgICB0eXBlID0gbGFuZ09yVHlwZSBhcyBFeHBvcnRUeXBlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5YTFNYOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkWGxzeChoZWFkZXJzLCBkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuSFRNTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZEh0bWwoaGVhZGVycywgZGF0YSwgbGFuZywgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLkNTVjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZENzdihoZWFkZXJzLCBkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuUERGOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkUGRmKGhlYWRlcnMsIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkWGxzeChoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gWGxzeFV0aWxzLmFycmF5VG9YbHN4QnVmZmVyKFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5tb2RlbC5nZXRUYWJsZU5hbWUoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkSHRtbChoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10sIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydEFkYXB0ZXIuZXhwb3J0QXNIdG1sKGxhbmcsIHtcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgY29sdW1uczogaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkQ3N2KGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBDc3ZVdGlscy5hcnJheVRvQ3N2QnVmZmVyKGRhdGEsIGhlYWRlcnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFBkZihoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10sIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydEFkYXB0ZXIuZXhwb3J0QXNQZGYobGFuZywge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2NvbmZpZy5tb2RlbC5nZXRUYWJsZU5hbWUoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBjb2x1bW5zOiBoZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGF0YUZpbHRlclNjYW5uZXIuZ2V0RGF0YUZpbHRlcih0aGlzLmRhdGFEZWYpO1xuICAgICAgICB0aGlzLl9kZWZpbml0aW9ucyA9IHRoaXMuZGF0YUZpbHRlclNjYW5uZXIuZ2V0QXR0cmlidXRlcyh0aGlzLmRhdGFEZWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoOiBzdHJpbmcsIG9wdGlvbnM6IEZpbmRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGlmICghc2VhcmNoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXBvT3B0aW9uID0gdGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKHt9KTtcbiAgICAgICAgb3B0aW9ucy5pbmNsdWRlID0gU2VxdWVsaXplVXRpbHMubWVyZ2VJbmNsdWRlcyhcbiAgICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdLFxuICAgICAgICAgICAgcmVwb09wdGlvbi5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW11cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMud2hlcmUpIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSB7IFtPcC5hbmRdOiBbXSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2hlcmUgPSBvcHRpb25zLndoZXJlO1xuICAgICAgICBjb25zdCBnZW5lcmF0ZUZpZWxkc09iamVjdCA9IHNlYXJjaFZhbHVlID0+XG4gICAgICAgICAgICB0aGlzLmdldFNlYXJjaEF0dHJpYnV0ZXMoKVxuICAgICAgICAgICAgICAgIC5tYXAoYSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmlzSnNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBhLmxpdGVyYWxLZXkgPz8gYFxcYCR7dGhpcy5tb2RlbC5uYW1lfVxcYC5cXGAke2Eua2V5fVxcYGA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICogbGl0ZXJhbCBmdW5jdGlvbiBpcyBub3Qgd29ya2luZyBvZiBzb21lIHJlYXNvbi4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICogVGhpcyBpcyB0aGUgZXF1aXZhbGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubW9kZWwuc2VxdWVsaXplLmVzY2FwZShgJSR7c2VhcmNoVmFsdWUudG9VcHBlckNhc2UoKX0lYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFV0aWxzLkxpdGVyYWwoYFVQUEVSKEpTT05fRVhUUkFDVCgke2ZpZWxkfSwgJyQnKSkgTElLRSAke3ZhbHVlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBbYS5rZXldOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09wLmxpa2VdOiBgJSR7c2VhcmNoVmFsdWV9JWBcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KS5maWx0ZXIoeCA9PiAhIXgpO1xuXG4gICAgICAgIGNvbnN0IHRva2VucyA9IHNlYXJjaC5zcGxpdChcIiBcIik7XG4gICAgICAgIHdoZXJlW09wLmFuZF0ucHVzaChcbiAgICAgICAgICAgIHRva2Vucy5tYXAodCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgW09wLm9yXTogZ2VuZXJhdGVGaWVsZHNPYmplY3QodClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydHNIZWFkZXIobGFuZzogc3RyaW5nLCBoZWFkZXJzOiBzdHJpbmdbXSwgdHJhbnNsYXRlU2VydmljZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGhlYWRlcnMubWFwKHggPT4gdHJhbnNsYXRlU2VydmljZS5nZXRUcmFuc2xhdGlvbihsYW5nLCBgZXhwb3J0cy4ke3h9YCkpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydERhdGEoZGF0YTogRGF0YVtdKTogb2JqZWN0W10ge1xuICAgICAgICByZXR1cm4gZGF0YS5tYXAoeCA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMuX2NvbmZpZy5leHBvcnRDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW3ZhbHVlLCBwcm9wXSA9IHRoaXMuZ2V0RXhwb3J0VmFsdWUoeCwga2V5KTtcbiAgICAgICAgICAgICAgICByZXN1bHRbYCR7aSsrfToke3Byb3B9YF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0VmFsdWUoZGF0YTogRGF0YSwgcGF0aDogc3RyaW5nKTogW3Vua25vd24sIHN0cmluZ10ge1xuICAgICAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgICAgIHJldHVybiBbZGF0YVtrZXldLCBrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGtleTogc3RyaW5nO1xuICAgICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGtleSA9IGtleXMuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbZGF0YSwga2V5XTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG1lcmdlQWNjZXNzQ29udHJvbENvbmRpdGlvbih3aGVyZTogV2hlcmVPcHRpb25zLCB1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5fY29uZmlnLm1vZGVsIGFzIGFueSwgdXNlcik7XG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMubWVyZ2VXaGVyZSh7IGlkOiByZXNvdXJjZXMuaWRzIH0sIHdoZXJlKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZXMud2hlcmUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUsXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy53aGVyZVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxufVxuIl19
|
|
349
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBb0c7QUFDcEcseUNBQW1GO0FBR25GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxpREFBNkM7QUFDN0MsbURBQStDO0FBRy9DLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBUTdCLFlBQ1ksT0FBWSxFQUNaLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUw1QixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUVwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQWJELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFpQixDQUFDO0lBQzFDLENBQUM7SUFhTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjtRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNqRCxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDdkMsR0FBRyxDQUFDLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxNQUF5QixDQUFDO1NBQ3BD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O2lCQUNsQjthQUNKLENBQUM7U0FDTDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSixDQUFBO0FBeFlZLG9CQUFvQjtJQURoQyxJQUFBLG1CQUFVLEdBQUU7NkNBV3NCLHVDQUFpQjtRQUNiLCtDQUFxQjtRQUN0QiwrQkFBb0I7UUFDeEIsMkJBQWdCO1FBQ25CLHdCQUFhO0dBZC9CLG9CQUFvQixDQXdZaEM7QUF4WVksb0RBQW9CIiwiZmlsZSI6ImxpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgRmluZE9wdGlvbnMsIElkZW50aWZpZXIsIEluY2x1ZGVPcHRpb25zLCBNb2RlbCwgT3AsIFV0aWxzLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciwgRXhwb3J0QWRhcHRlciwgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVzQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2F0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvZGF0YS1maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzIH0gZnJvbSBcIi4vbW9kZWxzL2V4cG9ydC10eXBlcy5tb2RlbFwiO1xuaW1wb3J0IHsgT3JkZXJNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuL21vZGVscy9wYXRoLm1vZGVsXCI7XG5pbXBvcnQgeyBTZWFyY2hBdHRyaWJ1dGVzTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2VhcmNoLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9kYXRhLWZpbHRlci5zY2FubmVyXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IENzdlV0aWxzIH0gZnJvbSBcIi4vdXRpbHMvY3N2LnV0aWxzXCI7XG5pbXBvcnQgeyBYbHN4VXRpbHMgfSBmcm9tIFwiLi91dGlscy94bHN4LnV0aWxzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPiB7XG4gICAgcHJpdmF0ZSBfY29uZmlnOiBEYXRhRmlsdGVyQ29uZmlnO1xuICAgIHByaXZhdGUgX2RlZmluaXRpb25zOiBBdHRyaWJ1dGVzQ29uZmlnW107XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IHR5cGVvZiBNIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5tb2RlbCBhcyB0eXBlb2YgTTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkYXRhRGVmOiBhbnksXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlclNjYW5uZXI6IERhdGFGaWx0ZXJTY2FubmVyLFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIGV4cG9ydEFkYXB0ZXI6IEV4cG9ydEFkYXB0ZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRCeVBrKGlkZW50aWZpZXI6IElkZW50aWZpZXIsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRCeVBrKGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQnlQa0Zyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIGlkZW50aWZpZXI6IElkZW50aWZpZXIsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGE+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5fY29uZmlnLm1vZGVsIGFzIGFueSwgdXNlcik7XG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzPy5pbmNsdWRlcyhpZGVudGlmaWVyIGFzIG51bWJlcikgfHwgcmVzb3VyY2VzLmFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZEJ5UGsoaWRlbnRpZmllciwgY29uZGl0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kT25lKHtcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMuX2NvbmZpZy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXTogaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmUgPz8ge31cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbmRpdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kT25lKG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRPbmUoe1xuICAgICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMgPz8ge30pXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlT2JqZWN0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRPbmVGcm9tVXNlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyA9IHt9LCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRPbmUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB3aGVyZTogYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24ob3B0aW9ucy53aGVyZSA/PyB7fSwgdXNlcilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25kaXRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRBbGwob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQWxsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQWxsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgd2hlcmU6IGF3YWl0IHRoaXMubWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUgPz8ge30sIHVzZXIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZGl0aW9uc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh3aGVyZT86IFdoZXJlT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucyksXG4gICAgICAgICAgICB3aGVyZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5jb3VudChvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5kT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5kT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGZpbmRPcHRpb25zLndoZXJlID0gYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24oZmluZE9wdGlvbnMud2hlcmUsIHVzZXIpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwoZmluZE9wdGlvbnMpO1xuICAgICAgICBpZiAoIXJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YVtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4gdGhpcy5yZWR1Y2VPYmplY3QoeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnM/OiBvYmplY3QpOiBGaW5kT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdW10gPSBbXG4gICAgICAgICAgICAuLi50aGlzLl9kZWZpbml0aW9ucy5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF4LnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0geC50cmFuc2Zvcm1QYXRoQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB4LnRyYW5zZm9ybUF0dHJpYnV0ZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0geC50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwgcGF0aCwgYWRkaXRpb25hbEluY2x1ZGVzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4udGhpcy5fY29uZmlnLmdldEN1c3RvbUF0dHJpYnV0ZXNJbmNsdWRlcygpLm1hcCh4ID0+IHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiB4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyYW5vaWQ6IHgucGFyYW5vaWQsXG4gICAgICAgICAgICAgICAgc3ViUXVlcnk6IHguc3ViUXVlcnlcbiAgICAgICAgICAgIH0sIFtdLCB4LmF0dHJpYnV0ZXMpKVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLl9jb25maWcudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmNsdWRlOiBTZXF1ZWxpemVVdGlscy5yZWR1Y2VJbmNsdWRlcyhpbmNsdWRlcylcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVPcmRlckluY2x1ZGUob3JkZXI6IE9yZGVyTW9kZWwpOiBJbmNsdWRlT3B0aW9uc1tdIHtcbiAgICAgICAgaWYgKCFvcmRlciB8fCAhb3JkZXIuY29sdW1uIHx8IG9yZGVyLmRpcmVjdGlvbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVySW5jbHVkZXModGhpcy5tb2RlbCwgb3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWR1Y2VPYmplY3QocmVzdWx0OiBhbnkpOiBEYXRhIHtcbiAgICAgICAgY29uc3QgciA9IHJlc3VsdCBpbnN0YW5jZW9mIE1vZGVsID8gcmVzdWx0LnRvSlNPTigpIDogcmVzdWx0O1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YURlZi5wcm90b3R5cGUuY29uc3RydWN0b3Ioe30sIHsgaXNOZXdSZWNvcmQ6IGZhbHNlIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGEsIHIpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICAgICAgICAoZGF0YSBhcyBhbnkpLmRhdGFWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIHRoaXMuX2RlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gU2VxdWVsaXplVXRpbHMucmVkdWNlTW9kZWxGcm9tUGF0aChyZXN1bHQsIGRlZi5wYXRoLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXREYXRhVmFsdWUoZGVmLmtleSBhcyBhbnksIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZU1vZGVsRnJvbVBhdGgocmVzdWx0LCBkZWYucGF0aC5wYXRoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gcmVzdWx0W2RlZi5rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlYXJjaEF0dHJpYnV0ZXMoKTogU2VhcmNoQXR0cmlidXRlc01vZGVsW10ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBtb2RlbEF0dHIgPSB0aGlzLl9jb25maWcuZ2V0U2VhcmNoYWJsZUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgLi4ubW9kZWxBdHRyLm1hcChhID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogYSxcbiAgICAgICAgICAgICAgICBrZXk6IGEsXG4gICAgICAgICAgICAgICAgaXNKc29uOiBTZXF1ZWxpemVVdGlscy5pc0NvbHVtbkpzb24odGhpcy5tb2RlbCwgYSlcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiB0aGlzLl9kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYXR0ciA9IGRlZmluaXRpb24uaWdub3JlSW5TZWFyY2ggPyBbXSA6IGRlZmluaXRpb24uc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPz8gZGVmaW5pdGlvbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0gZGVmaW5pdGlvbi50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyh7fSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0QXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi5wYXRoIGFzIFBhdGhNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEluY2x1ZGVzLFxuICAgICAgICAgICAgICAgICAgICBhdHRyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZERhdGEoZGF0YTogRGF0YVtdLCB0eXBlOiBFeHBvcnRUeXBlcywgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+O1xuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZERhdGEoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCB0eXBlOiBFeHBvcnRUeXBlcywgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+O1xuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZERhdGEoXG4gICAgICAgIGRhdGFPckhlYWRlcnM6IERhdGFbXSB8IHN0cmluZ1tdLFxuICAgICAgICB0eXBlT3JEYXRhOiBFeHBvcnRUeXBlcyB8IGFueVtdLFxuICAgICAgICBsYW5nT3JUeXBlOiBzdHJpbmcgfCBFeHBvcnRUeXBlcyxcbiAgICAgICAgb3B0aW9uc09yTGFuZz86IGFueSB8IHN0cmluZyxcbiAgICAgICAgb3B0aW9ucz86IGFueVxuICAgICk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPiB7XG4gICAgICAgIGxldCB0eXBlOiBFeHBvcnRUeXBlcztcbiAgICAgICAgbGV0IGhlYWRlcnM6IHN0cmluZ1tdO1xuICAgICAgICBsZXQgZGF0YTogYW55W107XG4gICAgICAgIGxldCBsYW5nOiBzdHJpbmc7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0eXBlT3JEYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICB0eXBlID0gdHlwZU9yRGF0YTtcbiAgICAgICAgICAgIGxhbmcgPSBsYW5nT3JUeXBlO1xuICAgICAgICAgICAgaGVhZGVycyA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0c0hlYWRlcihsYW5nLCB0aGlzLl9jb25maWcuZXhwb3J0Q29sdW1ucyA/PyBbXSk7XG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgdGhpcy5nZXRFeHBvcnREYXRhKGRhdGFPckhlYWRlcnMgYXMgRGF0YVtdKTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zT3JMYW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGFuZyA9IG9wdGlvbnNPckxhbmcgYXMgc3RyaW5nO1xuICAgICAgICAgICAgaGVhZGVycyA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0c0hlYWRlcihsYW5nLCBkYXRhT3JIZWFkZXJzIGFzIHN0cmluZ1tdKTtcbiAgICAgICAgICAgIGRhdGEgPSB0eXBlT3JEYXRhO1xuICAgICAgICAgICAgdHlwZSA9IGxhbmdPclR5cGUgYXMgRXhwb3J0VHlwZXM7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuWExTWDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFhsc3goaGVhZGVycywgZGF0YSk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLkhUTUw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRIdG1sKGhlYWRlcnMsIGRhdGEsIGxhbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5DU1Y6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRDc3YoaGVhZGVycywgZGF0YSk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlBERjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFBkZihoZWFkZXJzLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFhsc3goaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIFhsc3hVdGlscy5hcnJheVRvWGxzeEJ1ZmZlcihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZEh0bWwoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzSHRtbChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZENzdihoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgQ3N2VXRpbHMuYXJyYXlUb0NzdkJ1ZmZlcihkYXRhLCBoZWFkZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRQZGYoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzUGRmKGxhbmcsIHtcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgY29sdW1uczogaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRhdGFGaWx0ZXJTY2FubmVyLmdldERhdGFGaWx0ZXIodGhpcy5kYXRhRGVmKTtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbnMgPSB0aGlzLmRhdGFGaWx0ZXJTY2FubmVyLmdldEF0dHJpYnV0ZXModGhpcy5kYXRhRGVmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zOiBGaW5kT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAoIXNlYXJjaCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwb09wdGlvbiA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyh7fSk7XG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXSxcbiAgICAgICAgICAgIHJlcG9PcHRpb24uaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLndoZXJlKSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW10gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSB7IFtPcC5hbmRdOiBbb3B0aW9ucy53aGVyZV0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdoZXJlID0gb3B0aW9ucy53aGVyZTtcbiAgICAgICAgY29uc3QgZ2VuZXJhdGVGaWVsZHNPYmplY3QgPSBzZWFyY2hWYWx1ZSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRTZWFyY2hBdHRyaWJ1dGVzKClcbiAgICAgICAgICAgICAgICAubWFwKGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5pc0pzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gYS5saXRlcmFsS2V5ID8/IGBcXGAke3RoaXMubW9kZWwubmFtZX1cXGAuXFxgJHthLmtleX1cXGBgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGxpdGVyYWwgZnVuY3Rpb24gaXMgbm90IHdvcmtpbmcgb2Ygc29tZSByZWFzb24uLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vZGVsLnNlcXVlbGl6ZS5lc2NhcGUoYCUke3NlYXJjaFZhbHVlLnRvVXBwZXJDYXNlKCl9JWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVdGlscy5MaXRlcmFsKGBVUFBFUihKU09OX0VYVFJBQ1QoJHtmaWVsZH0sICckJykpIExJS0UgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgW2Eua2V5XToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPcC5saWtlXTogYCUke3NlYXJjaFZhbHVlfSVgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSkuZmlsdGVyKHggPT4gISF4KTtcblxuICAgICAgICBjb25zdCB0b2tlbnMgPSBzZWFyY2guc3BsaXQoXCIgXCIpO1xuICAgICAgICB3aGVyZVtPcC5hbmRdLnB1c2goXG4gICAgICAgICAgICB0b2tlbnMubWFwKHQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIFtPcC5vcl06IGdlbmVyYXRlRmllbGRzT2JqZWN0KHQpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRzSGVhZGVyKGxhbmc6IHN0cmluZywgaGVhZGVyczogc3RyaW5nW10sIHRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChoZWFkZXJzLm1hcCh4ID0+IHRyYW5zbGF0ZVNlcnZpY2UuZ2V0VHJhbnNsYXRpb24obGFuZywgYGV4cG9ydHMuJHt4fWApKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnREYXRhKGRhdGE6IERhdGFbXSk6IG9iamVjdFtdIHtcbiAgICAgICAgcmV0dXJuIGRhdGEubWFwKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLl9jb25maWcuZXhwb3J0Q29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt2YWx1ZSwgcHJvcF0gPSB0aGlzLmdldEV4cG9ydFZhbHVlKHgsIGtleSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Ake2krK306JHtwcm9wfWBdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV4cG9ydFZhbHVlKGRhdGE6IERhdGEsIHBhdGg6IHN0cmluZyk6IFt1bmtub3duLCBzdHJpbmddIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgICAgICByZXR1cm4gW2RhdGFba2V5XSwga2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBrZXk6IHN0cmluZztcbiAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXlzLnNoaWZ0KCk7XG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW2RhdGEsIGtleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMuX2NvbmZpZy5tb2RlbCBhcyBhbnksIHVzZXIpO1xuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcykge1xuICAgICAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoeyBpZDogcmVzb3VyY2VzLmlkcyB9LCB3aGVyZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2VzLndoZXJlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlLFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -89,16 +89,11 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
89
89
|
const [userOrOpt, opt] = args;
|
|
90
90
|
const options = opt ? opt : userOrOpt;
|
|
91
91
|
const user = opt ? userOrOpt : null;
|
|
92
|
-
|
|
93
|
-
options.order = {
|
|
94
|
-
column: "id",
|
|
95
|
-
direction: "asc"
|
|
96
|
-
};
|
|
97
|
-
}
|
|
92
|
+
options.order = this.normalizeOrder(options.order);
|
|
98
93
|
const countOptions = await this.getFindOptions(this.repository.model, options.query, options.data);
|
|
99
94
|
this.addSearchCondition(options.search, countOptions);
|
|
100
95
|
this.addOrderCondition(options.order, countOptions);
|
|
101
|
-
this.addGroupOption(options, countOptions);
|
|
96
|
+
this.addGroupOption(options.order, countOptions);
|
|
102
97
|
const total = await (user ? this.countTotalValues(user, countOptions) : this.countTotalValues(countOptions));
|
|
103
98
|
const values = await (user ? this.findValues(user, options, countOptions) : this.findValues(options, countOptions));
|
|
104
99
|
return {
|
|
@@ -110,6 +105,7 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
110
105
|
async downloadData(user, type, options, exportOptions) {
|
|
111
106
|
var _a, _b;
|
|
112
107
|
const findOptions = await this.getFindOptions(this.repository.model, options.query);
|
|
108
|
+
options.order = this.normalizeOrder(options.order);
|
|
113
109
|
this.addSearchCondition(options.search, findOptions);
|
|
114
110
|
this.addOrderCondition(options.order, findOptions);
|
|
115
111
|
delete options.page;
|
|
@@ -286,36 +282,37 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
286
282
|
}
|
|
287
283
|
this.repository.addSearchCondition(search.value, options);
|
|
288
284
|
}
|
|
289
|
-
addOrderCondition(
|
|
290
|
-
if (
|
|
285
|
+
addOrderCondition(orders, options) {
|
|
286
|
+
if (orders.every(order => !order.direction)) {
|
|
291
287
|
return;
|
|
292
288
|
}
|
|
293
|
-
const
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
289
|
+
for (const order of orders) {
|
|
290
|
+
const rule = this.definitions[order.column];
|
|
291
|
+
const includes = rule && order_rule_1.OrderRule.validate(rule) ?
|
|
292
|
+
this.sequelizeModelScanner.getIncludes(this.repository.model, { path: rule.path }, []) :
|
|
293
|
+
this.repository.generateOrderInclude(order);
|
|
294
|
+
if (!includes.length) {
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
options.include = sequelize_utils_1.SequelizeUtils.mergeIncludes(options.include, includes);
|
|
299
298
|
}
|
|
300
|
-
options.include = sequelize_utils_1.SequelizeUtils.mergeIncludes(options.include, includes);
|
|
301
299
|
}
|
|
302
|
-
addGroupOption(
|
|
303
|
-
var _a, _b;
|
|
304
|
-
if (((_a = query === null || query === void 0 ? void 0 : query.order) === null || _a === void 0 ? void 0 : _a.column) === "") {
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
const rule = this.definitions[query.order.column];
|
|
308
|
-
if (rule && order_rule_1.OrderRule.validate(rule)) {
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
300
|
+
addGroupOption(orders, options) {
|
|
311
301
|
const model = this.repository.model;
|
|
312
|
-
|
|
313
|
-
const
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
302
|
+
options.group = [`${model.name}.id`];
|
|
303
|
+
for (const order of orders) {
|
|
304
|
+
const rule = this.definitions[order.column];
|
|
305
|
+
if (rule && order_rule_1.OrderRule.validate(rule)) {
|
|
306
|
+
continue;
|
|
307
|
+
}
|
|
308
|
+
const values = order.column.split(".");
|
|
309
|
+
const column = values.pop();
|
|
310
|
+
if (!values.length) {
|
|
311
|
+
options.group.push(`${model.name}.${sequelize_utils_1.SequelizeUtils.findColumnFieldName(model, column)}`);
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
options.group.push(...this.sequelizeModelScanner.getGroup(model, order));
|
|
315
|
+
}
|
|
319
316
|
}
|
|
320
317
|
}
|
|
321
318
|
async countTotalValues(...args) {
|
|
@@ -347,7 +344,7 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
347
344
|
}
|
|
348
345
|
}
|
|
349
346
|
async findValues(...args) {
|
|
350
|
-
var _a, _b
|
|
347
|
+
var _a, _b;
|
|
351
348
|
const [userOrOFilter, filterOrOpt, opt] = args;
|
|
352
349
|
const options = opt ? opt : filterOrOpt;
|
|
353
350
|
const filter = opt ? filterOrOpt : userOrOFilter;
|
|
@@ -358,13 +355,14 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
358
355
|
options.where = await this.getAccessControlWhereCondition(options.where, userOrOFilter);
|
|
359
356
|
}
|
|
360
357
|
const order = this.getOrderOptions(filter.order);
|
|
361
|
-
const
|
|
362
|
-
|
|
358
|
+
const nonNestedOrderColumns = filter.order
|
|
359
|
+
.map(order => order.column)
|
|
360
|
+
.filter(column => column && !column.includes("."));
|
|
363
361
|
const values = await this.repository.model.findAll({
|
|
364
362
|
...options,
|
|
365
|
-
attributes:
|
|
363
|
+
attributes: ["id", ...nonNestedOrderColumns],
|
|
366
364
|
limit: filter.page ? filter.page.size : null,
|
|
367
|
-
offset: filter.page ? filter.page.number * filter.page.size : null,
|
|
365
|
+
offset: filter.page ? filter.page.number * filter.page.size + ((_a = filter.page.offset) !== null && _a !== void 0 ? _a : 0) : null,
|
|
368
366
|
subQuery: false,
|
|
369
367
|
order
|
|
370
368
|
});
|
|
@@ -376,7 +374,7 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
376
374
|
order,
|
|
377
375
|
paranoid: options.paranoid,
|
|
378
376
|
group
|
|
379
|
-
}, (
|
|
377
|
+
}, (_b = filter.data) !== null && _b !== void 0 ? _b : {});
|
|
380
378
|
}
|
|
381
379
|
async getAccessControlWhereCondition(where, user) {
|
|
382
380
|
if (!user) {
|
|
@@ -428,15 +426,24 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
428
426
|
this.getConditionInclude(model, filter.condition)
|
|
429
427
|
];
|
|
430
428
|
}
|
|
431
|
-
getOrderOptions(
|
|
432
|
-
if (!
|
|
433
|
-
|
|
429
|
+
getOrderOptions(orders) {
|
|
430
|
+
if (!Array.isArray(orders)) {
|
|
431
|
+
orders = [orders];
|
|
434
432
|
}
|
|
435
|
-
const
|
|
436
|
-
|
|
437
|
-
|
|
433
|
+
const generatedOrder = [];
|
|
434
|
+
for (const order of orders) {
|
|
435
|
+
if (!(order === null || order === void 0 ? void 0 : order.column) || !order.direction) {
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
const rule = this.definitions[order.column];
|
|
439
|
+
if (!rule || !order_rule_1.OrderRule.validate(rule)) {
|
|
440
|
+
generatedOrder.push(this.sequelizeModelScanner.getOrder(this.repository.model, order));
|
|
441
|
+
}
|
|
442
|
+
else {
|
|
443
|
+
generatedOrder.push([rule.getOrderOption(), order.direction.toUpperCase()]);
|
|
444
|
+
}
|
|
438
445
|
}
|
|
439
|
-
return
|
|
446
|
+
return generatedOrder;
|
|
440
447
|
}
|
|
441
448
|
addDefaultFilter(query) {
|
|
442
449
|
if (!this.model.defaultFilter) {
|
|
@@ -461,6 +468,22 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
461
468
|
query.rules.push(this.model.defaultFilter.filter);
|
|
462
469
|
return query;
|
|
463
470
|
}
|
|
471
|
+
normalizeOrder(orders) {
|
|
472
|
+
if (!Array.isArray(orders)) {
|
|
473
|
+
orders = [orders];
|
|
474
|
+
}
|
|
475
|
+
orders = orders === null || orders === void 0 ? void 0 : orders.filter(order => order === null || order === void 0 ? void 0 : order.column);
|
|
476
|
+
if (!(orders === null || orders === void 0 ? void 0 : orders.length)) {
|
|
477
|
+
orders = [{
|
|
478
|
+
column: "id",
|
|
479
|
+
direction: "asc"
|
|
480
|
+
}];
|
|
481
|
+
}
|
|
482
|
+
return orders;
|
|
483
|
+
}
|
|
484
|
+
getNonNestedOrderColumns(orders) {
|
|
485
|
+
return orders.filter(order => order.column && !order.column.includes(".")).map(order => order.column);
|
|
486
|
+
}
|
|
464
487
|
};
|
|
465
488
|
FilterService = FilterService_1 = __decorate([
|
|
466
489
|
(0, common_1.Injectable)(),
|
|
@@ -472,4 +495,4 @@ FilterService = FilterService_1 = __decorate([
|
|
|
472
495
|
], FilterService);
|
|
473
496
|
exports.FilterService = FilterService;
|
|
474
497
|
|
|
475
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FBaUg7QUFFakgsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUVqRSxnRUFBMkQ7QUFHM0QsaUZBQTRFO0FBQzVFLHdEQUF1RDtBQUN2RCwrQ0FBMkM7QUFDM0MsaURBQTZDO0FBQzdDLHVDQUVtQjtBQUNuQiwrRUFBMEU7QUFDMUUseURBQTRFO0FBSzVFLHlEQUEwRTtBQUcxRSxJQUFhLGFBQWEscUJBQTFCLE1BQWEsYUFBYTtJQUl0QixZQUNZLG9CQUEwQyxFQUMxQyxnQkFBa0MsRUFDbEMsS0FBdUIsRUFDdkIscUJBQTRDLEVBQzVDLFVBQTZCO1FBSjdCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBRXJDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sT0FBTyxDQUFJLE9BQWdCO1FBQzlCLE9BQU8sSUFBSSxlQUFhLENBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQjtZQUNJLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixjQUFjLEVBQUUsT0FBTztTQUNULEVBQ2xCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQVksRUFBRSxJQUEwQjtRQUMzRCxNQUFNLE1BQU0sR0FBK0IsRUFBRSxDQUFDO1FBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksc0JBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQXdCLENBQUMsRUFBRTtnQkFDM0csU0FBUzthQUNaO1lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBc0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvRixJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNULFNBQVM7YUFDWjtZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsR0FBRyxNQUFNO2dCQUNULEVBQUUsRUFBRSxHQUFHO2dCQUNQLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSwwQkFBVyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVHLENBQUMsQ0FBQztTQUNOO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FDM0IsT0FBWSxFQUNaLE1BQXNDLEVBQ3RDLElBQTBCO1FBRTFCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDN0MsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQUksTUFBTSxZQUFZLHNCQUFZLEVBQUU7WUFDaEMsT0FBTyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUN0RTtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxPQUFZLEVBQUUsTUFBZ0MsRUFBRSxJQUEwQjtRQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzdDLE9BQU87U0FDVjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQUksTUFBTSxZQUFZLHNCQUFZLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTtZQUMxRCxPQUFPLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGO1FBRUQsT0FBTztJQUNYLENBQUM7SUFJTSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBaUU7UUFDbkYsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQTZCLENBQUM7UUFDMUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFnQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFM0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFJTSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBaUU7UUFDcEYsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQTZCLENBQUM7UUFDMUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFnQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUN6QyxPQUFPLENBQUMsS0FBSyxHQUFHO2dCQUNaLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxLQUFLO2FBQ25CLENBQUM7U0FDTDtRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUUzQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUM3RyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDcEgsT0FBTztZQUNILEtBQUs7WUFDTCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsTUFBTTtTQUNULENBQUM7SUFDTixDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FDckIsSUFBeUIsRUFDekIsSUFBaUIsRUFDakIsT0FBeUIsRUFDekIsYUFBc0I7O1FBRXRCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN6RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNGLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxRQUFRLG1DQUFJLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztTQUN6RzthQUFNO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsUUFBUSxtQ0FBSSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDbEc7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFlLEVBQUUsS0FBaUIsRUFBRSxJQUFhO1FBQ3pFOztXQUVHO1FBQ0gsK0NBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFOUIsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLE1BQU0sR0FBZ0IsRUFBRSxDQUFDO1FBQzdCLElBQUksS0FBSyxFQUFFO1lBQ1AsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBRTVCLE1BQU0sR0FBRztnQkFDTCxHQUFHLE1BQU07Z0JBQ1QsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQztnQkFDbEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRTtnQkFDL0YsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUU7YUFDckcsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztZQUN6RSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNYLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2FBQzlCO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtnQkFDMUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ3hCO1NBQ0o7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sSUFBSTtRQUNSLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUVwRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxTQUFTO2FBQ1o7WUFFRCxJQUNJLENBQUMsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQXFCLENBQUM7Z0JBQ3JELENBQUMsMEJBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQTBCLENBQUM7Z0JBQy9ELENBQUMsc0JBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQXdCLENBQUMsRUFDN0Q7Z0JBQ0UsU0FBUzthQUNaO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBcUIsQ0FBQztTQUMvRDtJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQWUsRUFBRSxLQUFpQixFQUFFLElBQWE7UUFDdEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDZCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsTUFBTSxRQUFRLEdBQXVCLEVBQUUsQ0FBQztRQUN4QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBa0IsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQXFCLENBQUMsQ0FBQztnQkFDekUsU0FBUzthQUNaO1lBRUQsTUFBTSxDQUFDLEdBQUcsSUFBc0IsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUN4QyxTQUFTO2FBQ1o7WUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFLLE1BQWdDLENBQUMsVUFBVSxFQUFFO2dCQUM5QyxNQUFNLENBQUMsR0FBRyxNQUErQixDQUFDO2dCQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBRW5FLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFO29CQUNoQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO3FCQUFNO29CQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3RELFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtpQkFDdkY7YUFDSjtpQkFBTTtnQkFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDcEY7U0FDSjtRQUNELE9BQU8sZ0NBQWMsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFlLEVBQUUsU0FBMEI7UUFDbkUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNaLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxNQUFNLFFBQVEsR0FBcUIsRUFBRSxDQUFDO1FBQ3RDLEtBQUssTUFBTSxJQUFJLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRTtZQUNoQyxNQUFNLENBQUMsR0FBRyxJQUF1QixDQUFDO1lBQ2xDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtnQkFDYixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ2hFO1lBQ0QsTUFBTSxDQUFDLEdBQUcsSUFBMkIsQ0FBQztZQUN0QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ1IsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNoSDtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxLQUFpQixFQUFFLE9BQXVCOztRQUN6RSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNkLE9BQU87U0FDVjtRQUVELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBa0IsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNuQyxRQUFRLEdBQUcsUUFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFdEUsSUFBSSxLQUFLLENBQUMsRUFBUyxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN2QjtnQkFFRCxTQUFTO2FBQ1o7WUFFRCxNQUFNLENBQUMsR0FBRyxJQUFzQixDQUFDO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hDLFNBQVM7YUFDWjtZQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBcUIsQ0FBQztZQUMxRCxJQUFJLENBQUMsc0JBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzdCLE1BQU0sYUFBYSxHQUFHLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFdEQsSUFBSSxhQUFhLEVBQUU7b0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDL0I7YUFDSjtZQUNELFFBQVEsR0FBRyxNQUFBLE1BQU0sQ0FBQyxRQUFRLG1DQUFJLElBQUksQ0FBQztTQUN0QztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBaUIsRUFBRSxPQUF1QjtRQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtZQUNkLE9BQU87U0FDVjtRQUVELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtZQUM1QixNQUFNLENBQUMsR0FBRyxJQUFrQixDQUFDO1lBQzdCLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtnQkFDYixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFaEQsSUFBSSxNQUFNLENBQUMsRUFBUyxDQUFDLENBQUMsTUFBTSxFQUFFO29CQUMxQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN4QjtnQkFFRCxTQUFTO2FBQ1o7WUFFRCxNQUFNLENBQUMsR0FBRyxJQUFzQixDQUFDO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hDLFNBQVM7YUFDWjtZQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBcUIsQ0FBQztZQUMxRCxJQUFJLENBQUMsc0JBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzdCLE1BQU0sYUFBYSxHQUFHLE1BQU0sTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLGFBQWEsRUFBRTtvQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUMvQjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsTUFBeUIsRUFBRSxPQUFxQjs7UUFDdkUsTUFBTSxLQUFLLEdBQUcsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSywwQ0FBRSxRQUFRLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxDQUFBLEVBQUU7WUFDaEIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLE9BQXFCO1FBQzlELElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxFQUFFLEVBQUU7WUFDbEMsT0FBTztTQUNWO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUF3QixDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUFHLElBQUksSUFBSSxzQkFBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNsQixPQUFPO1NBQ1Y7UUFFRCxPQUFPLENBQUMsT0FBTyxHQUFHLGdDQUFjLENBQUMsYUFBYSxDQUMxQyxPQUFPLENBQUMsT0FBMkIsRUFDbkMsUUFBNEIsQ0FDL0IsQ0FBQztJQUNOLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBdUIsRUFBRSxPQUFxQjs7UUFDakUsSUFBSSxDQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssMENBQUUsTUFBTSxNQUFLLEVBQUUsRUFBRTtZQUM3QixPQUFPO1NBQ1Y7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUF3QixDQUFDO1FBQ3pFLElBQUksSUFBSSxJQUFJLHNCQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xDLE9BQU87U0FDVjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssMENBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxnQ0FBYyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDOUc7YUFBTTtZQUNILE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3BHO0lBQ0wsQ0FBQztJQUlPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQXVEO1FBQ3JGLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUF3QixDQUFDO1FBRXJEOztXQUVHO1FBQ0gsSUFBSSxHQUFHLEVBQUU7WUFDTCxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBZ0MsQ0FBQyxDQUFDO1NBQzlHO1FBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUM3QyxHQUFHLE9BQU87Z0JBQ1YsUUFBUSxFQUFFLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3RCO2FBQU07WUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDNUMsR0FBRyxPQUFPO2FBQ2IsQ0FBUSxDQUFDO1lBQ1YsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO2lCQUFNO2dCQUNILE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUN2QjtTQUNKO0lBQ0wsQ0FBQztJQUlPLEtBQUssQ0FBQyxVQUFVLENBQW9DLEdBQUcsSUFBOEU7O1FBQ3pJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBMEIsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQStCLENBQUMsQ0FBQyxDQUFDLGFBQWlDLENBQUM7UUFFekY7O1dBRUc7UUFDSCxJQUFJLEdBQUcsRUFBRTtZQUNMLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFzQixDQUFDLENBQUM7U0FDcEc7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxNQUFBLE1BQUEsTUFBQSxNQUFNLENBQUMsS0FBSywwQ0FBRSxNQUFNLDBDQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsbUNBQUksRUFBRSxDQUFDO1FBQ3pELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUMvQyxHQUFHLE9BQU87WUFDVixVQUFVLEVBQUUsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JFLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUM1QyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEUsUUFBUSxFQUFFLEtBQUs7WUFDZixLQUFLO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQ0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ25ILE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUNqQyxLQUFLLEVBQUU7Z0JBQ0gsRUFBRSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzVCO1lBQ0QsS0FBSztZQUNMLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixLQUFLO1NBQ1IsRUFBRSxNQUFBLE1BQU0sQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTyxLQUFLLENBQUMsOEJBQThCLENBQUMsS0FBbUIsRUFBRSxJQUF5QjtRQUN2RixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLElBQUksU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNmLE9BQU8sZ0NBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQ2pCLE9BQU87Z0JBQ0gsQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ04sU0FBUyxDQUFDLEtBQUs7b0JBQ2YsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksRUFBRTtpQkFDZDthQUNKLENBQUM7U0FDTDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxLQUF3QixFQUFFLElBQWE7UUFDbkUsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU87U0FDVjtRQUVELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDNUIsU0FBUzthQUNaO1lBRUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVyxFQUFFO2dCQUM5QixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQ3RCO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBZSxFQUFFLE1BQXdCLEVBQUUsSUFBYTtRQUM3RSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBRUQsT0FBTztZQUNILElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO2dCQUMxQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsS0FBSyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQzthQUMxRCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQztTQUNwRCxDQUFDO0lBQ04sQ0FBQztJQUVPLGVBQWUsQ0FBQyxRQUFvQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLEVBQUUsRUFBRTtZQUM1RCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQXdCLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMvRTtRQUVELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsS0FBaUI7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQzNCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUU7WUFDbkMsSUFBSSxDQUFBLEtBQUssYUFBTCxLQUFLLHVCQUFMLEtBQUssQ0FBRSxTQUFTLE1BQUssS0FBSyxFQUFFO2dCQUM1QixLQUFLLEdBQUc7b0JBQ0osU0FBUyxFQUFFLEtBQUs7b0JBQ2hCLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQztpQkFDakIsQ0FBQzthQUNMO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsU0FBUyxNQUFLLElBQUksRUFBRTtnQkFDM0IsS0FBSyxHQUFHO29CQUNKLFNBQVMsRUFBRSxJQUFJO29CQUNmLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQztpQkFDakIsQ0FBQzthQUNMO1NBQ0o7UUFDRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0osQ0FBQTtBQXJoQlksYUFBYTtJQUR6QixJQUFBLG1CQUFVLEdBQUU7cUNBTXlCLDZDQUFvQjtRQUN4QixvQ0FBZ0I7UUFDM0Isd0JBQVU7UUFDTSwrQ0FBcUI7UUFDaEMsdUNBQWlCO0dBVGhDLGFBQWEsQ0FxaEJ6QjtBQXJoQlksc0NBQWEiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IGNvbCwgQ291bnRPcHRpb25zLCBGaW5kT3B0aW9ucywgSW5jbHVkZWFibGUsIEluY2x1ZGVPcHRpb25zLCBPcCwgT3JkZXIsIFdoZXJlT3B0aW9ucyB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzLCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJSZXN1bHRNb2RlbCwgRmlsdGVyU2VhcmNoTW9kZWwsIE9yZGVyTW9kZWwgfSBmcm9tIFwiLi4vXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy9hY2Nlc3MtY29udHJvbC5hZGFwdGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJzL3RyYW5zbGF0ZS5hZGFwdGVyXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2VydmljZSB9IGZyb20gXCIuLi9kYXRhLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJbmNsdWRlV2hlcmVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvaW5jbHVkZS5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgU2VxdWVsaXplTW9kZWxTY2FubmVyIH0gZnJvbSBcIi4uL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyXCI7XG5pbXBvcnQgeyBNLCBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXIgfSBmcm9tIFwiLi9iYXNlLWZpbHRlclwiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi9maWx0ZXIudXRpbHNcIjtcbmltcG9ydCB7XG4gICAgRmlsdGVyLCBGaWx0ZXJDb25kaXRpb24sIEZpbHRlckNvbmRpdGlvblJ1bGUsIEZpbHRlckRlZmluaXRpb24sIFNlbGVjdEZpbHRlciwgU2VsZWN0RmlsdGVyVmFsdWVcbn0gZnJvbSBcIi4vZmlsdGVyc1wiO1xuaW1wb3J0IHsgR2VvTG9jYWxpemF0aW9uRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVycy9nZW8tbG9jYWxpemF0aW9uLmZpbHRlclwiO1xuaW1wb3J0IHsgR3JvdXBGaWx0ZXIsIEdyb3VwRmlsdGVyRGVmaW5pdGlvbiB9IGZyb20gXCIuL2ZpbHRlcnMvZ3JvdXAuZmlsdGVyXCI7XG5pbXBvcnQgeyBRdWVyeU1vZGVsLCBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvblNlYXJjaE1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLXNlYXJjaC5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci1jb25maWd1cmF0aW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJSZXNvdXJjZVZhbHVlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLXJlc291cmNlLXZhbHVlLm1vZGVsXCI7XG5pbXBvcnQgeyBPcmRlclJ1bGUsIE9yZGVyUnVsZURlZmluaXRpb24gfSBmcm9tIFwiLi9vcmRlci1ydWxlcy9vcmRlci1ydWxlXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWx0ZXJTZXJ2aWNlPERhdGE+IHtcbiAgICBwcml2YXRlIGRlZmluaXRpb25zOiB7IFtuYW1lOiBzdHJpbmddOiBGaWx0ZXJEZWZpbml0aW9uIHwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIHwgT3JkZXJSdWxlRGVmaW5pdGlvbiB9O1xuICAgIHByaXZhdGUgcmVwb3NpdG9yeTogRGF0YUZpbHRlclJlcG9zaXRvcnk8RGF0YT47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhY2Nlc3NDb250cm9sQWRhcHRlcjogQWNjZXNzQ29udHJvbEFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlQWRhcHRlcjogVHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSBtb2RlbDogQmFzZUZpbHRlcjxEYXRhPixcbiAgICAgICAgcHJpdmF0ZSBzZXF1ZWxpemVNb2RlbFNjYW5uZXI6IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lcixcbiAgICAgICAgcHJpdmF0ZSBkYXRhRmlsdGVyOiBEYXRhRmlsdGVyU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRGF0YTxUPihkYXRhRGVmOiBUeXBlPFQ+KTogRmlsdGVyU2VydmljZTxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyU2VydmljZShcbiAgICAgICAgICAgIHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIsXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5tb2RlbCxcbiAgICAgICAgICAgICAgICBkYXRhRGVmaW5pdGlvbjogZGF0YURlZlxuICAgICAgICAgICAgfSBhcyBCYXNlRmlsdGVyPFQ+LFxuICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgICAgICB0aGlzLmRhdGFGaWx0ZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q29uZmlnKHJlcXVlc3Q6IGFueSwgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbFtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogRmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KGtleSkgfHwgT3JkZXJSdWxlLnZhbGlkYXRlKHRoaXMuZGVmaW5pdGlvbnNba2V5XSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCAodGhpcy5kZWZpbml0aW9uc1trZXldIGFzIEZpbHRlckRlZmluaXRpb24pLmdldENvbmZpZyhrZXksIHJlcXVlc3QsIHVzZXIpO1xuICAgICAgICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICAgICAgICBuYW1lOiBhd2FpdCB0aGlzLnRyYW5zbGF0ZUFkYXB0ZXIuZ2V0VHJhbnNsYXRpb24odXNlci5sYW5ndWFnZSwgRmlsdGVyVXRpbHMuZ2V0RmlsdGVyVHJhbnNsYXRpb25LZXkoa2V5KSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoQ29uZmlnVmFsdWVzKFxuICAgICAgICByZXF1ZXN0OiBhbnksXG4gICAgICAgIHNlYXJjaDogRmlsdGVyQ29uZmlndXJhdGlvblNlYXJjaE1vZGVsLFxuICAgICAgICB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbFxuICAgICk6IFByb21pc2U8U2VsZWN0RmlsdGVyVmFsdWVbXT4ge1xuICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoc2VhcmNoLmlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tzZWFyY2guaWRdO1xuICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgU2VsZWN0RmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZmlsdGVyLnZhbHVlcyh7IHZhbHVlOiBzZWFyY2gudmFsdWUsIHVzZXIsIHJlcXVlc3QgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRSZXNvdXJjZVZhbHVlQnlJZChyZXF1ZXN0OiBhbnksIHNlYXJjaDogRmlsdGVyUmVzb3VyY2VWYWx1ZU1vZGVsLCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8U2VsZWN0RmlsdGVyVmFsdWU+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHNlYXJjaC5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbc2VhcmNoLmlkXTtcbiAgICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFNlbGVjdEZpbHRlciAmJiBmaWx0ZXIuZ2V0UmVzb3VyY2VCeUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZmlsdGVyLmdldFJlc291cmNlQnlJZCh7IGlkOiBzZWFyY2gucmVzb3VyY2VJZCwgdXNlciwgcmVxdWVzdCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY291bnQodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBwdWJsaWMgYXN5bmMgY291bnQob3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBwdWJsaWMgYXN5bmMgY291bnQoLi4uYXJnczogW0RhdGFGaWx0ZXJVc2VyTW9kZWwgfCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJRdWVyeU1vZGVsP10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBbdXNlck9yT3B0LCBvcHRdID0gYXJncztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdCA/IG9wdCA6IHVzZXJPck9wdCBhcyBGaWx0ZXJRdWVyeU1vZGVsO1xuICAgICAgICBjb25zdCB1c2VyID0gb3B0ID8gdXNlck9yT3B0IGFzIERhdGFGaWx0ZXJVc2VyTW9kZWwgOiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGNvdW50T3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0RmluZE9wdGlvbnModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCBvcHRpb25zLnF1ZXJ5KTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24ob3B0aW9ucy5zZWFyY2gsIGNvdW50T3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB1c2VyID8gdGhpcy5jb3VudFRvdGFsVmFsdWVzKHVzZXIsIGNvdW50T3B0aW9ucykgOiB0aGlzLmNvdW50VG90YWxWYWx1ZXMoY291bnRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwpOiBQcm9taXNlPEZpbHRlclJlc3VsdE1vZGVsPERhdGE+PjtcbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyKG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwpOiBQcm9taXNlPEZpbHRlclJlc3VsdE1vZGVsPERhdGE+PjtcbiAgICBwdWJsaWMgYXN5bmMgZmlsdGVyKC4uLmFyZ3M6IFtEYXRhRmlsdGVyVXNlck1vZGVsIHwgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUXVlcnlNb2RlbD9dKTogUHJvbWlzZTxGaWx0ZXJSZXN1bHRNb2RlbDxEYXRhPj4ge1xuICAgICAgICBjb25zdCBbdXNlck9yT3B0LCBvcHRdID0gYXJncztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdCA/IG9wdCA6IHVzZXJPck9wdCBhcyBGaWx0ZXJRdWVyeU1vZGVsO1xuICAgICAgICBjb25zdCB1c2VyID0gb3B0ID8gdXNlck9yT3B0IGFzIERhdGFGaWx0ZXJVc2VyTW9kZWwgOiBudWxsO1xuICAgICAgICBpZiAoIW9wdGlvbnMub3JkZXIgfHwgIW9wdGlvbnMub3JkZXIuY29sdW1uKSB7XG4gICAgICAgICAgICBvcHRpb25zLm9yZGVyID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbjogXCJpZFwiLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJhc2NcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvdW50T3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0RmluZE9wdGlvbnModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCBvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLmRhdGEpO1xuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgY291bnRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRPcmRlckNvbmRpdGlvbihvcHRpb25zLm9yZGVyLCBjb3VudE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEdyb3VwT3B0aW9uKG9wdGlvbnMsIGNvdW50T3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgdG90YWwgPSBhd2FpdCAodXNlciA/IHRoaXMuY291bnRUb3RhbFZhbHVlcyh1c2VyLCBjb3VudE9wdGlvbnMpIDogdGhpcy5jb3VudFRvdGFsVmFsdWVzKGNvdW50T3B0aW9ucykpO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCAodXNlciA/IHRoaXMuZmluZFZhbHVlcyh1c2VyLCBvcHRpb25zLCBjb3VudE9wdGlvbnMpIDogdGhpcy5maW5kVmFsdWVzKG9wdGlvbnMsIGNvdW50T3B0aW9ucykpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG90YWwsXG4gICAgICAgICAgICBwYWdlOiBvcHRpb25zLnBhZ2UsXG4gICAgICAgICAgICB2YWx1ZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKFxuICAgICAgICB1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLFxuICAgICAgICB0eXBlOiBFeHBvcnRUeXBlcyxcbiAgICAgICAgb3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCxcbiAgICAgICAgZXhwb3J0T3B0aW9ucz86IG9iamVjdFxuICAgICk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGZpbmRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnkpO1xuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgZmluZE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGZpbmRPcHRpb25zKTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMucGFnZTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgKHVzZXIgPyB0aGlzLmZpbmRWYWx1ZXModXNlciwgb3B0aW9ucywgZmluZE9wdGlvbnMpIDogdGhpcy5maW5kVmFsdWVzKG9wdGlvbnMsIGZpbmRPcHRpb25zKSk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCB0aGlzLm1vZGVsLmdldEV4cG9ydGVkRmllbGRzS2V5cygpO1xuICAgICAgICBpZiAoaGVhZGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBQcm9taXNlLmFsbCh2YWx1ZXMubWFwKCh2YWx1ZSkgPT4gdGhpcy5tb2RlbC5nZXRFeHBvcnRlZEZpZWxkcyh2YWx1ZSkpKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZG93bmxvYWREYXRhKGhlYWRlcnMsIGRhdGEsIHR5cGUsIHVzZXI/Lmxhbmd1YWdlID8/IFwiZnJcIiwgZXhwb3J0T3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmRvd25sb2FkRGF0YSh2YWx1ZXMsIHR5cGUsIHVzZXI/Lmxhbmd1YWdlID8/IFwiZnJcIiwgZXhwb3J0T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmluZE9wdGlvbnMobW9kZWw6IHR5cGVvZiBNLCBxdWVyeTogUXVlcnlNb2RlbCwgZGF0YT86IG9iamVjdCk6IFByb21pc2U8RmluZE9wdGlvbnM+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlc2V0IEdlbyBsb2NhbGl6YXRpb24gZmlsdGVyIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICBHZW9Mb2NhbGl6YXRpb25GaWx0ZXIucmVzZXQoKTtcblxuICAgICAgICBxdWVyeSA9IHRoaXMuYWRkRGVmYXVsdEZpbHRlcihxdWVyeSk7XG4gICAgICAgIGxldCBvcHRpb246IEZpbmRPcHRpb25zID0ge307XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gW107XG4gICAgICAgICAgICBjb25zdCBoYXZpbmdDb25kaXRpb25zID0gW107XG5cbiAgICAgICAgICAgIG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogYXdhaXQgdGhpcy5nZXRJbmNsdWRlKG1vZGVsLCBxdWVyeSwgZGF0YSksXG4gICAgICAgICAgICAgICAgd2hlcmU6IHF1ZXJ5LmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IHdoZXJlQ29uZGl0aW9ucyB9IDogeyBbT3Aub3JdOiB3aGVyZUNvbmRpdGlvbnMgfSxcbiAgICAgICAgICAgICAgICBoYXZpbmc6IHF1ZXJ5LmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IGhhdmluZ0NvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogaGF2aW5nQ29uZGl0aW9ucyB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbm9pZCA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVXaGVyZU9wdGlvbnMocXVlcnksIHdoZXJlQ29uZGl0aW9ucyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSGF2aW5nT3B0aW9ucyhxdWVyeSwgaGF2aW5nQ29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmICghcGFyYW5vaWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb24ucGFyYW5vaWQgPSBwYXJhbm9pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFoYXZpbmdDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb24uaGF2aW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMucmVwb3NpdG9yeSA9IHRoaXMuZGF0YUZpbHRlci5mb3IodGhpcy5tb2RlbC5kYXRhRGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMubW9kZWwudHJhbnNsYXRlU2VydmljZSA9IHRoaXMudHJhbnNsYXRlQWRhcHRlcjtcblxuICAgICAgICB0aGlzLmRlZmluaXRpb25zID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhRmlsdGVyLnZhbGlkYXRlKHRoaXMubW9kZWxba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSAmJlxuICAgICAgICAgICAgICAgICFHcm91cEZpbHRlci52YWxpZGF0ZSh0aGlzLm1vZGVsW2tleV0gYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKSAmJlxuICAgICAgICAgICAgICAgICFPcmRlclJ1bGUudmFsaWRhdGUodGhpcy5tb2RlbFtrZXldIGFzIE9yZGVyUnVsZURlZmluaXRpb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kZWZpbml0aW9uc1trZXldID0gdGhpcy5tb2RlbFtrZXldIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBxdWVyeTogUXVlcnlNb2RlbCwgZGF0YT86IG9iamVjdCk6IFByb21pc2U8SW5jbHVkZWFibGVbXT4ge1xuICAgICAgICBpZiAoIXF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgbSA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goYXdhaXQgdGhpcy5nZXRJbmNsdWRlKG1vZGVsLCBtLCBkYXRhKSBhcyBJbmNsdWRlT3B0aW9uc1tdKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXTtcbiAgICAgICAgICAgIGlmICgoZmlsdGVyIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbikucm9vdEZpbHRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBmaWx0ZXIgYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRGaWx0ZXJJbmNsdWRlKG1vZGVsLCBmLnJvb3RGaWx0ZXIsIGRhdGEpKTtcblxuICAgICAgICAgICAgICAgIGlmICghZi5sYXp5TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZi52YWx1ZUZpbHRlciwgZGF0YSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRmlsZXIgPSBhd2FpdCBmLmdldFZhbHVlRmlsdGVyKHIudmFsdWVbMF0pO1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgdmFsdWVGaWxlciBhcyBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRGaWx0ZXJJbmNsdWRlKG1vZGVsLCBmaWx0ZXIgYXMgRmlsdGVyRGVmaW5pdGlvbiwgZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5yZWR1Y2VJbmNsdWRlcyhpbmNsdWRlcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb25kaXRpb25JbmNsdWRlKG1vZGVsOiB0eXBlb2YgTSwgY29uZGl0aW9uOiBGaWx0ZXJDb25kaXRpb24pOiBJbmNsdWRlT3B0aW9uc1tdIHtcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBjb25kaXRpb24ucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBydWxlIGFzIEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICAgIGlmIChjLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRDb25kaXRpb25JbmNsdWRlKG1vZGVsLCBjb25kaXRpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIEZpbHRlckNvbmRpdGlvblJ1bGU7XG4gICAgICAgICAgICBpZiAoci5wYXRoKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyhtb2RlbCwgeyBwYXRoOiByLnBhdGggfSwgW10sIHsgaW5jbHVkZTogW10gfSwgdHJ1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmNsdWRlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlV2hlcmVPcHRpb25zKHF1ZXJ5OiBRdWVyeU1vZGVsLCBvcHRpb25zOiBXaGVyZU9wdGlvbnNbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFyYW5vaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBydWxlIGFzIFF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgY29uc3Qgb3AgPSBjLmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IE9wLmFuZCA6IE9wLm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IHdoZXJlID0geyBbb3BdOiBjb25kaXRpb25zIH07XG4gICAgICAgICAgICAgICAgcGFyYW5vaWQgPSBwYXJhbm9pZCAmJiBhd2FpdCB0aGlzLmdlbmVyYXRlV2hlcmVPcHRpb25zKGMsIGNvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHdoZXJlW29wIGFzIGFueV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaCh3aGVyZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHIuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbci5pZF0gYXMgRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICghT3JkZXJSdWxlLnZhbGlkYXRlKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gYXdhaXQgZmlsdGVyLmdldFdoZXJlT3B0aW9ucyhyKTtcblxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChmaWx0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJhbm9pZCA9IGZpbHRlci5wYXJhbm9pZCA/PyB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFub2lkO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVIYXZpbmdPcHRpb25zKHF1ZXJ5OiBRdWVyeU1vZGVsLCBvcHRpb25zOiBXaGVyZU9wdGlvbnNbXSkge1xuICAgICAgICBpZiAoIXF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBydWxlIGFzIFF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0gW107XG4gICAgICAgICAgICAgICAgY29uc3Qgb3AgPSBjLmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IE9wLmFuZCA6IE9wLm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhdmluZyA9IHsgW29wXTogY29uZGl0aW9ucyB9O1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVIYXZpbmdPcHRpb25zKGMsIGNvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhhdmluZ1tvcCBhcyBhbnldLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2goaGF2aW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXSBhcyBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFPcmRlclJ1bGUudmFsaWRhdGUoZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBhd2FpdCBmaWx0ZXIuZ2V0SGF2aW5nT3B0aW9ucyhyKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2goZmlsdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoOiBGaWx0ZXJTZWFyY2hNb2RlbCwgb3B0aW9uczogQ291bnRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc2VhcmNoPy52YWx1ZT8udG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKCF2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcG9zaXRvcnkuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaC52YWx1ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRPcmRlckNvbmRpdGlvbihvcmRlcjogT3JkZXJNb2RlbCwgb3B0aW9uczogQ291bnRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGlmICghb3JkZXIgfHwgb3JkZXIuZGlyZWN0aW9uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5kZWZpbml0aW9uc1tvcmRlci5jb2x1bW5dIGFzIE9yZGVyUnVsZURlZmluaXRpb247XG4gICAgICAgIGNvbnN0IGluY2x1ZGVzID0gcnVsZSAmJiBPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkgP1xuICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCB7IHBhdGg6IHJ1bGUucGF0aCB9LCBbXSkgOlxuICAgICAgICAgICAgdGhpcy5yZXBvc2l0b3J5LmdlbmVyYXRlT3JkZXJJbmNsdWRlKG9yZGVyKTtcbiAgICAgICAgaWYgKCFpbmNsdWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXSxcbiAgICAgICAgICAgIGluY2x1ZGVzIGFzIEluY2x1ZGVPcHRpb25zW11cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEdyb3VwT3B0aW9uKHF1ZXJ5OiBGaWx0ZXJRdWVyeU1vZGVsLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHF1ZXJ5Py5vcmRlcj8uY29sdW1uID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBydWxlID0gdGhpcy5kZWZpbml0aW9uc1txdWVyeS5vcmRlci5jb2x1bW5dIGFzIE9yZGVyUnVsZURlZmluaXRpb247XG4gICAgICAgIGlmIChydWxlICYmIE9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnJlcG9zaXRvcnkubW9kZWw7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHF1ZXJ5Py5vcmRlcj8uY29sdW1uLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdmFsdWVzLnBvcCgpO1xuICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZ3JvdXAgPSBbYCR7bW9kZWwubmFtZX0uaWRgLCBgJHttb2RlbC5uYW1lfS4ke1NlcXVlbGl6ZVV0aWxzLmZpbmRDb2x1bW5GaWVsZE5hbWUobW9kZWwsIGNvbHVtbil9YF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLmdyb3VwID0gW2Ake21vZGVsLm5hbWV9LmlkYCwgLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0R3JvdXAobW9kZWwsIHF1ZXJ5Lm9yZGVyKV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvdW50VG90YWxWYWx1ZXModXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHJpdmF0ZSBhc3luYyBjb3VudFRvdGFsVmFsdWVzKG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHByaXZhdGUgYXN5bmMgY291bnRUb3RhbFZhbHVlcyguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbmRPcHRpb25zLCBGaW5kT3B0aW9ucz9dKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmluZE9wdGlvbnM7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgbWVhbnMgdGhhdCBjb3VudFRvdGFsVmFsdWVzIHdhcyBjYWxsZWQgd2l0aCBhIHVzZXJcbiAgICAgICAgICovXG4gICAgICAgIGlmIChvcHQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc0NvbnRyb2xXaGVyZUNvbmRpdGlvbihvcHRpb25zLndoZXJlLCB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5oYXZpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuZmluZEFsbCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzdWJRdWVyeTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuY291bnQoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH0pIGFzIGFueTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPih1c2VyOiBVc2VycywgZmlsdGVyOiBGaWx0ZXJRdWVyeU1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyk6IFByb21pc2U8RGF0YVtdPjtcbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPihmaWx0ZXI6IEZpbHRlclF1ZXJ5TW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxEYXRhW10+O1xuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KC4uLmFyZ3M6IFtVc2VycyB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWwgfCBGaW5kT3B0aW9ucywgRmluZE9wdGlvbnM/XSk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPRmlsdGVyLCBmaWx0ZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiBmaWx0ZXJPck9wdCBhcyBGaW5kT3B0aW9ucztcbiAgICAgICAgY29uc3QgZmlsdGVyID0gb3B0ID8gZmlsdGVyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbCA6IHVzZXJPck9GaWx0ZXIgYXMgRmlsdGVyUXVlcnlNb2RlbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZWFucyB0aGF0IGZpbmRWYWx1ZXMgd2FzIGNhbGxlZCB3aXRoIGEgdXNlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUsIHVzZXJPck9GaWx0ZXIgYXMgVXNlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmdldE9yZGVyT3B0aW9ucyhmaWx0ZXIub3JkZXIpO1xuICAgICAgICBjb25zdCBvcmRlclBhdGggPSBmaWx0ZXIub3JkZXI/LmNvbHVtbj8uc3BsaXQoXCIuXCIpID8/IFtdO1xuICAgICAgICBjb25zdCBvcmRlckNvbCA9IG9yZGVyUGF0aC5wb3AoKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5Lm1vZGVsLmZpbmRBbGwoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IG9yZGVyQ29sICYmICFvcmRlclBhdGgubGVuZ3RoID8gW1wiaWRcIiwgb3JkZXJDb2xdIDogW1wiaWRcIl0sXG4gICAgICAgICAgICBsaW1pdDogZmlsdGVyLnBhZ2UgPyBmaWx0ZXIucGFnZS5zaXplIDogbnVsbCxcbiAgICAgICAgICAgIG9mZnNldDogZmlsdGVyLnBhZ2UgPyBmaWx0ZXIucGFnZS5udW1iZXIgKiBmaWx0ZXIucGFnZS5zaXplIDogbnVsbCxcbiAgICAgICAgICAgIHN1YlF1ZXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwID0gZmlsdGVyLmdyb3VwQnkgPyBbU2VxdWVsaXplVXRpbHMuZ2V0R3JvdXBMaXRlcmFsKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgZmlsdGVyLmdyb3VwQnkpXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5maW5kQWxsKHtcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHZhbHVlcy5tYXAoeCA9PiB4LmlkKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgICAgcGFyYW5vaWQ6IG9wdGlvbnMucGFyYW5vaWQsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICB9LCBmaWx0ZXIuZGF0YSA/PyB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRBY2Nlc3NDb250cm9sV2hlcmVDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdXNlciBmb3VuZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjZXNzQ29udHJvbCBpc24ndCBlbmFibGUgaW4geW91ciBwcm9qZWN0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5tZXJnZVdoZXJlKHsgaWQ6IHJlc291cmNlcy5pZHMgfSwgd2hlcmUgPz8ge30pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNvdXJjZXMud2hlcmUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLndoZXJlLFxuICAgICAgICAgICAgICAgICAgICB3aGVyZSA/PyB7fVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyhtb2RlbDogSW5jbHVkZVdoZXJlTW9kZWwsIGRhdGE/OiBvYmplY3QpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBpZiAoIW1vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtb2RlbCkge1xuICAgICAgICAgICAgaWYgKCFtb2RlbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kZWxba2V5XShkYXRhKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICB3aGVyZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJJbmNsdWRlKG1vZGVsOiB0eXBlb2YgTSwgZmlsdGVyOiBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhPzogb2JqZWN0KTogSW5jbHVkZU9wdGlvbnNbXVtdIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIucGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGZpbHRlci5jb25kaXRpb24pXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyhtb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IGZpbHRlci5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmFub2lkOiBmaWx0ZXIucGFyYW5vaWQsXG4gICAgICAgICAgICAgICAgd2hlcmU6IHRoaXMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoZmlsdGVyLndoZXJlLCBkYXRhKVxuICAgICAgICAgICAgfSwgW10sIFtdLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgZmlsdGVyLmNvbmRpdGlvbilcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVyT3B0aW9ucyhvcmRlck9iajogT3JkZXJNb2RlbCk6IE9yZGVyIHtcbiAgICAgICAgaWYgKCFvcmRlck9iaiB8fCAhb3JkZXJPYmouY29sdW1uIHx8IG9yZGVyT2JqLmRpcmVjdGlvbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXJPYmouY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICBpZiAoIXJ1bGUgfHwgIU9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVyKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3JkZXJPYmopO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtbcnVsZS5nZXRPcmRlck9wdGlvbigpLCBvcmRlck9iai5kaXJlY3Rpb24udG9VcHBlckNhc2UoKV1dO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRGVmYXVsdEZpbHRlcihxdWVyeTogUXVlcnlNb2RlbCk6IFF1ZXJ5TW9kZWwge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGVmYXVsdEZpbHRlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5Py5jb25kaXRpb24gIT09IFwiYW5kXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcImFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocXVlcnk/LmNvbmRpdGlvbiAhPT0gXCJvclwiKSB7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJvclwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnkucnVsZXMucHVzaCh0aGlzLm1vZGVsLmRlZmF1bHRGaWx0ZXIuZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbn1cbiJdfQ==
|
|
498
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FBdUg7QUFFdkgsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUVqRSxnRUFBMkQ7QUFHM0QsaUZBQTRFO0FBQzVFLHdEQUF1RDtBQUN2RCwrQ0FBMkM7QUFDM0MsaURBQTZDO0FBQzdDLHVDQU9tQjtBQUNuQiwrRUFBMEU7QUFDMUUseURBQTRFO0FBSzVFLHlEQUEwRTtBQUcxRSxJQUFhLGFBQWEscUJBQTFCLE1BQWEsYUFBYTtJQUl0QixZQUNZLG9CQUEwQyxFQUMxQyxnQkFBa0MsRUFDbEMsS0FBdUIsRUFDdkIscUJBQTRDLEVBQzVDLFVBQTZCO1FBSjdCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBRXJDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sT0FBTyxDQUFJLE9BQWdCO1FBQzlCLE9BQU8sSUFBSSxlQUFhLENBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQjtZQUNJLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixjQUFjLEVBQUUsT0FBTztTQUNULEVBQ2xCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQVksRUFBRSxJQUEwQjtRQUMzRCxNQUFNLE1BQU0sR0FBK0IsRUFBRSxDQUFDO1FBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMs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TUFBTSxHQUFHLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLE1BQU0sQ0FBQSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxDQUFDO29CQUNOLE1BQU0sRUFBRSxJQUFJO29CQUNaLFNBQVMsRUFBRSxLQUFLO2lCQUNuQixDQUFDLENBQUM7U0FDTjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxNQUFvQjtRQUNqRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUcsQ0FBQztDQUNKLENBQUE7QUE1akJZLGFBQWE7SUFEekIsSUFBQSxtQkFBVSxHQUFFO3FDQU15Qiw2Q0FBb0I7UUFDeEIsb0NBQWdCO1FBQzNCLHdCQUFVO1FBQ00sK0NBQXFCO1FBQ2hDLHVDQUFpQjtHQVRoQyxhQUFhLENBNGpCekI7QUE1akJZLHNDQUFhIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBDb3VudE9wdGlvbnMsIEZpbmRPcHRpb25zLCBJbmNsdWRlYWJsZSwgSW5jbHVkZU9wdGlvbnMsIE9wLCBPcmRlciwgT3JkZXJJdGVtLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcywgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUmVzdWx0TW9kZWwsIEZpbHRlclNlYXJjaE1vZGVsLCBPcmRlck1vZGVsIH0gZnJvbSBcIi4uL1wiO1xuaW1wb3J0IHsgQWNjZXNzQ29udHJvbEFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlcnMvYWNjZXNzLWNvbnRyb2wuYWRhcHRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy90cmFuc2xhdGUuYWRhcHRlclwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vZGF0YS1maWx0ZXIucmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vZGF0YS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyIH0gZnJvbSBcIi4vYmFzZS1maWx0ZXJcIjtcbmltcG9ydCB7IEZpbHRlclV0aWxzIH0gZnJvbSBcIi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQge1xuICAgIEZpbHRlcixcbiAgICBGaWx0ZXJDb25kaXRpb24sXG4gICAgRmlsdGVyQ29uZGl0aW9uUnVsZSxcbiAgICBGaWx0ZXJEZWZpbml0aW9uLFxuICAgIFNlbGVjdEZpbHRlcixcbiAgICBTZWxlY3RGaWx0ZXJWYWx1ZVxufSBmcm9tIFwiLi9maWx0ZXJzXCI7XG5pbXBvcnQgeyBHZW9Mb2NhbGl6YXRpb25GaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJzL2dlby1sb2NhbGl6YXRpb24uZmlsdGVyXCI7XG5pbXBvcnQgeyBHcm91cEZpbHRlciwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcIi4vZmlsdGVycy9ncm91cC5maWx0ZXJcIjtcbmltcG9ydCB7IFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24tc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24ubW9kZWxcIjtcbmltcG9ydCB7IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXItcmVzb3VyY2UtdmFsdWUubW9kZWxcIjtcbmltcG9ydCB7IE9yZGVyUnVsZSwgT3JkZXJSdWxlRGVmaW5pdGlvbiB9IGZyb20gXCIuL29yZGVyLXJ1bGVzL29yZGVyLXJ1bGVcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpbHRlclNlcnZpY2U8RGF0YT4ge1xuICAgIHByaXZhdGUgZGVmaW5pdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IEZpbHRlckRlZmluaXRpb24gfCBHcm91cEZpbHRlckRlZmluaXRpb24gfCBPcmRlclJ1bGVEZWZpbml0aW9uIH07XG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5OiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVBZGFwdGVyOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIG1vZGVsOiBCYXNlRmlsdGVyPERhdGE+LFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGRhdGFGaWx0ZXI6IERhdGFGaWx0ZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEYXRhPFQ+KGRhdGFEZWY6IFR5cGU8VD4pOiBGaWx0ZXJTZXJ2aWNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJTZXJ2aWNlKFxuICAgICAgICAgICAgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgIGRhdGFEZWZpbml0aW9uOiBkYXRhRGVmXG4gICAgICAgICAgICB9IGFzIEJhc2VGaWx0ZXI8VD4sXG4gICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lcixcbiAgICAgICAgICAgIHRoaXMuZGF0YUZpbHRlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb25maWcocmVxdWVzdDogYW55LCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8RmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBPcmRlclJ1bGUudmFsaWRhdGUodGhpcy5kZWZpbml0aW9uc1trZXldIGFzIE9yZGVyUnVsZURlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0ICh0aGlzLmRlZmluaXRpb25zW2tleV0gYXMgRmlsdGVyRGVmaW5pdGlvbikuZ2V0Q29uZmlnKGtleSwgcmVxdWVzdCwgdXNlcik7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBpZDoga2V5LFxuICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMudHJhbnNsYXRlQWRhcHRlci5nZXRUcmFuc2xhdGlvbih1c2VyLmxhbmd1YWdlLCBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJUcmFuc2xhdGlvbktleShrZXkpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hDb25maWdWYWx1ZXMoXG4gICAgICAgIHJlcXVlc3Q6IGFueSxcbiAgICAgICAgc2VhcmNoOiBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwsXG4gICAgICAgIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsXG4gICAgKTogUHJvbWlzZTxTZWxlY3RGaWx0ZXJWYWx1ZVtdPiB7XG4gICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShzZWFyY2guaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3NlYXJjaC5pZF07XG4gICAgICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBTZWxlY3RGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmaWx0ZXIudmFsdWVzKHsgdmFsdWU6IHNlYXJjaC52YWx1ZSwgdXNlciwgcmVxdWVzdCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZFJlc291cmNlVmFsdWVCeUlkKHJlcXVlc3Q6IGFueSwgc2VhcmNoOiBGaWx0ZXJSZXNvdXJjZVZhbHVlTW9kZWwsIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxTZWxlY3RGaWx0ZXJWYWx1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoc2VhcmNoLmlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tzZWFyY2guaWRdO1xuICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgU2VsZWN0RmlsdGVyICYmIGZpbHRlci5nZXRSZXNvdXJjZUJ5SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmaWx0ZXIuZ2V0UmVzb3VyY2VCeUlkKHsgaWQ6IHNlYXJjaC5yZXNvdXJjZUlkLCB1c2VyLCByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHB1YmxpYyBhc3luYyBjb3VudChvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHB1YmxpYyBhc3luYyBjb3VudCguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWw/XSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBvcHQgPyB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCA6IG51bGw7XG5cbiAgICAgICAgY29uc3QgY291bnRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnkpO1xuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgY291bnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHVzZXIgPyB0aGlzLmNvdW50VG90YWxWYWx1ZXModXNlciwgY291bnRPcHRpb25zKSA6IHRoaXMuY291bnRUb3RhbFZhbHVlcyhjb3VudE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+O1xuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIob3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+O1xuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIoLi4uYXJnczogW0RhdGFGaWx0ZXJVc2VyTW9kZWwgfCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJRdWVyeU1vZGVsP10pOiBQcm9taXNlPEZpbHRlclJlc3VsdE1vZGVsPERhdGE+PiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBvcHQgPyB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCA6IG51bGw7XG5cbiAgICAgICAgb3B0aW9ucy5vcmRlciA9IHRoaXMubm9ybWFsaXplT3JkZXIob3B0aW9ucy5vcmRlcik7XG5cbiAgICAgICAgY29uc3QgY291bnRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnksIG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKG9wdGlvbnMuc2VhcmNoLCBjb3VudE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGNvdW50T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkR3JvdXBPcHRpb24ob3B0aW9ucy5vcmRlciwgY291bnRPcHRpb25zKTtcblxuICAgICAgICBjb25zdCB0b3RhbCA9IGF3YWl0ICh1c2VyID8gdGhpcy5jb3VudFRvdGFsVmFsdWVzKHVzZXIsIGNvdW50T3B0aW9ucykgOiB0aGlzLmNvdW50VG90YWxWYWx1ZXMoY291bnRPcHRpb25zKSk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0ICh1c2VyID8gdGhpcy5maW5kVmFsdWVzKHVzZXIsIG9wdGlvbnMsIGNvdW50T3B0aW9ucykgOiB0aGlzLmZpbmRWYWx1ZXMob3B0aW9ucywgY291bnRPcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICAgIHBhZ2U6IG9wdGlvbnMucGFnZSxcbiAgICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZERhdGEoXG4gICAgICAgIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsXG4gICAgICAgIHR5cGU6IEV4cG9ydFR5cGVzLFxuICAgICAgICBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsLFxuICAgICAgICBleHBvcnRPcHRpb25zPzogb2JqZWN0XG4gICAgKTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZmluZE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSk7XG5cbiAgICAgICAgb3B0aW9ucy5vcmRlciA9IHRoaXMubm9ybWFsaXplT3JkZXIob3B0aW9ucy5vcmRlcik7XG5cbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24ob3B0aW9ucy5zZWFyY2gsIGZpbmRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRPcmRlckNvbmRpdGlvbihvcHRpb25zLm9yZGVyLCBmaW5kT3B0aW9ucyk7XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLnBhZ2U7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0ICh1c2VyID8gdGhpcy5maW5kVmFsdWVzKHVzZXIsIG9wdGlvbnMsIGZpbmRPcHRpb25zKSA6IHRoaXMuZmluZFZhbHVlcyhvcHRpb25zLCBmaW5kT3B0aW9ucykpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgdGhpcy5tb2RlbC5nZXRFeHBvcnRlZEZpZWxkc0tleXMoKTtcbiAgICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzLm1hcCgodmFsdWUpID0+IHRoaXMubW9kZWwuZ2V0RXhwb3J0ZWRGaWVsZHModmFsdWUpKSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmRvd25sb2FkRGF0YShoZWFkZXJzLCBkYXRhLCB0eXBlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIGV4cG9ydE9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5kb3dubG9hZERhdGEodmFsdWVzLCB0eXBlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIGV4cG9ydE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbmRPcHRpb25zKG1vZGVsOiB0eXBlb2YgTSwgcXVlcnk6IFF1ZXJ5TW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQcm9taXNlPEZpbmRPcHRpb25zPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXNldCBHZW8gbG9jYWxpemF0aW9uIGZpbHRlciBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgR2VvTG9jYWxpemF0aW9uRmlsdGVyLnJlc2V0KCk7XG5cbiAgICAgICAgcXVlcnkgPSB0aGlzLmFkZERlZmF1bHRGaWx0ZXIocXVlcnkpO1xuICAgICAgICBsZXQgb3B0aW9uOiBGaW5kT3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaGF2aW5nQ29uZGl0aW9ucyA9IFtdO1xuXG4gICAgICAgICAgICBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IGF3YWl0IHRoaXMuZ2V0SW5jbHVkZShtb2RlbCwgcXVlcnksIGRhdGEpLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBxdWVyeS5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiB3aGVyZUNvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogd2hlcmVDb25kaXRpb25zIH0sXG4gICAgICAgICAgICAgICAgaGF2aW5nOiBxdWVyeS5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBoYXZpbmdDb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGhhdmluZ0NvbmRpdGlvbnMgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW5vaWQgPSBhd2FpdCB0aGlzLmdlbmVyYXRlV2hlcmVPcHRpb25zKHF1ZXJ5LCB3aGVyZUNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUhhdmluZ09wdGlvbnMocXVlcnksIGhhdmluZ0NvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoIXBhcmFub2lkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnBhcmFub2lkID0gcGFyYW5vaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaGF2aW5nQ29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgb3B0aW9uLmhhdmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSB0aGlzLmRhdGFGaWx0ZXIuZm9yKHRoaXMubW9kZWwuZGF0YURlZmluaXRpb24pO1xuICAgICAgICB0aGlzLm1vZGVsLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLnRyYW5zbGF0ZUFkYXB0ZXI7XG5cbiAgICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIUZpbHRlci52YWxpZGF0ZSh0aGlzLm1vZGVsW2tleV0gYXMgRmlsdGVyRGVmaW5pdGlvbikgJiZcbiAgICAgICAgICAgICAgICAhR3JvdXBGaWx0ZXIudmFsaWRhdGUodGhpcy5tb2RlbFtrZXldIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbikgJiZcbiAgICAgICAgICAgICAgICAhT3JkZXJSdWxlLnZhbGlkYXRlKHRoaXMubW9kZWxba2V5XSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGVmaW5pdGlvbnNba2V5XSA9IHRoaXMubW9kZWxba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRJbmNsdWRlKG1vZGVsOiB0eXBlb2YgTSwgcXVlcnk6IFF1ZXJ5TW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQcm9taXNlPEluY2x1ZGVhYmxlW10+IHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBydWxlIGFzIFF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICBpZiAobS5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKGF3YWl0IHRoaXMuZ2V0SW5jbHVkZShtb2RlbCwgbSwgZGF0YSkgYXMgSW5jbHVkZU9wdGlvbnNbXSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHIuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbci5pZF07XG4gICAgICAgICAgICBpZiAoKGZpbHRlciBhcyBHcm91cEZpbHRlckRlZmluaXRpb24pLnJvb3RGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmID0gZmlsdGVyIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZi5yb290RmlsdGVyLCBkYXRhKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWYubGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIGYudmFsdWVGaWx0ZXIsIGRhdGEpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUZpbGVyID0gYXdhaXQgZi5nZXRWYWx1ZUZpbHRlcihyLnZhbHVlWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIHZhbHVlRmlsZXIgYXMgRmlsdGVyRGVmaW5pdGlvbiwgZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIGZpbHRlciBhcyBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbmRpdGlvbkluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBjb25kaXRpb246IEZpbHRlckNvbmRpdGlvbik6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbmRpdGlvbi5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGNvbmRpdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uUnVsZTtcbiAgICAgICAgICAgIGlmIChyLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKG1vZGVsLCB7IHBhdGg6IHIucGF0aCB9LCBbXSwgeyBpbmNsdWRlOiBbXSB9LCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluY2x1ZGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVXaGVyZU9wdGlvbnMocXVlcnk6IFF1ZXJ5TW9kZWwsIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXJhbm9pZCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChjLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IGMuY29uZGl0aW9uID09PSBcImFuZFwiID8gT3AuYW5kIDogT3Aub3I7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2hlcmUgPSB7IFtvcF06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgICAgICAgICBwYXJhbm9pZCA9IHBhcmFub2lkICYmIGF3YWl0IHRoaXMuZ2VuZXJhdGVXaGVyZU9wdGlvbnMoYywgY29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBpZiAod2hlcmVbb3AgYXMgYW55XS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHdoZXJlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXSBhcyBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFPcmRlclJ1bGUudmFsaWRhdGUoZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBhd2FpdCBmaWx0ZXIuZ2V0V2hlcmVPcHRpb25zKHIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGZpbHRlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFub2lkID0gZmlsdGVyLnBhcmFub2lkID8/IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW5vaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZUhhdmluZ09wdGlvbnMocXVlcnk6IFF1ZXJ5TW9kZWwsIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdKSB7XG4gICAgICAgIGlmICghcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChjLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IGMuY29uZGl0aW9uID09PSBcImFuZFwiID8gT3AuYW5kIDogT3Aub3I7XG4gICAgICAgICAgICAgICAgY29uc3QgaGF2aW5nID0geyBbb3BdOiBjb25kaXRpb25zIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUhhdmluZ09wdGlvbnMoYywgY29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGF2aW5nW29wIGFzIGFueV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChoYXZpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBRdWVyeVJ1bGVNb2RlbDtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShyLmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3IuaWRdIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIU9yZGVyUnVsZS52YWxpZGF0ZShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IGF3YWl0IGZpbHRlci5nZXRIYXZpbmdPcHRpb25zKHIpO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChmaWx0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2g6IEZpbHRlclNlYXJjaE1vZGVsLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzZWFyY2g/LnZhbHVlPy50b1N0cmluZygpO1xuICAgICAgICBpZiAoIXZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVwb3NpdG9yeS5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLnZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE9yZGVyQ29uZGl0aW9uKG9yZGVyczogT3JkZXJNb2RlbFtdLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9yZGVycy5ldmVyeShvcmRlciA9PiAhb3JkZXIuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmRlZmluaXRpb25zW29yZGVyLmNvbHVtbl0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVzID0gcnVsZSAmJiBPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkgP1xuICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgeyBwYXRoOiBydWxlLnBhdGggfSwgW10pIDpcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9zaXRvcnkuZ2VuZXJhdGVPcmRlckluY2x1ZGUob3JkZXIpO1xuXG4gICAgICAgICAgICBpZiAoIWluY2x1ZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgPSBTZXF1ZWxpemVVdGlscy5tZXJnZUluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVzIGFzIEluY2x1ZGVPcHRpb25zW11cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRHcm91cE9wdGlvbihvcmRlcnM6IE9yZGVyTW9kZWxbXSwgb3B0aW9uczogQ291bnRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yZXBvc2l0b3J5Lm1vZGVsO1xuICAgICAgICBvcHRpb25zLmdyb3VwID0gW2Ake21vZGVsLm5hbWV9LmlkYF07XG5cbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmRlZmluaXRpb25zW29yZGVyLmNvbHVtbl0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmIChydWxlICYmIE9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZXMucG9wKCk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmdyb3VwLnB1c2goYCR7bW9kZWwubmFtZX0uJHtTZXF1ZWxpemVVdGlscy5maW5kQ29sdW1uRmllbGROYW1lKG1vZGVsLCBjb2x1bW4pfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmdyb3VwLnB1c2goLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0R3JvdXAobW9kZWwsIG9yZGVyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvdW50VG90YWxWYWx1ZXModXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHJpdmF0ZSBhc3luYyBjb3VudFRvdGFsVmFsdWVzKG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHByaXZhdGUgYXN5bmMgY291bnRUb3RhbFZhbHVlcyguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbmRPcHRpb25zLCBGaW5kT3B0aW9ucz9dKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmluZE9wdGlvbnM7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgbWVhbnMgdGhhdCBjb3VudFRvdGFsVmFsdWVzIHdhcyBjYWxsZWQgd2l0aCBhIHVzZXJcbiAgICAgICAgICovXG4gICAgICAgIGlmIChvcHQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc0NvbnRyb2xXaGVyZUNvbmRpdGlvbihvcHRpb25zLndoZXJlLCB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5oYXZpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuZmluZEFsbCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzdWJRdWVyeTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuY291bnQoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH0pIGFzIGFueTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPih1c2VyOiBVc2VycywgZmlsdGVyOiBGaWx0ZXJRdWVyeU1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyk6IFByb21pc2U8RGF0YVtdPjtcbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPihmaWx0ZXI6IEZpbHRlclF1ZXJ5TW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxEYXRhW10+O1xuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KC4uLmFyZ3M6IFtVc2VycyB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWwgfCBGaW5kT3B0aW9ucywgRmluZE9wdGlvbnM/XSk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPRmlsdGVyLCBmaWx0ZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiBmaWx0ZXJPck9wdCBhcyBGaW5kT3B0aW9ucztcbiAgICAgICAgY29uc3QgZmlsdGVyID0gb3B0ID8gZmlsdGVyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbCA6IHVzZXJPck9GaWx0ZXIgYXMgRmlsdGVyUXVlcnlNb2RlbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZWFucyB0aGF0IGZpbmRWYWx1ZXMgd2FzIGNhbGxlZCB3aXRoIGEgdXNlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUsIHVzZXJPck9GaWx0ZXIgYXMgVXNlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmdldE9yZGVyT3B0aW9ucyhmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdKTtcblxuICAgICAgICBjb25zdCBub25OZXN0ZWRPcmRlckNvbHVtbnMgPSAoZmlsdGVyLm9yZGVyIGFzIE9yZGVyTW9kZWxbXSlcbiAgICAgICAgICAgIC5tYXAob3JkZXIgPT4gb3JkZXIuY29sdW1uKVxuICAgICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uICYmICFjb2x1bW4uaW5jbHVkZXMoXCIuXCIpKTtcblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuZmluZEFsbCh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW1wiaWRcIiwgLi4ubm9uTmVzdGVkT3JkZXJDb2x1bW5zXSxcbiAgICAgICAgICAgIGxpbWl0OiBmaWx0ZXIucGFnZSA/IGZpbHRlci5wYWdlLnNpemUgOiBudWxsLFxuICAgICAgICAgICAgb2Zmc2V0OiBmaWx0ZXIucGFnZSA/IGZpbHRlci5wYWdlLm51bWJlciAqIGZpbHRlci5wYWdlLnNpemUgKyAoZmlsdGVyLnBhZ2Uub2Zmc2V0ID8/IDApIDogbnVsbCxcbiAgICAgICAgICAgIHN1YlF1ZXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwID0gZmlsdGVyLmdyb3VwQnkgPyBbU2VxdWVsaXplVXRpbHMuZ2V0R3JvdXBMaXRlcmFsKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgZmlsdGVyLmdyb3VwQnkpXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5maW5kQWxsKHtcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHZhbHVlcy5tYXAoeCA9PiB4LmlkKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgICAgcGFyYW5vaWQ6IG9wdGlvbnMucGFyYW5vaWQsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICB9LCBmaWx0ZXIuZGF0YSA/PyB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRBY2Nlc3NDb250cm9sV2hlcmVDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdXNlciBmb3VuZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjZXNzQ29udHJvbCBpc24ndCBlbmFibGUgaW4geW91ciBwcm9qZWN0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5tZXJnZVdoZXJlKHsgaWQ6IHJlc291cmNlcy5pZHMgfSwgd2hlcmUgPz8ge30pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNvdXJjZXMud2hlcmUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLndoZXJlLFxuICAgICAgICAgICAgICAgICAgICB3aGVyZSA/PyB7fVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyhtb2RlbDogSW5jbHVkZVdoZXJlTW9kZWwsIGRhdGE/OiBvYmplY3QpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBpZiAoIW1vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtb2RlbCkge1xuICAgICAgICAgICAgaWYgKCFtb2RlbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kZWxba2V5XShkYXRhKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICB3aGVyZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJJbmNsdWRlKG1vZGVsOiB0eXBlb2YgTSwgZmlsdGVyOiBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhPzogb2JqZWN0KTogSW5jbHVkZU9wdGlvbnNbXVtdIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIucGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGZpbHRlci5jb25kaXRpb24pXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyhtb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IGZpbHRlci5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmFub2lkOiBmaWx0ZXIucGFyYW5vaWQsXG4gICAgICAgICAgICAgICAgd2hlcmU6IHRoaXMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoZmlsdGVyLndoZXJlLCBkYXRhKVxuICAgICAgICAgICAgfSwgW10sIFtdLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgZmlsdGVyLmNvbmRpdGlvbilcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVyT3B0aW9ucyhvcmRlcnM6IE9yZGVyTW9kZWwgfCBPcmRlck1vZGVsW10pOiBPcmRlciB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgICAgICBvcmRlcnMgPSBbb3JkZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZE9yZGVyOiBPcmRlciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3JkZXIgb2Ygb3JkZXJzKSB7XG4gICAgICAgICAgICBpZiAoIW9yZGVyPy5jb2x1bW4gfHwgIW9yZGVyLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBydWxlID0gdGhpcy5kZWZpbml0aW9uc1tvcmRlci5jb2x1bW5dIGFzIE9yZGVyUnVsZURlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIXJ1bGUgfHwgIU9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2godGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0T3JkZXIodGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCBvcmRlcikgYXMgT3JkZXJJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVkT3JkZXIucHVzaChbcnVsZS5nZXRPcmRlck9wdGlvbigpLCBvcmRlci5kaXJlY3Rpb24udG9VcHBlckNhc2UoKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yZGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRGVmYXVsdEZpbHRlcihxdWVyeTogUXVlcnlNb2RlbCk6IFF1ZXJ5TW9kZWwge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGVmYXVsdEZpbHRlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5Py5jb25kaXRpb24gIT09IFwiYW5kXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcImFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocXVlcnk/LmNvbmRpdGlvbiAhPT0gXCJvclwiKSB7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJvclwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnkucnVsZXMucHVzaCh0aGlzLm1vZGVsLmRlZmF1bHRGaWx0ZXIuZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplT3JkZXIob3JkZXJzOiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdKTogT3JkZXJNb2RlbFtdIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JkZXJzID0gb3JkZXJzPy5maWx0ZXIob3JkZXIgPT4gb3JkZXI/LmNvbHVtbik7XG5cbiAgICAgICAgaWYgKCFvcmRlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgb3JkZXJzID0gW3tcbiAgICAgICAgICAgICAgICBjb2x1bW46IFwiaWRcIixcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFwiYXNjXCJcbiAgICAgICAgICAgIH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yZGVycztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vbk5lc3RlZE9yZGVyQ29sdW1ucyhvcmRlcnM6IE9yZGVyTW9kZWxbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIG9yZGVycy5maWx0ZXIob3JkZXIgPT4gb3JkZXIuY29sdW1uICYmICFvcmRlci5jb2x1bW4uaW5jbHVkZXMoXCIuXCIpKS5tYXAob3JkZXIgPT4gb3JkZXIuY29sdW1uKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -18,10 +18,10 @@ class GeoBoundsFilter extends filter_1.Filter {
|
|
|
18
18
|
points.push(points[0]);
|
|
19
19
|
const formattedPoints = points.map(([latitude, longitude]) => `${latitude} ${longitude}`).join(", ");
|
|
20
20
|
const polygon = (0, sequelize_1.fn)("ST_GeometryFromText", (0, sequelize_1.literal)(`'POLYGON((${formattedPoints}))'`), (_a = this.srid) !== null && _a !== void 0 ? _a : 0);
|
|
21
|
-
const point = (_b = this.attribute) !== null && _b !== void 0 ? _b : (0, sequelize_1.fn)("Point", this.path ? (0, sequelize_1.literal)(sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.
|
|
21
|
+
const point = (_b = this.attribute) !== null && _b !== void 0 ? _b : (0, sequelize_1.fn)("Point", this.path ? (0, sequelize_1.literal)(sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.lngAttribute, this.path)) : this.lngAttribute, this.path ? (0, sequelize_1.literal)(sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.latAttribute, this.path)) : this.latAttribute);
|
|
22
22
|
return (0, sequelize_1.where)((0, sequelize_1.fn)("ST_Contains", polygon, point), (0, sequelize_1.literal)(`${rule.operation === operators_1.FilterOperatorTypes.Equal ? 1 : 0}`));
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
exports.GeoBoundsFilter = GeoBoundsFilter;
|
|
26
26
|
|
|
27
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9nZW8tYm91bmRzLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkQ7QUFDN0QsMkRBQXVEO0FBRXZELDRDQUFvRTtBQUNwRSxrQ0FBcUM7QUFDckMscUNBQXdEO0FBaUJ4RCxNQUFhLGVBQWdCLFNBQVEsZUFBTTtJQU92QyxZQUFZLFVBQXFDO1FBQzdDLEtBQUssQ0FBQyxVQUFrQyxDQUFDLENBQUM7UUFQdkMsU0FBSSxHQUFHLGlCQUFVLENBQUMsU0FBUyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxDQUFDLEdBQUcsMkJBQWUsQ0FBQyxDQUFDO0lBT3hDLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQW9COztRQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBMkIsQ0FBQztRQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckcsTUFBTSxPQUFPLEdBQUcsSUFBQSxjQUFFLEVBQUMscUJBQXFCLEVBQUUsSUFBQSxtQkFBTyxFQUFDLGFBQWEsZUFBZSxLQUFLLENBQUMsRUFBRSxNQUFBLElBQUksQ0FBQyxJQUFJLG1DQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sS0FBSyxHQUFHLE1BQUEsSUFBSSxDQUFDLFNBQVMsbUNBQ3hCLElBQUEsY0FBRSxFQUNFLE9BQU8sRUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUN4RyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUMzRyxDQUFDO1FBQ04sT0FBTyxJQUFBLGlCQUFLLEVBQ1IsSUFBQSxjQUFFLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFDakMsSUFBQSxtQkFBTyxFQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSywrQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDckUsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQTNCRCwwQ0EyQkMiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2dlby1ib3VuZHMuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm4sIGxpdGVyYWwsIHdoZXJlLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi8uLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgRmlsdGVyT3BlcmF0b3JUeXBlcywgU2VsZWN0T3BlcmF0b3JzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvQm91bmRzRmlsdGVyRGVmaW5pdGlvbldpdGhQb2ludCB7XG4gICAgYXR0cmlidXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvQm91bmRzRmlsdGVyRGVmaW5pdGlvbldpdGhMYXRMbmcge1xuICAgIGxhdEF0dHJpYnV0ZTogc3RyaW5nO1xuICAgIGxuZ0F0dHJpYnV0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uICBleHRlbmRzIE9taXQ8QmFzZUZpbHRlckRlZmluaXRpb24sIFwiYXR0cmlidXRlXCI+IHtcbiAgICBzcmlkPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uID0gQmFzZUdlb0JvdW5kc0ZpbHRlckRlZmluaXRpb24gJiAoR2VvQm91bmRzRmlsdGVyRGVmaW5pdGlvbldpdGhQb2ludCB8IEdlb0JvdW5kc0ZpbHRlckRlZmluaXRpb25XaXRoTGF0TG5nKTtcblxuZXhwb3J0IGNsYXNzIEdlb0JvdW5kc0ZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIEJhc2VHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uLCBHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uV2l0aFBvaW50LCBHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uV2l0aExhdExuZyAge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5HZW9Cb3VuZHM7XG4gICAgcHVibGljIG9wZXJhdG9ycyA9IFsuLi5TZWxlY3RPcGVyYXRvcnNdO1xuICAgIHB1YmxpYyBsYXRBdHRyaWJ1dGU6IHN0cmluZztcbiAgICBwdWJsaWMgbG5nQXR0cmlidXRlOiBzdHJpbmc7XG4gICAgcHVibGljIHNyaWQ/OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGRlZmluaXRpb24gYXMgQmFzZUZpbHRlckRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBydWxlLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl1bXTtcbiAgICAgICAgcG9pbnRzLnB1c2gocG9pbnRzWzBdKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkUG9pbnRzID0gcG9pbnRzLm1hcCgoW2xhdGl0dWRlLCBsb25naXR1ZGVdKSA9PiBgJHtsYXRpdHVkZX0gJHtsb25naXR1ZGV9YCkuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zdCBwb2x5Z29uID0gZm4oXCJTVF9HZW9tZXRyeUZyb21UZXh0XCIsIGxpdGVyYWwoYCdQT0xZR09OKCgke2Zvcm1hdHRlZFBvaW50c30pKSdgKSwgdGhpcy5zcmlkID8/IDApO1xuICAgICAgICBjb25zdCBwb2ludCA9IHRoaXMuYXR0cmlidXRlID8/
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9nZW8tYm91bmRzLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkQ7QUFDN0QsMkRBQXVEO0FBRXZELDRDQUFvRTtBQUNwRSxrQ0FBcUM7QUFDckMscUNBQXdEO0FBaUJ4RCxNQUFhLGVBQWdCLFNBQVEsZUFBTTtJQU92QyxZQUFZLFVBQXFDO1FBQzdDLEtBQUssQ0FBQyxVQUFrQyxDQUFDLENBQUM7UUFQdkMsU0FBSSxHQUFHLGlCQUFVLENBQUMsU0FBUyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxDQUFDLEdBQUcsMkJBQWUsQ0FBQyxDQUFDO0lBT3hDLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQW9COztRQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBMkIsQ0FBQztRQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckcsTUFBTSxPQUFPLEdBQUcsSUFBQSxjQUFFLEVBQUMscUJBQXFCLEVBQUUsSUFBQSxtQkFBTyxFQUFDLGFBQWEsZUFBZSxLQUFLLENBQUMsRUFBRSxNQUFBLElBQUksQ0FBQyxJQUFJLG1DQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sS0FBSyxHQUFHLE1BQUEsSUFBSSxDQUFDLFNBQVMsbUNBQ3hCLElBQUEsY0FBRSxFQUNFLE9BQU8sRUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUN4RyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUMzRyxDQUFDO1FBQ04sT0FBTyxJQUFBLGlCQUFLLEVBQ1IsSUFBQSxjQUFFLEVBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFDakMsSUFBQSxtQkFBTyxFQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSywrQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDckUsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQTNCRCwwQ0EyQkMiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXJzL2dlby1ib3VuZHMuZmlsdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm4sIGxpdGVyYWwsIHdoZXJlLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi8uLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuaW1wb3J0IHsgRmlsdGVyT3BlcmF0b3JUeXBlcywgU2VsZWN0T3BlcmF0b3JzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvQm91bmRzRmlsdGVyRGVmaW5pdGlvbldpdGhQb2ludCB7XG4gICAgYXR0cmlidXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvQm91bmRzRmlsdGVyRGVmaW5pdGlvbldpdGhMYXRMbmcge1xuICAgIGxhdEF0dHJpYnV0ZTogc3RyaW5nO1xuICAgIGxuZ0F0dHJpYnV0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uICBleHRlbmRzIE9taXQ8QmFzZUZpbHRlckRlZmluaXRpb24sIFwiYXR0cmlidXRlXCI+IHtcbiAgICBzcmlkPzogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uID0gQmFzZUdlb0JvdW5kc0ZpbHRlckRlZmluaXRpb24gJiAoR2VvQm91bmRzRmlsdGVyRGVmaW5pdGlvbldpdGhQb2ludCB8IEdlb0JvdW5kc0ZpbHRlckRlZmluaXRpb25XaXRoTGF0TG5nKTtcblxuZXhwb3J0IGNsYXNzIEdlb0JvdW5kc0ZpbHRlciBleHRlbmRzIEZpbHRlciBpbXBsZW1lbnRzIEJhc2VHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uLCBHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uV2l0aFBvaW50LCBHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uV2l0aExhdExuZyAge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5HZW9Cb3VuZHM7XG4gICAgcHVibGljIG9wZXJhdG9ycyA9IFsuLi5TZWxlY3RPcGVyYXRvcnNdO1xuICAgIHB1YmxpYyBsYXRBdHRyaWJ1dGU6IHN0cmluZztcbiAgICBwdWJsaWMgbG5nQXR0cmlidXRlOiBzdHJpbmc7XG4gICAgcHVibGljIHNyaWQ/OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZpbml0aW9uOiBHZW9Cb3VuZHNGaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgICAgIHN1cGVyKGRlZmluaXRpb24gYXMgQmFzZUZpbHRlckRlZmluaXRpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBydWxlLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl1bXTtcbiAgICAgICAgcG9pbnRzLnB1c2gocG9pbnRzWzBdKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkUG9pbnRzID0gcG9pbnRzLm1hcCgoW2xhdGl0dWRlLCBsb25naXR1ZGVdKSA9PiBgJHtsYXRpdHVkZX0gJHtsb25naXR1ZGV9YCkuam9pbihcIiwgXCIpO1xuICAgICAgICBjb25zdCBwb2x5Z29uID0gZm4oXCJTVF9HZW9tZXRyeUZyb21UZXh0XCIsIGxpdGVyYWwoYCdQT0xZR09OKCgke2Zvcm1hdHRlZFBvaW50c30pKSdgKSwgdGhpcy5zcmlkID8/IDApO1xuICAgICAgICBjb25zdCBwb2ludCA9IHRoaXMuYXR0cmlidXRlID8/XG4gICAgICAgICAgICBmbihcbiAgICAgICAgICAgICAgICBcIlBvaW50XCIsXG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoID8gbGl0ZXJhbChTZXF1ZWxpemVVdGlscy5nZXRMaXRlcmFsRnVsbE5hbWUodGhpcy5sbmdBdHRyaWJ1dGUsIHRoaXMucGF0aCkpIDogdGhpcy5sbmdBdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoID8gbGl0ZXJhbChTZXF1ZWxpemVVdGlscy5nZXRMaXRlcmFsRnVsbE5hbWUodGhpcy5sYXRBdHRyaWJ1dGUsIHRoaXMucGF0aCkpIDogdGhpcy5sYXRBdHRyaWJ1dGVcbiAgICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiB3aGVyZShcbiAgICAgICAgICAgIGZuKFwiU1RfQ29udGFpbnNcIiwgcG9seWdvbiwgcG9pbnQpLFxuICAgICAgICAgICAgbGl0ZXJhbChgJHtydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCA/IDEgOiAwfWApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,16 +1,24 @@
|
|
|
1
|
-
import { CustomAttributesConfig } from "./custom-attributes.model";
|
|
2
1
|
import { ProjectionAlias } from "sequelize";
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { CustomAttributesConfig } from "./custom-attributes.model";
|
|
3
|
+
export interface BaseDistanceConfig {
|
|
5
4
|
coordinates: (option?: any) => [number, number];
|
|
6
5
|
name: string;
|
|
7
6
|
path?: string;
|
|
8
7
|
srid?: number;
|
|
9
8
|
}
|
|
9
|
+
export interface DistanceConfigWithPoint {
|
|
10
|
+
attribute: string;
|
|
11
|
+
}
|
|
12
|
+
export interface DistanceConfigWithLatLng {
|
|
13
|
+
latAttribute: string;
|
|
14
|
+
lngAttribute: string;
|
|
15
|
+
}
|
|
16
|
+
export declare type DistanceConfig = BaseDistanceConfig & (DistanceConfigWithPoint | DistanceConfigWithLatLng);
|
|
10
17
|
export declare class DistanceAttributesConfig implements CustomAttributesConfig<DistanceConfig> {
|
|
11
18
|
key: string;
|
|
12
19
|
config: DistanceConfig;
|
|
13
20
|
type: string;
|
|
14
21
|
constructor(key: string, config: DistanceConfig);
|
|
15
22
|
transform(options: object, path?: string): string | ProjectionAlias;
|
|
23
|
+
private getPointAttribute;
|
|
16
24
|
}
|
|
@@ -25,11 +25,20 @@ class DistanceAttributesConfig {
|
|
|
25
25
|
if (path || this.config.path) {
|
|
26
26
|
path = [path, this.config.path].filter(x => x).join(".");
|
|
27
27
|
}
|
|
28
|
-
const name = path ? sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.config.attribute, path) : this.config.attribute;
|
|
29
28
|
const location = (0, sequelize_1.fn)("ST_GeometryFromText", (0, sequelize_1.literal)(`'POINT(${latitude} ${longitude})'`), (_a = this.config.srid) !== null && _a !== void 0 ? _a : 0);
|
|
30
|
-
return [(0, sequelize_1.fn)("ST_Distance_Sphere",
|
|
29
|
+
return [(0, sequelize_1.fn)("ST_Distance_Sphere", this.getPointAttribute(path), location), (_b = this.config.name) !== null && _b !== void 0 ? _b : this.key];
|
|
30
|
+
}
|
|
31
|
+
getPointAttribute(path) {
|
|
32
|
+
if (this.config.attribute) {
|
|
33
|
+
const att = this.config.attribute;
|
|
34
|
+
return (0, sequelize_1.literal)(path ? sequelize_utils_1.SequelizeUtils.getLiteralFullName(att, path) : att);
|
|
35
|
+
}
|
|
36
|
+
const lat = path ? sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.config.latAttribute, path) : this.config.latAttribute;
|
|
37
|
+
const lng = path ? sequelize_utils_1.SequelizeUtils.getLiteralFullName(this.config.lngAttribute, path) : this.config.lngAttribute;
|
|
38
|
+
const point = (0, sequelize_1.fn)("Point", lng, lat);
|
|
39
|
+
return this.config.srid ? (0, sequelize_1.fn)("ST_SRID", point, this.config.srid) : point;
|
|
31
40
|
}
|
|
32
41
|
}
|
|
33
42
|
exports.DistanceAttributesConfig = DistanceAttributesConfig;
|
|
34
43
|
|
|
35
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvZGlzdGFuY2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQXlEO0FBQ3pELHdEQUFvRDtBQXFCcEQsTUFBYSx3QkFBd0I7SUFHakMsWUFBbUIsR0FBVyxFQUFTLE1BQXNCO1FBQTFDLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUZ0RCxTQUFJLEdBQUcsVUFBVSxDQUFDO0lBRXVDLENBQUM7SUFFMUQsU0FBUyxDQUFDLE9BQWUsRUFBRSxJQUFhOztRQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQzFDLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUMvRCxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBQSxjQUFFLEVBQUMscUJBQXFCLEVBQUUsSUFBQSxtQkFBTyxFQUFDLFVBQVUsUUFBUSxJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUUsTUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksbUNBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEgsT0FBTyxDQUFDLElBQUEsY0FBRSxFQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxtQ0FBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVk7UUFDbEMsSUFBSyxJQUFJLENBQUMsTUFBa0MsQ0FBQyxTQUFTLEVBQUU7WUFDcEQsTUFBTSxHQUFHLEdBQUksSUFBSSxDQUFDLE1BQWtDLENBQUMsU0FBUyxDQUFDO1lBQy9ELE9BQU8sSUFBQSxtQkFBTyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdFO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBYyxDQUFDLGtCQUFrQixDQUFFLElBQUksQ0FBQyxNQUFtQyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLE1BQW1DLENBQUMsWUFBWSxDQUFDO1FBQzVLLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsZ0NBQWMsQ0FBQyxrQkFBa0IsQ0FBRSxJQUFJLENBQUMsTUFBbUMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxNQUFtQyxDQUFDLFlBQVksQ0FBQztRQUM1SyxNQUFNLEtBQUssR0FBRyxJQUFBLGNBQUUsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsY0FBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzdFLENBQUM7Q0FDSjtBQXRDRCw0REFzQ0MiLCJmaWxlIjoibGliL21vZGVscy9kaXN0YW5jZS5tb2RlbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZuLCBsaXRlcmFsLCBQcm9qZWN0aW9uQWxpYXMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IEN1c3RvbUF0dHJpYnV0ZXNDb25maWcgfSBmcm9tIFwiLi9jdXN0b20tYXR0cmlidXRlcy5tb2RlbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEaXN0YW5jZUNvbmZpZyB7XG4gICAgY29vcmRpbmF0ZXM6IChvcHRpb24/KSA9PiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHNyaWQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdGFuY2VDb25maWdXaXRoUG9pbnQge1xuICAgIGF0dHJpYnV0ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpc3RhbmNlQ29uZmlnV2l0aExhdExuZyB7XG4gICAgbGF0QXR0cmlidXRlOiBzdHJpbmc7XG4gICAgbG5nQXR0cmlidXRlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIERpc3RhbmNlQ29uZmlnID0gQmFzZURpc3RhbmNlQ29uZmlnICYgKERpc3RhbmNlQ29uZmlnV2l0aFBvaW50IHwgRGlzdGFuY2VDb25maWdXaXRoTGF0TG5nKTtcblxuZXhwb3J0IGNsYXNzIERpc3RhbmNlQXR0cmlidXRlc0NvbmZpZyBpbXBsZW1lbnRzIEN1c3RvbUF0dHJpYnV0ZXNDb25maWc8RGlzdGFuY2VDb25maWc+IHtcbiAgICBwdWJsaWMgdHlwZSA9IFwiZGlzdGFuY2VcIjtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBrZXk6IHN0cmluZywgcHVibGljIGNvbmZpZzogRGlzdGFuY2VDb25maWcpIHt9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtKG9wdGlvbnM6IG9iamVjdCwgcGF0aD86IHN0cmluZyk6IHN0cmluZyB8IFByb2plY3Rpb25BbGlhcyB7XG4gICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuY29uZmlnLmNvb3JkaW5hdGVzKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIWNvb3JkaW5hdGVzIHx8IGNvb3JkaW5hdGVzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW2xhdGl0dWRlLCBsb25naXR1ZGVdID0gY29vcmRpbmF0ZXM7XG4gICAgICAgIGlmICh0eXBlb2YgbGF0aXR1ZGUgIT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGxvbmdpdHVkZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGggfHwgdGhpcy5jb25maWcucGF0aCkge1xuICAgICAgICAgICAgcGF0aCA9IFtwYXRoLCB0aGlzLmNvbmZpZy5wYXRoXS5maWx0ZXIoeCA9PiB4KS5qb2luKFwiLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gZm4oXCJTVF9HZW9tZXRyeUZyb21UZXh0XCIsIGxpdGVyYWwoYCdQT0lOVCgke2xhdGl0dWRlfSAke2xvbmdpdHVkZX0pJ2ApLCB0aGlzLmNvbmZpZy5zcmlkID8/IDApO1xuICAgICAgICByZXR1cm4gW2ZuKFwiU1RfRGlzdGFuY2VfU3BoZXJlXCIsIHRoaXMuZ2V0UG9pbnRBdHRyaWJ1dGUocGF0aCksIGxvY2F0aW9uKSwgdGhpcy5jb25maWcubmFtZSA/PyB0aGlzLmtleV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQb2ludEF0dHJpYnV0ZShwYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCh0aGlzLmNvbmZpZyBhcyBEaXN0YW5jZUNvbmZpZ1dpdGhQb2ludCkuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICBjb25zdCBhdHQgPSAodGhpcy5jb25maWcgYXMgRGlzdGFuY2VDb25maWdXaXRoUG9pbnQpLmF0dHJpYnV0ZTtcbiAgICAgICAgICAgIHJldHVybiBsaXRlcmFsKHBhdGggPyBTZXF1ZWxpemVVdGlscy5nZXRMaXRlcmFsRnVsbE5hbWUoYXR0LCBwYXRoKSA6IGF0dCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXQgPSBwYXRoID8gU2VxdWVsaXplVXRpbHMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKCh0aGlzLmNvbmZpZyBhcyBEaXN0YW5jZUNvbmZpZ1dpdGhMYXRMbmcpLmxhdEF0dHJpYnV0ZSwgcGF0aCkgOiAodGhpcy5jb25maWcgYXMgRGlzdGFuY2VDb25maWdXaXRoTGF0TG5nKS5sYXRBdHRyaWJ1dGU7XG4gICAgICAgIGNvbnN0IGxuZyA9IHBhdGggPyBTZXF1ZWxpemVVdGlscy5nZXRMaXRlcmFsRnVsbE5hbWUoKHRoaXMuY29uZmlnIGFzIERpc3RhbmNlQ29uZmlnV2l0aExhdExuZykubG5nQXR0cmlidXRlLCBwYXRoKSA6ICh0aGlzLmNvbmZpZyBhcyBEaXN0YW5jZUNvbmZpZ1dpdGhMYXRMbmcpLmxuZ0F0dHJpYnV0ZTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBmbihcIlBvaW50XCIsIGxuZywgbGF0KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnNyaWQgPyBmbihcIlNUX1NSSURcIiwgcG9pbnQsIHRoaXMuY29uZmlnLnNyaWQpIDogcG9pbnQ7XG4gICAgfVxufVxuIl19
|
|
@@ -2,6 +2,7 @@ import { QueryModel } from "../filter/models/query.model";
|
|
|
2
2
|
export interface FilterPageMode {
|
|
3
3
|
number: number;
|
|
4
4
|
size: number;
|
|
5
|
+
offset?: number;
|
|
5
6
|
}
|
|
6
7
|
export interface FilterSearchModel {
|
|
7
8
|
value: string;
|
|
@@ -15,7 +16,7 @@ export interface FilterQueryModel {
|
|
|
15
16
|
page?: FilterPageMode;
|
|
16
17
|
search?: FilterSearchModel;
|
|
17
18
|
query?: QueryModel;
|
|
18
|
-
order?: OrderModel;
|
|
19
|
+
order?: OrderModel | OrderModel[];
|
|
19
20
|
data?: object;
|
|
20
21
|
groupBy?: string;
|
|
21
22
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
|
|
4
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvZmlsdGVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoibGliL21vZGVscy9maWx0ZXIubW9kZWwuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeU1vZGVsIH0gZnJvbSBcIi4uL2ZpbHRlci9tb2RlbHMvcXVlcnkubW9kZWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJQYWdlTW9kZSB7XG4gICAgbnVtYmVyOiBudW1iZXI7XG4gICAgc2l6ZTogbnVtYmVyO1xuICAgIG9mZnNldD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJTZWFyY2hNb2RlbCB7XG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmRlck1vZGVsIHtcbiAgICBjb2x1bW46IHN0cmluZztcbiAgICBkaXJlY3Rpb246IFwiYXNjXCIgfCBcImRlc2NcIiB8IFwiXCI7XG4gICAgbnVsbExhc3Q/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlclF1ZXJ5TW9kZWwge1xuICAgIHBhZ2U/OiBGaWx0ZXJQYWdlTW9kZTtcbiAgICBzZWFyY2g/OiBGaWx0ZXJTZWFyY2hNb2RlbDtcbiAgICBxdWVyeT86IFF1ZXJ5TW9kZWw7XG4gICAgb3JkZXI/OiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdO1xuICAgIGRhdGE/OiBvYmplY3Q7XG4gICAgZ3JvdXBCeT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJSZXN1bHRNb2RlbDxUPiB7XG4gICAgdmFsdWVzOiBUW107XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYWdlPzoge1xuICAgICAgICBudW1iZXI6IG51bWJlcjtcbiAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgIH07XG59XG4iXX0=
|
|
@@ -103,7 +103,7 @@ let SequelizeModelScanner = class SequelizeModelScanner {
|
|
|
103
103
|
return result;
|
|
104
104
|
}
|
|
105
105
|
getOrder(model, orderObj) {
|
|
106
|
-
if (!orderObj ||
|
|
106
|
+
if (!(orderObj === null || orderObj === void 0 ? void 0 : orderObj.column) || !orderObj.direction) {
|
|
107
107
|
return;
|
|
108
108
|
}
|
|
109
109
|
const values = orderObj.column.split(".");
|
|
@@ -188,4 +188,4 @@ SequelizeModelScanner = __decorate([
|
|
|
188
188
|
], SequelizeModelScanner);
|
|
189
189
|
exports.SequelizeModelScanner = SequelizeModelScanner;
|
|
190
190
|
|
|
191
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSwyQ0FBNEM7QUFDNUMsNERBQXFEO0FBQ3JELHlDQUFpRjtBQUNqRiwrREFBNEY7QUFLNUYsd0RBQXVEO0FBR3ZELElBQWEscUJBQXFCLEdBQWxDLE1BQWEscUJBQXFCO0lBQ3ZCLFdBQVcsQ0FDZCxLQUFtQixFQUNuQixJQUFlLEVBQ2Ysa0JBQWtDLEVBQ2xDLFVBQWlDLEVBQ2pDLGdCQUFnQixHQUFHLEtBQUs7O1FBRXhCLE1BQU0sT0FBTyxHQUFHLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksMENBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLENBQUEsRUFBRTtZQUNsQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsTUFBTSxNQUFNLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLFFBQVEsR0FBcUIsTUFBTSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1lBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsRUFBRSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQVk7Z0JBQ2pDLEtBQUssRUFBRSxXQUFXLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3ZDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUM3QyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUM7WUFFSCxJQUFJLENB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SUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDekIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFnQyxDQUFDO2dCQUNyRCxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQTJCLENBQUM7YUFDdEQ7U0FDSjtRQUVELFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQW1CLEVBQUUsR0FBVztRQUNwRCxNQUFNLFlBQVksR0FBRyxJQUFBLHNDQUFlLEVBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXRELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0NBQ0osQ0FBQTtBQTVOWSxxQkFBcUI7SUFEakMsSUFBQSxtQkFBVSxHQUFFO0dBQ0EscUJBQXFCLENBNE5qQztBQTVOWSxzREFBcUIiLCJmaWxlIjoibGliL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgVHlwZVV0aWxzIH0gZnJvbSBcIkByZWN1cnN5dmUvbmVzdGpzLWNvbW1vblwiO1xuaW1wb3J0IHsgRmluZEF0dHJpYnV0ZU9wdGlvbnMsIEluY2x1ZGVPcHRpb25zLCBsaXRlcmFsLCBPcmRlciB9IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IEFzc29jaWF0aW9uLCBCYXNlQXNzb2NpYXRpb24sIGdldEFzc29jaWF0aW9ucywgTW9kZWwgfSBmcm9tIFwic2VxdWVsaXplLXR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IE9yZGVyTW9kZWwgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IEluY2x1ZGVNb2RlbCB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgUGF0aE1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9wYXRoLm1vZGVsXCI7XG5pbXBvcnQgeyBTZWFyY2hBdHRyaWJ1dGVzTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3NlYXJjaC1hdHRyaWJ1dGVzLm1vZGVsXCI7XG5pbXBvcnQgeyBNLCBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB7XG4gICAgcHVibGljIGdldEluY2x1ZGVzKFxuICAgICAgICBtb2RlbDogdHlwZW9mIE1vZGVsLFxuICAgICAgICBwYXRoOiBQYXRoTW9kZWwsXG4gICAgICAgIGFkZGl0aW9uYWxJbmNsdWRlczogSW5jbHVkZU1vZGVsW10sXG4gICAgICAgIGF0dHJpYnV0ZXM/OiBGaW5kQXR0cmlidXRlT3B0aW9ucyxcbiAgICAgICAgaWdub3JlQXR0cmlidXRlcyA9IGZhbHNlXG4gICAgKTogSW5jbHVkZU9wdGlvbnNbXSB7XG4gICAgICAgIGNvbnN0IG9iamVjdHMgPSBwYXRoPy5wYXRoPy5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmICghb2JqZWN0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQ6IEluY2x1ZGVPcHRpb25zW10gPSBbXTtcbiAgICAgICAgbGV0IGluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdID0gcmVzdWx0O1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIG9iaik7XG4gICAgICAgICAgICBpbmNsdWRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBhczogYXNzb2NpYXRpb24uZ2V0QXMoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgbW9kZWw6IGFzc29jaWF0aW9uLmdldEFzc29jaWF0ZWRDbGFzcygpLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGlnbm9yZUF0dHJpYnV0ZXMgPyBbXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBbXSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaSsrIDwgb2JqZWN0cy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBpbmNsdWRlc1swXS5tb2RlbCBhcyB1bmtub3duIGFzIHR5cGVvZiBNb2RlbDtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcyA9IGluY2x1ZGVzWzBdLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBpbmNsdWRlc1swXS5hdHRyaWJ1dGVzID0gaWdub3JlQXR0cmlidXRlcyA/IFtdIDogU2VxdWVsaXplVXRpbHMubWVyZ2VBdHRyaWJ1dGVzKGluY2x1ZGVzWzBdLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoLndoZXJlKSB7XG4gICAgICAgICAgICBpbmNsdWRlc1swXS53aGVyZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlV2hlcmUoaW5jbHVkZXNbMF0ud2hlcmUsIHBhdGgud2hlcmUpO1xuICAgICAgICAgICAgaW5jbHVkZXNbMF0ucmVxdWlyZWQgPSAhIXBhdGgucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGluY2x1ZGVzWzBdLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluY2x1ZGVzWzBdLnBhcmFub2lkID0gISFwYXRoLnBhcmFub2lkO1xuICAgICAgICBpbmNsdWRlc1swXS5zZXBhcmF0ZSA9ICEhcGF0aC5zZXBhcmF0ZTtcbiAgICAgICAgaW5jbHVkZXNbMF0ub3JkZXIgPSBwYXRoLm9yZGVyO1xuXG4gICAgICAgIGlmIChUeXBlVXRpbHMuaXNOb3ROdWxsT3JVbmRlZmluZWQocGF0aC5zdWJRdWVyeSkpIHtcbiAgICAgICAgICAgIGluY2x1ZGVzWzBdLnN1YlF1ZXJ5ID0gcGF0aC5zdWJRdWVyeTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZEluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbmNsdWRlIG9mIGFkZGl0aW9uYWxJbmNsdWRlcykge1xuICAgICAgICAgICAgYWRkSW5jbHVkZXMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmdldEluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlc1swXS5tb2RlbCBhcyB1bmtub3duIGFzIHR5cGVvZiBNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogaW5jbHVkZS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXI6IGluY2x1ZGUub3JkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZTogaW5jbHVkZS53aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBpbmNsdWRlLnJlcXVpcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGU6IGluY2x1ZGUuc2VwYXJhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbm9pZDogaW5jbHVkZS5wYXJhbm9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiBpbmNsdWRlLnN1YlF1ZXJ5XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgIGlnbm9yZUF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZXNbMF0uaW5jbHVkZS5wdXNoKC4uLlNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGFkZEluY2x1ZGVzLCBpZ25vcmVBdHRyaWJ1dGVzKSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXR0cmlidXRlcyhcbiAgICAgICAgbW9kZWw6IHR5cGVvZiBNb2RlbCxcbiAgICAgICAgcGF0aDogUGF0aE1vZGVsLFxuICAgICAgICBhZGRpdGlvbmFsSW5jbHVkZXM6IEluY2x1ZGVNb2RlbFtdLFxuICAgICAgICBhdHRyaWJ1dGVzPzogRmluZEF0dHJpYnV0ZU9wdGlvbnNcbiAgICApOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSB7XG4gICAgICAgIGNvbnN0IG9iamVjdHMgPSBwYXRoLnBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICBpZiAoIW9iamVjdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQ6IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIG9iaik7XG4gICAgICAgICAgICBtb2RlbCA9IGFzc29jaWF0aW9uLmdldEFzc29jaWF0ZWRDbGFzcygpIGFzIHVua25vd24gYXMgdHlwZW9mIE1vZGVsO1xuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzID9cbiAgICAgICAgICAgIFNlcXVlbGl6ZVV0aWxzLmdldE1vZGVsU2VhcmNoYWJsZUZpZWxkQXR0cmlidXRlcyhtb2RlbCBhcyB0eXBlb2YgTSwgYXR0cmlidXRlcyBhcyBzdHJpbmdbXSkgOlxuICAgICAgICAgICAgU2VxdWVsaXplVXRpbHMuZ2V0TW9kZWxTZWFyY2hhYmxlQXR0cmlidXRlcyhtb2RlbCBhcyB0eXBlb2YgTSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgLi4uKGF0dHJpYnV0ZXMgYXMgc3RyaW5nW10pLm1hcChhID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogYSxcbiAgICAgICAgICAgICAgICBrZXk6IFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKGEsIHBhdGgucGF0aCksXG4gICAgICAgICAgICAgICAgbGl0ZXJhbEtleTogU2VxdWVsaXplVXRpbHMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGEsIHBhdGgucGF0aCksXG4gICAgICAgICAgICAgICAgaXNKc29uOiBTZXF1ZWxpemVVdGlscy5pc0NvbHVtbkpzb24obW9kZWwgYXMgdHlwZW9mIE0sIGEpXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGluY2x1ZGUgb2YgYWRkaXRpb25hbEluY2x1ZGVzKSB7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZS5pZ25vcmVJblNlYXJjaCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXN1bHQucHVzaChcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldEF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsIGFzIHR5cGVvZiBNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogaW5jbHVkZS5wYXRoXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLnNlYXJjaGFibGVBdHRyaWJ1dGVzID8/IGluY2x1ZGUuYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgICkubWFwKGEgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IFNlcXVlbGl6ZVV0aWxzLmdldEF0dHJpYnV0ZUZ1bGxOYW1lKGEubmFtZSwgW3BhdGgucGF0aCwgaW5jbHVkZS5wYXRoXS5qb2luKFwiLlwiKSksXG4gICAgICAgICAgICAgICAgICAgIGxpdGVyYWxLZXk6IFNlcXVlbGl6ZVV0aWxzLmdldExpdGVyYWxGdWxsTmFtZShhLm5hbWUsIFtwYXRoLnBhdGgsIGluY2x1ZGUucGF0aF0uam9pbihcIi5cIikpLFxuICAgICAgICAgICAgICAgICAgICBpc0pzb246IGEuaXNKc29uXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0T3JkZXIobW9kZWw6IHR5cGVvZiBNb2RlbCwgb3JkZXJPYmo6IE9yZGVyTW9kZWwpOiBPcmRlciB7XG4gICAgICAgIGlmICghb3JkZXJPYmogfHwgIW9yZGVyT2JqLmNvbHVtbiB8fCBvcmRlck9iai5kaXJlY3Rpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyT2JqLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIHZhbHVlKTtcbiAgICAgICAgICAgIG1vZGVsID0gYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCkgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sID0gU2VxdWVsaXplVXRpbHMuZmluZENvbHVtbkZpZWxkTmFtZShtb2RlbCBhcyB0eXBlb2YgTSwgY29sdW1uKTtcbiAgICAgICAgbGV0IGxpdGVyYWxPcmRlciA9IHZhbHVlcy5sZW5ndGggP1xuICAgICAgICAgICAgU2VxdWVsaXplVXRpbHMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGNvbCwgdmFsdWVzKSA6XG4gICAgICAgICAgICBgXFxgJHttb2RlbC5uYW1lfVxcYC5cXGAke2NvbH1cXGBgO1xuICAgICAgICBpZiAob3JkZXJPYmoubnVsbExhc3QgJiYgb3JkZXJPYmouZGlyZWN0aW9uID09PSBcImFzY1wiKSB7XG4gICAgICAgICAgICBsaXRlcmFsT3JkZXIgPSBgLSR7bGl0ZXJhbE9yZGVyfWA7XG4gICAgICAgICAgICBvcmRlck9iai5kaXJlY3Rpb24gPSBcImRlc2NcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkZXJPYmouZGlyZWN0aW9uID09PSBcImRlc2NcIikge1xuICAgICAgICAgICAgbGl0ZXJhbE9yZGVyICs9IGAgREVTQ2A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpdGVyYWwobGl0ZXJhbE9yZGVyKSBhcyBPcmRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0R3JvdXAobW9kZWw6IHR5cGVvZiBNb2RlbCwgb3JkZXJPYmo6IE9yZGVyTW9kZWwpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghb3JkZXJPYmogfHwgIW9yZGVyT2JqLmNvbHVtbiB8fCBvcmRlck9iai5kaXJlY3Rpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyb3VwOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBvcmRlck9iai5jb2x1bW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZXMucG9wKCk7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXMuZmluZEFzc29jaWF0aW9uKG1vZGVsLCB2YWx1ZSk7XG4gICAgICAgICAgICBtb2RlbCA9IGFzc29jaWF0aW9uLmdldEFzc29jaWF0ZWRDbGFzcygpIGFzIHVua25vd24gYXMgdHlwZW9mIE1vZGVsO1xuICAgICAgICAgICAgZ3JvdXAucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFNlcXVlbGl6ZVV0aWxzLmdldE9yZGVyRnVsbE5hbWUoXCJpZFwiLCBncm91cCksXG4gICAgICAgICAgICBTZXF1ZWxpemVVdGlscy5nZXRPcmRlckZ1bGxOYW1lKFNlcXVlbGl6ZVV0aWxzLmZpbmRDb2x1bW5GaWVsZE5hbWUobW9kZWwgYXMgdHlwZW9mIE0sIGNvbHVtbiksIGdyb3VwKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRPcmRlckluY2x1ZGVzKG1vZGVsOiB0eXBlb2YgTW9kZWwsIG9yZGVyT2JqOiBPcmRlck1vZGVsKTogSW5jbHVkZU9wdGlvbnNbXSB7XG4gICAgICAgIGlmICghb3JkZXJPYmogfHwgIW9yZGVyT2JqLmNvbHVtbiB8fCBvcmRlck9iai5kaXJlY3Rpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyT2JqLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJbmNsdWRlT3B0aW9uc1tdID0gW107XG4gICAgICAgIGxldCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXSA9IHJlc3VsdDtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSB0aGlzLmZpbmRBc3NvY2lhdGlvbihtb2RlbCwgdmFsdWUpO1xuICAgICAgICAgICAgaW5jbHVkZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgYXM6IGFzc29jaWF0aW9uLmdldEFzKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBhc3NvY2lhdGlvbi5nZXRBc3NvY2lhdGVkQ2xhc3MoKSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBbXSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGhyb3VnaDogYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRpb24oKSA9PT0gQXNzb2NpYXRpb24uQmVsb25nc1RvTWFueSA/IHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogW11cbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGkrKyA8IHZhbHVlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBpbmNsdWRlc1swXS5tb2RlbCBhcyB1bmtub3duIGFzIHR5cGVvZiBNb2RlbDtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcyA9IGluY2x1ZGVzWzBdLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluY2x1ZGVzWzBdLmF0dHJpYnV0ZXMgPSBbY29sdW1uXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRBc3NvY2lhdGlvbihtb2RlbDogdHlwZW9mIE1vZGVsLCBvYmo6IHN0cmluZyk6IEJhc2VBc3NvY2lhdGlvbjxhbnksIGFueT4ge1xuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBnZXRBc3NvY2lhdGlvbnMobW9kZWwucHJvdG90eXBlKTtcblxuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IGFzc29jaWF0aW9ucy5maW5kKGEgPT4gYS5nZXRBcygpID09PSBvYmopO1xuICAgICAgICBpZiAoIWFzc29jaWF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGFzc29jaWF0aW9uIGZvciAke29ian1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNzb2NpYXRpb247XG4gICAgfVxufVxuIl19
|
|
191
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSwyQ0FBNEM7QUFDNUMsNERBQXFEO0FBQ3JELHlDQUFpRjtBQUNqRiwrREFBNEY7QUFLNUYsd0RBQXVEO0FBR3ZELElBQWEscUJBQXFCLEdBQWxDLE1BQWEscUJBQXFCO0lBQ3ZCLFdBQVcsQ0FDZCxLQUFtQixFQUNuQixJQUFlLEVBQ2Ysa0JBQWtDLEVBQ2xDLFVBQWlDLEVBQ2pDLGdCQUFnQixHQUFHLEtBQUs7O1FBRXhCLE1BQU0sT0FBTyxHQUFHLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLElBQUksMENBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxNQUFNLENBQUEsRUFBRTtZQUNsQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsTUFBTSxNQUFNLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxJQUFJLFFBQVEsR0FBcUIsTUFBTSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1lBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsRUFBRSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQVk7Z0JBQ2pDLEtBQUssRUFBRSxXQUFXLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3ZDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2dCQUM3QyxPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUM7WUFFSCxJQUFJLENB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LENBQUM7WUFFSCxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN6QixLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQWdDLENBQUM7Z0JBQ3JELFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBMkIsQ0FBQzthQUN0RDtTQUNKO1FBRUQsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBbUIsRUFBRSxHQUFXO1FBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUEsc0NBQWUsRUFBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUM1RDtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7Q0FDSixDQUFBO0FBNU5ZLHFCQUFxQjtJQURqQyxJQUFBLG1CQUFVLEdBQUU7R0FDQSxxQkFBcUIsQ0E0TmpDO0FBNU5ZLHNEQUFxQiIsImZpbGUiOiJsaWIvc2Nhbm5lcnMvc2VxdWVsaXplLW1vZGVsLnNjYW5uZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBUeXBlVXRpbHMgfSBmcm9tIFwiQHJlY3Vyc3l2ZS9uZXN0anMtY29tbW9uXCI7XG5pbXBvcnQgeyBGaW5kQXR0cmlidXRlT3B0aW9ucywgSW5jbHVkZU9wdGlvbnMsIGxpdGVyYWwsIE9yZGVyIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgQXNzb2NpYXRpb24sIEJhc2VBc3NvY2lhdGlvbiwgZ2V0QXNzb2NpYXRpb25zLCBNb2RlbCB9IGZyb20gXCJzZXF1ZWxpemUtdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgT3JkZXJNb2RlbCB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgSW5jbHVkZU1vZGVsIH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBQYXRoTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3BhdGgubW9kZWxcIjtcbmltcG9ydCB7IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvc2VhcmNoLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IE0sIFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VxdWVsaXplTW9kZWxTY2FubmVyIHtcbiAgICBwdWJsaWMgZ2V0SW5jbHVkZXMoXG4gICAgICAgIG1vZGVsOiB0eXBlb2YgTW9kZWwsXG4gICAgICAgIHBhdGg6IFBhdGhNb2RlbCxcbiAgICAgICAgYWRkaXRpb25hbEluY2x1ZGVzOiBJbmNsdWRlTW9kZWxbXSxcbiAgICAgICAgYXR0cmlidXRlcz86IEZpbmRBdHRyaWJ1dGVPcHRpb25zLFxuICAgICAgICBpZ25vcmVBdHRyaWJ1dGVzID0gZmFsc2VcbiAgICApOiBJbmNsdWRlT3B0aW9uc1tdIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0cyA9IHBhdGg/LnBhdGg/LnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKCFvYmplY3RzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogSW5jbHVkZU9wdGlvbnNbXSA9IFtdO1xuICAgICAgICBsZXQgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW10gPSByZXN1bHQ7XG4gICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBvYmogb2Ygb2JqZWN0cykge1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSB0aGlzLmZpbmRBc3NvY2lhdGlvbihtb2RlbCwgb2JqKTtcbiAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGFzOiBhc3NvY2lhdGlvbi5nZXRBcygpIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICBtb2RlbDogYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCksXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogaWdub3JlQXR0cmlidXRlcyA/IFtdIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IFtdLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpKysgPCBvYmplY3RzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBtb2RlbCA9IGluY2x1ZGVzWzBdLm1vZGVsIGFzIHVua25vd24gYXMgdHlwZW9mIE1vZGVsO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzID0gaW5jbHVkZXNbMF0uaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGluY2x1ZGVzWzBdLmF0dHJpYnV0ZXMgPSBpZ25vcmVBdHRyaWJ1dGVzID8gW10gOiBTZXF1ZWxpemVVdGlscy5tZXJnZUF0dHJpYnV0ZXMoaW5jbHVkZXNbMF0uYXR0cmlidXRlcywgYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgud2hlcmUpIHtcbiAgICAgICAgICAgIGluY2x1ZGVzWzBdLndoZXJlID0gU2VxdWVsaXplVXRpbHMubWVyZ2VXaGVyZShpbmNsdWRlc1swXS53aGVyZSwgcGF0aC53aGVyZSk7XG4gICAgICAgICAgICBpbmNsdWRlc1swXS5yZXF1aXJlZCA9ICEhcGF0aC5yZXF1aXJlZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaW5jbHVkZXNbMF0ucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZXNbMF0ucGFyYW5vaWQgPSAhIXBhdGgucGFyYW5vaWQ7XG4gICAgICAgIGluY2x1ZGVzWzBdLnNlcGFyYXRlID0gISFwYXRoLnNlcGFyYXRlO1xuICAgICAgICBpbmNsdWRlc1swXS5vcmRlciA9IHBhdGgub3JkZXI7XG5cbiAgICAgICAgaWYgKFR5cGVVdGlscy5pc05vdE51bGxPclVuZGVmaW5lZChwYXRoLnN1YlF1ZXJ5KSkge1xuICAgICAgICAgICAgaW5jbHVkZXNbMF0uc3ViUXVlcnkgPSBwYXRoLnN1YlF1ZXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWRkSW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGluY2x1ZGUgb2YgYWRkaXRpb25hbEluY2x1ZGVzKSB7XG4gICAgICAgICAgICBhZGRJbmNsdWRlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzWzBdLm1vZGVsIGFzIHVua25vd24gYXMgdHlwZW9mIE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpbmNsdWRlLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogaW5jbHVkZS5vcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlOiBpbmNsdWRlLndoZXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGluY2x1ZGUucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZTogaW5jbHVkZS5zZXBhcmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFub2lkOiBpbmNsdWRlLnBhcmFub2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViUXVlcnk6IGluY2x1ZGUuc3ViUXVlcnlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGUuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlQXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpbmNsdWRlc1swXS5pbmNsdWRlLnB1c2goLi4uU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMoYWRkSW5jbHVkZXMsIGlnbm9yZUF0dHJpYnV0ZXMpKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBdHRyaWJ1dGVzKFxuICAgICAgICBtb2RlbDogdHlwZW9mIE1vZGVsLFxuICAgICAgICBwYXRoOiBQYXRoTW9kZWwsXG4gICAgICAgIGFkZGl0aW9uYWxJbmNsdWRlczogSW5jbHVkZU1vZGVsW10sXG4gICAgICAgIGF0dHJpYnV0ZXM/OiBGaW5kQXR0cmlidXRlT3B0aW9uc1xuICAgICk6IFNlYXJjaEF0dHJpYnV0ZXNNb2RlbFtdIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0cyA9IHBhdGgucGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdDogU2VhcmNoQXR0cmlidXRlc01vZGVsW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvYmogb2Ygb2JqZWN0cykge1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSB0aGlzLmZpbmRBc3NvY2lhdGlvbihtb2RlbCwgb2JqKTtcbiAgICAgICAgICAgIG1vZGVsID0gYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCkgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgP1xuICAgICAgICAgICAgU2VxdWVsaXplVXRpbHMuZ2V0TW9kZWxTZWFyY2hhYmxlRmllbGRBdHRyaWJ1dGVzKG1vZGVsIGFzIHR5cGVvZiBNLCBhdHRyaWJ1dGVzIGFzIHN0cmluZ1tdKSA6XG4gICAgICAgICAgICBTZXF1ZWxpemVVdGlscy5nZXRNb2RlbFNlYXJjaGFibGVBdHRyaWJ1dGVzKG1vZGVsIGFzIHR5cGVvZiBNKTtcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAuLi4oYXR0cmlidXRlcyBhcyBzdHJpbmdbXSkubWFwKGEgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhLFxuICAgICAgICAgICAgICAgIGtleTogU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoYSwgcGF0aC5wYXRoKSxcbiAgICAgICAgICAgICAgICBsaXRlcmFsS2V5OiBTZXF1ZWxpemVVdGlscy5nZXRMaXRlcmFsRnVsbE5hbWUoYSwgcGF0aC5wYXRoKSxcbiAgICAgICAgICAgICAgICBpc0pzb246IFNlcXVlbGl6ZVV0aWxzLmlzQ29sdW1uSnNvbihtb2RlbCBhcyB0eXBlb2YgTSwgYSlcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgaW5jbHVkZSBvZiBhZGRpdGlvbmFsSW5jbHVkZXMpIHtcbiAgICAgICAgICAgIGlmIChpbmNsdWRlLmlnbm9yZUluU2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0QXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgICAgbW9kZWwgYXMgdHlwZW9mIE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBpbmNsdWRlLnBhdGhcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGUuc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPz8gaW5jbHVkZS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgKS5tYXAoYSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGtleTogU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUoYS5uYW1lLCBbcGF0aC5wYXRoLCBpbmNsdWRlLnBhdGhdLmpvaW4oXCIuXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbEtleTogU2VxdWVsaXplVXRpbHMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGEubmFtZSwgW3BhdGgucGF0aCwgaW5jbHVkZS5wYXRoXS5qb2luKFwiLlwiKSksXG4gICAgICAgICAgICAgICAgICAgIGlzSnNvbjogYS5pc0pzb25cbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRPcmRlcihtb2RlbDogdHlwZW9mIE1vZGVsLCBvcmRlck9iajogT3JkZXJNb2RlbCk6IE9yZGVyIHtcbiAgICAgICAgaWYgKCFvcmRlck9iaj8uY29sdW1uIHx8ICFvcmRlck9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyT2JqLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gdGhpcy5maW5kQXNzb2NpYXRpb24obW9kZWwsIHZhbHVlKTtcbiAgICAgICAgICAgIG1vZGVsID0gYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRlZENsYXNzKCkgYXMgdW5rbm93biBhcyB0eXBlb2YgTW9kZWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sID0gU2VxdWVsaXplVXRpbHMuZmluZENvbHVtbkZpZWxkTmFtZShtb2RlbCBhcyB0eXBlb2YgTSwgY29sdW1uKTtcbiAgICAgICAgbGV0IGxpdGVyYWxPcmRlciA9IHZhbHVlcy5sZW5ndGggP1xuICAgICAgICAgICAgU2VxdWVsaXplVXRpbHMuZ2V0TGl0ZXJhbEZ1bGxOYW1lKGNvbCwgdmFsdWVzKSA6XG4gICAgICAgICAgICBgXFxgJHttb2RlbC5uYW1lfVxcYC5cXGAke2NvbH1cXGBgO1xuICAgICAgICBpZiAob3JkZXJPYmoubnVsbExhc3QgJiYgb3JkZXJPYmouZGlyZWN0aW9uID09PSBcImFzY1wiKSB7XG4gICAgICAgICAgICBsaXRlcmFsT3JkZXIgPSBgLSR7bGl0ZXJhbE9yZGVyfWA7XG4gICAgICAgICAgICBvcmRlck9iai5kaXJlY3Rpb24gPSBcImRlc2NcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkZXJPYmouZGlyZWN0aW9uID09PSBcImRlc2NcIikge1xuICAgICAgICAgICAgbGl0ZXJhbE9yZGVyICs9IGAgREVTQ2A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpdGVyYWwobGl0ZXJhbE9yZGVyKSBhcyBPcmRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0R3JvdXAobW9kZWw6IHR5cGVvZiBNb2RlbCwgb3JkZXJPYmo6IE9yZGVyTW9kZWwpOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICghb3JkZXJPYmogfHwgIW9yZGVyT2JqLmNvbHVtbiB8fCBvcmRlck9iai5kaXJlY3Rpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyb3VwOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBvcmRlck9iai5jb2x1bW4uc3BsaXQoXCIuXCIpO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZXMucG9wKCk7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IHRoaXMuZmluZEFzc29jaWF0aW9uKG1vZGVsLCB2YWx1ZSk7XG4gICAgICAgICAgICBtb2RlbCA9IGFzc29jaWF0aW9uLmdldEFzc29jaWF0ZWRDbGFzcygpIGFzIHVua25vd24gYXMgdHlwZW9mIE1vZGVsO1xuICAgICAgICAgICAgZ3JvdXAucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFNlcXVlbGl6ZVV0aWxzLmdldE9yZGVyRnVsbE5hbWUoXCJpZFwiLCBncm91cCksXG4gICAgICAgICAgICBTZXF1ZWxpemVVdGlscy5nZXRPcmRlckZ1bGxOYW1lKFNlcXVlbGl6ZVV0aWxzLmZpbmRDb2x1bW5GaWVsZE5hbWUobW9kZWwgYXMgdHlwZW9mIE0sIGNvbHVtbiksIGdyb3VwKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRPcmRlckluY2x1ZGVzKG1vZGVsOiB0eXBlb2YgTW9kZWwsIG9yZGVyT2JqOiBPcmRlck1vZGVsKTogSW5jbHVkZU9wdGlvbnNbXSB7XG4gICAgICAgIGlmICghb3JkZXJPYmogfHwgIW9yZGVyT2JqLmNvbHVtbiB8fCBvcmRlck9iai5kaXJlY3Rpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyT2JqLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJbmNsdWRlT3B0aW9uc1tdID0gW107XG4gICAgICAgIGxldCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXSA9IHJlc3VsdDtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSB0aGlzLmZpbmRBc3NvY2lhdGlvbihtb2RlbCwgdmFsdWUpO1xuICAgICAgICAgICAgaW5jbHVkZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgYXM6IGFzc29jaWF0aW9uLmdldEFzKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgIG1vZGVsOiBhc3NvY2lhdGlvbi5nZXRBc3NvY2lhdGVkQ2xhc3MoKSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBbXSxcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBbXSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGhyb3VnaDogYXNzb2NpYXRpb24uZ2V0QXNzb2NpYXRpb24oKSA9PT0gQXNzb2NpYXRpb24uQmVsb25nc1RvTWFueSA/IHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogW11cbiAgICAgICAgICAgICAgICB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGkrKyA8IHZhbHVlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbW9kZWwgPSBpbmNsdWRlc1swXS5tb2RlbCBhcyB1bmtub3duIGFzIHR5cGVvZiBNb2RlbDtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcyA9IGluY2x1ZGVzWzBdLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluY2x1ZGVzWzBdLmF0dHJpYnV0ZXMgPSBbY29sdW1uXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRBc3NvY2lhdGlvbihtb2RlbDogdHlwZW9mIE1vZGVsLCBvYmo6IHN0cmluZyk6IEJhc2VBc3NvY2lhdGlvbjxhbnksIGFueT4ge1xuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBnZXRBc3NvY2lhdGlvbnMobW9kZWwucHJvdG90eXBlKTtcblxuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbiA9IGFzc29jaWF0aW9ucy5maW5kKGEgPT4gYS5nZXRBcygpID09PSBvYmopO1xuICAgICAgICBpZiAoIWFzc29jaWF0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGFzc29jaWF0aW9uIGZvciAke29ian1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNzb2NpYXRpb247XG4gICAgfVxufVxuIl19
|