@tricoteuses/senat 1.0.1 → 1.1.1
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/README.md +4 -1
- package/lib/aggregates.d.ts +54 -0
- package/lib/aggregates.js +1122 -0
- package/lib/aggregates.mjs +802 -0
- package/lib/aggregates.ts +947 -0
- package/lib/datasets.d.ts +1 -0
- package/lib/datasets.js +9 -1
- package/lib/datasets.mjs +10 -0
- package/lib/datasets.ts +11 -0
- package/lib/inserters.d.ts +5 -1
- package/lib/inserters.js +22 -3
- package/lib/inserters.mjs +19 -3
- package/lib/inserters.ts +27 -2
- package/lib/model/ameli.d.ts +4 -0
- package/lib/model/ameli.js +167 -0
- package/lib/model/ameli.mjs +57 -0
- package/lib/model/ameli.ts +86 -0
- package/lib/model/debats.d.ts +4 -0
- package/lib/model/debats.js +123 -0
- package/lib/model/debats.mjs +43 -0
- package/lib/model/debats.ts +68 -0
- package/lib/model/dosleg.d.ts +29 -0
- package/lib/model/dosleg.js +840 -0
- package/lib/model/dosleg.mjs +337 -0
- package/lib/model/dosleg.ts +558 -0
- package/lib/model/index.d.ts +5 -0
- package/lib/model/index.js +48 -0
- package/lib/model/index.mjs +5 -0
- package/lib/model/index.ts +11 -0
- package/lib/model/questions.d.ts +2 -0
- package/lib/model/questions.js +52 -0
- package/lib/model/questions.mjs +8 -0
- package/lib/model/questions.ts +14 -0
- package/lib/model/sens.d.ts +2 -0
- package/lib/model/sens.js +57 -0
- package/lib/model/sens.mjs +9 -0
- package/lib/model/sens.ts +18 -0
- package/lib/model/util.d.ts +1 -0
- package/lib/model/util.js +60 -0
- package/lib/model/util.mjs +10 -0
- package/lib/model/util.ts +16 -0
- package/lib/raw_types/questions.d.ts +226 -2
- package/lib/raw_types/questions.js +18 -5
- package/lib/raw_types/questions.mjs +1 -8
- package/lib/raw_types/questions.ts +242 -2
- package/lib/scripts/convert_data.d.ts +1 -0
- package/lib/scripts/convert_data.js +284 -0
- package/lib/scripts/convert_data.mjs +146 -0
- package/lib/scripts/convert_data.ts +182 -0
- package/lib/scripts/fix_db.d.ts +1 -0
- package/lib/scripts/fix_db.js +144 -0
- package/lib/scripts/fix_db.mjs +64 -0
- package/lib/scripts/fix_db.ts +75 -0
- package/lib/scripts/retrieve_open_data.js +20 -15
- package/lib/scripts/retrieve_open_data.mjs +20 -17
- package/lib/scripts/retrieve_open_data.ts +26 -22
- package/lib/scripts/retrieve_textes.js +4 -2
- package/lib/scripts/retrieve_textes.mjs +3 -1
- package/lib/scripts/retrieve_textes.ts +6 -4
- package/lib/types/questions.d.ts +2 -0
- package/lib/types/questions.js +13 -1
- package/lib/types/questions.mjs +1 -1
- package/lib/types/questions.ts +3 -0
- package/package.json +1 -1
package/lib/datasets.d.ts
CHANGED
package/lib/datasets.js
CHANGED
|
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.datasets = exports.EnabledDatasets = void 0;
|
|
8
|
+
exports.getChosenFromEnabledDatasets = getChosenFromEnabledDatasets;
|
|
8
9
|
exports.getEnabledDatasets = getEnabledDatasets;
|
|
10
|
+
require("core-js/modules/es.array.filter.js");
|
|
9
11
|
require("core-js/modules/es.array.join.js");
|
|
10
12
|
require("core-js/modules/es.array.map.js");
|
|
11
13
|
require("core-js/modules/es.array.reduce.js");
|
|
@@ -82,4 +84,10 @@ function getEnabledDatasets(categories) {
|
|
|
82
84
|
return enabledDatasets | EnabledDatasets[datasetName];
|
|
83
85
|
}, EnabledDatasets.None);
|
|
84
86
|
}
|
|
85
|
-
|
|
87
|
+
function getChosenFromEnabledDatasets(categories) {
|
|
88
|
+
var enabledDatasets = getEnabledDatasets(categories);
|
|
89
|
+
return [enabledDatasets & EnabledDatasets.Ameli ? datasets.ameli : null, enabledDatasets & EnabledDatasets.Debats ? datasets.debats : null, enabledDatasets & EnabledDatasets.DosLeg ? datasets.dosleg : null, enabledDatasets & EnabledDatasets.Questions ? datasets.questions : null, enabledDatasets & EnabledDatasets.Sens ? datasets.sens : null].filter(function (dataset) {
|
|
90
|
+
return dataset !== null;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnNFeHRyYSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BhdGgiLCJfYXNzZXJ0IiwiZSIsIl9fZXNNb2R1bGUiLCJFbmFibGVkRGF0YXNldHMiLCJleHBvcnRzIiwiZGF0YXNldHMiLCJhbWVsaSIsImRhdGFiYXNlIiwicmVwYWlyRW5jb2RpbmciLCJyZXBhaXJaaXAiLCJkYXRhc2V0IiwiZGF0YURpciIsInNxbEZpbGVuYW1lIiwiY29uY2F0Iiwic3FsRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZzIiwicmVtb3ZlU3luYyIsIm1vdmVTeW5jIiwic2NoZW1hIiwidGl0bGUiLCJ1cmwiLCJkZWJhdHMiLCJkb3NsZWciLCJxdWVzdGlvbnMiLCJzZW5zIiwiZ2V0RW5hYmxlZERhdGFzZXRzIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJ1bmRlZmluZWQiLCJyZWR1Y2UiLCJlbmFibGVkRGF0YXNldHMiLCJOb25lIiwiZ2V0Q2hvc2VuRnJvbUVuYWJsZWREYXRhc2V0cyIsIkFtZWxpIiwiRGViYXRzIiwiRG9zTGVnIiwiUXVlc3Rpb25zIiwiU2VucyIsImZpbHRlciJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc2V0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXNldCB7XG4gIGRhdGFiYXNlOiBzdHJpbmdcbiAgcmVwYWlyRW5jb2Rpbmc6IGJvb2xlYW5cbiAgcmVwYWlyWmlwPzogKGRhdGFzZXQ6IERhdGFzZXQsIGRhdGFEaXI6IHN0cmluZykgPT4gdm9pZFxuICBzY2hlbWE6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIHVybDogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YXNldHMge1xuICBhbWVsaTogRGF0YXNldFxuICBkZWJhdHM6IERhdGFzZXRcbiAgZG9zbGVnOiBEYXRhc2V0XG4gIHF1ZXN0aW9uczogRGF0YXNldFxuICBzZW5zOiBEYXRhc2V0XG59XG5cbmV4cG9ydCBlbnVtIEVuYWJsZWREYXRhc2V0cyB7XG4gIE5vbmUgPSAwLFxuICBBbWVsaSA9IDEgPDwgMCxcbiAgRGViYXRzID0gMSA8PCAxLFxuICBEb3NMZWcgPSAxIDw8IDIsXG4gIFF1ZXN0aW9ucyA9IDEgPDwgMyxcbiAgU2VucyA9IDEgPDwgNCxcbiAgUGhvdG9zU2VuYXRldXJzID0gMSA8PCA1LFxuICBBbGwgPSBBbWVsaSB8IERlYmF0cyB8IERvc0xlZyB8IFF1ZXN0aW9ucyB8IFNlbnMgfCBQaG90b3NTZW5hdGV1cnMsXG59XG5cbmV4cG9ydCBjb25zdCBkYXRhc2V0czogRGF0YXNldHMgPSB7XG4gIGFtZWxpOiB7XG4gICAgZGF0YWJhc2U6IFwiYW1lbGlcIixcbiAgICByZXBhaXJFbmNvZGluZzogZmFsc2UsXG4gICAgcmVwYWlyWmlwOiAoZGF0YXNldDogRGF0YXNldCwgZGF0YURpcjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzcWxGaWxlbmFtZSA9IGAke2RhdGFzZXQuZGF0YWJhc2V9LnNxbGBcbiAgICAgIGNvbnN0IHNxbEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFEaXIsIHNxbEZpbGVuYW1lKVxuICAgICAgZnMucmVtb3ZlU3luYyhzcWxGaWxlUGF0aClcbiAgICAgIGZzLm1vdmVTeW5jKFxuICAgICAgICBwYXRoLmpvaW4oZGF0YURpciwgXCJ2YXJcIiwgXCJvcHRcIiwgXCJvcGVuZGF0YVwiLCBzcWxGaWxlbmFtZSksXG4gICAgICAgIHNxbEZpbGVQYXRoLFxuICAgICAgKVxuICAgIH0sXG4gICAgc2NoZW1hOiBcInB1YmxpY1wiLFxuICAgIHRpdGxlOiBcIkFtZW5kZW1lbnRzXCIsXG4gICAgdXJsOiBcImh0dHBzOi8vZGF0YS5zZW5hdC5mci9kYXRhL2FtZWxpL2FtZWxpLnppcFwiLFxuICB9LFxuICBkZWJhdHM6IHtcbiAgICBkYXRhYmFzZTogXCJkZWJhdHNcIixcbiAgICByZXBhaXJFbmNvZGluZzogdHJ1ZSxcbiAgICBzY2hlbWE6IFwicHVibGljXCIsXG4gICAgdGl0bGU6XG4gICAgICBcIkluZm9ybWF0aW9ucyByZWxhdGl2ZXMgYXV4IGNvbXB0ZXMgcmVuZHVzIGludMOpZ3JhdXggZGUgbGEgc8OpYW5jZSBwdWJsaXF1ZVwiLFxuICAgIHVybDogXCJodHRwczovL2RhdGEuc2VuYXQuZnIvZGF0YS9kZWJhdHMvZGViYXRzLnppcFwiLFxuICB9LFxuICBkb3NsZWc6IHtcbiAgICBkYXRhYmFzZTogXCJkb3NsZWdcIixcbiAgICByZXBhaXJFbmNvZGluZzogdHJ1ZSxcbiAgICBzY2hlbWE6IFwicHVibGljXCIsXG4gICAgdGl0bGU6IFwiRG9zc2llcnMgbMOpZ2lzbGF0aWZzXCIsXG4gICAgdXJsOiBcImh0dHBzOi8vZGF0YS5zZW5hdC5mci9kYXRhL2Rvc2xlZy9kb3NsZWcuemlwXCIsXG4gIH0sXG4gIHF1ZXN0aW9uczoge1xuICAgIGRhdGFiYXNlOiBcInF1ZXN0aW9uc1wiLFxuICAgIHJlcGFpckVuY29kaW5nOiB0cnVlLFxuICAgIHNjaGVtYTogXCJxdWVzdGlvbnNcIixcbiAgICB0aXRsZTpcbiAgICAgIFwiUXVlc3Rpb25zIMOpY3JpdGVzIGV0IG9yYWxlcyBwb3PDqWVzIHBhciBsZXMgc8OpbmF0ZXVycyBhdSBHb3V2ZXJuZW1lbnRcIixcbiAgICB1cmw6IFwiaHR0cHM6Ly9kYXRhLnNlbmF0LmZyL2RhdGEvcXVlc3Rpb25zL3F1ZXN0aW9ucy56aXBcIixcbiAgfSxcbiAgc2Vuczoge1xuICAgIGRhdGFiYXNlOiBcInNlbnNcIixcbiAgICByZXBhaXJFbmNvZGluZzogdHJ1ZSxcbiAgICByZXBhaXJaaXA6IChkYXRhc2V0OiBEYXRhc2V0LCBkYXRhRGlyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNxbEZpbGVuYW1lID0gYCR7ZGF0YXNldC5kYXRhYmFzZX0uc3FsYFxuICAgICAgY29uc3Qgc3FsRmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YURpciwgc3FsRmlsZW5hbWUpXG4gICAgICBmcy5yZW1vdmVTeW5jKHNxbEZpbGVQYXRoKVxuICAgICAgZnMubW92ZVN5bmMocGF0aC5qb2luKGRhdGFEaXIsIFwiZXhwb3J0X3NlbnMuc3FsXCIpLCBzcWxGaWxlUGF0aClcbiAgICB9LFxuICAgIHNjaGVtYTogXCJwdWJsaWNcIixcbiAgICB0aXRsZTogXCJTw6luYXRldXJzICh5IGNvbXByaXMgb3JnYW5lcyBldCBwcsOpc2VuY2UpXCIsXG4gICAgdXJsOiBcImh0dHBzOi8vZGF0YS5zZW5hdC5mci9kYXRhL3NlbmF0ZXVycy9leHBvcnRfc2Vucy56aXBcIixcbiAgfSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVuYWJsZWREYXRhc2V0cyhjYXRlZ29yaWVzOiBhbnkpOiBFbmFibGVkRGF0YXNldHMge1xuICBjYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuXG4gIHJldHVybiBjYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaG9zZW5Gcm9tRW5hYmxlZERhdGFzZXRzKGNhdGVnb3JpZXM6IGFueSk6IERhdGFzZXRbXSB7XG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IGdldEVuYWJsZWREYXRhc2V0cyhjYXRlZ29yaWVzKVxuICByZXR1cm4gIFtcbiAgICBlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbGkgPyBkYXRhc2V0cy5hbWVsaSA6IG51bGwsXG4gICAgZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRlYmF0cyA/IGRhdGFzZXRzLmRlYmF0cyA6IG51bGwsXG4gICAgZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc0xlZyA/IGRhdGFzZXRzLmRvc2xlZyA6IG51bGwsXG4gICAgZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucyA/IGRhdGFzZXRzLnF1ZXN0aW9ucyA6IG51bGwsXG4gICAgZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNlbnMgPyBkYXRhc2V0cy5zZW5zIDogbnVsbCxcbiAgXS5maWx0ZXIoKGRhdGFzZXQ6IERhdGFzZXQgfCBudWxsKSA9PiBkYXRhc2V0ICE9PSBudWxsKSBhcyBEYXRhc2V0W11cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFBMkIsU0FBQUQsdUJBQUFJLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUFBLElBbUJmRSxlQUFlLEdBQUFDLE9B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
|
package/lib/datasets.mjs
CHANGED
|
@@ -66,3 +66,13 @@ export function getEnabledDatasets(categories) {
|
|
|
66
66
|
return categories.reduce((enabledDatasets, datasetName) => enabledDatasets |
|
|
67
67
|
EnabledDatasets[datasetName], EnabledDatasets.None);
|
|
68
68
|
}
|
|
69
|
+
export function getChosenFromEnabledDatasets(categories) {
|
|
70
|
+
const enabledDatasets = getEnabledDatasets(categories);
|
|
71
|
+
return [
|
|
72
|
+
enabledDatasets & EnabledDatasets.Ameli ? datasets.ameli : null,
|
|
73
|
+
enabledDatasets & EnabledDatasets.Debats ? datasets.debats : null,
|
|
74
|
+
enabledDatasets & EnabledDatasets.DosLeg ? datasets.dosleg : null,
|
|
75
|
+
enabledDatasets & EnabledDatasets.Questions ? datasets.questions : null,
|
|
76
|
+
enabledDatasets & EnabledDatasets.Sens ? datasets.sens : null,
|
|
77
|
+
].filter((dataset) => dataset !== null);
|
|
78
|
+
}
|
package/lib/datasets.ts
CHANGED
|
@@ -105,3 +105,14 @@ export function getEnabledDatasets(categories: any): EnabledDatasets {
|
|
|
105
105
|
EnabledDatasets.None,
|
|
106
106
|
)
|
|
107
107
|
}
|
|
108
|
+
|
|
109
|
+
export function getChosenFromEnabledDatasets(categories: any): Dataset[] {
|
|
110
|
+
const enabledDatasets = getEnabledDatasets(categories)
|
|
111
|
+
return [
|
|
112
|
+
enabledDatasets & EnabledDatasets.Ameli ? datasets.ameli : null,
|
|
113
|
+
enabledDatasets & EnabledDatasets.Debats ? datasets.debats : null,
|
|
114
|
+
enabledDatasets & EnabledDatasets.DosLeg ? datasets.dosleg : null,
|
|
115
|
+
enabledDatasets & EnabledDatasets.Questions ? datasets.questions : null,
|
|
116
|
+
enabledDatasets & EnabledDatasets.Sens ? datasets.sens : null,
|
|
117
|
+
].filter((dataset: Dataset | null) => dataset !== null) as Dataset[]
|
|
118
|
+
}
|
package/lib/inserters.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { TxtAmeli } from "./types/ameli";
|
|
2
2
|
import { Debat } from "./types/debats";
|
|
3
3
|
import { Ass, Aud, Auteur, DateSeance, DecCoc, DenRap, DocAtt, Ecr, EtaLoi, LecAss, LecAssRap, Lecture, Loi, Org, OriTxt, Qua, Rap, Scr, Texte, TypAtt, TypLec, TypLoi, TypTxt, TypUrl } from "./types/dosleg";
|
|
4
|
+
import { Question } from "./types/questions";
|
|
5
|
+
import { Sen } from "./types/sens";
|
|
4
6
|
export interface OutputData {
|
|
5
7
|
readonly ass?: {
|
|
6
8
|
[id: string]: Ass;
|
|
@@ -87,12 +89,14 @@ type VisitedIdsByTableName = {
|
|
|
87
89
|
export declare function insertAudReferences(aud: Aud, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Aud;
|
|
88
90
|
export declare function insertAuteurReferences(auteur: Auteur, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Auteur;
|
|
89
91
|
export declare function insertDateSeanceReferences(dateSeance: DateSeance, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): DateSeance;
|
|
90
|
-
export declare function insertDocAttReferences(docatt: DocAtt, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): DocAtt;
|
|
92
|
+
export declare function insertDocAttReferences(docatt: DocAtt, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName, performInsertRapReferences?: boolean): DocAtt;
|
|
91
93
|
export declare function insertEcrReferences(ecr: Ecr, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Ecr;
|
|
92
94
|
export declare function insertLecassrapReferences(lecassrap: LecAssRap, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): LecAssRap;
|
|
93
95
|
export declare function insertLecassReferences(lecass: LecAss, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): LecAss;
|
|
94
96
|
export declare function insertLectureReferences(lecture: Lecture, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Lecture;
|
|
95
97
|
export declare function insertLoiReferences(loi: Loi, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Loi;
|
|
98
|
+
export declare function insertQuestionReferences(question: Question, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Question;
|
|
96
99
|
export declare function insertRapReferences(rap: Rap, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Rap;
|
|
100
|
+
export declare function insertSenReferences(sen: Sen, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Sen;
|
|
97
101
|
export declare function insertTexteReferences(texte: Texte, data: OutputData, visitedIdsByTableName: VisitedIdsByTableName): Texte;
|
|
98
102
|
export {};
|
package/lib/inserters.js
CHANGED
|
@@ -22,7 +22,9 @@ exports.insertLecassReferences = insertLecassReferences;
|
|
|
22
22
|
exports.insertLecassrapReferences = insertLecassrapReferences;
|
|
23
23
|
exports.insertLectureReferences = insertLectureReferences;
|
|
24
24
|
exports.insertLoiReferences = insertLoiReferences;
|
|
25
|
+
exports.insertQuestionReferences = insertQuestionReferences;
|
|
25
26
|
exports.insertRapReferences = insertRapReferences;
|
|
27
|
+
exports.insertSenReferences = insertSenReferences;
|
|
26
28
|
exports.insertTexteReferences = insertTexteReferences;
|
|
27
29
|
require("core-js/modules/es.array.concat.js");
|
|
28
30
|
require("core-js/modules/es.array.iterator.js");
|
|
@@ -111,13 +113,14 @@ function insertDateSeanceReferences(dateSeance, data, visitedIdsByTableName) {
|
|
|
111
113
|
return dateSeance;
|
|
112
114
|
}
|
|
113
115
|
function insertDocAttReferences(docatt, data, visitedIdsByTableName) {
|
|
116
|
+
var performInsertRapReferences = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
|
|
114
117
|
var visitedIds = visitedIdsByTableName.docatt;
|
|
115
118
|
if (visitedIds === undefined) {
|
|
116
119
|
visitedIds = visitedIdsByTableName.docatt = new Set();
|
|
117
120
|
}
|
|
118
121
|
if (!visitedIds.has(docatt.docattcle)) {
|
|
119
122
|
visitedIds.add(docatt.docattcle);
|
|
120
|
-
if (docatt.rapcod !== null && data.rap !== undefined) {
|
|
123
|
+
if (performInsertRapReferences && docatt.rapcod !== null && data.rap !== undefined) {
|
|
121
124
|
var rap = data.rap[docatt.rapcod];
|
|
122
125
|
if (rap !== undefined) {
|
|
123
126
|
docatt.rap = rap;
|
|
@@ -357,6 +360,14 @@ function insertLoiReferences(loi, data, visitedIdsByTableName) {
|
|
|
357
360
|
}
|
|
358
361
|
return loi;
|
|
359
362
|
}
|
|
363
|
+
function insertQuestionReferences(question,
|
|
364
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
365
|
+
data,
|
|
366
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
367
|
+
visitedIdsByTableName) {
|
|
368
|
+
// TODO
|
|
369
|
+
return question;
|
|
370
|
+
}
|
|
360
371
|
function insertRapReferences(rap, data, visitedIdsByTableName) {
|
|
361
372
|
var visitedIds = visitedIdsByTableName.rap;
|
|
362
373
|
if (visitedIds === undefined) {
|
|
@@ -381,7 +392,7 @@ function insertRapReferences(rap, data, visitedIdsByTableName) {
|
|
|
381
392
|
var docatt = data.docatt[docattcle];
|
|
382
393
|
if (docatt !== undefined) {
|
|
383
394
|
rap.docatts.push(docatt);
|
|
384
|
-
insertDocAttReferences(docatt, data, visitedIdsByTableName);
|
|
395
|
+
insertDocAttReferences(docatt, data, visitedIdsByTableName, false);
|
|
385
396
|
}
|
|
386
397
|
}
|
|
387
398
|
} catch (err) {
|
|
@@ -431,6 +442,14 @@ function insertRapReferences(rap, data, visitedIdsByTableName) {
|
|
|
431
442
|
}
|
|
432
443
|
return rap;
|
|
433
444
|
}
|
|
445
|
+
function insertSenReferences(sen,
|
|
446
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
447
|
+
data,
|
|
448
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
449
|
+
visitedIdsByTableName) {
|
|
450
|
+
// TODO
|
|
451
|
+
return sen;
|
|
452
|
+
}
|
|
434
453
|
function insertTexteReferences(texte, data, visitedIdsByTableName) {
|
|
435
454
|
var visitedIds = visitedIdsByTableName.texte;
|
|
436
455
|
if (visitedIds === undefined) {
|
|
@@ -496,4 +515,4 @@ function insertTexteReferences(texte, data, visitedIdsByTableName) {
|
|
|
496
515
|
}
|
|
497
516
|
return texte;
|
|
498
517
|
}
|
|
499
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBdWRSZWZlcmVuY2VzIiwiYXVkIiwiZGF0YSIsInZpc2l0ZWRJZHNCeVRhYmxlTmFtZSIsInZpc2l0ZWRJZHMiLCJ1bmRlZmluZWQiLCJTZXQiLCJoYXMiLCJhdWRjbGUiLCJhZGQiLCJvcmdjb2QiLCJvcmciLCJpbnNlcnRBdXRldXJSZWZlcmVuY2VzIiwiYXV0ZXVyIiwiYXV0Y29kIiwicXVhIiwicXVhY29kIiwiaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMiLCJkYXRlU2VhbmNlIiwiZGF0ZV9zZWFuY2UiLCJjb2RlIiwiZGF0ZV9zIiwiZGViYXRzIiwiZGF0ZVN0cmluZyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImRlYmF0Iiwic2NycyIsInNjcmlkcyIsInNjciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJzY3JpZCIsInZhbHVlIiwicHVzaCIsImVyciIsImUiLCJmIiwiaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyIsImRvY2F0dCIsImRvY2F0dGNsZSIsInJhcGNvZCIsInJhcCIsImluc2VydFJhcFJlZmVyZW5jZXMiLCJ0eXBhdHRjb2QiLCJ0eXBhdHQiLCJpbnNlcnRFY3JSZWZlcmVuY2VzIiwiZWNyIiwiZWNybnVtIiwiYXV0IiwiaW5zZXJ0TGVjYXNzcmFwUmVmZXJlbmNlcyIsImxlY2Fzc3JhcCIsImxlY2FzcmFwaWQiLCJjb25jYXQiLCJsZWNhc3NpZHQiLCJpbnNlcnRMZWNhc3NSZWZlcmVuY2VzIiwibGVjYXNzIiwiY29kYXNzIiwiYXNzIiwiYXVkcyIsImF1ZGNsZXMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiZGF0ZXNTZWFuY2VzIiwiZGF0ZXNTZWFuY2VzQ29kZXMiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZGF0ZVNlYW5jZUNvZGUiLCJsZWNhc3NyYXBzIiwibGVjYXNzcmFwaWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImxlY2Fzc3JhcGlkIiwidGV4dGVzIiwidGV4Y29kcyIsInRleHRlIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsInRleGNvZCIsImluc2VydFRleHRlUmVmZXJlbmNlcyIsImluc2VydExlY3R1cmVSZWZlcmVuY2VzIiwibGVjdHVyZSIsImxlY2lkdCIsInR5cGxlY2NvZCIsInR5cGxlYyIsImxlY2Fzc3MiLCJsZWNhc3NpZHRzIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsImluc2VydExvaVJlZmVyZW5jZXMiLCJsb2kiLCJsb2ljb2QiLCJ0eXBsb2ljb2QiLCJ0eXBsb2kiLCJldGFsb2ljb2QiLCJldGFsb2kiLCJkZWNjb2Njb2QiLCJkZWNjb2MiLCJsZWN0dXJlcyIsImxlY2lkdHMiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiY29kZGVucmFwIiwiZGVucmFwIiwiZG9jYXR0cyIsImRvY2F0dGNsZXMiLCJfaXRlcmF0b3I4IiwiX3N0ZXA4IiwiZWNycyIsImVjcm51bXMiLCJfaXRlcmF0b3I5IiwiX3N0ZXA5Iiwib3JncyIsIm9yZ2NvZHMiLCJfaXRlcmF0b3IxMCIsIl9zdGVwMTAiLCJfaXRlcmF0b3IxMSIsIl9zdGVwMTEiLCJvcml0eHRjb2QiLCJvcml0eHQiLCJ0eHRBbWVsaUlkIiwidHh0X2FtZWxpIiwidHh0QW1lbGkiLCJ0eXB0eHRjb2QiLCJ0eXB0eHQiLCJ0eXB1cmwiLCJsaWJ0eXB1cmwiXSwic291cmNlcyI6WyIuLi9zcmMvaW5zZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR4dEFtZWxpIH0gZnJvbSBcIi4vdHlwZXMvYW1lbGlcIlxuaW1wb3J0IHsgRGViYXQgfSBmcm9tIFwiLi90eXBlcy9kZWJhdHNcIlxuaW1wb3J0IHtcbiAgQXNzLFxuICBBdWQsXG4gIEF1dGV1cixcbiAgRGF0ZVNlYW5jZSxcbiAgRGVjQ29jLFxuICBEZW5SYXAsXG4gIERvY0F0dCxcbiAgRWNyLFxuICBFdGFMb2ksXG4gIExlY0FzcyxcbiAgTGVjQXNzUmFwLFxuICBMZWN0dXJlLFxuICBMb2ksXG4gIE9yZyxcbiAgT3JpVHh0LFxuICBRdWEsXG4gIFJhcCxcbiAgU2NyLFxuICBUZXh0ZSxcbiAgVHlwQXR0LFxuICBUeXBMZWMsXG4gIFR5cExvaSxcbiAgVHlwVHh0LFxuICBUeXBVcmwsXG59IGZyb20gXCIuL3R5cGVzL2Rvc2xlZ1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0RGF0YSB7XG4gIHJlYWRvbmx5IGFzcz86IHsgW2lkOiBzdHJpbmddOiBBc3MgfVxuICByZWFkb25seSBhdWQ/OiB7IFtpZDogc3RyaW5nXTogQXVkIH1cbiAgcmVhZG9ubHkgYXV0ZXVyPzogeyBbaWQ6IHN0cmluZ106IEF1dGV1ciB9XG4gIHJlYWRvbmx5IGRhdGVfc2VhbmNlPzogeyBbaWQ6IHN0cmluZ106IERhdGVTZWFuY2UgfVxuICByZWFkb25seSBkZWJhdHM/OiB7IFtpZDogc3RyaW5nXTogRGViYXQgfVxuICByZWFkb25seSBkZWNjb2M/OiB7IFtpZDogc3RyaW5nXTogRGVjQ29jIH1cbiAgcmVhZG9ubHkgZGVucmFwPzogeyBbaWQ6IHN0cmluZ106IERlblJhcCB9XG4gIHJlYWRvbmx5IGRvY2F0dD86IHsgW2lkOiBzdHJpbmddOiBEb2NBdHQgfVxuICByZWFkb25seSBlY3I/OiB7IFtpZDogc3RyaW5nXTogRWNyIH1cbiAgcmVhZG9ubHkgZXRhbG9pPzogeyBbaWQ6IHN0cmluZ106IEV0YUxvaSB9XG4gIHJlYWRvbmx5IGxlY2Fzcz86IHsgW2lkOiBzdHJpbmddOiBMZWNBc3MgfVxuICByZWFkb25seSBsZWNhc3NyYXA/OiB7IFtpZDogc3RyaW5nXTogTGVjQXNzUmFwIH1cbiAgcmVhZG9ubHkgbGVjdHVyZT86IHsgW2lkOiBzdHJpbmddOiBMZWN0dXJlIH1cbiAgcmVhZG9ubHkgbG9pPzogeyBbaWQ6IHN0cmluZ106IExvaSB9XG4gIHJlYWRvbmx5IG9yZz86IHsgW2lkOiBzdHJpbmddOiBPcmcgfVxuICByZWFkb25seSBvcml0eHQ/OiB7IFtpZDogc3RyaW5nXTogT3JpVHh0IH1cbiAgcmVhZG9ubHkgcXVhPzogeyBbaWQ6IHN0cmluZ106IFF1YSB9XG4gIHJlYWRvbmx5IHJhcD86IHsgW2lkOiBzdHJpbmddOiBSYXAgfVxuICByZWFkb25seSBzY3I/OiB7IFtpZDogc3RyaW5nXTogU2NyIH1cbiAgcmVhZG9ubHkgdGV4dGU/OiB7IFtpZDogc3RyaW5nXTogVGV4dGUgfVxuICByZWFkb25seSB0eXBhdHQ/OiB7IFtpZDogc3RyaW5nXTogVHlwQXR0IH1cbiAgcmVhZG9ubHkgdHlwbGVjPzogeyBbaWQ6IHN0cmluZ106IFR5cExlYyB9XG4gIHJlYWRvbmx5IHR5cGxvaT86IHsgW2lkOiBzdHJpbmddOiBUeXBMb2kgfVxuICByZWFkb25seSB0eXB0eHQ/OiB7IFtpZDogc3RyaW5nXTogVHlwVHh0IH1cbiAgcmVhZG9ubHkgdHlwdXJsPzogeyBbaWQ6IHN0cmluZ106IFR5cFVybCB9XG4gIHJlYWRvbmx5IHR4dF9hbWVsaT86IHsgW2lkOiBzdHJpbmddOiBUeHRBbWVsaSB9XG59XG5cbnR5cGUgVmlzaXRlZElkc0J5VGFibGVOYW1lID0geyBbdGFibGVOYW1lOiBzdHJpbmddOiBTZXQ8bnVtYmVyIHwgc3RyaW5nPiB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRBdWRSZWZlcmVuY2VzKFxuICBhdWQ6IEF1ZCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuYXVkXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmF1ZCA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMoYXVkLmF1ZGNsZSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChhdWQuYXVkY2xlKVxuXG4gICAgaWYgKGF1ZC5vcmdjb2QgIT09IG51bGwgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbYXVkLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdWQub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGF1ZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QXV0ZXVyUmVmZXJlbmNlcyhcbiAgYXV0ZXVyOiBBdXRldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmF1dGV1clxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5hdXRldXIgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGF1dGV1ci5hdXRjb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQoYXV0ZXVyLmF1dGNvZClcblxuICAgIGlmIChkYXRhLnF1YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBxdWEgPSBkYXRhLnF1YVthdXRldXIucXVhY29kXVxuICAgICAgaWYgKHF1YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5xdWEgPSBxdWFcbiAgICAgICAgLy8gaW5zZXJ0UXVhUmVmZXJlbmNlcyhxdWEsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPXG4gIH1cblxuICByZXR1cm4gYXV0ZXVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnREYXRlU2VhbmNlUmVmZXJlbmNlcyhcbiAgZGF0ZVNlYW5jZTogRGF0ZVNlYW5jZSxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZGF0ZV9zZWFuY2VcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZGF0ZV9zZWFuY2UgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGRhdGVTZWFuY2UuY29kZSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChkYXRlU2VhbmNlLmNvZGUpXG5cbiAgICBpZiAoZGF0ZVNlYW5jZS5kYXRlX3MgIT09IG51bGwgJiYgZGF0YS5kZWJhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9XG4gICAgICAgIGRhdGVTZWFuY2UuZGF0ZV9zIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgID8gZGF0ZVNlYW5jZS5kYXRlX3MudG9JU09TdHJpbmcoKVxuICAgICAgICAgIDogZGF0ZVNlYW5jZS5kYXRlX3NcbiAgICAgIGNvbnN0IGRlYmF0ID0gZGF0YS5kZWJhdHNbZGF0ZVN0cmluZ11cbiAgICAgIGlmIChkZWJhdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRhdGVTZWFuY2UuZGViYXQgPSBkZWJhdFxuICAgICAgICAvLyBpbnNlcnREZWJhdFJlZmVyZW5jZXMoZGViYXQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRlU2VhbmNlLnNjcnMgPSBbXVxuICAgIGlmIChkYXRlU2VhbmNlLnNjcmlkcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuc2NyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3Qgc2NyaWQgb2YgZGF0ZVNlYW5jZS5zY3JpZHMpIHtcbiAgICAgICAgY29uc3Qgc2NyID0gZGF0YS5zY3Jbc2NyaWRdXG4gICAgICAgIGlmIChzY3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRhdGVTZWFuY2Uuc2Nycy5wdXNoKHNjcilcbiAgICAgICAgICAvLyBpbnNlcnRTY3JSZWZlcmVuY2VzKHNjciwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGVTZWFuY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydERvY0F0dFJlZmVyZW5jZXMoXG4gIGRvY2F0dDogRG9jQXR0LFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5kb2NhdHRcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZG9jYXR0ID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhkb2NhdHQuZG9jYXR0Y2xlKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGRvY2F0dC5kb2NhdHRjbGUpXG5cbiAgICBpZiAoZG9jYXR0LnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtkb2NhdHQucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9jYXR0LnR5cGF0dGNvZCAhPT0gbnVsbCAmJiBkYXRhLnR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXBhdHQgPSBkYXRhLnR5cGF0dFtkb2NhdHQudHlwYXR0Y29kXVxuICAgICAgaWYgKHR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC50eXBhdHQgPSB0eXBhdHRcbiAgICAgICAgLy8gaW5zZXJ0VHlwQXR0UmVmZXJlbmNlcyh0eXBhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9jYXR0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRFY3JSZWZlcmVuY2VzKFxuICBlY3I6IEVjcixcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZWNyXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmVjciA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMoZWNyLmVjcm51bSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChlY3IuZWNybnVtKVxuXG4gICAgaWYgKGVjci5hdXRjb2QgIT09IG51bGwgJiYgZGF0YS5hdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXV0ID0gZGF0YS5hdXRldXJbZWNyLmF1dGNvZF1cbiAgICAgIGlmIChhdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlY3IuYXV0ID0gYXV0XG4gICAgICAgIGluc2VydEF1dGV1clJlZmVyZW5jZXMoYXV0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGVjclxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGVjYXNzcmFwUmVmZXJlbmNlcyhcbiAgbGVjYXNzcmFwOiBMZWNBc3NSYXAsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2Fzc3JhcFxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWNhc3NyYXAgPSBuZXcgU2V0KClcbiAgfVxuICBjb25zdCBsZWNhc3JhcGlkID0gYCR7bGVjYXNzcmFwLmxlY2Fzc2lkdH0gJHtsZWNhc3NyYXAucmFwY29kfWBcbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhsZWNhc3JhcGlkKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY2FzcmFwaWQpXG5cbiAgICBpZiAobGVjYXNzcmFwLnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtsZWNhc3NyYXAucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY2Fzc3JhcC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjYXNzcmFwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMZWNhc3NSZWZlcmVuY2VzKFxuICBsZWNhc3M6IExlY0FzcyxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUubGVjYXNzXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2FzcyA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMobGVjYXNzLmxlY2Fzc2lkdCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChsZWNhc3MubGVjYXNzaWR0KVxuXG4gICAgaWYgKGxlY2Fzcy5jb2Rhc3MgIT09IG51bGwgJiYgZGF0YS5hc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXNzID0gZGF0YS5hc3NbbGVjYXNzLmNvZGFzc11cbiAgICAgIGlmIChhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3MuYXNzID0gYXNzXG4gICAgICAgIC8vIGluc2VydEFzc1JlZmVyZW5jZXMoYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxlY2Fzcy5vcmdjb2QgIT09IG51bGwgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbbGVjYXNzLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3Mub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmF1ZHMgPSBbXVxuICAgIGlmIChsZWNhc3MuYXVkY2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuYXVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgYXVkY2xlIG9mIGxlY2Fzcy5hdWRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGF1ZCA9IGRhdGEuYXVkW2F1ZGNsZV1cbiAgICAgICAgaWYgKGF1ZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmF1ZHMucHVzaChhdWQpXG4gICAgICAgICAgaW5zZXJ0QXVkUmVmZXJlbmNlcyhhdWQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxlY2Fzcy5kYXRlc1NlYW5jZXMgPSBbXVxuICAgIGlmIChsZWNhc3MuZGF0ZXNTZWFuY2VzQ29kZXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmRhdGVfc2VhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZGF0ZVNlYW5jZUNvZGUgb2YgbGVjYXNzLmRhdGVzU2VhbmNlc0NvZGVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGVTZWFuY2UgPSBkYXRhLmRhdGVfc2VhbmNlW2RhdGVTZWFuY2VDb2RlXVxuICAgICAgICBpZiAoZGF0ZVNlYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmRhdGVzU2VhbmNlcy5wdXNoKGRhdGVTZWFuY2UpXG4gICAgICAgICAgaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMoZGF0ZVNlYW5jZSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmxlY2Fzc3JhcHMgPSBbXVxuICAgIGlmIChsZWNhc3MubGVjYXNzcmFwaWRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3NyYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NyYXBpZCBvZiBsZWNhc3MubGVjYXNzcmFwaWRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2Fzc3JhcCA9IGRhdGEubGVjYXNzcmFwW2xlY2Fzc3JhcGlkXVxuICAgICAgICBpZiAobGVjYXNzcmFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZWNhc3MubGVjYXNzcmFwcy5wdXNoKGxlY2Fzc3JhcClcbiAgICAgICAgICBpbnNlcnRMZWNhc3NyYXBSZWZlcmVuY2VzKGxlY2Fzc3JhcCwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLnRleHRlcyA9IFtdXG4gICAgaWYgKGxlY2Fzcy50ZXhjb2RzICE9PSB1bmRlZmluZWQgJiYgZGF0YS50ZXh0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHRleGNvZCBvZiBsZWNhc3MudGV4Y29kcykge1xuICAgICAgICBjb25zdCB0ZXh0ZSA9IGRhdGEudGV4dGVbdGV4Y29kXVxuICAgICAgICBpZiAodGV4dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxlY2Fzcy50ZXh0ZXMucHVzaCh0ZXh0ZSlcbiAgICAgICAgICBpbnNlcnRUZXh0ZVJlZmVyZW5jZXModGV4dGUsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWNhc3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExlY3R1cmVSZWZlcmVuY2VzKFxuICBsZWN0dXJlOiBMZWN0dXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWN0dXJlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY3R1cmUgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxlY3R1cmUubGVjaWR0KSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY3R1cmUubGVjaWR0KVxuXG4gICAgaWYgKGxlY3R1cmUudHlwbGVjY29kICE9PSBudWxsICYmIGRhdGEudHlwbGVjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxlYyA9IGRhdGEudHlwbGVjW2xlY3R1cmUudHlwbGVjY29kXVxuICAgICAgaWYgKHR5cGxlYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY3R1cmUudHlwbGVjID0gdHlwbGVjXG4gICAgICAgIC8vIGluc2VydFR5cGxlY1JlZmVyZW5jZXModHlwbGVjLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjdHVyZS5sZWNhc3NzID0gW11cbiAgICBpZiAobGVjdHVyZS5sZWNhc3NpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NpZHQgb2YgbGVjdHVyZS5sZWNhc3NpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2FzcyA9IGRhdGEubGVjYXNzW2xlY2Fzc2lkdF1cbiAgICAgICAgaWYgKGxlY2FzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjdHVyZS5sZWNhc3NzLnB1c2gobGVjYXNzKVxuICAgICAgICAgIGluc2VydExlY2Fzc1JlZmVyZW5jZXMobGVjYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjdHVyZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TG9pUmVmZXJlbmNlcyhcbiAgbG9pOiBMb2ksXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxvaVxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sb2kgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxvaS5sb2ljb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQobG9pLmxvaWNvZClcblxuICAgIGlmIChsb2kudHlwbG9pY29kICE9PSBudWxsICYmIGRhdGEudHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxvaSA9IGRhdGEudHlwbG9pW2xvaS50eXBsb2ljb2RdXG4gICAgICBpZiAodHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLnR5cGxvaSA9IHR5cGxvaVxuICAgICAgICAvLyBpbnNlcnRUeXBsb2lSZWZlcmVuY2VzKHR5cGxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZXRhbG9pY29kICE9PSBudWxsICYmIGRhdGEuZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGV0YWxvaSA9IGRhdGEuZXRhbG9pW2xvaS5ldGFsb2ljb2RdXG4gICAgICBpZiAoZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmV0YWxvaSA9IGV0YWxvaVxuICAgICAgICAvLyBpbnNlcnRFdGFsb2lSZWZlcmVuY2VzKGV0YWxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZGVjY29jY29kICE9PSBudWxsICYmIGRhdGEuZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRlY2NvYyA9IGRhdGEuZGVjY29jW2xvaS5kZWNjb2Njb2RdXG4gICAgICBpZiAoZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmRlY2NvYyA9IGRlY2NvY1xuICAgICAgICAvLyBpbnNlcnREZWNjb2NSZWZlcmVuY2VzKGRlY2NvYywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxvaS5sZWN0dXJlcyA9IFtdXG4gICAgaWYgKGxvaS5sZWNpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWN0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbGVjaWR0IG9mIGxvaS5sZWNpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY3R1cmUgPSBkYXRhLmxlY3R1cmVbbGVjaWR0XVxuICAgICAgICBpZiAobGVjdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbG9pLmxlY3R1cmVzLnB1c2gobGVjdHVyZSlcbiAgICAgICAgICBpbnNlcnRMZWN0dXJlUmVmZXJlbmNlcyhsZWN0dXJlLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRSYXBSZWZlcmVuY2VzKFxuICByYXA6IFJhcCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUucmFwXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnJhcCA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMocmFwLnJhcGNvZCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChyYXAucmFwY29kKVxuXG4gICAgaWYgKHJhcC5jb2RkZW5yYXAgIT09IG51bGwgJiYgZGF0YS5kZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGVucmFwID0gZGF0YS5kZW5yYXBbcmFwLmNvZGRlbnJhcF1cbiAgICAgIGlmIChkZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByYXAuZGVucmFwID0gZGVucmFwXG4gICAgICAgIC8vIGluc2VydERlbnJhcFJlZmVyZW5jZXMoZGVucmFwLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmFwLmRvY2F0dHMgPSBbXVxuICAgIGlmIChyYXAuZG9jYXR0Y2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZG9jYXR0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZG9jYXR0Y2xlIG9mIHJhcC5kb2NhdHRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGRvY2F0dCA9IGRhdGEuZG9jYXR0W2RvY2F0dGNsZV1cbiAgICAgICAgaWYgKGRvY2F0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwLmRvY2F0dHMucHVzaChkb2NhdHQpXG4gICAgICAgICAgaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyhkb2NhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJhcC5lY3JzID0gW11cbiAgICBpZiAocmFwLmVjcm51bXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGVjcm51bSBvZiByYXAuZWNybnVtcykge1xuICAgICAgICBjb25zdCBlY3IgPSBkYXRhLmVjcltlY3JudW1dXG4gICAgICAgIGlmIChlY3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJhcC5lY3JzLnB1c2goZWNyKVxuICAgICAgICAgIGluc2VydEVjclJlZmVyZW5jZXMoZWNyLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByYXAub3JncyA9IFtdXG4gICAgaWYgKHJhcC5vcmdjb2RzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBvcmdjb2Qgb2YgcmFwLm9yZ2NvZHMpIHtcbiAgICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbb3JnY29kXVxuICAgICAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByYXAub3Jncy5wdXNoKG9yZylcbiAgICAgICAgICAvLyBpbnNlcnRPcmdSZWZlcmVuY2VzKG9yZywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJhcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0VGV4dGVSZWZlcmVuY2VzKFxuICB0ZXh0ZTogVGV4dGUsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnRleHRlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnRleHRlID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyh0ZXh0ZS50ZXhjb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQodGV4dGUudGV4Y29kKVxuXG4gICAgdGV4dGUuZWNycyA9IFtdXG4gICAgaWYgKHRleHRlLmVjcm51bXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGVjcm51bSBvZiB0ZXh0ZS5lY3JudW1zKSB7XG4gICAgICAgIGNvbnN0IGVjciA9IGRhdGEuZWNyW2Vjcm51bV1cbiAgICAgICAgaWYgKGVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGV4dGUuZWNycy5wdXNoKGVjcilcbiAgICAgICAgICBpbnNlcnRFY3JSZWZlcmVuY2VzKGVjciwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLm9yZ2NvZCAhPT0gbnVsbCAmJiBkYXRhLm9yZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmcgPSBkYXRhLm9yZ1t0ZXh0ZS5vcmdjb2RdXG4gICAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLm9yaXR4dGNvZCAhPT0gbnVsbCAmJiBkYXRhLm9yaXR4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcml0eHQgPSBkYXRhLm9yaXR4dFt0ZXh0ZS5vcml0eHRjb2RdXG4gICAgICBpZiAob3JpdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUub3JpdHh0ID0gb3JpdHh0XG4gICAgICAgIC8vIGluc2VydE9yaXR4dFJlZmVyZW5jZXMob3JpdHh0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR4dEFtZWxpSWQgIT09IHVuZGVmaW5lZCAmJiBkYXRhLnR4dF9hbWVsaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eHRBbWVsaSA9IGRhdGEudHh0X2FtZWxpW3RleHRlLnR4dEFtZWxpSWRdXG4gICAgICBpZiAodHh0QW1lbGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS50eHRBbWVsaSA9IHR4dEFtZWxpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR5cHR4dGNvZCAhPT0gbnVsbCAmJiBkYXRhLnR5cHR4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXB0eHQgPSBkYXRhLnR5cHR4dFt0ZXh0ZS50eXB0eHRjb2RdXG4gICAgICBpZiAodHlwdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUudHlwdHh0ID0gdHlwdHh0XG4gICAgICAgIC8vIGluc2VydFR5cHR4dFJlZmVyZW5jZXModHlwdHh0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR5cHVybCAhPT0gbnVsbCAmJiBkYXRhLnR5cHVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXB1cmwgPSBkYXRhLnR5cHVybFt0ZXh0ZS50eXB1cmxdXG4gICAgICBpZiAodHlwdXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUubGlidHlwdXJsID0gdHlwdXJsLmxpYnR5cHVybFxuICAgICAgICAvLyBpbnNlcnRUeXB1cmxSZWZlcmVuY2VzKHR5cHVybCwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIHJldHVybiB0ZXh0ZVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNERPLFNBQVNBLG1CQUFtQkEsQ0FDakNDLEdBQVEsRUFDUkMsSUFBZ0IsRUFDaEJDLHFCQUE0QyxFQUM1QztFQUNBLElBQUlDLFVBQVUsR0FBR0QscUJBQXFCLENBQUNGLEdBQUc7RUFDMUMsSUFBSUcsVUFBVSxLQUFLQyxTQUFTLEVBQUU7SUFDNUJELFVBQVUsR0FBR0QscUJBQXFCLENBQUNGLEdBQUcsR0FBRyxJQUFJSyxHQUFHLENBQUMsQ0FBQztFQUNwRDtFQUNBLElBQUksQ0FBQ0YsVUFBVSxDQUFDRyxHQUFHLENBQUNOLEdBQUcsQ0FBQ08sTUFBTSxDQUFDLEVBQUU7SUFDL0JKLFVBQVUsQ0FBQ0ssR0FBRyxDQUFDUixHQUFHLENBQUNPLE1BQU0sQ0FBQztJQUUxQixJQUFJUCxHQUFHLENBQUNTLE1BQU0sS0FBSyxJQUFJLElBQUlSLElBQUksQ0FBQ1MsR0FBRyxLQUFLTixTQUFTLEVBQUU7TUFDakQsSUFBTU0sR0FBRyxHQUFHVCxJQUFJLENBQUNTLEdBQUcsQ0FBQ1YsR0FBRyxDQUFDUyxNQUFNLENBQUM7TUFDaEMsSUFBSUMsR0FBRyxLQUFLTixTQUFTLEVBQUU7UUFDckJKLEdBQUcsQ0FBQ1UsR0FBRyxH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
|
|
518
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBdWRSZWZlcmVuY2VzIiwiYXVkIiwiZGF0YSIsInZpc2l0ZWRJZHNCeVRhYmxlTmFtZSIsInZpc2l0ZWRJZHMiLCJ1bmRlZmluZWQiLCJTZXQiLCJoYXMiLCJhdWRjbGUiLCJhZGQiLCJvcmdjb2QiLCJvcmciLCJpbnNlcnRBdXRldXJSZWZlcmVuY2VzIiwiYXV0ZXVyIiwiYXV0Y29kIiwicXVhIiwicXVhY29kIiwiaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMiLCJkYXRlU2VhbmNlIiwiZGF0ZV9zZWFuY2UiLCJjb2RlIiwiZGF0ZV9zIiwiZGViYXRzIiwiZGF0ZVN0cmluZyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImRlYmF0Iiwic2NycyIsInNjcmlkcyIsInNjciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJzY3JpZCIsInZhbHVlIiwicHVzaCIsImVyciIsImUiLCJmIiwiaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyIsImRvY2F0dCIsInBlcmZvcm1JbnNlcnRSYXBSZWZlcmVuY2VzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZG9jYXR0Y2xlIiwicmFwY29kIiwicmFwIiwiaW5zZXJ0UmFwUmVmZXJlbmNlcyIsInR5cGF0dGNvZCIsInR5cGF0dCIsImluc2VydEVjclJlZmVyZW5jZXMiLCJlY3IiLCJlY3JudW0iLCJhdXQiLCJpbnNlcnRMZWNhc3NyYXBSZWZlcmVuY2VzIiwibGVjYXNzcmFwIiwibGVjYXNyYXBpZCIsImNvbmNhdCIsImxlY2Fzc2lkdCIsImluc2VydExlY2Fzc1JlZmVyZW5jZXMiLCJsZWNhc3MiLCJjb2Rhc3MiLCJhc3MiLCJhdWRzIiwiYXVkY2xlcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJkYXRlc1NlYW5jZXMiLCJkYXRlc1NlYW5jZXNDb2RlcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJkYXRlU2VhbmNlQ29kZSIsImxlY2Fzc3JhcHMiLCJsZWNhc3NyYXBpZHMiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwibGVjYXNzcmFwaWQiLCJ0ZXh0ZXMiLCJ0ZXhjb2RzIiwidGV4dGUiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwidGV4Y29kIiwiaW5zZXJ0VGV4dGVSZWZlcmVuY2VzIiwiaW5zZXJ0TGVjdHVyZVJlZmVyZW5jZXMiLCJsZWN0dXJlIiwibGVjaWR0IiwidHlwbGVjY29kIiwidHlwbGVjIiwibGVjYXNzcyIsImxlY2Fzc2lkdHMiLCJfaXRlcmF0b3I2IiwiX3N0ZXA2IiwiaW5zZXJ0TG9pUmVmZXJlbmNlcyIsImxvaSIsImxvaWNvZCIsInR5cGxvaWNvZCIsInR5cGxvaSIsImV0YWxvaWNvZCIsImV0YWxvaSIsImRlY2NvY2NvZCIsImRlY2NvYyIsImxlY3R1cmVzIiwibGVjaWR0cyIsIl9pdGVyYXRvcjciLCJfc3RlcDciLCJpbnNlcnRRdWVzdGlvblJlZmVyZW5jZXMiLCJxdWVzdGlvbiIsImNvZGRlbnJhcCIsImRlbnJhcCIsImRvY2F0dHMiLCJkb2NhdHRjbGVzIiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsImVjcnMiLCJlY3JudW1zIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsIm9yZ3MiLCJvcmdjb2RzIiwiX2l0ZXJhdG9yMTAiLCJfc3RlcDEwIiwiaW5zZXJ0U2VuUmVmZXJlbmNlcyIsInNlbiIsIl9pdGVyYXRvcjExIiwiX3N0ZXAxMSIsIm9yaXR4dGNvZCIsIm9yaXR4dCIsInR4dEFtZWxpSWQiLCJ0eHRfYW1lbGkiLCJ0eHRBbWVsaSIsInR5cHR4dGNvZCIsInR5cHR4dCIsInR5cHVybCIsImxpYnR5cHVybCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnNlcnRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHh0QW1lbGkgfSBmcm9tIFwiLi90eXBlcy9hbWVsaVwiXG5pbXBvcnQgeyBEZWJhdCB9IGZyb20gXCIuL3R5cGVzL2RlYmF0c1wiXG5pbXBvcnQge1xuICBBc3MsXG4gIEF1ZCxcbiAgQXV0ZXVyLFxuICBEYXRlU2VhbmNlLFxuICBEZWNDb2MsXG4gIERlblJhcCxcbiAgRG9jQXR0LFxuICBFY3IsXG4gIEV0YUxvaSxcbiAgTGVjQXNzLFxuICBMZWNBc3NSYXAsXG4gIExlY3R1cmUsXG4gIExvaSxcbiAgT3JnLFxuICBPcmlUeHQsXG4gIFF1YSxcbiAgUmFwLFxuICBTY3IsXG4gIFRleHRlLFxuICBUeXBBdHQsXG4gIFR5cExlYyxcbiAgVHlwTG9pLFxuICBUeXBUeHQsXG4gIFR5cFVybCxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zbGVnXCJcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IFNlbiB9IGZyb20gXCIuL3R5cGVzL3NlbnNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIE91dHB1dERhdGEge1xuICByZWFkb25seSBhc3M/OiB7IFtpZDogc3RyaW5nXTogQXNzIH1cbiAgcmVhZG9ubHkgYXVkPzogeyBbaWQ6IHN0cmluZ106IEF1ZCB9XG4gIHJlYWRvbmx5IGF1dGV1cj86IHsgW2lkOiBzdHJpbmddOiBBdXRldXIgfVxuICByZWFkb25seSBkYXRlX3NlYW5jZT86IHsgW2lkOiBzdHJpbmddOiBEYXRlU2VhbmNlIH1cbiAgcmVhZG9ubHkgZGViYXRzPzogeyBbaWQ6IHN0cmluZ106IERlYmF0IH1cbiAgcmVhZG9ubHkgZGVjY29jPzogeyBbaWQ6IHN0cmluZ106IERlY0NvYyB9XG4gIHJlYWRvbmx5IGRlbnJhcD86IHsgW2lkOiBzdHJpbmddOiBEZW5SYXAgfVxuICByZWFkb25seSBkb2NhdHQ/OiB7IFtpZDogc3RyaW5nXTogRG9jQXR0IH1cbiAgcmVhZG9ubHkgZWNyPzogeyBbaWQ6IHN0cmluZ106IEVjciB9XG4gIHJlYWRvbmx5IGV0YWxvaT86IHsgW2lkOiBzdHJpbmddOiBFdGFMb2kgfVxuICByZWFkb25seSBsZWNhc3M/OiB7IFtpZDogc3RyaW5nXTogTGVjQXNzIH1cbiAgcmVhZG9ubHkgbGVjYXNzcmFwPzogeyBbaWQ6IHN0cmluZ106IExlY0Fzc1JhcCB9XG4gIHJlYWRvbmx5IGxlY3R1cmU/OiB7IFtpZDogc3RyaW5nXTogTGVjdHVyZSB9XG4gIHJlYWRvbmx5IGxvaT86IHsgW2lkOiBzdHJpbmddOiBMb2kgfVxuICByZWFkb25seSBvcmc/OiB7IFtpZDogc3RyaW5nXTogT3JnIH1cbiAgcmVhZG9ubHkgb3JpdHh0PzogeyBbaWQ6IHN0cmluZ106IE9yaVR4dCB9XG4gIHJlYWRvbmx5IHF1YT86IHsgW2lkOiBzdHJpbmddOiBRdWEgfVxuICByZWFkb25seSByYXA/OiB7IFtpZDogc3RyaW5nXTogUmFwIH1cbiAgcmVhZG9ubHkgc2NyPzogeyBbaWQ6IHN0cmluZ106IFNjciB9XG4gIHJlYWRvbmx5IHRleHRlPzogeyBbaWQ6IHN0cmluZ106IFRleHRlIH1cbiAgcmVhZG9ubHkgdHlwYXR0PzogeyBbaWQ6IHN0cmluZ106IFR5cEF0dCB9XG4gIHJlYWRvbmx5IHR5cGxlYz86IHsgW2lkOiBzdHJpbmddOiBUeXBMZWMgfVxuICByZWFkb25seSB0eXBsb2k/OiB7IFtpZDogc3RyaW5nXTogVHlwTG9pIH1cbiAgcmVhZG9ubHkgdHlwdHh0PzogeyBbaWQ6IHN0cmluZ106IFR5cFR4dCB9XG4gIHJlYWRvbmx5IHR5cHVybD86IHsgW2lkOiBzdHJpbmddOiBUeXBVcmwgfVxuICByZWFkb25seSB0eHRfYW1lbGk/OiB7IFtpZDogc3RyaW5nXTogVHh0QW1lbGkgfVxufVxuXG50eXBlIFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSA9IHsgW3RhYmxlTmFtZTogc3RyaW5nXTogU2V0PG51bWJlciB8IHN0cmluZz4gfVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QXVkUmVmZXJlbmNlcyhcbiAgYXVkOiBBdWQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmF1ZFxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5hdWQgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGF1ZC5hdWRjbGUpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQoYXVkLmF1ZGNsZSlcblxuICAgIGlmIChhdWQub3JnY29kICE9PSBudWxsICYmIGRhdGEub3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZyA9IGRhdGEub3JnW2F1ZC5vcmdjb2RdXG4gICAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXVkLm9yZyA9IG9yZ1xuICAgICAgICAvLyBpbnNlcnRPcmdSZWZlcmVuY2VzKG9yZywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIHJldHVybiBhdWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEF1dGV1clJlZmVyZW5jZXMoXG4gIGF1dGV1cjogQXV0ZXVyLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5hdXRldXJcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuYXV0ZXVyID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhhdXRldXIuYXV0Y29kKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGF1dGV1ci5hdXRjb2QpXG5cbiAgICBpZiAoZGF0YS5xdWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcXVhID0gZGF0YS5xdWFbYXV0ZXVyLnF1YWNvZF1cbiAgICAgIGlmIChxdWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIucXVhID0gcXVhXG4gICAgICAgIC8vIGluc2VydFF1YVJlZmVyZW5jZXMocXVhLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGF1dGV1clxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMoXG4gIGRhdGVTZWFuY2U6IERhdGVTZWFuY2UsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmRhdGVfc2VhbmNlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmRhdGVfc2VhbmNlID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhkYXRlU2VhbmNlLmNvZGUpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQoZGF0ZVNlYW5jZS5jb2RlKVxuXG4gICAgaWYgKGRhdGVTZWFuY2UuZGF0ZV9zICE9PSBudWxsICYmIGRhdGEuZGViYXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPVxuICAgICAgICBkYXRlU2VhbmNlLmRhdGVfcyBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICA/IGRhdGVTZWFuY2UuZGF0ZV9zLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICA6IGRhdGVTZWFuY2UuZGF0ZV9zXG4gICAgICBjb25zdCBkZWJhdCA9IGRhdGEuZGViYXRzW2RhdGVTdHJpbmddXG4gICAgICBpZiAoZGViYXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkYXRlU2VhbmNlLmRlYmF0ID0gZGViYXRcbiAgICAgICAgLy8gaW5zZXJ0RGViYXRSZWZlcmVuY2VzKGRlYmF0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZGF0ZVNlYW5jZS5zY3JzID0gW11cbiAgICBpZiAoZGF0ZVNlYW5jZS5zY3JpZHMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLnNjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHNjcmlkIG9mIGRhdGVTZWFuY2Uuc2NyaWRzKSB7XG4gICAgICAgIGNvbnN0IHNjciA9IGRhdGEuc2NyW3NjcmlkXVxuICAgICAgICBpZiAoc2NyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkYXRlU2VhbmNlLnNjcnMucHVzaChzY3IpXG4gICAgICAgICAgLy8gaW5zZXJ0U2NyUmVmZXJlbmNlcyhzY3IsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlU2VhbmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnREb2NBdHRSZWZlcmVuY2VzKFxuICBkb2NhdHQ6IERvY0F0dCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4gIHBlcmZvcm1JbnNlcnRSYXBSZWZlcmVuY2VzPXRydWVcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5kb2NhdHRcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZG9jYXR0ID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhkb2NhdHQuZG9jYXR0Y2xlKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGRvY2F0dC5kb2NhdHRjbGUpXG5cbiAgICBpZiAocGVyZm9ybUluc2VydFJhcFJlZmVyZW5jZXMgJiYgZG9jYXR0LnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtkb2NhdHQucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9jYXR0LnR5cGF0dGNvZCAhPT0gbnVsbCAmJiBkYXRhLnR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXBhdHQgPSBkYXRhLnR5cGF0dFtkb2NhdHQudHlwYXR0Y29kXVxuICAgICAgaWYgKHR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC50eXBhdHQgPSB0eXBhdHRcbiAgICAgICAgLy8gaW5zZXJ0VHlwQXR0UmVmZXJlbmNlcyh0eXBhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9jYXR0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRFY3JSZWZlcmVuY2VzKFxuICBlY3I6IEVjcixcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZWNyXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmVjciA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMoZWNyLmVjcm51bSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChlY3IuZWNybnVtKVxuXG4gICAgaWYgKGVjci5hdXRjb2QgIT09IG51bGwgJiYgZGF0YS5hdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXV0ID0gZGF0YS5hdXRldXJbZWNyLmF1dGNvZF1cbiAgICAgIGlmIChhdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlY3IuYXV0ID0gYXV0XG4gICAgICAgIGluc2VydEF1dGV1clJlZmVyZW5jZXMoYXV0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGVjclxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGVjYXNzcmFwUmVmZXJlbmNlcyhcbiAgbGVjYXNzcmFwOiBMZWNBc3NSYXAsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2Fzc3JhcFxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWNhc3NyYXAgPSBuZXcgU2V0KClcbiAgfVxuICBjb25zdCBsZWNhc3JhcGlkID0gYCR7bGVjYXNzcmFwLmxlY2Fzc2lkdH0gJHtsZWNhc3NyYXAucmFwY29kfWBcbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhsZWNhc3JhcGlkKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY2FzcmFwaWQpXG5cbiAgICBpZiAobGVjYXNzcmFwLnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtsZWNhc3NyYXAucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY2Fzc3JhcC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjYXNzcmFwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMZWNhc3NSZWZlcmVuY2VzKFxuICBsZWNhc3M6IExlY0FzcyxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUubGVjYXNzXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2FzcyA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMobGVjYXNzLmxlY2Fzc2lkdCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChsZWNhc3MubGVjYXNzaWR0KVxuXG4gICAgaWYgKGxlY2Fzcy5jb2Rhc3MgIT09IG51bGwgJiYgZGF0YS5hc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXNzID0gZGF0YS5hc3NbbGVjYXNzLmNvZGFzc11cbiAgICAgIGlmIChhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3MuYXNzID0gYXNzXG4gICAgICAgIC8vIGluc2VydEFzc1JlZmVyZW5jZXMoYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxlY2Fzcy5vcmdjb2QgIT09IG51bGwgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbbGVjYXNzLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3Mub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmF1ZHMgPSBbXVxuICAgIGlmIChsZWNhc3MuYXVkY2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuYXVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgYXVkY2xlIG9mIGxlY2Fzcy5hdWRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGF1ZCA9IGRhdGEuYXVkW2F1ZGNsZV1cbiAgICAgICAgaWYgKGF1ZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmF1ZHMucHVzaChhdWQpXG4gICAgICAgICAgaW5zZXJ0QXVkUmVmZXJlbmNlcyhhdWQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxlY2Fzcy5kYXRlc1NlYW5jZXMgPSBbXVxuICAgIGlmIChsZWNhc3MuZGF0ZXNTZWFuY2VzQ29kZXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmRhdGVfc2VhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZGF0ZVNlYW5jZUNvZGUgb2YgbGVjYXNzLmRhdGVzU2VhbmNlc0NvZGVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGVTZWFuY2UgPSBkYXRhLmRhdGVfc2VhbmNlW2RhdGVTZWFuY2VDb2RlXVxuICAgICAgICBpZiAoZGF0ZVNlYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmRhdGVzU2VhbmNlcy5wdXNoKGRhdGVTZWFuY2UpXG4gICAgICAgICAgaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMoZGF0ZVNlYW5jZSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmxlY2Fzc3JhcHMgPSBbXVxuICAgIGlmIChsZWNhc3MubGVjYXNzcmFwaWRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3NyYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NyYXBpZCBvZiBsZWNhc3MubGVjYXNzcmFwaWRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2Fzc3JhcCA9IGRhdGEubGVjYXNzcmFwW2xlY2Fzc3JhcGlkXVxuICAgICAgICBpZiAobGVjYXNzcmFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZWNhc3MubGVjYXNzcmFwcy5wdXNoKGxlY2Fzc3JhcClcbiAgICAgICAgICBpbnNlcnRMZWNhc3NyYXBSZWZlcmVuY2VzKGxlY2Fzc3JhcCwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLnRleHRlcyA9IFtdXG4gICAgaWYgKGxlY2Fzcy50ZXhjb2RzICE9PSB1bmRlZmluZWQgJiYgZGF0YS50ZXh0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHRleGNvZCBvZiBsZWNhc3MudGV4Y29kcykge1xuICAgICAgICBjb25zdCB0ZXh0ZSA9IGRhdGEudGV4dGVbdGV4Y29kXVxuICAgICAgICBpZiAodGV4dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxlY2Fzcy50ZXh0ZXMucHVzaCh0ZXh0ZSlcbiAgICAgICAgICBpbnNlcnRUZXh0ZVJlZmVyZW5jZXModGV4dGUsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWNhc3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExlY3R1cmVSZWZlcmVuY2VzKFxuICBsZWN0dXJlOiBMZWN0dXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWN0dXJlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY3R1cmUgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxlY3R1cmUubGVjaWR0KSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY3R1cmUubGVjaWR0KVxuXG4gICAgaWYgKGxlY3R1cmUudHlwbGVjY29kICE9PSBudWxsICYmIGRhdGEudHlwbGVjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxlYyA9IGRhdGEudHlwbGVjW2xlY3R1cmUudHlwbGVjY29kXVxuICAgICAgaWYgKHR5cGxlYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY3R1cmUudHlwbGVjID0gdHlwbGVjXG4gICAgICAgIC8vIGluc2VydFR5cGxlY1JlZmVyZW5jZXModHlwbGVjLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjdHVyZS5sZWNhc3NzID0gW11cbiAgICBpZiAobGVjdHVyZS5sZWNhc3NpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NpZHQgb2YgbGVjdHVyZS5sZWNhc3NpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2FzcyA9IGRhdGEubGVjYXNzW2xlY2Fzc2lkdF1cbiAgICAgICAgaWYgKGxlY2FzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjdHVyZS5sZWNhc3NzLnB1c2gobGVjYXNzKVxuICAgICAgICAgIGluc2VydExlY2Fzc1JlZmVyZW5jZXMobGVjYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjdHVyZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TG9pUmVmZXJlbmNlcyhcbiAgbG9pOiBMb2ksXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxvaVxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sb2kgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxvaS5sb2ljb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQobG9pLmxvaWNvZClcblxuICAgIGlmIChsb2kudHlwbG9pY29kICE9PSBudWxsICYmIGRhdGEudHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxvaSA9IGRhdGEudHlwbG9pW2xvaS50eXBsb2ljb2RdXG4gICAgICBpZiAodHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLnR5cGxvaSA9IHR5cGxvaVxuICAgICAgICAvLyBpbnNlcnRUeXBsb2lSZWZlcmVuY2VzKHR5cGxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZXRhbG9pY29kICE9PSBudWxsICYmIGRhdGEuZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGV0YWxvaSA9IGRhdGEuZXRhbG9pW2xvaS5ldGFsb2ljb2RdXG4gICAgICBpZiAoZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmV0YWxvaSA9IGV0YWxvaVxuICAgICAgICAvLyBpbnNlcnRFdGFsb2lSZWZlcmVuY2VzKGV0YWxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZGVjY29jY29kICE9PSBudWxsICYmIGRhdGEuZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRlY2NvYyA9IGRhdGEuZGVjY29jW2xvaS5kZWNjb2Njb2RdXG4gICAgICBpZiAoZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmRlY2NvYyA9IGRlY2NvY1xuICAgICAgICAvLyBpbnNlcnREZWNjb2NSZWZlcmVuY2VzKGRlY2NvYywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxvaS5sZWN0dXJlcyA9IFtdXG4gICAgaWYgKGxvaS5sZWNpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWN0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbGVjaWR0IG9mIGxvaS5sZWNpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY3R1cmUgPSBkYXRhLmxlY3R1cmVbbGVjaWR0XVxuICAgICAgICBpZiAobGVjdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbG9pLmxlY3R1cmVzLnB1c2gobGVjdHVyZSlcbiAgICAgICAgICBpbnNlcnRMZWN0dXJlUmVmZXJlbmNlcyhsZWN0dXJlLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRRdWVzdGlvblJlZmVyZW5jZXMoXG4gIHF1ZXN0aW9uOiBRdWVzdGlvbixcbiAgLy8gQHRzLWlnbm9yZSBUTyBCRSBSRU1PVkVEIFdIRU4gRE9ORVxuICBkYXRhOiBPdXRwdXREYXRhLFxuICAvLyBAdHMtaWdub3JlIFRPIEJFIFJFTU9WRUQgV0hFTiBET05FXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHF1ZXN0aW9uXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRSYXBSZWZlcmVuY2VzKFxuICByYXA6IFJhcCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUucmFwXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnJhcCA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMocmFwLnJhcGNvZCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChyYXAucmFwY29kKVxuXG4gICAgaWYgKHJhcC5jb2RkZW5yYXAgIT09IG51bGwgJiYgZGF0YS5kZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGVucmFwID0gZGF0YS5kZW5yYXBbcmFwLmNvZGRlbnJhcF1cbiAgICAgIGlmIChkZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByYXAuZGVucmFwID0gZGVucmFwXG4gICAgICAgIC8vIGluc2VydERlbnJhcFJlZmVyZW5jZXMoZGVucmFwLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmFwLmRvY2F0dHMgPSBbXVxuICAgIGlmIChyYXAuZG9jYXR0Y2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZG9jYXR0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZG9jYXR0Y2xlIG9mIHJhcC5kb2NhdHRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGRvY2F0dCA9IGRhdGEuZG9jYXR0W2RvY2F0dGNsZV1cbiAgICAgICAgaWYgKGRvY2F0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwLmRvY2F0dHMucHVzaChkb2NhdHQpXG4gICAgICAgICAgaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyhkb2NhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByYXAuZWNycyA9IFtdXG4gICAgaWYgKHJhcC5lY3JudW1zICE9PSB1bmRlZmluZWQgJiYgZGF0YS5lY3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBlY3JudW0gb2YgcmFwLmVjcm51bXMpIHtcbiAgICAgICAgY29uc3QgZWNyID0gZGF0YS5lY3JbZWNybnVtXVxuICAgICAgICBpZiAoZWNyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByYXAuZWNycy5wdXNoKGVjcilcbiAgICAgICAgICBpbnNlcnRFY3JSZWZlcmVuY2VzKGVjciwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmFwLm9yZ3MgPSBbXVxuICAgIGlmIChyYXAub3JnY29kcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEub3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3Qgb3JnY29kIG9mIHJhcC5vcmdjb2RzKSB7XG4gICAgICAgIGNvbnN0IG9yZyA9IGRhdGEub3JnW29yZ2NvZF1cbiAgICAgICAgaWYgKG9yZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwLm9yZ3MucHVzaChvcmcpXG4gICAgICAgICAgLy8gaW5zZXJ0T3JnUmVmZXJlbmNlcyhvcmcsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByYXBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydFNlblJlZmVyZW5jZXMoXG4gIHNlbjogU2VuLFxuICAvLyBAdHMtaWdub3JlIFRPIEJFIFJFTU9WRUQgV0hFTiBET05FXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIC8vIEB0cy1pZ25vcmUgVE8gQkUgUkVNT1ZFRCBXSEVOIERPTkVcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gc2VuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRUZXh0ZVJlZmVyZW5jZXMoXG4gIHRleHRlOiBUZXh0ZSxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUudGV4dGVcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUudGV4dGUgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKHRleHRlLnRleGNvZCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZCh0ZXh0ZS50ZXhjb2QpXG5cbiAgICB0ZXh0ZS5lY3JzID0gW11cbiAgICBpZiAodGV4dGUuZWNybnVtcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZWNyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZWNybnVtIG9mIHRleHRlLmVjcm51bXMpIHtcbiAgICAgICAgY29uc3QgZWNyID0gZGF0YS5lY3JbZWNybnVtXVxuICAgICAgICBpZiAoZWNyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0ZXh0ZS5lY3JzLnB1c2goZWNyKVxuICAgICAgICAgIGluc2VydEVjclJlZmVyZW5jZXMoZWNyLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUub3JnY29kICE9PSBudWxsICYmIGRhdGEub3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZyA9IGRhdGEub3JnW3RleHRlLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS5vcmcgPSBvcmdcbiAgICAgICAgLy8gaW5zZXJ0T3JnUmVmZXJlbmNlcyhvcmcsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUub3JpdHh0Y29kICE9PSBudWxsICYmIGRhdGEub3JpdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yaXR4dCA9IGRhdGEub3JpdHh0W3RleHRlLm9yaXR4dGNvZF1cbiAgICAgIGlmIChvcml0eHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS5vcml0eHQgPSBvcml0eHRcbiAgICAgICAgLy8gaW5zZXJ0T3JpdHh0UmVmZXJlbmNlcyhvcml0eHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUudHh0QW1lbGlJZCAhPT0gdW5kZWZpbmVkICYmIGRhdGEudHh0X2FtZWxpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR4dEFtZWxpID0gZGF0YS50eHRfYW1lbGlbdGV4dGUudHh0QW1lbGlJZF1cbiAgICAgIGlmICh0eHRBbWVsaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRleHRlLnR4dEFtZWxpID0gdHh0QW1lbGlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUudHlwdHh0Y29kICE9PSBudWxsICYmIGRhdGEudHlwdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cHR4dCA9IGRhdGEudHlwdHh0W3RleHRlLnR5cHR4dGNvZF1cbiAgICAgIGlmICh0eXB0eHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS50eXB0eHQgPSB0eXB0eHRcbiAgICAgICAgLy8gaW5zZXJ0VHlwdHh0UmVmZXJlbmNlcyh0eXB0eHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGV4dGUudHlwdXJsICE9PSBudWxsICYmIGRhdGEudHlwdXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cHVybCA9IGRhdGEudHlwdXJsW3RleHRlLnR5cHVybF1cbiAgICAgIGlmICh0eXB1cmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS5saWJ0eXB1cmwgPSB0eXB1cmwubGlidHlwdXJsXG4gICAgICAgIC8vIGluc2VydFR5cHVybFJlZmVyZW5jZXModHlwdXJsLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHRleHRlXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThETyxTQUFTQSxtQkFBbUJBLENBQ2pDQyxHQUFRLEVBQ1JDLElBQWdCLEVBQ2hCQyxxQkFBNEMsRUFDNUM7RUFDQSxJQUFJQyxVQUFVLEdBQUdELHFCQUFxQixDQUFDRixHQUFHO0VBQzFDLElBQUlHLFVBQVUsS0FBS0MsU0FBUyxFQUFFO0lBQzVCRCxVQUFVLEdBQUdELHFCQUFxQixDQUFDRixHQUFHLEdBQUcsSUFBSUssR0FBRyxDQUFDLENBQUM7RUFDcEQ7RUFDQSxJQUFJLENBQUNGLFVBQVUsQ0FBQ0csR0FBRyxDQUFDTixHQUFHLENBQUNPLE1BQU0sQ0FBQyxFQUFFO0lBQy9CSixVQUFVLENBQUNLLEdBQUcsQ0FBQ1IsR0FBRyxDQUFDTyxNQUFNLENBQUM7SUFFMUIsSUFBSVAsR0FBRyxDQUFDUyxNQUFNLEtBQUssSUFBSSxJQUFJUixJQUFJLENBQUNTLEdBQUcsS0FBS04sU0FBUyxFQUFFO01BQ2pELElBQU1NLEdBQUcsR0FBR1QsSUFBSSxDQUFDUyxHQUFHLENBQUNWLEdBQUcsQ0FBQ1MsTUFBTSxDQUFDO01BQ2hDLElBQUlDLEdBQUcsS0FBS04sU0FBUyxFQUFFO1FBQ3JCSixHQUFHLENBQUNVLEdBQUcsR0FBR0EsR0FBRztRQUNiO01BQ0Y7SUFDRjs7SUFFQTtFQUNGO0VBRUEsT0FBT1YsR0FBRztBQUNaO0FBRU8sU0FBU1csc0JBQXNCQSxDQUNwQ0MsTUFBYyxFQUNkWCxJQUFnQixFQUNoQkMscUJBQTRDLEVBQzVDO0VBQ0EsSUFB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
|
package/lib/inserters.mjs
CHANGED
|
@@ -64,14 +64,14 @@ export function insertDateSeanceReferences(dateSeance, data, visitedIdsByTableNa
|
|
|
64
64
|
}
|
|
65
65
|
return dateSeance;
|
|
66
66
|
}
|
|
67
|
-
export function insertDocAttReferences(docatt, data, visitedIdsByTableName) {
|
|
67
|
+
export function insertDocAttReferences(docatt, data, visitedIdsByTableName, performInsertRapReferences = true) {
|
|
68
68
|
let visitedIds = visitedIdsByTableName.docatt;
|
|
69
69
|
if (visitedIds === undefined) {
|
|
70
70
|
visitedIds = visitedIdsByTableName.docatt = new Set();
|
|
71
71
|
}
|
|
72
72
|
if (!visitedIds.has(docatt.docattcle)) {
|
|
73
73
|
visitedIds.add(docatt.docattcle);
|
|
74
|
-
if (docatt.rapcod !== null && data.rap !== undefined) {
|
|
74
|
+
if (performInsertRapReferences && docatt.rapcod !== null && data.rap !== undefined) {
|
|
75
75
|
const rap = data.rap[docatt.rapcod];
|
|
76
76
|
if (rap !== undefined) {
|
|
77
77
|
docatt.rap = rap;
|
|
@@ -256,6 +256,14 @@ export function insertLoiReferences(loi, data, visitedIdsByTableName) {
|
|
|
256
256
|
}
|
|
257
257
|
return loi;
|
|
258
258
|
}
|
|
259
|
+
export function insertQuestionReferences(question,
|
|
260
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
261
|
+
data,
|
|
262
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
263
|
+
visitedIdsByTableName) {
|
|
264
|
+
// TODO
|
|
265
|
+
return question;
|
|
266
|
+
}
|
|
259
267
|
export function insertRapReferences(rap, data, visitedIdsByTableName) {
|
|
260
268
|
let visitedIds = visitedIdsByTableName.rap;
|
|
261
269
|
if (visitedIds === undefined) {
|
|
@@ -276,7 +284,7 @@ export function insertRapReferences(rap, data, visitedIdsByTableName) {
|
|
|
276
284
|
const docatt = data.docatt[docattcle];
|
|
277
285
|
if (docatt !== undefined) {
|
|
278
286
|
rap.docatts.push(docatt);
|
|
279
|
-
insertDocAttReferences(docatt, data, visitedIdsByTableName);
|
|
287
|
+
insertDocAttReferences(docatt, data, visitedIdsByTableName, false);
|
|
280
288
|
}
|
|
281
289
|
}
|
|
282
290
|
}
|
|
@@ -303,6 +311,14 @@ export function insertRapReferences(rap, data, visitedIdsByTableName) {
|
|
|
303
311
|
}
|
|
304
312
|
return rap;
|
|
305
313
|
}
|
|
314
|
+
export function insertSenReferences(sen,
|
|
315
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
316
|
+
data,
|
|
317
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
318
|
+
visitedIdsByTableName) {
|
|
319
|
+
// TODO
|
|
320
|
+
return sen;
|
|
321
|
+
}
|
|
306
322
|
export function insertTexteReferences(texte, data, visitedIdsByTableName) {
|
|
307
323
|
let visitedIds = visitedIdsByTableName.texte;
|
|
308
324
|
if (visitedIds === undefined) {
|
package/lib/inserters.ts
CHANGED
|
@@ -26,6 +26,8 @@ import {
|
|
|
26
26
|
TypTxt,
|
|
27
27
|
TypUrl,
|
|
28
28
|
} from "./types/dosleg"
|
|
29
|
+
import { Question } from "./types/questions"
|
|
30
|
+
import { Sen } from "./types/sens"
|
|
29
31
|
|
|
30
32
|
export interface OutputData {
|
|
31
33
|
readonly ass?: { [id: string]: Ass }
|
|
@@ -153,6 +155,7 @@ export function insertDocAttReferences(
|
|
|
153
155
|
docatt: DocAtt,
|
|
154
156
|
data: OutputData,
|
|
155
157
|
visitedIdsByTableName: VisitedIdsByTableName,
|
|
158
|
+
performInsertRapReferences=true
|
|
156
159
|
) {
|
|
157
160
|
let visitedIds = visitedIdsByTableName.docatt
|
|
158
161
|
if (visitedIds === undefined) {
|
|
@@ -161,7 +164,7 @@ export function insertDocAttReferences(
|
|
|
161
164
|
if (!visitedIds.has(docatt.docattcle)) {
|
|
162
165
|
visitedIds.add(docatt.docattcle)
|
|
163
166
|
|
|
164
|
-
if (docatt.rapcod !== null && data.rap !== undefined) {
|
|
167
|
+
if (performInsertRapReferences && docatt.rapcod !== null && data.rap !== undefined) {
|
|
165
168
|
const rap = data.rap[docatt.rapcod]
|
|
166
169
|
if (rap !== undefined) {
|
|
167
170
|
docatt.rap = rap
|
|
@@ -394,6 +397,17 @@ export function insertLoiReferences(
|
|
|
394
397
|
return loi
|
|
395
398
|
}
|
|
396
399
|
|
|
400
|
+
export function insertQuestionReferences(
|
|
401
|
+
question: Question,
|
|
402
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
403
|
+
data: OutputData,
|
|
404
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
405
|
+
visitedIdsByTableName: VisitedIdsByTableName,
|
|
406
|
+
) {
|
|
407
|
+
// TODO
|
|
408
|
+
return question
|
|
409
|
+
}
|
|
410
|
+
|
|
397
411
|
export function insertRapReferences(
|
|
398
412
|
rap: Rap,
|
|
399
413
|
data: OutputData,
|
|
@@ -420,7 +434,7 @@ export function insertRapReferences(
|
|
|
420
434
|
const docatt = data.docatt[docattcle]
|
|
421
435
|
if (docatt !== undefined) {
|
|
422
436
|
rap.docatts.push(docatt)
|
|
423
|
-
insertDocAttReferences(docatt, data, visitedIdsByTableName)
|
|
437
|
+
insertDocAttReferences(docatt, data, visitedIdsByTableName, false)
|
|
424
438
|
}
|
|
425
439
|
}
|
|
426
440
|
}
|
|
@@ -451,6 +465,17 @@ export function insertRapReferences(
|
|
|
451
465
|
return rap
|
|
452
466
|
}
|
|
453
467
|
|
|
468
|
+
export function insertSenReferences(
|
|
469
|
+
sen: Sen,
|
|
470
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
471
|
+
data: OutputData,
|
|
472
|
+
// @ts-ignore TO BE REMOVED WHEN DONE
|
|
473
|
+
visitedIdsByTableName: VisitedIdsByTableName,
|
|
474
|
+
) {
|
|
475
|
+
// TODO
|
|
476
|
+
return sen
|
|
477
|
+
}
|
|
478
|
+
|
|
454
479
|
export function insertTexteReferences(
|
|
455
480
|
texte: Texte,
|
|
456
481
|
data: OutputData,
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Ses, Sub, TxtAmeli } from '../types/ameli';
|
|
2
|
+
export declare const getSessFromAnns: (ids: string[]) => Promise<Ses[]>;
|
|
3
|
+
export declare const getSubsFromTxtids: (ids: string[]) => Promise<Sub[]>;
|
|
4
|
+
export declare const getTxtsAmeliBySesannNumJoins: (ids: string[]) => Promise<TxtAmeli[]>;
|