@recursyve/nestjs-data-filter 8.4.1 → 8.4.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/adapters/default-export.adapter.d.ts +1 -0
- package/lib/adapters/default-export.adapter.js +4 -1
- package/lib/adapters/export.adapter.d.ts +1 -0
- package/lib/adapters/export.adapter.js +1 -1
- package/lib/data-filter.repository.d.ts +1 -0
- package/lib/data-filter.repository.js +10 -1
- package/lib/filter/base-filter.d.ts +3 -2
- package/lib/filter/base-filter.js +3 -3
- package/lib/filter/filter.service.js +3 -3
- package/lib/filter/filters/date.filter.d.ts +5 -1
- package/lib/filter/filters/date.filter.js +12 -19
- package/lib/filter/filters/json-array.filter.d.ts +16 -0
- package/lib/filter/filters/json-array.filter.js +58 -0
- package/lib/models/export-types.model.d.ts +2 -1
- package/lib/models/export-types.model.js +2 -1
- package/package.json +6 -3
|
@@ -3,4 +3,5 @@ import { ExportAdapter, ExportData } from "./export.adapter";
|
|
|
3
3
|
export declare class DefaultExportAdapter extends ExportAdapter {
|
|
4
4
|
exportAsHtml(language: string, data: ExportData, options?: any): Promise<string>;
|
|
5
5
|
exportAsPdf(language: string, data: ExportData, options?: any): Promise<Buffer>;
|
|
6
|
+
exportAsZip(language: string, data: ExportData, options?: any): Promise<Buffer>;
|
|
6
7
|
}
|
|
@@ -16,10 +16,13 @@ let DefaultExportAdapter = class DefaultExportAdapter extends export_adapter_1.E
|
|
|
16
16
|
exportAsPdf(language, data, options) {
|
|
17
17
|
throw new Error("DataFilter doesn't provide a default PDF export. To enable it, add a custom ExportAdapter");
|
|
18
18
|
}
|
|
19
|
+
exportAsZip(language, data, options) {
|
|
20
|
+
throw new Error("DataFilter doesn't provide a default Zip export. To enable it, add a custom ExportAdapter");
|
|
21
|
+
}
|
|
19
22
|
};
|
|
20
23
|
DefaultExportAdapter = __decorate([
|
|
21
24
|
(0, common_1.Injectable)()
|
|
22
25
|
], DefaultExportAdapter);
|
|
23
26
|
exports.DefaultExportAdapter = DefaultExportAdapter;
|
|
24
27
|
|
|
25
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9kZWZhdWx0LWV4cG9ydC5hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1QyxxREFBNkQ7QUFHN0QsSUFBYSxvQkFBb0IsR0FBakMsTUFBYSxvQkFBcUIsU0FBUSw4QkFBYTtJQUM1QyxZQUFZLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RkFBNEYsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFRCxXQUFXLENBQUMsUUFBZ0IsRUFBRSxJQUFnQixFQUFFLE9BQWE7UUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQ2pILENBQUM7Q0FDSixDQUFBO0FBWlksb0JBQW9CO0lBRGhDLElBQUEsbUJBQVUsR0FBRTtHQUNBLG9CQUFvQixDQVloQztBQVpZLG9EQUFvQiIsImZpbGUiOiJsaWIvYWRhcHRlcnMvZGVmYXVsdC1leHBvcnQuYWRhcHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEV4cG9ydEFkYXB0ZXIsIEV4cG9ydERhdGEgfSBmcm9tIFwiLi9leHBvcnQuYWRhcHRlclwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEV4cG9ydEFkYXB0ZXIgZXh0ZW5kcyBFeHBvcnRBZGFwdGVyIHtcbiAgICBwdWJsaWMgZXhwb3J0QXNIdG1sKGxhbmd1YWdlOiBzdHJpbmcsIGRhdGE6IEV4cG9ydERhdGEsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhRmlsdGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgSFRNTCBleHBvcnQuIFRvIGVuYWJsZSBpdCwgYWRkIGEgY3VzdG9tIEV4cG9ydEFkYXB0ZXJcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydEFzUGRmKGxhbmd1YWdlOiBzdHJpbmcsIGRhdGE6IEV4cG9ydERhdGEsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEYXRhRmlsdGVyIGRvZXNuJ3QgcHJvdmlkZSBhIGRlZmF1bHQgUERGIGV4cG9ydC4gVG8gZW5hYmxlIGl0LCBhZGQgYSBjdXN0b20gRXhwb3J0QWRhcHRlclwiKTtcbiAgICB9XG5cbiAgICBleHBvcnRBc1ppcChsYW5ndWFnZTogc3RyaW5nLCBkYXRhOiBFeHBvcnREYXRhLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YUZpbHRlciBkb2Vzbid0IHByb3ZpZGUgYSBkZWZhdWx0IFppcCBleHBvcnQuIFRvIGVuYWJsZSBpdCwgYWRkIGEgY3VzdG9tIEV4cG9ydEFkYXB0ZXJcIik7XG4gICAgfVxufVxuIl19
|
|
@@ -7,4 +7,5 @@ export interface ExportData {
|
|
|
7
7
|
export declare abstract class ExportAdapter {
|
|
8
8
|
abstract exportAsHtml(language: string, data: ExportData, options?: any): Promise<string>;
|
|
9
9
|
abstract exportAsPdf(language: string, data: ExportData, options?: any): Promise<Buffer>;
|
|
10
|
+
abstract exportAsZip(language: string, data: ExportData, options?: any): Promise<Buffer>;
|
|
10
11
|
}
|
|
@@ -5,4 +5,4 @@ class ExportAdapter {
|
|
|
5
5
|
}
|
|
6
6
|
exports.ExportAdapter = ExportAdapter;
|
|
7
7
|
|
|
8
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9hZGFwdGVycy9leHBvcnQuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSxNQUFzQixhQUFhO0NBSWxDO0FBSkQsc0NBSUMiLCJmaWxlIjoibGliL2FkYXB0ZXJzL2V4cG9ydC5hZGFwdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBFeHBvcnREYXRhIHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRhdGE6IG9iamVjdFtdO1xuICAgIGNvbHVtbnM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRXhwb3J0QWRhcHRlciB7XG4gICAgcHVibGljIGFic3RyYWN0IGV4cG9ydEFzSHRtbChsYW5ndWFnZTogc3RyaW5nLCBkYXRhOiBFeHBvcnREYXRhLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHB1YmxpYyBhYnN0cmFjdCBleHBvcnRBc1BkZihsYW5ndWFnZTogc3RyaW5nLCBkYXRhOiBFeHBvcnREYXRhLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+O1xuICAgIHB1YmxpYyBhYnN0cmFjdCBleHBvcnRBc1ppcChsYW5ndWFnZTogc3RyaW5nLCBkYXRhOiBFeHBvcnREYXRhLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+O1xufVxuIl19
|
|
@@ -41,6 +41,7 @@ export declare class DataFilterRepository<Data> {
|
|
|
41
41
|
downloadHtml(headers: string[], data: any[], lang: string, options?: any): Promise<string>;
|
|
42
42
|
downloadCsv(headers: string[], data: any[]): Promise<Buffer>;
|
|
43
43
|
downloadPdf(headers: string[], data: any[], lang: string, options?: any): Promise<Buffer>;
|
|
44
|
+
downloadZip(headers: string[], data: any[], lang: string, options?: any): Promise<Buffer>;
|
|
44
45
|
private init;
|
|
45
46
|
addSearchCondition(search: string, options: FindOptions): void;
|
|
46
47
|
private getExportsHeader;
|
|
@@ -240,6 +240,8 @@ let DataFilterRepository = class DataFilterRepository {
|
|
|
240
240
|
return await this.downloadCsv(headers, data);
|
|
241
241
|
case export_types_model_1.ExportTypes.PDF:
|
|
242
242
|
return await this.downloadPdf(headers, data, options);
|
|
243
|
+
case export_types_model_1.ExportTypes.ZIP:
|
|
244
|
+
return await this.downloadZip(headers, data, options);
|
|
243
245
|
}
|
|
244
246
|
}
|
|
245
247
|
async downloadXlsx(headers, data) {
|
|
@@ -262,6 +264,13 @@ let DataFilterRepository = class DataFilterRepository {
|
|
|
262
264
|
data: data
|
|
263
265
|
}, options);
|
|
264
266
|
}
|
|
267
|
+
async downloadZip(headers, data, lang, options) {
|
|
268
|
+
return this.exportAdapter.exportAsZip(lang, {
|
|
269
|
+
title: this._config.model.getTableName(),
|
|
270
|
+
columns: headers,
|
|
271
|
+
data: data
|
|
272
|
+
}, options);
|
|
273
|
+
}
|
|
265
274
|
init() {
|
|
266
275
|
this._config = this.dataFilterScanner.getDataFilter(this.dataDef);
|
|
267
276
|
this._definitions = this.dataFilterScanner.getAttributes(this.dataDef);
|
|
@@ -359,4 +368,4 @@ DataFilterRepository = __decorate([
|
|
|
359
368
|
], DataFilterRepository);
|
|
360
369
|
exports.DataFilterRepository = DataFilterRepository;
|
|
361
370
|
|
|
362
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBb0c7QUFDcEcseUNBQW1GO0FBSW5GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxpREFBNkM7QUFDN0MsbURBQStDO0FBRy9DLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBUTdCLFlBQ1ksT0FBWSxFQUNaLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUw1QixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUVwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQWJELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFpQixDQUFDO0lBQzFDLENBQUM7SUFhTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjtRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNqRCxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDdkMsR0FBRyxDQUFDLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxNQUF5QixDQUFDO1NBQ3BD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R0FBRyxDQUFDLENBQUM7U0FDM0I7UUFFRCxJQUFJLEdBQVcsQ0FBQztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixJQUFJLElBQUksRUFBRTtnQkFDTixJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1NBQ0o7UUFFRCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxLQUFLLENBQUMsMkJBQTJCLENBQUMsS0FBbUIsRUFBRSxJQUF5QjtRQUNwRixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEcsSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2YsT0FBTyxnQ0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbEU7YUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7WUFDeEIsT0FBTztnQkFDSCxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDTixLQUFLO29CQUNMLFNBQVMsQ0FBQyxLQUFLO2lCQUNsQjthQUNKLENBQUM7U0FDTDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSixDQUFBO0FBelpZLG9CQUFvQjtJQURoQyxJQUFBLG1CQUFVLEdBQUU7NkNBV3NCLHVDQUFpQjtRQUNiLCtDQUFxQjtRQUN0QiwrQkFBb0I7UUFDeEIsMkJBQWdCO1FBQ25CLHdCQUFhO0dBZC9CLG9CQUFvQixDQXlaaEM7QUF6Wlksb0RBQW9CIiwiZmlsZSI6ImxpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgRmluZE9wdGlvbnMsIElkZW50aWZpZXIsIEluY2x1ZGVPcHRpb25zLCBNb2RlbCwgT3AsIFV0aWxzLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciwgRXhwb3J0QWRhcHRlciwgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVzQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2F0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IEN1c3RvbUF0dHJpYnV0ZXNDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvY3VzdG9tLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvZGF0YS1maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzIH0gZnJvbSBcIi4vbW9kZWxzL2V4cG9ydC10eXBlcy5tb2RlbFwiO1xuaW1wb3J0IHsgT3JkZXJNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuL21vZGVscy9wYXRoLm1vZGVsXCI7XG5pbXBvcnQgeyBTZWFyY2hBdHRyaWJ1dGVzTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2VhcmNoLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9kYXRhLWZpbHRlci5zY2FubmVyXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IENzdlV0aWxzIH0gZnJvbSBcIi4vdXRpbHMvY3N2LnV0aWxzXCI7XG5pbXBvcnQgeyBYbHN4VXRpbHMgfSBmcm9tIFwiLi91dGlscy94bHN4LnV0aWxzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPiB7XG4gICAgcHJpdmF0ZSBfY29uZmlnOiBEYXRhRmlsdGVyQ29uZmlnO1xuICAgIHByaXZhdGUgX2RlZmluaXRpb25zOiBBdHRyaWJ1dGVzQ29uZmlnW107XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IHR5cGVvZiBNIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5tb2RlbCBhcyB0eXBlb2YgTTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkYXRhRGVmOiBhbnksXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlclNjYW5uZXI6IERhdGFGaWx0ZXJTY2FubmVyLFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIGV4cG9ydEFkYXB0ZXI6IEV4cG9ydEFkYXB0ZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRCeVBrKGlkZW50aWZpZXI6IElkZW50aWZpZXIsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRCeVBrKGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQnlQa0Zyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIGlkZW50aWZpZXI6IElkZW50aWZpZXIsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGE+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5fY29uZmlnLm1vZGVsIGFzIGFueSwgdXNlcik7XG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzPy5pbmNsdWRlcyhpZGVudGlmaWVyIGFzIG51bWJlcikgfHwgcmVzb3VyY2VzLmFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZEJ5UGsoaWRlbnRpZmllciwgY29uZGl0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kT25lKHtcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMuX2NvbmZpZy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXTogaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmUgPz8ge31cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbmRpdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kT25lKG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRPbmUoe1xuICAgICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMgPz8ge30pXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlT2JqZWN0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRPbmVGcm9tVXNlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyA9IHt9LCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRPbmUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB3aGVyZTogYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24ob3B0aW9ucy53aGVyZSA/PyB7fSwgdXNlcilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25kaXRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRBbGwob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQWxsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQWxsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgd2hlcmU6IGF3YWl0IHRoaXMubWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUgPz8ge30sIHVzZXIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZGl0aW9uc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh3aGVyZT86IFdoZXJlT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucyksXG4gICAgICAgICAgICB3aGVyZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5jb3VudChvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5kT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5kT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGZpbmRPcHRpb25zLndoZXJlID0gYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24oZmluZE9wdGlvbnMud2hlcmUsIHVzZXIpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwoZmluZE9wdGlvbnMpO1xuICAgICAgICBpZiAoIXJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YVtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4gdGhpcy5yZWR1Y2VPYmplY3QoeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnM/OiBvYmplY3QpOiBGaW5kT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdW10gPSBbXG4gICAgICAgICAgICAuLi50aGlzLl9kZWZpbml0aW9ucy5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF4LnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0geC50cmFuc2Zvcm1QYXRoQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB4LnRyYW5zZm9ybUF0dHJpYnV0ZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0geC50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwgcGF0aCwgYWRkaXRpb25hbEluY2x1ZGVzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4udGhpcy5fY29uZmlnLmdldEN1c3RvbUF0dHJpYnV0ZXNJbmNsdWRlcygpLm1hcCh4ID0+IHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiB4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyYW5vaWQ6IHgucGFyYW5vaWQsXG4gICAgICAgICAgICAgICAgc3ViUXVlcnk6IHguc3ViUXVlcnlcbiAgICAgICAgICAgIH0sIFtdLCB4LmF0dHJpYnV0ZXMpKVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLl9jb25maWcudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmNsdWRlOiBTZXF1ZWxpemVVdGlscy5yZWR1Y2VJbmNsdWRlcyhpbmNsdWRlcylcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVPcmRlckluY2x1ZGUob3JkZXI6IE9yZGVyTW9kZWwpOiBJbmNsdWRlT3B0aW9uc1tdIHtcbiAgICAgICAgaWYgKCFvcmRlciB8fCAhb3JkZXIuY29sdW1uIHx8IG9yZGVyLmRpcmVjdGlvbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VzdG9tQXR0ciA9IHRoaXMuZ2V0Q3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbik7XG4gICAgICAgIGlmIChjdXN0b21BdHRyKSB7XG4gICAgICAgICAgICBpZiAoIWN1c3RvbUF0dHIuY29uZmlnLnBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCB7IHBhdGg6IGN1c3RvbUF0dHIuY29uZmlnLnBhdGggfSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVySW5jbHVkZXModGhpcy5tb2RlbCwgb3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWR1Y2VPYmplY3QocmVzdWx0OiBhbnkpOiBEYXRhIHtcbiAgICAgICAgY29uc3QgciA9IHJlc3VsdCBpbnN0YW5jZW9mIE1vZGVsID8gcmVzdWx0LnRvSlNPTigpIDogcmVzdWx0O1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YURlZi5wcm90b3R5cGUuY29uc3RydWN0b3Ioe30sIHsgaXNOZXdSZWNvcmQ6IGZhbHNlIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGEsIHIpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICAgICAgICAoZGF0YSBhcyBhbnkpLmRhdGFWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIHRoaXMuX2RlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gU2VxdWVsaXplVXRpbHMucmVkdWNlTW9kZWxGcm9tUGF0aChyZXN1bHQsIGRlZi5wYXRoLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXREYXRhVmFsdWUoZGVmLmtleSBhcyBhbnksIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZU1vZGVsRnJvbVBhdGgocmVzdWx0LCBkZWYucGF0aC5wYXRoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gcmVzdWx0W2RlZi5rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlYXJjaEF0dHJpYnV0ZXMoKTogU2VhcmNoQXR0cmlidXRlc01vZGVsW10ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBtb2RlbEF0dHIgPSB0aGlzLl9jb25maWcuZ2V0U2VhcmNoYWJsZUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgLi4ubW9kZWxBdHRyLm1hcChhID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogYSxcbiAgICAgICAgICAgICAgICBrZXk6IGEsXG4gICAgICAgICAgICAgICAgaXNKc29uOiBTZXF1ZWxpemVVdGlscy5pc0NvbHVtbkpzb24odGhpcy5tb2RlbCwgYSlcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiB0aGlzLl9kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYXR0ciA9IGRlZmluaXRpb24uaWdub3JlSW5TZWFyY2ggPyBbXSA6IGRlZmluaXRpb24uc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPz8gZGVmaW5pdGlvbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0gZGVmaW5pdGlvbi50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyh7fSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0QXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi5wYXRoIGFzIFBhdGhNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEluY2x1ZGVzLFxuICAgICAgICAgICAgICAgICAgICBhdHRyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2NvbmZpZy5jdXN0b21BdHRyaWJ1dGVzLmZpbmQoKHgpID0+IHguY29uZmlnLm5hbWUgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQ3VzdG9tQXR0cmlidXRlc0NvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuY3VzdG9tQXR0cmlidXRlcy5maW5kKCh4KSA9PiB4LmNvbmZpZy5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKGRhdGE6IERhdGFbXSwgdHlwZTogRXhwb3J0VHlwZXMsIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPjtcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgdHlwZTogRXhwb3J0VHlwZXMsIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPjtcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKFxuICAgICAgICBkYXRhT3JIZWFkZXJzOiBEYXRhW10gfCBzdHJpbmdbXSxcbiAgICAgICAgdHlwZU9yRGF0YTogRXhwb3J0VHlwZXMgfCBhbnlbXSxcbiAgICAgICAgbGFuZ09yVHlwZTogc3RyaW5nIHwgRXhwb3J0VHlwZXMsXG4gICAgICAgIG9wdGlvbnNPckxhbmc/OiBhbnkgfCBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM/OiBhbnlcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBsZXQgdHlwZTogRXhwb3J0VHlwZXM7XG4gICAgICAgIGxldCBoZWFkZXJzOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IGRhdGE6IGFueVtdO1xuICAgICAgICBsZXQgbGFuZzogc3RyaW5nO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZU9yRGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdHlwZSA9IHR5cGVPckRhdGE7XG4gICAgICAgICAgICBsYW5nID0gbGFuZ09yVHlwZTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydHNIZWFkZXIobGFuZywgdGhpcy5fY29uZmlnLmV4cG9ydENvbHVtbnMgPz8gW10pO1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0RGF0YShkYXRhT3JIZWFkZXJzIGFzIERhdGFbXSk7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yTGFuZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhbmcgPSBvcHRpb25zT3JMYW5nIGFzIHN0cmluZztcbiAgICAgICAgICAgIGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydHNIZWFkZXIobGFuZywgZGF0YU9ySGVhZGVycyBhcyBzdHJpbmdbXSk7XG4gICAgICAgICAgICBkYXRhID0gdHlwZU9yRGF0YTtcbiAgICAgICAgICAgIHR5cGUgPSBsYW5nT3JUeXBlIGFzIEV4cG9ydFR5cGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlhMU1g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRYbHN4KGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5IVE1MOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkSHRtbChoZWFkZXJzLCBkYXRhLCBsYW5nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuQ1NWOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkQ3N2KGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5QREY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRQZGYoaGVhZGVycywgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRYbHN4KGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSk6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgICAgIHJldHVybiBYbHN4VXRpbHMuYXJyYXlUb1hsc3hCdWZmZXIoXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGhlYWRlcnNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRIdG1sKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc0h0bWwobGFuZywge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX2NvbmZpZy5tb2RlbC5nZXRUYWJsZU5hbWUoKSBhcyBzdHJpbmcsXG4gICAgICAgICAgICBjb2x1bW5zOiBoZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICB9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRDc3YoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IENzdlV0aWxzLmFycmF5VG9Dc3ZCdWZmZXIoZGF0YSwgaGVhZGVycyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkUGRmKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc1BkZihsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYXRhRmlsdGVyU2Nhbm5lci5nZXREYXRhRmlsdGVyKHRoaXMuZGF0YURlZik7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb25zID0gdGhpcy5kYXRhRmlsdGVyU2Nhbm5lci5nZXRBdHRyaWJ1dGVzKHRoaXMuZGF0YURlZik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2g6IHN0cmluZywgb3B0aW9uczogRmluZE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcG9PcHRpb24gPSB0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoe30pO1xuICAgICAgICBvcHRpb25zLmluY2x1ZGUgPSBTZXF1ZWxpemVVdGlscy5tZXJnZUluY2x1ZGVzKFxuICAgICAgICAgICAgb3B0aW9ucy5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW10sXG4gICAgICAgICAgICByZXBvT3B0aW9uLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy53aGVyZSkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IHsgW09wLmFuZF06IFtdIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW29wdGlvbnMud2hlcmVdIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IG9wdGlvbnMud2hlcmU7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRlRmllbGRzT2JqZWN0ID0gc2VhcmNoVmFsdWUgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0U2VhcmNoQXR0cmlidXRlcygpXG4gICAgICAgICAgICAgICAgLm1hcChhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuaXNKc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGEubGl0ZXJhbEtleSA/PyBgXFxgJHt0aGlzLm1vZGVsLm5hbWV9XFxgLlxcYCR7YS5rZXl9XFxgYDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBsaXRlcmFsIGZ1bmN0aW9uIGlzIG5vdCB3b3JraW5nIG9mIHNvbWUgcmVhc29uLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5tb2RlbC5zZXF1ZWxpemUuZXNjYXBlKGAlJHtzZWFyY2hWYWx1ZS50b1VwcGVyQ2FzZSgpfSVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVXRpbHMuTGl0ZXJhbChgVVBQRVIoSlNPTl9FWFRSQUNUKCR7ZmllbGR9LCAnJCcpKSBMSUtFICR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFthLmtleV06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT3AubGlrZV06IGAlJHtzZWFyY2hWYWx1ZX0lYFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLmZpbHRlcih4ID0+ICEheCk7XG5cbiAgICAgICAgY29uc3QgdG9rZW5zID0gc2VhcmNoLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgd2hlcmVbT3AuYW5kXS5wdXNoKFxuICAgICAgICAgICAgdG9rZW5zLm1hcCh0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBbT3Aub3JdOiBnZW5lcmF0ZUZpZWxkc09iamVjdCh0KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0c0hlYWRlcihsYW5nOiBzdHJpbmcsIGhlYWRlcnM6IHN0cmluZ1tdLCB0cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaGVhZGVycy5tYXAoeCA9PiB0cmFuc2xhdGVTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKGxhbmcsIGBleHBvcnRzLiR7eH1gKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0RGF0YShkYXRhOiBEYXRhW10pOiBvYmplY3RbXSB7XG4gICAgICAgIHJldHVybiBkYXRhLm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5fY29uZmlnLmV4cG9ydENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbdmFsdWUsIHByb3BdID0gdGhpcy5nZXRFeHBvcnRWYWx1ZSh4LCBrZXkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtgJHtpKyt9OiR7cHJvcH1gXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRWYWx1ZShkYXRhOiBEYXRhLCBwYXRoOiBzdHJpbmcpOiBbdW5rbm93biwgc3RyaW5nXSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIFtkYXRhW2tleV0sIGtleV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQga2V5OiBzdHJpbmc7XG4gICAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAga2V5ID0ga2V5cy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtkYXRhLCBrZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKHdoZXJlOiBXaGVyZU9wdGlvbnMsIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlcyh0aGlzLl9jb25maWcubW9kZWwgYXMgYW55LCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5tZXJnZVdoZXJlKHsgaWQ6IHJlc291cmNlcy5pZHMgfSwgd2hlcmUpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlcy53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICB3aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLndoZXJlXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aGVyZTtcbiAgICB9XG59XG4iXX0=
|
|
371
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE0QztBQUM1Qyx5Q0FBb0c7QUFDcEcseUNBQW1GO0FBSW5GLG9FQUEwRDtBQUsxRCx3RUFBbUU7QUFDbkUsZ0ZBQTJFO0FBQzNFLHVEQUFzRDtBQUN0RCxpREFBNkM7QUFDN0MsbURBQStDO0FBRy9DLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBUTdCLFlBQ1ksT0FBWSxFQUNaLGlCQUFvQyxFQUNwQyxxQkFBNEMsRUFDNUMsb0JBQTBDLEVBQzFDLGdCQUFrQyxFQUNsQyxhQUE0QjtRQUw1QixZQUFPLEdBQVAsT0FBTyxDQUFLO1FBQ1osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUVwQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQWJELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFpQixDQUFDO0lBQzFDLENBQUM7SUFhTSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQXNCLEVBQUUsT0FBcUIsRUFBRSxVQUFtQjtRQUNwRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUNqRCxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUM7WUFDdkMsR0FBRyxDQUFDLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztTQUNyQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxNQUF5QixDQUFDO1NBQ3BD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QUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDTixLQUFLO29CQUNMLFNBQVMsQ0FBQyxLQUFLO2lCQUNsQjthQUNKLENBQUM7U0FDTDtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSixDQUFBO0FBbmFZLG9CQUFvQjtJQURoQyxJQUFBLG1CQUFVLEdBQUU7NkNBV3NCLHVDQUFpQjtRQUNiLCtDQUFxQjtRQUN0QiwrQkFBb0I7UUFDeEIsMkJBQWdCO1FBQ25CLHdCQUFhO0dBZC9CLG9CQUFvQixDQW1haEM7QUFuYVksb0RBQW9CIiwiZmlsZSI6ImxpYi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgRmluZE9wdGlvbnMsIElkZW50aWZpZXIsIEluY2x1ZGVPcHRpb25zLCBNb2RlbCwgT3AsIFV0aWxzLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciwgRXhwb3J0QWRhcHRlciwgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuL2FkYXB0ZXJzXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGVzQ29uZmlnIH0gZnJvbSBcIi4vbW9kZWxzL2F0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IEN1c3RvbUF0dHJpYnV0ZXNDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvY3VzdG9tLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJDb25maWcgfSBmcm9tIFwiLi9tb2RlbHMvZGF0YS1maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzIH0gZnJvbSBcIi4vbW9kZWxzL2V4cG9ydC10eXBlcy5tb2RlbFwiO1xuaW1wb3J0IHsgT3JkZXJNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXIubW9kZWxcIjtcbmltcG9ydCB7IFBhdGhNb2RlbCB9IGZyb20gXCIuL21vZGVscy9wYXRoLm1vZGVsXCI7XG5pbXBvcnQgeyBTZWFyY2hBdHRyaWJ1dGVzTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2VhcmNoLWF0dHJpYnV0ZXMubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9kYXRhLWZpbHRlci5zY2FubmVyXCI7XG5pbXBvcnQgeyBTZXF1ZWxpemVNb2RlbFNjYW5uZXIgfSBmcm9tIFwiLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IENzdlV0aWxzIH0gZnJvbSBcIi4vdXRpbHMvY3N2LnV0aWxzXCI7XG5pbXBvcnQgeyBYbHN4VXRpbHMgfSBmcm9tIFwiLi91dGlscy94bHN4LnV0aWxzXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPiB7XG4gICAgcHJpdmF0ZSBfY29uZmlnOiBEYXRhRmlsdGVyQ29uZmlnO1xuICAgIHByaXZhdGUgX2RlZmluaXRpb25zOiBBdHRyaWJ1dGVzQ29uZmlnW107XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCk6IHR5cGVvZiBNIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5tb2RlbCBhcyB0eXBlb2YgTTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkYXRhRGVmOiBhbnksXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlclNjYW5uZXI6IERhdGFGaWx0ZXJTY2FubmVyLFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIGV4cG9ydEFkYXB0ZXI6IEV4cG9ydEFkYXB0ZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRCeVBrKGlkZW50aWZpZXI6IElkZW50aWZpZXIsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRCeVBrKGlkZW50aWZpZXIsIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlZHVjZU9iamVjdChyZXN1bHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kQnlQa0Zyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIGlkZW50aWZpZXI6IElkZW50aWZpZXIsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGE+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5fY29uZmlnLm1vZGVsIGFzIGFueSwgdXNlcik7XG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzPy5pbmNsdWRlcyhpZGVudGlmaWVyIGFzIG51bWJlcikgfHwgcmVzb3VyY2VzLmFsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZEJ5UGsoaWRlbnRpZmllciwgY29uZGl0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzb3VyY2VzLmlkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kT25lKHtcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXMuX2NvbmZpZy5tb2RlbC5wcmltYXJ5S2V5QXR0cmlidXRlXTogaWRlbnRpZmllclxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMud2hlcmUgPz8ge31cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGNvbmRpdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kT25lKG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRPbmUoe1xuICAgICAgICAgICAgLi4udGhpcy5nZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnMpLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMgPz8ge30pXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucmVkdWNlT2JqZWN0KHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRPbmVGcm9tVXNlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyA9IHt9LCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRPbmUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICB3aGVyZTogYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24ob3B0aW9ucy53aGVyZSA/PyB7fSwgdXNlcilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25kaXRpb25zXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbmRBbGwob3B0aW9ucz86IEZpbmRPcHRpb25zLCBjb25kaXRpb25zPzogb2JqZWN0KTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5tb2RlbC5maW5kQWxsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zID8/IHt9KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFyZXN1bHQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBhcyB1bmtub3duIGFzIERhdGFbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcCh4ID0+IHRoaXMucmVkdWNlT2JqZWN0KHgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZEFsbEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM/OiBGaW5kT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kQWxsKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgd2hlcmU6IGF3YWl0IHRoaXMubWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUgPz8ge30sIHVzZXIpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29uZGl0aW9uc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh3aGVyZT86IFdoZXJlT3B0aW9ucywgY29uZGl0aW9ucz86IG9iamVjdCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoY29uZGl0aW9ucyksXG4gICAgICAgICAgICB3aGVyZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5jb3VudChvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5kT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMubW9kZWwuZmluZEFsbChmaW5kT3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgYXMgdW5rbm93biBhcyBEYXRhW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoeCA9PiB0aGlzLnJlZHVjZU9iamVjdCh4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEZyb21Vc2VyKHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIHNlYXJjaDogc3RyaW5nLCBvcHRpb25zPzogRmluZE9wdGlvbnMsIGNvbmRpdGlvbnM/OiBvYmplY3QpOiBQcm9taXNlPERhdGFbXT4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IHRoaXMuZ2VuZXJhdGVGaW5kT3B0aW9ucyhjb25kaXRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaW5kT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaCwgZmluZE9wdGlvbnMpO1xuXG4gICAgICAgIGZpbmRPcHRpb25zLndoZXJlID0gYXdhaXQgdGhpcy5tZXJnZUFjY2Vzc0NvbnRyb2xDb25kaXRpb24oZmluZE9wdGlvbnMud2hlcmUsIHVzZXIpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm1vZGVsLmZpbmRBbGwoZmluZE9wdGlvbnMpO1xuICAgICAgICBpZiAoIXJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgRGF0YVtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQubWFwKHggPT4gdGhpcy5yZWR1Y2VPYmplY3QoeCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZW5lcmF0ZUZpbmRPcHRpb25zKGNvbmRpdGlvbnM/OiBvYmplY3QpOiBGaW5kT3B0aW9ucyB7XG4gICAgICAgIGNvbnN0IGluY2x1ZGVzOiBJbmNsdWRlT3B0aW9uc1tdW10gPSBbXG4gICAgICAgICAgICAuLi50aGlzLl9kZWZpbml0aW9ucy5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF4LnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0geC50cmFuc2Zvcm1QYXRoQ29uZmlnKGNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB4LnRyYW5zZm9ybUF0dHJpYnV0ZXNDb25maWcoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0geC50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5tb2RlbCwgcGF0aCwgYWRkaXRpb25hbEluY2x1ZGVzLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4udGhpcy5fY29uZmlnLmdldEN1c3RvbUF0dHJpYnV0ZXNJbmNsdWRlcygpLm1hcCh4ID0+IHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMubW9kZWwsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiB4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyYW5vaWQ6IHgucGFyYW5vaWQsXG4gICAgICAgICAgICAgICAgc3ViUXVlcnk6IHguc3ViUXVlcnlcbiAgICAgICAgICAgIH0sIFtdLCB4LmF0dHJpYnV0ZXMpKVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB0aGlzLl9jb25maWcudHJhbnNmb3JtQXR0cmlidXRlc0NvbmZpZyhjb25kaXRpb25zKTtcblxuICAgICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmNsdWRlOiBTZXF1ZWxpemVVdGlscy5yZWR1Y2VJbmNsdWRlcyhpbmNsdWRlcylcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2VuZXJhdGVPcmRlckluY2x1ZGUob3JkZXI6IE9yZGVyTW9kZWwpOiBJbmNsdWRlT3B0aW9uc1tdIHtcbiAgICAgICAgaWYgKCFvcmRlciB8fCAhb3JkZXIuY29sdW1uIHx8IG9yZGVyLmRpcmVjdGlvbiA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VzdG9tQXR0ciA9IHRoaXMuZ2V0Q3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbik7XG4gICAgICAgIGlmIChjdXN0b21BdHRyKSB7XG4gICAgICAgICAgICBpZiAoIWN1c3RvbUF0dHIuY29uZmlnLnBhdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyh0aGlzLm1vZGVsLCB7IHBhdGg6IGN1c3RvbUF0dHIuY29uZmlnLnBhdGggfSwgW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVySW5jbHVkZXModGhpcy5tb2RlbCwgb3JkZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWR1Y2VPYmplY3QocmVzdWx0OiBhbnkpOiBEYXRhIHtcbiAgICAgICAgY29uc3QgciA9IHJlc3VsdCBpbnN0YW5jZW9mIE1vZGVsID8gcmVzdWx0LnRvSlNPTigpIDogcmVzdWx0O1xuICAgICAgICBjb25zdCBkYXRhID0gbmV3IHRoaXMuZGF0YURlZi5wcm90b3R5cGUuY29uc3RydWN0b3Ioe30sIHsgaXNOZXdSZWNvcmQ6IGZhbHNlIH0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKGRhdGEsIHIpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1vZGVsKSB7XG4gICAgICAgICAgICAoZGF0YSBhcyBhbnkpLmRhdGFWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4uclxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZGVmIG9mIHRoaXMuX2RlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gU2VxdWVsaXplVXRpbHMucmVkdWNlTW9kZWxGcm9tUGF0aChyZXN1bHQsIGRlZi5wYXRoLnBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXREYXRhVmFsdWUoZGVmLmtleSBhcyBhbnksIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZU1vZGVsRnJvbVBhdGgocmVzdWx0LCBkZWYucGF0aC5wYXRoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRhW2RlZi5rZXldID0gcmVzdWx0W2RlZi5rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlYXJjaEF0dHJpYnV0ZXMoKTogU2VhcmNoQXR0cmlidXRlc01vZGVsW10ge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBTZWFyY2hBdHRyaWJ1dGVzTW9kZWxbXSA9IFtdO1xuICAgICAgICBjb25zdCBtb2RlbEF0dHIgPSB0aGlzLl9jb25maWcuZ2V0U2VhcmNoYWJsZUF0dHJpYnV0ZXMoKTtcbiAgICAgICAgYXR0cmlidXRlcy5wdXNoKFxuICAgICAgICAgICAgLi4ubW9kZWxBdHRyLm1hcChhID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogYSxcbiAgICAgICAgICAgICAgICBrZXk6IGEsXG4gICAgICAgICAgICAgICAgaXNKc29uOiBTZXF1ZWxpemVVdGlscy5pc0NvbHVtbkpzb24odGhpcy5tb2RlbCwgYSlcbiAgICAgICAgICAgIH0pKVxuICAgICAgICApO1xuXG4gICAgICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiB0aGlzLl9kZWZpbml0aW9ucykge1xuICAgICAgICAgICAgaWYgKCFkZWZpbml0aW9uLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYXR0ciA9IGRlZmluaXRpb24uaWdub3JlSW5TZWFyY2ggPyBbXSA6IGRlZmluaXRpb24uc2VhcmNoYWJsZUF0dHJpYnV0ZXMgPz8gZGVmaW5pdGlvbi5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbEluY2x1ZGVzID0gZGVmaW5pdGlvbi50cmFuc2Zvcm1JbmNsdWRlc0NvbmZpZyh7fSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0QXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi5wYXRoIGFzIFBhdGhNb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEluY2x1ZGVzLFxuICAgICAgICAgICAgICAgICAgICBhdHRyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2NvbmZpZy5jdXN0b21BdHRyaWJ1dGVzLmZpbmQoKHgpID0+IHguY29uZmlnLm5hbWUgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXN0b21BdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQ3VzdG9tQXR0cmlidXRlc0NvbmZpZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWcuY3VzdG9tQXR0cmlidXRlcy5maW5kKCh4KSA9PiB4LmNvbmZpZy5uYW1lID09PSBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKGRhdGE6IERhdGFbXSwgdHlwZTogRXhwb3J0VHlwZXMsIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPjtcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgdHlwZTogRXhwb3J0VHlwZXMsIGxhbmc6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QnVmZmVyIHwgc3RyaW5nPjtcbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWREYXRhKFxuICAgICAgICBkYXRhT3JIZWFkZXJzOiBEYXRhW10gfCBzdHJpbmdbXSxcbiAgICAgICAgdHlwZU9yRGF0YTogRXhwb3J0VHlwZXMgfCBhbnlbXSxcbiAgICAgICAgbGFuZ09yVHlwZTogc3RyaW5nIHwgRXhwb3J0VHlwZXMsXG4gICAgICAgIG9wdGlvbnNPckxhbmc/OiBhbnkgfCBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM/OiBhbnlcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBsZXQgdHlwZTogRXhwb3J0VHlwZXM7XG4gICAgICAgIGxldCBoZWFkZXJzOiBzdHJpbmdbXTtcbiAgICAgICAgbGV0IGRhdGE6IGFueVtdO1xuICAgICAgICBsZXQgbGFuZzogc3RyaW5nO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZU9yRGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdHlwZSA9IHR5cGVPckRhdGE7XG4gICAgICAgICAgICBsYW5nID0gbGFuZ09yVHlwZTtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydHNIZWFkZXIobGFuZywgdGhpcy5fY29uZmlnLmV4cG9ydENvbHVtbnMgPz8gW10pO1xuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0RGF0YShkYXRhT3JIZWFkZXJzIGFzIERhdGFbXSk7XG4gICAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yTGFuZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhbmcgPSBvcHRpb25zT3JMYW5nIGFzIHN0cmluZztcbiAgICAgICAgICAgIGhlYWRlcnMgPSBhd2FpdCB0aGlzLmdldEV4cG9ydHNIZWFkZXIobGFuZywgZGF0YU9ySGVhZGVycyBhcyBzdHJpbmdbXSk7XG4gICAgICAgICAgICBkYXRhID0gdHlwZU9yRGF0YTtcbiAgICAgICAgICAgIHR5cGUgPSBsYW5nT3JUeXBlIGFzIEV4cG9ydFR5cGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlhMU1g6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRYbHN4KGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5IVE1MOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkSHRtbChoZWFkZXJzLCBkYXRhLCBsYW5nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0VHlwZXMuQ1NWOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRvd25sb2FkQ3N2KGhlYWRlcnMsIGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRUeXBlcy5QREY6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZG93bmxvYWRQZGYoaGVhZGVycywgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydFR5cGVzLlpJUDpcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kb3dubG9hZFppcChoZWFkZXJzLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZFhsc3goaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIFhsc3hVdGlscy5hcnJheVRvWGxzeEJ1ZmZlcihcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgaGVhZGVyc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZEh0bWwoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzSHRtbChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZENzdihoZWFkZXJzOiBzdHJpbmdbXSwgZGF0YTogYW55W10pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgQ3N2VXRpbHMuYXJyYXlUb0NzdkJ1ZmZlcihkYXRhLCBoZWFkZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZG93bmxvYWRQZGYoaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdLCBsYW5nOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRBZGFwdGVyLmV4cG9ydEFzUGRmKGxhbmcsIHtcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl9jb25maWcubW9kZWwuZ2V0VGFibGVOYW1lKCkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgY29sdW1uczogaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkWmlwKGhlYWRlcnM6IHN0cmluZ1tdLCBkYXRhOiBhbnlbXSwgbGFuZzogc3RyaW5nLCBvcHRpb25zPzogYW55KTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0QWRhcHRlci5leHBvcnRBc1ppcChsYW5nLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5fY29uZmlnLm1vZGVsLmdldFRhYmxlTmFtZSgpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGhlYWRlcnMsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdCgpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYXRhRmlsdGVyU2Nhbm5lci5nZXREYXRhRmlsdGVyKHRoaXMuZGF0YURlZik7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb25zID0gdGhpcy5kYXRhRmlsdGVyU2Nhbm5lci5nZXRBdHRyaWJ1dGVzKHRoaXMuZGF0YURlZik7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2g6IHN0cmluZywgb3B0aW9uczogRmluZE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcG9PcHRpb24gPSB0aGlzLmdlbmVyYXRlRmluZE9wdGlvbnMoe30pO1xuICAgICAgICBvcHRpb25zLmluY2x1ZGUgPSBTZXF1ZWxpemVVdGlscy5tZXJnZUluY2x1ZGVzKFxuICAgICAgICAgICAgb3B0aW9ucy5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW10sXG4gICAgICAgICAgICByZXBvT3B0aW9uLmluY2x1ZGUgYXMgSW5jbHVkZU9wdGlvbnNbXVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy53aGVyZSkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IHsgW09wLmFuZF06IFtdIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0geyBbT3AuYW5kXTogW29wdGlvbnMud2hlcmVdIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IG9wdGlvbnMud2hlcmU7XG4gICAgICAgIGNvbnN0IGdlbmVyYXRlRmllbGRzT2JqZWN0ID0gc2VhcmNoVmFsdWUgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0U2VhcmNoQXR0cmlidXRlcygpXG4gICAgICAgICAgICAgICAgLm1hcChhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuaXNKc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGEubGl0ZXJhbEtleSA/PyBgXFxgJHt0aGlzLm1vZGVsLm5hbWV9XFxgLlxcYCR7YS5rZXl9XFxgYDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBsaXRlcmFsIGZ1bmN0aW9uIGlzIG5vdCB3b3JraW5nIG9mIHNvbWUgcmVhc29uLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5tb2RlbC5zZXF1ZWxpemUuZXNjYXBlKGAlJHtzZWFyY2hWYWx1ZS50b1VwcGVyQ2FzZSgpfSVgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVXRpbHMuTGl0ZXJhbChgVVBQRVIoSlNPTl9FWFRSQUNUKCR7ZmllbGR9LCAnJCcpKSBMSUtFICR7dmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFthLmtleV06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT3AubGlrZV06IGAlJHtzZWFyY2hWYWx1ZX0lYFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLmZpbHRlcih4ID0+ICEheCk7XG5cbiAgICAgICAgY29uc3QgdG9rZW5zID0gc2VhcmNoLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgd2hlcmVbT3AuYW5kXS5wdXNoKFxuICAgICAgICAgICAgdG9rZW5zLm1hcCh0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBbT3Aub3JdOiBnZW5lcmF0ZUZpZWxkc09iamVjdCh0KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0c0hlYWRlcihsYW5nOiBzdHJpbmcsIGhlYWRlcnM6IHN0cmluZ1tdLCB0cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaGVhZGVycy5tYXAoeCA9PiB0cmFuc2xhdGVTZXJ2aWNlLmdldFRyYW5zbGF0aW9uKGxhbmcsIGBleHBvcnRzLiR7eH1gKSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0RGF0YShkYXRhOiBEYXRhW10pOiBvYmplY3RbXSB7XG4gICAgICAgIHJldHVybiBkYXRhLm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5fY29uZmlnLmV4cG9ydENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbdmFsdWUsIHByb3BdID0gdGhpcy5nZXRFeHBvcnRWYWx1ZSh4LCBrZXkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdFtgJHtpKyt9OiR7cHJvcH1gXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRWYWx1ZShkYXRhOiBEYXRhLCBwYXRoOiBzdHJpbmcpOiBbdW5rbm93biwgc3RyaW5nXSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICAgICAgcmV0dXJuIFtkYXRhW2tleV0sIGtleV07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQga2V5OiBzdHJpbmc7XG4gICAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAga2V5ID0ga2V5cy5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtkYXRhLCBrZXldO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbWVyZ2VBY2Nlc3NDb250cm9sQ29uZGl0aW9uKHdoZXJlOiBXaGVyZU9wdGlvbnMsIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBjb25zdCByZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLmdldFJlc291cmNlcyh0aGlzLl9jb25maWcubW9kZWwgYXMgYW55LCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5tZXJnZVdoZXJlKHsgaWQ6IHJlc291cmNlcy5pZHMgfSwgd2hlcmUpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlcy53aGVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBbT3AuYW5kXTogW1xuICAgICAgICAgICAgICAgICAgICB3aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLndoZXJlXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3aGVyZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -2,6 +2,7 @@ import { Type } from "@nestjs/common";
|
|
|
2
2
|
import { TranslateAdapter } from "../adapters/translate.adapter";
|
|
3
3
|
import { DefaultFilterDefinition } from "./filters/default.filter";
|
|
4
4
|
import { FilterConfig, FilterModel } from "./models";
|
|
5
|
+
import { ExportTypes } from "../models/export-types.model";
|
|
5
6
|
export declare abstract class BaseFilter<T> implements FilterModel<T> {
|
|
6
7
|
private _translateService;
|
|
7
8
|
[name: string]: FilterConfig | unknown;
|
|
@@ -9,6 +10,6 @@ export declare abstract class BaseFilter<T> implements FilterModel<T> {
|
|
|
9
10
|
defaultFilter?: DefaultFilterDefinition;
|
|
10
11
|
set translateService(translateService: TranslateAdapter);
|
|
11
12
|
get translateService(): TranslateAdapter;
|
|
12
|
-
getExportedFieldsKeys(): Promise<string[]>;
|
|
13
|
-
getExportedFields(value: T, lang?: string): Promise<any[]>;
|
|
13
|
+
getExportedFieldsKeys(type?: ExportTypes): Promise<string[]>;
|
|
14
|
+
getExportedFields(value: T, lang?: string, type?: ExportTypes): Promise<any[]>;
|
|
14
15
|
}
|
|
@@ -20,13 +20,13 @@ class BaseFilter {
|
|
|
20
20
|
get translateService() {
|
|
21
21
|
return this._translateService;
|
|
22
22
|
}
|
|
23
|
-
async getExportedFieldsKeys() {
|
|
23
|
+
async getExportedFieldsKeys(type) {
|
|
24
24
|
return [];
|
|
25
25
|
}
|
|
26
|
-
async getExportedFields(value, lang) {
|
|
26
|
+
async getExportedFields(value, lang, type) {
|
|
27
27
|
return [];
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
exports.BaseFilter = BaseFilter;
|
|
31
31
|
|
|
32
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvYmFzZS1maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsdUNBQXlGO0FBS3pGLE1BQXNCLFVBQVU7SUFPNUIsSUFBVyxnQkFBZ0IsQ0FBQyxnQkFBa0M7UUFDMUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO1FBRTFDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxnQkFBZ0IsRUFBRTtnQkFDdkQsU0FBUzthQUNaO1lBRUQsSUFBSSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQixDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxHQUFHLENBQVksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQzthQUM3RDtZQUNELElBQUkscUJBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBMEIsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFpQixDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO2FBQ2xFO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFrQjtRQUNqRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBUSxFQUFFLElBQWEsRUFBRSxJQUFrQjtRQUN0RSxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7Q0FDSjtBQWxDRCxnQ0FrQ0MiLCJmaWxlIjoibGliL2ZpbHRlci9iYXNlLWZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IFRyYW5zbGF0ZUFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlcnMvdHJhbnNsYXRlLmFkYXB0ZXJcIjtcbmltcG9ydCB7IEZpbHRlciwgRmlsdGVyRGVmaW5pdGlvbiwgR3JvdXBGaWx0ZXIsIEdyb3VwRmlsdGVyRGVmaW5pdGlvbiB9IGZyb20gXCIuL2ZpbHRlcnNcIjtcbmltcG9ydCB7IERlZmF1bHRGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcIi4vZmlsdGVycy9kZWZhdWx0LmZpbHRlclwiO1xuaW1wb3J0IHsgRmlsdGVyQ29uZmlnLCBGaWx0ZXJNb2RlbCB9IGZyb20gXCIuL21vZGVsc1wiO1xuaW1wb3J0IHsgRXhwb3J0VHlwZXMgfSBmcm9tIFwiLi4vbW9kZWxzL2V4cG9ydC10eXBlcy5tb2RlbFwiO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZpbHRlcjxUPiBpbXBsZW1lbnRzIEZpbHRlck1vZGVsPFQ+IHtcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVBZGFwdGVyO1xuXG4gICAgW25hbWU6IHN0cmluZ106IEZpbHRlckNvbmZpZyB8IHVua25vd247XG4gICAgcHVibGljIGFic3RyYWN0IGRhdGFEZWZpbml0aW9uOiBUeXBlPFQ+O1xuICAgIHB1YmxpYyBkZWZhdWx0RmlsdGVyPzogRGVmYXVsdEZpbHRlckRlZmluaXRpb247XG5cbiAgICBwdWJsaWMgc2V0IHRyYW5zbGF0ZVNlcnZpY2UodHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlQWRhcHRlcikge1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBrZXkgPT09IFwiZGF0YURlZmluaXRpb25cIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoRmlsdGVyLnZhbGlkYXRlKHRoaXNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgRmlsdGVyKS50cmFuc2xhdGVTZXJ2aWNlID0gdHJhbnNsYXRlU2VydmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChHcm91cEZpbHRlci52YWxpZGF0ZSh0aGlzW2tleV0gYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKSkge1xuICAgICAgICAgICAgICAgICh0aGlzW2tleV0gYXMgR3JvdXBGaWx0ZXIpLnRyYW5zbGF0ZVNlcnZpY2UgPSB0cmFuc2xhdGVTZXJ2aWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgdHJhbnNsYXRlU2VydmljZSgpOiBUcmFuc2xhdGVBZGFwdGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEV4cG9ydGVkRmllbGRzS2V5cyh0eXBlPzogRXhwb3J0VHlwZXMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwb3J0ZWRGaWVsZHModmFsdWU6IFQsIGxhbmc/OiBzdHJpbmcsIHR5cGU/OiBFeHBvcnRUeXBlcyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -110,9 +110,9 @@ let FilterService = FilterService_1 = class FilterService {
|
|
|
110
110
|
this.addOrderCondition(options.order, findOptions);
|
|
111
111
|
delete options.page;
|
|
112
112
|
const values = await (user ? this.findValues(user, options, findOptions) : this.findValues(options, findOptions));
|
|
113
|
-
const headers = await this.model.getExportedFieldsKeys();
|
|
113
|
+
const headers = await this.model.getExportedFieldsKeys(type);
|
|
114
114
|
if (headers.length) {
|
|
115
|
-
const data = await Promise.all(values.map((value) => this.model.getExportedFields(value)));
|
|
115
|
+
const data = await Promise.all(values.map((value) => { var _a; return this.model.getExportedFields(value, (_a = user === null || user === void 0 ? void 0 : user.language) !== null && _a !== void 0 ? _a : "fr", type); }));
|
|
116
116
|
return await this.repository.downloadData(headers, data, type, (_a = user === null || user === void 0 ? void 0 : user.language) !== null && _a !== void 0 ? _a : "fr", exportOptions);
|
|
117
117
|
}
|
|
118
118
|
else {
|
|
@@ -522,4 +522,4 @@ FilterService = FilterService_1 = __decorate([
|
|
|
522
522
|
], FilterService);
|
|
523
523
|
exports.FilterService = FilterService;
|
|
524
524
|
|
|
525
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FVbUI7QUFHbkIsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUVqRSxnRUFBMkQ7QUFHM0QsaUZBQTRFO0FBQzVFLHdEQUF1RDtBQUN2RCwrQ0FBMkM7QUFDM0MsaURBQTZDO0FBQzdDLHVDQU9tQjtBQUNuQiwrRUFBMEU7QUFDMUUseURBQTRFO0FBSzVFLHlEQUEwRTtBQUcxRSxJQUFhLGFBQWEscUJBQTFCLE1BQWEsYUFBYTtJQUl0QixZQUNZLG9CQUEwQyxFQUMxQyxnQkFBa0MsRUFDbEMsS0FBdUIsRUFDdkIscUJBQTRDLEVBQzVDLFVBQTZCO1FBSjdCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBRXJDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sT0FBTyxDQUFJLE9BQWdCO1FBQzlCLE9BQU8sSUFBSSxlQUFhLENBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQjtZQUNJLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixjQUFjLEVBQUUsT0FBTztTQUNULEVBQ2xCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQVksRUFBRSxJQUEwQjtRQUMzRCxNQUFNLE1BQU0sR0FBK0IsRUFBRSxDQUFDO1FBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMs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M0Isd0JBQVU7UUFDTSwrQ0FBcUI7UUFDaEMsdUNBQWlCO0dBVGhDLGFBQWEsQ0EybEJ6QjtBQTNsQlksc0NBQWEiLCJmaWxlIjoibGliL2ZpbHRlci9maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7XG4gICAgQ291bnRPcHRpb25zLFxuICAgIEZpbmRPcHRpb25zLFxuICAgIEluY2x1ZGVhYmxlLFxuICAgIEluY2x1ZGVPcHRpb25zLFxuICAgIGxpdGVyYWwsXG4gICAgT3AsXG4gICAgT3JkZXIsXG4gICAgT3JkZXJJdGVtLFxuICAgIFdoZXJlT3B0aW9uc1xufSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBQcm9qZWN0aW9uQWxpYXMgfSBmcm9tIFwic2VxdWVsaXplL3R5cGVzL21vZGVsXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlcywgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUmVzdWx0TW9kZWwsIEZpbHRlclNlYXJjaE1vZGVsLCBPcmRlck1vZGVsIH0gZnJvbSBcIi4uL1wiO1xuaW1wb3J0IHsgQWNjZXNzQ29udHJvbEFkYXB0ZXIgfSBmcm9tIFwiLi4vYWRhcHRlcnMvYWNjZXNzLWNvbnRyb2wuYWRhcHRlclwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy90cmFuc2xhdGUuYWRhcHRlclwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vZGF0YS1maWx0ZXIucmVwb3NpdG9yeVwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vZGF0YS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHsgSW5jbHVkZVdoZXJlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2luY2x1ZGUubW9kZWxcIjtcbmltcG9ydCB7IERhdGFGaWx0ZXJVc2VyTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL3VzZXIubW9kZWxcIjtcbmltcG9ydCB7IFNlcXVlbGl6ZU1vZGVsU2Nhbm5lciB9IGZyb20gXCIuLi9zY2FubmVycy9zZXF1ZWxpemUtbW9kZWwuc2Nhbm5lclwiO1xuaW1wb3J0IHsgTSwgU2VxdWVsaXplVXRpbHMgfSBmcm9tIFwiLi4vc2VxdWVsaXplLnV0aWxzXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyIH0gZnJvbSBcIi4vYmFzZS1maWx0ZXJcIjtcbmltcG9ydCB7IEZpbHRlclV0aWxzIH0gZnJvbSBcIi4vZmlsdGVyLnV0aWxzXCI7XG5pbXBvcnQge1xuICAgIEZpbHRlcixcbiAgICBGaWx0ZXJDb25kaXRpb24sXG4gICAgRmlsdGVyQ29uZGl0aW9uUnVsZSxcbiAgICBGaWx0ZXJEZWZpbml0aW9uLFxuICAgIFNlbGVjdEZpbHRlcixcbiAgICBTZWxlY3RGaWx0ZXJWYWx1ZVxufSBmcm9tIFwiLi9maWx0ZXJzXCI7XG5pbXBvcnQgeyBHZW9Mb2NhbGl6YXRpb25GaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJzL2dlby1sb2NhbGl6YXRpb24uZmlsdGVyXCI7XG5pbXBvcnQgeyBHcm91cEZpbHRlciwgR3JvdXBGaWx0ZXJEZWZpbml0aW9uIH0gZnJvbSBcIi4vZmlsdGVycy9ncm91cC5maWx0ZXJcIjtcbmltcG9ydCB7IFF1ZXJ5TW9kZWwsIFF1ZXJ5UnVsZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24tc2VhcmNoLm1vZGVsXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvZmlsdGVyLWNvbmZpZ3VyYXRpb24ubW9kZWxcIjtcbmltcG9ydCB7IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXItcmVzb3VyY2UtdmFsdWUubW9kZWxcIjtcbmltcG9ydCB7IE9yZGVyUnVsZSwgT3JkZXJSdWxlRGVmaW5pdGlvbiB9IGZyb20gXCIuL29yZGVyLXJ1bGVzL29yZGVyLXJ1bGVcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpbHRlclNlcnZpY2U8RGF0YT4ge1xuICAgIHByaXZhdGUgZGVmaW5pdGlvbnM6IHsgW25hbWU6IHN0cmluZ106IEZpbHRlckRlZmluaXRpb24gfCBHcm91cEZpbHRlckRlZmluaXRpb24gfCBPcmRlclJ1bGVEZWZpbml0aW9uIH07XG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5OiBEYXRhRmlsdGVyUmVwb3NpdG9yeTxEYXRhPjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFjY2Vzc0NvbnRyb2xBZGFwdGVyOiBBY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVBZGFwdGVyOiBUcmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIG1vZGVsOiBCYXNlRmlsdGVyPERhdGE+LFxuICAgICAgICBwcml2YXRlIHNlcXVlbGl6ZU1vZGVsU2Nhbm5lcjogU2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICBwcml2YXRlIGRhdGFGaWx0ZXI6IERhdGFGaWx0ZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEYXRhPFQ+KGRhdGFEZWY6IFR5cGU8VD4pOiBGaWx0ZXJTZXJ2aWNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXJTZXJ2aWNlKFxuICAgICAgICAgICAgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcixcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlQWRhcHRlcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgIGRhdGFEZWZpbml0aW9uOiBkYXRhRGVmXG4gICAgICAgICAgICB9IGFzIEJhc2VGaWx0ZXI8VD4sXG4gICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lcixcbiAgICAgICAgICAgIHRoaXMuZGF0YUZpbHRlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb25maWcocmVxdWVzdDogYW55LCB1c2VyPzogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8RmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmRlZmluaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSB8fCBPcmRlclJ1bGUudmFsaWRhdGUodGhpcy5kZWZpbml0aW9uc1trZXldIGFzIE9yZGVyUnVsZURlZmluaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0ICh0aGlzLmRlZmluaXRpb25zW2tleV0gYXMgRmlsdGVyRGVmaW5pdGlvbikuZ2V0Q29uZmlnKGtleSwgcmVxdWVzdCwgdXNlcik7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBpZDoga2V5LFxuICAgICAgICAgICAgICAgIG5hbWU6IGF3YWl0IHRoaXMudHJhbnNsYXRlQWRhcHRlci5nZXRUcmFuc2xhdGlvbih1c2VyLmxhbmd1YWdlLCBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJUcmFuc2xhdGlvbktleShrZXkpKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hDb25maWdWYWx1ZXMoXG4gICAgICAgIHJlcXVlc3Q6IGFueSxcbiAgICAgICAgc2VhcmNoOiBGaWx0ZXJDb25maWd1cmF0aW9uU2VhcmNoTW9kZWwsXG4gICAgICAgIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsXG4gICAgKTogUHJvbWlzZTxTZWxlY3RGaWx0ZXJWYWx1ZVtdPiB7XG4gICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShzZWFyY2guaWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3NlYXJjaC5pZF07XG4gICAgICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBTZWxlY3RGaWx0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmaWx0ZXIudmFsdWVzKHsgdmFsdWU6IHNlYXJjaC52YWx1ZSwgdXNlciwgcmVxdWVzdCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZmluZFJlc291cmNlVmFsdWVCeUlkKHJlcXVlc3Q6IGFueSwgc2VhcmNoOiBGaWx0ZXJSZXNvdXJjZVZhbHVlTW9kZWwsIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxTZWxlY3RGaWx0ZXJWYWx1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoc2VhcmNoLmlkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tzZWFyY2guaWRdO1xuICAgICAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgU2VsZWN0RmlsdGVyICYmIGZpbHRlci5nZXRSZXNvdXJjZUJ5SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmaWx0ZXIuZ2V0UmVzb3VyY2VCeUlkKHsgaWQ6IHNlYXJjaC5yZXNvdXJjZUlkLCB1c2VyLCByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb3VudCh1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHB1YmxpYyBhc3luYyBjb3VudChvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHB1YmxpYyBhc3luYyBjb3VudCguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWw/XSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBvcHQgPyB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCA6IG51bGw7XG5cbiAgICAgICAgY29uc3QgY291bnRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnkpO1xuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgY291bnRPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHVzZXIgPyB0aGlzLmNvdW50VG90YWxWYWx1ZXModXNlciwgY291bnRPcHRpb25zKSA6IHRoaXMuY291bnRUb3RhbFZhbHVlcyhjb3VudE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIodXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+O1xuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIob3B0aW9uczogRmlsdGVyUXVlcnlNb2RlbCk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+O1xuICAgIHB1YmxpYyBhc3luYyBmaWx0ZXIoLi4uYXJnczogW0RhdGFGaWx0ZXJVc2VyTW9kZWwgfCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJRdWVyeU1vZGVsP10pOiBQcm9taXNlPEZpbHRlclJlc3VsdE1vZGVsPERhdGE+PiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPcHQsIG9wdF0gPSBhcmdzO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0ID8gb3B0IDogdXNlck9yT3B0IGFzIEZpbHRlclF1ZXJ5TW9kZWw7XG4gICAgICAgIGNvbnN0IHVzZXIgPSBvcHQgPyB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCA6IG51bGw7XG5cbiAgICAgICAgb3B0aW9ucy5vcmRlciA9IHRoaXMubm9ybWFsaXplT3JkZXIob3B0aW9ucy5vcmRlcik7XG5cbiAgICAgICAgY29uc3QgY291bnRPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRGaW5kT3B0aW9ucyh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIG9wdGlvbnMucXVlcnksIG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKG9wdGlvbnMuc2VhcmNoLCBjb3VudE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGNvdW50T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkR3JvdXBPcHRpb24ob3B0aW9ucy5vcmRlciwgY291bnRPcHRpb25zKTtcblxuICAgICAgICBjb25zdCB0b3RhbCA9IGF3YWl0ICh1c2VyID8gdGhpcy5jb3VudFRvdGFsVmFsdWVzKHVzZXIsIGNvdW50T3B0aW9ucykgOiB0aGlzLmNvdW50VG90YWxWYWx1ZXMoY291bnRPcHRpb25zKSk7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0ICh1c2VyID8gdGhpcy5maW5kVmFsdWVzKHVzZXIsIG9wdGlvbnMsIGNvdW50T3B0aW9ucykgOiB0aGlzLmZpbmRWYWx1ZXMob3B0aW9ucywgY291bnRPcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0b3RhbCxcbiAgICAgICAgICAgIHBhZ2U6IG9wdGlvbnMucGFnZSxcbiAgICAgICAgICAgIHZhbHVlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkb3dubG9hZERhdGEoXG4gICAgICAgIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsXG4gICAgICAgIHR5cGU6IEV4cG9ydFR5cGVzLFxuICAgICAgICBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsLFxuICAgICAgICBleHBvcnRPcHRpb25zPzogb2JqZWN0XG4gICAgKTogUHJvbWlzZTxCdWZmZXIgfCBzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZmluZE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSk7XG5cbiAgICAgICAgb3B0aW9ucy5vcmRlciA9IHRoaXMubm9ybWFsaXplT3JkZXIob3B0aW9ucy5vcmRlcik7XG5cbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24ob3B0aW9ucy5zZWFyY2gsIGZpbmRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRPcmRlckNvbmRpdGlvbihvcHRpb25zLm9yZGVyLCBmaW5kT3B0aW9ucyk7XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLnBhZ2U7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0ICh1c2VyID8gdGhpcy5maW5kVmFsdWVzKHVzZXIsIG9wdGlvbnMsIGZpbmRPcHRpb25zKSA6IHRoaXMuZmluZFZhbHVlcyhvcHRpb25zLCBmaW5kT3B0aW9ucykpO1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gYXdhaXQgdGhpcy5tb2RlbC5nZXRFeHBvcnRlZEZpZWxkc0tleXMoKTtcbiAgICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzLm1hcCgodmFsdWUpID0+IHRoaXMubW9kZWwuZ2V0RXhwb3J0ZWRGaWVsZHModmFsdWUpKSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmRvd25sb2FkRGF0YShoZWFkZXJzLCBkYXRhLCB0eXBlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIGV4cG9ydE9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5kb3dubG9hZERhdGEodmFsdWVzLCB0eXBlLCB1c2VyPy5sYW5ndWFnZSA/PyBcImZyXCIsIGV4cG9ydE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbmRPcHRpb25zKG1vZGVsOiB0eXBlb2YgTSwgcXVlcnk6IFF1ZXJ5TW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQcm9taXNlPEZpbmRPcHRpb25zPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXNldCBHZW8gbG9jYWxpemF0aW9uIGZpbHRlciBzdGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgR2VvTG9jYWxpemF0aW9uRmlsdGVyLnJlc2V0KCk7XG5cbiAgICAgICAgcXVlcnkgPSB0aGlzLmFkZERlZmF1bHRGaWx0ZXIocXVlcnkpO1xuICAgICAgICBsZXQgb3B0aW9uOiBGaW5kT3B0aW9ucyA9IHt9O1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaGF2aW5nQ29uZGl0aW9ucyA9IFtdO1xuXG4gICAgICAgICAgICBvcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICAgIGluY2x1ZGU6IGF3YWl0IHRoaXMuZ2V0SW5jbHVkZShtb2RlbCwgcXVlcnksIGRhdGEpLFxuICAgICAgICAgICAgICAgIHdoZXJlOiBxdWVyeS5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiB3aGVyZUNvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogd2hlcmVDb25kaXRpb25zIH0sXG4gICAgICAgICAgICAgICAgaGF2aW5nOiBxdWVyeS5jb25kaXRpb24gPT09IFwiYW5kXCIgPyB7IFtPcC5hbmRdOiBoYXZpbmdDb25kaXRpb25zIH0gOiB7IFtPcC5vcl06IGhhdmluZ0NvbmRpdGlvbnMgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW5vaWQgPSBhd2FpdCB0aGlzLmdlbmVyYXRlV2hlcmVPcHRpb25zKHF1ZXJ5LCB3aGVyZUNvbmRpdGlvbnMpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUhhdmluZ09wdGlvbnMocXVlcnksIGhhdmluZ0NvbmRpdGlvbnMpO1xuXG4gICAgICAgICAgICBpZiAoIXBhcmFub2lkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnBhcmFub2lkID0gcGFyYW5vaWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaGF2aW5nQ29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgb3B0aW9uLmhhdmluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0KCkge1xuICAgICAgICB0aGlzLnJlcG9zaXRvcnkgPSB0aGlzLmRhdGFGaWx0ZXIuZm9yKHRoaXMubW9kZWwuZGF0YURlZmluaXRpb24pO1xuICAgICAgICB0aGlzLm1vZGVsLnRyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLnRyYW5zbGF0ZUFkYXB0ZXI7XG5cbiAgICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1vZGVsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIUZpbHRlci52YWxpZGF0ZSh0aGlzLm1vZGVsW2tleV0gYXMgRmlsdGVyRGVmaW5pdGlvbikgJiZcbiAgICAgICAgICAgICAgICAhR3JvdXBGaWx0ZXIudmFsaWRhdGUodGhpcy5tb2RlbFtrZXldIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbikgJiZcbiAgICAgICAgICAgICAgICAhT3JkZXJSdWxlLnZhbGlkYXRlKHRoaXMubW9kZWxba2V5XSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZGVmaW5pdGlvbnNba2V5XSA9IHRoaXMubW9kZWxba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRJbmNsdWRlKG1vZGVsOiB0eXBlb2YgTSwgcXVlcnk6IFF1ZXJ5TW9kZWwsIGRhdGE/OiBvYmplY3QpOiBQcm9taXNlPEluY2x1ZGVhYmxlW10+IHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW11bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBydWxlIGFzIFF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICBpZiAobS5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKGF3YWl0IHRoaXMuZ2V0SW5jbHVkZShtb2RlbCwgbSwgZGF0YSkgYXMgSW5jbHVkZU9wdGlvbnNbXSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHIuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbci5pZF07XG4gICAgICAgICAgICBpZiAoKGZpbHRlciBhcyBHcm91cEZpbHRlckRlZmluaXRpb24pLnJvb3RGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmID0gZmlsdGVyIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZi5yb290RmlsdGVyLCBkYXRhKSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWYubGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIGYudmFsdWVGaWx0ZXIsIGRhdGEpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUZpbGVyID0gYXdhaXQgZi5nZXRWYWx1ZUZpbHRlcihyLnZhbHVlWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIHZhbHVlRmlsZXIgYXMgRmlsdGVyRGVmaW5pdGlvbiwgZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldEZpbHRlckluY2x1ZGUobW9kZWwsIGZpbHRlciBhcyBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNlcXVlbGl6ZVV0aWxzLnJlZHVjZUluY2x1ZGVzKGluY2x1ZGVzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbmRpdGlvbkluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBjb25kaXRpb246IEZpbHRlckNvbmRpdGlvbik6IEluY2x1ZGVPcHRpb25zW10ge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZXM6IEluY2x1ZGVPcHRpb25zW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIGNvbmRpdGlvbi5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZXMucHVzaCguLi50aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGNvbmRpdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgRmlsdGVyQ29uZGl0aW9uUnVsZTtcbiAgICAgICAgICAgIGlmIChyLnBhdGgpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKG1vZGVsLCB7IHBhdGg6IHIucGF0aCB9LCBbXSwgeyBpbmNsdWRlOiBbXSB9LCB0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluY2x1ZGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGVXaGVyZU9wdGlvbnMocXVlcnk6IFF1ZXJ5TW9kZWwsIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXJhbm9pZCA9IHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChjLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IGMuY29uZGl0aW9uID09PSBcImFuZFwiID8gT3AuYW5kIDogT3Aub3I7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2hlcmUgPSB7IFtvcF06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgICAgICAgICBwYXJhbm9pZCA9IHBhcmFub2lkICYmIGF3YWl0IHRoaXMuZ2VuZXJhdGVXaGVyZU9wdGlvbnMoYywgY29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBpZiAod2hlcmVbb3AgYXMgYW55XS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKHdoZXJlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXSBhcyBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFPcmRlclJ1bGUudmFsaWRhdGUoZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck9wdGlvbnMgPSBhd2FpdCBmaWx0ZXIuZ2V0V2hlcmVPcHRpb25zKHIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGZpbHRlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFub2lkID0gZmlsdGVyLnBhcmFub2lkID8/IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW5vaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZUhhdmluZ09wdGlvbnMocXVlcnk6IFF1ZXJ5TW9kZWwsIG9wdGlvbnM6IFdoZXJlT3B0aW9uc1tdKSB7XG4gICAgICAgIGlmICghcXVlcnkucnVsZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgYyA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChjLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IGMuY29uZGl0aW9uID09PSBcImFuZFwiID8gT3AuYW5kIDogT3Aub3I7XG4gICAgICAgICAgICAgICAgY29uc3QgaGF2aW5nID0geyBbb3BdOiBjb25kaXRpb25zIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZUhhdmluZ09wdGlvbnMoYywgY29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGF2aW5nW29wIGFzIGFueV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChoYXZpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBRdWVyeVJ1bGVNb2RlbDtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShyLmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3IuaWRdIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIU9yZGVyUnVsZS52YWxpZGF0ZShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IGF3YWl0IGZpbHRlci5nZXRIYXZpbmdPcHRpb25zKHIpO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHVzaChmaWx0ZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2g6IEZpbHRlclNlYXJjaE1vZGVsLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzZWFyY2g/LnZhbHVlPy50b1N0cmluZygpO1xuICAgICAgICBpZiAoIXZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVwb3NpdG9yeS5hZGRTZWFyY2hDb25kaXRpb24oc2VhcmNoLnZhbHVlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE9yZGVyQ29uZGl0aW9uKG9yZGVyczogT3JkZXJNb2RlbFtdLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9yZGVycy5ldmVyeShvcmRlciA9PiAhb3JkZXIuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmRlZmluaXRpb25zW29yZGVyLmNvbHVtbl0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVzID0gcnVsZSAmJiBPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkgP1xuICAgICAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldEluY2x1ZGVzKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgeyBwYXRoOiBydWxlLnBhdGggfSwgW10pIDpcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9zaXRvcnkuZ2VuZXJhdGVPcmRlckluY2x1ZGUob3JkZXIpO1xuXG4gICAgICAgICAgICBpZiAoIWluY2x1ZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcHRpb25zLmluY2x1ZGUgPSBTZXF1ZWxpemVVdGlscy5tZXJnZUluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZSBhcyBJbmNsdWRlT3B0aW9uc1tdLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVzIGFzIEluY2x1ZGVPcHRpb25zW11cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRHcm91cE9wdGlvbihvcmRlcnM6IE9yZGVyTW9kZWxbXSwgb3B0aW9uczogQ291bnRPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5yZXBvc2l0b3J5Lm1vZGVsO1xuICAgICAgICBvcHRpb25zLmdyb3VwID0gW2Ake21vZGVsLm5hbWV9LmlkYF07XG5cbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLmRlZmluaXRpb25zW29yZGVyLmNvbHVtbl0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmIChydWxlICYmIE9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBvc2l0b3J5Lmhhc0N1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG9yZGVyLmNvbHVtbi5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB2YWx1ZXMucG9wKCk7XG4gICAgICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmdyb3VwLnB1c2goYCR7bW9kZWwubmFtZX0uJHtTZXF1ZWxpemVVdGlscy5maW5kQ29sdW1uRmllbGROYW1lKG1vZGVsLCBjb2x1bW4pfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmdyb3VwLnB1c2goLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0R3JvdXAobW9kZWwsIG9yZGVyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNvdW50VG90YWxWYWx1ZXModXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHJpdmF0ZSBhc3luYyBjb3VudFRvdGFsVmFsdWVzKG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIHByaXZhdGUgYXN5bmMgY291bnRUb3RhbFZhbHVlcyguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbmRPcHRpb25zLCBGaW5kT3B0aW9ucz9dKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmluZE9wdGlvbnM7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgbWVhbnMgdGhhdCBjb3VudFRvdGFsVmFsdWVzIHdhcyBjYWxsZWQgd2l0aCBhIHVzZXJcbiAgICAgICAgICovXG4gICAgICAgIGlmIChvcHQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMud2hlcmUgPSBhd2FpdCB0aGlzLmdldEFjY2Vzc0NvbnRyb2xXaGVyZUNvbmRpdGlvbihvcHRpb25zLndoZXJlLCB1c2VyT3JPcHQgYXMgRGF0YUZpbHRlclVzZXJNb2RlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5oYXZpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuZmluZEFsbCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzdWJRdWVyeTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuY291bnQoe1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgICAgIH0pIGFzIGFueTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPih1c2VyOiBVc2VycywgZmlsdGVyOiBGaWx0ZXJRdWVyeU1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyk6IFByb21pc2U8RGF0YVtdPjtcbiAgICBwcml2YXRlIGFzeW5jIGZpbmRWYWx1ZXM8VXNlcnMgZXh0ZW5kcyBEYXRhRmlsdGVyVXNlck1vZGVsPihmaWx0ZXI6IEZpbHRlclF1ZXJ5TW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxEYXRhW10+O1xuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KC4uLmFyZ3M6IFtVc2VycyB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWwgfCBGaW5kT3B0aW9ucywgRmluZE9wdGlvbnM/XSk6IFByb21pc2U8RGF0YVtdPiB7XG4gICAgICAgIGNvbnN0IFt1c2VyT3JPRmlsdGVyLCBmaWx0ZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiBmaWx0ZXJPck9wdCBhcyBGaW5kT3B0aW9ucztcbiAgICAgICAgY29uc3QgZmlsdGVyID0gb3B0ID8gZmlsdGVyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbCA6IHVzZXJPck9GaWx0ZXIgYXMgRmlsdGVyUXVlcnlNb2RlbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZWFucyB0aGF0IGZpbmRWYWx1ZXMgd2FzIGNhbGxlZCB3aXRoIGEgdXNlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUsIHVzZXJPck9GaWx0ZXIgYXMgVXNlcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmdldE9yZGVyT3B0aW9ucyhmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdKTtcblxuICAgICAgICBjb25zdCBub25OZXN0ZWRPcmRlckNvbHVtbnMgPSAoZmlsdGVyLm9yZGVyIGFzIE9yZGVyTW9kZWxbXSlcbiAgICAgICAgICAgIC5tYXAob3JkZXIgPT4gb3JkZXIuY29sdW1uKVxuICAgICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uICYmICFjb2x1bW4uaW5jbHVkZXMoXCIuXCIpICYmICF0aGlzLnJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKGNvbHVtbikpO1xuICAgICAgICBjb25zdCBjdXN0b21BdHRyaWJ1dGVzID0gdGhpcy5nZXRPcmRlckN1c3RvbUF0dHJpYnV0ZShmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdLCBmaWx0ZXIuZGF0YSk7XG5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5Lm1vZGVsLmZpbmRBbGwoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtcImlkXCIsIC4uLm5vbk5lc3RlZE9yZGVyQ29sdW1ucywgLi4uY3VzdG9tQXR0cmlidXRlc10sXG4gICAgICAgICAgICBsaW1pdDogZmlsdGVyLnBhZ2UgPyBmaWx0ZXIucGFnZS5zaXplIDogbnVsbCxcbiAgICAgICAgICAgIG9mZnNldDogZmlsdGVyLnBhZ2UgPyBmaWx0ZXIucGFnZS5udW1iZXIgKiBmaWx0ZXIucGFnZS5zaXplICsgKGZpbHRlci5wYWdlLm9mZnNldCA/PyAwKSA6IG51bGwsXG4gICAgICAgICAgICBzdWJRdWVyeTogZmFsc2UsXG4gICAgICAgICAgICBvcmRlclxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBncm91cCA9IGZpbHRlci5ncm91cEJ5ID8gW1NlcXVlbGl6ZVV0aWxzLmdldEdyb3VwTGl0ZXJhbCh0aGlzLnJlcG9zaXRvcnkubW9kZWwsIGZpbHRlci5ncm91cEJ5KV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZmluZEFsbCh7XG4gICAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgICAgIGlkOiB2YWx1ZXMubWFwKHggPT4geC5pZClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICAgIHBhcmFub2lkOiBvcHRpb25zLnBhcmFub2lkLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgfSwgZmlsdGVyLmRhdGEgPz8ge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKHdoZXJlOiBXaGVyZU9wdGlvbnMsIHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHVzZXIgZm91bmRcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFjY2Vzc0NvbnRyb2wgaXNuJ3QgZW5hYmxlIGluIHlvdXIgcHJvamVjdFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IHRoaXMuYWNjZXNzQ29udHJvbEFkYXB0ZXIuZ2V0UmVzb3VyY2VzKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgdXNlcik7XG4gICAgICAgIGlmIChyZXNvdXJjZXMuaWRzKSB7XG4gICAgICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMubWVyZ2VXaGVyZSh7IGlkOiByZXNvdXJjZXMuaWRzIH0sIHdoZXJlID8/IHt9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzb3VyY2VzLndoZXJlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIFtPcC5hbmRdOiBbXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy53aGVyZSxcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgPz8ge31cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMobW9kZWw6IEluY2x1ZGVXaGVyZU1vZGVsLCBkYXRhPzogb2JqZWN0KTogV2hlcmVPcHRpb25zIHtcbiAgICAgICAgaWYgKCFtb2RlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd2hlcmUgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbW9kZWwpIHtcbiAgICAgICAgICAgIGlmICghbW9kZWwuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1vZGVsW2tleV0oZGF0YSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgd2hlcmVba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdoZXJlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsdGVySW5jbHVkZShtb2RlbDogdHlwZW9mIE0sIGZpbHRlcjogRmlsdGVyRGVmaW5pdGlvbiwgZGF0YT86IG9iamVjdCk6IEluY2x1ZGVPcHRpb25zW11bXSB7XG4gICAgICAgIGlmICghZmlsdGVyLnBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5nZXRDb25kaXRpb25JbmNsdWRlKG1vZGVsLCBmaWx0ZXIuY29uZGl0aW9uKV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXMobW9kZWwsIHtcbiAgICAgICAgICAgICAgICBwYXRoOiBmaWx0ZXIucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJhbm9pZDogZmlsdGVyLnBhcmFub2lkLFxuICAgICAgICAgICAgICAgIHdoZXJlOiB0aGlzLmdlbmVyYXRlV2hlcmVDb25kaXRpb25zKGZpbHRlci53aGVyZSwgZGF0YSlcbiAgICAgICAgICAgIH0sIFtdLCBbXSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGZpbHRlci5jb25kaXRpb24pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcmRlck9wdGlvbnMob3JkZXJzOiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdKTogT3JkZXIge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICAgICAgb3JkZXJzID0gW29yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZW5lcmF0ZWRPcmRlcjogT3JkZXIgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgaWYgKCFvcmRlcj8uY29sdW1uIHx8ICFvcmRlci5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucmVwb3NpdG9yeS5oYXNDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IG9yZGVyLm51bGxMYXN0ID8gYC0ke29yZGVyLmNvbHVtbn1gIDogb3JkZXIuY29sdW1uO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9yZGVyLm51bGxMYXN0ID8gb3JkZXIuZGlyZWN0aW9uID09PSBcImFzY1wiID8gXCJkZXNjXCIgOiBcImFzY1wiIDogb3JkZXIuZGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2goW2xpdGVyYWwoY29sdW1uKSwgZGlyZWN0aW9uLnRvVXBwZXJDYXNlKCldKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKCFydWxlIHx8ICFPcmRlclJ1bGUudmFsaWRhdGUocnVsZSkpIHtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZWRPcmRlci5wdXNoKHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLmdldE9yZGVyKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3JkZXIpIGFzIE9yZGVySXRlbSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2goW3J1bGUuZ2V0T3JkZXJPcHRpb24oKSwgb3JkZXIuZGlyZWN0aW9uLnRvVXBwZXJDYXNlKCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnZW5lcmF0ZWRPcmRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVyQ3VzdG9tQXR0cmlidXRlKG9yZGVyczogT3JkZXJNb2RlbCB8IE9yZGVyTW9kZWxbXSwgZGF0YT86IG9iamVjdCk6IFByb2plY3Rpb25BbGlhc1tdIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlczogUHJvamVjdGlvbkFsaWFzW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcmRlciBvZiBvcmRlcnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXBvc2l0b3J5Lmhhc0N1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGN1c3RvbUF0dHJpYnV0ZSA9IHRoaXMucmVwb3NpdG9yeS5nZXRDdXN0b21BdHRyaWJ1dGUob3JkZXIuY29sdW1uKTtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGN1c3RvbUF0dHJpYnV0ZS50cmFuc2Zvcm0oZGF0YSkgYXMgUHJvamVjdGlvbkFsaWFzO1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaChhdHRyaWJ1dGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRGVmYXVsdEZpbHRlcihxdWVyeTogUXVlcnlNb2RlbCk6IFF1ZXJ5TW9kZWwge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwuZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZGVmYXVsdEZpbHRlci5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5Py5jb25kaXRpb24gIT09IFwiYW5kXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcImFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocXVlcnk/LmNvbmRpdGlvbiAhPT0gXCJvclwiKSB7XG4gICAgICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbjogXCJvclwiLFxuICAgICAgICAgICAgICAgICAgICBydWxlczogW3F1ZXJ5XVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVlcnkucnVsZXMucHVzaCh0aGlzLm1vZGVsLmRlZmF1bHRGaWx0ZXIuZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplT3JkZXIob3JkZXJzOiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdKTogT3JkZXJNb2RlbFtdIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9yZGVycykpIHtcbiAgICAgICAgICAgIG9yZGVycyA9IFtvcmRlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgb3JkZXJzID0gb3JkZXJzPy5maWx0ZXIob3JkZXIgPT4gb3JkZXI/LmNvbHVtbik7XG5cbiAgICAgICAgaWYgKCFvcmRlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgb3JkZXJzID0gW3tcbiAgICAgICAgICAgICAgICBjb2x1bW46IFwiaWRcIixcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFwiYXNjXCJcbiAgICAgICAgICAgIH1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yZGVycztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vbk5lc3RlZE9yZGVyQ29sdW1ucyhvcmRlcnM6IE9yZGVyTW9kZWxbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIG9yZGVycy5maWx0ZXIob3JkZXIgPT4gb3JkZXIuY29sdW1uICYmICFvcmRlci5jb2x1bW4uaW5jbHVkZXMoXCIuXCIpKS5tYXAob3JkZXIgPT4gb3JkZXIuY29sdW1uKTtcbiAgICB9XG59XG4iXX0=
|
|
525
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUFrRDtBQUNsRCx5Q0FVbUI7QUFHbkIsK0VBQTBFO0FBQzFFLHFFQUFpRTtBQUVqRSxnRUFBMkQ7QUFHM0QsaUZBQTRFO0FBQzVFLHdEQUF1RDtBQUN2RCwrQ0FBMkM7QUFDM0MsaURBQTZDO0FBQzdDLHVDQU9tQjtBQUNuQiwrRUFBMEU7QUFDMUUseURBQTRFO0FBSzVFLHlEQUEwRTtBQUcxRSxJQUFhLGFBQWEscUJBQTFCLE1BQWEsYUFBYTtJQUl0QixZQUNZLG9CQUEwQyxFQUMxQyxnQkFBa0MsRUFDbEMsS0FBdUIsRUFDdkIscUJBQTRDLEVBQzVDLFVBQTZCO1FBSjdCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN2QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBRXJDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sT0FBTyxDQUFJLE9BQWdCO1FBQzlCLE9BQU8sSUFBSSxlQUFhLENBQ3BCLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsSUFBSSxDQUFDLGdCQUFnQixFQUNyQjtZQUNJLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixjQUFjLEVBQUUsT0FBTztTQUNULEVBQ2xCLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FDbEIsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQVksRUFBRSxJQUEwQjtRQUMzRCxNQUFNLE1BQU0sR0FBK0IsRUFBRSxDQUFDO1FBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMs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QyxDQUFDO0lBQzFHLENBQUM7Q0FDSixDQUFBO0FBM2xCWSxhQUFhO0lBRHpCLElBQUEsbUJBQVUsR0FBRTtxQ0FNeUIsNkNBQW9CO1FBQ3hCLG9DQUFnQjtRQUMzQix3QkFBVTtRQUNNLCtDQUFxQjtRQUNoQyx1Q0FBaUI7R0FUaEMsYUFBYSxDQTJsQnpCO0FBM2xCWSxzQ0FBYSIsImZpbGUiOiJsaWIvZmlsdGVyL2ZpbHRlci5zZXJ2aWNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgICBDb3VudE9wdGlvbnMsXG4gICAgRmluZE9wdGlvbnMsXG4gICAgSW5jbHVkZWFibGUsXG4gICAgSW5jbHVkZU9wdGlvbnMsXG4gICAgbGl0ZXJhbCxcbiAgICBPcCxcbiAgICBPcmRlcixcbiAgICBPcmRlckl0ZW0sXG4gICAgV2hlcmVPcHRpb25zXG59IGZyb20gXCJzZXF1ZWxpemVcIjtcbmltcG9ydCB7IFByb2plY3Rpb25BbGlhcyB9IGZyb20gXCJzZXF1ZWxpemUvdHlwZXMvbW9kZWxcIjtcbmltcG9ydCB7IEV4cG9ydFR5cGVzLCBGaWx0ZXJRdWVyeU1vZGVsLCBGaWx0ZXJSZXN1bHRNb2RlbCwgRmlsdGVyU2VhcmNoTW9kZWwsIE9yZGVyTW9kZWwgfSBmcm9tIFwiLi4vXCI7XG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVycy9hY2Nlc3MtY29udHJvbC5hZGFwdGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVBZGFwdGVyIH0gZnJvbSBcIi4uL2FkYXB0ZXJzL3RyYW5zbGF0ZS5hZGFwdGVyXCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9kYXRhLWZpbHRlci5yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBEYXRhRmlsdGVyU2VydmljZSB9IGZyb20gXCIuLi9kYXRhLWZpbHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJbmNsdWRlV2hlcmVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvaW5jbHVkZS5tb2RlbFwiO1xuaW1wb3J0IHsgRGF0YUZpbHRlclVzZXJNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvdXNlci5tb2RlbFwiO1xuaW1wb3J0IHsgU2VxdWVsaXplTW9kZWxTY2FubmVyIH0gZnJvbSBcIi4uL3NjYW5uZXJzL3NlcXVlbGl6ZS1tb2RlbC5zY2FubmVyXCI7XG5pbXBvcnQgeyBNLCBTZXF1ZWxpemVVdGlscyB9IGZyb20gXCIuLi9zZXF1ZWxpemUudXRpbHNcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXIgfSBmcm9tIFwiLi9iYXNlLWZpbHRlclwiO1xuaW1wb3J0IHsgRmlsdGVyVXRpbHMgfSBmcm9tIFwiLi9maWx0ZXIudXRpbHNcIjtcbmltcG9ydCB7XG4gICAgRmlsdGVyLFxuICAgIEZpbHRlckNvbmRpdGlvbixcbiAgICBGaWx0ZXJDb25kaXRpb25SdWxlLFxuICAgIEZpbHRlckRlZmluaXRpb24sXG4gICAgU2VsZWN0RmlsdGVyLFxuICAgIFNlbGVjdEZpbHRlclZhbHVlXG59IGZyb20gXCIuL2ZpbHRlcnNcIjtcbmltcG9ydCB7IEdlb0xvY2FsaXphdGlvbkZpbHRlciB9IGZyb20gXCIuL2ZpbHRlcnMvZ2VvLWxvY2FsaXphdGlvbi5maWx0ZXJcIjtcbmltcG9ydCB7IEdyb3VwRmlsdGVyLCBHcm91cEZpbHRlckRlZmluaXRpb24gfSBmcm9tIFwiLi9maWx0ZXJzL2dyb3VwLmZpbHRlclwiO1xuaW1wb3J0IHsgUXVlcnlNb2RlbCwgUXVlcnlSdWxlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IEZpbHRlckNvbmZpZ3VyYXRpb25TZWFyY2hNb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXItY29uZmlndXJhdGlvbi1zZWFyY2gubW9kZWxcIjtcbmltcG9ydCB7IEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gXCIuL21vZGVscy9maWx0ZXItY29uZmlndXJhdGlvbi5tb2RlbFwiO1xuaW1wb3J0IHsgRmlsdGVyUmVzb3VyY2VWYWx1ZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL2ZpbHRlci1yZXNvdXJjZS12YWx1ZS5tb2RlbFwiO1xuaW1wb3J0IHsgT3JkZXJSdWxlLCBPcmRlclJ1bGVEZWZpbml0aW9uIH0gZnJvbSBcIi4vb3JkZXItcnVsZXMvb3JkZXItcnVsZVwiO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZTxEYXRhPiB7XG4gICAgcHJpdmF0ZSBkZWZpbml0aW9uczogeyBbbmFtZTogc3RyaW5nXTogRmlsdGVyRGVmaW5pdGlvbiB8IEdyb3VwRmlsdGVyRGVmaW5pdGlvbiB8IE9yZGVyUnVsZURlZmluaXRpb24gfTtcbiAgICBwcml2YXRlIHJlcG9zaXRvcnk6IERhdGFGaWx0ZXJSZXBvc2l0b3J5PERhdGE+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgYWNjZXNzQ29udHJvbEFkYXB0ZXI6IEFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZUFkYXB0ZXI6IFRyYW5zbGF0ZUFkYXB0ZXIsXG4gICAgICAgIHByaXZhdGUgbW9kZWw6IEJhc2VGaWx0ZXI8RGF0YT4sXG4gICAgICAgIHByaXZhdGUgc2VxdWVsaXplTW9kZWxTY2FubmVyOiBTZXF1ZWxpemVNb2RlbFNjYW5uZXIsXG4gICAgICAgIHByaXZhdGUgZGF0YUZpbHRlcjogRGF0YUZpbHRlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRhdGE8VD4oZGF0YURlZjogVHlwZTxUPik6IEZpbHRlclNlcnZpY2U8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlclNlcnZpY2UoXG4gICAgICAgICAgICB0aGlzLmFjY2Vzc0NvbnRyb2xBZGFwdGVyLFxuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVBZGFwdGVyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMubW9kZWwsXG4gICAgICAgICAgICAgICAgZGF0YURlZmluaXRpb246IGRhdGFEZWZcbiAgICAgICAgICAgIH0gYXMgQmFzZUZpbHRlcjxUPixcbiAgICAgICAgICAgIHRoaXMuc2VxdWVsaXplTW9kZWxTY2FubmVyLFxuICAgICAgICAgICAgdGhpcy5kYXRhRmlsdGVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldENvbmZpZyhyZXF1ZXN0OiBhbnksIHVzZXI/OiBEYXRhRmlsdGVyVXNlck1vZGVsKTogUHJvbWlzZTxGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IEZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuZGVmaW5pdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IE9yZGVyUnVsZS52YWxpZGF0ZSh0aGlzLmRlZmluaXRpb25zW2tleV0gYXMgT3JkZXJSdWxlRGVmaW5pdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgKHRoaXMuZGVmaW5pdGlvbnNba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKS5nZXRDb25maWcoa2V5LCByZXF1ZXN0LCB1c2VyKTtcbiAgICAgICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICAgIGlkOiBrZXksXG4gICAgICAgICAgICAgICAgbmFtZTogYXdhaXQgdGhpcy50cmFuc2xhdGVBZGFwdGVyLmdldFRyYW5zbGF0aW9uKHVzZXIubGFuZ3VhZ2UsIEZpbHRlclV0aWxzLmdldEZpbHRlclRyYW5zbGF0aW9uS2V5KGtleSkpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaENvbmZpZ1ZhbHVlcyhcbiAgICAgICAgcmVxdWVzdDogYW55LFxuICAgICAgICBzZWFyY2g6IEZpbHRlckNvbmZpZ3VyYXRpb25TZWFyY2hNb2RlbCxcbiAgICAgICAgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWxcbiAgICApOiBQcm9taXNlPFNlbGVjdEZpbHRlclZhbHVlW10+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHNlYXJjaC5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbc2VhcmNoLmlkXTtcbiAgICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFNlbGVjdEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZpbHRlci52YWx1ZXMoeyB2YWx1ZTogc2VhcmNoLnZhbHVlLCB1c2VyLCByZXF1ZXN0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBmaW5kUmVzb3VyY2VWYWx1ZUJ5SWQocmVxdWVzdDogYW55LCBzZWFyY2g6IEZpbHRlclJlc291cmNlVmFsdWVNb2RlbCwgdXNlcj86IERhdGFGaWx0ZXJVc2VyTW9kZWwpOiBQcm9taXNlPFNlbGVjdEZpbHRlclZhbHVlPiB7XG4gICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShzZWFyY2guaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3NlYXJjaC5pZF07XG4gICAgICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBTZWxlY3RGaWx0ZXIgJiYgZmlsdGVyLmdldFJlc291cmNlQnlJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZpbHRlci5nZXRSZXNvdXJjZUJ5SWQoeyBpZDogc2VhcmNoLnJlc291cmNlSWQsIHVzZXIsIHJlcXVlc3QgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvdW50KHVzZXI6IERhdGFGaWx0ZXJVc2VyTW9kZWwsIG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHVibGljIGFzeW5jIGNvdW50KG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHVibGljIGFzeW5jIGNvdW50KC4uLmFyZ3M6IFtEYXRhRmlsdGVyVXNlck1vZGVsIHwgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUXVlcnlNb2RlbD9dKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbDtcbiAgICAgICAgY29uc3QgdXNlciA9IG9wdCA/IHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsIDogbnVsbDtcblxuICAgICAgICBjb25zdCBjb3VudE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSk7XG4gICAgICAgIHRoaXMuYWRkU2VhcmNoQ29uZGl0aW9uKG9wdGlvbnMuc2VhcmNoLCBjb3VudE9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdXNlciA/IHRoaXMuY291bnRUb3RhbFZhbHVlcyh1c2VyLCBjb3VudE9wdGlvbnMpIDogdGhpcy5jb3VudFRvdGFsVmFsdWVzKGNvdW50T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbHRlcih1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxGaWx0ZXJSZXN1bHRNb2RlbDxEYXRhPj47XG4gICAgcHVibGljIGFzeW5jIGZpbHRlcihvcHRpb25zOiBGaWx0ZXJRdWVyeU1vZGVsKTogUHJvbWlzZTxGaWx0ZXJSZXN1bHRNb2RlbDxEYXRhPj47XG4gICAgcHVibGljIGFzeW5jIGZpbHRlciguLi5hcmdzOiBbRGF0YUZpbHRlclVzZXJNb2RlbCB8IEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWw/XSk6IFByb21pc2U8RmlsdGVyUmVzdWx0TW9kZWw8RGF0YT4+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9wdCwgb3B0XSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHQgPyBvcHQgOiB1c2VyT3JPcHQgYXMgRmlsdGVyUXVlcnlNb2RlbDtcbiAgICAgICAgY29uc3QgdXNlciA9IG9wdCA/IHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsIDogbnVsbDtcblxuICAgICAgICBvcHRpb25zLm9yZGVyID0gdGhpcy5ub3JtYWxpemVPcmRlcihvcHRpb25zLm9yZGVyKTtcblxuICAgICAgICBjb25zdCBjb3VudE9wdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbmRPcHRpb25zKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgb3B0aW9ucy5xdWVyeSwgb3B0aW9ucy5kYXRhKTtcbiAgICAgICAgdGhpcy5hZGRTZWFyY2hDb25kaXRpb24ob3B0aW9ucy5zZWFyY2gsIGNvdW50T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkT3JkZXJDb25kaXRpb24ob3B0aW9ucy5vcmRlciwgY291bnRPcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRHcm91cE9wdGlvbihvcHRpb25zLm9yZGVyLCBjb3VudE9wdGlvbnMpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsID0gYXdhaXQgKHVzZXIgPyB0aGlzLmNvdW50VG90YWxWYWx1ZXModXNlciwgY291bnRPcHRpb25zKSA6IHRoaXMuY291bnRUb3RhbFZhbHVlcyhjb3VudE9wdGlvbnMpKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgKHVzZXIgPyB0aGlzLmZpbmRWYWx1ZXModXNlciwgb3B0aW9ucywgY291bnRPcHRpb25zKSA6IHRoaXMuZmluZFZhbHVlcyhvcHRpb25zLCBjb3VudE9wdGlvbnMpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvdGFsLFxuICAgICAgICAgICAgcGFnZTogb3B0aW9ucy5wYWdlLFxuICAgICAgICAgICAgdmFsdWVzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRvd25sb2FkRGF0YShcbiAgICAgICAgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCxcbiAgICAgICAgdHlwZTogRXhwb3J0VHlwZXMsXG4gICAgICAgIG9wdGlvbnM6IEZpbHRlclF1ZXJ5TW9kZWwsXG4gICAgICAgIGV4cG9ydE9wdGlvbnM/OiBvYmplY3RcbiAgICApOiBQcm9taXNlPEJ1ZmZlciB8IHN0cmluZz4ge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0RmluZE9wdGlvbnModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCBvcHRpb25zLnF1ZXJ5KTtcblxuICAgICAgICBvcHRpb25zLm9yZGVyID0gdGhpcy5ub3JtYWxpemVPcmRlcihvcHRpb25zLm9yZGVyKTtcblxuICAgICAgICB0aGlzLmFkZFNlYXJjaENvbmRpdGlvbihvcHRpb25zLnNlYXJjaCwgZmluZE9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZE9yZGVyQ29uZGl0aW9uKG9wdGlvbnMub3JkZXIsIGZpbmRPcHRpb25zKTtcbiAgICAgICAgZGVsZXRlIG9wdGlvbnMucGFnZTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgKHVzZXIgPyB0aGlzLmZpbmRWYWx1ZXModXNlciwgb3B0aW9ucywgZmluZE9wdGlvbnMpIDogdGhpcy5maW5kVmFsdWVzKG9wdGlvbnMsIGZpbmRPcHRpb25zKSk7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCB0aGlzLm1vZGVsLmdldEV4cG9ydGVkRmllbGRzS2V5cyh0eXBlKTtcbiAgICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzLm1hcCgodmFsdWUpID0+IHRoaXMubW9kZWwuZ2V0RXhwb3J0ZWRGaWVsZHModmFsdWUsIHVzZXI/Lmxhbmd1YWdlID8/IFwiZnJcIiwgdHlwZSkpKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZG93bmxvYWREYXRhKGhlYWRlcnMsIGRhdGEsIHR5cGUsIHVzZXI/Lmxhbmd1YWdlID8/IFwiZnJcIiwgZXhwb3J0T3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmRvd25sb2FkRGF0YSh2YWx1ZXMsIHR5cGUsIHVzZXI/Lmxhbmd1YWdlID8/IFwiZnJcIiwgZXhwb3J0T3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmluZE9wdGlvbnMobW9kZWw6IHR5cGVvZiBNLCBxdWVyeTogUXVlcnlNb2RlbCwgZGF0YT86IG9iamVjdCk6IFByb21pc2U8RmluZE9wdGlvbnM+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlc2V0IEdlbyBsb2NhbGl6YXRpb24gZmlsdGVyIHN0YXRlXG4gICAgICAgICAqL1xuICAgICAgICBHZW9Mb2NhbGl6YXRpb25GaWx0ZXIucmVzZXQoKTtcblxuICAgICAgICBxdWVyeSA9IHRoaXMuYWRkRGVmYXVsdEZpbHRlcihxdWVyeSk7XG4gICAgICAgIGxldCBvcHRpb246IEZpbmRPcHRpb25zID0ge307XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVDb25kaXRpb25zID0gW107XG4gICAgICAgICAgICBjb25zdCBoYXZpbmdDb25kaXRpb25zID0gW107XG5cbiAgICAgICAgICAgIG9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgaW5jbHVkZTogYXdhaXQgdGhpcy5nZXRJbmNsdWRlKG1vZGVsLCBxdWVyeSwgZGF0YSksXG4gICAgICAgICAgICAgICAgd2hlcmU6IHF1ZXJ5LmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IHdoZXJlQ29uZGl0aW9ucyB9IDogeyBbT3Aub3JdOiB3aGVyZUNvbmRpdGlvbnMgfSxcbiAgICAgICAgICAgICAgICBoYXZpbmc6IHF1ZXJ5LmNvbmRpdGlvbiA9PT0gXCJhbmRcIiA/IHsgW09wLmFuZF06IGhhdmluZ0NvbmRpdGlvbnMgfSA6IHsgW09wLm9yXTogaGF2aW5nQ29uZGl0aW9ucyB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbm9pZCA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVXaGVyZU9wdGlvbnMocXVlcnksIHdoZXJlQ29uZGl0aW9ucyk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSGF2aW5nT3B0aW9ucyhxdWVyeSwgaGF2aW5nQ29uZGl0aW9ucyk7XG5cbiAgICAgICAgICAgIGlmICghcGFyYW5vaWQpIHtcbiAgICAgICAgICAgICAgICBvcHRpb24ucGFyYW5vaWQgPSBwYXJhbm9pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFoYXZpbmdDb25kaXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvcHRpb24uaGF2aW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMucmVwb3NpdG9yeSA9IHRoaXMuZGF0YUZpbHRlci5mb3IodGhpcy5tb2RlbC5kYXRhRGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMubW9kZWwudHJhbnNsYXRlU2VydmljZSA9IHRoaXMudHJhbnNsYXRlQWRhcHRlcjtcblxuICAgICAgICB0aGlzLmRlZmluaXRpb25zID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhRmlsdGVyLnZhbGlkYXRlKHRoaXMubW9kZWxba2V5XSBhcyBGaWx0ZXJEZWZpbml0aW9uKSAmJlxuICAgICAgICAgICAgICAgICFHcm91cEZpbHRlci52YWxpZGF0ZSh0aGlzLm1vZGVsW2tleV0gYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uKSAmJlxuICAgICAgICAgICAgICAgICFPcmRlclJ1bGUudmFsaWRhdGUodGhpcy5tb2RlbFtrZXldIGFzIE9yZGVyUnVsZURlZmluaXRpb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kZWZpbml0aW9uc1trZXldID0gdGhpcy5tb2RlbFtrZXldIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldEluY2x1ZGUobW9kZWw6IHR5cGVvZiBNLCBxdWVyeTogUXVlcnlNb2RlbCwgZGF0YT86IG9iamVjdCk6IFByb21pc2U8SW5jbHVkZWFibGVbXT4ge1xuICAgICAgICBpZiAoIXF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgbSA9IHJ1bGUgYXMgUXVlcnlNb2RlbDtcbiAgICAgICAgICAgIGlmIChtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goYXdhaXQgdGhpcy5nZXRJbmNsdWRlKG1vZGVsLCBtLCBkYXRhKSBhcyBJbmNsdWRlT3B0aW9uc1tdKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgciA9IHJ1bGUgYXMgUXVlcnlSdWxlTW9kZWw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVmaW5pdGlvbnMuaGFzT3duUHJvcGVydHkoci5pZCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5kZWZpbml0aW9uc1tyLmlkXTtcbiAgICAgICAgICAgIGlmICgoZmlsdGVyIGFzIEdyb3VwRmlsdGVyRGVmaW5pdGlvbikucm9vdEZpbHRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGYgPSBmaWx0ZXIgYXMgR3JvdXBGaWx0ZXJEZWZpbml0aW9uO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5nZXRGaWx0ZXJJbmNsdWRlKG1vZGVsLCBmLnJvb3RGaWx0ZXIsIGRhdGEpKTtcblxuICAgICAgICAgICAgICAgIGlmICghZi5sYXp5TG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZi52YWx1ZUZpbHRlciwgZGF0YSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRmlsZXIgPSBhd2FpdCBmLmdldFZhbHVlRmlsdGVyKHIudmFsdWVbMF0pO1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgdmFsdWVGaWxlciBhcyBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0RmlsdGVySW5jbHVkZShtb2RlbCwgZmlsdGVyIGFzIEZpbHRlckRlZmluaXRpb24sIGRhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU2VxdWVsaXplVXRpbHMucmVkdWNlSW5jbHVkZXMoaW5jbHVkZXMsIHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbDogdHlwZW9mIE0sIGNvbmRpdGlvbjogRmlsdGVyQ29uZGl0aW9uKTogSW5jbHVkZU9wdGlvbnNbXSB7XG4gICAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbmNsdWRlczogSW5jbHVkZU9wdGlvbnNbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgY29uZGl0aW9uLnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgICBpZiAoYy5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlcy5wdXNoKC4uLnRoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgY29uZGl0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBGaWx0ZXJDb25kaXRpb25SdWxlO1xuICAgICAgICAgICAgaWYgKHIucGF0aCkge1xuICAgICAgICAgICAgICAgIGluY2x1ZGVzLnB1c2goLi4udGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXMobW9kZWwsIHsgcGF0aDogci5wYXRoIH0sIFtdLCB7IGluY2x1ZGU6IFtdIH0sIHRydWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5jbHVkZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVdoZXJlT3B0aW9ucyhxdWVyeTogUXVlcnlNb2RlbCwgb3B0aW9uczogV2hlcmVPcHRpb25zW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhcmFub2lkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBRdWVyeU1vZGVsO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gYy5jb25kaXRpb24gPT09IFwiYW5kXCIgPyBPcC5hbmQgOiBPcC5vcjtcbiAgICAgICAgICAgICAgICBjb25zdCB3aGVyZSA9IHsgW29wXTogY29uZGl0aW9ucyB9O1xuICAgICAgICAgICAgICAgIHBhcmFub2lkID0gcGFyYW5vaWQgJiYgYXdhaXQgdGhpcy5nZW5lcmF0ZVdoZXJlT3B0aW9ucyhjLCBjb25kaXRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmICh3aGVyZVtvcCBhcyBhbnldLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2god2hlcmUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByID0gcnVsZSBhcyBRdWVyeVJ1bGVNb2RlbDtcbiAgICAgICAgICAgIGlmICghdGhpcy5kZWZpbml0aW9ucy5oYXNPd25Qcm9wZXJ0eShyLmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmRlZmluaXRpb25zW3IuaWRdIGFzIEZpbHRlckRlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIU9yZGVyUnVsZS52YWxpZGF0ZShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyT3B0aW9ucyA9IGF3YWl0IGZpbHRlci5nZXRXaGVyZU9wdGlvbnMocik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnB1c2goZmlsdGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyYW5vaWQgPSBmaWx0ZXIucGFyYW5vaWQgPz8gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbm9pZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlSGF2aW5nT3B0aW9ucyhxdWVyeTogUXVlcnlNb2RlbCwgb3B0aW9uczogV2hlcmVPcHRpb25zW10pIHtcbiAgICAgICAgaWYgKCFxdWVyeS5ydWxlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIHF1ZXJ5LnJ1bGVzKSB7XG4gICAgICAgICAgICBjb25zdCBjID0gcnVsZSBhcyBRdWVyeU1vZGVsO1xuICAgICAgICAgICAgaWYgKGMuY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wID0gYy5jb25kaXRpb24gPT09IFwiYW5kXCIgPyBPcC5hbmQgOiBPcC5vcjtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXZpbmcgPSB7IFtvcF06IGNvbmRpdGlvbnMgfTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSGF2aW5nT3B0aW9ucyhjLCBjb25kaXRpb25zKTtcblxuICAgICAgICAgICAgICAgIGlmIChoYXZpbmdbb3AgYXMgYW55XS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGhhdmluZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHIgPSBydWxlIGFzIFF1ZXJ5UnVsZU1vZGVsO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRlZmluaXRpb25zLmhhc093blByb3BlcnR5KHIuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZGVmaW5pdGlvbnNbci5pZF0gYXMgRmlsdGVyRGVmaW5pdGlvbjtcbiAgICAgICAgICAgIGlmICghT3JkZXJSdWxlLnZhbGlkYXRlKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJPcHRpb25zID0gYXdhaXQgZmlsdGVyLmdldEhhdmluZ09wdGlvbnMocik7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXNoKGZpbHRlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRkU2VhcmNoQ29uZGl0aW9uKHNlYXJjaDogRmlsdGVyU2VhcmNoTW9kZWwsIG9wdGlvbnM6IENvdW50T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNlYXJjaD8udmFsdWU/LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICghdmFsdWU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXBvc2l0b3J5LmFkZFNlYXJjaENvbmRpdGlvbihzZWFyY2gudmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkT3JkZXJDb25kaXRpb24ob3JkZXJzOiBPcmRlck1vZGVsW10sIG9wdGlvbnM6IENvdW50T3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAob3JkZXJzLmV2ZXJ5KG9yZGVyID0+ICFvcmRlci5kaXJlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZXMgPSBydWxlICYmIE9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSA/XG4gICAgICAgICAgICAgICAgdGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0SW5jbHVkZXModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCB7IHBhdGg6IHJ1bGUucGF0aCB9LCBbXSkgOlxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3NpdG9yeS5nZW5lcmF0ZU9yZGVySW5jbHVkZShvcmRlcik7XG5cbiAgICAgICAgICAgIGlmICghaW5jbHVkZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9wdGlvbnMuaW5jbHVkZSA9IFNlcXVlbGl6ZVV0aWxzLm1lcmdlSW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5pbmNsdWRlIGFzIEluY2x1ZGVPcHRpb25zW10sXG4gICAgICAgICAgICAgICAgaW5jbHVkZXMgYXMgSW5jbHVkZU9wdGlvbnNbXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZEdyb3VwT3B0aW9uKG9yZGVyczogT3JkZXJNb2RlbFtdLCBvcHRpb25zOiBDb3VudE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLnJlcG9zaXRvcnkubW9kZWw7XG4gICAgICAgIG9wdGlvbnMuZ3JvdXAgPSBbYCR7bW9kZWwubmFtZX0uaWRgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgY29uc3QgcnVsZSA9IHRoaXMuZGVmaW5pdGlvbnNbb3JkZXIuY29sdW1uXSBhcyBPcmRlclJ1bGVEZWZpbml0aW9uO1xuICAgICAgICAgICAgaWYgKHJ1bGUgJiYgT3JkZXJSdWxlLnZhbGlkYXRlKHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gb3JkZXIuY29sdW1uLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHZhbHVlcy5wb3AoKTtcbiAgICAgICAgICAgIGlmICghdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JvdXAucHVzaChgJHttb2RlbC5uYW1lfS4ke1NlcXVlbGl6ZVV0aWxzLmZpbmRDb2x1bW5GaWVsZE5hbWUobW9kZWwsIGNvbHVtbil9YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZ3JvdXAucHVzaCguLi50aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRHcm91cChtb2RlbCwgb3JkZXIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY291bnRUb3RhbFZhbHVlcyh1c2VyOiBEYXRhRmlsdGVyVXNlck1vZGVsLCBvcHRpb25zOiBGaW5kT3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBwcml2YXRlIGFzeW5jIGNvdW50VG90YWxWYWx1ZXMob3B0aW9uczogRmluZE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgcHJpdmF0ZSBhc3luYyBjb3VudFRvdGFsVmFsdWVzKC4uLmFyZ3M6IFtEYXRhRmlsdGVyVXNlck1vZGVsIHwgRmluZE9wdGlvbnMsIEZpbmRPcHRpb25zP10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBbdXNlck9yT3B0LCBvcHRdID0gYXJncztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdCA/IG9wdCA6IHVzZXJPck9wdCBhcyBGaW5kT3B0aW9ucztcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBtZWFucyB0aGF0IGNvdW50VG90YWxWYWx1ZXMgd2FzIGNhbGxlZCB3aXRoIGEgdXNlclxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53aGVyZSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzQ29udHJvbFdoZXJlQ29uZGl0aW9uKG9wdGlvbnMud2hlcmUsIHVzZXJPck9wdCBhcyBEYXRhRmlsdGVyVXNlck1vZGVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmhhdmluZykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5tb2RlbC5maW5kQWxsKHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHN1YlF1ZXJ5OiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS5tb2RlbC5jb3VudCh7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICAgICAgfSkgYXMgYW55O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KHVzZXI6IFVzZXJzLCBmaWx0ZXI6IEZpbHRlclF1ZXJ5TW9kZWwsIG9wdGlvbnM6IEZpbmRPcHRpb25zKTogUHJvbWlzZTxEYXRhW10+O1xuICAgIHByaXZhdGUgYXN5bmMgZmluZFZhbHVlczxVc2VycyBleHRlbmRzIERhdGFGaWx0ZXJVc2VyTW9kZWw+KGZpbHRlcjogRmlsdGVyUXVlcnlNb2RlbCwgb3B0aW9uczogRmluZE9wdGlvbnMpOiBQcm9taXNlPERhdGFbXT47XG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kVmFsdWVzPFVzZXJzIGV4dGVuZHMgRGF0YUZpbHRlclVzZXJNb2RlbD4oLi4uYXJnczogW1VzZXJzIHwgRmlsdGVyUXVlcnlNb2RlbCwgRmlsdGVyUXVlcnlNb2RlbCB8IEZpbmRPcHRpb25zLCBGaW5kT3B0aW9ucz9dKTogUHJvbWlzZTxEYXRhW10+IHtcbiAgICAgICAgY29uc3QgW3VzZXJPck9GaWx0ZXIsIGZpbHRlck9yT3B0LCBvcHRdID0gYXJncztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdCA/IG9wdCA6IGZpbHRlck9yT3B0IGFzIEZpbmRPcHRpb25zO1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBvcHQgPyBmaWx0ZXJPck9wdCBhcyBGaWx0ZXJRdWVyeU1vZGVsIDogdXNlck9yT0ZpbHRlciBhcyBGaWx0ZXJRdWVyeU1vZGVsO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIG1lYW5zIHRoYXQgZmluZFZhbHVlcyB3YXMgY2FsbGVkIHdpdGggYSB1c2VyXG4gICAgICAgICAqL1xuICAgICAgICBpZiAob3B0KSB7XG4gICAgICAgICAgICBvcHRpb25zLndoZXJlID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NDb250cm9sV2hlcmVDb25kaXRpb24ob3B0aW9ucy53aGVyZSwgdXNlck9yT0ZpbHRlciBhcyBVc2Vycyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuZ2V0T3JkZXJPcHRpb25zKGZpbHRlci5vcmRlciBhcyBPcmRlck1vZGVsW10pO1xuXG4gICAgICAgIGNvbnN0IG5vbk5lc3RlZE9yZGVyQ29sdW1ucyA9IChmaWx0ZXIub3JkZXIgYXMgT3JkZXJNb2RlbFtdKVxuICAgICAgICAgICAgLm1hcChvcmRlciA9PiBvcmRlci5jb2x1bW4pXG4gICAgICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4gJiYgIWNvbHVtbi5pbmNsdWRlcyhcIi5cIikgJiYgIXRoaXMucmVwb3NpdG9yeS5oYXNDdXN0b21BdHRyaWJ1dGUoY29sdW1uKSk7XG4gICAgICAgIGNvbnN0IGN1c3RvbUF0dHJpYnV0ZXMgPSB0aGlzLmdldE9yZGVyQ3VzdG9tQXR0cmlidXRlKGZpbHRlci5vcmRlciBhcyBPcmRlck1vZGVsW10sIGZpbHRlci5kYXRhKTtcblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkubW9kZWwuZmluZEFsbCh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW1wiaWRcIiwgLi4ubm9uTmVzdGVkT3JkZXJDb2x1bW5zLCAuLi5jdXN0b21BdHRyaWJ1dGVzXSxcbiAgICAgICAgICAgIGxpbWl0OiBmaWx0ZXIucGFnZSA/IGZpbHRlci5wYWdlLnNpemUgOiBudWxsLFxuICAgICAgICAgICAgb2Zmc2V0OiBmaWx0ZXIucGFnZSA/IGZpbHRlci5wYWdlLm51bWJlciAqIGZpbHRlci5wYWdlLnNpemUgKyAoZmlsdGVyLnBhZ2Uub2Zmc2V0ID8/IDApIDogbnVsbCxcbiAgICAgICAgICAgIHN1YlF1ZXJ5OiBmYWxzZSxcbiAgICAgICAgICAgIG9yZGVyXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwID0gZmlsdGVyLmdyb3VwQnkgPyBbU2VxdWVsaXplVXRpbHMuZ2V0R3JvdXBMaXRlcmFsKHRoaXMucmVwb3NpdG9yeS5tb2RlbCwgZmlsdGVyLmdyb3VwQnkpXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVwb3NpdG9yeS5maW5kQWxsKHtcbiAgICAgICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgICAgICAgaWQ6IHZhbHVlcy5tYXAoeCA9PiB4LmlkKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgICAgcGFyYW5vaWQ6IG9wdGlvbnMucGFyYW5vaWQsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICB9LCBmaWx0ZXIuZGF0YSA/PyB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRBY2Nlc3NDb250cm9sV2hlcmVDb25kaXRpb24od2hlcmU6IFdoZXJlT3B0aW9ucywgdXNlcjogRGF0YUZpbHRlclVzZXJNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdXNlciBmb3VuZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWNjZXNzQ29udHJvbCBpc24ndCBlbmFibGUgaW4geW91ciBwcm9qZWN0XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgdGhpcy5hY2Nlc3NDb250cm9sQWRhcHRlci5nZXRSZXNvdXJjZXModGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCB1c2VyKTtcbiAgICAgICAgaWYgKHJlc291cmNlcy5pZHMpIHtcbiAgICAgICAgICAgIHJldHVybiBTZXF1ZWxpemVVdGlscy5tZXJnZVdoZXJlKHsgaWQ6IHJlc291cmNlcy5pZHMgfSwgd2hlcmUgPz8ge30pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNvdXJjZXMud2hlcmUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW09wLmFuZF06IFtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLndoZXJlLFxuICAgICAgICAgICAgICAgICAgICB3aGVyZSA/PyB7fVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVdoZXJlQ29uZGl0aW9ucyhtb2RlbDogSW5jbHVkZVdoZXJlTW9kZWwsIGRhdGE/OiBvYmplY3QpOiBXaGVyZU9wdGlvbnMge1xuICAgICAgICBpZiAoIW1vZGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aGVyZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtb2RlbCkge1xuICAgICAgICAgICAgaWYgKCFtb2RlbC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kZWxba2V5XShkYXRhKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICB3aGVyZVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2hlcmU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJJbmNsdWRlKG1vZGVsOiB0eXBlb2YgTSwgZmlsdGVyOiBGaWx0ZXJEZWZpbml0aW9uLCBkYXRhPzogb2JqZWN0KTogSW5jbHVkZU9wdGlvbnNbXVtdIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIucGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmdldENvbmRpdGlvbkluY2x1ZGUobW9kZWwsIGZpbHRlci5jb25kaXRpb24pXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB0aGlzLnNlcXVlbGl6ZU1vZGVsU2Nhbm5lci5nZXRJbmNsdWRlcyhtb2RlbCwge1xuICAgICAgICAgICAgICAgIHBhdGg6IGZpbHRlci5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmFub2lkOiBmaWx0ZXIucGFyYW5vaWQsXG4gICAgICAgICAgICAgICAgd2hlcmU6IHRoaXMuZ2VuZXJhdGVXaGVyZUNvbmRpdGlvbnMoZmlsdGVyLndoZXJlLCBkYXRhKVxuICAgICAgICAgICAgfSwgW10sIFtdLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29uZGl0aW9uSW5jbHVkZShtb2RlbCwgZmlsdGVyLmNvbmRpdGlvbilcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yZGVyT3B0aW9ucyhvcmRlcnM6IE9yZGVyTW9kZWwgfCBPcmRlck1vZGVsW10pOiBPcmRlciB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcmRlcnMpKSB7XG4gICAgICAgICAgICBvcmRlcnMgPSBbb3JkZXJzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdlbmVyYXRlZE9yZGVyOiBPcmRlciA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3Qgb3JkZXIgb2Ygb3JkZXJzKSB7XG4gICAgICAgICAgICBpZiAoIW9yZGVyPy5jb2x1bW4gfHwgIW9yZGVyLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXBvc2l0b3J5Lmhhc0N1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gb3JkZXIubnVsbExhc3QgPyBgLSR7b3JkZXIuY29sdW1ufWAgOiBvcmRlci5jb2x1bW47XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gb3JkZXIubnVsbExhc3QgPyBvcmRlci5kaXJlY3Rpb24gPT09IFwiYXNjXCIgPyBcImRlc2NcIiA6IFwiYXNjXCIgOiBvcmRlci5kaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVkT3JkZXIucHVzaChbbGl0ZXJhbChjb2x1bW4pLCBkaXJlY3Rpb24udG9VcHBlckNhc2UoKV0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBydWxlID0gdGhpcy5kZWZpbml0aW9uc1tvcmRlci5jb2x1bW5dIGFzIE9yZGVyUnVsZURlZmluaXRpb247XG4gICAgICAgICAgICBpZiAoIXJ1bGUgfHwgIU9yZGVyUnVsZS52YWxpZGF0ZShydWxlKSkge1xuICAgICAgICAgICAgICAgIGdlbmVyYXRlZE9yZGVyLnB1c2godGhpcy5zZXF1ZWxpemVNb2RlbFNjYW5uZXIuZ2V0T3JkZXIodGhpcy5yZXBvc2l0b3J5Lm1vZGVsLCBvcmRlcikgYXMgT3JkZXJJdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2VuZXJhdGVkT3JkZXIucHVzaChbcnVsZS5nZXRPcmRlck9wdGlvbigpLCBvcmRlci5kaXJlY3Rpb24udG9VcHBlckNhc2UoKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdlbmVyYXRlZE9yZGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JkZXJDdXN0b21BdHRyaWJ1dGUob3JkZXJzOiBPcmRlck1vZGVsIHwgT3JkZXJNb2RlbFtdLCBkYXRhPzogb2JqZWN0KTogUHJvamVjdGlvbkFsaWFzW10ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICAgICAgb3JkZXJzID0gW29yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBQcm9qZWN0aW9uQWxpYXNbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIG9yZGVycykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlcG9zaXRvcnkuaGFzQ3VzdG9tQXR0cmlidXRlKG9yZGVyLmNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY3VzdG9tQXR0cmlidXRlID0gdGhpcy5yZXBvc2l0b3J5LmdldEN1c3RvbUF0dHJpYnV0ZShvcmRlci5jb2x1bW4pO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gY3VzdG9tQXR0cmlidXRlLnRyYW5zZm9ybShkYXRhKSBhcyBQcm9qZWN0aW9uQWxpYXM7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGREZWZhdWx0RmlsdGVyKHF1ZXJ5OiBRdWVyeU1vZGVsKTogUXVlcnlNb2RlbCB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5kZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tb2RlbC5kZWZhdWx0RmlsdGVyLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICBpZiAocXVlcnk/LmNvbmRpdGlvbiAhPT0gXCJhbmRcIikge1xuICAgICAgICAgICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb246IFwiYW5kXCIsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzOiBbcXVlcnldXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChxdWVyeT8uY29uZGl0aW9uICE9PSBcIm9yXCIpIHtcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uOiBcIm9yXCIsXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzOiBbcXVlcnldXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWVyeS5ydWxlcy5wdXNoKHRoaXMubW9kZWwuZGVmYXVsdEZpbHRlci5maWx0ZXIpO1xuICAgICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVPcmRlcihvcmRlcnM6IE9yZGVyTW9kZWwgfCBPcmRlck1vZGVsW10pOiBPcmRlck1vZGVsW10ge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob3JkZXJzKSkge1xuICAgICAgICAgICAgb3JkZXJzID0gW29yZGVyc107XG4gICAgICAgIH1cblxuICAgICAgICBvcmRlcnMgPSBvcmRlcnM/LmZpbHRlcihvcmRlciA9PiBvcmRlcj8uY29sdW1uKTtcblxuICAgICAgICBpZiAoIW9yZGVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBvcmRlcnMgPSBbe1xuICAgICAgICAgICAgICAgIGNvbHVtbjogXCJpZFwiLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJhc2NcIlxuICAgICAgICAgICAgfV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JkZXJzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Tm9uTmVzdGVkT3JkZXJDb2x1bW5zKG9yZGVyczogT3JkZXJNb2RlbFtdKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gb3JkZXJzLmZpbHRlcihvcmRlciA9PiBvcmRlci5jb2x1bW4gJiYgIW9yZGVyLmNvbHVtbi5pbmNsdWRlcyhcIi5cIikpLm1hcChvcmRlciA9PiBvcmRlci5jb2x1bW4pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -3,10 +3,14 @@ import { QueryRuleModel } from "../models";
|
|
|
3
3
|
import { FilterOperatorTypes } from "../operators";
|
|
4
4
|
import { FilterType } from "../type";
|
|
5
5
|
import { BaseFilterDefinition, Filter } from "./filter";
|
|
6
|
+
export interface DateFilterDefinition {
|
|
7
|
+
defaultTimezone?: string;
|
|
8
|
+
}
|
|
6
9
|
export declare class DateFilter extends Filter {
|
|
7
10
|
type: FilterType;
|
|
8
11
|
operators: FilterOperatorTypes[];
|
|
9
|
-
|
|
12
|
+
private readonly defaultTimezone;
|
|
13
|
+
constructor(definition: BaseFilterDefinition & DateFilterDefinition);
|
|
10
14
|
getWhereOptions(rule: QueryRuleModel): Promise<WhereOptions>;
|
|
11
15
|
private getEqualWhereOptions;
|
|
12
16
|
private getNotEqualWhereOptions;
|
|
@@ -5,7 +5,8 @@ const sequelize_1 = require("sequelize");
|
|
|
5
5
|
const operators_1 = require("../operators");
|
|
6
6
|
const type_1 = require("../type");
|
|
7
7
|
const filter_1 = require("./filter");
|
|
8
|
-
const
|
|
8
|
+
const date_fns_1 = require("date-fns");
|
|
9
|
+
const date_fns_tz_1 = require("date-fns-tz");
|
|
9
10
|
// Filters a row by exact date given in the rules. We strip the time from the date.
|
|
10
11
|
//
|
|
11
12
|
// Depending on the inclusivity of your request we use the start of day or end of day, for example if the rule's value
|
|
@@ -17,36 +18,28 @@ const moment = require("moment");
|
|
|
17
18
|
// timeframe by one day for each side you don't want to include.
|
|
18
19
|
class DateFilter extends filter_1.Filter {
|
|
19
20
|
constructor(definition) {
|
|
21
|
+
var _a;
|
|
20
22
|
super(definition);
|
|
21
23
|
this.type = type_1.FilterType.Date;
|
|
22
24
|
this.operators = [...operators_1.DateOperators];
|
|
25
|
+
this.defaultTimezone = (_a = definition.defaultTimezone) !== null && _a !== void 0 ? _a : "America/Montreal";
|
|
23
26
|
}
|
|
24
27
|
async getWhereOptions(rule) {
|
|
28
|
+
// TODO: Check if the client sends us a timezone
|
|
29
|
+
const offsetMilliseconds = (0, date_fns_tz_1.getTimezoneOffset)(this.defaultTimezone);
|
|
25
30
|
if (rule.operation === operators_1.FilterOperatorTypes.Between || rule.operation === operators_1.FilterOperatorTypes.NotBetween) {
|
|
26
31
|
const values = [
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
.utcOffset(-5, true)
|
|
30
|
-
.format(),
|
|
31
|
-
moment(rule.value[1])
|
|
32
|
-
.endOf("day")
|
|
33
|
-
.utcOffset(-5, true)
|
|
34
|
-
.format()
|
|
32
|
+
(0, date_fns_1.addMilliseconds)((0, date_fns_1.startOfDay)((0, date_fns_1.parseJSON)(rule.value[0])), offsetMilliseconds).toISOString(),
|
|
33
|
+
(0, date_fns_1.addMilliseconds)((0, date_fns_1.endOfDay)((0, date_fns_1.parseJSON)(rule.value[1])), offsetMilliseconds).toISOString()
|
|
35
34
|
];
|
|
36
35
|
return super.getWhereOptions({
|
|
37
36
|
...rule,
|
|
38
37
|
value: values
|
|
39
38
|
});
|
|
40
39
|
}
|
|
41
|
-
|
|
42
|
-
const start =
|
|
43
|
-
|
|
44
|
-
.utcOffset(-5, true)
|
|
45
|
-
.format();
|
|
46
|
-
const end = moment(rule.value)
|
|
47
|
-
.endOf("day")
|
|
48
|
-
.utcOffset(-5, true)
|
|
49
|
-
.format();
|
|
40
|
+
const parsedValue = (0, date_fns_1.parseJSON)(rule.value);
|
|
41
|
+
const start = (0, date_fns_1.addMilliseconds)((0, date_fns_1.startOfDay)(parsedValue), offsetMilliseconds).toISOString();
|
|
42
|
+
const end = (0, date_fns_1.addMilliseconds)((0, date_fns_1.endOfDay)(parsedValue), offsetMilliseconds).toISOString();
|
|
50
43
|
switch (rule.operation) {
|
|
51
44
|
case operators_1.FilterOperatorTypes.Equal:
|
|
52
45
|
return this.getEqualWhereOptions(rule, start, end);
|
|
@@ -118,4 +111,4 @@ class DateFilter extends filter_1.Filter {
|
|
|
118
111
|
}
|
|
119
112
|
exports.DateFilter = DateFilter;
|
|
120
113
|
|
|
121
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkM7QUFFN0MsNENBQWtFO0FBQ2xFLGtDQUFxQztBQUNyQyxxQ0FBd0Q7QUFDeEQsaUNBQWlDO0FBRWpDLG1GQUFtRjtBQUNuRixFQUFFO0FBQ0Ysc0hBQXNIO0FBQ3RILDRCQUE0QjtBQUM1QixzR0FBc0c7QUFDdEcsZ0dBQWdHO0FBQ2hHLEVBQUU7QUFDRix3SEFBd0g7QUFDeEgsZ0VBQWdFO0FBQ2hFLE1BQWEsVUFBVyxTQUFRLGVBQU07SUFJbEMsWUFBWSxVQUFnQztRQUN4QyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFKZixTQUFJLEdBQUcsaUJBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkIsY0FBUyxHQUFHLENBQUMsR0FBRyx5QkFBYSxDQUFDLENBQUM7SUFJdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFVBQVUsRUFBRTtZQUNyRyxNQUFNLE1BQU0sR0FBRztnQkFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQztxQkFDZCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO3FCQUNuQixNQUFNLEVBQUU7Z0JBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ2hCLEtBQUssQ0FBQyxLQUFLLENBQUM7cUJBQ1osU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztxQkFDbkIsTUFBTSxFQUFFO2FBQ2hCLENBQUM7WUFDRixPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7Z0JBQ3pCLEdBQUcs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RSxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDekIsU0FBUyxFQUFFLCtCQUFtQixDQUFDLFdBQVc7WUFDMUMsS0FBSyxFQUFFLEdBQUc7WUFDVixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQW9CLEVBQUUsR0FBVztRQUNsRSxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDekIsU0FBUyxFQUFFLCtCQUFtQixDQUFDLE9BQU87WUFDdEMsS0FBSyxFQUFFLEdBQUc7WUFDVixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sS0FBSyxDQUFDLDZCQUE2QixDQUFDLElBQW9CLEVBQUUsS0FBYTtRQUMzRSxPQUFPLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDekIsU0FBUyxFQUFFLCtCQUFtQixDQUFDLGNBQWM7WUFDN0MsS0FBSyxFQUFFLEtBQUs7WUFDWixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0o7QUE3R0QsZ0NBNkdDIiwiZmlsZSI6ImxpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9wLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBRdWVyeVJ1bGVNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHNcIjtcbmltcG9ydCB7IERhdGVPcGVyYXRvcnMsIEZpbHRlck9wZXJhdG9yVHlwZXMgfSBmcm9tIFwiLi4vb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJUeXBlIH0gZnJvbSBcIi4uL3R5cGVcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXJEZWZpbml0aW9uLCBGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXJcIjtcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5cbi8vIEZpbHRlcnMgYSByb3cgYnkgZXhhY3QgZGF0ZSBnaXZlbiBpbiB0aGUgcnVsZXMuIFdlIHN0cmlwIHRoZSB0aW1lIGZyb20gdGhlIGRhdGUuXG4vL1xuLy8gRGVwZW5kaW5nIG9uIHRoZSBpbmNsdXNpdml0eSBvZiB5b3VyIHJlcXVlc3Qgd2UgdXNlIHRoZSBzdGFydCBvZiBkYXkgb3IgZW5kIG9mIGRheSwgZm9yIGV4YW1wbGUgaWYgdGhlIHJ1bGUncyB2YWx1ZVxuLy8gaXMgXCIyMDIwLTAzLTA2VDAwOjU1OjEyXCI7XG4vLyAgLSBBbmQgaXRzIG9wZXJhdG9yIGlzIExlc3NPckVxdWFsIHdlIHdpbGwgb3V0cHV0IFwiPCAyMDIwLTAzLTA2VDAwOjAwOjAwXCIgdG8gZXhjbHVkZSB0aGUgZ2l2ZW4gZGF5LlxuLy8gIC0gQW5kIGl0cyBvcGVyYXRvciBpcyBMZXNzLCB3ZSB3aWxsIG91dHB1dCBcIjwgMjAyMC0wMy0wNlQyMzo1OTo1OVwiIHRvIGluY2x1ZGUgdGhlIGdpdmVuIGRheS5cbi8vXG4vLyBGb3IgQmV0d2VlbiBhbmQgTm90QmV0d2VlbiBvcGVyYXRvcnMsIHdlIGFsd2F5cyBpbmNsdWRlIHRoZSBnaXZlbiBmaXJzdCBkYXkgYW5kIGxhc3QgZGF5LCBzbyBtYWtlIHN1cmUgdG8gc2hyaW5rIHlvdXJcbi8vIHRpbWVmcmFtZSBieSBvbmUgZGF5IGZvciBlYWNoIHNpZGUgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZS5cbmV4cG9ydCBjbGFzcyBEYXRlRmlsdGVyIGV4dGVuZHMgRmlsdGVyIHtcbiAgICBwdWJsaWMgdHlwZSA9IEZpbHRlclR5cGUuRGF0ZTtcbiAgICBwdWJsaWMgb3BlcmF0b3JzID0gWy4uLkRhdGVPcGVyYXRvcnNdO1xuXG4gICAgY29uc3RydWN0b3IoZGVmaW5pdGlvbjogQmFzZUZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgICAgc3VwZXIoZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGlmIChydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5CZXR3ZWVuIHx8IHJ1bGUub3BlcmF0aW9uID09PSBGaWx0ZXJPcGVyYXRvclR5cGVzLk5vdEJldHdlZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IFtcbiAgICAgICAgICAgICAgICBtb21lbnQocnVsZS52YWx1ZVswXSlcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0T2YoXCJkYXlcIilcbiAgICAgICAgICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgpLFxuICAgICAgICAgICAgICAgIG1vbWVudChydWxlLnZhbHVlWzFdKVxuICAgICAgICAgICAgICAgICAgICAuZW5kT2YoXCJkYXlcIilcbiAgICAgICAgICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgLi4ucnVsZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IERvIG5vdCBoYXJkIGNvZGUgdGltZXpvbmUgb2Zmc2V0XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbW9tZW50KHJ1bGUudmFsdWUpXG4gICAgICAgICAgICAuc3RhcnRPZihcImRheVwiKVxuICAgICAgICAgICAgLnV0Y09mZnNldCgtNSwgdHJ1ZSlcbiAgICAgICAgICAgIC5mb3JtYXQoKTtcbiAgICAgICAgY29uc3QgZW5kID0gbW9tZW50KHJ1bGUudmFsdWUpXG4gICAgICAgICAgICAuZW5kT2YoXCJkYXlcIilcbiAgICAgICAgICAgIC51dGNPZmZzZXQoLTUsIHRydWUpXG4gICAgICAgICAgICAuZm9ybWF0KCk7XG4gICAgICAgIHN3aXRjaCAocnVsZS5vcGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROb3RFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExlc3NXaGVyZU9wdGlvbnMocnVsZSwgc3RhcnQpO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLkxlc3NPckVxdWFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExlc3NPckVxdWFsV2hlcmVPcHRpb25zKHJ1bGUsIGVuZCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHcmVhdGVyV2hlcmVPcHRpb25zKHJ1bGUsIGVuZCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlck9yRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R3JlYXRlck9yRXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgc3RhcnQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHJ1bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5CZXR3ZWVuLFxuICAgICAgICAgICAgdmFsdWU6IFtzdGFydCwgZW5kXSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtPcC5vcl06IFtcbiAgICAgICAgICAgICAgICBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuTGVzcyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGF3YWl0IHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5HcmVhdGVyLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW5kLFxuICAgICAgICAgICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRMZXNzV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBzdGFydDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuTGVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBzdGFydCxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0TGVzc09yRXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuTGVzc09yRXF1YWwsXG4gICAgICAgICAgICB2YWx1ZTogZW5kLFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRHcmVhdGVyV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBlbmQ6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkdyZWF0ZXIsXG4gICAgICAgICAgICB2YWx1ZTogZW5kLFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRHcmVhdGVyT3JFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgc3RhcnQ6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkdyZWF0ZXJPckVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXJ0LFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
114
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9kYXRlLmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkM7QUFFN0MsNENBQWtFO0FBQ2xFLGtDQUFxQztBQUNyQyxxQ0FBd0Q7QUFDeEQsdUNBQTRFO0FBQzVFLDZDQUFnRDtBQU1oRCxtRkFBbUY7QUFDbkYsRUFBRTtBQUNGLHNIQUFzSDtBQUN0SCw0QkFBNEI7QUFDNUIsc0dBQXNHO0FBQ3RHLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0Ysd0hBQXdIO0FBQ3hILGdFQUFnRTtBQUNoRSxNQUFhLFVBQVcsU0FBUSxlQUFNO0lBTWxDLFlBQVksVUFBdUQ7O1FBQy9ELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQU5mLFNBQUksR0FBRyxpQkFBVSxDQUFDLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQUcsQ0FBQyxHQUFHLHlCQUFhLENBQUMsQ0FBQztRQU9sQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQUEsVUFBVSxDQUFDLGVBQWUsbUNBQUksa0JBQWtCLENBQUM7SUFDNUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBb0I7UUFDN0MsZ0RBQWdEO1FBQ2hELE1BQU0sa0JBQWtCLEdBQUcsSUFBQSwrQkFBaUIsRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFbkUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLCtCQUFtQixDQUFDLFVBQVUsRUFBRTtZQUNyRyxNQUFNLE1BQU0sR0FBRztnQkFDWCxJQUFBLDBCQUFlLEVBQUMsSUFBQSxxQkFBVSxFQUFDLElBQUEsb0JBQVMsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLFdBQVcsRUFBRTtnQkFDdkYsSUFBQSwwQkFBZSxFQUFDLElBQUEsbUJBQVEsRUFBQyxJQUFB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RUFBRSxLQUFLO1lBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxJQUFvQixFQUFFLEdBQVc7UUFDdEUsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSwrQkFBbUIsQ0FBQyxXQUFXO1lBQzFDLEtBQUssRUFBRSxHQUFHO1lBQ1YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxJQUFvQixFQUFFLEdBQVc7UUFDbEUsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSwrQkFBbUIsQ0FBQyxPQUFPO1lBQ3RDLEtBQUssRUFBRSxHQUFHO1lBQ1YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxJQUFvQixFQUFFLEtBQWE7UUFDM0UsT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFNBQVMsRUFBRSwrQkFBbUIsQ0FBQyxjQUFjO1lBQzdDLEtBQUssRUFBRSxLQUFLO1lBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2QsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBekdELGdDQXlHQyIsImZpbGUiOiJsaWIvZmlsdGVyL2ZpbHRlcnMvZGF0ZS5maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcCwgV2hlcmVPcHRpb25zIH0gZnJvbSBcInNlcXVlbGl6ZVwiO1xuaW1wb3J0IHsgUXVlcnlSdWxlTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBEYXRlT3BlcmF0b3JzLCBGaWx0ZXJPcGVyYXRvclR5cGVzIH0gZnJvbSBcIi4uL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5pbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMsIGVuZE9mRGF5LCBwYXJzZUpTT04sIHN0YXJ0T2ZEYXkgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcbmltcG9ydCB7IGdldFRpbWV6b25lT2Zmc2V0IH0gZnJvbSBcImRhdGUtZm5zLXR6XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZUZpbHRlckRlZmluaXRpb24ge1xuICAgIGRlZmF1bHRUaW1lem9uZT86IHN0cmluZztcbn1cblxuLy8gRmlsdGVycyBhIHJvdyBieSBleGFjdCBkYXRlIGdpdmVuIGluIHRoZSBydWxlcy4gV2Ugc3RyaXAgdGhlIHRpbWUgZnJvbSB0aGUgZGF0ZS5cbi8vXG4vLyBEZXBlbmRpbmcgb24gdGhlIGluY2x1c2l2aXR5IG9mIHlvdXIgcmVxdWVzdCB3ZSB1c2UgdGhlIHN0YXJ0IG9mIGRheSBvciBlbmQgb2YgZGF5LCBmb3IgZXhhbXBsZSBpZiB0aGUgcnVsZSdzIHZhbHVlXG4vLyBpcyBcIjIwMjAtMDMtMDZUMDA6NTU6MTJcIjtcbi8vICAtIEFuZCBpdHMgb3BlcmF0b3IgaXMgTGVzc09yRXF1YWwgd2Ugd2lsbCBvdXRwdXQgXCI8IDIwMjAtMDMtMDZUMDA6MDA6MDBcIiB0byBleGNsdWRlIHRoZSBnaXZlbiBkYXkuXG4vLyAgLSBBbmQgaXRzIG9wZXJhdG9yIGlzIExlc3MsIHdlIHdpbGwgb3V0cHV0IFwiPCAyMDIwLTAzLTA2VDIzOjU5OjU5XCIgdG8gaW5jbHVkZSB0aGUgZ2l2ZW4gZGF5LlxuLy9cbi8vIEZvciBCZXR3ZWVuIGFuZCBOb3RCZXR3ZWVuIG9wZXJhdG9ycywgd2UgYWx3YXlzIGluY2x1ZGUgdGhlIGdpdmVuIGZpcnN0IGRheSBhbmQgbGFzdCBkYXksIHNvIG1ha2Ugc3VyZSB0byBzaHJpbmsgeW91clxuLy8gdGltZWZyYW1lIGJ5IG9uZSBkYXkgZm9yIGVhY2ggc2lkZSB5b3UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlLlxuZXhwb3J0IGNsYXNzIERhdGVGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5EYXRlO1xuICAgIHB1YmxpYyBvcGVyYXRvcnMgPSBbLi4uRGF0ZU9wZXJhdG9yc107XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRUaW1lem9uZTtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEJhc2VGaWx0ZXJEZWZpbml0aW9uICYgRGF0ZUZpbHRlckRlZmluaXRpb24pIHtcbiAgICAgICAgc3VwZXIoZGVmaW5pdGlvbik7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0VGltZXpvbmUgPSBkZWZpbml0aW9uLmRlZmF1bHRUaW1lem9uZSA/PyBcIkFtZXJpY2EvTW9udHJlYWxcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhlIGNsaWVudCBzZW5kcyB1cyBhIHRpbWV6b25lXG4gICAgICAgIGNvbnN0IG9mZnNldE1pbGxpc2Vjb25kcyA9IGdldFRpbWV6b25lT2Zmc2V0KHRoaXMuZGVmYXVsdFRpbWV6b25lKTtcblxuICAgICAgICBpZiAocnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQmV0d2VlbiB8fCBydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RCZXR3ZWVuKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXG4gICAgICAgICAgICAgICAgYWRkTWlsbGlzZWNvbmRzKHN0YXJ0T2ZEYXkocGFyc2VKU09OKHJ1bGUudmFsdWVbMF0pKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGFkZE1pbGxpc2Vjb25kcyhlbmRPZkRheShwYXJzZUpTT04ocnVsZS52YWx1ZVsxXSkpLCBvZmZzZXRNaWxsaXNlY29uZHMpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgICAgICAuLi5ydWxlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUpTT04ocnVsZS52YWx1ZSBhcyBhbnkpO1xuICAgICAgICBjb25zdCBzdGFydCA9IGFkZE1pbGxpc2Vjb25kcyhzdGFydE9mRGF5KHBhcnNlZFZhbHVlKSwgb2Zmc2V0TWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpXG4gICAgICAgIGNvbnN0IGVuZCA9IGFkZE1pbGxpc2Vjb25kcyhlbmRPZkRheShwYXJzZWRWYWx1ZSksIG9mZnNldE1pbGxpc2Vjb25kcykudG9JU09TdHJpbmcoKVxuXG4gICAgICAgIHN3aXRjaCAocnVsZS5vcGVyYXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROb3RFcXVhbFdoZXJlT3B0aW9ucyhydWxlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0b3JUeXBlcy5MZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExlc3NXaGVyZU9wdGlvbnMocnVsZSwgc3RhcnQpO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRvclR5cGVzLkxlc3NPckVxdWFsOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldExlc3NPckVxdWFsV2hlcmVPcHRpb25zKHJ1bGUsIGVuZCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRHcmVhdGVyV2hlcmVPcHRpb25zKHJ1bGUsIGVuZCk7XG4gICAgICAgICAgICBjYXNlIEZpbHRlck9wZXJhdG9yVHlwZXMuR3JlYXRlck9yRXF1YWw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R3JlYXRlck9yRXF1YWxXaGVyZU9wdGlvbnMocnVsZSwgc3RhcnQpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHJ1bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBQcm9taXNlPFdoZXJlT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0V2hlcmVPcHRpb25zKHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5CZXR3ZWVuLFxuICAgICAgICAgICAgdmFsdWU6IFtzdGFydCwgZW5kXSxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0Tm90RXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtPcC5vcl06IFtcbiAgICAgICAgICAgICAgICBhd2FpdCBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuTGVzcyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGF3YWl0IHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogRmlsdGVyT3BlcmF0b3JUeXBlcy5HcmVhdGVyLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZW5kLFxuICAgICAgICAgICAgICAgICAgICBpZDogcnVsZS5pZFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRMZXNzV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBzdGFydDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuTGVzcyxcbiAgICAgICAgICAgIHZhbHVlOiBzdGFydCxcbiAgICAgICAgICAgIGlkOiBydWxlLmlkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0TGVzc09yRXF1YWxXaGVyZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIGVuZDogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFdoZXJlT3B0aW9ucyh7XG4gICAgICAgICAgICBvcGVyYXRpb246IEZpbHRlck9wZXJhdG9yVHlwZXMuTGVzc09yRXF1YWwsXG4gICAgICAgICAgICB2YWx1ZTogZW5kLFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRHcmVhdGVyV2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBlbmQ6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkdyZWF0ZXIsXG4gICAgICAgICAgICB2YWx1ZTogZW5kLFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRHcmVhdGVyT3JFcXVhbFdoZXJlT3B0aW9ucyhydWxlOiBRdWVyeVJ1bGVNb2RlbCwgc3RhcnQ6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRXaGVyZU9wdGlvbnMoe1xuICAgICAgICAgICAgb3BlcmF0aW9uOiBGaWx0ZXJPcGVyYXRvclR5cGVzLkdyZWF0ZXJPckVxdWFsLFxuICAgICAgICAgICAgdmFsdWU6IHN0YXJ0LFxuICAgICAgICAgICAgaWQ6IHJ1bGUuaWRcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { WhereOptions } from "sequelize";
|
|
2
|
+
import { FilterOperatorTypes, QueryRuleModel } from "../..";
|
|
3
|
+
import { FilterType } from "../type";
|
|
4
|
+
import { BaseFilterDefinition, Filter } from "./filter";
|
|
5
|
+
export interface JsonArrayFilterDefinition {
|
|
6
|
+
jsonPath?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class JsonArrayFilter extends Filter {
|
|
9
|
+
type: FilterType;
|
|
10
|
+
operators: FilterOperatorTypes[];
|
|
11
|
+
jsonPath?: string;
|
|
12
|
+
constructor(definition: JsonArrayFilterDefinition & BaseFilterDefinition);
|
|
13
|
+
getWhereOptions(rule: QueryRuleModel, name?: string): Promise<WhereOptions>;
|
|
14
|
+
private generateEqualsLikeOptions;
|
|
15
|
+
private generateContainsLikeOptions;
|
|
16
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JsonArrayFilter = void 0;
|
|
4
|
+
const sequelize_1 = require("sequelize");
|
|
5
|
+
const __1 = require("../..");
|
|
6
|
+
const sequelize_utils_1 = require("../../sequelize.utils");
|
|
7
|
+
const type_1 = require("../type");
|
|
8
|
+
const filter_1 = require("./filter");
|
|
9
|
+
class JsonArrayFilter extends filter_1.Filter {
|
|
10
|
+
constructor(definition) {
|
|
11
|
+
super(definition);
|
|
12
|
+
this.type = type_1.FilterType.JsonArray;
|
|
13
|
+
this.operators = [...__1.JsonArrayOperators];
|
|
14
|
+
}
|
|
15
|
+
async getWhereOptions(rule, name) {
|
|
16
|
+
if (!name) {
|
|
17
|
+
name = this.path ? sequelize_utils_1.SequelizeUtils.getAttributeFullName(this.attribute, this.path) : this.attribute;
|
|
18
|
+
}
|
|
19
|
+
if (rule.operation === __1.FilterOperatorTypes.Equal || rule.operation === __1.FilterOperatorTypes.NotEqual) {
|
|
20
|
+
return this.generateEqualsLikeOptions(rule, name);
|
|
21
|
+
}
|
|
22
|
+
return this.generateContainsLikeOptions(rule, name);
|
|
23
|
+
}
|
|
24
|
+
async generateEqualsLikeOptions(rule, name) {
|
|
25
|
+
const newRule = {
|
|
26
|
+
...rule,
|
|
27
|
+
value: (0, sequelize_1.fn)("JSON_ARRAY", rule.value)
|
|
28
|
+
};
|
|
29
|
+
if (!this.jsonPath) {
|
|
30
|
+
return {
|
|
31
|
+
[name]: sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const colName = this.path ? (0, sequelize_1.col)(name) : (0, sequelize_1.literal)(name);
|
|
35
|
+
if (this.jsonPath) {
|
|
36
|
+
return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_EXTRACT", colName, this.jsonPath), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
|
|
37
|
+
}
|
|
38
|
+
return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_EXTRACT", colName), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
|
|
39
|
+
}
|
|
40
|
+
async generateContainsLikeOptions(rule, name) {
|
|
41
|
+
const value = typeof rule.value === "string" ? `"${rule.value}"` : rule.value;
|
|
42
|
+
/**
|
|
43
|
+
* We override the rule to use an equal or not equal with a JSON_CONTAINS function
|
|
44
|
+
*/
|
|
45
|
+
const newRule = {
|
|
46
|
+
operation: rule.operation === __1.FilterOperatorTypes.Contains ? __1.FilterOperatorTypes.Equal : __1.FilterOperatorTypes.NotEqual,
|
|
47
|
+
value: true
|
|
48
|
+
};
|
|
49
|
+
const colName = this.path ? (0, sequelize_1.col)(name) : (0, sequelize_1.literal)(name);
|
|
50
|
+
if (this.jsonPath) {
|
|
51
|
+
return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value, this.jsonPath), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
|
|
52
|
+
}
|
|
53
|
+
return (0, sequelize_1.where)((0, sequelize_1.fn)("JSON_CONTAINS", colName, value), sequelize_utils_1.SequelizeUtils.generateWhereValue(newRule));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.JsonArrayFilter = JsonArrayFilter;
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9maWx0ZXIvZmlsdGVycy9qc29uLWFycmF5LmZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBNkU7QUFDN0UsNkJBQTJGO0FBQzNGLDJEQUF1RDtBQUN2RCxrQ0FBcUM7QUFDckMscUNBQXdEO0FBTXhELE1BQWEsZUFBZ0IsU0FBUSxlQUFNO0lBS3ZDLFlBQVksVUFBNEQ7UUFDcEUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBTGYsU0FBSSxHQUFHLGlCQUFVLENBQUMsU0FBUyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxDQUFDLEdBQUcsc0JBQWtCLENBQUMsQ0FBQztJQUszQyxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFvQixFQUFFLElBQWE7UUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3RHO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLHVCQUFtQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLHVCQUFtQixDQUFDLFFBQVEsRUFBRTtZQUNqRyxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckQ7UUFFRCxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxJQUFvQixFQUFFLElBQVk7UUFDdEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLElBQUk7WUFDUCxLQUFLLEVBQUUsSUFBQSxjQUFFLEVBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDdEMsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE9BQU87Z0JBQ0gsQ0FBQyxJQUFJLENBQUMsRUFBRSxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQW9CLENBQUM7YUFDbEUsQ0FBQztTQUNMO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBQSxlQUFHLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsbUJBQU8sRUFBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPLElBQUEsaUJBQUssRUFBQyxJQUFBLGNBQUUsRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxnQ0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQW9CLENBQWMsQ0FBQyxDQUFBO1NBQ2pJO1FBQ0QsT0FBTyxJQUFBLGlCQUFLLEVBQUMsSUFBQSxjQUFFLEVBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7SUFDbkgsQ0FBQztJQUVPLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxJQUFvQixFQUFFLElBQVk7UUFDeEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFOUU7O1dBRUc7UUFDSCxNQUFNLE9BQU8sR0FBRztZQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxLQUFLLHVCQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsdUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1QkFBbUIsQ0FBQyxRQUFRO1lBQ3JILEtBQUssRUFBRSxJQUFJO1NBQ2QsQ0FBQTtRQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsZUFBRyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLG1CQUFPLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxJQUFBLGlCQUFLLEVBQUMsSUFBQSxjQUFFLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7U0FDekk7UUFDRCxPQUFPLElBQUEsaUJBQUssRUFBQyxJQUFBLGNBQUUsRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLGdDQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBb0IsQ0FBYyxDQUFDLENBQUE7SUFDM0gsQ0FBQztDQUNKO0FBdkRELDBDQXVEQyIsImZpbGUiOiJsaWIvZmlsdGVyL2ZpbHRlcnMvanNvbi1hcnJheS5maWx0ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2wsIGZuLCBsaXRlcmFsLCBMb2dpY1R5cGUsIHdoZXJlLCBXaGVyZU9wdGlvbnMgfSBmcm9tIFwic2VxdWVsaXplXCI7XG5pbXBvcnQgeyBGaWx0ZXJPcGVyYXRvclR5cGVzLCBKc29uQXJyYXlPcGVyYXRvcnMsIFF1ZXJ5UnVsZU1vZGVsLCBSdWxlTW9kZWwgfSBmcm9tIFwiLi4vLi5cIjtcbmltcG9ydCB7IFNlcXVlbGl6ZVV0aWxzIH0gZnJvbSBcIi4uLy4uL3NlcXVlbGl6ZS51dGlsc1wiO1xuaW1wb3J0IHsgRmlsdGVyVHlwZSB9IGZyb20gXCIuLi90eXBlXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyRGVmaW5pdGlvbiwgRmlsdGVyIH0gZnJvbSBcIi4vZmlsdGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbkFycmF5RmlsdGVyRGVmaW5pdGlvbiB7XG4gICAganNvblBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBKc29uQXJyYXlGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHB1YmxpYyB0eXBlID0gRmlsdGVyVHlwZS5Kc29uQXJyYXk7XG4gICAgcHVibGljIG9wZXJhdG9ycyA9IFsuLi5Kc29uQXJyYXlPcGVyYXRvcnNdO1xuICAgIHB1YmxpYyBqc29uUGF0aD86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGRlZmluaXRpb246IEpzb25BcnJheUZpbHRlckRlZmluaXRpb24gJiBCYXNlRmlsdGVyRGVmaW5pdGlvbikge1xuICAgICAgICBzdXBlcihkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0V2hlcmVPcHRpb25zKHJ1bGU6IFF1ZXJ5UnVsZU1vZGVsLCBuYW1lPzogc3RyaW5nKTogUHJvbWlzZTxXaGVyZU9wdGlvbnM+IHtcbiAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICBuYW1lID0gdGhpcy5wYXRoID8gU2VxdWVsaXplVXRpbHMuZ2V0QXR0cmlidXRlRnVsbE5hbWUodGhpcy5hdHRyaWJ1dGUsIHRoaXMucGF0aCkgOiB0aGlzLmF0dHJpYnV0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5FcXVhbCB8fCBydWxlLm9wZXJhdGlvbiA9PT0gRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVFcXVhbHNMaWtlT3B0aW9ucyhydWxlLCBuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlQ29udGFpbnNMaWtlT3B0aW9ucyhydWxlLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlRXF1YWxzTGlrZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IG5ld1J1bGUgPSB7XG4gICAgICAgICAgICAuLi5ydWxlLFxuICAgICAgICAgICAgdmFsdWU6IGZuKFwiSlNPTl9BUlJBWVwiLCBydWxlLnZhbHVlKVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXRoaXMuanNvblBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgW25hbWVdOiBTZXF1ZWxpemVVdGlscy5nZW5lcmF0ZVdoZXJlVmFsdWUobmV3UnVsZSBhcyBSdWxlTW9kZWwpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMucGF0aCA/IGNvbChuYW1lKSA6IGxpdGVyYWwobmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmpzb25QYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmUoZm4oXCJKU09OX0VYVFJBQ1RcIiwgY29sTmFtZSwgdGhpcy5qc29uUGF0aCksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3aGVyZShmbihcIkpTT05fRVhUUkFDVFwiLCBjb2xOYW1lKSwgU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKG5ld1J1bGUgYXMgUnVsZU1vZGVsKSBhcyBMb2dpY1R5cGUpXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZUNvbnRhaW5zTGlrZU9wdGlvbnMocnVsZTogUXVlcnlSdWxlTW9kZWwsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8V2hlcmVPcHRpb25zPiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHJ1bGUudmFsdWUgPT09IFwic3RyaW5nXCIgPyBgXCIke3J1bGUudmFsdWV9XCJgIDogcnVsZS52YWx1ZTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogV2Ugb3ZlcnJpZGUgdGhlIHJ1bGUgdG8gdXNlIGFuIGVxdWFsIG9yIG5vdCBlcXVhbCB3aXRoIGEgSlNPTl9DT05UQUlOUyBmdW5jdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgbmV3UnVsZSA9IHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjogcnVsZS5vcGVyYXRpb24gPT09IEZpbHRlck9wZXJhdG9yVHlwZXMuQ29udGFpbnMgPyBGaWx0ZXJPcGVyYXRvclR5cGVzLkVxdWFsIDogRmlsdGVyT3BlcmF0b3JUeXBlcy5Ob3RFcXVhbCxcbiAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMucGF0aCA/IGNvbChuYW1lKSA6IGxpdGVyYWwobmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmpzb25QYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gd2hlcmUoZm4oXCJKU09OX0NPTlRBSU5TXCIsIGNvbE5hbWUsIHZhbHVlLCB0aGlzLmpzb25QYXRoKSwgU2VxdWVsaXplVXRpbHMuZ2VuZXJhdGVXaGVyZVZhbHVlKG5ld1J1bGUgYXMgUnVsZU1vZGVsKSBhcyBMb2dpY1R5cGUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdoZXJlKGZuKFwiSlNPTl9DT05UQUlOU1wiLCBjb2xOYW1lLCB2YWx1ZSksIFNlcXVlbGl6ZVV0aWxzLmdlbmVyYXRlV2hlcmVWYWx1ZShuZXdSdWxlIGFzIFJ1bGVNb2RlbCkgYXMgTG9naWNUeXBlKVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -7,6 +7,7 @@ var ExportTypes;
|
|
|
7
7
|
ExportTypes["HTML"] = "html";
|
|
8
8
|
ExportTypes["CSV"] = "csv";
|
|
9
9
|
ExportTypes["PDF"] = "pdf";
|
|
10
|
+
ExportTypes["ZIP"] = "zip";
|
|
10
11
|
})(ExportTypes = exports.ExportTypes || (exports.ExportTypes = {}));
|
|
11
12
|
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9tb2RlbHMvZXhwb3J0LXR5cGVzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQVksV0FNWDtBQU5ELFdBQVksV0FBVztJQUNuQiw0QkFBWSxDQUFBO0lBQ1osNEJBQVksQ0FBQTtJQUNaLDBCQUFVLENBQUE7SUFDViwwQkFBVSxDQUFBO0lBQ1YsMEJBQVUsQ0FBQTtBQUNkLENBQUMsRUFOVyxXQUFXLEdBQVgsbUJBQVcsS0FBWCxtQkFBVyxRQU10QiIsImZpbGUiOiJsaWIvbW9kZWxzL2V4cG9ydC10eXBlcy5tb2RlbC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEV4cG9ydFR5cGVzIHtcbiAgICBYTFNYPSBcInhsc3hcIixcbiAgICBIVE1MPSBcImh0bWxcIixcbiAgICBDU1Y9IFwiY3N2XCIsXG4gICAgUERGPSBcInBkZlwiLFxuICAgIFpJUD0gXCJ6aXBcIixcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@recursyve/nestjs-data-filter",
|
|
3
|
-
"version": "8.4.
|
|
3
|
+
"version": "8.4.4",
|
|
4
4
|
"description": "NestJs DataFilter library",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,9 +22,10 @@
|
|
|
22
22
|
"@nestjs/common": ">=8.0.0",
|
|
23
23
|
"@nestjs/core": ">=8.0.0",
|
|
24
24
|
"@recursyve/nestjs-common": ">=8.0.0",
|
|
25
|
-
"moment": "^2.29.0",
|
|
26
25
|
"sequelize": ">=6.19.0",
|
|
27
|
-
"sequelize-typescript": ">=2.1.0"
|
|
26
|
+
"sequelize-typescript": ">=2.1.0",
|
|
27
|
+
"date-fns": "^2.28.0",
|
|
28
|
+
"date-fns-tz": "^1.3.4"
|
|
28
29
|
},
|
|
29
30
|
"devDependencies": {
|
|
30
31
|
"@nestjs/common": "^8.2.6",
|
|
@@ -36,6 +37,8 @@
|
|
|
36
37
|
"@types/node": "^17.0.15",
|
|
37
38
|
"class-transformer": "^0.5.1",
|
|
38
39
|
"class-validator": "^0.13.2",
|
|
40
|
+
"date-fns": "^2.28.0",
|
|
41
|
+
"date-fns-tz": "^1.3.4",
|
|
39
42
|
"express": "^4.17.2",
|
|
40
43
|
"gulp": "^4.0.2",
|
|
41
44
|
"gulp-copy": "^4.0.1",
|