@tricoteuses/assemblee 1.0.7 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api.js +3 -9
- package/lib/api.mjs +4 -5
- package/lib/bugs/acteur-00010/plugin.test.js +3 -50
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +2 -57
- package/lib/bugs/acteur-00010.mjs +1 -6
- package/lib/bugs/agenda-00002/plugin.test.js +3 -53
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
- package/lib/bugs/agenda-00002.js +3 -148
- package/lib/bugs/agenda-00002.mjs +1 -28
- package/lib/bugs/agenda-00008/plugin.test.js +3 -52
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +2 -61
- package/lib/bugs/agenda-00008.mjs +1 -5
- package/lib/bugs/agenda-00011/plugin.test.js +5 -99
- package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
- package/lib/bugs/agenda-00011.js +4 -105
- package/lib/bugs/agenda-00011.mjs +3 -29
- package/lib/bugs.js +3 -164
- package/lib/bugs.mjs +1 -26
- package/lib/cleaners/actes_legislatifs.js +11 -115
- package/lib/cleaners/actes_legislatifs.mjs +7 -82
- package/lib/cleaners/acteurs.js +12 -92
- package/lib/cleaners/acteurs.mjs +7 -38
- package/lib/cleaners/amendements.js +10 -103
- package/lib/cleaners/amendements.mjs +4 -58
- package/lib/cleaners/documents.js +5 -67
- package/lib/cleaners/documents.mjs +1 -37
- package/lib/cleaners/dossiers_legislatifs.js +5 -61
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
- package/lib/cleaners/index.js +1 -9
- package/lib/cleaners/index.mjs +1 -1
- package/lib/cleaners/organes.js +1 -33
- package/lib/cleaners/organes.mjs +1 -17
- package/lib/cleaners/reunions.js +4 -119
- package/lib/cleaners/reunions.mjs +1 -64
- package/lib/cleaners/scrutins.js +10 -102
- package/lib/cleaners/scrutins.mjs +1 -48
- package/lib/cleaners/xml.js +8 -42
- package/lib/cleaners/xml.mjs +6 -8
- package/lib/datasets.js +14 -113
- package/lib/datasets.mjs +6 -46
- package/lib/dates.js +7 -37
- package/lib/dates.mjs +9 -14
- package/lib/dossiers_legislatifs.js +6 -68
- package/lib/dossiers_legislatifs.mjs +5 -36
- package/lib/file_systems.js +56 -139
- package/lib/file_systems.mjs +1 -9
- package/lib/git.js +4 -53
- package/lib/git.mjs +1 -12
- package/lib/index.js +1 -15
- package/lib/index.mjs +1 -1
- package/lib/inserters.js +23 -146
- package/lib/inserters.mjs +6 -87
- package/lib/loaders.js +44 -316
- package/lib/loaders.mjs +12 -135
- package/lib/organes.js +1 -7
- package/lib/organes.mjs +1 -4
- package/lib/parsers/documents.js +22 -151
- package/lib/parsers/documents.mjs +19 -81
- package/lib/parsers/index.js +1 -4
- package/lib/parsers/index.mjs +1 -1
- package/lib/parsers/recherche_amendements.js +302 -527
- package/lib/parsers/recherche_amendements.mjs +8 -31
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
- package/lib/raw_types/acteurs_et_organes.js +5 -124
- package/lib/raw_types/acteurs_et_organes.mjs +5 -105
- package/lib/raw_types/agendas.js +6 -89
- package/lib/raw_types/agendas.mjs +9 -65
- package/lib/raw_types/amendements.d.ts +2 -0
- package/lib/raw_types/amendements.js +10 -90
- package/lib/raw_types/amendements.mjs +11 -69
- package/lib/raw_types/dossiers_legislatifs.js +6 -96
- package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
- package/lib/raw_types/scrutins.js +6 -81
- package/lib/raw_types/scrutins.mjs +9 -57
- package/lib/scripts/bugs_helper.js +2 -181
- package/lib/scripts/bugs_helper.mjs +2 -39
- package/lib/scripts/clean_data.js +27 -143
- package/lib/scripts/clean_data.mjs +15 -34
- package/lib/scripts/clean_reorganized_data.js +76 -240
- package/lib/scripts/clean_reorganized_data.mjs +36 -99
- package/lib/scripts/diff_amendements.js +19 -79
- package/lib/scripts/diff_amendements.mjs +17 -35
- package/lib/scripts/document_dossiers_legislatifs.js +17 -142
- package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
- package/lib/scripts/get_today_reunions.js +4 -22
- package/lib/scripts/get_today_reunions.mjs +1 -7
- package/lib/scripts/merge_scrutins.js +3 -47
- package/lib/scripts/merge_scrutins.mjs +1 -9
- package/lib/scripts/parse_textes_lois.js +15 -44
- package/lib/scripts/parse_textes_lois.mjs +18 -19
- package/lib/scripts/raw_types_from_amendements.js +3 -95
- package/lib/scripts/raw_types_from_amendements.mjs +1 -16
- package/lib/scripts/reorganize_data.js +74 -294
- package/lib/scripts/reorganize_data.mjs +22 -133
- package/lib/scripts/retrieve_deputes_photos.js +6 -119
- package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
- package/lib/scripts/retrieve_documents.js +4 -192
- package/lib/scripts/retrieve_documents.mjs +2 -50
- package/lib/scripts/retrieve_open_data.js +44 -116
- package/lib/scripts/retrieve_open_data.mjs +14 -19
- package/lib/scripts/retrieve_pending_amendments.js +4 -98
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
- package/lib/scripts/retrieve_senateurs_photos.js +18 -114
- package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
- package/lib/scripts/retrieve_textes_lois.js +3 -122
- package/lib/scripts/retrieve_textes_lois.mjs +3 -21
- package/lib/scripts/test_load.js +2 -10
- package/lib/scripts/test_load.mjs +2 -1
- package/lib/scripts/test_load_big_files.js +2 -10
- package/lib/scripts/test_load_big_files.mjs +2 -1
- package/lib/scripts/validate_json.js +4 -119
- package/lib/scripts/validate_json.mjs +2 -36
- package/lib/shared_types/codes_actes.js +1 -24
- package/lib/shared_types/codes_actes.mjs +3 -10
- package/lib/strings.js +1 -5
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +9 -84
- package/lib/types/acteurs_et_organes.mjs +10 -63
- package/lib/types/agendas.js +8 -90
- package/lib/types/agendas.mjs +11 -66
- package/lib/types/amendements.d.ts +2 -0
- package/lib/types/amendements.js +12 -92
- package/lib/types/amendements.mjs +15 -70
- package/lib/types/dossiers_legislatifs.js +8 -96
- package/lib/types/dossiers_legislatifs.mjs +10 -72
- package/lib/types/legislatures.js +1 -3
- package/lib/types/legislatures.mjs +1 -2
- package/lib/types/scrutins.js +8 -82
- package/lib/types/scrutins.mjs +11 -58
- package/lib/urls.js +3 -27
- package/lib/urls.mjs +3 -21
- package/package.json +1 -1
|
@@ -1,36 +1,26 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
import versionCompare from "tiny-version-compare";
|
|
4
3
|
import fetch from "node-fetch";
|
|
5
4
|
import { BasePlugin } from "../bugs/index.mjs"; // https://www.wikidata.org/wiki/Wikidata:WikiProject_France/Assembl%C3%A9e_Nationale#Legislative_session
|
|
6
|
-
|
|
7
5
|
const url = "https://query.wikidata.org/sparql?query=SELECT%20DISTINCT%20%3Fsession%20%3Fstart_time%20%3Fend_time%20%3Flabel%20%3Ffollows%20%3Ffollowed_by%20WHERE%20%7B%0A%0A%20%20%20%3Fsession%20wdt%3AP31%2Fwdt%3AP279*%20wd%3AQ87337481.%0A%20%20%20%3Fsession%20wdt%3AP580%20%3Fstart_time.%20%0A%20%20%20OPTIONAL%20%7B%20%3Fsession%20wdt%3AP582%20%3Fend_time%20%7D.%0A%20%20%20OPTIONAL%20%7B%20%3Fsession%20wdt%3AP155%20%3Ffollows%20%7D.%0A%20%20%20OPTIONAL%20%7B%20%3Fsession%20wdt%3AP156%20%3Ffollowed_by%20%7D.%0A%20%20%20OPTIONAL%20%7B%20%3Fsession%20rdfs%3Alabel%20%3Flabel%20filter%20(lang(%3Flabel)%20%3D%20%22fr%22)%20.%7D%0A%7D";
|
|
8
|
-
|
|
9
6
|
function compareString(a, b) {
|
|
10
7
|
if (a < b) return -1;
|
|
11
8
|
if (a > b) return 1;
|
|
12
9
|
return 0;
|
|
13
10
|
}
|
|
14
|
-
|
|
15
11
|
export class Plugin extends BasePlugin {
|
|
16
12
|
constructor(options) {
|
|
17
13
|
super(options, "agenda-00011");
|
|
18
|
-
|
|
19
14
|
_defineProperty(this, "sessions", void 0);
|
|
20
|
-
|
|
21
15
|
_defineProperty(this, "fetch", void 0);
|
|
22
|
-
|
|
23
16
|
this.fetch = fetch;
|
|
24
17
|
}
|
|
25
|
-
|
|
26
18
|
async preFix() {
|
|
27
19
|
return this.setSessions();
|
|
28
20
|
}
|
|
29
|
-
|
|
30
21
|
async preCheck() {
|
|
31
22
|
return this.setSessions();
|
|
32
23
|
}
|
|
33
|
-
|
|
34
24
|
async setSessions() {
|
|
35
25
|
const sessions = (await this.fetchSessions()).sort((a, b) => compareString(a["start_time"]["value"], b["start_time"]["value"]));
|
|
36
26
|
this.sessions = sessions.map(s => {
|
|
@@ -41,11 +31,9 @@ export class Plugin extends BasePlugin {
|
|
|
41
31
|
};
|
|
42
32
|
});
|
|
43
33
|
}
|
|
44
|
-
|
|
45
34
|
async get(url, headers) {
|
|
46
35
|
return this.fetch(url, headers);
|
|
47
36
|
}
|
|
48
|
-
|
|
49
37
|
async fetchSessions() {
|
|
50
38
|
const response = await this.get(url, {
|
|
51
39
|
headers: {
|
|
@@ -56,7 +44,6 @@ export class Plugin extends BasePlugin {
|
|
|
56
44
|
const payload = await response.json();
|
|
57
45
|
return payload["results"]["bindings"];
|
|
58
46
|
}
|
|
59
|
-
|
|
60
47
|
lookupSession(debut) {
|
|
61
48
|
const max = this.sessions.length - 1;
|
|
62
49
|
const min = 0;
|
|
@@ -65,16 +52,14 @@ export class Plugin extends BasePlugin {
|
|
|
65
52
|
let l = min;
|
|
66
53
|
let session;
|
|
67
54
|
let ok;
|
|
68
|
-
|
|
69
55
|
do {
|
|
70
56
|
m = Math.floor((l + h) / 2);
|
|
71
57
|
session = this.sessions[m];
|
|
72
58
|
ok = session.debut <= debut && debut <= session.fin;
|
|
73
|
-
|
|
74
59
|
if (!ok) {
|
|
75
|
-
if (l == m && m == h)
|
|
60
|
+
if (l == m && m == h)
|
|
61
|
+
// in between sessions
|
|
76
62
|
return null;
|
|
77
|
-
|
|
78
63
|
if (debut < session.debut) {
|
|
79
64
|
if (m <= min) return null;
|
|
80
65
|
h = m;
|
|
@@ -84,21 +69,17 @@ export class Plugin extends BasePlugin {
|
|
|
84
69
|
}
|
|
85
70
|
}
|
|
86
71
|
} while (!ok);
|
|
87
|
-
|
|
88
72
|
return session;
|
|
89
73
|
}
|
|
90
|
-
|
|
91
74
|
inScope(agenda) {
|
|
92
75
|
if (agenda.xsiType != "seance_type" || agenda.lieu !== undefined && agenda.lieu.code != "CG" && agenda.lieu.code != "AN") return false;
|
|
93
76
|
if (agenda.cycleDeVie.etat != "Confirmé") return false;
|
|
94
77
|
return true;
|
|
95
78
|
}
|
|
96
|
-
|
|
97
79
|
async check(agenda, _filename) {
|
|
98
80
|
if (!this.inScope(agenda)) return null;
|
|
99
81
|
const debut = agenda.timestampDebut.substr(0, 10);
|
|
100
82
|
const session = this.lookupSession(debut);
|
|
101
|
-
|
|
102
83
|
if (session == null) {
|
|
103
84
|
return {
|
|
104
85
|
status: "needs-fixing",
|
|
@@ -111,19 +92,15 @@ export class Plugin extends BasePlugin {
|
|
|
111
92
|
};
|
|
112
93
|
}
|
|
113
94
|
}
|
|
114
|
-
|
|
115
95
|
maybeUpgradeSchemaVersion(agenda) {
|
|
116
96
|
if (agenda.schemaVersion !== undefined) {
|
|
117
97
|
const version = agenda.schemaVersion.split("-")[1];
|
|
118
98
|
if (versionCompare(version, "1.0") == 1) return;
|
|
119
99
|
}
|
|
120
|
-
|
|
121
100
|
agenda.schemaVersion = "agenda-1.1";
|
|
122
101
|
}
|
|
123
|
-
|
|
124
102
|
async fix(agenda, _filename) {
|
|
125
103
|
let status;
|
|
126
|
-
|
|
127
104
|
if ("sessionRef" in agenda) {
|
|
128
105
|
// sessionRef is undefined and must be removed
|
|
129
106
|
delete agenda.sessionRef;
|
|
@@ -132,11 +109,9 @@ export class Plugin extends BasePlugin {
|
|
|
132
109
|
// if there is no sessionRef to remove, file which is not in scope does not need to be rewritten
|
|
133
110
|
status = null;
|
|
134
111
|
}
|
|
135
|
-
|
|
136
112
|
if (!this.inScope(agenda)) return status;
|
|
137
113
|
if ("session" in agenda) delete agenda.session;
|
|
138
114
|
const session = this.lookupSession(agenda.timestampDebut.substr(0, 10));
|
|
139
|
-
|
|
140
115
|
if (session == null) {
|
|
141
116
|
return null;
|
|
142
117
|
} else {
|
|
@@ -145,6 +120,5 @@ export class Plugin extends BasePlugin {
|
|
|
145
120
|
return true;
|
|
146
121
|
}
|
|
147
122
|
}
|
|
148
|
-
|
|
149
123
|
}
|
|
150
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2ZXJzaW9uQ29tcGFyZSIsImZldGNoIiwiQmFzZVBsdWdpbiIsInVybCIsImNvbXBhcmVTdHJpbmciLCJhIiwiYiIsIlBsdWdpbiIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsInByZUZpeCIsInNldFNlc3Npb25zIiwicHJlQ2hlY2siLCJzZXNzaW9ucyIsImZldGNoU2Vzc2lvbnMiLCJzb3J0IiwibWFwIiwicyIsImxhYmVsIiwicmVwbGFjZSIsImRlYnV0Iiwic3Vic3RyIiwiZmluIiwiZ2V0IiwiaGVhZGVycyIsInJlc3BvbnNlIiwiQWNjZXB0Iiwib2siLCJwYXlsb2FkIiwianNvbiIsImxvb2t1cFNlc3Npb24iLCJtYXgiLCJsZW5ndGgiLCJtaW4iLCJoIiwibSIsImwiLCJzZXNzaW9uIiwiTWF0aCIsImZsb29yIiwiaW5TY29wZSIsImFnZW5kYSIsInhzaVR5cGUiLCJsaWV1IiwidW5kZWZpbmVkIiwiY29kZSIsImN5Y2xlRGVWaWUiLCJldGF0IiwiY2hlY2siLCJfZmlsZW5hbWUiLCJ0aW1lc3RhbXBEZWJ1dCIsInN0YXR1cyIsImluZm8iLCJtYXliZVVwZ3JhZGVTY2hlbWFWZXJzaW9uIiwic2NoZW1hVmVyc2lvbiIsInZlcnNpb24iLCJzcGxpdCIsImZpeCIsInNlc3Npb25SZWYiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVncy9hZ2VuZGEtMDAwMTEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZlcnNpb25Db21wYXJlIGZyb20gXCJ0aW55LXZlcnNpb24tY29tcGFyZVwiXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0IHsgQmFzZVBsdWdpbiB9IGZyb20gXCIuLi9idWdzXCJcblxuLy8gaHR0cHM6Ly93d3cud2lraWRhdGEub3JnL3dpa2kvV2lraWRhdGE6V2lraVByb2plY3RfRnJhbmNlL0Fzc2VtYmwlQzMlQTllX05hdGlvbmFsZSNMZWdpc2xhdGl2ZV9zZXNzaW9uXG5jb25zdCB1cmwgPVxuICBcImh0dHBzOi8vcXVlcnkud2lraWRhdGEub3JnL3NwYXJxbD9xdWVyeT1TRUxFQ1QlMjBESVNUSU5DVCUyMCUzRnNlc3Npb24lMjAlM0ZzdGFydF90aW1lJTIwJTNGZW5kX3RpbWUlMjAlM0ZsYWJlbCUyMCUzRmZvbGxvd3MlMjAlM0Zmb2xsb3dlZF9ieSUyMFdIRVJFJTIwJTdCJTBBJTBBJTIwJTIwJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVAzMSUyRndkdCUzQVAyNzkqJTIwd2QlM0FRODczMzc0ODEuJTBBJTIwJTIwJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVA1ODAlMjAlM0ZzdGFydF90aW1lLiUyMCUwQSUyMCUyMCUyME9QVElPTkFMJTIwJTdCJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVA1ODIlMjAlM0ZlbmRfdGltZSUyMCU3RC4lMEElMjAlMjAlMjBPUFRJT05BTCUyMCU3QiUyMCUzRnNlc3Npb24lMjB3ZHQlM0FQMTU1JTIwJTNGZm9sbG93cyUyMCU3RC4lMEElMjAlMjAlMjBPUFRJT05BTCUyMCU3QiUyMCUzRnNlc3Npb24lMjB3ZHQlM0FQMTU2JTIwJTNGZm9sbG93ZWRfYnklMjAlN0QuJTBBJTIwJTIwJTIwT1BUSU9OQUwlMjAlN0IlMjAlM0ZzZXNzaW9uJTIwcmRmcyUzQWxhYmVsJTIwJTNGbGFiZWwlMjBmaWx0ZXIlMjAobGFuZyglM0ZsYWJlbCklMjAlM0QlMjAlMjJmciUyMiklMjAuJTdEJTBBJTdEXCJcblxuZnVuY3Rpb24gY29tcGFyZVN0cmluZyhhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuICBpZiAoYSA8IGIpIHJldHVybiAtMVxuICBpZiAoYSA+IGIpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbmV4cG9ydCBjbGFzcyBQbHVnaW4gZXh0ZW5kcyBCYXNlUGx1Z2luIHtcbiAgc2Vzc2lvbnM6IGFueVxuICBmZXRjaDogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgc3VwZXIob3B0aW9ucywgXCJhZ2VuZGEtMDAwMTFcIilcbiAgICB0aGlzLmZldGNoID0gZmV0Y2hcbiAgfVxuXG4gIGFzeW5jIHByZUZpeCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNldFNlc3Npb25zKClcbiAgfVxuXG4gIGFzeW5jIHByZUNoZWNrKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U2Vzc2lvbnMoKVxuICB9XG5cbiAgYXN5bmMgc2V0U2Vzc2lvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZXNzaW9ucyA9IChhd2FpdCB0aGlzLmZldGNoU2Vzc2lvbnMoKSkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICBjb21wYXJlU3RyaW5nKGFbXCJzdGFydF90aW1lXCJdW1widmFsdWVcIl0sIGJbXCJzdGFydF90aW1lXCJdW1widmFsdWVcIl0pLFxuICAgIClcbiAgICB0aGlzLnNlc3Npb25zID0gc2Vzc2lvbnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBzW1wibGFiZWxcIl1bXCJ2YWx1ZVwiXS5yZXBsYWNlKC9cXHMrZW4gZnJhbmNlL2ksIFwiXCIpLFxuICAgICAgICBkZWJ1dDogc1tcInN0YXJ0X3RpbWVcIl1bXCJ2YWx1ZVwiXS5zdWJzdHIoMCwgMTApLFxuICAgICAgICBmaW46IHNbXCJlbmRfdGltZVwiXVtcInZhbHVlXCJdLnN1YnN0cigwLCAxMCksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldCh1cmw6IHN0cmluZywgaGVhZGVyczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh1cmwsIGhlYWRlcnMpXG4gIH1cblxuICBhc3luYyBmZXRjaFNlc3Npb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgIH0pXG4gICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgcmVzcG9uc2VcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgcmV0dXJuIHBheWxvYWRbXCJyZXN1bHRzXCJdW1wiYmluZGluZ3NcIl1cbiAgfVxuXG4gIGxvb2t1cFNlc3Npb24oZGVidXQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5zZXNzaW9ucy5sZW5ndGggLSAxXG4gICAgY29uc3QgbWluID0gMFxuICAgIGxldCBoID0gbWF4XG4gICAgbGV0IG1cbiAgICBsZXQgbCA9IG1pblxuICAgIGxldCBzZXNzaW9uXG4gICAgbGV0IG9rXG4gICAgZG8ge1xuICAgICAgbSA9IE1hdGguZmxvb3IoKGwgKyBoKSAvIDIpXG4gICAgICBzZXNzaW9uID0gdGhpcy5zZXNzaW9uc1ttXVxuICAgICAgb2sgPSBzZXNzaW9uLmRlYnV0IDw9IGRlYnV0ICYmIGRlYnV0IDw9IHNlc3Npb24uZmluXG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChsID09IG0gJiYgbSA9PSBoKVxuICAgICAgICAgIC8vIGluIGJldHdlZW4gc2Vzc2lvbnNcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICBpZiAoZGVidXQgPCBzZXNzaW9uLmRlYnV0KSB7XG4gICAgICAgICAgaWYgKG0gPD0gbWluKSByZXR1cm4gbnVsbFxuICAgICAgICAgIGggPSBtXG4gICAgICAgIH0gZWxzZSBpZiAoZGVidXQgPiBzZXNzaW9uLmZpbikge1xuICAgICAgICAgIGlmIChtID49IG1heCkgcmV0dXJuIG51bGxcbiAgICAgICAgICBsID0gbCA9PSBtID8gaCA6IG1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCFvaylcbiAgICByZXR1cm4gc2Vzc2lvblxuICB9XG5cbiAgaW5TY29wZShhZ2VuZGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGFnZW5kYS54c2lUeXBlICE9IFwic2VhbmNlX3R5cGVcIiB8fFxuICAgICAgKGFnZW5kYS5saWV1ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkNHXCIgJiZcbiAgICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkFOXCIpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGFnZW5kYS5jeWNsZURlVmllLmV0YXQgIT0gXCJDb25maXJtw6lcIikgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIGNoZWNrKGFnZW5kYTogYW55LCBfZmlsZW5hbWU6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLmluU2NvcGUoYWdlbmRhKSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBkZWJ1dCA9IGFnZW5kYS50aW1lc3RhbXBEZWJ1dC5zdWJzdHIoMCwgMTApXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMubG9va3VwU2Vzc2lvbihkZWJ1dClcbiAgICBpZiAoc2Vzc2lvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IFwibmVlZHMtZml4aW5nXCIsIGluZm86IFtgJHtkZWJ1dH0gaXMgbm90IGluIGEgc2Vzc2lvbmBdIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcIm9rXCIsIGluZm86IFtcIlwiXSB9XG4gICAgfVxuICB9XG5cbiAgbWF5YmVVcGdyYWRlU2NoZW1hVmVyc2lvbihhZ2VuZGE6IGFueSkge1xuICAgIGlmIChhZ2VuZGEuc2NoZW1hVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gYWdlbmRhLnNjaGVtYVZlcnNpb24uc3BsaXQoXCItXCIpWzFdXG4gICAgICBpZiAodmVyc2lvbkNvbXBhcmUodmVyc2lvbiwgXCIxLjBcIikgPT0gMSkgcmV0dXJuXG4gICAgfVxuICAgIGFnZW5kYS5zY2hlbWFWZXJzaW9uID0gXCJhZ2VuZGEtMS4xXCJcbiAgfVxuXG4gIGFzeW5jIGZpeChhZ2VuZGE6IGFueSwgX2ZpbGVuYW1lOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCBzdGF0dXNcbiAgICBpZiAoXCJzZXNzaW9uUmVmXCIgaW4gYWdlbmRhKSB7XG4gICAgICAvLyBzZXNzaW9uUmVmIGlzIHVuZGVmaW5lZCBhbmQgbXVzdCBiZSByZW1vdmVkXG4gICAgICBkZWxldGUgYWdlbmRhLnNlc3Npb25SZWZcbiAgICAgIHN0YXR1cyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gc2Vzc2lvblJlZiB0byByZW1vdmUsIGZpbGUgd2hpY2ggaXMgbm90IGluIHNjb3BlIGRvZXMgbm90IG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gICAgICBzdGF0dXMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmluU2NvcGUoYWdlbmRhKSkgcmV0dXJuIHN0YXR1c1xuXG4gICAgaWYgKFwic2Vzc2lvblwiIGluIGFnZW5kYSkgZGVsZXRlIGFnZW5kYS5zZXNzaW9uXG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5sb29rdXBTZXNzaW9uKGFnZW5kYS50aW1lc3RhbXBEZWJ1dC5zdWJzdHIoMCwgMTApKVxuICAgIGlmIChzZXNzaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIGFnZW5kYS5zZXNzaW9uID0gc2Vzc2lvblxuICAgICAgdGhpcy5tYXliZVVwZ3JhZGVTY2hlbWFWZXJzaW9uKGFnZW5kYSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBT0EsY0FBUCxNQUEyQixzQkFBM0I7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLFlBQWxCO1NBQ1NDLFUsNkJBRVQ7O0FBQ0EsTUFBTUMsR0FBRyxHQUNQLGluQkFERjs7QUFHQSxTQUFTQyxhQUFULENBQXVCQyxDQUF2QixFQUFrQ0MsQ0FBbEMsRUFBNkM7RUFDM0MsSUFBSUQsQ0FBQyxHQUFHQyxDQUFSLEVBQVcsT0FBTyxDQUFD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
|
|
124
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ2ZXJzaW9uQ29tcGFyZSIsImZldGNoIiwiQmFzZVBsdWdpbiIsInVybCIsImNvbXBhcmVTdHJpbmciLCJhIiwiYiIsIlBsdWdpbiIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsInByZUZpeCIsInNldFNlc3Npb25zIiwicHJlQ2hlY2siLCJzZXNzaW9ucyIsImZldGNoU2Vzc2lvbnMiLCJzb3J0IiwibWFwIiwicyIsImxhYmVsIiwicmVwbGFjZSIsImRlYnV0Iiwic3Vic3RyIiwiZmluIiwiZ2V0IiwiaGVhZGVycyIsInJlc3BvbnNlIiwiQWNjZXB0Iiwib2siLCJwYXlsb2FkIiwianNvbiIsImxvb2t1cFNlc3Npb24iLCJtYXgiLCJsZW5ndGgiLCJtaW4iLCJoIiwibSIsImwiLCJzZXNzaW9uIiwiTWF0aCIsImZsb29yIiwiaW5TY29wZSIsImFnZW5kYSIsInhzaVR5cGUiLCJsaWV1IiwidW5kZWZpbmVkIiwiY29kZSIsImN5Y2xlRGVWaWUiLCJldGF0IiwiY2hlY2siLCJfZmlsZW5hbWUiLCJ0aW1lc3RhbXBEZWJ1dCIsInN0YXR1cyIsImluZm8iLCJtYXliZVVwZ3JhZGVTY2hlbWFWZXJzaW9uIiwic2NoZW1hVmVyc2lvbiIsInZlcnNpb24iLCJzcGxpdCIsImZpeCIsInNlc3Npb25SZWYiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVncy9hZ2VuZGEtMDAwMTEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHZlcnNpb25Db21wYXJlIGZyb20gXCJ0aW55LXZlcnNpb24tY29tcGFyZVwiXG5pbXBvcnQgZmV0Y2ggZnJvbSBcIm5vZGUtZmV0Y2hcIlxuaW1wb3J0IHsgQmFzZVBsdWdpbiB9IGZyb20gXCIuLi9idWdzXCJcblxuLy8gaHR0cHM6Ly93d3cud2lraWRhdGEub3JnL3dpa2kvV2lraWRhdGE6V2lraVByb2plY3RfRnJhbmNlL0Fzc2VtYmwlQzMlQTllX05hdGlvbmFsZSNMZWdpc2xhdGl2ZV9zZXNzaW9uXG5jb25zdCB1cmwgPVxuICBcImh0dHBzOi8vcXVlcnkud2lraWRhdGEub3JnL3NwYXJxbD9xdWVyeT1TRUxFQ1QlMjBESVNUSU5DVCUyMCUzRnNlc3Npb24lMjAlM0ZzdGFydF90aW1lJTIwJTNGZW5kX3RpbWUlMjAlM0ZsYWJlbCUyMCUzRmZvbGxvd3MlMjAlM0Zmb2xsb3dlZF9ieSUyMFdIRVJFJTIwJTdCJTBBJTBBJTIwJTIwJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVAzMSUyRndkdCUzQVAyNzkqJTIwd2QlM0FRODczMzc0ODEuJTBBJTIwJTIwJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVA1ODAlMjAlM0ZzdGFydF90aW1lLiUyMCUwQSUyMCUyMCUyME9QVElPTkFMJTIwJTdCJTIwJTNGc2Vzc2lvbiUyMHdkdCUzQVA1ODIlMjAlM0ZlbmRfdGltZSUyMCU3RC4lMEElMjAlMjAlMjBPUFRJT05BTCUyMCU3QiUyMCUzRnNlc3Npb24lMjB3ZHQlM0FQMTU1JTIwJTNGZm9sbG93cyUyMCU3RC4lMEElMjAlMjAlMjBPUFRJT05BTCUyMCU3QiUyMCUzRnNlc3Npb24lMjB3ZHQlM0FQMTU2JTIwJTNGZm9sbG93ZWRfYnklMjAlN0QuJTBBJTIwJTIwJTIwT1BUSU9OQUwlMjAlN0IlMjAlM0ZzZXNzaW9uJTIwcmRmcyUzQWxhYmVsJTIwJTNGbGFiZWwlMjBmaWx0ZXIlMjAobGFuZyglM0ZsYWJlbCklMjAlM0QlMjAlMjJmciUyMiklMjAuJTdEJTBBJTdEXCJcblxuZnVuY3Rpb24gY29tcGFyZVN0cmluZyhhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuICBpZiAoYSA8IGIpIHJldHVybiAtMVxuICBpZiAoYSA+IGIpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbmV4cG9ydCBjbGFzcyBQbHVnaW4gZXh0ZW5kcyBCYXNlUGx1Z2luIHtcbiAgc2Vzc2lvbnM6IGFueVxuICBmZXRjaDogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgc3VwZXIob3B0aW9ucywgXCJhZ2VuZGEtMDAwMTFcIilcbiAgICB0aGlzLmZldGNoID0gZmV0Y2hcbiAgfVxuXG4gIGFzeW5jIHByZUZpeCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnNldFNlc3Npb25zKClcbiAgfVxuXG4gIGFzeW5jIHByZUNoZWNrKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U2Vzc2lvbnMoKVxuICB9XG5cbiAgYXN5bmMgc2V0U2Vzc2lvbnMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZXNzaW9ucyA9IChhd2FpdCB0aGlzLmZldGNoU2Vzc2lvbnMoKSkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICBjb21wYXJlU3RyaW5nKGFbXCJzdGFydF90aW1lXCJdW1widmFsdWVcIl0sIGJbXCJzdGFydF90aW1lXCJdW1widmFsdWVcIl0pLFxuICAgIClcbiAgICB0aGlzLnNlc3Npb25zID0gc2Vzc2lvbnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBzW1wibGFiZWxcIl1bXCJ2YWx1ZVwiXS5yZXBsYWNlKC9cXHMrZW4gZnJhbmNlL2ksIFwiXCIpLFxuICAgICAgICBkZWJ1dDogc1tcInN0YXJ0X3RpbWVcIl1bXCJ2YWx1ZVwiXS5zdWJzdHIoMCwgMTApLFxuICAgICAgICBmaW46IHNbXCJlbmRfdGltZVwiXVtcInZhbHVlXCJdLnN1YnN0cigwLCAxMCksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldCh1cmw6IHN0cmluZywgaGVhZGVyczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaCh1cmwsIGhlYWRlcnMpXG4gIH1cblxuICBhc3luYyBmZXRjaFNlc3Npb25zKCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldCh1cmwsIHtcbiAgICAgIGhlYWRlcnM6IHsgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9LFxuICAgIH0pXG4gICAgaWYgKCFyZXNwb25zZS5vaykgdGhyb3cgcmVzcG9uc2VcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgcmV0dXJuIHBheWxvYWRbXCJyZXN1bHRzXCJdW1wiYmluZGluZ3NcIl1cbiAgfVxuXG4gIGxvb2t1cFNlc3Npb24oZGVidXQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5zZXNzaW9ucy5sZW5ndGggLSAxXG4gICAgY29uc3QgbWluID0gMFxuICAgIGxldCBoID0gbWF4XG4gICAgbGV0IG1cbiAgICBsZXQgbCA9IG1pblxuICAgIGxldCBzZXNzaW9uXG4gICAgbGV0IG9rXG4gICAgZG8ge1xuICAgICAgbSA9IE1hdGguZmxvb3IoKGwgKyBoKSAvIDIpXG4gICAgICBzZXNzaW9uID0gdGhpcy5zZXNzaW9uc1ttXVxuICAgICAgb2sgPSBzZXNzaW9uLmRlYnV0IDw9IGRlYnV0ICYmIGRlYnV0IDw9IHNlc3Npb24uZmluXG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIGlmIChsID09IG0gJiYgbSA9PSBoKVxuICAgICAgICAgIC8vIGluIGJldHdlZW4gc2Vzc2lvbnNcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICBpZiAoZGVidXQgPCBzZXNzaW9uLmRlYnV0KSB7XG4gICAgICAgICAgaWYgKG0gPD0gbWluKSByZXR1cm4gbnVsbFxuICAgICAgICAgIGggPSBtXG4gICAgICAgIH0gZWxzZSBpZiAoZGVidXQgPiBzZXNzaW9uLmZpbikge1xuICAgICAgICAgIGlmIChtID49IG1heCkgcmV0dXJuIG51bGxcbiAgICAgICAgICBsID0gbCA9PSBtID8gaCA6IG1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKCFvaylcbiAgICByZXR1cm4gc2Vzc2lvblxuICB9XG5cbiAgaW5TY29wZShhZ2VuZGE6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGFnZW5kYS54c2lUeXBlICE9IFwic2VhbmNlX3R5cGVcIiB8fFxuICAgICAgKGFnZW5kYS5saWV1ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkNHXCIgJiZcbiAgICAgICAgYWdlbmRhLmxpZXUuY29kZSAhPSBcIkFOXCIpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgaWYgKGFnZW5kYS5jeWNsZURlVmllLmV0YXQgIT0gXCJDb25maXJtw6lcIikgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIGNoZWNrKGFnZW5kYTogYW55LCBfZmlsZW5hbWU6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKCF0aGlzLmluU2NvcGUoYWdlbmRhKSkgcmV0dXJuIG51bGxcbiAgICBjb25zdCBkZWJ1dCA9IGFnZW5kYS50aW1lc3RhbXBEZWJ1dC5zdWJzdHIoMCwgMTApXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMubG9va3VwU2Vzc2lvbihkZWJ1dClcbiAgICBpZiAoc2Vzc2lvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IFwibmVlZHMtZml4aW5nXCIsIGluZm86IFtgJHtkZWJ1dH0gaXMgbm90IGluIGEgc2Vzc2lvbmBdIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcIm9rXCIsIGluZm86IFtcIlwiXSB9XG4gICAgfVxuICB9XG5cbiAgbWF5YmVVcGdyYWRlU2NoZW1hVmVyc2lvbihhZ2VuZGE6IGFueSkge1xuICAgIGlmIChhZ2VuZGEuc2NoZW1hVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB2ZXJzaW9uID0gYWdlbmRhLnNjaGVtYVZlcnNpb24uc3BsaXQoXCItXCIpWzFdXG4gICAgICBpZiAodmVyc2lvbkNvbXBhcmUodmVyc2lvbiwgXCIxLjBcIikgPT0gMSkgcmV0dXJuXG4gICAgfVxuICAgIGFnZW5kYS5zY2hlbWFWZXJzaW9uID0gXCJhZ2VuZGEtMS4xXCJcbiAgfVxuXG4gIGFzeW5jIGZpeChhZ2VuZGE6IGFueSwgX2ZpbGVuYW1lOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCBzdGF0dXNcbiAgICBpZiAoXCJzZXNzaW9uUmVmXCIgaW4gYWdlbmRhKSB7XG4gICAgICAvLyBzZXNzaW9uUmVmIGlzIHVuZGVmaW5lZCBhbmQgbXVzdCBiZSByZW1vdmVkXG4gICAgICBkZWxldGUgYWdlbmRhLnNlc3Npb25SZWZcbiAgICAgIHN0YXR1cyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gc2Vzc2lvblJlZiB0byByZW1vdmUsIGZpbGUgd2hpY2ggaXMgbm90IGluIHNjb3BlIGRvZXMgbm90IG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gICAgICBzdGF0dXMgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmluU2NvcGUoYWdlbmRhKSkgcmV0dXJuIHN0YXR1c1xuXG4gICAgaWYgKFwic2Vzc2lvblwiIGluIGFnZW5kYSkgZGVsZXRlIGFnZW5kYS5zZXNzaW9uXG5cbiAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5sb29rdXBTZXNzaW9uKGFnZW5kYS50aW1lc3RhbXBEZWJ1dC5zdWJzdHIoMCwgMTApKVxuICAgIGlmIChzZXNzaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIGFnZW5kYS5zZXNzaW9uID0gc2Vzc2lvblxuICAgICAgdGhpcy5tYXliZVVwZ3JhZGVTY2hlbWFWZXJzaW9uKGFnZW5kYSlcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPQSxjQUFjLE1BQU0sc0JBQXNCO0FBQ2pELE9BQU9DLEtBQUssTUFBTSxZQUFZO0FBQUEsU0FDckJDLFVBQVUsNkJBRW5CO0FBQ0EsTUFBTUMsR0FBRyxHQUNQLGluQkFBaW5CO0FBRW5uQixTQUFTQyxhQUFhLENBQUNDLENBQVMsRUFBRUMsQ0FBUyxFQUFFO0VBQzNDLElBQUlELENBQUMsR0FBR0MsQ0FBQyxFQUFFLE9BQU8s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
|